diff --git a/README.md b/README.md index 172a29b..f3c7f7b 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,6 @@ Easily share code and text. **Setup:** - Clone - Copy `config.template.toml` into `config.toml` - - For local testing `[SERVER] > domain` can be set to `http://localhost:PORT` (Default Port `8181`) - Set Database connection DSN. - Optionally set URLs to a running Redis Instance. - ! If you haven't already: Create a Database in `postgres` (Default `mystbin`) diff --git a/config.template.toml b/config.template.toml index 860da18..939b932 100644 --- a/config.template.toml +++ b/config.template.toml @@ -1,7 +1,6 @@ [SERVER] host = "localhost" port = 8181 -domain = "https://mystb.in" session_secret = "" # Run: import secrets; print(secrets.token_urlsafe(64)) maintenance = false diff --git a/views/api.py b/views/api.py index 8527033..ba0d583 100644 --- a/views/api.py +++ b/views/api.py @@ -302,8 +302,8 @@ async def security_info(self, request: starlette_plus.Request) -> starlette_plus status_code=404, ) - delete: str = f"{CONFIG['SERVER']['domain']}/api/security/delete/{token}" - info: str = f"{CONFIG['SERVER']['domain']}/api/security/info/{token}" + delete: str = f"{request.url.scheme}://{request.url.hostname}/api/security/delete/{token}" + info: str = f"{request.url.scheme}://{request.url.hostname}/api/security/info/{token}" data: dict[str, str] = { "token": paste.safety, "delete": delete, diff --git a/views/htmx.py b/views/htmx.py index 336774e..d9c42ea 100644 --- a/views/htmx.py +++ b/views/htmx.py @@ -225,7 +225,7 @@ async def paste_raw(self, request: starlette_plus.Request) -> starlette_plus.Res htmx_url: str | None = request.headers.get("HX-Current-URL", None) if identifier == "0" and htmx_url: - identifier = htmx_url.removeprefix(f'{CONFIG["SERVER"]["domain"]}/') + identifier = htmx_url.removeprefix(f"{request.url.scheme}://{request.url.hostname}/") headers: dict[str, str] = {"HX-Redirect": f"/raw/{identifier}"} paste = await self.app.database.fetch_paste(identifier, password=password) diff --git a/web/password.html b/web/password.html index 4268b5e..f5e69c9 100644 --- a/web/password.html +++ b/web/password.html @@ -17,6 +17,7 @@ + diff --git a/web/paste.html b/web/paste.html index 64ee369..fe9f7bd 100644 --- a/web/paste.html +++ b/web/paste.html @@ -16,6 +16,7 @@ + diff --git a/web/static/scripts/highlights.js b/web/static/scripts/highlights.js index 6aa5517..24c4aee 100644 --- a/web/static/scripts/highlights.js +++ b/web/static/scripts/highlights.js @@ -6,11 +6,22 @@ let DlCount = 0; for (let area of HIGHLIGHT_AREAS) { let code = area.querySelector("pre > code"); + let name = area.querySelector(".pasteHeader > div > .filenameArea"); + pasteStores.push(code.textContent); // Highlight Code Block and get Language Details... - let details = hljs.highlightAuto(code.textContent); - let highlightedLang = details.language ? details.language : "plaintext"; + let nameLang = getLangByName(name.textContent); + let highlightedLang; + let details; + + if (!nameLang) { + details = hljs.highlightAuto(code.textContent); + highlightedLang = details.language || "plaintext"; + } else { + details = hljs.highlight(code.textContent, { "language": nameLang }) + highlightedLang = nameLang.toLowerCase(); + } code.innerHTML = details.value; diff --git a/web/static/scripts/highlightsHTMX.js b/web/static/scripts/highlightsHTMX.js index a8e12fc..421c90c 100644 --- a/web/static/scripts/highlightsHTMX.js +++ b/web/static/scripts/highlightsHTMX.js @@ -14,11 +14,21 @@ document.addEventListener("htmx:afterRequest", function (evt) { for (let area of HIGHLIGHT_AREAS) { let code = area.querySelector("pre > code"); + let name = area.querySelector(".pasteHeader > div > .filenameArea"); pasteStores.push(code.textContent); // Highlight Code Block and get Language Details... - let details = hljs.highlightAuto(code.textContent); - let highlightedLang = details.language ? details.language : "plaintext"; + let nameLang = getLangByName(name.textContent); + let highlightedLang; + let details; + + if (!nameLang) { + details = hljs.highlightAuto(code.textContent); + highlightedLang = details.language || "plaintext"; + } else { + details = hljs.highlight(code.textContent, { "language": nameLang }) + highlightedLang = nameLang.toLowerCase(); + } code.innerHTML = details.value; diff --git a/web/static/scripts/utils.js b/web/static/scripts/utils.js new file mode 100644 index 0000000..0ac8b22 --- /dev/null +++ b/web/static/scripts/utils.js @@ -0,0 +1,14 @@ +function getLangByName(name) { + splat = name.split("."); + if (splat.length <= 1) { + return null + } + + ext = splat[splat.length - 1]; + lang = hljs.getLanguage(ext); + + if (!lang) { + return null + } + return lang.name; +} \ No newline at end of file