summaryrefslogtreecommitdiff
path: root/searx/templates/simple/base.html
AgeCommit message (Collapse)Author
2025-12-02[mod] client/simple: client plugins (#5406)Ivan Gabaldon
* [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
2025-10-10[feat] preferences hash: show applied settings in pref page when searching ↵Bnyro
with 'search url of the currently saved preferences' Previously, when using a search url copied from the cookies tab, clicking at the settings icon at the top right would show the browser preferences and not the preferences that were set and used with the search url. Please see https://github.com/searxng/searxng/issues/5227 for more information. To test: - change some preferences - copy the preferences search url in the settings' cookies tab - reset the preferences or clear cookies - paste the copied search url into the search bar to search for something - press the settings icon - you can now see/preview the actual settings that were used for the search - by pressing 'save', you can keep these preferences closes #5227
2025-08-21[fix] move initial "JS is enabled?" (no-js) to client sideMarkus Heiser
To avoid an `unsafe-inline` in the CSP header, the JS code must be moved to the client side [1]. The `<script>` tag at the end of the HTML originates from the old implementation of the JS client. Since PR-5073 [2] was merged, the `type` is now `module`, and the tag must be moved to the beginning of the HTML. > We need to inline this "JS is enabled?" thing to prevent layout shifts and > temporary "no JS enabled" visuals as ESM scripts loads and evals everything > deferred from initial DOM render [3] That's true in theory, but in practice, this effect is unnoticeable because it's masked by another effect (which we can't avoid): If we load the page with a severely throttled connection, the HTML (result list) takes a long time to load. Then the CSS is loaded, which also takes longer. Until the CSS has loaded, there's no layout. A layout shift is therefore largely determined by the loading of the HTML and CSS itself. The running times of the ESM script can be neglected compared to the loading times of HTML & CSS. [1] https://github.com/searxng/searxng-docker/pull/424#issuecomment-3199494256 [2] https://github.com/searxng/searxng/pull/5073 [3] https://github.com/searxng/searxng-docker/pull/424#issuecomment-3199622504
2025-08-18[enh] theme/simple: custom routerIvan Gabaldon
Lay the foundation for loading scripts granularly depending on the endpoint it's on. Remove vendor specific prefixes as there are now managed by browserslist and LightningCSS. Enabled quite a few rules in Biome that don't come in recommended to better catch issues and improve consistency. Related: - https://github.com/searxng/searxng/pull/5073#discussion_r2256037965 - https://github.com/searxng/searxng/pull/5073#discussion_r2256057100
2025-08-18[mod] theme/simple: migrate codebase to TypeScriptIvan Gabaldon
TypeScript is a superset of JavaScript, converting the entire theme to TypeScript allows us to receive much more feedback on possible issues made in package updates or our own typos, furthermore, it allows to transpile properly to lower specs. This PR couldn't be done in smaller commits, a lot of work needed to make everything *work properly*: - A browser baseline has been set that requires minimum **Chromium 93, Firefox 92 and Safari 15** (proper visuals/operation on older browser versions is not guaranteed) - LightningCSS now handles minification and prefix creation for CSS. - All hardcoded polyfills and support for previous browser baseline versions have been removed. - Convert codebase to TypeScript. - Convert IIFE to ESM, handling globals with IIFE is cumbersome, ESM is the standard for virtually any use of JS nowadays. - Vite now builds the theme without the need for `vite-plugin-static-copy`. - `searxng.ready` now accepts an array of conditions for the callback to be executed. - Replace `leaflet` with `ol` as there were some issues with proper Vite bundling. - Merged `head` with `main` script, as head was too small now. - Add `assertElement` to properly check the existence of critical DOM elements. - `searxng.on` renamed to `searxng.listen` with some handling improvements.
2025-05-30[mod] UI footer: correct capitalization of "SearXNG" in base.htmlbenpiano800
2025-02-28[web-client] simple theme: refactor jinja_svg_catalog and cleanup icon namesMarkus Heiser
This patch implements the template generation of the template: searx/templates/simple/icons.html by the way the icon set (the icon names) has been normalized: film-outline --> film magnet-outline --> magnet .. warning --> alert Some missing (categorie) icons had been added. Some of the ionicons are not suitable for a dark theme, we fixed the svg manually in src/svg/ionicons: - https://github.com/searxng/searxng/pull/4284#issuecomment-2680550342 Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2025-01-28[refactor] typification of SearXNG (initial) / result items (part 1)Markus Heiser
Typification of SearXNG ======================= This patch introduces the typing of the results. The why and how is described in the documentation, please generate the documentation .. $ make docs.clean docs.live and read the following articles in the "Developer documentation": - result types --> http://0.0.0.0:8000/dev/result_types/index.html The result types are available from the `searx.result_types` module. The following have been implemented so far: - base result type: `searx.result_type.Result` --> http://0.0.0.0:8000/dev/result_types/base_result.html - answer results --> http://0.0.0.0:8000/dev/result_types/answer.html including the type for translations (inspired by #3925). For all other types (which still need to be set up in subsequent PRs), template documentation has been created for the transition period. Doc of the fields used in Templates =================================== The template documentation is the basis for the typing and is the first complete documentation of the results (needed for engine development). It is the "working paper" (the plan) with which further typifications can be implemented in subsequent PRs. - https://github.com/searxng/searxng/issues/357 Answer Templates ================ With the new (sub) types for `Answer`, the templates for the answers have also been revised, `Translation` are now displayed with collapsible entries (inspired by #3925). !en-de dog Plugins & Answerer ================== The implementation for `Plugin` and `Answer` has been revised, see documentation: - Plugin: http://0.0.0.0:8000/dev/plugins/index.html - Answerer: http://0.0.0.0:8000/dev/answerers/index.html With `AnswerStorage` and `AnswerStorage` to manage those items (in follow up PRs, `ArticleStorage`, `InfoStorage` and .. will be implemented) Autocomplete ============ The autocompletion had a bug where the results from `Answer` had not been shown in the past. To test activate autocompletion and try search terms for which we have answerers - statistics: type `min 1 2 3` .. in the completion list you should find an entry like `[de] min(1, 2, 3) = 1` - random: type `random uuid` .. in the completion list, the first item is a random UUID Extended Types ============== SearXNG extends e.g. the request and response types of flask and httpx, a module has been set up for type extensions: - Extended Types --> http://0.0.0.0:8000/dev/extended_types.html Unit-Tests ========== The unit tests have been completely revised. In the previous implementation, the runtime (the global variables such as `searx.settings`) was not initialized before each test, so the runtime environment with which a test ran was always determined by the tests that ran before it. This was also the reason why we sometimes had to observe non-deterministic errors in the tests in the past: - https://github.com/searxng/searxng/issues/2988 is one example for the Runtime issues, with non-deterministic behavior .. - https://github.com/searxng/searxng/pull/3650 - https://github.com/searxng/searxng/pull/3654 - https://github.com/searxng/searxng/pull/3642#issuecomment-2226884469 - https://github.com/searxng/searxng/pull/3746#issuecomment-2300965005 Why msgspec.Struct ================== We have already discussed typing based on e.g. `TypeDict` or `dataclass` in the past: - https://github.com/searxng/searxng/pull/1562/files - https://gist.github.com/dalf/972eb05e7a9bee161487132a7de244d2 - https://github.com/searxng/searxng/pull/1412/files - https://github.com/searxng/searxng/pull/1356 In my opinion, TypeDict is unsuitable because the objects are still dictionaries and not instances of classes / the `dataclass` are classes but ... The `msgspec.Struct` combine the advantages of typing, runtime behaviour and also offer the option of (fast) serializing (incl. type check) the objects. Currently not possible but conceivable with `msgspec`: Outsourcing the engines into separate processes, what possibilities this opens up in the future is left to the imagination! Internally, we have already defined that it is desirable to decouple the development of the engines from the development of the SearXNG core / The serialization of the `Result` objects is a prerequisite for this. HINT: The threads listed above were the template for this PR, even though the implementation here is based on msgspec. They should also be an inspiration for the following PRs of typification, as the models and implementations can provide a good direction. Why just one commit? ==================== I tried to create several (thematically separated) commits, but gave up at some point ... there are too many things to tackle at once / The comprehensibility of the commits would not be improved by a thematic separation. On the contrary, we would have to make multiple changes at the same places and the goal of a change would be vaguely recognizable in the fog of the commits. Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2024-11-24[chore] *: fix typos detected by typos-cliBnyro
2024-09-15[fix] Removes ``/>`` ending tags for void HTML elementsGrant Lanham
Removes ``/>`` ending tags for void elements [1] and replaces them with ``>``. Part of the larger cleanup to cleanup invalid HTML throughout the codebase [2]. [1] https://html.spec.whatwg.org/multipage/syntax.html#void-elements [2] https://github.com/searxng/searxng/issues/3793
2024-04-18[feat] template: add apple-touch-icon in html headermrpaulblack
* this makes it possible to add SearXNG to iOS devices homescreen with a proper icon
2024-02-10[mod] footer: i18n for the link names in the footerMarkus Heiser
Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2024-02-10[feat] footer: support for custom entriesBnyro
2023-10-31Check `public_instance` in simple themesev
Fix #2975
2023-05-29[mod] limiter -> botdetection: modularization and documentationMarkus Heiser
In order to be able to meet the outstanding requirements, the implementation is modularized and supplemented with documentation. This patch does not contain functional change, except it fixes issue #2455 ---- Aktivate limiter in the settings.yml and simulate a bot request by:: curl -H 'Accept-Language: de-DE,en-US;q=0.7,en;q=0.3' \ -H 'Accept: text/html' -H 'User-Agent: xyz' \ -H 'Accept-Encoding: gzip' \ 'http://127.0.0.1:8888/search?q=foo' In the LOG: DEBUG searx.botdetection.link_token : missing ping for this request: ..... Since ``BURST_MAX_SUSPICIOUS = 2`` you can repeat the query above two time before you get a "Too Many Requests" response. Closes: https://github.com/searxng/searxng/issues/2455 Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2023-05-29[mod] limiter: add random token to the limiter URLMarkus Heiser
By adding a random component in the limiter URL a bot can no longer send a ping by request a static URL. Related: https://github.com/searxng/searxng/pull/2357#issuecomment-1518525094 Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2023-05-29[mod] limiter: reduce request rates for requests without a pingMarkus Heiser
Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2022-09-21[fix] wording: SearXNG is 'open' and not 'hackable'Markus Heiser
The word "hackable" may arouse interest in programmers to participate in the development, but it scares the ordinary user. Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2022-09-02template: when enable_metrics are disabled, hide the empty statsAlexandre FLAMENT
when metrics are disabled: * hide the link to /stats at the bottom of the pages * in /preferences, hide the columns "Response time" and "Reliability"
2022-07-07Merge pull request #1428 from return42/fix-center_aligmentAlexandre Flament
fix typo and document preference 'center_alignment' in the 'ui' section
2022-07-04[mod] link to public-instances can be set to hiddenXavier horwood
Some administrators may want to hide the link to public_instances: If you run a private instance for a company that wants there employees to use the private instance instead of any of the public instances.
2022-07-03[fix] typo: add missing 'n' in center_aligment --> center_alignmentMarkus Heiser
Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2022-07-02Donation link: default value to searxng.org, can be hidden or customAlexandre Flament
Add a new setting: general.donation_url By default the value is https://docs.searxng.org/donate.html When the value is false, the link is hidden When the value is true, the link goes to the infopage donation, the administrator can create a custom page.
2022-07-02Theme: all top right icons have labels including "Preferences"Alexandre Flament
2022-06-25Theme: add Help and Donate links in all pagesAlexandre Flament
Close https://github.com/searxng/searxng/issues/931
2022-06-18Theme: add a preference to center the results (Oscar) (2nd edition)Alexandre Flament
related to * #1169 * #1281 * #1286
2022-06-16Add privacypolicy_url optionsamsaptidev
2022-06-05Revert "Theme: add a preference to center the results (Oscar)"Alexandre Flament
This reverts commit 4237f5fd50c2dc0e91513056d885f25038ef6787.
2022-06-05Theme: add a preference to center the results (Oscar)Alexandre Flament
related to #1169
2022-05-07[mod] client_settings: pass settings from server to JS clientMarkus Heiser
Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2022-03-13Various change on PR 930Alexandre Flament
2022-03-12[mod] replace /help by /info pages and include pages in project docsMarkus Heiser
This patch implements a bolierplate to share content from info-pages of the SearXNG instance (URL /info) with the project documentation (path /docs/user). The info pages are using Markdown (CommonMark), to include them in the project documentation (reST) the myst-parser [1] is used in the Sphinx-doc build chain. If base_url is known (defined in settings.yml) links to the instance are also inserted into the project documentation:: searxng_extra/docs_prebuild [1] https://www.sphinx-doc.org/en/master/usage/markdown.html Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2022-02-20[mod] infinite_scroll as preferenceAlexandre Flament
* oscar theme: code from searx/plugins/infinite_scroll.py * simple theme: new implementation Co-authored-by: Markus Heiser <markus.heiser@darmarIT.de>
2022-02-05[enh] avoid /about redirect in template linksMartin Fischer
2022-01-31[simple] add aria-label to preferences linkMartin Fischer
2022-01-31[simple] link preferences on /about and /statsMartin Fischer
We want to link the preferences from every page (except of course the preferences page).
2022-01-30[simple] introduce page_with_header.html templateMartin Fischer
Previously the preferences & stats templates contained the markup: <a href="{{ url_for('index') }}"><h1><span>SearXNG</span></h1></a> There are many things wrong with this: 1. the markup was duplicated 2. the CSS needed to be changed whenever a new page wanted to use this header (since the CSS used page-specific selectors) 3. h1 should be reserved for the actual page title (e.g. Preferences or Engine stats) 4. the image was set via CSS which also set: span { visibility: hidden; } which however removes the alternative text from the accessibility tree (meaning screen readers will ignore it). This commit fixes all these problems.
2021-11-29[enh] add SVG favicon href="favicon.svg" type="image/svg+xml"Markus Heiser
Add link:: <link rel="icon" href="favicon.png" sizes="any"> <link rel="icon" href="favicon.svg" type="image/svg+xml"> Modern browsers should request:: INFO werkzeug : 127.0.0.1 - - [28/Nov/2021 17:03:07] "GET /static/themes/simple/img/favicon.svg HTTP/1.1" 200 - [1] https://github.com/audreyfeldroy/favicon-cheat-sheet#svg-file [2] https://dev.to/masakudamatsu/favicon-nightmare-how-to-maintain-sanity-3al7 Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2021-11-19[enh] simple theme: add "simple-style" preferencesAlexandre Flament
2021-11-11[fix] scaling of result page on small screens by @ZetaTomMrPaulBlack
* thanks to https://github.com/ZetaTom for the fix! * set the width of the input#q element to 100% of the 1fr space of the grid layout * change the viewport meta tag to th recommended value (see: https://developer.mozilla.org/en-US/docs/Web/HTML/Viewport_meta_tag#viewport_basics) * add a new @ultra-small-phone width of 20rem; when a device is smaller than that the search logo does not get displayed on the result page anymore
2021-11-05[fix] simple theme: disable hotkeys when they are not enabled in the preferencesAlexandre Flament
2021-10-12[fix] templates: lang attribute of html uses hyphenAlexandre Flament
https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes#attr-lang https://www.w3.org/TR/REC-xml/#sec-lang-tag
2021-10-01SearXNG: simple themeAlexandre Flament
2021-09-12[theme] link to engine stats in footerMrPaulBlack
2021-07-30version based on the git repositoryAlexandre Flament
This commit remove the need to update the brand for GIT_URL and GIT_BRANCH: there are read from the git repository. It is possible to call python -m searx.version freeze to freeze the current version. Useful when the code is installed outside git (distro package, docker, etc...)
2021-07-21[mod] drop usage of the searx.brand namespace (templates & /config)Markus Heiser
In the templates and the /config (JSON) the usage of the 'brand.*' name space is replaced by 'searx.get_setting' function. - new_issue_url --> get_setting('brand.new_issue_url') - brand.GIT_URL --> get_setting('brand.git_url') - brand.PUBLIC_INSTANCES --> get_setting('brand.public_instances') - brand.DOCS_URL --> get_setting('brand.docs_url') - brand.ISSUE_URL --> get_setting('brand.issue_url') - brand.CONTACT_URL --> get_setting('general.contact_url', '') The macro 'new_issue' from searx/templates/*/messages/no_results.html is now imported with context:: {% from '__common__/new_issue.html' import new_issue with context %} To get *public instances URL* from context's 'get_setting()' function:: get_setting('brand.public_instances','') Macro's prototype does no longer need the 'new_issue_url' argument and has been changed to:: macro new_issue(engine_name, engine_reliability) Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2021-04-22More brandingAlexandre Flament
2021-03-16[mod] replace /translations.js by embedded JSONAlexandre Flament
In webapp.py, there is a new function "get_translations" lists available translations Close #2064
2020-12-18[mod] Makefile: make CONTACT_URL optionalAlexandre Flament
2020-12-18Add link to contact instance maintainer to footer of each page (#2391)BBaoVanC