mirror of
https://github.com/searxng/searxng.git
synced 2025-12-29 15:10:02 +00:00
* [mod] client/simple: client plugins
Defines a new interface for client side *"plugins"* that coexist with server
side plugin system. Each plugin (e.g., `InfiniteScroll`) extends the base
`ts Plugin`. Client side plugins are independent and lazy‑loaded via `router.ts`
when their `load()` conditions are met. On each navigation request, all
applicable plugins are instanced.
Since these are client side plugins, we can only invoke them once DOM is fully
loaded. E.g. `Calculator` will not render a new `answer` block until fully
loaded and executed.
For some plugins, we might want to handle its availability in `settings.yml`
and toggle in UI, like we do for server side plugins. In that case, we extend
`py Plugin` instancing only the information and then checking client side if
[`settings.plugins`](1ad832b1dc/client/simple/src/js/toolkit.ts (L134))
array has the plugin id.
* [mod] client/simple: rebuild static
35 lines
1.1 KiB
TypeScript
35 lines
1.1 KiB
TypeScript
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
|
|
import { getElement } from "./getElement.ts";
|
|
|
|
export const appendAnswerElement = (element: HTMLElement | string | number): void => {
|
|
const results = getElement<HTMLDivElement>("results");
|
|
|
|
// ./searx/templates/elements/answers.html
|
|
let answers = getElement<HTMLDivElement>("answers", { assert: false });
|
|
if (!answers) {
|
|
// what is this?
|
|
const answersTitle = document.createElement("h4");
|
|
answersTitle.setAttribute("class", "title");
|
|
answersTitle.setAttribute("id", "answers-title");
|
|
answersTitle.textContent = "Answers : ";
|
|
|
|
answers = document.createElement("div");
|
|
answers.setAttribute("id", "answers");
|
|
answers.setAttribute("role", "complementary");
|
|
answers.setAttribute("aria-labelledby", "answers-title");
|
|
answers.appendChild(answersTitle);
|
|
}
|
|
|
|
if (!(element instanceof HTMLElement)) {
|
|
const span = document.createElement("span");
|
|
span.innerHTML = element.toString();
|
|
// biome-ignore lint/style/noParameterAssign: TODO
|
|
element = span;
|
|
}
|
|
|
|
answers.appendChild(element);
|
|
|
|
results.insertAdjacentElement("afterbegin", answers);
|
|
};
|