moved the userscripts to deno flavoured typescript
Dieser Commit ist enthalten in:
Ursprung
e6c7b2f207
Commit
2fa0a3e164
|
@ -2,4 +2,5 @@
|
||||||
"adblock.packageManager": "yarn",
|
"adblock.packageManager": "yarn",
|
||||||
"adblock.useExternalAglintPackages": true,
|
"adblock.useExternalAglintPackages": true,
|
||||||
"adblock.enableAglint": true,
|
"adblock.enableAglint": true,
|
||||||
|
"deno.config": "deno.json",
|
||||||
}
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"lib": [
|
||||||
|
"dom",
|
||||||
|
"dom.iterable",
|
||||||
|
"dom.asynciterable",
|
||||||
|
"deno.ns"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
{
|
||||||
|
"version": "3",
|
||||||
|
"remote": {
|
||||||
|
"https://deno.land/x/denoflate@1.2.1/mod.ts": "f5628e44b80b3d80ed525afa2ba0f12408e3849db817d47a883b801f9ce69dd6",
|
||||||
|
"https://deno.land/x/denoflate@1.2.1/pkg/denoflate.js": "b9f9ad9457d3f12f28b1fb35c555f57443427f74decb403113d67364e4f2caf4",
|
||||||
|
"https://deno.land/x/denoflate@1.2.1/pkg/denoflate_bg.wasm.js": "d581956245407a2115a3d7e8d85a9641c032940a8e810acbd59ca86afd34d44d",
|
||||||
|
"https://deno.land/x/esbuild@v0.20.2/mod.js": "67c608ee283233f5d0faa322b887356857c547a8e6a00981f798b2cd38e02436"
|
||||||
|
},
|
||||||
|
"workspace": {
|
||||||
|
"packageJson": {
|
||||||
|
"dependencies": [
|
||||||
|
"npm:@adguard/aglint@^2.0.0"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,129 @@
|
||||||
|
import * as esbuild from "https://deno.land/x/esbuild@v0.20.2/mod.js";
|
||||||
|
|
||||||
|
class userjs {
|
||||||
|
name: string;
|
||||||
|
namespace: string;
|
||||||
|
version: string;
|
||||||
|
description: string;
|
||||||
|
author: string[];
|
||||||
|
source: string;
|
||||||
|
run_at: string;
|
||||||
|
grant: string[];
|
||||||
|
match: string[];
|
||||||
|
constructor(
|
||||||
|
name: string,
|
||||||
|
namespace: string,
|
||||||
|
version: string,
|
||||||
|
description: string,
|
||||||
|
author: string[],
|
||||||
|
source: string,
|
||||||
|
run_at:
|
||||||
|
| "document-start"
|
||||||
|
| "document-body"
|
||||||
|
| "document-end"
|
||||||
|
| "document-idle"
|
||||||
|
| "context-menu" = "document-end",
|
||||||
|
grant: string[] = [],
|
||||||
|
match: string[],
|
||||||
|
) {
|
||||||
|
this.name = name;
|
||||||
|
this.namespace = namespace;
|
||||||
|
this.version = version;
|
||||||
|
this.description = description;
|
||||||
|
this.author = author;
|
||||||
|
this.source = source;
|
||||||
|
this.run_at = run_at;
|
||||||
|
this.grant = grant;
|
||||||
|
this.match = match;
|
||||||
|
}
|
||||||
|
toString(): string {
|
||||||
|
const b = ["// ==UserScript=="];
|
||||||
|
b.push(`// @name ${this.name}`);
|
||||||
|
b.push(`// @version ${this.version}`);
|
||||||
|
b.push(`// @source ${this.source}`);
|
||||||
|
b.push(`// @description ${this.description}`);
|
||||||
|
for (const author of this.author) {
|
||||||
|
b.push(`// @author ${author}`);
|
||||||
|
}
|
||||||
|
b.push(`// @run-at ${this.run_at}`);
|
||||||
|
if (this.grant.length == 0) {
|
||||||
|
b.push(`// @grant none`);
|
||||||
|
}else {
|
||||||
|
for (const grant of this.grant)
|
||||||
|
b.push(`// @grant ${grant}`);
|
||||||
|
}
|
||||||
|
for (const match of this.match) {
|
||||||
|
b.push(`// @match ${match}`);
|
||||||
|
}
|
||||||
|
b.push("// ==/UserScript==");
|
||||||
|
return b.join("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function userscript_build(prefix: string, metadata: userjs) {
|
||||||
|
console.log(`Building ${prefix}`);
|
||||||
|
await esbuild.build({
|
||||||
|
outfile: `userscripts/${prefix}.user.js`,
|
||||||
|
bundle: true,
|
||||||
|
charset: "utf8",
|
||||||
|
banner: {
|
||||||
|
"js": metadata.toString(),
|
||||||
|
},
|
||||||
|
entryPoints: [`userscripts/${prefix}.ts`],
|
||||||
|
minify: true,
|
||||||
|
platform: "browser",
|
||||||
|
target: "es2022",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
await userscript_build(
|
||||||
|
"girlgenius",
|
||||||
|
new userjs(
|
||||||
|
"Girlgenius https fix",
|
||||||
|
"https://sebastian-tobie.de/",
|
||||||
|
"0.2",
|
||||||
|
"converts http to https urls",
|
||||||
|
["Sebastian Tobie"],
|
||||||
|
"https://gitea.sebastian-tobie.de/sebastian/cookiedb/raw/branch/stable/userscripts/girlgenius.user.js",
|
||||||
|
"document-body",
|
||||||
|
[],
|
||||||
|
[],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
await userscript_build(
|
||||||
|
"kobo_easy_archive",
|
||||||
|
new userjs(
|
||||||
|
"Kobo library easy archive",
|
||||||
|
"https://sebastian-tobie.de/",
|
||||||
|
"0.1",
|
||||||
|
"Helps with archiving kobo books",
|
||||||
|
["Sebastian Tobie"],
|
||||||
|
"https://gitea.sebastian-tobie.de/sebastian/cookiedb/raw/branch/stable/userscripts/kobo_easy_archive.user.js",
|
||||||
|
"document-idle",
|
||||||
|
[],
|
||||||
|
[
|
||||||
|
"https://www.kobo.com/de/de/library/books",
|
||||||
|
"https://www.kobo.com/de/de/library/books?*",
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
await userscript_build(
|
||||||
|
"thalia-filter",
|
||||||
|
new userjs(
|
||||||
|
"Thalia Filter",
|
||||||
|
"https://sebastian-tobie.de/",
|
||||||
|
"0.2",
|
||||||
|
"Filters out unwanted books",
|
||||||
|
["Sebastian Tobie"],
|
||||||
|
"https://gitea.sebastian-tobie.de/sebastian/cookiedb/raw/branch/stable/userscripts/girlgenius.user.js",
|
||||||
|
"document-end",
|
||||||
|
["GM_registerMenuCommand"],
|
||||||
|
[
|
||||||
|
"https://www.thalia.de/kategorie/*",
|
||||||
|
"https://www.thalia.de/kategorie/*/",
|
||||||
|
"https://www.thalia.de/kategorie/*?*",
|
||||||
|
"https://www.thalia.de/ebook/kategorien/*/neuheiten",
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
Deno.exit();
|
|
@ -1,50 +0,0 @@
|
||||||
// ==UserScript==
|
|
||||||
// @name Girlgenius https fix
|
|
||||||
// @namespace https://sebastian-tobie.de/
|
|
||||||
// @version 0.1
|
|
||||||
// @description converts http to https urls
|
|
||||||
// @author Sebastian Tobie
|
|
||||||
// @source https://gitea.sebastian-tobie.de/sebastian/cookiedb/raw/branch/stable/userscripts/girlgenius.js
|
|
||||||
// @run-at document-body
|
|
||||||
// @match https://www.girlgeniusonline.com/*
|
|
||||||
// @grant none
|
|
||||||
// @unwrap
|
|
||||||
// ==/UserScript==
|
|
||||||
function replacehttp(url) {
|
|
||||||
let u = new URL(url);
|
|
||||||
console.debug(u.protocol, "http:" == u.protocol)
|
|
||||||
if(u.protocol == "http:") {
|
|
||||||
let old = url.href;
|
|
||||||
u.protocol = "https:";
|
|
||||||
console.debug("fixed url",old,u.href);
|
|
||||||
}
|
|
||||||
return u.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
(function() {
|
|
||||||
'use strict';
|
|
||||||
console.debug("http replacer loaded");
|
|
||||||
let elements = document.getElementsByTagName("a");
|
|
||||||
console.info("found", elements.length, "links");
|
|
||||||
for (let i = 0 ; i<elements.length;i++) {
|
|
||||||
let el = elements[i];
|
|
||||||
console.debug("checking", el)
|
|
||||||
if(el.href == undefined || el.href == "") {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
el.href = replacehttp(el.href);
|
|
||||||
console.debug("edited", el)
|
|
||||||
}
|
|
||||||
elements = document.getElementsByTagName("img");
|
|
||||||
console.info("found", elements.length, "images");
|
|
||||||
for (let i = 0 ; i<elements.length;i++) {
|
|
||||||
let el = elements[i];
|
|
||||||
console.debug("checking", el)
|
|
||||||
if(el.src == undefined || el.src == "") {
|
|
||||||
console.debug("href == undefined", el.src == undefined , "src == ''",el.src == "")
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
el.src = replacehttp(el.src);
|
|
||||||
console.debug("edited", el)
|
|
||||||
}
|
|
||||||
})();
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
function replacehttp(url: string) {
|
||||||
|
const u = new URL(url);
|
||||||
|
console.debug(u.protocol, "http:" == u.protocol);
|
||||||
|
if (u.protocol == "http:") {
|
||||||
|
const old = u.href;
|
||||||
|
u.protocol = "https:";
|
||||||
|
console.debug("fixed url", old, u.href);
|
||||||
|
}
|
||||||
|
return u.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
console.debug("http replacer loaded");
|
||||||
|
const elements = document.getElementsByTagName("a");
|
||||||
|
console.info("found", elements.length, "links");
|
||||||
|
for (let i = 0; i < elements.length; i++) {
|
||||||
|
const el = elements[i];
|
||||||
|
console.debug("checking", el);
|
||||||
|
if (el.href == undefined || el.href == "") {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
el.href = replacehttp(el.href);
|
||||||
|
console.debug("edited", el);
|
||||||
|
}
|
||||||
|
const ielements = document.getElementsByTagName("img");
|
||||||
|
console.info("found", ielements.length, "images");
|
||||||
|
for (let i = 0; i < ielements.length; i++) {
|
||||||
|
const el = ielements[i];
|
||||||
|
console.debug("checking", el);
|
||||||
|
if (el.src == undefined || el.src == "") {
|
||||||
|
console.debug(
|
||||||
|
"href == undefined",
|
||||||
|
el.src == undefined,
|
||||||
|
"src == ''",
|
||||||
|
el.src == "",
|
||||||
|
);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
el.src = replacehttp(el.src);
|
||||||
|
console.debug("edited", el);
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
// ==UserScript==
|
||||||
|
// @name Girlgenius https fix
|
||||||
|
// @version 0.2
|
||||||
|
// @source https://gitea.sebastian-tobie.de/sebastian/cookiedb/raw/branch/stable/userscripts/girlgenius.user.js
|
||||||
|
// @description converts http to https urls
|
||||||
|
// @author Sebastian Tobie
|
||||||
|
// @run-at document-body
|
||||||
|
// @grant none
|
||||||
|
// ==/UserScript==
|
||||||
|
(()=>{function c(o){let e=new URL(o);if(console.debug(e.protocol,e.protocol=="http:"),e.protocol=="http:"){let l=e.href;e.protocol="https:",console.debug("fixed url",l,e.href)}return e.toString()}console.debug("http replacer loaded");var n=document.getElementsByTagName("a");console.info("found",n.length,"links");for(let o=0;o<n.length;o++){let e=n[o];console.debug("checking",e),!(e.href==null||e.href=="")&&(e.href=c(e.href),console.debug("edited",e))}var t=document.getElementsByTagName("img");console.info("found",t.length,"images");for(let o=0;o<t.length;o++){let e=t[o];if(console.debug("checking",e),e.src==null||e.src==""){console.debug("href == undefined",e.src==null,"src == ''",e.src=="");continue}e.src=c(e.src),console.debug("edited",e)}})();
|
|
@ -1,35 +0,0 @@
|
||||||
// ==UserScript==
|
|
||||||
// @name Kobo library easy archive
|
|
||||||
// @namespace https://sebastian-tobie.de/
|
|
||||||
// @version 0.1
|
|
||||||
// @description Helps with archiving kobo books
|
|
||||||
// @author Sebastian Tobie
|
|
||||||
// @source https://gitea.sebastian-tobie.de/sebastian/cookiedb/raw/branch/stable/userscripts/kobo_easy_archive.js
|
|
||||||
// @run-at document-idle
|
|
||||||
// @match https://www.kobo.com/de/de/library/books
|
|
||||||
// @match https://www.kobo.com/de/de/library/books?*
|
|
||||||
// @icon https://www.google.com/s2/favicons?sz=64&domain=kobo.com
|
|
||||||
// @grant none
|
|
||||||
// @unwrap
|
|
||||||
// ==/UserScript==
|
|
||||||
(function() {
|
|
||||||
'use strict';
|
|
||||||
let he = document.getElementsByClassName("headers-end")[0];
|
|
||||||
let header = document.createElement("span");
|
|
||||||
header.classList.add("heading");
|
|
||||||
header.classList.add("more-actions");
|
|
||||||
he.appendChild(header);
|
|
||||||
let library_list = document.getElementsByClassName("library-items")[0];
|
|
||||||
for(let c = 0; c < library_list.childElementCount; c++) {
|
|
||||||
let child = library_list.children[c];
|
|
||||||
let item_bar = child.getElementsByClassName("item-bar")[0];
|
|
||||||
if(!child.classList.contains("pre-order")){
|
|
||||||
let button = child.getElementsByClassName("remove-from-library")[0];
|
|
||||||
let parent = button.parentNode
|
|
||||||
parent.removeChild(button);
|
|
||||||
item_bar.appendChild(button);
|
|
||||||
} else {
|
|
||||||
item_bar.appendChild(document.createElement("span"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})();
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
const he = document.getElementsByClassName("headers-end")[0];
|
||||||
|
const header = document.createElement("span");
|
||||||
|
header.classList.add("heading");
|
||||||
|
header.classList.add("more-actions");
|
||||||
|
he.appendChild(header);
|
||||||
|
const library_list = document.getElementsByClassName("library-items")[0];
|
||||||
|
for (let c = 0; c < library_list.childElementCount; c++) {
|
||||||
|
const child = library_list.children[c];
|
||||||
|
const item_bar = child.getElementsByClassName("item-bar")[0];
|
||||||
|
if (!child.classList.contains("pre-order")) {
|
||||||
|
const button = child.getElementsByClassName("remove-from-library")[0];
|
||||||
|
const parent = button.parentNode!;
|
||||||
|
parent.removeChild(button);
|
||||||
|
item_bar.appendChild(button);
|
||||||
|
} else {
|
||||||
|
item_bar.appendChild(document.createElement("span"));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
// ==UserScript==
|
||||||
|
// @name Kobo library easy archive
|
||||||
|
// @version 0.1
|
||||||
|
// @source https://gitea.sebastian-tobie.de/sebastian/cookiedb/raw/branch/stable/userscripts/kobo_easy_archive.user.js
|
||||||
|
// @description Helps with archiving kobo books
|
||||||
|
// @author Sebastian Tobie
|
||||||
|
// @run-at document-idle
|
||||||
|
// @grant none
|
||||||
|
// @match https://www.kobo.com/de/de/library/books
|
||||||
|
// @match https://www.kobo.com/de/de/library/books?*
|
||||||
|
// ==/UserScript==
|
||||||
|
(()=>{var d=document.getElementsByClassName("headers-end")[0],n=document.createElement("span");n.classList.add("heading");n.classList.add("more-actions");d.appendChild(n);var l=document.getElementsByClassName("library-items")[0];for(let e=0;e<l.childElementCount;e++){let t=l.children[e],a=t.getElementsByClassName("item-bar")[0];if(t.classList.contains("pre-order"))a.appendChild(document.createElement("span"));else{let s=t.getElementsByClassName("remove-from-library")[0];s.parentNode.removeChild(s),a.appendChild(s)}}})();
|
|
@ -0,0 +1,45 @@
|
||||||
|
import {trie} from "./thalia_lib.ts"
|
||||||
|
|
||||||
|
function titel(book: HTMLElement) {
|
||||||
|
return book.getElementsByClassName(
|
||||||
|
"element-text-standard-black tm-artikeldetails__titel",
|
||||||
|
)[0].innerHTML.toLowerCase();
|
||||||
|
}
|
||||||
|
|
||||||
|
function clean() {
|
||||||
|
const books: HTMLCollectionOf<HTMLElement> = document.getElementsByClassName(
|
||||||
|
"tm-produktliste__eintrag artikel",
|
||||||
|
);
|
||||||
|
const not_found: string[] = [];
|
||||||
|
let removed = 0;
|
||||||
|
for (const book of books) {
|
||||||
|
if (book === null) continue;
|
||||||
|
if (book.style.display == "none") {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (trie.startsWith(titel(book))) {
|
||||||
|
book.style.display = "none";
|
||||||
|
removed += 1;
|
||||||
|
} else not_found.push(titel(book));
|
||||||
|
}
|
||||||
|
const artikel = document.getElementsByClassName("sichtbare-artikel");
|
||||||
|
if (artikel.length != 0) {
|
||||||
|
artikel[0].innerHTML = not_found.length.toString();
|
||||||
|
}
|
||||||
|
console.debug(artikel);
|
||||||
|
console.debug("titel nicht in der blacklist:", not_found);
|
||||||
|
}
|
||||||
|
|
||||||
|
async function run() {
|
||||||
|
GM_registerMenuCommand("Clean results", function (event: Event) {
|
||||||
|
console.debug(event);
|
||||||
|
event.preventDefault();
|
||||||
|
clean();
|
||||||
|
}, "c");
|
||||||
|
const button = document.getElementsByTagName("suche-button-mehr-laden");
|
||||||
|
if (button.length != 0) {
|
||||||
|
for (let i = 0; i < 10; i++) await button[0].load();
|
||||||
|
}
|
||||||
|
clean();
|
||||||
|
}
|
||||||
|
run();
|
Dateidiff unterdrückt, weil mindestens eine Zeile zu lang ist
|
@ -0,0 +1,278 @@
|
||||||
|
class TrieNode {
|
||||||
|
children: Map<string, TrieNode>;
|
||||||
|
isEndOfWord: boolean;
|
||||||
|
constructor() {
|
||||||
|
this.children = new Map<string, TrieNode>();
|
||||||
|
this.isEndOfWord = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Trie {
|
||||||
|
root: TrieNode;
|
||||||
|
constructor(inputs: string[] = []) {
|
||||||
|
this.root = new TrieNode();
|
||||||
|
for (const item of inputs) {
|
||||||
|
this.insert(item.toLowerCase());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
insert(word: string) {
|
||||||
|
let node = this.root;
|
||||||
|
for (const char of word) {
|
||||||
|
if (!node.children.has(char)) {
|
||||||
|
node.children.set(char, new TrieNode());
|
||||||
|
}
|
||||||
|
node = node.children.get(char)!;
|
||||||
|
}
|
||||||
|
node.isEndOfWord = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
startsWith(word: string) {
|
||||||
|
let node = this.root;
|
||||||
|
for (const char of word) {
|
||||||
|
if (!node.children.has(char)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
node = node.children.get(char)!;
|
||||||
|
if (node.isEndOfWord) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const trie = new Trie([
|
||||||
|
"#drcl",
|
||||||
|
"10 erste male",
|
||||||
|
"A Couple of Cuckoos",
|
||||||
|
"Aristia",
|
||||||
|
"Asterix",
|
||||||
|
"Café Liebe",
|
||||||
|
"Charon",
|
||||||
|
"Cheering up in the underworld",
|
||||||
|
"Colette beschließt zu sterben",
|
||||||
|
"D.N. Angel",
|
||||||
|
"Definitely Love",
|
||||||
|
"Der Sommer",
|
||||||
|
"Die mit dem Teufel tanzt",
|
||||||
|
"Ein Zeichen der Zuneigung",
|
||||||
|
"Elainas Reise",
|
||||||
|
"Galerie einer neuen Galaxis",
|
||||||
|
"Gespielte Liebe",
|
||||||
|
"Go! Go! Loser Ranger",
|
||||||
|
"Hallo, ich bin eine Hexe und mein Schwarm wünscht sich einen Liebestrank von mir",
|
||||||
|
"Himmelblaue Zeiten",
|
||||||
|
"How to train a newbie",
|
||||||
|
"Ich habe 300 Jahre lang",
|
||||||
|
"Ich täuschte Amnesie vor, um meinen Verlobten loszuwerden",
|
||||||
|
"Kleiner Tai & Omi Sue",
|
||||||
|
"Kreative Kurzaufgaben",
|
||||||
|
"Lone Wolf & Cub Master",
|
||||||
|
"Manga! Manga!",
|
||||||
|
"Merit und der ägyptische",
|
||||||
|
"Murciélago",
|
||||||
|
"Peter Grill",
|
||||||
|
"Real Account",
|
||||||
|
"Red Apple",
|
||||||
|
"Ripper",
|
||||||
|
"Solo Leveling Roman Taschenbuchausgabe",
|
||||||
|
"Star Wars",
|
||||||
|
"Tokyo Aliens",
|
||||||
|
"Touring after the apocalypse",
|
||||||
|
"Wiedergeburt in Maydare",
|
||||||
|
"Yuzu",
|
||||||
|
"ab sofort schwester!",
|
||||||
|
"adou",
|
||||||
|
"after school",
|
||||||
|
"alice in borderland",
|
||||||
|
"alice und die halbbluthexe",
|
||||||
|
"all you want, whenever you want",
|
||||||
|
"and then i know love",
|
||||||
|
"and then i love you",
|
||||||
|
"angels of death",
|
||||||
|
"anyway, i love you",
|
||||||
|
"arifureta - der kampf zurück in meine welt",
|
||||||
|
"assassin's creed",
|
||||||
|
"auf und ab",
|
||||||
|
"bakemonogatari",
|
||||||
|
"barakamon",
|
||||||
|
"beast after school",
|
||||||
|
"birds of shangri-la",
|
||||||
|
"bitter playmate",
|
||||||
|
"black butler",
|
||||||
|
"bloody bites at boarding school",
|
||||||
|
"blue eye lie",
|
||||||
|
"boruto",
|
||||||
|
"canis",
|
||||||
|
"crossing borders",
|
||||||
|
"dahlia lässt den kopf nicht hängen",
|
||||||
|
"das band der unterwelt",
|
||||||
|
"das kind, das ich in meinen träumen sah",
|
||||||
|
"das magische baumhaus",
|
||||||
|
"das opfer des",
|
||||||
|
"dead mount death play",
|
||||||
|
"deadlock",
|
||||||
|
"der dieb und das biest",
|
||||||
|
"der fuchs und der kleine tanuki",
|
||||||
|
"der geschmack nach melone",
|
||||||
|
"der stärkste held mit dem mal der schwäche",
|
||||||
|
"die for me, my darling",
|
||||||
|
"die hexe und das biest",
|
||||||
|
"die hexe und ihr drache",
|
||||||
|
"die hohe",
|
||||||
|
"die nacht hinter dem dreiecksfenster",
|
||||||
|
"die rachsüchtige",
|
||||||
|
"die schokohexe ",
|
||||||
|
"die walkinder",
|
||||||
|
"don't lie to me",
|
||||||
|
"dr. stone",
|
||||||
|
"drachenregen",
|
||||||
|
"edens zero",
|
||||||
|
"ein bund fürs leben",
|
||||||
|
"ein landei aus dem dorf vor dem letzten dungeon sucht das abenteuer in der stadt",
|
||||||
|
"elden ring kapitel",
|
||||||
|
"elden ring",
|
||||||
|
"eliana",
|
||||||
|
"enceladus - die graphic novel",
|
||||||
|
"fairy tale",
|
||||||
|
"fangirl",
|
||||||
|
"final fantasy",
|
||||||
|
"fire force",
|
||||||
|
"flüster mir ein liebeslied",
|
||||||
|
"folge den wolken nach nord-nordwest",
|
||||||
|
"from bottom to lover",
|
||||||
|
"gachiakuta",
|
||||||
|
"gannibal",
|
||||||
|
"gestatten, ich bin's",
|
||||||
|
"goblin slayer!",
|
||||||
|
"harahara sensei",
|
||||||
|
"hiraeth",
|
||||||
|
"human extinction",
|
||||||
|
"hunter x hunter",
|
||||||
|
"i hear the sunspot",
|
||||||
|
"i'll be here for you",
|
||||||
|
"im schatten der fabriken",
|
||||||
|
"in/spectre",
|
||||||
|
"insomniacs",
|
||||||
|
"interviews mit Monster-mädchen",
|
||||||
|
"is love the answer?",
|
||||||
|
"isekai office worker",
|
||||||
|
"jagaaan",
|
||||||
|
"jealousy blinds love",
|
||||||
|
"just mary",
|
||||||
|
"kabukicho bad trip",
|
||||||
|
"kijin gentosho",
|
||||||
|
"konosuba",
|
||||||
|
"küsse",
|
||||||
|
"lass meine hand nicht los",
|
||||||
|
"lieb mich noch, bevor du stirbst",
|
||||||
|
"liebe ist (k)ein wettkampf",
|
||||||
|
"lightning and romance",
|
||||||
|
"lonely castle in the mirror",
|
||||||
|
"love escape",
|
||||||
|
"lullaby of the dawn",
|
||||||
|
"madk",
|
||||||
|
"manga love story",
|
||||||
|
"meet me online",
|
||||||
|
"megumi & tsugumi",
|
||||||
|
"mein isekai-leben",
|
||||||
|
"mein nachbar",
|
||||||
|
"mein untergang",
|
||||||
|
"meine arbeit als missionar in einer gottlosen welt",
|
||||||
|
"meine wiedergeburt als schleim in einer anderen welt",
|
||||||
|
"midnight scandal sex",
|
||||||
|
"minato's coin laundry",
|
||||||
|
"mord im dekagon",
|
||||||
|
"moriarty the patriot",
|
||||||
|
"mpd psycho",
|
||||||
|
"mr nobody",
|
||||||
|
"mushoku tensei",
|
||||||
|
"my dear curse-casting vampiress",
|
||||||
|
"my genderless boyfriend",
|
||||||
|
"my hero academia",
|
||||||
|
"my love will last till the end of time",
|
||||||
|
"my senpai is annoying",
|
||||||
|
"my younger senpai",
|
||||||
|
"nana & kaoru: das letzte jahr",
|
||||||
|
"never love an egoist",
|
||||||
|
"nina - die sterne sind dein schicksal",
|
||||||
|
"one piece",
|
||||||
|
"one room dog",
|
||||||
|
"overlord",
|
||||||
|
"penelope",
|
||||||
|
"planetes perfect edition",
|
||||||
|
"planetes perfect",
|
||||||
|
"pluto: urasawa x tezuka",
|
||||||
|
"prince never give up",
|
||||||
|
"prinz freya",
|
||||||
|
"radiant",
|
||||||
|
"raeliana",
|
||||||
|
"re:zero",
|
||||||
|
"relife",
|
||||||
|
"religiöse helden",
|
||||||
|
"rental girlfriend",
|
||||||
|
"requiem of the rose king",
|
||||||
|
"rosen blood",
|
||||||
|
"saint seiya",
|
||||||
|
"saraba, yoki hi",
|
||||||
|
"saturn return",
|
||||||
|
"schattenprinzessin des drachenkönigs",
|
||||||
|
"servamp, band",
|
||||||
|
"seven deadly sins",
|
||||||
|
"severed",
|
||||||
|
"shaman king",
|
||||||
|
"shojo nach der schule",
|
||||||
|
"silent witch",
|
||||||
|
"skip & loafer",
|
||||||
|
"skip beat",
|
||||||
|
"sleeping dead",
|
||||||
|
"smoking behind the supermarket",
|
||||||
|
"stigmata",
|
||||||
|
"sugar apple fairy tale",
|
||||||
|
"suzume",
|
||||||
|
"sword art online",
|
||||||
|
"takopi und die sache mit dem glück",
|
||||||
|
"teach me how to kill you",
|
||||||
|
"the beast must die",
|
||||||
|
"the beginning after the end",
|
||||||
|
"the dungeon of black company",
|
||||||
|
"the elusive samurai",
|
||||||
|
"the gender of mona lisa",
|
||||||
|
"the guy she was interested in wasn't a guy at all",
|
||||||
|
"the heroic legend of arslan",
|
||||||
|
"the ichinose family's deadly sins",
|
||||||
|
"the male bride",
|
||||||
|
"the man who shattered my world",
|
||||||
|
"the most distant love",
|
||||||
|
"the reprise",
|
||||||
|
"the saint's magic power is omnipotent",
|
||||||
|
"threesome",
|
||||||
|
"to the abandoned sacred beasts",
|
||||||
|
"tokyo revengers",
|
||||||
|
"tokyopop",
|
||||||
|
"too close to love",
|
||||||
|
"touching your night",
|
||||||
|
"twin star",
|
||||||
|
"undead unluck",
|
||||||
|
"under ninja",
|
||||||
|
"unlimited lust",
|
||||||
|
"vampire knight",
|
||||||
|
"veil",
|
||||||
|
"verbotene allianz",
|
||||||
|
"verliebt in mehr als dein gesicht",
|
||||||
|
"victoria's electric coffin",
|
||||||
|
"vinland saga",
|
||||||
|
"virgin road",
|
||||||
|
"white light ceremony",
|
||||||
|
"wind breaker",
|
||||||
|
"wise man",
|
||||||
|
"wistoria",
|
||||||
|
"wolverine",
|
||||||
|
"yakuza angel",
|
||||||
|
"yona",
|
||||||
|
"you're my cutie!",
|
||||||
|
"your sweet scent",
|
||||||
|
"yuzu - die kleine tierärztin",
|
||||||
|
"zombie hide sex",
|
||||||
|
]);
|
||||||
|
export { trie };
|
Laden…
In neuem Issue referenzieren