mirror of
https://github.com/searxng/searxng.git
synced 2025-12-22 11:40:01 +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
29 lines
801 B
Python
29 lines
801 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):
|
|
"""Automatically loads the next page when scrolling to bottom of the current page."""
|
|
|
|
id = "infiniteScroll"
|
|
|
|
def __init__(self, plg_cfg: "PluginCfg") -> None:
|
|
super().__init__(plg_cfg)
|
|
|
|
self.info = PluginInfo(
|
|
id=self.id,
|
|
name=gettext("Infinite scroll"),
|
|
description=gettext("Automatically loads the next page when scrolling to bottom of the current page"),
|
|
preference_section="ui",
|
|
)
|