-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Deployed 577b78d with MkDocs version: 1.5.3
- Loading branch information
Unknown
committed
Oct 18, 2023
0 parents
commit 0774c47
Showing
78 changed files
with
30,153 additions
and
0 deletions.
There are no files selected for viewing
Empty file.
Large diffs are not rendered by default.
Oops, something went wrong.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,180 @@ | ||
const div = document.querySelector('.github-topic-projects') | ||
|
||
async function getDataBatch(page) { | ||
const response = await fetch(`https://api.github.com/search/repositories?q=topic:fastapi&per_page=100&page=${page}`, { headers: { Accept: 'application/vnd.github.mercy-preview+json' } }) | ||
const data = await response.json() | ||
return data | ||
} | ||
|
||
async function getData() { | ||
let page = 1 | ||
let data = [] | ||
let dataBatch = await getDataBatch(page) | ||
data = data.concat(dataBatch.items) | ||
const totalCount = dataBatch.total_count | ||
while (data.length < totalCount) { | ||
page += 1 | ||
dataBatch = await getDataBatch(page) | ||
data = data.concat(dataBatch.items) | ||
} | ||
return data | ||
} | ||
|
||
function setupTermynal() { | ||
document.querySelectorAll(".use-termynal").forEach(node => { | ||
node.style.display = "block"; | ||
new Termynal(node, { | ||
lineDelay: 500 | ||
}); | ||
}); | ||
const progressLiteralStart = "---> 100%"; | ||
const promptLiteralStart = "$ "; | ||
const customPromptLiteralStart = "# "; | ||
const termynalActivateClass = "termy"; | ||
let termynals = []; | ||
|
||
function createTermynals() { | ||
document | ||
.querySelectorAll(`.${termynalActivateClass} .highlight`) | ||
.forEach(node => { | ||
const text = node.textContent; | ||
const lines = text.split("\n"); | ||
const useLines = []; | ||
let buffer = []; | ||
function saveBuffer() { | ||
if (buffer.length) { | ||
let isBlankSpace = true; | ||
buffer.forEach(line => { | ||
if (line) { | ||
isBlankSpace = false; | ||
} | ||
}); | ||
dataValue = {}; | ||
if (isBlankSpace) { | ||
dataValue["delay"] = 0; | ||
} | ||
if (buffer[buffer.length - 1] === "") { | ||
// A last single <br> won't have effect | ||
// so put an additional one | ||
buffer.push(""); | ||
} | ||
const bufferValue = buffer.join("<br>"); | ||
dataValue["value"] = bufferValue; | ||
useLines.push(dataValue); | ||
buffer = []; | ||
} | ||
} | ||
for (let line of lines) { | ||
if (line === progressLiteralStart) { | ||
saveBuffer(); | ||
useLines.push({ | ||
type: "progress" | ||
}); | ||
} else if (line.startsWith(promptLiteralStart)) { | ||
saveBuffer(); | ||
const value = line.replace(promptLiteralStart, "").trimEnd(); | ||
useLines.push({ | ||
type: "input", | ||
value: value | ||
}); | ||
} else if (line.startsWith("// ")) { | ||
saveBuffer(); | ||
const value = "💬 " + line.replace("// ", "").trimEnd(); | ||
useLines.push({ | ||
value: value, | ||
class: "termynal-comment", | ||
delay: 0 | ||
}); | ||
} else if (line.startsWith(customPromptLiteralStart)) { | ||
saveBuffer(); | ||
const promptStart = line.indexOf(promptLiteralStart); | ||
if (promptStart === -1) { | ||
console.error("Custom prompt found but no end delimiter", line) | ||
} | ||
const prompt = line.slice(0, promptStart).replace(customPromptLiteralStart, "") | ||
let value = line.slice(promptStart + promptLiteralStart.length); | ||
useLines.push({ | ||
type: "input", | ||
value: value, | ||
prompt: prompt | ||
}); | ||
} else { | ||
buffer.push(line); | ||
} | ||
} | ||
saveBuffer(); | ||
const div = document.createElement("div"); | ||
node.replaceWith(div); | ||
const termynal = new Termynal(div, { | ||
lineData: useLines, | ||
noInit: true, | ||
lineDelay: 500 | ||
}); | ||
termynals.push(termynal); | ||
}); | ||
} | ||
|
||
function loadVisibleTermynals() { | ||
termynals = termynals.filter(termynal => { | ||
if (termynal.container.getBoundingClientRect().top - innerHeight <= 0) { | ||
termynal.init(); | ||
return false; | ||
} | ||
return true; | ||
}); | ||
} | ||
window.addEventListener("scroll", loadVisibleTermynals); | ||
createTermynals(); | ||
loadVisibleTermynals(); | ||
} | ||
|
||
function shuffle(array) { | ||
var currentIndex = array.length, temporaryValue, randomIndex; | ||
while (0 !== currentIndex) { | ||
randomIndex = Math.floor(Math.random() * currentIndex); | ||
currentIndex -= 1; | ||
temporaryValue = array[currentIndex]; | ||
array[currentIndex] = array[randomIndex]; | ||
array[randomIndex] = temporaryValue; | ||
} | ||
return array; | ||
} | ||
|
||
async function showRandomAnnouncement(groupId, timeInterval) { | ||
const announceFastAPI = document.getElementById(groupId); | ||
if (announceFastAPI) { | ||
let children = [].slice.call(announceFastAPI.children); | ||
children = shuffle(children) | ||
let index = 0 | ||
const announceRandom = () => { | ||
children.forEach((el, i) => {el.style.display = "none"}); | ||
children[index].style.display = "block" | ||
index = (index + 1) % children.length | ||
} | ||
announceRandom() | ||
setInterval(announceRandom, timeInterval | ||
) | ||
} | ||
} | ||
|
||
async function main() { | ||
if (div) { | ||
data = await getData() | ||
div.innerHTML = '<ul></ul>' | ||
const ul = document.querySelector('.github-topic-projects ul') | ||
data.forEach(v => { | ||
if (v.full_name === 'tiangolo/fastapi') { | ||
return | ||
} | ||
const li = document.createElement('li') | ||
li.innerHTML = `<a href="${v.html_url}" target="_blank">★ ${v.stargazers_count} - ${v.full_name}</a> by <a href="${v.owner.html_url}" target="_blank">@${v.owner.login}</a>` | ||
ul.append(li) | ||
}) | ||
} | ||
|
||
setupTermynal(); | ||
showRandomAnnouncement('announce-left', 5000) | ||
showRandomAnnouncement('announce-right', 10000) | ||
} | ||
|
||
main() |
Large diffs are not rendered by default.
Oops, something went wrong.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
Oops, something went wrong.