// @ts-check /* Imports */ /** @typedef {import("@libs/filterInputs").Filters} Filters */ /** @typedef {import("@typings/types").PluginList} PluginList */ /** @typedef {import("@typings/plugin").Plugin.PluginItem} PluginItem */ /** @typedef {import("@typings/plugin").Plugin.ChapterItem} ChapterItem */ /** @typedef {import("@typings/plugin").Plugin.NovelItem} NovelItem */ /** @typedef {import("@typings/plugin").Plugin.SourceNovel} SourceNovel */ /** @typedef {import("@libs/filterInputs").FilterTypes} FilterTypes */ /** @typedef {import("@libs/filterInputs").FilterTypes.CheckboxGroup} CheckboxGroup */ /** * @template {FilterTypes} T * @typedef {import("@libs/filterInputs").ValueOfFilter} ValueOfFilter */ /** * @template {Filters} T * @typedef {import("@libs/filterInputs").FilterToValues} FilterToValues */ /** @typedef {{backgroundColor:string, textColor:string}} Theme */ /** @typedef {Theme[]} Themes */ /// const state = { /** @type {PluginList} */ all_plugins: {}, /** @type {Array} */ plugin_infos: [], /** @type {{language: string, keyword:null|string}} */ plugin_search: { language: "", keyword: null, }, /** @type {Array} */ plugins_in_search: [], /** @type {PluginWrapper | undefined} */ current_plugin: undefined, /** @type {FilterToValues} */ filterValues: {}, }; /** @type {JQuery}*/ const language_selection = $("#language"); /** @type {JQuery} */ const plugin_search = $("#plugin"); /** @type {JQuery} */ const search_results = $("#search-results"); const loadPluginsIntoSearchBar = () => { const { language, keyword } = state.plugin_search; const plugins = language ? state.all_plugins[language] : state.plugin_infos; state.plugins_in_search = keyword ? plugins.filter((p) => keyword.charAt(0) === "-" ? !p.name .toLowerCase() .includes(keyword.toLowerCase().substring(1)) : p.name.toLowerCase().includes(keyword.toLowerCase()) ) : plugins; }; fetch("/all_plugins") .then((res) => res.json()) .then((/** @type {PluginList} */ all) => { state.all_plugins = all; for (let lang in all) { language_selection.append(``); state.plugin_infos = state.plugin_infos.concat(all[lang]); } }) .then((_) => { loadPluginsIntoSearchBar(); }); language_selection.on("change", (e) => { state.plugin_search.language = e.target.value; loadPluginsIntoSearchBar(); }); const display_search = () => { search_results.hide(); search_results.empty(); if (!$("#turnoff-catch").length) { const turnoff_catch = $("
").attr("id", "turnoff-catch"); $("body").append(turnoff_catch); turnoff_catch.on("click", () => { search_results.hide(); turnoff_catch.remove(); }); } state.plugins_in_search.forEach((plugin) => { // search_results.append(` //
// //
// `); /** @type {JQuery} */ const img = $("", { src: `./icons/${plugin.icon}` }); img.css({ height: "100%", "object-fit": "contains", "margin-right": "10px", }); /** @type {JQuery} */ const btn = $("