Compare commits
3 Commits
addaade269
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5470ba1298 | ||
|
|
13fae1c23f | ||
|
|
21719a6cf7 |
@@ -55,9 +55,9 @@ air dev
|
||||
|
||||
## TODO
|
||||
|
||||
- implement templating for every one of the frontend files
|
||||
- implement functionality to clear and clean cache
|
||||
- implement fetching in intervals
|
||||
- host this website on a demo page
|
||||
- host this website on a demo page
|
||||
- implement ctl
|
||||
- implement autocomplete with a nice go backend and fast communication. Since it all runs locally nobody should have privacy concerns NEEDS TO BE ABLE TO TOGGLED OFF FOR DEMO PAGE
|
||||
|
||||
|
||||
17
demo.toml
Normal file
17
demo.toml
Normal file
@@ -0,0 +1,17 @@
|
||||
[Server]
|
||||
Port = 1312
|
||||
|
||||
[DiyHrt]
|
||||
FetchIntervals = 60
|
||||
|
||||
[Template]
|
||||
ActiveCard = "listings"
|
||||
PageTitle = "TransfemStartpage demo"
|
||||
HeaderPhrases = [
|
||||
"GirlJuice.Inject();",
|
||||
"You.Cute = true;",
|
||||
"You.Gay = true;",
|
||||
"Nazi.Punch();",
|
||||
"Dolls.GiveGuns();",
|
||||
"Firefox > Chrome"
|
||||
]
|
||||
@@ -49,16 +49,6 @@ body {
|
||||
color: black;
|
||||
}
|
||||
|
||||
@media (max-height: 300px) {
|
||||
.search-grid {
|
||||
grid-template-rows: 4em;
|
||||
}
|
||||
|
||||
.search-logo {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.cards {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
@@ -70,6 +60,20 @@ body {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
@media (max-height: 500px) {
|
||||
.search-grid {
|
||||
grid-template-rows: 4em;
|
||||
}
|
||||
|
||||
.search-logo {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.cards {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.card {
|
||||
background-color: rgba(255, 255, 255, 0.5);
|
||||
width: 10em;
|
||||
@@ -97,7 +101,6 @@ body {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
|
||||
.card-image {
|
||||
height: 100%;
|
||||
aspect-ratio: 1/1;
|
||||
|
||||
@@ -4,90 +4,94 @@ const form = document.getElementById("search-form");
|
||||
const input = document.getElementById("search-input");
|
||||
|
||||
// https://stackoverflow.com/a/3809435/16804841
|
||||
const expression = /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)/gi;
|
||||
const expression =
|
||||
/https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)/gi;
|
||||
const urlRegex = new RegExp(expression);
|
||||
|
||||
const searchEngines = {
|
||||
"g": {
|
||||
action: "https://www.google.com/search",
|
||||
name: "q",
|
||||
},
|
||||
"d": {
|
||||
action: "https://duckduckgo.com/",
|
||||
name: "q",
|
||||
},
|
||||
"y": {
|
||||
action: "https://yandex.com/search/",
|
||||
name: "text",
|
||||
},
|
||||
"lure": {
|
||||
action: "https://lure.sh/pkgs",
|
||||
name: "q",
|
||||
},
|
||||
g: {
|
||||
action: "https://www.google.com/search",
|
||||
name: "q",
|
||||
},
|
||||
d: {
|
||||
action: "https://duckduckgo.com/",
|
||||
name: "q",
|
||||
},
|
||||
y: {
|
||||
action: "https://www.youtube.com/results",
|
||||
name: "search_query",
|
||||
},
|
||||
ya: {
|
||||
action: "https://yandex.com/search/",
|
||||
name: "text",
|
||||
},
|
||||
lure: {
|
||||
action: "https://lure.sh/pkgs",
|
||||
name: "q",
|
||||
},
|
||||
};
|
||||
|
||||
const translationPrefixes = [
|
||||
"t",
|
||||
"translation",
|
||||
]
|
||||
|
||||
const translationPrefixes = ["t", "translation"];
|
||||
|
||||
function getDeepLUrl(s) {
|
||||
const parts = s.split("-")
|
||||
if (parts.length != 3) {
|
||||
return undefined
|
||||
}
|
||||
const parts = s.split("-");
|
||||
if (parts.length != 3) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
return `https://www.deepl.com/en/translator?/#${encodeURIComponent(parts[0].trim())}/${encodeURIComponent(parts[1].trim())}/${encodeURIComponent(parts[2].trim())}`;
|
||||
return `https://www.deepl.com/en/translator?/#${encodeURIComponent(
|
||||
parts[0].trim()
|
||||
)}/${encodeURIComponent(parts[1].trim())}/${encodeURIComponent(
|
||||
parts[2].trim()
|
||||
)}`;
|
||||
}
|
||||
|
||||
form.addEventListener("submit", (event) => {
|
||||
event.preventDefault();
|
||||
|
||||
form.addEventListener("submit", event => {
|
||||
event.preventDefault();
|
||||
s = input.value;
|
||||
|
||||
s = input.value;
|
||||
// check if url
|
||||
if (s.match(urlRegex)) {
|
||||
window.open(s, "_self");
|
||||
return;
|
||||
}
|
||||
|
||||
// check if url
|
||||
if (s.match(urlRegex)) {
|
||||
window.open(s, "_self");
|
||||
return
|
||||
// deepl translations
|
||||
let doTranslation = false;
|
||||
for (const value of translationPrefixes) {
|
||||
const prefix = `!${value} `;
|
||||
if (s.startsWith(prefix)) {
|
||||
doTranslation = true;
|
||||
s = s.slice(prefix.length); // Remove the !{key} prefix
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// deepl translations
|
||||
let doTranslation = false;
|
||||
for (const value of translationPrefixes) {
|
||||
const prefix = `!${value} `;
|
||||
if (s.startsWith(prefix)) {
|
||||
doTranslation = true;
|
||||
s = s.slice(prefix.length); // Remove the !{key} prefix
|
||||
break;
|
||||
}
|
||||
if (doTranslation) {
|
||||
const url = getDeepLUrl(s);
|
||||
if (url) {
|
||||
window.open(url.toString(), "_self");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (doTranslation) {
|
||||
const url = getDeepLUrl(s);
|
||||
if (url) {
|
||||
window.open(url.toString(), "_self");
|
||||
return;
|
||||
}
|
||||
// Check if the string starts with ! followed by a key from searchEngines
|
||||
let selectedEngine = {
|
||||
action: form.getAttribute("action"),
|
||||
name: input.getAttribute("name"),
|
||||
};
|
||||
|
||||
for (const [key, value] of Object.entries(searchEngines)) {
|
||||
const prefix = `!${key} `;
|
||||
if (s.startsWith(prefix)) {
|
||||
selectedEngine = value;
|
||||
s = s.slice(prefix.length); // Remove the !{key} prefix
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Check if the string starts with ! followed by a key from searchEngines
|
||||
let selectedEngine = {
|
||||
action: form.getAttribute("action"),
|
||||
name: input.getAttribute("name"),
|
||||
};
|
||||
|
||||
for (const [key, value] of Object.entries(searchEngines)) {
|
||||
const prefix = `!${key} `;
|
||||
if (s.startsWith(prefix)) {
|
||||
selectedEngine = value;
|
||||
s = s.slice(prefix.length); // Remove the !{key} prefix
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
const url = new URL(selectedEngine.action);
|
||||
url.searchParams.set(selectedEngine.name, s.trim());
|
||||
window.open(url.toString(), "_self");
|
||||
const url = new URL(selectedEngine.action);
|
||||
url.searchParams.set(selectedEngine.name, s.trim());
|
||||
window.open(url.toString(), "_self");
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user