This commit is contained in:
velzie 2024-07-14 19:17:49 -04:00
parent 4b0337db0c
commit 55b6666229
No known key found for this signature in database
GPG key ID: 048413F95F0DDE1F
43 changed files with 4693 additions and 2712 deletions

View file

@ -2,45 +2,57 @@ import { URL } from "../../client/url";
import { rewriteJs } from "./js";
function canParseUrl(url: string, origin?: URL) {
try {
new URL(url, origin);
try {
new URL(url, origin);
return true;
} catch {
return false;
}
return true;
} catch {
return false;
}
}
// something is broken with this but i didn't debug it
export function encodeUrl(url: string | URL, origin?: URL) {
if (url instanceof URL) {
return url.toString();
}
if (url instanceof URL) {
return url.toString();
}
if (!origin) {
origin = new URL(self.$scramjet.config.codec.decode(location.href.slice((location.origin + self.$scramjet.config.prefix).length)));
}
if (!origin) {
origin = new URL(
self.$scramjet.config.codec.decode(
location.href.slice(
(location.origin + self.$scramjet.config.prefix).length,
),
),
);
}
if (url.startsWith("javascript:")) {
return "javascript:" + rewriteJs(url.slice("javascript:".length));
} else if (/^(#|mailto|about|data)/.test(url)) {
return url;
} else if (canParseUrl(url, origin)) {
return location.origin + self.$scramjet.config.prefix + self.$scramjet.config.codec.encode(new URL(url, origin).href);
}
if (url.startsWith("javascript:")) {
return "javascript:" + rewriteJs(url.slice("javascript:".length));
} else if (/^(#|mailto|about|data)/.test(url)) {
return url;
} else if (canParseUrl(url, origin)) {
return (
location.origin +
self.$scramjet.config.prefix +
self.$scramjet.config.codec.encode(new URL(url, origin).href)
);
}
}
// something is also broken with this but i didn't debug it
export function decodeUrl(url: string | URL) {
if (url instanceof URL) {
return url.toString();
}
if (url instanceof URL) {
return url.toString();
}
if (/^(#|about|data|mailto|javascript)/.test(url)) {
return url;
} else if (canParseUrl(url)) {
return self.$scramjet.config.codec.decode(url.slice((location.origin + self.$scramjet.config.prefix).length))
} else {
return url;
}
if (/^(#|about|data|mailto|javascript)/.test(url)) {
return url;
} else if (canParseUrl(url)) {
return self.$scramjet.config.codec.decode(
url.slice((location.origin + self.$scramjet.config.prefix).length),
);
} else {
return url;
}
}