From 78232d3f36dc1ef3d59276fa79fa984ce9ea4362 Mon Sep 17 00:00:00 2001 From: Congon4tor Date: Fri, 3 Jan 2025 01:46:36 +0100 Subject: [PATCH 1/3] Add robots.txt --- src/robots.txt | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 src/robots.txt diff --git a/src/robots.txt b/src/robots.txt new file mode 100644 index 0000000000..025b9346b4 --- /dev/null +++ b/src/robots.txt @@ -0,0 +1,4 @@ +Sitemap: https://www.hacktricks.wiki/sitemap.xml + +User-agent: * +Disallow: \ No newline at end of file From 098f393d35f6c3553b7cb8072609858896adebba Mon Sep 17 00:00:00 2001 From: Congon4tor Date: Fri, 3 Jan 2025 02:52:56 +0100 Subject: [PATCH 2/3] Add read time to all pages --- hacktricks-preprocessor.py | 8 +++++++- src/README.md | 6 ------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/hacktricks-preprocessor.py b/hacktricks-preprocessor.py index 37f5491011..d65d55a3fb 100644 --- a/hacktricks-preprocessor.py +++ b/hacktricks-preprocessor.py @@ -67,6 +67,12 @@ def ref(matchobj): 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): if isinstance(sections, dict) and "PartTitle" in sections: # Not a chapter section return @@ -91,12 +97,12 @@ def iterate_chapters(sections): logger.debug(f"Context: {context}") - for chapter in iterate_chapters(book['sections']): logger.debug(f"Chapter: {chapter['path']}") current_chapter = chapter regex = r'{{[\s]*#ref[\s]*}}(?:\n)?([^\\\n]*)(?:\n)?{{[\s]*#endref[\s]*}}' new_content = re.sub(regex, ref, chapter['content']) + new_content = add_read_time(new_content) chapter['content'] = new_content content = json.dumps(book) diff --git a/src/README.md b/src/README.md index 01b146fd1b..58f0348214 100644 --- a/src/README.md +++ b/src/README.md @@ -1,7 +1,5 @@ # HackTricks Cloud -Reading time: {{ #reading_time }} - {{#include ./banners/hacktricks-training.md}}
@@ -34,7 +32,3 @@ _Hacktricks logos & motion designed by_ [_@ppiernacho_](https://www.instagram.co ![HackTricks Cloud Github Stats](https://repobeats.axiom.co/api/embed/1dfdbb0435f74afa9803cd863f01daac17cda336.svg) {{#include ./banners/hacktricks-training.md}} - - - - From 804758840b1d7ee861f8dd20fcedac489b61ecbd Mon Sep 17 00:00:00 2001 From: Congon4tor Date: Fri, 3 Jan 2025 03:30:47 +0100 Subject: [PATCH 3/3] Fix page index with links --- theme/pagetoc.js | 96 ++++++++++++++++++++++++++---------------------- 1 file changed, 52 insertions(+), 44 deletions(-) diff --git a/theme/pagetoc.js b/theme/pagetoc.js index 5962db9f38..a51ea29ae8 100644 --- a/theme/pagetoc.js +++ b/theme/pagetoc.js @@ -1,68 +1,76 @@ -let scrollTimeout; +let scrollTimeout const listenActive = () => { - const elems = document.querySelector(".pagetoc").children; - [...elems].forEach(el => { + const elems = document.querySelector(".pagetoc").children + ;[...elems].forEach((el) => { el.addEventListener("click", (event) => { - clearTimeout(scrollTimeout); - [...elems].forEach(el => el.classList.remove("active")); - el.classList.add("active"); + clearTimeout(scrollTimeout) + ;[...elems].forEach((el) => el.classList.remove("active")) + el.classList.add("active") // Prevent scroll updates for a short period scrollTimeout = setTimeout(() => { - scrollTimeout = null; - }, 100); // Adjust timing as needed - }); - }); -}; + scrollTimeout = null + }, 100) // Adjust timing as needed + }) + }) +} -const getPagetoc = () => document.querySelector(".pagetoc") || autoCreatePagetoc(); +const getPagetoc = () => + document.querySelector(".pagetoc") || autoCreatePagetoc() const autoCreatePagetoc = () => { - const main = document.querySelector("#content > main"); + const main = document.querySelector("#content > main") const content = Object.assign(document.createElement("div"), { - className: "content-wrap" - }); - content.append(...main.childNodes); - main.prepend(content); - main.insertAdjacentHTML("afterbegin", '
'); - return document.querySelector(".pagetoc"); -}; + className: "content-wrap", + }) + content.append(...main.childNodes) + main.prepend(content) + main.insertAdjacentHTML( + "afterbegin", + '
' + ) + return document.querySelector(".pagetoc") +} const updateFunction = () => { - if (scrollTimeout) return; // Skip updates if within the cooldown period from a click - const headers = [...document.getElementsByClassName("header")]; - const scrolledY = window.scrollY; - let lastHeader = null; + if (scrollTimeout) return // Skip updates if within the cooldown period from a click + const headers = [...document.getElementsByClassName("header")] + const scrolledY = window.scrollY + let lastHeader = null // Find the last header that is above the current scroll position for (let i = headers.length - 1; i >= 0; i--) { if (scrolledY >= headers[i].offsetTop) { - lastHeader = headers[i]; - break; + lastHeader = headers[i] + break } } - const pagetocLinks = [...document.querySelector(".pagetoc").children]; - pagetocLinks.forEach(link => link.classList.remove("active")); + const pagetocLinks = [...document.querySelector(".pagetoc").children] + pagetocLinks.forEach((link) => link.classList.remove("active")) if (lastHeader) { - const activeLink = pagetocLinks.find(link => lastHeader.href === link.href); - if (activeLink) activeLink.classList.add("active"); + const activeLink = pagetocLinks.find( + (link) => lastHeader.href === link.href + ) + if (activeLink) activeLink.classList.add("active") } -}; +} -window.addEventListener('load', () => { - const pagetoc = getPagetoc(); - const headers = [...document.getElementsByClassName("header")]; - headers.forEach(header => { +window.addEventListener("load", () => { + const pagetoc = getPagetoc() + const headers = [...document.getElementsByClassName("header")] + headers.forEach((header) => { const link = Object.assign(document.createElement("a"), { textContent: header.text, href: header.href, - className: `pagetoc-${header.parentElement.tagName}` - }); - pagetoc.appendChild(link); - }); - updateFunction(); - listenActive(); - window.addEventListener("scroll", updateFunction); -}); - + className: `pagetoc-${header.parentElement.tagName}`, + }) + if (header.parentElement.querySelectorAll("a").length === 2) { + link.textContent = header.parentElement.querySelectorAll("a")[1].text + } + pagetoc.appendChild(link) + }) + updateFunction() + listenActive() + window.addEventListener("scroll", updateFunction) +})