diff --git a/hacktricks-preprocessor.py b/hacktricks-preprocessor.py index 8e67ab77b..7a4dd84a1 100644 --- a/hacktricks-preprocessor.py +++ b/hacktricks-preprocessor.py @@ -69,6 +69,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 @@ -93,12 +99,12 @@ if __name__ == '__main__': 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 1b1968d09..8277678e5 100644 --- a/src/README.md +++ b/src/README.md @@ -1,7 +1,5 @@ # HackTricks Cloud -Tempo de leitura: {{ #reading_time }} - {{#include ./banners/hacktricks-training.md}}
diff --git a/src/robots.txt b/src/robots.txt new file mode 100644 index 000000000..025b9346b --- /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 diff --git a/theme/css/chrome.css b/theme/css/chrome.css index 17e541163..4fc0b2a71 100644 --- a/theme/css/chrome.css +++ b/theme/css/chrome.css @@ -182,6 +182,13 @@ body.sidebar-visible #menu-bar { } /* Languages Menu Popup */ + +@media only screen and (max-width:799px) { + #menubar-languages-toggle span { + display: none !important; + } +} + #menubar-languages-toggle { position: relative; } @@ -243,6 +250,11 @@ html:not(.js) .left-buttons button { cursor: pointer; color: var(--fg); } +@media only screen and (max-width:799px) { + .menu-title { + font-size: 1.4rem; + } +} .menu-bar, .menu-bar:visited, @@ -632,6 +644,11 @@ ul#searchresults li a span.teaser em { color: var(--sidebar-fg); } } +@media only screen and (min-width:1440px) { + #sidebar-toggle{ + display: none !important; + } +} @media only screen and (max-width:549px) { .sidebar { position: fixed; diff --git a/theme/index.hbs b/theme/index.hbs index 419bb6e7a..683ea99c1 100644 --- a/theme/index.hbs +++ b/theme/index.hbs @@ -176,10 +176,12 @@ diff --git a/theme/pagetoc.js b/theme/pagetoc.js index 5962db9f3..a51ea29ae 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) +})