Compare commits

..

3 Commits

Author SHA1 Message Date
amnesia
5470ba1298 remove elements if new tab 2025-07-18 10:21:57 +02:00
Hazel Noack
13fae1c23f implemented search on youtube 2025-07-16 17:38:28 +02:00
Hazel Noack
21719a6cf7 added demo toml 2025-07-16 17:27:03 +02:00
4 changed files with 104 additions and 80 deletions

View File

@@ -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
View 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"
]

View File

@@ -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;

View File

@@ -4,45 +4,49 @@ 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": {
g: {
action: "https://www.google.com/search",
name: "q",
},
"d": {
d: {
action: "https://duckduckgo.com/",
name: "q",
},
"y": {
y: {
action: "https://www.youtube.com/results",
name: "search_query",
},
ya: {
action: "https://yandex.com/search/",
name: "text",
},
"lure": {
lure: {
action: "https://lure.sh/pkgs",
name: "q",
},
};
const translationPrefixes = [
"t",
"translation",
]
const translationPrefixes = ["t", "translation"];
function getDeepLUrl(s) {
const parts = s.split("-")
const parts = s.split("-");
if (parts.length != 3) {
return undefined
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 => {
form.addEventListener("submit", (event) => {
event.preventDefault();
s = input.value;
@@ -50,7 +54,7 @@ form.addEventListener("submit", event => {
// check if url
if (s.match(urlRegex)) {
window.open(s, "_self");
return
return;
}
// deepl translations