Translated ['src/README.md'] to af

This commit is contained in:
Translator
2025-01-03 11:37:34 +00:00
parent 715fde3c2d
commit d7fc052d87
6 changed files with 86 additions and 52 deletions

View File

@@ -69,6 +69,12 @@ def ref(matchobj):
return result return result
def add_read_time(content):
regex = r'(# .*(?=\n))'
new_content = re.sub(regex, lambda x: x.group(0) + "\n\nReading time: {{ #reading_time }}", content)
return new_content
def iterate_chapters(sections): def iterate_chapters(sections):
if isinstance(sections, dict) and "PartTitle" in sections: # Not a chapter section if isinstance(sections, dict) and "PartTitle" in sections: # Not a chapter section
return return
@@ -93,12 +99,12 @@ if __name__ == '__main__':
logger.debug(f"Context: {context}") logger.debug(f"Context: {context}")
for chapter in iterate_chapters(book['sections']): for chapter in iterate_chapters(book['sections']):
logger.debug(f"Chapter: {chapter['path']}") logger.debug(f"Chapter: {chapter['path']}")
current_chapter = chapter current_chapter = chapter
regex = r'{{[\s]*#ref[\s]*}}(?:\n)?([^\\\n]*)(?:\n)?{{[\s]*#endref[\s]*}}' regex = r'{{[\s]*#ref[\s]*}}(?:\n)?([^\\\n]*)(?:\n)?{{[\s]*#endref[\s]*}}'
new_content = re.sub(regex, ref, chapter['content']) new_content = re.sub(regex, ref, chapter['content'])
new_content = add_read_time(new_content)
chapter['content'] = new_content chapter['content'] = new_content
content = json.dumps(book) content = json.dumps(book)

View File

@@ -1,7 +1,5 @@
# HackTricks Cloud # HackTricks Cloud
Reading time: {{ #reading_time }}
{{#include ./banners/hacktricks-training.md}} {{#include ./banners/hacktricks-training.md}}
<figure><img src="images/cloud.gif" alt=""><figcaption></figcaption></figure> <figure><img src="images/cloud.gif" alt=""><figcaption></figcaption></figure>
@@ -9,7 +7,7 @@ Reading time: {{ #reading_time }}
_Hacktricks logo's & bewegingsontwerp deur_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_._ _Hacktricks logo's & bewegingsontwerp deur_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_._
> [!TIP] > [!TIP]
> Welkom op die bladsy waar jy elke **hacking trick/technique/whatever related to CI/CD & Cloud** sal vind wat ek geleer het in **CTFs**, **werklike** lewe **omgewings**, **navorsing**, en **lees** navorsings en nuus. > Welkom op die bladsy waar jy elke **hacking trick/technique/whatever verwant aan CI/CD & Cloud** sal vind wat ek geleer het in **CTFs**, **werklike** lewe **omgewings**, **navorsing**, en **lees** navorsings en nuus.
### **Pentesting CI/CD Metodologie** ### **Pentesting CI/CD Metodologie**
@@ -31,6 +29,6 @@ _Hacktricks logo's & bewegingsontwerp deur_ [_@ppiernacho_](https://www.instagra
### Github Statistieke ### Github Statistieke
![HackTricks Cloud Github Stats](https://repobeats.axiom.co/api/embed/1dfdbb0435f74afa9803cd863f01daac17cda336.svg) ![HackTricks Cloud Github Statistieke](https://repobeats.axiom.co/api/embed/1dfdbb0435f74afa9803cd863f01daac17cda336.svg)
{{#include ./banners/hacktricks-training.md}} {{#include ./banners/hacktricks-training.md}}

4
src/robots.txt Normal file
View File

@@ -0,0 +1,4 @@
Sitemap: https://www.hacktricks.wiki/sitemap.xml
User-agent: *
Disallow:

View File

@@ -182,6 +182,13 @@ body.sidebar-visible #menu-bar {
} }
/* Languages Menu Popup */ /* Languages Menu Popup */
@media only screen and (max-width:799px) {
#menubar-languages-toggle span {
display: none !important;
}
}
#menubar-languages-toggle { #menubar-languages-toggle {
position: relative; position: relative;
} }
@@ -243,6 +250,11 @@ html:not(.js) .left-buttons button {
cursor: pointer; cursor: pointer;
color: var(--fg); color: var(--fg);
} }
@media only screen and (max-width:799px) {
.menu-title {
font-size: 1.4rem;
}
}
.menu-bar, .menu-bar,
.menu-bar:visited, .menu-bar:visited,
@@ -632,6 +644,11 @@ ul#searchresults li a span.teaser em {
color: var(--sidebar-fg); color: var(--sidebar-fg);
} }
} }
@media only screen and (min-width:1440px) {
#sidebar-toggle{
display: none !important;
}
}
@media only screen and (max-width:549px) { @media only screen and (max-width:549px) {
.sidebar { .sidebar {
position: fixed; position: fixed;

View File

@@ -176,10 +176,12 @@
<div id="menubar-languages-toggle" class="icon-button" type="button" title="Translations" aria-label="Toggle Tanslations" aria-expanded="false" aria-controls="translations"> <div id="menubar-languages-toggle" class="icon-button" type="button" title="Translations" aria-label="Toggle Tanslations" aria-expanded="false" aria-controls="translations">
<i class="fa fa-globe"></i> <i class="fa fa-globe"></i>
<span class="menu-bar-link">Translations</span>
<div id="menubar-languages-popup" class="menubar-languages-popup" aria-label="Language menu" role="language menu"> <div id="menubar-languages-popup" class="menubar-languages-popup" aria-label="Language menu" role="language menu">
<button id="af" role="menuitem" class="menu-bar-link">Afrikaans</button>
<button id="zh" role="menuitem" class="menu-bar-link">Chinese</button>
<button id="en" role="menuitem" class="menu-bar-link">English</button> <button id="en" role="menuitem" class="menu-bar-link">English</button>
<button id="es" role="menuitem" class="menu-bar-link">Spanish</button>
<button id="fr" role="menuitem" class="menu-bar-link">French</button> <button id="fr" role="menuitem" class="menu-bar-link">French</button>
<button id="de" role="menuitem" class="menu-bar-link">German</button> <button id="de" role="menuitem" class="menu-bar-link">German</button>
<button id="el" role="menuitem" class="menu-bar-link">Greek</button> <button id="el" role="menuitem" class="menu-bar-link">Greek</button>
@@ -190,11 +192,10 @@
<button id="pl" role="menuitem" class="menu-bar-link">Polish</button> <button id="pl" role="menuitem" class="menu-bar-link">Polish</button>
<button id="pt" role="menuitem" class="menu-bar-link">Portuguese</button> <button id="pt" role="menuitem" class="menu-bar-link">Portuguese</button>
<button id="sr" role="menuitem" class="menu-bar-link">Serbian</button> <button id="sr" role="menuitem" class="menu-bar-link">Serbian</button>
<button id="es" role="menuitem" class="menu-bar-link">Spanish</button>
<button id="sw" role="menuitem" class="menu-bar-link">Swahili</button> <button id="sw" role="menuitem" class="menu-bar-link">Swahili</button>
<button id="tr" role="menuitem" class="menu-bar-link">Turkish</button> <button id="tr" role="menuitem" class="menu-bar-link">Turkish</button>
<button id="uk" role="menuitem" class="menu-bar-link">Ukrainian</button> <button id="uk" role="menuitem" class="menu-bar-link">Ukrainian</button>
<button id="af" role="menuitem" class="menu-bar-link">Afrikaans</button>
<button id="zh" role="menuitem" class="menu-bar-link">Chinese</button>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -1,68 +1,76 @@
let scrollTimeout; let scrollTimeout
const listenActive = () => { const listenActive = () => {
const elems = document.querySelector(".pagetoc").children; const elems = document.querySelector(".pagetoc").children
[...elems].forEach(el => { ;[...elems].forEach((el) => {
el.addEventListener("click", (event) => { el.addEventListener("click", (event) => {
clearTimeout(scrollTimeout); clearTimeout(scrollTimeout)
[...elems].forEach(el => el.classList.remove("active")); ;[...elems].forEach((el) => el.classList.remove("active"))
el.classList.add("active"); el.classList.add("active")
// Prevent scroll updates for a short period // Prevent scroll updates for a short period
scrollTimeout = setTimeout(() => { scrollTimeout = setTimeout(() => {
scrollTimeout = null; scrollTimeout = null
}, 100); // Adjust timing as needed }, 100) // Adjust timing as needed
}); })
}); })
}; }
const getPagetoc = () => document.querySelector(".pagetoc") || autoCreatePagetoc(); const getPagetoc = () =>
document.querySelector(".pagetoc") || autoCreatePagetoc()
const autoCreatePagetoc = () => { const autoCreatePagetoc = () => {
const main = document.querySelector("#content > main"); const main = document.querySelector("#content > main")
const content = Object.assign(document.createElement("div"), { const content = Object.assign(document.createElement("div"), {
className: "content-wrap" className: "content-wrap",
}); })
content.append(...main.childNodes); content.append(...main.childNodes)
main.prepend(content); main.prepend(content)
main.insertAdjacentHTML("afterbegin", '<div class="sidetoc"><nav class="pagetoc"></nav></div>'); main.insertAdjacentHTML(
return document.querySelector(".pagetoc"); "afterbegin",
}; '<div class="sidetoc"><nav class="pagetoc"></nav></div>'
)
return document.querySelector(".pagetoc")
}
const updateFunction = () => { const updateFunction = () => {
if (scrollTimeout) return; // Skip updates if within the cooldown period from a click if (scrollTimeout) return // Skip updates if within the cooldown period from a click
const headers = [...document.getElementsByClassName("header")]; const headers = [...document.getElementsByClassName("header")]
const scrolledY = window.scrollY; const scrolledY = window.scrollY
let lastHeader = null; let lastHeader = null
// Find the last header that is above the current scroll position // Find the last header that is above the current scroll position
for (let i = headers.length - 1; i >= 0; i--) { for (let i = headers.length - 1; i >= 0; i--) {
if (scrolledY >= headers[i].offsetTop) { if (scrolledY >= headers[i].offsetTop) {
lastHeader = headers[i]; lastHeader = headers[i]
break; break
} }
} }
const pagetocLinks = [...document.querySelector(".pagetoc").children]; const pagetocLinks = [...document.querySelector(".pagetoc").children]
pagetocLinks.forEach(link => link.classList.remove("active")); pagetocLinks.forEach((link) => link.classList.remove("active"))
if (lastHeader) { if (lastHeader) {
const activeLink = pagetocLinks.find(link => lastHeader.href === link.href); const activeLink = pagetocLinks.find(
if (activeLink) activeLink.classList.add("active"); (link) => lastHeader.href === link.href
)
if (activeLink) activeLink.classList.add("active")
} }
}; }
window.addEventListener('load', () => { window.addEventListener("load", () => {
const pagetoc = getPagetoc(); const pagetoc = getPagetoc()
const headers = [...document.getElementsByClassName("header")]; const headers = [...document.getElementsByClassName("header")]
headers.forEach(header => { headers.forEach((header) => {
const link = Object.assign(document.createElement("a"), { const link = Object.assign(document.createElement("a"), {
textContent: header.text, textContent: header.text,
href: header.href, href: header.href,
className: `pagetoc-${header.parentElement.tagName}` className: `pagetoc-${header.parentElement.tagName}`,
}); })
pagetoc.appendChild(link); if (header.parentElement.querySelectorAll("a").length === 2) {
}); link.textContent = header.parentElement.querySelectorAll("a")[1].text
updateFunction(); }
listenActive(); pagetoc.appendChild(link)
window.addEventListener("scroll", updateFunction); })
}); updateFunction()
listenActive()
window.addEventListener("scroll", updateFunction)
})