mirror of
https://github.com/searxng/searxng.git
synced 2026-05-08 18:33:51 +02:00
fb089ae297
* [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`](https://github.com/inetol/searxng/blob/1ad832b1dc33f3f388da361ff2459b05dc86a164/client/simple/src/js/toolkit.ts#L134) array has the plugin id. * [mod] client/simple: rebuild static
29 lines
724 B
Python
29 lines
724 B
Python
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
# pylint: disable=missing-module-docstring
|
|
|
|
import typing as t
|
|
|
|
from flask_babel import gettext # pyright: ignore[reportUnknownVariableType]
|
|
|
|
from searx.plugins import Plugin, PluginInfo
|
|
|
|
if t.TYPE_CHECKING:
|
|
from searx.plugins import PluginCfg
|
|
|
|
|
|
@t.final
|
|
class SXNGPlugin(Plugin):
|
|
"""Parses and solves mathematical expressions."""
|
|
|
|
id = "calculator"
|
|
|
|
def __init__(self, plg_cfg: "PluginCfg") -> None:
|
|
super().__init__(plg_cfg)
|
|
|
|
self.info = PluginInfo(
|
|
id=self.id,
|
|
name=gettext("Calculator"),
|
|
description=gettext("Parses and solves mathematical expressions."),
|
|
preference_section="query",
|
|
)
|