Author SHA1 Message Date
dependabot[bot] 2b60a33d1c [upd] web-client (simple): Bump @biomejs/biome
Bumps the minor group in /client/simple with 1 update: [@biomejs/biome](https://github.com/biomejs/biome/tree/HEAD/packages/@biomejs/biome).


Updates `@biomejs/biome` from 2.6.3 to 2.6.4
- [Release notes](https://github.com/biomejs/biome/releases)
- [Changelog](https://github.com/biomejs/biome/blob/main/CHANGELOG_v1.md)
- [Commits](https://github.com/biomejs/biome/commits/@biomejs/biome@2.6.4/packages/@biomejs/biome)

---
updated-dependencies:
- dependency-name: "@biomejs/biome"
  dependency-version: 2.6.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-11-06 07:23:21 +00:00
Nick Booth 3e95f6cd2a [fix] boardreader engine: refresh session ID after it expires
The engine cached boardreader's session ID for the default 7 days, but
boardreader invalidates it much sooner.  Once that happens, boardreader
answers with "204 no content" and an empty body.  resp.json() raised a
JSONDecodeError on every search until the 7 day mark timed out.

- Default cache session ID for 1 hour (SESSION_ID_EXPIRE)
- on a 204 response, invalidate the cached ID and raise
  SearxEngineAPIException, so the next query fetches a fresh session ID.
2026-11-05 14:06:44 +01:00
ᑕƳᗷƎƦƬΣΣЛ ㋛⎠ adbf160ff3 [fix] braveapi: don't try to parse web results as news results 2026-11-05 14:04:51 +01:00
EnragedAntelope cccbc9e158 [fix] brave api: set cache control header to no-cache (#6910) 2026-11-02 18:38:48 +01:00
geogeorgi d138f443bd [feat] engines: add ReaderFunded (general, web) - #6908 2026-11-02 14:24:53 +01:00
WookieeOnCrack 10db664f14 [fix] qwant: update request params to improve impersonation 2026-11-01 23:52:48 +01:00
dependabot[bot]andIvan Gabaldon 8b35dcd2e3 [upd] web-client (simple): Bump the minor group in /client/simple with 3 updates (#6906)
* [upd] web-client (simple): Bump the minor group

Bumps the minor group in /client/simple with 3 updates: [@biomejs/biome](https://github.com/biomejs/biome/tree/HEAD/packages/@biomejs/biome), [browserslist](https://github.com/browserslist/browserslist) and [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite).

Updates `@biomejs/biome` from 2.5.15 to 2.6.3
- [Release notes](https://github.com/biomejs/biome/releases)
- [Changelog](https://github.com/biomejs/biome/blob/main/CHANGELOG_v1.md)
- [Commits](https://github.com/biomejs/biome/commits/@biomejs/biome@2.6.3/packages/@biomejs/biome)

Updates `browserslist` from 4.29.4 to 4.29.5
- [Release notes](https://github.com/browserslist/browserslist/releases)
- [Changelog](https://github.com/browserslist/browserslist/blob/main/CHANGELOG.md)
- [Commits](https://github.com/browserslist/browserslist/compare/4.29.4...4.29.5)

Updates `vite` from 8.3.4 to 8.3.5
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v8.3.5/packages/vite)

---
updated-dependencies:
- dependency-name: "@biomejs/biome"
  dependency-version: 2.6.3
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: minor
- dependency-name: browserslist
  dependency-version: 4.29.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: minor
- dependency-name: vite
  dependency-version: 8.3.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* [upd] rebuild static

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Ivan Gabaldon <igabaldon@inetol.net>
2026-11-01 20:41:00 +01:00
extevent 9ded3bec1a Decrease timeout for Tor check API request
Reduce timeout for Tor check API request from 60 to the default 10 seconds. The longer timeout can delay failure detection when the Tor proxy is unavailable or unresponsive.This reverts the commit #1517724 by the user Evhorizon.
2026-11-01 14:48:54 +01:00
dependabot[bot] ffa88e3ba3 [upd] github-actions: Bump actions/setup-python from 7.0.0 to 7.1.0 (#6904)
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 7.0.0 to 7.1.0.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](https://github.com/actions/setup-python/compare/5fda3b95a4ea91299a34e894583c3862153e4b97...6d4fd22b20465ccc0f7354476588e8df7c9ca0e0)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-version: 7.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-30 19:05:25 +01:00
dependabot[bot] 15ca4f3c1b [upd] github-actions: Bump docker/login-action from 4.6.0 to 4.7.0 (#6905)
Bumps [docker/login-action](https://github.com/docker/login-action) from 4.6.0 to 4.7.0.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/dbcb813823bdd20940b903addbd779551569679f...81c6f93d4bc991e510b342a00b419b3bb4efc5c6)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-version: 4.7.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-30 19:04:56 +01:00
github-actions[bot] 1cd13d98d6 [l10n] update translations from Weblate (#6903)
50daccb09 - 2026-10-28 - itsxiaobai <itsxiaobai@noreply.codeberg.org>
c098d04fa - 2026-10-28 - seferkalkan <seferkalkan@noreply.codeberg.org>
3fb6d541e - 2026-10-28 - artnay <artnay@noreply.codeberg.org>
1e088cb48 - 2026-10-27 - itsxiaobai <itsxiaobai@noreply.codeberg.org>
0c46c4987 - 2026-10-27 - lugged9922 <lugged9922@noreply.codeberg.org>
32bfe5e99 - 2026-10-26 - Kamalavelan <demonshreder@noreply.codeberg.org>
a724a0a3c - 2026-10-26 - demilune <demilune@noreply.codeberg.org>
3ab6acf9b - 2026-10-25 - alexgabi <alexgabi@noreply.codeberg.org>
99d4d0c54 - 2026-10-23 - Aindriú Mac Giolla Eoin <aindriu80@noreply.codeberg.org>
2026-10-30 08:19:47 +01:00
github-actions[bot]andsearxng-bot c15647b5a5 [mod] data: update searx.data - update_currencies.py (#6900)
Co-authored-by: searxng-bot <searxng-bot@users.noreply.github.com>
2026-10-29 19:50:18 +01:00
github-actions[bot] cff884f98b [mod] data: update searx.data - update_external_bangs.py (#6897) 2026-10-29 09:15:22 +01:00
github-actions[bot] a65db462a4 [mod] data: update searx.data - update_ahmia_blacklist.py (#6899) 2026-10-29 09:14:48 +01:00
github-actions[bot] 6d85146a00 [mod] data: update searx.data - update_firefox_version.py (#6898) 2026-10-29 09:12:59 +01:00
Bnyro c360868e5b [feat] xprivo: properly detect ratelimits instead of showing HTTP errors 2026-10-28 10:54:38 +01:00
dependabot[bot] b5ed73fcb6 [upd] pypi: Bump python-dateutil from 2.9.0.post0 to 3.0.0 (#6888)
Bumps [python-dateutil](https://github.com/dateutil/dateutil) from 2.9.0.post0 to 3.0.0.
- [Release notes](https://github.com/dateutil/dateutil/releases)
- [Changelog](https://github.com/dateutil/dateutil/blob/master/NEWS)
- [Commits](https://github.com/dateutil/dateutil/compare/2.9.0.post0...3.0.0)

---
updated-dependencies:
- dependency-name: python-dateutil
  dependency-version: 3.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-27 21:33:35 +01:00
dependabot[bot] 28423d332d [upd] pypi: Bump the minor group with 2 updates (#6887)
Bumps the minor group with 2 updates: [certifi](https://github.com/certifi/python-certifi) and [granian](https://github.com/emmett-framework/granian).


Updates `certifi` from 2026.10.19 to 2026.10.23
- [Commits](https://github.com/certifi/python-certifi/compare/2026.10.19...2026.10.23)

Updates `granian` from 2.8.4 to 2.8.5
- [Release notes](https://github.com/emmett-framework/granian/releases)
- [Commits](https://github.com/emmett-framework/granian/compare/v2.8.4...v2.8.5)

---
updated-dependencies:
- dependency-name: certifi
  dependency-version: 2026.10.23
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor
- dependency-name: granian
  dependency-version: 2.8.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-27 20:00:45 +01:00
Brock Vojkovic ef7bae9ddb [upd] pypi: Bump curl_cffi from 0.16.3 to 0.17.0 (#6890)
Fixes HTTP2Shell (CVE-2026-111497).

Signed-off-by: vojkovic <git@vojk.au>
2026-10-27 17:00:58 +08:00
Brock Vojkovic cb74e7f810 [fix] autocomplete: apply outgoing request timeout (#6886)
Fixes update_kwargs so it does not throw away the dict and instead uses the correct settings.

Signed-off-by: vojkovic <git@vojk.au>
2026-10-27 10:54:52 +08:00
Sandro 54ca1d9cfb [fix] tagesschau: remove from general category (#6882) 2026-10-25 19:34:17 +01:00
github-actions[bot]andsearxng-bot ef0ec03da0 [l10n] update translations from Weblate (#6850)
3dfe3d3f7 - 2026-10-19 - cyh21185 <cyh21185@noreply.codeberg.org>
896dc9faf - 2026-10-20 - marc-lopez <marc-lopez@noreply.codeberg.org>
f53baeeae - 2026-10-16 - marc-lopez <marc-lopez@noreply.codeberg.org>

Co-authored-by: searxng-bot <searxng-bot@users.noreply.github.com>
2026-10-24 10:46:18 +02:00
162 changed files with 7173 additions and 753 deletions
+3 -3
View File
@@ -46,7 +46,7 @@ jobs:
steps:
- name: Setup Python
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
with:
python-version: "${{ env.PYTHON_VERSION }}"
@@ -140,14 +140,14 @@ jobs:
steps:
- name: Login to Docker Hub
uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4.6.0
uses: docker/login-action@81c6f93d4bc991e510b342a00b419b3bb4efc5c6 # v4.7.0
with:
registry: "docker.io"
username: "${{ secrets.DOCKER_USER }}"
password: "${{ secrets.DOCKER_TOKEN }}"
- name: Login to GHCR
uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4.6.0
uses: docker/login-action@81c6f93d4bc991e510b342a00b419b3bb4efc5c6 # v4.7.0
with:
registry: "ghcr.io"
username: "${{ github.repository_owner }}"
+1 -1
View File
@@ -40,7 +40,7 @@ jobs:
steps:
- name: Setup Python
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
with:
python-version: "${{ env.PYTHON_VERSION }}"
+1 -1
View File
@@ -32,7 +32,7 @@ jobs:
steps:
- name: Setup Python
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
with:
python-version: "${{ env.PYTHON_VERSION }}"
+2 -2
View File
@@ -34,7 +34,7 @@ jobs:
steps:
- name: Setup Python
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
with:
python-version: "${{ matrix.python-version }}"
@@ -62,7 +62,7 @@ jobs:
runs-on: ubuntu-26.04-arm
steps:
- name: Setup Python
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
with:
python-version: "${{ env.PYTHON_VERSION }}"
+2 -2
View File
@@ -35,7 +35,7 @@ jobs:
steps:
- name: Setup Python
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
with:
python-version: "${{ env.PYTHON_VERSION }}"
@@ -83,7 +83,7 @@ jobs:
steps:
- name: Setup Python
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
with:
python-version: "${{ env.PYTHON_VERSION }}"
+224 -227
View File
@@ -15,9 +15,9 @@
"swiped-events": "1.2.0"
},
"devDependencies": {
"@biomejs/biome": "2.5.15",
"@biomejs/biome": "2.6.4",
"@types/node": "^26.6.5",
"browserslist": "^4.29.4",
"browserslist": "^4.29.5",
"browserslist-to-esbuild": "^2.1.1",
"edge.js": "^6.5.1",
"less": "^4.9.0",
@@ -29,7 +29,7 @@
"stylelint-prettier": "^5.0.3",
"svgo": "^4.1.0",
"typescript": "~7.0.2",
"vite": "^8.3.3",
"vite": "^8.3.5",
"vite-bundle-analyzer": "^1.3.9"
}
},
@@ -69,9 +69,9 @@
}
},
"node_modules/@biomejs/biome": {
"version": "2.5.15",
"resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.5.15.tgz",
"integrity": "sha512-WZTW4slm/pdkh92K6t/3aEN++44JD1PQ7squ7RCMLI1flHGl43DVOIGXvCjHiZgBMO1V4uYxoFNtqrIA4qGuIQ==",
"version": "2.6.4",
"resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.6.4.tgz",
"integrity": "sha512-8sKKwaNW4ot22awZ3lBjwWLHnUFXgXnrBPYS2gNlBAXRbDC++7kqjK2H7dR/FgCDtPvO1xfKpgEhJkGxAKYkxA==",
"dev": true,
"license": "MIT OR Apache-2.0",
"bin": {
@@ -85,20 +85,56 @@
"url": "https://opencollective.com/biome"
},
"optionalDependencies": {
"@biomejs/cli-darwin-arm64": "2.5.15",
"@biomejs/cli-darwin-x64": "2.5.15",
"@biomejs/cli-linux-arm64": "2.5.15",
"@biomejs/cli-linux-arm64-musl": "2.5.15",
"@biomejs/cli-linux-x64": "2.5.15",
"@biomejs/cli-linux-x64-musl": "2.5.15",
"@biomejs/cli-win32-arm64": "2.5.15",
"@biomejs/cli-win32-x64": "2.5.15"
"@biomejs/cli-android-arm64": "2.6.4",
"@biomejs/cli-android-x64": "2.6.4",
"@biomejs/cli-darwin-arm64": "2.6.4",
"@biomejs/cli-darwin-x64": "2.6.4",
"@biomejs/cli-linux-arm64": "2.6.4",
"@biomejs/cli-linux-arm64-musl": "2.6.4",
"@biomejs/cli-linux-x64": "2.6.4",
"@biomejs/cli-linux-x64-musl": "2.6.4",
"@biomejs/cli-win32-arm64": "2.6.4",
"@biomejs/cli-win32-x64": "2.6.4"
}
},
"node_modules/@biomejs/cli-android-arm64": {
"version": "2.6.4",
"resolved": "https://registry.npmjs.org/@biomejs/cli-android-arm64/-/cli-android-arm64-2.6.4.tgz",
"integrity": "sha512-jwrwigP4tBcHxzuV8izioX/BOUhJL/4e2rNSOE5nCjBkVC018LQAQUGiH+CNkFYvLtQ1dcZo5/xXERmaAGc7JQ==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT OR Apache-2.0",
"optional": true,
"os": [
"android"
],
"engines": {
"node": ">=14.21.3"
}
},
"node_modules/@biomejs/cli-android-x64": {
"version": "2.6.4",
"resolved": "https://registry.npmjs.org/@biomejs/cli-android-x64/-/cli-android-x64-2.6.4.tgz",
"integrity": "sha512-HdGInPJ4nZFwHxzvEtcp2nmSBtUyJrurmtIK43upFckuS3+ZqVM05HtsxQWnqGsuy/pxckIAjyKWlEKRlBXUyA==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT OR Apache-2.0",
"optional": true,
"os": [
"android"
],
"engines": {
"node": ">=14.21.3"
}
},
"node_modules/@biomejs/cli-darwin-arm64": {
"version": "2.5.15",
"resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.5.15.tgz",
"integrity": "sha512-BZVzFhJ/mUvTLMYbc9x6el0o2Uv5zP7bACYyhFb6fSc1giroXm7PL0a5KqMJ9F+/BnkYRjagD/ROSDVOZ6eapg==",
"version": "2.6.4",
"resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.6.4.tgz",
"integrity": "sha512-0VvcUz46wbg59Q4TZ59KkIjDJrxEyu4Eoe79+F4SChxoWe+W7AEyIp6F5r72C9+p6MsB6dIovnZt1D30lGM3XA==",
"cpu": [
"arm64"
],
@@ -113,9 +149,9 @@
}
},
"node_modules/@biomejs/cli-darwin-x64": {
"version": "2.5.15",
"resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.5.15.tgz",
"integrity": "sha512-V5Kw63V+fVGNFhFrizDxMbGXAzZCh8kYzJpy3GI6gTapWDg7bZK9oYC9CbVgQSEdTnupz0U5Efz8Ev+5vdBBXw==",
"version": "2.6.4",
"resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.6.4.tgz",
"integrity": "sha512-fxmvkF81srlS3DiMyfm+aG3J0eG+6/BjaxRyjy57KbLSafnq0PO+hHfVWmtH2ty0S7nm6yDXBRwySfFeaRJKRQ==",
"cpu": [
"x64"
],
@@ -130,9 +166,9 @@
}
},
"node_modules/@biomejs/cli-linux-arm64": {
"version": "2.5.15",
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.5.15.tgz",
"integrity": "sha512-XaG7P7eeSLYETD3K9grfB0mQmpLQZjygdbsxekWBJAg4am79fGAtRpfRyNnTvXB2fZFNnJZG3nXm7HBat0+VUw==",
"version": "2.6.4",
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.6.4.tgz",
"integrity": "sha512-6+bK1Y/evmIUiJr7auertuMbiaYVicJhqA1bZyL47lCMWugv8l0gFQCqvR/gN1vZMHYm+HwoTKgeMxdNFCoQTg==",
"cpu": [
"arm64"
],
@@ -150,9 +186,9 @@
}
},
"node_modules/@biomejs/cli-linux-arm64-musl": {
"version": "2.5.15",
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.5.15.tgz",
"integrity": "sha512-tGzZUTcJCV7tj5Adh/Gn6nR4MycqA3iohq2LEcrarAgRBkU0h0OKd2UzCRkOsOYOuUGaUJb4YmqRqyy2feGGSw==",
"version": "2.6.4",
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.6.4.tgz",
"integrity": "sha512-31ZaH/MHqPX+O+evRwRrCHQ8W5/9adY+/eMytGGWZnRx1T41QsWIF09+/WujynLBhWZUxNGS5CtsWLwgOFTAyg==",
"cpu": [
"arm64"
],
@@ -170,9 +206,9 @@
}
},
"node_modules/@biomejs/cli-linux-x64": {
"version": "2.5.15",
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.5.15.tgz",
"integrity": "sha512-xE4iEW/3LqlYj9GFgGrFsFSH51dEEpUbYWBfeOv0q87WkUDxK2o/HhreSb7qMJqck70RVM6Lg96hgedcAYcOkA==",
"version": "2.6.4",
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.6.4.tgz",
"integrity": "sha512-tbFZMdL6dP/ws4edXxYG9WhvaVa1ZDzL4G5DzahnWW7Psib9H+VTdyU4XXVxpJk5j/nYZroSbvSNyYlpW3yCIw==",
"cpu": [
"x64"
],
@@ -190,9 +226,9 @@
}
},
"node_modules/@biomejs/cli-linux-x64-musl": {
"version": "2.5.15",
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.5.15.tgz",
"integrity": "sha512-IlxUcyxilVGPsE008x13pWdkTbU3nQpP2i9b5UrbOYj6goBkKsRX1XB7yJLcV+O1H9LBchIIm4adOaVLZBX0ZQ==",
"version": "2.6.4",
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.6.4.tgz",
"integrity": "sha512-bomSa2XdQAGGj6Cwdm4M13qE+lN9+AOlW8KtI4hdyVyRRF/Z71qPAi95T4wtdZK0QpBbkTW8hgbZZCwPi4xzIw==",
"cpu": [
"x64"
],
@@ -210,9 +246,9 @@
}
},
"node_modules/@biomejs/cli-win32-arm64": {
"version": "2.5.15",
"resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.5.15.tgz",
"integrity": "sha512-2kPKzhNlm8C+Ru3GcO0Me2ODkCBLrVOUNuyi84RJyWDVKAA4+Kjj3jMjL938lF6BRfvltC4vB2nPY9SvN51Ovg==",
"version": "2.6.4",
"resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.6.4.tgz",
"integrity": "sha512-eCsqt8Ma3eVap+oyJCDnJZH60SIU464B66n3y38EUTJdM1T/HfZol1FJC9vb+sHToX0ix8XzqPcwJnOzyAJz0g==",
"cpu": [
"arm64"
],
@@ -227,9 +263,9 @@
}
},
"node_modules/@biomejs/cli-win32-x64": {
"version": "2.5.15",
"resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.5.15.tgz",
"integrity": "sha512-yAzh4UqEImV6Hcy0zjUqNfJAsUhoD64FBQCdTG8Md/Z2wQeVP/ZmJ3XRYAs1g8J9fjTFyl2fCtc5FB5til47+g==",
"version": "2.6.4",
"resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.6.4.tgz",
"integrity": "sha512-pYsMy5AThiHFOZAsngg8qN4PurM6nInKBhVX7sbj3eNpRQqo1Hb0MgCwPL7VqVMrmcEEMj9Ks3qbkallR65e8g==",
"cpu": [
"x64"
],
@@ -315,9 +351,9 @@
}
},
"node_modules/@csstools/css-syntax-patches-for-csstree": {
"version": "1.1.15",
"resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.15.tgz",
"integrity": "sha512-J0u7HkVl2nzSlhsiTOp4AmwcUQ3D+mGEEKfBy/7To5/y7F2OHwyLrXfrhR0SMgr4p5Lo+eaMVSeai24zUcBIxA==",
"version": "1.1.16",
"resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.16.tgz",
"integrity": "sha512-LsDbJPP/B8cPasUJyTA5S99F7C4G93ngW8hUluXz8CFeOaaRnBPtBiIlvgcPYU0HmHNz8CXg+1vwFrIB4F6Dgw==",
"dev": true,
"funding": [
{
@@ -1078,9 +1114,9 @@
}
},
"node_modules/@oxc-project/types": {
"version": "0.153.0",
"resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.153.0.tgz",
"integrity": "sha512-jSNrRIyvPVLL5E1z/tS5zLAprosGz/FuI1PWwEOz59j3E4TTTzSpqKb/RDGqJhhW0QHYISGXxq582wGx6T11Tw==",
"version": "0.156.0",
"resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.156.0.tgz",
"integrity": "sha512-1Duyg48TdJNdyhEB8Xn1L36bT9Pv6GUtlKjHxOys8xkaF/rQq3XJE+bAurSK/AgIz5mGFsb77cn9Pb20+WCScw==",
"dev": true,
"license": "MIT",
"funding": {
@@ -1148,9 +1184,9 @@
"license": "MIT"
},
"node_modules/@poppinss/utils": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/@poppinss/utils/-/utils-7.1.1.tgz",
"integrity": "sha512-m1pR6EsycFyDHWDyoWnTI2sgEpOAZuKECQRgZ9i+uGzU/DNoEXn70ldt1V3u2EKp2tNf9T9QqX1wBMHm+xcpiw==",
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/@poppinss/utils/-/utils-7.1.2.tgz",
"integrity": "sha512-fliKjqqbgEWa4yqHV2Vj7mgNmsARtJ6QeYy5/l0fDWrJ+gHZ3pmwiOqixuejZDsF+h2gdn8MMA+oAy2GfvqDVQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1162,9 +1198,9 @@
}
},
"node_modules/@rolldown/binding-android-arm-eabi": {
"version": "1.2.13",
"resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.13.tgz",
"integrity": "sha512-Vu/NICrgdRvUOeaJZIyB2FP63s6fO/4ud5l8dXmxDx9yDyn+mN0y+gsvsVviSli+T361Aqo0h46EuMoobrwawA==",
"version": "1.2.16",
"resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.16.tgz",
"integrity": "sha512-ia3DwAs0OsMGS7+IConptSiyk9pEXkOx/AbJ2n/lAGxH3QkWQus1t8d7gnAT38FCU2sQu8lUbeR6AiZFv4JxaA==",
"cpu": [
"arm"
],
@@ -1179,9 +1215,9 @@
}
},
"node_modules/@rolldown/binding-android-arm64": {
"version": "1.2.13",
"resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.13.tgz",
"integrity": "sha512-6LEoIrGy5vvCd2boNnv2soPSUZj/PRvhp8R/t9KlX+mIZxThIE/ZqxrGXxmuNX0FuvQFvLdZr7S4HrYpYBVhEQ==",
"version": "1.2.16",
"resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.16.tgz",
"integrity": "sha512-kx5wBiMB6E7TEvpl2B9gjLU004BkvEm2Dr941BFjx/SontPwSzNuQUIoVKxHHoSjpFIfHMmcguyLOtyn0hObRg==",
"cpu": [
"arm64"
],
@@ -1196,9 +1232,9 @@
}
},
"node_modules/@rolldown/binding-darwin-arm64": {
"version": "1.2.13",
"resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.13.tgz",
"integrity": "sha512-CaJSRzlQ6Q+zkDMVA9OkVxBjVoPRCDEE3v0FSJ9kIQBgRjFApA3Si4ijhbNVUji7ZJt+PfO0e46qy4nPInHUPA==",
"version": "1.2.16",
"resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.16.tgz",
"integrity": "sha512-qslZrXnKJU4cUpjoAmtAo/KQM9e2IRMlmpig6Zpwj+8KWxW8v+nkAf9216Bsek9lOC1jvg2yCjygCFo2f83msQ==",
"cpu": [
"arm64"
],
@@ -1213,9 +1249,9 @@
}
},
"node_modules/@rolldown/binding-darwin-x64": {
"version": "1.2.13",
"resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.13.tgz",
"integrity": "sha512-e4r340I5hxSzJkD3YJBxgzq/rJ3wwxwdLLb2FPt1Zpyem20nrQPT11DDEEkazwxaHumH8wpglsp/Ozgj/wT6mw==",
"version": "1.2.16",
"resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.16.tgz",
"integrity": "sha512-FdF+y48ND13eAyM2mQn+85kvAqNlvRWROy2rhgA463X/0Gv4vGtazZtfaF1mRBLscYvtOlh4QnLjOWiFzX69OQ==",
"cpu": [
"x64"
],
@@ -1230,9 +1266,9 @@
}
},
"node_modules/@rolldown/binding-freebsd-x64": {
"version": "1.2.13",
"resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.13.tgz",
"integrity": "sha512-hoBWDZ4/K/mJKVMbsgUd1jfpA2DiOrJ54mpegObU9TBHBBrtX4FLIXJJQRDPZ/2Dn91GvPob+Z2hwKJzf4E5SQ==",
"version": "1.2.16",
"resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.16.tgz",
"integrity": "sha512-ddjqFM5e95AgLbUPtKIS7V1KTVlA0RUgCVr5mn+/IEhsdy3pr+Vuj/HZ7nlMN2FyxIwUktOH1LEPIQXO1v9y1Q==",
"cpu": [
"x64"
],
@@ -1247,9 +1283,9 @@
}
},
"node_modules/@rolldown/binding-linux-arm-gnueabihf": {
"version": "1.2.13",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.13.tgz",
"integrity": "sha512-oF9fZu3vTWnTiVAkDFxU9PJLt1nh20K9RRpuHsR7ZnE2L7XookBbDBVLojCVSLGbvtSlxeUNnjAj6DbNsKyzbg==",
"version": "1.2.16",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.16.tgz",
"integrity": "sha512-tHdKWbFkFBI687iim3LIyIvyL7j66VvQYkDPss5Stn/qyE2tWkR1YD0dXmXPFKKqT/o5ZEJVsaRsWS2meQwGOA==",
"cpu": [
"arm"
],
@@ -1264,9 +1300,9 @@
}
},
"node_modules/@rolldown/binding-linux-arm64-gnu": {
"version": "1.2.13",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.13.tgz",
"integrity": "sha512-DTpb/+jMiqWMPgphn4ksW1zW+XLJ6dJJ9FMvnIk9I291LhCctMPhMYJrP5t9p6C9qa3KXadDdUEZHBaPh3kNxQ==",
"version": "1.2.16",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.16.tgz",
"integrity": "sha512-FJiLGAblPBMlBEdbOqw6kW6QcXDWAf/oJu7gYs9ZJZwmg+K+/zjFLxPTIY9izJUzxzc24FHvmseyA0IvJSl17w==",
"cpu": [
"arm64"
],
@@ -1284,9 +1320,9 @@
}
},
"node_modules/@rolldown/binding-linux-arm64-musl": {
"version": "1.2.13",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.13.tgz",
"integrity": "sha512-xU+Kvv9N2A3SY35zFh1FWWNjxbadE/BKeqnkXe7vScU4GZsw757BlVmDLITZEq8DPpk6m7uoDYkK7P+x/uU5Ow==",
"version": "1.2.16",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.16.tgz",
"integrity": "sha512-hrJpblMsrQ58U9veWpbXzkhV5zStunds6HWLprqq1qauvgBr1E6P+24kLj6lSLI9vjRn/RYpjprhkHQPKGWpNg==",
"cpu": [
"arm64"
],
@@ -1304,9 +1340,9 @@
}
},
"node_modules/@rolldown/binding-linux-ppc64-gnu": {
"version": "1.2.13",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.13.tgz",
"integrity": "sha512-XMk/hnhh25oQ756Lclb1Q11h4ll0xC0Esa5w4Vzp+mAE2S3AGJgeM0SonrIgY8fHhjarb6hcoTuwoFG0VVP2ig==",
"version": "1.2.16",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.16.tgz",
"integrity": "sha512-qJd/dC6j6CwLG9/s/RP2nb1RZ0GIgj7Ioj7x/SYa3RzjVrlzrmH0fhIOpfvqQDeIsdP0loi+kHaMhJzY1PBIaA==",
"cpu": [
"ppc64"
],
@@ -1324,9 +1360,9 @@
}
},
"node_modules/@rolldown/binding-linux-s390x-gnu": {
"version": "1.2.13",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.13.tgz",
"integrity": "sha512-U1BoTHYmlywE2n3HUWjzZ+8EQsKr+OwpxYuDWaubx42tUL8QSL7nOqRz/NVHanibbFP3M1Rxuprz/wNcbMKjqw==",
"version": "1.2.16",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.16.tgz",
"integrity": "sha512-Vx7Xg5uUJuNcujJjI70OICaH0EYj80BtOLZTSN7uOYg8QOLlyKnaG0IW7Fn/J0IpJsaKzmDKMhOQv1JBM9m9vg==",
"cpu": [
"s390x"
],
@@ -1344,9 +1380,9 @@
}
},
"node_modules/@rolldown/binding-linux-x64-gnu": {
"version": "1.2.13",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.13.tgz",
"integrity": "sha512-J4cm80Pc6wEwV5AZ42o62sIQgDk+Y7R2s646jIwuvO+4V46QB58N4vVuMPWCBaNgursXLpmUWJV//WQAkPvHBQ==",
"version": "1.2.16",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.16.tgz",
"integrity": "sha512-TNKhgE3uJTsTzatUSSYt0Kgo+Oa2uSlSjz4r1aEIea7HX6ULBym4fAlYUhG1i6pjNf2njfCUAfKwr6C3E9Xg1w==",
"cpu": [
"x64"
],
@@ -1364,9 +1400,9 @@
}
},
"node_modules/@rolldown/binding-linux-x64-musl": {
"version": "1.2.13",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.13.tgz",
"integrity": "sha512-W0euZS40U4V6JkmEnVCIX9mcsL6cbXQ4X8c2w+MMOIjFg68TXUW+u3RT+2e1t1pv9mg/EP3pDtK3POXdQ7Rxyw==",
"version": "1.2.16",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.16.tgz",
"integrity": "sha512-7chXdpjXZ8qG0+mIxECN3cT9kvhZ3/oZhMX6Pp876P7CDrIy8nJswva6Mq357JR7eYXfuskwZxMeV1SzoZdHrA==",
"cpu": [
"x64"
],
@@ -1384,9 +1420,9 @@
}
},
"node_modules/@rolldown/binding-openharmony-arm64": {
"version": "1.2.13",
"resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.13.tgz",
"integrity": "sha512-do/AF/4n9MRshia3a5aXoy8xM2c6mgfT6D7H/dY6my5z+hfCIR4ab7mk4IRj++nsEQpKy39kd0DQnDq+r692tw==",
"version": "1.2.16",
"resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.16.tgz",
"integrity": "sha512-Kwjt+7uNTJK5/MDkGWGVO2KQPnj8yAV75dMpfwyHZrJSXWHrniOB0aUEWlVYf3H1hOqFLIStLdM5QXq6bnKmOQ==",
"cpu": [
"arm64"
],
@@ -1401,9 +1437,9 @@
}
},
"node_modules/@rolldown/binding-win32-arm64-msvc": {
"version": "1.2.13",
"resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.13.tgz",
"integrity": "sha512-6FtUf2cJZobutJdxnGYX8z0vtbgqU0b2v8vfBhkXb9wp2MppMFtkunE+IaOntyi01rkIQoPW2GHABtfzsC0BRQ==",
"version": "1.2.16",
"resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.16.tgz",
"integrity": "sha512-/LH6WfjDRXXJz/p5xl4TmU+jpcnwcxbKEQBW/GZE0JHfN0lGIyTtsUEGaQ/q/GikkGJ2yLKe6pwm7AnEWO8pdw==",
"cpu": [
"arm64"
],
@@ -1418,9 +1454,9 @@
}
},
"node_modules/@rolldown/binding-win32-x64-msvc": {
"version": "1.2.13",
"resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.13.tgz",
"integrity": "sha512-UKhFaZTeTcbKrb3iU82m17jVcPEAoqDkCN5MBqgPyZSwp/cQmib21crTS0DdH7T1B7wZRWEI89YQAOJMet5yhg==",
"version": "1.2.16",
"resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.16.tgz",
"integrity": "sha512-1lv1KvX0Z871zfk7vw+dnXMMnHNyDwMzWG8Kv3HxDXMOhzCX4SHc7HK319fInP0i+0p9D8brkfzL7pJOaGl+tw==",
"cpu": [
"x64"
],
@@ -1594,16 +1630,16 @@
}
},
"node_modules/@types/css-tree": {
"version": "2.3.11",
"resolved": "https://registry.npmjs.org/@types/css-tree/-/css-tree-2.3.11.tgz",
"integrity": "sha512-aEokibJOI77uIlqoBOkVbaQGC9zII0A+JH1kcTNKW2CwyYWD8KM6qdo+4c77wD3wZOQfJuNWAr9M4hdk+YhDIg==",
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/@types/css-tree/-/css-tree-3.2.0.tgz",
"integrity": "sha512-J5KXmk6BFIepOT7280FdFyNs4c5fh0Uee0otjKEvzchrRs38Ii9qminqc4ds0L19X8Zd/rT+brR9jkBthygjWw==",
"dev": true,
"license": "MIT"
},
"node_modules/@types/node": {
"version": "26.6.5",
"resolved": "https://registry.npmjs.org/@types/node/-/node-26.6.5.tgz",
"integrity": "sha512-uMzsv9stDdofIZBx4UGh4Z9ZgXnGC9seRDscilBcTHAeOFk67MZg/k9bWVfO+bk4qZmG+l52hRnLwUiH2LnJTg==",
"version": "26.6.6",
"resolved": "https://registry.npmjs.org/@types/node/-/node-26.6.6.tgz",
"integrity": "sha512-MzQj+8Kx3XI40OmUAE6Qoh58ZMNstNNMwn2nfd3qWsfe7nDNSqJNzes4njhz6AHwrSHOffSLwXU6yb474Q4aog==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2004,9 +2040,9 @@
}
},
"node_modules/ansi-regex": {
"version": "6.4.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.4.0.tgz",
"integrity": "sha512-KzTVk2tCWAHtYrvvvaP8bJKJq2pVinhLcGEQdtLIYPbmNGNyYe8QwNaTUYQp2J7/vIsUKt5QCqAfUkYyG9DkOw==",
"version": "6.5.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.5.0.tgz",
"integrity": "sha512-zhvbbbdt1kbw7EJ9OQoxmQcuaNR9P5kTj7e/YdmOSU10aHWbycofJxA6jKfoEy3vlLdctOF9ZHaxLtmSm998wQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -2060,9 +2096,9 @@
}
},
"node_modules/baseline-browser-mapping": {
"version": "2.11.30",
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.30.tgz",
"integrity": "sha512-YJs6Pz17RMNv8HoyKREtCY38E3BV1nPkWVmIb+XN1uHC1Vqt3KZCH/uJH9ZKRoiKb/icZ6tvehyee6RZNbFfRA==",
"version": "2.11.34",
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.34.tgz",
"integrity": "sha512-Aqr8mA1kIvyJ3UY5YAY7ib8LSo1DmDMbMnVqGPtsKW1LxaFQFwn9Eb3yvq2fUKJsRvaXjnAV7R5osqETapzNiA==",
"dev": true,
"license": "Apache-2.0",
"bin": {
@@ -2093,9 +2129,9 @@
}
},
"node_modules/browserslist": {
"version": "4.29.4",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.29.4.tgz",
"integrity": "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA==",
"version": "4.29.5",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.29.5.tgz",
"integrity": "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ==",
"dev": true,
"funding": [
{
@@ -2113,10 +2149,10 @@
],
"license": "MIT",
"dependencies": {
"baseline-browser-mapping": "^2.11.29",
"caniuse-lite": "^1.0.30001816",
"electron-to-chromium": "^1.5.459",
"node-releases": "^2.0.59",
"baseline-browser-mapping": "^2.11.33",
"caniuse-lite": "^1.0.30001819",
"electron-to-chromium": "^1.5.464",
"node-releases": "^2.0.60",
"update-browserslist-db": "^1.3.4"
},
"bin": {
@@ -2170,9 +2206,9 @@
}
},
"node_modules/caniuse-lite": {
"version": "1.0.30001817",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001817.tgz",
"integrity": "sha512-uZ1JG80BwhtMalIAGPxPfmNhHyd/B/nTdr3hITWlRamSyAdUStP1Gop01e7SD5q6J90ixJvWDbvmiFVfDgn4bw==",
"version": "1.0.30001820",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001820.tgz",
"integrity": "sha512-gfWD6MxqVCqAOwmODfZf7DchWvlrA+SRdNX7ceLfg3xRqe5ssjjpF7EgslC/0tiLiNTajdaNN/q8c/5u/7Gz8w==",
"dev": true,
"funding": [
{
@@ -2401,14 +2437,21 @@
"license": "CC0-1.0"
},
"node_modules/debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"version": "4.4.3",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
"integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
"dev": true,
"license": "MIT",
"optional": true,
"dependencies": {
"ms": "2.0.0"
"ms": "^2.1.3"
},
"engines": {
"node": ">=6.0"
},
"peerDependenciesMeta": {
"supports-color": {
"optional": true
}
}
},
"node_modules/decimal.js": {
@@ -2581,9 +2624,9 @@
}
},
"node_modules/electron-to-chromium": {
"version": "1.5.460",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.460.tgz",
"integrity": "sha512-rRaVC7bNUyGsL+GMtmZfv3AfgG6za7gE9v5bT0PIbjEerddA0IQ+tCK05NFAXqCpNlrxBZqbFqquyxHRQONHTA==",
"version": "1.5.472",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.472.tgz",
"integrity": "sha512-s4+nfT29b0FKpVKoaIxl2pWsoNcn7A/nMPSrxayw4T3BsmPeV2lF9Y06BsAQeMGhCTQ4nYJ5XST7jkqe4ZEqFw==",
"dev": true,
"license": "ISC"
},
@@ -2703,9 +2746,9 @@
}
},
"node_modules/fast-uri": {
"version": "3.1.8",
"resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.8.tgz",
"integrity": "sha512-GZMtZUTNRpOVIECoXwLNZS5xUGE+mVNbTB8h/7Rwh2TFWcBQiPzTgyZi05BF9UMZKkLJv8XBRJTlU7zg8+ZfMg==",
"version": "3.1.9",
"resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.9.tgz",
"integrity": "sha512-hS/0Wt3Ya043oKXs0sIxrMpKQITXhMLIrVAKKXi4gozGC9v7YRWVnXIZzjNPTO02M9BdxLCWqK1yRXgNziVyJQ==",
"dev": true,
"funding": [
{
@@ -3017,9 +3060,9 @@
}
},
"node_modules/ignore": {
"version": "7.0.12",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.12.tgz",
"integrity": "sha512-/8UvqAPU9DGTI9k4mxtf49U37Isfwr8Uts96+SBHIkFxPJnHS0Ew4f00sM4Scd8V8EjM0jUNtVDdv1kPdt35lg==",
"version": "7.0.14",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.14.tgz",
"integrity": "sha512-wCBiZ77u1tuWde6G/nfOtLaCTYcFDU5yCzARzK10y+rLhzYoL7a7yEemcopcc2Mzow7gZOIjnV2ym1NYmdiJOQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -3679,12 +3722,11 @@
}
},
"node_modules/ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
"dev": true,
"license": "MIT",
"optional": true
"license": "MIT"
},
"node_modules/nanoid": {
"version": "3.3.20",
@@ -3724,9 +3766,9 @@
}
},
"node_modules/node-releases": {
"version": "2.0.59",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.59.tgz",
"integrity": "sha512-5qr2okC4ItAI0hG5SaV0HoYMpnM/Y6+Oqr7AmPYy/2uEoGvS+GbSKLeRxSS1uAdu59yz0ouzcuXievSgg///WA==",
"version": "2.0.63",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.63.tgz",
"integrity": "sha512-6li2QanLsAXpIH2R6j77MzRyvOyrvdTqlKtO4CgBdHGNvN99ZZfyxszHc5o5+IZBWD5u6Hzwg83JoGXmqZNG9Q==",
"dev": true,
"license": "MIT",
"engines": {
@@ -3896,9 +3938,9 @@
}
},
"node_modules/postcss": {
"version": "8.5.29",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.29.tgz",
"integrity": "sha512-49cGhUbXj8Qenv0iTMxA1cFBzxXoctpC9Ujd77t1WcbJIr6nF/eI7g/8MgxrYldFRuAXvja7xQRwavoW7kgrxQ==",
"version": "8.5.32",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.32.tgz",
"integrity": "sha512-LJlKCCAUFKOuZxipUdYw1NzIITEsPcgyOG9LkvRJvuKj/bRzbuRY0ARXvL0pWGpsZvn8jku+LMep2eU0seHp8g==",
"dev": true,
"funding": [
{
@@ -3916,7 +3958,7 @@
],
"license": "MIT",
"dependencies": {
"nanoid": "^3.3.19",
"nanoid": "^3.3.20",
"picocolors": "^1.1.1",
"source-map-js": "^1.2.2"
},
@@ -3965,9 +4007,9 @@
}
},
"node_modules/postcss-selector-parser": {
"version": "7.1.6",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.6.tgz",
"integrity": "sha512-7qASPzhKF2l2KLboRZux8CCTRMdGiV08vWmyKzPz22qZ7ZjQBOeY7rNzNoCLSUiftJ7HUq0GERHmxw/t0dCdMw==",
"version": "7.1.7",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.7.tgz",
"integrity": "sha512-wWBro/7hJ40ye6TPiXkUQoXKCw23xSsjriUvqd7Uls9Sso3oLiON1flc18cCdnjgCRXw4fBVqUJJeOdDTh3P3g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3986,9 +4028,9 @@
"license": "MIT"
},
"node_modules/prettier": {
"version": "3.9.9",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.9.tgz",
"integrity": "sha512-Z/CJHIkdujO/OtN7nXUii0Rf3VT5SRuhjBA82Xvu2XhBUgX3nhP67T0LHceBdQLex7OOFGTox+Q5Yg8Jk2Qivg==",
"version": "3.9.10",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.10.tgz",
"integrity": "sha512-skGHTH1Yb9QvaTC4hWnRTzEYtCpApF0UMBPz+t/0ZPzP8ihefo/btKd+QA7pUE0fEwA1SbS/NmhyEcstdXOIdA==",
"dev": true,
"license": "MIT",
"peer": true,
@@ -4016,9 +4058,9 @@
}
},
"node_modules/probe-image-size": {
"version": "7.4.0",
"resolved": "https://registry.npmjs.org/probe-image-size/-/probe-image-size-7.4.0.tgz",
"integrity": "sha512-cdEprVtZxV+awMde9X+4jILBFYh4CARxVrQaMl4wY4YcPWbul9jntXrIW95NInBDyJwcVUP3U0T6yukN8rMBaQ==",
"version": "7.5.0",
"resolved": "https://registry.npmjs.org/probe-image-size/-/probe-image-size-7.5.0.tgz",
"integrity": "sha512-ietdx4XPgmnzHRZOq1/KtcnsBkL4bRsBe+Szj5Tuq1/KPqDG42OspG1IhJb7vz6Z9pSzhp0J6UPnw6hujJTWoQ==",
"dev": true,
"funding": [
{
@@ -4034,8 +4076,7 @@
"optional": true,
"dependencies": {
"lodash.merge": "^4.6.2",
"needle": "^2.5.2",
"stream-parser": "~0.3.1"
"needle": "^2.5.2"
}
},
"node_modules/probe-image-size/node_modules/debug": {
@@ -4063,14 +4104,6 @@
"node": ">=0.10.0"
}
},
"node_modules/probe-image-size/node_modules/ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
"dev": true,
"license": "MIT",
"optional": true
},
"node_modules/probe-image-size/node_modules/needle": {
"version": "2.9.1",
"resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz",
@@ -4230,13 +4263,13 @@
}
},
"node_modules/rolldown": {
"version": "1.2.13",
"resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.13.tgz",
"integrity": "sha512-/5apOkwWxtACcQtZ5WlrAsKS4JwXVThQPJZ3RqIruRY9UG9M8e0VlXN068xum/JRKA4aIUoJ13ghe/kGCvidiQ==",
"version": "1.2.16",
"resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.16.tgz",
"integrity": "sha512-bWvlMpFKiTfDKfnK7FC2MPgPeWCf/Kpwsq49ApdW+FQaBZb6O6dZ4MAPbPUjp7hYQrw/RobqCzn64BRrQecGHw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@oxc-project/types": "=0.153.0",
"@oxc-project/types": "=0.156.0",
"@rolldown/pluginutils": "^1.0.0"
},
"bin": {
@@ -4246,21 +4279,21 @@
"node": "^20.19.0 || >=22.12.0"
},
"optionalDependencies": {
"@rolldown/binding-android-arm-eabi": "1.2.13",
"@rolldown/binding-android-arm64": "1.2.13",
"@rolldown/binding-darwin-arm64": "1.2.13",
"@rolldown/binding-darwin-x64": "1.2.13",
"@rolldown/binding-freebsd-x64": "1.2.13",
"@rolldown/binding-linux-arm-gnueabihf": "1.2.13",
"@rolldown/binding-linux-arm64-gnu": "1.2.13",
"@rolldown/binding-linux-arm64-musl": "1.2.13",
"@rolldown/binding-linux-ppc64-gnu": "1.2.13",
"@rolldown/binding-linux-s390x-gnu": "1.2.13",
"@rolldown/binding-linux-x64-gnu": "1.2.13",
"@rolldown/binding-linux-x64-musl": "1.2.13",
"@rolldown/binding-openharmony-arm64": "1.2.13",
"@rolldown/binding-win32-arm64-msvc": "1.2.13",
"@rolldown/binding-win32-x64-msvc": "1.2.13"
"@rolldown/binding-android-arm-eabi": "1.2.16",
"@rolldown/binding-android-arm64": "1.2.16",
"@rolldown/binding-darwin-arm64": "1.2.16",
"@rolldown/binding-darwin-x64": "1.2.16",
"@rolldown/binding-freebsd-x64": "1.2.16",
"@rolldown/binding-linux-arm-gnueabihf": "1.2.16",
"@rolldown/binding-linux-arm64-gnu": "1.2.16",
"@rolldown/binding-linux-arm64-musl": "1.2.16",
"@rolldown/binding-linux-ppc64-gnu": "1.2.16",
"@rolldown/binding-linux-s390x-gnu": "1.2.16",
"@rolldown/binding-linux-x64-gnu": "1.2.16",
"@rolldown/binding-linux-x64-musl": "1.2.16",
"@rolldown/binding-openharmony-arm64": "1.2.16",
"@rolldown/binding-win32-arm64-msvc": "1.2.16",
"@rolldown/binding-win32-x64-msvc": "1.2.16"
}
},
"node_modules/run-parallel": {
@@ -4479,17 +4512,6 @@
"node": ">=0.10.0"
}
},
"node_modules/stream-parser": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz",
"integrity": "sha512-bJ/HgKq41nlKvlhccD5kaCr/P+Hu0wPNKPJOH7en+YrJu/9EgqUF+88w5Jb6KNcjOFMhfX4B2asfeAtIGuHObQ==",
"dev": true,
"license": "MIT",
"optional": true,
"dependencies": {
"debug": "2"
}
},
"node_modules/string-width": {
"version": "8.3.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-8.3.0.tgz",
@@ -4689,13 +4711,13 @@
}
},
"node_modules/stylelint-less": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/stylelint-less/-/stylelint-less-4.2.1.tgz",
"integrity": "sha512-FREYAwwm5cTAeCGmAJlq1228tEi62puMxM4IughUMVifIIUac7Mu03u410/S5QYCwA7L2l9HjiRyh4TQKkFhcA==",
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/stylelint-less/-/stylelint-less-4.2.2.tgz",
"integrity": "sha512-UmuA5cLcMAi3BZ0kd8VrbOUov6QFyHe8Y9i+sA7uiqvOEioD5KVfQT1AafJ2TjA0r2wocScbtTBbDDYUAxaQxg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/css-tree": "^2.3.11",
"@types/css-tree": "^3.2.0",
"css-tree": "^3.2.1",
"postcss-value-parser": "4.2.0"
},
@@ -4721,24 +4743,6 @@
"stylelint": ">=16.0.0"
}
},
"node_modules/stylelint/node_modules/debug": {
"version": "4.4.3",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
"integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
"dev": true,
"license": "MIT",
"dependencies": {
"ms": "^2.1.3"
},
"engines": {
"node": ">=6.0"
},
"peerDependenciesMeta": {
"supports-color": {
"optional": true
}
}
},
"node_modules/stylelint/node_modules/meow": {
"version": "14.1.0",
"resolved": "https://registry.npmjs.org/meow/-/meow-14.1.0.tgz",
@@ -4752,13 +4756,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/stylelint/node_modules/ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
"dev": true,
"license": "MIT"
},
"node_modules/supports-color": {
"version": "10.2.2",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz",
@@ -4951,9 +4948,9 @@
}
},
"node_modules/tslib": {
"version": "2.8.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
"integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
"version": "2.9.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.9.1.tgz",
"integrity": "sha512-a4Ux9VKuIMHsOS7ENbEq6hK2ZGYIT27Rtl0E4eD9KqwxhKiQeMZE/9xb3IdYwWaSOyIBQLExhQgXDTYoiCxnWA==",
"dev": true,
"license": "0BSD",
"optional": true
@@ -5071,16 +5068,16 @@
"license": "MIT"
},
"node_modules/vite": {
"version": "8.3.4",
"resolved": "https://registry.npmjs.org/vite/-/vite-8.3.4.tgz",
"integrity": "sha512-IftLE8phJhdNRIGNEV4JCCvfNScoZQVfcXaN8TQropWGJtOHcu+iAB9pHcuGvmEb/kddw0LBe/jS8ztdC6xdiQ==",
"version": "8.3.5",
"resolved": "https://registry.npmjs.org/vite/-/vite-8.3.5.tgz",
"integrity": "sha512-z1YpjieJ9g0ebTmQpLBv/oq9E3F9EIlOe+7LahW8SrE3LTiG3udBRUXQOlYXP9b+IC2q2phHeVxj9xGlw34OEQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"lightningcss": "^1.33.0",
"picomatch": "^4.0.7",
"postcss": "^8.5.29",
"rolldown": "~1.2.12",
"postcss": "^8.5.30",
"rolldown": "~1.2.14",
"tinyglobby": "^0.2.17"
},
"bin": {
@@ -5097,7 +5094,7 @@
},
"peerDependencies": {
"@types/node": "^20.19.0 || >=22.12.0",
"@vitejs/devtools": "^0.7.1",
"@vitejs/devtools": "^0.7.1 || ^0.8.0",
"esbuild": "^0.27.0 || ^0.28.0",
"jiti": ">=1.21.0",
"less": "^4.0.0",
+3 -3
View File
@@ -29,9 +29,9 @@
"swiped-events": "1.2.0"
},
"devDependencies": {
"@biomejs/biome": "2.5.15",
"@biomejs/biome": "2.6.4",
"@types/node": "^26.6.5",
"browserslist": "^4.29.4",
"browserslist": "^4.29.5",
"browserslist-to-esbuild": "^2.1.1",
"edge.js": "^6.5.1",
"less": "^4.9.0",
@@ -43,7 +43,7 @@
"stylelint-prettier": "^5.0.3",
"svgo": "^4.1.0",
"typescript": "~7.0.2",
"vite": "^8.3.3",
"vite": "^8.3.5",
"vite-bundle-analyzer": "^1.3.9"
}
}
+2 -2
View File
@@ -58,7 +58,7 @@ listen("click", "#copy-hash", async function (this: HTMLElement) {
assertElement(target);
if (window.isSecureContext) {
await navigator.clipboard.writeText(target.innerText);
await navigator.clipboard.writeText(target.textContent);
} else {
const selection = window.getSelection();
if (selection) {
@@ -71,6 +71,6 @@ listen("click", "#copy-hash", async function (this: HTMLElement) {
}
if (this.dataset.copiedText) {
this.innerText = this.dataset.copiedText;
this.textContent = this.dataset.copiedText;
}
});
+2 -2
View File
@@ -135,7 +135,7 @@ listen("click", "#copy_url", async function (this: HTMLElement) {
assertElement(target);
if (window.isSecureContext) {
await navigator.clipboard.writeText(target.innerText);
await navigator.clipboard.writeText(target.textContent);
} else {
const selection = window.getSelection();
if (selection) {
@@ -148,7 +148,7 @@ listen("click", "#copy_url", async function (this: HTMLElement) {
}
if (this.dataset.copiedText) {
this.innerText = this.dataset.copiedText;
this.textContent = this.dataset.copiedText;
}
});
+8
View File
@@ -0,0 +1,8 @@
.. _readerfunded engine:
============
ReaderFunded
============
.. automodule:: searx.engines.readerfunded
:members:
+1 -1
View File
@@ -23,6 +23,6 @@ coloredlogs==15.0.1
docutils>=0.21.2;python_version <= "3.11"
docutils>=0.22.4; python_version > "3.11"
parameterized==0.9.0
granian[reload]==2.8.4
granian[reload]==2.8.5
basedpyright==1.40.2
types-lxml==2026.2.16
+2 -2
View File
@@ -1,2 +1,2 @@
granian==2.8.4
granian[pname]==2.8.4
granian==2.8.5
granian[pname]==2.8.5
+3 -3
View File
@@ -1,13 +1,13 @@
certifi==2026.10.19
certifi==2026.10.23
babel==2.18.0
flask-babel==4.0.0
flask==3.1.3
jinja2==3.1.6
lxml==6.1.3
pygments==2.21.0
python-dateutil==2.9.0.post0
python-dateutil==3.0.0
pyyaml==6.0.3
curl_cffi==0.16.3
curl_cffi==0.17.0
valkey==6.1.1
markdown-it-py==4.2.0
msgspec==0.22.0
+3 -3
View File
@@ -28,19 +28,19 @@ if t.TYPE_CHECKING:
from searx.extended_types import SXNG_Response
def update_kwargs(**kwargs) -> None: # type: ignore
def update_kwargs(kwargs) -> None: # type: ignore
if 'timeout' not in kwargs:
kwargs['timeout'] = settings['outgoing']['request_timeout']
kwargs['raise_for_httperror'] = True
def get(*args, **kwargs) -> "SXNG_Response": # type: ignore
update_kwargs(**kwargs) # pyright: ignore[reportUnknownArgumentType]
update_kwargs(kwargs)
return http_get(*args, **kwargs) # pyright: ignore[reportUnknownArgumentType]
def post(*args, **kwargs) -> "SXNG_Response": # type: ignore
update_kwargs(**kwargs) # pyright: ignore[reportUnknownArgumentType]
update_kwargs(kwargs)
return http_post(*args, **kwargs) # pyright: ignore[reportUnknownArgumentType]
File diff suppressed because it is too large Load Diff
+68 -18
View File
@@ -195,7 +195,7 @@
"eo": "armena dramo",
"es": "dram armenio",
"et": "Armeenia dramm",
"eu": "dram",
"eu": "armeniar dram",
"fi": "Armenian dram",
"fr": "dram arménien",
"ga": "dram na hAirméine",
@@ -322,7 +322,7 @@
"fi": "Argentiinan peso",
"fr": "peso argentin",
"ga": "peso inmhalartaithe na hAirgintíne",
"gl": "Peso arxentino",
"gl": "peso arxentino",
"he": "פסו ארגנטינאי",
"hr": "Argentinski pezo",
"hu": "argentin peso",
@@ -1089,7 +1089,7 @@
"ia": "Dollar canadian",
"id": "Dolar Kanada",
"it": "dollaro canadese",
"ja": "カナダドル",
"ja": "カナダ・ドル",
"ko": "캐나다 달러",
"lt": "Kanados doleris",
"lv": "Kanādas dolārs",
@@ -1112,7 +1112,7 @@
"tr": "Kanada doları",
"tt": "Канада дуллыры",
"uk": "канадський долар",
"vi": "Đô la Canada"
"vi": "đô la Canada"
},
"CDF": {
"af": "Kongolese frank",
@@ -1235,7 +1235,7 @@
"fi": "Chilen peso",
"fr": "peso chilien",
"ga": "peso na Sile",
"gl": "Peso chileno",
"gl": "peso chileno",
"he": "פסו צ'יליאני",
"hr": "Čileanski pezo",
"hu": "chilei peso",
@@ -1817,7 +1817,7 @@
"cy": "Ewro",
"da": "Euro",
"de": "Euro",
"en": "Euro",
"en": "euro",
"eo": "eŭro",
"es": "Euro",
"et": "euro",
@@ -1930,6 +1930,7 @@
"sk": "falklandská libra",
"sl": "falklandski funt",
"sv": "Falklandspund",
"th": "ปอนด์หมู่เกาะฟอล์กแลนด์",
"tr": "Falkland Adaları poundu",
"tt": "Фолкленд утраулары фунты",
"uk": "Фолклендський фунт"
@@ -2926,6 +2927,7 @@
"pa": "ਕੰਬੋਡੀਆਈ ਰਿਆਲ",
"pl": "Riel",
"pt": "riel cambojano",
"ro": "riel cambodgian",
"ru": "камбоджийский риель",
"sk": "kambodžský riel",
"sl": "kamboški riel",
@@ -2996,6 +2998,7 @@
"ja": "朝鮮民主主義人民共和国ウォン",
"ko": "조선민주주의인민공화국 원",
"lt": "Šiaurės Korėjos vona",
"lv": "Ziemeļkorejas vona",
"ml": "വോൺ",
"ms": "Won Korea Utara",
"nl": "Noord-Koreaanse won",
@@ -3860,7 +3863,7 @@
"fi": "Meksikon peso",
"fr": "peso mexicain",
"ga": "peso Mheicsiceo",
"gl": "Peso mexicano",
"gl": "peso mexicano",
"he": "פסו מקסיקני",
"hr": "Meksički pezo",
"hu": "mexikói peso",
@@ -4396,6 +4399,7 @@
"fi": "Filippiinien peso",
"fr": "peso philippin",
"ga": "peso na nOileán Filipíneach",
"gl": "peso filipino",
"he": "פסו פיליפיני",
"hr": "Filipinski pezo",
"hu": "Fülöp-szigeteki peso",
@@ -4726,7 +4730,7 @@
"RUB": {
"af": "Russiese roebel",
"ar": "روبل روسي",
"bg": "Руска рубла",
"bg": "руска рубла",
"bn": "রুশ রুবল",
"ca": "ruble rus",
"cs": "ruský rubl",
@@ -5798,8 +5802,8 @@
"uk": "угандійський шилінг"
},
"USD": {
"af": "Amerikaanse dollar",
"ar": "دولار أمريكي",
"af": "dollar van die Verenigde State",
"ar": "دولار للولايات المتحدة",
"bg": "щатски долар",
"bn": "মার্কিন ডলার",
"ca": "dòlar estatunidenc",
@@ -5813,7 +5817,7 @@
"et": "USA dollar",
"eu": "Estatubatuar dolar",
"fi": "Yhdysvaltain dollari",
"fr": "dollar américain",
"fr": "dollar des États-Unis",
"ga": "dollar na Stát Aontaithe",
"gl": "dólar estadounidense",
"he": "דולר אמריקאי",
@@ -5821,7 +5825,7 @@
"hu": "amerikai dollár",
"ia": "dollar statounitese",
"id": "Dolar Amerika Serikat",
"it": "dollaro statunitense",
"it": "dollaro degli Stati Uniti",
"ja": "アメリカ合衆国ドル",
"ko": "미국 달러",
"lt": "Jungtinių Valstijų doleris",
@@ -5840,7 +5844,7 @@
"sk": "americký dolár",
"sl": "ameriški dolar",
"sr": "амерички долар",
"sv": "amerikansk dollar",
"sv": "amerikanska dollar",
"szl": "Dolar amerikański",
"ta": "அமெரிக்க டாலர்",
"te": "యునైటెడ్ స్టేట్స్ డాలర్",
@@ -6014,7 +6018,7 @@
"es": "vatu",
"fi": "Vanuatun vatu",
"fr": "Vatu",
"ga": "Vatu Vanuatú",
"ga": "vatu Vanuatú",
"gl": "Vatu",
"he": "ואטו",
"hr": "Vanuatski vatu",
@@ -6231,7 +6235,8 @@
"ru": "Карибский гульден",
"sk": "Karibský gulden",
"sl": "karibski goldinar",
"sv": "Karibisk gulden"
"sv": "Karibisk gulden",
"th": "กิลเดอร์แคริบเบียน"
},
"XDR": {
"ar": "حقوق السحب الخاصة",
@@ -6395,7 +6400,7 @@
"cs": "jemenský rijál",
"cy": "Rial Iemen",
"de": "Jemen-Rial",
"en": "Yemeni Rial",
"en": "Yemeni rial",
"eo": "jemena rialo",
"es": "rial yemení",
"eu": "Rial yemendar",
@@ -6596,6 +6601,38 @@
"$u": "UYU",
"$usd": "USD",
"1000 lira": "LBP",
"10000.00": [
"ZWL",
"XCD",
"WST",
"USD",
"TWD",
"TTD",
"SRD",
"SGD",
"SBD",
"NZD",
"NAD",
"MXN",
"MOP",
"LRD",
"KYD",
"JMD",
"HKD",
"FJD",
"CUP",
"COP",
"CLP",
"CAD",
"BZD",
"BSD",
"BRL",
"BND",
"BMD",
"BBD",
"AUD",
"ARS"
],
"100ドル紙幣": "NIO",
"1億ベネズエラ・ボリバル": "VES",
"2019 zimbabwean dollar": "ZWL",
@@ -6888,6 +6925,7 @@
"armeense dram": "AMD",
"armena dramo": "AMD",
"armenian dram": "AMD",
"armeniar dram": "AMD",
"armenijski dram": "AMD",
"armenischer dram": "AMD",
"armensk dram": "AMD",
@@ -8045,6 +8083,7 @@
"dolar de bermudas": "BMD",
"dolar de brunei": "BND",
"dolar de brunéi": "BND",
"dolar de canadà": "CAD",
"dolar de fiji": "FJD",
"dolar de guyana": "GYD",
"dolar de hong kong": "HKD",
@@ -8191,7 +8230,6 @@
"KYD",
"HKD",
"FJD",
"CAD",
"AUD"
],
"dollar américain": "USD",
@@ -8233,6 +8271,7 @@
"dollar des îles salomon": "SBD",
"dollar du belize": "BZD",
"dollar du bélize": "BZD",
"dollar du canada": "CAD",
"dollar du guyana": "GYD",
"dollar du surinam": "SRD",
"dollar du suriname": "SRD",
@@ -8268,6 +8307,7 @@
"dollar néo zélandais": "NZD",
"dollar néozélandais": "NZD",
"dollar nua na téaváine": "TWD",
"dollar of canada": "CAD",
"dollar oileáin cayman": "KYD",
"dollar oileáin sholaimh": "SBD",
"dollar oileán na tríonóide agus tobága": "TTD",
@@ -8282,16 +8322,21 @@
"dollar taiwanais": "TWD",
"dollar taïwanais": "TWD",
"dollar trinidadien": "TTD",
"dollar van die verenigde state": "USD",
"dollaro": [
"BZD",
"BBD"
],
"dollaro americano": "USD",
"dollaro australiano": "AUD",
"dollaro bahamense": "BSD",
"dollaro canadese": "CAD",
"dollaro degli stati uniti": "USD",
"dollaro dei caraibi orientali": "XCD",
"dollaro del belize": "BZD",
"dollaro del brunei": "BND",
"dollaro del canada": "CAD",
"dollaro del canadà": "CAD",
"dollaro del suriname": "SRD",
"dollaro della guyana": "GYD",
"dollaro della namibia": "NAD",
@@ -11489,6 +11534,7 @@
"rial yemení": "YER",
"rial yéménite": "YER",
"riel": "KHR",
"riel cambodgian": "KHR",
"riel cambodgien": "KHR",
"riel cambogiano": "KHR",
"riel cambojano": "KHR",
@@ -12846,6 +12892,7 @@
"vjetnama dongo": "VND",
"vnd": "VND",
"vnđ": "VND",
"vona": "KPW",
"vt": "VUV",
"vuv": "VUV",
"východokaribská měnová unie": "XCD",
@@ -12996,6 +13043,7 @@
"zeelandako dolarra": "NZD",
"zelenortski eskudo": "CVE",
"zelts kā investīcija": "XAU",
"ziemeļkorejas vona": "KPW",
"zig": "ZWG",
"zimbabva dolaro": "ZWL",
"zimbabva oro": "ZWG",
@@ -15005,7 +15053,6 @@
"دوبرا ساو تومية وبرينسيبية": "STN",
"دولار الامريكي": "USD",
"دولار الأمريكي": "USD",
"دولار امريكي": "USD",
"دولار أسترالي": "AUD",
"دولار أمريكي": "USD",
"دولار بربادوسي": "BBD",
@@ -15026,6 +15073,7 @@
"دولار غياني": "GYD",
"دولار فيجي": "FJD",
"دولار كندي": "CAD",
"دولار للولايات المتحدة": "USD",
"دولار ليبيري": "LRD",
"دولار ناميبي": "NAD",
"دولار نيوزيلندي": "NZD",
@@ -15666,6 +15714,7 @@
"กวันซา": "AOA",
"กวารานีปารากวัย": "PYG",
"กอร์โดบานิการากัว": "NIO",
"กิลเดอร์แคริบเบียน": "XCG",
"กีนา": "PGK",
"กีบ": "LAK",
"กูร์ดเฮติ": "HTG",
@@ -15751,6 +15800,7 @@
"ปอนด์ซูดานใต้": "SSP",
"ปอนด์ยิบรอลตาร์": "GIP",
"ปอนด์สเตอร์ลิง": "GBP",
"ปอนด์หมู่เกาะฟอล์กแลนด์": "FKP",
"ปอนด์อียิปต์": "EGP",
"ปอนด์เซนต์เฮเลนา": "SHP",
"ปอนด์เซาท์ซูดาน": "SSP",
+1 -1
View File
@@ -15307,7 +15307,7 @@
},
"s": {
"\u0010": "//surrey-primotc.hosted.exlibrisgroup.com/primo-explore/search?vl(freeText0)=\u0002&fn=search&vid=44SUR_VU1&tab=default_tab&query=any,contains,\u0002&search_scope=default_scope\u000115",
"64": "http://duckduckgo.com/?q=\u0002+site:www.ss64.com\u00010",
"64": "http://duckduckgo.com/?q=\u0002+site:ss64.com\u00010",
"aft": "http://ssaft.com/Blog/dotclear/?q=\u0002\u00010",
"b": {
"\u0010": "http://www.ssbwiki.com/index.php?title=Special%3ASearch&search=\u0002&go=Go\u000136",
+2 -2
View File
@@ -5,7 +5,7 @@
],
"ua": "Mozilla/5.0 ({os}; rv:{version}) Gecko/20100101 Firefox/{version}",
"versions": [
"157.0",
"156.0"
"159.0",
"158.0"
]
}
+6 -1
View File
@@ -41,6 +41,7 @@ time_range_map = {"day": "1", "week": "7", "month": "30", "year": "365"}
CACHE: EngineCache
CACHE_SESSION_ID_KEY = "session_id_key"
SESSION_ID_EXPIRE = 3600
KEYWORD_RE = re.compile(r"\[\/?Keyword\]")
@@ -64,7 +65,7 @@ def _get_session_id() -> str:
if not session_id:
raise SearxEngineAPIException("failed to obtain session id")
CACHE.set(CACHE_SESSION_ID_KEY, session_id)
CACHE.set(CACHE_SESSION_ID_KEY, session_id, SESSION_ID_EXPIRE)
return session_id
@@ -97,6 +98,10 @@ def _remove_keyword_marker(text: str) -> str:
def response(resp: "SXNG_Response") -> EngineResults:
res = EngineResults()
if resp.status_code == 204:
CACHE.set(CACHE_SESSION_ID_KEY, "")
raise SearxEngineAPIException("session expired")
result: dict[str, str]
for result in resp.json()["SearchResults"]:
res.add(
+3 -2
View File
@@ -28,7 +28,7 @@ import typing as t
from urllib.parse import urlencode
from searx.engines.brave import parse_video_result
from searx.engines.brave import parse_search_result
from searx.exceptions import SearxEngineAPIException
from searx.result_types import EngineResults
@@ -91,6 +91,7 @@ def request(query: str, params: "OnlineParams") -> None:
params["url"] = f"{base_url}?{urlencode(search_args)}"
params["headers"]["X-Subscription-Token"] = api_key
params["headers"]["Accept"] = "application/json"
params["headers"]["Cache-Control"] = "no-cache"
def response(resp: "SXNG_Response") -> EngineResults:
@@ -100,6 +101,6 @@ def response(resp: "SXNG_Response") -> EngineResults:
res = EngineResults()
results_json = (data.get("web") or {}).get("results", [])
for result in results_json:
res.add(parse_video_result(result))
res.add(parse_search_result(result))
return res
+41 -36
View File
@@ -38,9 +38,9 @@ Implementations
"""
import contextlib
import random
import typing as t
from datetime import (
datetime,
timedelta,
@@ -49,7 +49,8 @@ from json import loads
from urllib.parse import urlencode
import babel
from flask_babel import gettext # pyright: ignore[reportUnknownVariableType]
import curl_cffi
from flask_babel import gettext # pyright: ignore[reportMissingTypeStubs]
from searx.enginelib import EngineCache
from searx.enginelib.traits import EngineTraits
@@ -63,8 +64,8 @@ from searx.network import raise_for_httperror
from searx.result_types import EngineResults
if t.TYPE_CHECKING:
from searx.search.processors import OnlineParams
from searx.extended_types import SXNG_Response
from searx.search.processors import OnlineParams
# about
about = {
@@ -88,10 +89,10 @@ qwant_categ: str = None # pyright: ignore[reportAssignmentType]
safesearch = True
# tgp seems to be short for "test group" - its actual value doesn't matter, as
# tgp is normally set by the `ab_test_group` cookie value. Actual value doesn't matter, as
# long as it's sent and at the correct position in the query params and doesn't
# change too frequently
test_group_value = random.randint(1, 3)
test_group_value = random.randint(1, 4)
# fmt: off
qwant_news_locales = [
@@ -123,13 +124,10 @@ def request(query: str, params: "OnlineParams") -> None:
if not query:
return
results_per_page = 50 if qwant_categ == "images" else 10
q_locale = traits.get_region(params["searxng_locale"], default="en_US")
results_per_page = 10
if qwant_categ == "images":
results_per_page = 50
args = {
"t": qwant_categ,
"q": query,
"count": results_per_page,
"locale": q_locale,
@@ -137,18 +135,32 @@ def request(query: str, params: "OnlineParams") -> None:
"tgp": test_group_value,
"device": "desktop",
"safesearch": params["safesearch"],
# True would be encoded to "True", instead of "true", which makes the request
# easier to detect and block
"displayed": "true",
"llm": "true",
}
if datadome := CACHE.get("datadome"):
params["cookies"]["datadome"] = datadome
header_order = (
"Host,Connection,"
"sec-ch-ua-platform,User-Agent,Accept,sec-ch-ua,sec-ch-ua-mobile,"
"Origin,Sec-Fetch-Site,Sec-Fetch-Mode,Sec-Fetch-Dest,"
"Referer,Accept-Encoding,Accept-Language,Cookie"
)
params["raise_for_httperror"] = False
params["url"] = f"{api_url}{qwant_categ}?{urlencode(args)}"
params["cookies"]["datadome"] = CACHE.get("datadome")
params["headers"].update({"Accept": "application/json", "Referer": f"{base_url}/", "Origin": base_url})
params["headers"]["Connection"] = "keep-alive"
params["headers"]["Accept"] = "application/json, text/plain, */*"
params["headers"]["Origin"] = base_url
params["headers"]["Sec-Fetch-Site"] = "same-site"
params["headers"]["Sec-Fetch-Mode"] = "cors"
params["headers"]["Sec-Fetch-Dest"] = "empty"
# drop impersonate default headers - curl_cffi will drop header with None as value
params["headers"]["sec-fetch-user"] = None # pyright: ignore[reportArgumentType]
params["headers"]["cache-control"] = None # pyright: ignore[reportArgumentType]
params["headers"]["upgrade-insecure-requests"] = None # pyright: ignore[reportArgumentType]
params["headers"]["Referer"] = f"{base_url}/"
# ensure same header wire order for chrome
params["curl_options"] = {curl_cffi.CurlOpt.HTTPHEADER_ORDER: header_order}
def response(resp: "SXNG_Response") -> EngineResults:
@@ -156,20 +168,16 @@ def response(resp: "SXNG_Response") -> EngineResults:
# pylint: disable=too-many-locals, too-many-branches, too-many-statements
# cache datadome cookie - changes on each request
datadome = resp.cookies.get("datadome")
if datadome:
if datadome := resp.cookies.get("datadome"):
CACHE.set("datadome", datadome)
res = EngineResults()
# Try to load JSON result
search_results: dict[str, t.Any] = {}
try:
with contextlib.suppress(ValueError):
search_results = resp.json()
except ValueError:
pass
data: dict[str, t.Any] = search_results.get("data", {}) # pyright: ignore[reportAny]
data: dict[str, t.Any] = search_results.get("data", {})
# check for an API error
if search_results.get("status") != "success":
@@ -177,7 +185,7 @@ def response(resp: "SXNG_Response") -> EngineResults:
if error_code == 24:
raise SearxEngineTooManyRequestsException()
if search_results.get("url") is not None:
raise SearxEngineCaptchaException(suspended_time=0)
raise SearxEngineCaptchaException(suspended_time=15) # needs a short timeout before second request
if resp.status_code == 403:
raise SearxEngineAccessDeniedException()
msg = ",".join(data.get("message", ["unknown"]))
@@ -222,8 +230,7 @@ def response(resp: "SXNG_Response") -> EngineResults:
thumbnail: str = ""
content: str = item.get("desc", "")
_date: float | None = item.get("date")
if _date:
if _date := item.get("date"):
try:
pub_date = datetime.fromtimestamp(_date)
except ValueError:
@@ -240,8 +247,7 @@ def response(resp: "SXNG_Response") -> EngineResults:
)
elif mainline_type == "news":
news_media = item.get("media", [])
if news_media:
if news_media := item.get("media", []):
thumbnail = news_media[0].get("pict", {}).get("url", "")
res.add(
@@ -314,7 +320,7 @@ def fetch_traits(engine_traits: EngineTraits):
from searx.utils import extr
resp = get(
base_url, # pyright: ignore[reportArgumentType]
base_url,
timeout=5,
)
if not resp.ok:
@@ -328,7 +334,7 @@ def fetch_traits(engine_traits: EngineTraits):
for country, v in q_locales.items():
for lang in v["langs"]:
_locale = "{lang}_{country}".format(lang=lang, country=country)
_locale = f"{lang}_{country}"
if qwant_categ == "news" and _locale.lower() not in qwant_news_locales:
# qwant-news does not support all locales from qwant-web:
@@ -340,12 +346,11 @@ def fetch_traits(engine_traits: EngineTraits):
try:
sxng_tag = region_tag(babel.Locale.parse(eng_tag, sep="_"))
except babel.UnknownLocaleError:
print("ERROR: can't determine babel locale of quant's locale %s" % eng_tag)
print(f"ERROR: can't determine babel locale of quant's locale {eng_tag}")
continue
conflict = engine_traits.regions.get(sxng_tag)
if conflict:
if conflict := engine_traits.regions.get(sxng_tag):
if conflict != eng_tag:
print("CONFLICT: babel %s --> %s, %s" % (sxng_tag, conflict, eng_tag))
print(f"CONFLICT: babel {sxng_tag} --> {conflict}, {eng_tag}")
continue
engine_traits.regions[sxng_tag] = eng_tag
+109
View File
@@ -0,0 +1,109 @@
# SPDX-License-Identifier: AGPL-3.0-or-later
"""ReaderFunded_ is an independent web search engine with its own index. A
site is indexed only when its readers support it with their own money: a
link from the site to its page on Patreon, Ko-fi, Substack, GitHub
Sponsors, Open Collective, Liberapay or a similar platform, and that page
naming the site back, verified in both directions and re-checked monthly.
A site ranks higher the more readers pay for it, text relevance first.
The engine uses the public `JSON API`_ which doesn't require an API key.
This allows to run 120 requests per minute. If that doesn't suffice for you, you can
obtain a free API key `here <https://readerfunded.com/api#keys>`_.
.. code:: yaml
- name: readerfunded
engine: readerfunded
shortcut: rfd
api_key: "" # optional
.. _ReaderFunded: https://readerfunded.com
.. _JSON API: https://readerfunded.com/api
"""
import typing as t
from datetime import datetime
from urllib.parse import urlencode
from searx.exceptions import SearxEngineResponseException
from searx.utils import searxng_useragent
from searx.result_types import EngineResults
from searx.extended_types import SXNG_Response
about = {
"website": "https://readerfunded.com",
"wikidata_id": None,
"official_api_documentation": "https://readerfunded.com/api",
"use_official_api": True,
"require_api_key": False,
"results": "JSON",
}
categories = ["general", "web"]
paging = False
time_range_support = True
base_url = "https://readerfunded.com"
page_size = 20
api_key: str = ""
"""Optional. A key from https://readerfunded.com/api#keys gives the instance
an allowance of its own instead of the one every SearXNG instance behind
its address shares."""
time_range_map = {"day": "day", "week": "week", "month": "month", "year": "year"}
def request(query: str, params: dict[str, t.Any]) -> None:
args: dict[str, t.Any] = {"q": query, "top": page_size}
if params.get("time_range") in time_range_map:
args["t"] = time_range_map[params["time_range"]]
# the API takes a two-letter language preferred first beside English;
# ``all`` is no preference
locale = str(params.get("searxng_locale") or params.get("language") or "all")
lang = locale.split("-", maxsplit=1)[0].lower()
args["lang"] = lang if lang and lang != "auto" else "all"
params["url"] = f"{base_url}/api/search?{urlencode(args)}"
params["headers"]["Accept"] = "application/json"
# the API asks callers to say who they are, and gives a SearXNG instance
# a larger keyless allowance than an anonymous address when it does
params["headers"]["User-Agent"] = searxng_useragent()
if api_key:
params["headers"]["X-Api-Key"] = api_key
def _published(value: str | None) -> datetime | None:
if not value:
return None
try:
return datetime.fromisoformat(value)
except ValueError:
return None
def response(resp: SXNG_Response) -> EngineResults:
res = EngineResults()
resp_json = resp.json()
if resp_json.get("timed_out"):
raise SearxEngineResponseException("timeout")
for item in resp_json.get("results", []):
url = item.get("url")
if not url:
continue
res.add(
res.types.MainResult(
url=url,
title=item.get("title") or url,
content=item.get("snippet") or "",
publishedDate=_published(item.get("published")),
)
)
suggestion = resp_json.get("did_you_mean")
if suggestion:
res.add(res.types.LegacyResult(suggestion=suggestion))
return res
+1 -1
View File
@@ -32,7 +32,7 @@ about = {
}
language = "de"
categories = ['general', 'news']
categories = ['news']
paging = True
results_per_page = 10
+9 -1
View File
@@ -4,7 +4,8 @@
import json
import typing as t
from searx.exceptions import SearxEngineAPIException
from searx.exceptions import SearxEngineAPIException, SearxEngineTooManyRequestsException
from searx.network import raise_for_httperror
from searx.result_types import EngineResults
if t.TYPE_CHECKING:
@@ -54,8 +55,15 @@ def request(query: str, params: "OnlineParams"):
"source": "",
}
params["raise_for_httperror"] = False
def response(resp: "SXNG_Response") -> EngineResults:
if resp.status_code in (400, 429):
raise SearxEngineTooManyRequestsException()
raise_for_httperror(resp)
res = EngineResults()
# response is a Server-Side Events (SSE) stream
+1 -1
View File
@@ -186,7 +186,7 @@ class Network:
Network._TOR_CHECK_RESULT[proxies] = False
return False
response = await client.get("https://check.torproject.org/api/ip", timeout=60)
response = await client.get("https://check.torproject.org/api/ip", timeout=10)
result = bool(response.json()["IsTor"])
Network._TOR_CHECK_RESULT[proxies] = result
return result
+5
View File
@@ -2147,6 +2147,11 @@ engines:
require_api_key: false
results: JSON
- name: readerfunded
engine: readerfunded
shortcut: rfd
inactive: true
- name: reuters
engine: reuters
shortcut: reu
@@ -1 +1 @@
{"version":3,"file":"BMrKiJ3q.min.js","names":["listen","searchForm","getElement","searchInput","searchReset","isMobile","isResultsPage","categoryButtons","end","event","button","categoryButton","safesearchElement","timeRangeElement","languageElement","searchCategories"],"sources":["../../../../../client/simple/src/js/main/search.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { listen } from \"../toolkit.ts\";\nimport { getElement } from \"../util/getElement.ts\";\n\nconst searchForm: HTMLFormElement = getElement<HTMLFormElement>(\"search\");\nconst searchInput: HTMLInputElement = getElement<HTMLInputElement>(\"q\");\nconst searchReset: HTMLButtonElement = getElement<HTMLButtonElement>(\"clear_search\");\n\nconst isMobile: boolean = window.matchMedia(\"(max-width: 50em)\").matches;\nconst isResultsPage: boolean = document.querySelector(\"main\")?.id === \"main_results\";\n\nconst categoryButtons: HTMLButtonElement[] = Array.from(\n document.querySelectorAll<HTMLButtonElement>(\"#categories_container button.category\")\n);\n\n// focus search input on large screens\nif (!(isMobile || isResultsPage)) {\n searchInput.focus();\n}\n\n// On mobile, move cursor to the end of the input on focus\nif (isMobile) {\n listen(\"focus\", searchInput, () => {\n // Defer cursor move until the next frame to prevent a visual jump\n requestAnimationFrame(() => {\n const end = searchInput.value.length;\n searchInput.setSelectionRange(end, end);\n searchInput.scrollLeft = searchInput.scrollWidth;\n });\n });\n}\n\nlisten(\"click\", searchReset, (event: MouseEvent) => {\n event.preventDefault();\n searchInput.value = \"\";\n searchInput.focus();\n});\n\nfor (const button of categoryButtons) {\n listen(\"click\", button, (event: MouseEvent) => {\n if (event.shiftKey) {\n event.preventDefault();\n button.classList.toggle(\"selected\");\n return;\n }\n\n // deselect all other categories\n for (const categoryButton of categoryButtons) {\n categoryButton.classList.toggle(\"selected\", categoryButton === button);\n }\n });\n}\n\nif (document.querySelector(\"div.search_filters\")) {\n const safesearchElement = document.getElementById(\"safesearch\");\n if (safesearchElement) {\n listen(\"change\", safesearchElement, () => searchForm.submit());\n }\n\n const timeRangeElement = document.getElementById(\"time_range\");\n if (timeRangeElement) {\n listen(\"change\", timeRangeElement, () => searchForm.submit());\n }\n\n const languageElement = document.getElementById(\"language\");\n if (languageElement) {\n listen(\"change\", languageElement, () => searchForm.submit());\n }\n}\n\n// override searchForm submit event\nlisten(\"submit\", searchForm, (event: Event) => {\n event.preventDefault();\n\n if (categoryButtons.length > 0) {\n const searchCategories = getElement<HTMLInputElement>(\"selected-categories\");\n searchCategories.value = categoryButtons\n .filter((button) => button.classList.contains(\"selected\"))\n .map((button) => button.name.replace(\"category_\", \"\"))\n .join(\",\");\n }\n\n searchForm.submit();\n});\n"],"mappings":"yEAKA,IAAMC,EAA8BC,EAA4B,QAAQ,EAClEC,EAAgCD,EAA6B,GAAG,EAChEE,EAAiCF,EAA8B,cAAc,EAE7EG,EAAoB,OAAO,WAAW,mBAAmB,CAAC,CAAC,QAC3DC,EAAyB,SAAS,cAAc,MAAM,CAAC,EAAE,KAAO,eAEhEC,EAAuC,MAAM,KACjD,SAAS,iBAAoC,uCAAuC,CACtF,EAGMF,GAAYC,GAChBH,EAAY,MAAM,EAIhBE,GACFL,EAAO,QAASG,MAAmB,CAEjC,0BAA4B,CAC1B,IAAMK,EAAML,EAAY,MAAM,OAC9BA,EAAY,kBAAkBK,EAAKA,CAAG,EACtC,EAAY,WAAaL,EAAY,WACvC,CAAC,CACH,CAAC,EAGHH,EAAO,QAASI,EAAc,GAAsB,CAClDK,EAAM,eAAe,EACrB,EAAY,MAAQ,GACpBN,EAAY,MAAM,CACpB,CAAC,EAED,IAAK,IAAMO,KAAUH,EACnBP,EAAO,QAASU,EAAS,GAAsB,CAC7C,GAAID,EAAM,SACRA,EAAM,eAAe,EACrBC,EAAO,UAAU,OAAO,UAAU,OAKpC,IAAK,IAAMC,KAAkBJ,EAC3BI,EAAe,UAAU,OAAO,WAAYA,IAAmBD,CAAM,CAEzE,CAAC,EAGH,GAAI,SAAS,cAAc,oBAAoB,EAAG,CAChD,IAAME,EAAoB,SAAS,eAAe,YAAY,EAC1DA,GACFZ,EAAO,SAAUY,MAAyBX,EAAW,OAAO,CAAC,EAG/D,IAAMY,EAAmB,SAAS,eAAe,YAAY,EACzDA,GACFb,EAAO,SAAUa,MAAwBZ,EAAW,OAAO,CAAC,EAG9D,IAAMa,EAAkB,SAAS,eAAe,UAAU,EACtDA,GACFd,EAAO,SAAUc,MAAuBb,EAAW,OAAO,CAAC,CAE/D,CAGAD,EAAO,SAAUC,EAAa,GAAiB,CAG7C,GAFAQ,EAAM,eAAe,EAEjBF,EAAgB,OAAS,EAAG,CAC9B,IAAMQ,EAAmBb,EAA6B,qBAAqB,EAC3E,EAAiB,MAAQK,EACtB,OAAQ,GAAWG,EAAO,UAAU,SAAS,UAAU,CAAC,CAAC,CACzD,IAAK,GAAWA,EAAO,KAAK,QAAQ,YAAa,EAAE,CAAC,CAAC,CACrD,KAAK,GAAG,CACb,CAEAT,EAAW,OAAO,CACpB,CAAC"}
{"version":3,"file":"BMrKiJ3q.min.js","names":["listen","searchForm","getElement","searchInput","searchReset","isMobile","isResultsPage","categoryButtons","end","event","button","categoryButton","safesearchElement","timeRangeElement","languageElement","searchCategories"],"sources":["../../../../../client/simple/src/js/main/search.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { listen } from \"../toolkit.ts\";\nimport { getElement } from \"../util/getElement.ts\";\n\nconst searchForm: HTMLFormElement = getElement<HTMLFormElement>(\"search\");\nconst searchInput: HTMLInputElement = getElement<HTMLInputElement>(\"q\");\nconst searchReset: HTMLButtonElement = getElement<HTMLButtonElement>(\"clear_search\");\n\nconst isMobile: boolean = window.matchMedia(\"(max-width: 50em)\").matches;\nconst isResultsPage: boolean = document.querySelector(\"main\")?.id === \"main_results\";\n\nconst categoryButtons: HTMLButtonElement[] = Array.from(\n document.querySelectorAll<HTMLButtonElement>(\"#categories_container button.category\")\n);\n\n// focus search input on large screens\nif (!(isMobile || isResultsPage)) {\n searchInput.focus();\n}\n\n// On mobile, move cursor to the end of the input on focus\nif (isMobile) {\n listen(\"focus\", searchInput, () => {\n // Defer cursor move until the next frame to prevent a visual jump\n requestAnimationFrame(() => {\n const end = searchInput.value.length;\n searchInput.setSelectionRange(end, end);\n searchInput.scrollLeft = searchInput.scrollWidth;\n });\n });\n}\n\nlisten(\"click\", searchReset, (event: MouseEvent) => {\n event.preventDefault();\n searchInput.value = \"\";\n searchInput.focus();\n});\n\nfor (const button of categoryButtons) {\n listen(\"click\", button, (event: MouseEvent) => {\n if (event.shiftKey) {\n event.preventDefault();\n button.classList.toggle(\"selected\");\n return;\n }\n\n // deselect all other categories\n for (const categoryButton of categoryButtons) {\n categoryButton.classList.toggle(\"selected\", categoryButton === button);\n }\n });\n}\n\nif (document.querySelector(\"div.search_filters\")) {\n const safesearchElement = document.getElementById(\"safesearch\");\n if (safesearchElement) {\n listen(\"change\", safesearchElement, () => searchForm.submit());\n }\n\n const timeRangeElement = document.getElementById(\"time_range\");\n if (timeRangeElement) {\n listen(\"change\", timeRangeElement, () => searchForm.submit());\n }\n\n const languageElement = document.getElementById(\"language\");\n if (languageElement) {\n listen(\"change\", languageElement, () => searchForm.submit());\n }\n}\n\n// override searchForm submit event\nlisten(\"submit\", searchForm, (event: Event) => {\n event.preventDefault();\n\n if (categoryButtons.length > 0) {\n const searchCategories = getElement<HTMLInputElement>(\"selected-categories\");\n searchCategories.value = categoryButtons\n .filter((button) => button.classList.contains(\"selected\"))\n .map((button) => button.name.replace(\"category_\", \"\"))\n .join(\",\");\n }\n\n searchForm.submit();\n});\n"],"mappings":"A,yEAKA,IAAMC,EAA8BC,EAA4B,QAAQ,EAClEC,EAAgCD,EAA6B,GAAG,EAChEE,EAAiCF,EAA8B,cAAc,EAE7EG,EAAoB,OAAO,WAAW,mBAAmB,CAAC,CAAC,QAC3DC,EAAyB,SAAS,cAAc,MAAM,CAAC,EAAE,KAAO,eAEhEC,EAAuC,MAAM,KACjD,SAAS,iBAAoC,uCAAuC,CACtF,EAGMF,GAAYC,GAChBH,EAAY,MAAM,EAIhBE,GACFL,EAAO,QAASG,MAAmB,CAEjC,0BAA4B,CAC1B,IAAMK,EAAML,EAAY,MAAM,OAC9BA,EAAY,kBAAkBK,EAAKA,CAAG,EACtC,EAAY,WAAaL,EAAY,WACvC,CAAC,CACH,CAAC,EAGHH,EAAO,QAASI,EAAc,GAAsB,CAClDK,EAAM,eAAe,EACrB,EAAY,MAAQ,GACpBN,EAAY,MAAM,CACpB,CAAC,EAED,IAAK,IAAMO,KAAUH,EACnBP,EAAO,QAASU,EAAS,GAAsB,CAC7C,GAAID,EAAM,SACRA,EAAM,eAAe,EACrBC,EAAO,UAAU,OAAO,UAAU,OAKpC,IAAK,IAAMC,KAAkBJ,EAC3BI,EAAe,UAAU,OAAO,WAAYA,IAAmBD,CAAM,CAEzE,CAAC,EAGH,GAAI,SAAS,cAAc,oBAAoB,EAAG,CAChD,IAAME,EAAoB,SAAS,eAAe,YAAY,EAC1DA,GACFZ,EAAO,SAAUY,MAAyBX,EAAW,OAAO,CAAC,EAG/D,IAAMY,EAAmB,SAAS,eAAe,YAAY,EACzDA,GACFb,EAAO,SAAUa,MAAwBZ,EAAW,OAAO,CAAC,EAG9D,IAAMa,EAAkB,SAAS,eAAe,UAAU,EACtDA,GACFd,EAAO,SAAUc,MAAuBb,EAAW,OAAO,CAAC,CAE/D,CAGAD,EAAO,SAAUC,EAAa,GAAiB,CAG7C,GAFAQ,EAAM,eAAe,EAEjBF,EAAgB,OAAS,EAAG,CAC9B,IAAMQ,EAAmBb,EAA6B,qBAAqB,EAC3E,EAAiB,MAAQK,EACtB,OAAQ,GAAWG,EAAO,UAAU,SAAS,UAAU,CAAC,CAAC,CACzD,IAAK,GAAWA,EAAO,KAAK,QAAQ,YAAa,EAAE,CAAC,CAAC,CACrD,KAAK,GAAG,CACb,CAEAT,EAAW,OAAO,CACpB,CAAC"}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -7,5 +7,5 @@ import{i as e,n as t,r as n}from"../sxng-core.min.js";import{t as r}from"./DK4yU
* @author John Doherty <www.johndoherty.info>
* @license MIT
*/
(function(e,t){typeof e.CustomEvent!=`function`&&(e.CustomEvent=function(e,n){n||={bubbles:!1,cancelable:!1,detail:void 0};var r=t.createEvent(`CustomEvent`);return r.initCustomEvent(e,n.bubbles,n.cancelable,n.detail),r},e.CustomEvent.prototype=e.Event.prototype),t.addEventListener(`touchstart`,u,!1),t.addEventListener(`touchmove`,d,!1),t.addEventListener(`touchend`,l,!1);var n=null,r=null,i=null,a=null,o=null,s=null,c=0;function l(e){if(s===e.target){var l=parseInt(f(s,`data-swipe-threshold`,`20`),10),u=f(s,`data-swipe-unit`,`px`),d=parseInt(f(s,`data-swipe-timeout`,`500`),10),p=Date.now()-o,m=``,h=e.changedTouches||e.touches||[];if(u===`vh`&&(l=Math.round(l/100*t.documentElement.clientHeight)),u===`vw`&&(l=Math.round(l/100*t.documentElement.clientWidth)),Math.abs(i)>Math.abs(a)?Math.abs(i)>l&&p<d&&(m=i>0?`swiped-left`:`swiped-right`):Math.abs(a)>l&&p<d&&(m=a>0?`swiped-up`:`swiped-down`),m!==``){var g={dir:m.replace(/swiped-/,``),touchType:(h[0]||{}).touchType||`direct`,fingers:c,xStart:parseInt(n,10),xEnd:parseInt((h[0]||{}).clientX||-1,10),yStart:parseInt(r,10),yEnd:parseInt((h[0]||{}).clientY||-1,10)};s.dispatchEvent(new CustomEvent(`swiped`,{bubbles:!0,cancelable:!0,detail:g})),s.dispatchEvent(new CustomEvent(m,{bubbles:!0,cancelable:!0,detail:g}))}n=null,r=null,o=null}}function u(e){e.target.getAttribute(`data-swipe-ignore`)!==`true`&&(s=e.target,o=Date.now(),n=e.touches[0].clientX,r=e.touches[0].clientY,i=0,a=0,c=e.touches.length)}function d(e){if(n&&r){var t=e.touches[0].clientX,o=e.touches[0].clientY;i=n-t,a=r-o}}function f(e,n,r){for(;e&&e!==t.documentElement;){var i=e.getAttribute(n);if(i)return i;e=e.parentNode}return r}})(window,document);var i,a=`${e.theme_static_path}/img/img_load_error.svg`,o=e=>{i&&clearTimeout(i);let t=e.querySelector(`.result-images-source img`);if(!t)return;let n=e.querySelector(`.image_thumbnail`);if(n){if(n.src===a)return;t.onerror=()=>{t.src=n.src},t.src=n.src}let r=t.getAttribute(`data-src`);r&&(i=setTimeout(()=>{t.src=r,t.removeAttribute(`data-src`)},1e3))},s=e=>{e.classList.contains(`thumbnail`)?e.closest(`a.thumbnail_link`)?.remove():e.classList.contains(`image_thumbnail`)&&e.src!==a&&(e.src=a)};document.addEventListener(`error`,e=>{let t=e.target;t instanceof HTMLImageElement&&s(t)},!0);for(let e of document.querySelectorAll(`img.thumbnail, #urls img.image_thumbnail`))e.complete&&e.naturalWidth===0&&s(e);document.querySelector(`#search_url button#copy_url`)?.style.setProperty(`display`,`block`),n.selectImage=e=>{document.getElementById(`results`)?.classList.add(`image-detail-open`),window.location.hash=`#image-viewer`,n.scrollPageToSelected?.(),e&&o(e)},n.closeDetail=()=>{document.getElementById(`results`)?.classList.remove(`image-detail-open`),window.location.hash===`#image-viewer`&&window.history.back(),n.scrollPageToSelected?.()},t(`click`,`.btn-collapse`,function(){let e=this.getAttribute(`data-btn-text-collapsed`),t=this.getAttribute(`data-btn-text-not-collapsed`),n=this.getAttribute(`data-target`);if(!(n&&e&&t))return;let i=document.querySelector(n);r(i);let a=this.classList.contains(`collapsed`),o=a?t:e,s=a?e:t;this.innerHTML=this.innerHTML.replace(s,o),this.classList.toggle(`collapsed`),i.classList.toggle(`invisible`)}),t(`click`,`.media-loader`,function(){let e=this.getAttribute(`data-target`);if(!e)return;let t=document.querySelector(`${e} > iframe`);if(r(t),!t.getAttribute(`src`)){let e=t.getAttribute(`data-src`);e&&t.setAttribute(`src`,e)}}),t(`click`,`#copy_url`,async function(){let e=this.parentElement?.querySelector(`pre`);if(r(e),window.isSecureContext)await navigator.clipboard.writeText(e.innerText);else{let t=window.getSelection();if(t){let n=document.createRange();n.selectNodeContents(e),t.removeAllRanges(),t.addRange(n),document.execCommand(`copy`)}}this.dataset.copiedText&&(this.innerText=this.dataset.copiedText)}),t(`click`,`.result-detail-close`,e=>{e.preventDefault(),n.closeDetail?.()}),t(`click`,`.result-detail-previous`,e=>{e.preventDefault(),n.selectPrevious?.(!1)}),t(`click`,`.result-detail-next`,e=>{e.preventDefault(),n.selectNext?.(!1)}),window.addEventListener(`hashchange`,()=>{window.location.hash!==`#image-viewer`&&n.closeDetail?.()});var c=document.querySelectorAll(`.swipe-horizontal`);for(let e of c)t(`swiped-left`,e,()=>{n.selectNext?.(!1)}),t(`swiped-right`,e,()=>{n.selectPrevious?.(!1)});window.addEventListener(`scroll`,()=>{let e=document.getElementById(`backToTop`),t=document.getElementById(`results`);if(e&&t){let e=(document.documentElement.scrollTop||document.body.scrollTop)>=100;t.classList.toggle(`scrolling`,e)}},!0);
//# sourceMappingURL=CFQtNTi4.min.js.map
(function(e,t){typeof e.CustomEvent!=`function`&&(e.CustomEvent=function(e,n){n||={bubbles:!1,cancelable:!1,detail:void 0};var r=t.createEvent(`CustomEvent`);return r.initCustomEvent(e,n.bubbles,n.cancelable,n.detail),r},e.CustomEvent.prototype=e.Event.prototype),t.addEventListener(`touchstart`,u,!1),t.addEventListener(`touchmove`,d,!1),t.addEventListener(`touchend`,l,!1);var n=null,r=null,i=null,a=null,o=null,s=null,c=0;function l(e){if(s===e.target){var l=parseInt(f(s,`data-swipe-threshold`,`20`),10),u=f(s,`data-swipe-unit`,`px`),d=parseInt(f(s,`data-swipe-timeout`,`500`),10),p=Date.now()-o,m=``,h=e.changedTouches||e.touches||[];if(u===`vh`&&(l=Math.round(l/100*t.documentElement.clientHeight)),u===`vw`&&(l=Math.round(l/100*t.documentElement.clientWidth)),Math.abs(i)>Math.abs(a)?Math.abs(i)>l&&p<d&&(m=i>0?`swiped-left`:`swiped-right`):Math.abs(a)>l&&p<d&&(m=a>0?`swiped-up`:`swiped-down`),m!==``){var g={dir:m.replace(/swiped-/,``),touchType:(h[0]||{}).touchType||`direct`,fingers:c,xStart:parseInt(n,10),xEnd:parseInt((h[0]||{}).clientX||-1,10),yStart:parseInt(r,10),yEnd:parseInt((h[0]||{}).clientY||-1,10)};s.dispatchEvent(new CustomEvent(`swiped`,{bubbles:!0,cancelable:!0,detail:g})),s.dispatchEvent(new CustomEvent(m,{bubbles:!0,cancelable:!0,detail:g}))}n=null,r=null,o=null}}function u(e){e.target.getAttribute(`data-swipe-ignore`)!==`true`&&(s=e.target,o=Date.now(),n=e.touches[0].clientX,r=e.touches[0].clientY,i=0,a=0,c=e.touches.length)}function d(e){if(n&&r){var t=e.touches[0].clientX,o=e.touches[0].clientY;i=n-t,a=r-o}}function f(e,n,r){for(;e&&e!==t.documentElement;){var i=e.getAttribute(n);if(i)return i;e=e.parentNode}return r}})(window,document);var i,a=`${e.theme_static_path}/img/img_load_error.svg`,o=e=>{i&&clearTimeout(i);let t=e.querySelector(`.result-images-source img`);if(!t)return;let n=e.querySelector(`.image_thumbnail`);if(n){if(n.src===a)return;t.onerror=()=>{t.src=n.src},t.src=n.src}let r=t.getAttribute(`data-src`);r&&(i=setTimeout(()=>{t.src=r,t.removeAttribute(`data-src`)},1e3))},s=e=>{e.classList.contains(`thumbnail`)?e.closest(`a.thumbnail_link`)?.remove():e.classList.contains(`image_thumbnail`)&&e.src!==a&&(e.src=a)};document.addEventListener(`error`,e=>{let t=e.target;t instanceof HTMLImageElement&&s(t)},!0);for(let e of document.querySelectorAll(`img.thumbnail, #urls img.image_thumbnail`))e.complete&&e.naturalWidth===0&&s(e);document.querySelector(`#search_url button#copy_url`)?.style.setProperty(`display`,`block`),n.selectImage=e=>{document.getElementById(`results`)?.classList.add(`image-detail-open`),window.location.hash=`#image-viewer`,n.scrollPageToSelected?.(),e&&o(e)},n.closeDetail=()=>{document.getElementById(`results`)?.classList.remove(`image-detail-open`),window.location.hash===`#image-viewer`&&window.history.back(),n.scrollPageToSelected?.()},t(`click`,`.btn-collapse`,function(){let e=this.getAttribute(`data-btn-text-collapsed`),t=this.getAttribute(`data-btn-text-not-collapsed`),n=this.getAttribute(`data-target`);if(!(n&&e&&t))return;let i=document.querySelector(n);r(i);let a=this.classList.contains(`collapsed`),o=a?t:e,s=a?e:t;this.innerHTML=this.innerHTML.replace(s,o),this.classList.toggle(`collapsed`),i.classList.toggle(`invisible`)}),t(`click`,`.media-loader`,function(){let e=this.getAttribute(`data-target`);if(!e)return;let t=document.querySelector(`${e} > iframe`);if(r(t),!t.getAttribute(`src`)){let e=t.getAttribute(`data-src`);e&&t.setAttribute(`src`,e)}}),t(`click`,`#copy_url`,async function(){let e=this.parentElement?.querySelector(`pre`);if(r(e),window.isSecureContext)await navigator.clipboard.writeText(e.textContent);else{let t=window.getSelection();if(t){let n=document.createRange();n.selectNodeContents(e),t.removeAllRanges(),t.addRange(n),document.execCommand(`copy`)}}this.dataset.copiedText&&(this.textContent=this.dataset.copiedText)}),t(`click`,`.result-detail-close`,e=>{e.preventDefault(),n.closeDetail?.()}),t(`click`,`.result-detail-previous`,e=>{e.preventDefault(),n.selectPrevious?.(!1)}),t(`click`,`.result-detail-next`,e=>{e.preventDefault(),n.selectNext?.(!1)}),window.addEventListener(`hashchange`,()=>{window.location.hash!==`#image-viewer`&&n.closeDetail?.()});var c=document.querySelectorAll(`.swipe-horizontal`);for(let e of c)t(`swiped-left`,e,()=>{n.selectNext?.(!1)}),t(`swiped-right`,e,()=>{n.selectPrevious?.(!1)});window.addEventListener(`scroll`,()=>{let e=document.getElementById(`backToTop`),t=document.getElementById(`results`);if(e&&t){let e=(document.documentElement.scrollTop||document.body.scrollTop)>=100;t.classList.toggle(`scrolling`,e)}},!0);
//# sourceMappingURL=Bu_sbHhO.min.js.map
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
{"version":3,"file":"BuurKv-k.min.js","names":["Plugin","id","result","error"],"sources":["../../../../../client/simple/src/js/Plugin.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\n\n/**\n * Base class for client-side plugins.\n *\n * @remarks\n * Handle conditional loading of the plugin in:\n *\n * - client/simple/src/js/router.ts\n *\n * @abstract\n */\nexport abstract class Plugin {\n /**\n * Plugin name.\n */\n protected readonly id: string;\n\n /**\n * @remarks\n * Don't hold references of this instance outside the class.\n */\n protected constructor(id: string) {\n this.id = id;\n\n queueMicrotask(() => this.invoke());\n }\n\n private async invoke(): Promise<void> {\n try {\n console.debug(`[PLUGIN] ${this.id}: Running...`);\n const result = await this.run();\n if (!result) return;\n\n console.debug(`[PLUGIN] ${this.id}: Running post-exec...`);\n // @ts-expect-error\n void (await this.post(result as NonNullable<Awaited<ReturnType<this[\"run\"]>>>));\n } catch (error) {\n console.error(`[PLUGIN] ${this.id}:`, error);\n } finally {\n console.debug(`[PLUGIN] ${this.id}: Done.`);\n }\n }\n\n /**\n * Plugin goes here.\n *\n * @remarks\n * The plugin is already loaded at this point. If you wish to execute\n * conditions to exit early, consider moving the logic to:\n *\n * - client/simple/src/js/router.ts\n *\n * ...to avoid unnecessarily loading this plugin on the client.\n */\n protected abstract run(): Promise<unknown>;\n\n /**\n * Post-execution hook.\n *\n * @remarks\n * The hook is only executed if `#run()` returns a truthy value.\n */\n // @ts-expect-error\n protected abstract post(result: NonNullable<Awaited<ReturnType<this[\"run\"]>>>): Promise<void>;\n}\n"],"mappings":"AAYA,IAAsBA,EAAtB,KAA6B,CAI3B,GAMA,YAAsB,EAAY,CAChC,KAAK,GAAKC,EAEV,mBAAqB,KAAK,OAAO,CAAC,CACpC,CAEA,MAAc,QAAwB,CACpC,GAAI,CACF,QAAQ,MAAM,YAAY,KAAK,GAAG,aAAa,EAC/C,IAAMC,EAAS,MAAM,KAAK,IAAI,EAC9B,GAAI,CAACA,EAAQ,OAEb,QAAQ,MAAM,YAAY,KAAK,GAAG,uBAAuB,EAEzD,MAAY,KAAK,KAAKA,CAAuD,CAC/E,OAASC,EAAO,CACd,QAAQ,MAAM,YAAY,KAAK,GAAG,GAAIA,CAAK,CAC7C,QAAU,CACR,QAAQ,MAAM,YAAY,KAAK,GAAG,QAAQ,CAC5C,CACF,CAuBF"}
{"version":3,"file":"BuurKv-k.min.js","names":["Plugin","id","result","error"],"sources":["../../../../../client/simple/src/js/Plugin.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\n\n/**\n * Base class for client-side plugins.\n *\n * @remarks\n * Handle conditional loading of the plugin in:\n *\n * - client/simple/src/js/router.ts\n *\n * @abstract\n */\nexport abstract class Plugin {\n /**\n * Plugin name.\n */\n protected readonly id: string;\n\n /**\n * @remarks\n * Don't hold references of this instance outside the class.\n */\n protected constructor(id: string) {\n this.id = id;\n\n queueMicrotask(() => this.invoke());\n }\n\n private async invoke(): Promise<void> {\n try {\n console.debug(`[PLUGIN] ${this.id}: Running...`);\n const result = await this.run();\n if (!result) return;\n\n console.debug(`[PLUGIN] ${this.id}: Running post-exec...`);\n // @ts-expect-error\n void (await this.post(result as NonNullable<Awaited<ReturnType<this[\"run\"]>>>));\n } catch (error) {\n console.error(`[PLUGIN] ${this.id}:`, error);\n } finally {\n console.debug(`[PLUGIN] ${this.id}: Done.`);\n }\n }\n\n /**\n * Plugin goes here.\n *\n * @remarks\n * The plugin is already loaded at this point. If you wish to execute\n * conditions to exit early, consider moving the logic to:\n *\n * - client/simple/src/js/router.ts\n *\n * ...to avoid unnecessarily loading this plugin on the client.\n */\n protected abstract run(): Promise<unknown>;\n\n /**\n * Post-execution hook.\n *\n * @remarks\n * The hook is only executed if `#run()` returns a truthy value.\n */\n // @ts-expect-error\n protected abstract post(result: NonNullable<Awaited<ReturnType<this[\"run\"]>>>): Promise<void>;\n}\n"],"mappings":"AAYA,IAAsBA,EAAtB,KAA6B,CAI3B,GAMA,YAAsB,EAAY,CAChC,KAAK,GAAKC,EAEV,mBAAqB,KAAK,OAAO,CAAC,CACpC,CAEA,MAAc,QAAwB,CACpC,GAAI,CACF,QAAQ,MAAM,YAAY,KAAK,GAAG,aAAa,EAC/C,IAAMC,EAAS,MAAM,KAAK,IAAI,EAC9B,GAAI,CAACA,EAAQ,OAEb,QAAQ,MAAM,YAAY,KAAK,GAAG,uBAAuB,EAEzD,MAAY,KAAK,KAAKA,CAAuD,CAC/E,OAASC,EAAO,CACd,QAAQ,MAAM,YAAY,KAAK,GAAG,GAAIA,CAAK,CAC7C,QAAU,CACR,QAAQ,MAAM,YAAY,KAAK,GAAG,QAAQ,CAC5C,CACF,CAuBF,E"}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
{"version":3,"file":"DK4yUVpy.min.js","names":["assertElement","element"],"sources":["../../../../../client/simple/src/js/util/assertElement.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\n\ntype AssertElement = <T>(element?: T | null) => asserts element is T;\nexport const assertElement: AssertElement = <T>(element?: T | null): asserts element is T => {\n if (!element) {\n throw new Error(\"DOM element not found\");\n }\n};\n"],"mappings":"AAGA,IAAaA,EAAmC,GAA6C,CAC3F,GAAI,CAACC,EACH,MAAU,MAAM,uBAAuB,CAE3C"}
{"version":3,"file":"DK4yUVpy.min.js","names":["assertElement","element"],"sources":["../../../../../client/simple/src/js/util/assertElement.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\n\ntype AssertElement = <T>(element?: T | null) => asserts element is T;\nexport const assertElement: AssertElement = <T>(element?: T | null): asserts element is T => {\n if (!element) {\n throw new Error(\"DOM element not found\");\n }\n};\n"],"mappings":"AAGA,IAAaA,EAAmC,GAA6C,CAC3F,GAAI,CAACC,EACH,MAAU,MAAM,uBAAuB,CAE3C,E"}
@@ -1 +1 @@
{"version":3,"file":"DcK-mo-Y.min.js","names":["assertElement","getElement","element","id","options"],"sources":["../../../../../client/simple/src/js/util/getElement.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { assertElement } from \"./assertElement.ts\";\n\ntype Options = {\n assert?: boolean;\n};\n\nexport function getElement<T>(id: string, options?: { assert: true }): T;\nexport function getElement<T>(id: string, options?: { assert: false }): T | null;\nexport function getElement<T>(id: string, options: Options = {}): T | null {\n options.assert ??= true;\n\n const element = document.getElementById(id) as T | null;\n\n if (options.assert) {\n assertElement(element);\n }\n\n return element;\n}\n"],"mappings":"sCAUA,SAAgBC,EAAc,EAAY,EAAmB,CAAC,EAAa,CACzE,EAAQ,SAAW,GAEnB,IAAMC,EAAU,SAAS,eAAeC,CAAE,EAM1C,OAJIC,EAAQ,QACVJ,EAAcE,CAAO,EAGhBA,CACT"}
{"version":3,"file":"DcK-mo-Y.min.js","names":["assertElement","getElement","element","id","options"],"sources":["../../../../../client/simple/src/js/util/getElement.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { assertElement } from \"./assertElement.ts\";\n\ntype Options = {\n assert?: boolean;\n};\n\nexport function getElement<T>(id: string, options?: { assert: true }): T;\nexport function getElement<T>(id: string, options?: { assert: false }): T | null;\nexport function getElement<T>(id: string, options: Options = {}): T | null {\n options.assert ??= true;\n\n const element = document.getElementById(id) as T | null;\n\n if (options.assert) {\n assertElement(element);\n }\n\n return element;\n}\n"],"mappings":"A,sCAUA,SAAgBC,EAAc,EAAY,EAAmB,CAAC,EAAa,CACzE,EAAQ,SAAW,GAEnB,IAAMC,EAAU,SAAS,eAAeC,CAAE,EAM1C,OAJIC,EAAQ,QACVJ,EAAcE,CAAO,EAGhBA,CACT,C"}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,2 +1,2 @@
import{i as e,n as t,t as n}from"../sxng-core.min.js";import{t as r}from"./DK4yUVpy.min.js";var i,a=async()=>{if(!i){try{i=await(await n(`GET`,`engine_descriptions.json`)).json()}catch(e){console.error(`Error fetching engineDescriptions:`,e)}if(i)for(let[t,[n,r]]of Object.entries(i)){let i=document.querySelectorAll(`[data-engine-name="${t}"] .engine-description`),a=` (<i>${e.translations?.Source}:&nbsp;${r}</i>)`;for(let e of i)e.innerHTML=n+a}}},o=(e,t)=>{for(let n of t)n.offsetParent&&(n.checked=!e)},s=document.querySelectorAll(`[data-engine-name]`);for(let e of s)t(`mouseenter`,e,a);var c=document.querySelectorAll(`tbody input[type=checkbox][class~=checkbox-onoff]`),l=document.querySelectorAll(`.enable-all-engines`);for(let e of l)t(`click`,e,()=>o(!0,c));var u=document.querySelectorAll(`.disable-all-engines`);for(let e of u)t(`click`,e,()=>o(!1,c));t(`click`,`#copy-hash`,async function(){let e=this.parentElement?.querySelector(`pre`);if(r(e),window.isSecureContext)await navigator.clipboard.writeText(e.innerText);else{let t=window.getSelection();if(t){let n=document.createRange();n.selectNodeContents(e),t.removeAllRanges(),t.addRange(n),document.execCommand(`copy`)}}this.dataset.copiedText&&(this.innerText=this.dataset.copiedText)});
//# sourceMappingURL=e2-9fzwE.min.js.map
import{i as e,n as t,t as n}from"../sxng-core.min.js";import{t as r}from"./DK4yUVpy.min.js";var i,a=async()=>{if(!i){try{i=await(await n(`GET`,`engine_descriptions.json`)).json()}catch(e){console.error(`Error fetching engineDescriptions:`,e)}if(i)for(let[t,[n,r]]of Object.entries(i)){let i=document.querySelectorAll(`[data-engine-name="${t}"] .engine-description`),a=` (<i>${e.translations?.Source}:&nbsp;${r}</i>)`;for(let e of i)e.innerHTML=n+a}}},o=(e,t)=>{for(let n of t)n.offsetParent&&(n.checked=!e)},s=document.querySelectorAll(`[data-engine-name]`);for(let e of s)t(`mouseenter`,e,a);var c=document.querySelectorAll(`tbody input[type=checkbox][class~=checkbox-onoff]`),l=document.querySelectorAll(`.enable-all-engines`);for(let e of l)t(`click`,e,()=>o(!0,c));var u=document.querySelectorAll(`.disable-all-engines`);for(let e of u)t(`click`,e,()=>o(!1,c));t(`click`,`#copy-hash`,async function(){let e=this.parentElement?.querySelector(`pre`);if(r(e),window.isSecureContext)await navigator.clipboard.writeText(e.textContent);else{let t=window.getSelection();if(t){let n=document.createRange();n.selectNodeContents(e),t.removeAllRanges(),t.addRange(n),document.execCommand(`copy`)}}this.dataset.copiedText&&(this.textContent=this.dataset.copiedText)});
//# sourceMappingURL=DrJUb27w.min.js.map
@@ -1 +1 @@
{"version":3,"file":"e2-9fzwE.min.js","names":["settings","listen","http","assertElement","engineDescriptions","loadEngineDescriptions","error","engine_name","description","source","elements","sourceText","element","toggleEngines","engineToggle","engineToggles","enable","engineElements","engineElement","enableAllEngines","engine","disableAllEngines","target","selection","range"],"sources":["../../../../../client/simple/src/js/main/preferences.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { http, listen, settings } from \"../toolkit.ts\";\nimport { assertElement } from \"../util/assertElement.ts\";\n\nlet engineDescriptions: Record<string, [string, string]> | undefined;\n\nconst loadEngineDescriptions = async (): Promise<void> => {\n if (engineDescriptions) return;\n try {\n const res = await http(\"GET\", \"engine_descriptions.json\");\n engineDescriptions = await res.json();\n } catch (error) {\n console.error(\"Error fetching engineDescriptions:\", error);\n }\n if (!engineDescriptions) return;\n\n for (const [engine_name, [description, source]] of Object.entries(engineDescriptions)) {\n const elements = document.querySelectorAll<HTMLElement>(`[data-engine-name=\"${engine_name}\"] .engine-description`);\n const sourceText = ` (<i>${settings.translations?.Source}:&nbsp;${source}</i>)`;\n\n for (const element of elements) {\n element.innerHTML = description + sourceText;\n }\n }\n};\n\nconst toggleEngines = (enable: boolean, engineToggles: NodeListOf<HTMLInputElement>): void => {\n for (const engineToggle of engineToggles) {\n // check if element visible, so that only engines of the current category are modified\n if (engineToggle.offsetParent) {\n engineToggle.checked = !enable;\n }\n }\n};\n\nconst engineElements: NodeListOf<HTMLElement> = document.querySelectorAll<HTMLElement>(\"[data-engine-name]\");\nfor (const engineElement of engineElements) {\n listen(\"mouseenter\", engineElement, loadEngineDescriptions);\n}\n\nconst engineToggles: NodeListOf<HTMLInputElement> = document.querySelectorAll<HTMLInputElement>(\n \"tbody input[type=checkbox][class~=checkbox-onoff]\"\n);\n\nconst enableAllEngines: NodeListOf<HTMLElement> = document.querySelectorAll<HTMLElement>(\".enable-all-engines\");\nfor (const engine of enableAllEngines) {\n listen(\"click\", engine, () => toggleEngines(true, engineToggles));\n}\n\nconst disableAllEngines: NodeListOf<HTMLElement> = document.querySelectorAll<HTMLElement>(\".disable-all-engines\");\nfor (const engine of disableAllEngines) {\n listen(\"click\", engine, () => toggleEngines(false, engineToggles));\n}\n\nlisten(\"click\", \"#copy-hash\", async function (this: HTMLElement) {\n const target = this.parentElement?.querySelector<HTMLPreElement>(\"pre\");\n assertElement(target);\n\n if (window.isSecureContext) {\n await navigator.clipboard.writeText(target.innerText);\n } else {\n const selection = window.getSelection();\n if (selection) {\n const range = document.createRange();\n range.selectNodeContents(target);\n selection.removeAllRanges();\n selection.addRange(range);\n document.execCommand(\"copy\");\n }\n }\n\n if (this.dataset.copiedText) {\n this.innerText = this.dataset.copiedText;\n }\n});\n"],"mappings":"4FAKA,IAAII,EAEEC,EAAyB,SAA2B,CACxD,GAAI,GACJ,IAAI,CAEF,EAAqB,MAAM,MADTH,EAAK,MAAO,0BAA0B,EAAA,CACzB,KAAK,CACtC,OAASI,EAAO,CACd,QAAQ,MAAM,qCAAsCA,CAAK,CAC3D,CACA,GAAKF,EAEL,IAAK,GAAM,CAACG,EAAa,CAACC,EAAaC,MAAY,OAAO,QAAQL,CAAkB,EAAG,CACrF,IAAMM,EAAW,SAAS,iBAA8B,sBAAsBH,EAAY,uBAAuB,EAC3GI,EAAa,QAAQX,EAAS,cAAc,OAAO,SAASS,EAAO,OAEzE,IAAK,IAAMG,KAAWF,EACpB,EAAQ,UAAYF,EAAcG,CAEtC,CAVA,CAWF,EAEME,GAAiB,EAAiB,IAAsD,CAC5F,IAAK,IAAMC,KAAgBC,EAErBD,EAAa,eACf,EAAa,QAAU,CAACE,EAG9B,EAEMC,EAA0C,SAAS,iBAA8B,oBAAoB,EAC3G,IAAK,IAAMC,KAAiBD,EAC1BhB,EAAO,aAAciB,EAAeb,CAAsB,EAG5D,IAAMU,EAA8C,SAAS,iBAC3D,mDACF,EAEMI,EAA4C,SAAS,iBAA8B,qBAAqB,EAC9G,IAAK,IAAMC,KAAUD,EACnBlB,EAAO,QAASmB,MAAcP,EAAc,GAAME,CAAa,CAAC,EAGlE,IAAMM,EAA6C,SAAS,iBAA8B,sBAAsB,EAChH,IAAK,IAAMD,KAAUC,EACnBpB,EAAO,QAASmB,MAAcP,EAAc,GAAOE,CAAa,CAAC,EAGnEd,EAAO,QAAS,aAAc,gBAAmC,CAC/D,IAAMqB,EAAS,KAAK,eAAe,cAA8B,KAAK,EAGtE,GAFAnB,EAAcmB,CAAM,EAEhB,OAAO,gBACT,MAAM,UAAU,UAAU,UAAUA,EAAO,SAAS,MAC/C,CACL,IAAMC,EAAY,OAAO,aAAa,EACtC,GAAIA,EAAW,CACb,IAAMC,EAAQ,SAAS,YAAY,EACnCA,EAAM,mBAAmBF,CAAM,EAC/BC,EAAU,gBAAgB,EAC1BA,EAAU,SAASC,CAAK,EACxB,SAAS,YAAY,MAAM,CAC7B,CACF,CAEI,KAAK,QAAQ,aACf,KAAK,UAAY,KAAK,QAAQ,WAElC,CAAC"}
{"version":3,"file":"DrJUb27w.min.js","names":["settings","listen","http","assertElement","engineDescriptions","loadEngineDescriptions","error","engine_name","description","source","elements","sourceText","element","toggleEngines","engineToggle","engineToggles","enable","engineElements","engineElement","enableAllEngines","engine","disableAllEngines","target","selection","range"],"sources":["../../../../../client/simple/src/js/main/preferences.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { http, listen, settings } from \"../toolkit.ts\";\nimport { assertElement } from \"../util/assertElement.ts\";\n\nlet engineDescriptions: Record<string, [string, string]> | undefined;\n\nconst loadEngineDescriptions = async (): Promise<void> => {\n if (engineDescriptions) return;\n try {\n const res = await http(\"GET\", \"engine_descriptions.json\");\n engineDescriptions = await res.json();\n } catch (error) {\n console.error(\"Error fetching engineDescriptions:\", error);\n }\n if (!engineDescriptions) return;\n\n for (const [engine_name, [description, source]] of Object.entries(engineDescriptions)) {\n const elements = document.querySelectorAll<HTMLElement>(`[data-engine-name=\"${engine_name}\"] .engine-description`);\n const sourceText = ` (<i>${settings.translations?.Source}:&nbsp;${source}</i>)`;\n\n for (const element of elements) {\n element.innerHTML = description + sourceText;\n }\n }\n};\n\nconst toggleEngines = (enable: boolean, engineToggles: NodeListOf<HTMLInputElement>): void => {\n for (const engineToggle of engineToggles) {\n // check if element visible, so that only engines of the current category are modified\n if (engineToggle.offsetParent) {\n engineToggle.checked = !enable;\n }\n }\n};\n\nconst engineElements: NodeListOf<HTMLElement> = document.querySelectorAll<HTMLElement>(\"[data-engine-name]\");\nfor (const engineElement of engineElements) {\n listen(\"mouseenter\", engineElement, loadEngineDescriptions);\n}\n\nconst engineToggles: NodeListOf<HTMLInputElement> = document.querySelectorAll<HTMLInputElement>(\n \"tbody input[type=checkbox][class~=checkbox-onoff]\"\n);\n\nconst enableAllEngines: NodeListOf<HTMLElement> = document.querySelectorAll<HTMLElement>(\".enable-all-engines\");\nfor (const engine of enableAllEngines) {\n listen(\"click\", engine, () => toggleEngines(true, engineToggles));\n}\n\nconst disableAllEngines: NodeListOf<HTMLElement> = document.querySelectorAll<HTMLElement>(\".disable-all-engines\");\nfor (const engine of disableAllEngines) {\n listen(\"click\", engine, () => toggleEngines(false, engineToggles));\n}\n\nlisten(\"click\", \"#copy-hash\", async function (this: HTMLElement) {\n const target = this.parentElement?.querySelector<HTMLPreElement>(\"pre\");\n assertElement(target);\n\n if (window.isSecureContext) {\n await navigator.clipboard.writeText(target.textContent);\n } else {\n const selection = window.getSelection();\n if (selection) {\n const range = document.createRange();\n range.selectNodeContents(target);\n selection.removeAllRanges();\n selection.addRange(range);\n document.execCommand(\"copy\");\n }\n }\n\n if (this.dataset.copiedText) {\n this.textContent = this.dataset.copiedText;\n }\n});\n"],"mappings":"A,4FAKA,IAAII,EAEEC,EAAyB,SAA2B,CACxD,GAAI,GACJ,IAAI,CAEF,EAAqB,MAAM,MADTH,EAAK,MAAO,0BAA0B,EAAA,CACzB,KAAK,CACtC,OAASI,EAAO,CACd,QAAQ,MAAM,qCAAsCA,CAAK,CAC3D,CACA,GAAKF,EAEL,IAAK,GAAM,CAACG,EAAa,CAACC,EAAaC,MAAY,OAAO,QAAQL,CAAkB,EAAG,CACrF,IAAMM,EAAW,SAAS,iBAA8B,sBAAsBH,EAAY,uBAAuB,EAC3GI,EAAa,QAAQX,EAAS,cAAc,OAAO,SAASS,EAAO,OAEzE,IAAK,IAAMG,KAAWF,EACpB,EAAQ,UAAYF,EAAcG,CAEtC,CAVA,CAWF,EAEME,GAAiB,EAAiB,IAAsD,CAC5F,IAAK,IAAMC,KAAgBC,EAErBD,EAAa,eACf,EAAa,QAAU,CAACE,EAG9B,EAEMC,EAA0C,SAAS,iBAA8B,oBAAoB,EAC3G,IAAK,IAAMC,KAAiBD,EAC1BhB,EAAO,aAAciB,EAAeb,CAAsB,EAG5D,IAAMU,EAA8C,SAAS,iBAC3D,mDACF,EAEMI,EAA4C,SAAS,iBAA8B,qBAAqB,EAC9G,IAAK,IAAMC,KAAUD,EACnBlB,EAAO,QAASmB,MAAcP,EAAc,GAAME,CAAa,CAAC,EAGlE,IAAMM,EAA6C,SAAS,iBAA8B,sBAAsB,EAChH,IAAK,IAAMD,KAAUC,EACnBpB,EAAO,QAASmB,MAAcP,EAAc,GAAOE,CAAa,CAAC,EAGnEd,EAAO,QAAS,aAAc,gBAAmC,CAC/D,IAAMqB,EAAS,KAAK,eAAe,cAA8B,KAAK,EAGtE,GAFAnB,EAAcmB,CAAM,EAEhB,OAAO,gBACT,MAAM,UAAU,UAAU,UAAUA,EAAO,WAAW,MACjD,CACL,IAAMC,EAAY,OAAO,aAAa,EACtC,GAAIA,EAAW,CACb,IAAMC,EAAQ,SAAS,YAAY,EACnCA,EAAM,mBAAmBF,CAAM,EAC/BC,EAAU,gBAAgB,EAC1BA,EAAU,SAASC,CAAK,EACxB,SAAS,YAAY,MAAM,CAC7B,CACF,CAEI,KAAK,QAAQ,aACf,KAAK,YAAc,KAAK,QAAQ,WAEpC,CAAC"}
+4 -4
View File
@@ -51,7 +51,7 @@
]
},
"src/js/main/preferences.ts": {
"file": "chunk/e2-9fzwE.min.js",
"file": "chunk/DrJUb27w.min.js",
"name": "preferences",
"src": "src/js/main/preferences.ts",
"isDynamicEntry": true,
@@ -61,7 +61,7 @@
]
},
"src/js/main/results.ts": {
"file": "chunk/CFQtNTi4.min.js",
"file": "chunk/Bu_sbHhO.min.js",
"name": "results",
"src": "src/js/main/results.ts",
"isDynamicEntry": true,
@@ -81,7 +81,7 @@
]
},
"src/js/plugin/Calculator.ts": {
"file": "chunk/CGtCrbI8.min.js",
"file": "chunk/DisAuMqR.min.js",
"name": "calculator",
"src": "src/js/plugin/Calculator.ts",
"isDynamicEntry": true,
@@ -103,7 +103,7 @@
]
},
"src/js/plugin/MapView.ts": {
"file": "chunk/DAKwL16e.min.js",
"file": "chunk/BouIGjk1.min.js",
"name": "mapview",
"src": "src/js/plugin/MapView.ts",
"isDynamicEntry": true,
+2 -2
View File
@@ -1,3 +1,3 @@
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./chunk/DAKwL16e.min.js","./chunk/BuurKv-k.min.js","./sxng-mapview.min.css","./chunk/D3mcqWOe.min.js","./chunk/DK4yUVpy.min.js","./chunk/DcK-mo-Y.min.js","./chunk/CGtCrbI8.min.js","./chunk/CGcztD0S.min.js","./chunk/BMrKiJ3q.min.js","./chunk/Bs-FMxfE.min.js","./chunk/CFQtNTi4.min.js","./chunk/e2-9fzwE.min.js"])))=>i.map(i=>d[i]);
var e={index:`index`,results:`results`,preferences:`preferences`,unknown:`unknown`},t={closeDetail:void 0,scrollPageToSelected:void 0,selectImage:void 0,selectNext:void 0,selectPrevious:void 0},n=()=>{let t=document.querySelector(`meta[name="endpoint"]`)?.getAttribute(`content`);return t&&t in e?t:e.unknown},r=()=>{let e=document.querySelector(`script[client_settings]`)?.getAttribute(`client_settings`);if(!e)return{};try{return JSON.parse(atob(e))}catch(e){return console.error(`Failed to load client_settings:`,e),{}}},i=async(e,t,n)=>{let r=new AbortController,i=setTimeout(()=>r.abort(),n?.timeout??3e4),a=await fetch(t,{body:n?.body,method:e,signal:r.signal}).finally(()=>clearTimeout(i));if(!a.ok)throw Error(a.statusText);return a},a=(e,t,n,r)=>{typeof t==`string`?document.addEventListener(e,e=>{for(let r of e.composedPath())if(r instanceof HTMLElement&&r.matches(t)){try{n.call(r,e)}catch(e){console.error(e)}break}},r):t.addEventListener(e,n,r)},o=(e,t)=>{for(let e of t?.on??[])if(!e)return;document.readyState===`loading`?a(`DOMContentLoaded`,document,e,{once:!0}):e()},s=n(),c=r(),l=(e,t)=>{u(t)&&e()},u=e=>{switch(e.on){case`global`:return!0;case`endpoint`:return!!e.where.includes(s)}},d=`modulepreload`,f=function(e,t){return new URL(e,t).href},p={},m=function(e){return e.pathname.endsWith(`.css`)},h=function(e,t,n){if(t in e)return e[t];let r=n();if(!r){e[t]=void 0;return}let i=r.then(()=>{e[t]=void 0},n=>{throw e[t]=void 0,n});return e[t]=i,i},g=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e,i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?new URL(import.meta.resolve(e)):new URL(e,import.meta.url)}r=o(t.map(t=>{t=f(t,n);let r=s(t),i=m(r);return h(p,r.href,()=>{if(e===void 0){e={all:new Set,styles:new Set};let t=document.getElementsByTagName(`link`);for(let n=t.length-1;n>=0;n--){let r=t[n];e.all.add(r.href),r.rel===`stylesheet`&&e.styles.add(r.href)}}if((i?e.styles:e.all).has(r.href))return;let t=document.createElement(`link`);if(t.rel=i?`stylesheet`:d,i||(t.as=`script`),t.crossOrigin=``,t.href=r.href,a&&t.setAttribute(`nonce`,a),document.head.appendChild(t),i)return new Promise((e,n)=>{t.addEventListener(`load`,e),t.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${r}`)))})})}).filter(e=>e!==void 0))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})};o(()=>{document.documentElement.classList.remove(`no-js`),document.documentElement.classList.add(`js`),a(`click`,`.close`,function(){this.parentNode?.classList.add(`invisible`)}),a(`click`,`.searxng_init_map`,async function(t){t.preventDefault(),this.classList.remove(`searxng_init_map`),l(()=>g(async()=>{let{default:e}=await import(`./chunk/DAKwL16e.min.js`);return{default:e}},__vite__mapDeps([0,1,2]),import.meta.url).then(({default:e})=>new e(this)),{on:`endpoint`,where:[e.results]})}),c.plugins?.includes(`infiniteScroll`)&&l(()=>g(async()=>{let{default:e}=await import(`./chunk/D3mcqWOe.min.js`);return{default:e}},__vite__mapDeps([3,1,4,5]),import.meta.url).then(({default:e})=>new e),{on:`endpoint`,where:[e.results]}),c.plugins?.includes(`calculator`)&&l(()=>g(async()=>{let{default:e}=await import(`./chunk/CGtCrbI8.min.js`);return{default:e}},__vite__mapDeps([6,1,5,4]),import.meta.url).then(({default:e})=>new e),{on:`endpoint`,where:[e.results]})}),o(()=>{g(()=>import(`./chunk/CGcztD0S.min.js`),__vite__mapDeps([7,4]),import.meta.url),g(()=>import(`./chunk/BMrKiJ3q.min.js`),__vite__mapDeps([8,5,4]),import.meta.url),c.autocomplete&&g(()=>import(`./chunk/Bs-FMxfE.min.js`),__vite__mapDeps([9,4]),import.meta.url)},{on:[s===e.index]}),o(()=>{g(()=>import(`./chunk/CGcztD0S.min.js`),__vite__mapDeps([7,4]),import.meta.url),g(()=>import(`./chunk/CFQtNTi4.min.js`),__vite__mapDeps([10,4]),import.meta.url),g(()=>import(`./chunk/BMrKiJ3q.min.js`),__vite__mapDeps([8,5,4]),import.meta.url),c.autocomplete&&g(()=>import(`./chunk/Bs-FMxfE.min.js`),__vite__mapDeps([9,4]),import.meta.url)},{on:[s===e.results]}),o(()=>{g(()=>import(`./chunk/e2-9fzwE.min.js`),__vite__mapDeps([11,4]),import.meta.url)},{on:[s===e.preferences]});export{c as i,a as n,t as r,i as t};
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./chunk/BouIGjk1.min.js","./chunk/BuurKv-k.min.js","./sxng-mapview.min.css","./chunk/D3mcqWOe.min.js","./chunk/DK4yUVpy.min.js","./chunk/DcK-mo-Y.min.js","./chunk/DisAuMqR.min.js","./chunk/CGcztD0S.min.js","./chunk/BMrKiJ3q.min.js","./chunk/Bs-FMxfE.min.js","./chunk/Bu_sbHhO.min.js","./chunk/DrJUb27w.min.js"])))=>i.map(i=>d[i]);
var e={index:`index`,results:`results`,preferences:`preferences`,unknown:`unknown`},t={closeDetail:void 0,scrollPageToSelected:void 0,selectImage:void 0,selectNext:void 0,selectPrevious:void 0},n=()=>{let t=document.querySelector(`meta[name="endpoint"]`)?.getAttribute(`content`);return t&&t in e?t:e.unknown},r=()=>{let e=document.querySelector(`script[client_settings]`)?.getAttribute(`client_settings`);if(!e)return{};try{return JSON.parse(atob(e))}catch(e){return console.error(`Failed to load client_settings:`,e),{}}},i=async(e,t,n)=>{let r=new AbortController,i=setTimeout(()=>r.abort(),n?.timeout??3e4),a=await fetch(t,{body:n?.body,method:e,signal:r.signal}).finally(()=>clearTimeout(i));if(!a.ok)throw Error(a.statusText);return a},a=(e,t,n,r)=>{typeof t==`string`?document.addEventListener(e,e=>{for(let r of e.composedPath())if(r instanceof HTMLElement&&r.matches(t)){try{n.call(r,e)}catch(e){console.error(e)}break}},r):t.addEventListener(e,n,r)},o=(e,t)=>{for(let e of t?.on??[])if(!e)return;document.readyState===`loading`?a(`DOMContentLoaded`,document,e,{once:!0}):e()},s=n(),c=r(),l=(e,t)=>{u(t)&&e()},u=e=>{switch(e.on){case`global`:return!0;case`endpoint`:return!!e.where.includes(s)}},d=`modulepreload`,f=function(e,t){return new URL(e,t).href},p={},m=function(e){return e.pathname.endsWith(`.css`)},h=function(e,t,n){if(t in e)return e[t];let r=n();if(!r){e[t]=void 0;return}let i=r.then(()=>{e[t]=void 0},n=>{throw e[t]=void 0,n});return e[t]=i,i},g=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e,i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?new URL(import.meta.resolve(e)):new URL(e,import.meta.url)}r=o(t.map(t=>{t=f(t,n);let r=s(t),i=m(r);return h(p,r.href,()=>{if(e===void 0){e={all:new Set,styles:new Set};let t=document.getElementsByTagName(`link`);for(let n=t.length-1;n>=0;n--){let r=t[n];e.all.add(r.href),r.rel===`stylesheet`&&e.styles.add(r.href)}}if((i?e.styles:e.all).has(r.href))return;let t=document.createElement(`link`);if(t.rel=i?`stylesheet`:d,i||(t.as=`script`),t.crossOrigin=``,t.href=r.href,a&&t.setAttribute(`nonce`,a),document.head.appendChild(t),i)return new Promise((e,n)=>{t.addEventListener(`load`,e),t.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${r}`)))})})}).filter(e=>e!==void 0))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})};o(()=>{document.documentElement.classList.remove(`no-js`),document.documentElement.classList.add(`js`),a(`click`,`.close`,function(){this.parentNode?.classList.add(`invisible`)}),a(`click`,`.searxng_init_map`,async function(t){t.preventDefault(),this.classList.remove(`searxng_init_map`),l(()=>g(async()=>{let{default:e}=await import(`./chunk/BouIGjk1.min.js`);return{default:e}},__vite__mapDeps([0,1,2]),import.meta.url).then(({default:e})=>new e(this)),{on:`endpoint`,where:[e.results]})}),c.plugins?.includes(`infiniteScroll`)&&l(()=>g(async()=>{let{default:e}=await import(`./chunk/D3mcqWOe.min.js`);return{default:e}},__vite__mapDeps([3,1,4,5]),import.meta.url).then(({default:e})=>new e),{on:`endpoint`,where:[e.results]}),c.plugins?.includes(`calculator`)&&l(()=>g(async()=>{let{default:e}=await import(`./chunk/DisAuMqR.min.js`);return{default:e}},__vite__mapDeps([6,1,5,4]),import.meta.url).then(({default:e})=>new e),{on:`endpoint`,where:[e.results]})}),o(()=>{g(()=>import(`./chunk/CGcztD0S.min.js`),__vite__mapDeps([7,4]),import.meta.url),g(()=>import(`./chunk/BMrKiJ3q.min.js`),__vite__mapDeps([8,5,4]),import.meta.url),c.autocomplete&&g(()=>import(`./chunk/Bs-FMxfE.min.js`),__vite__mapDeps([9,4]),import.meta.url)},{on:[s===e.index]}),o(()=>{g(()=>import(`./chunk/CGcztD0S.min.js`),__vite__mapDeps([7,4]),import.meta.url),g(()=>import(`./chunk/Bu_sbHhO.min.js`),__vite__mapDeps([10,4]),import.meta.url),g(()=>import(`./chunk/BMrKiJ3q.min.js`),__vite__mapDeps([8,5,4]),import.meta.url),c.autocomplete&&g(()=>import(`./chunk/Bs-FMxfE.min.js`),__vite__mapDeps([9,4]),import.meta.url)},{on:[s===e.results]}),o(()=>{g(()=>import(`./chunk/DrJUb27w.min.js`),__vite__mapDeps([11,4]),import.meta.url)},{on:[s===e.preferences]});export{c as i,a as n,t as r,i as t};
//# sourceMappingURL=sxng-core.min.js.map
File diff suppressed because one or more lines are too long
Binary file not shown.
+100 -8
View File
@@ -23,9 +23,9 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2026-10-04 05:47+0000\n"
"PO-Revision-Date: 2026-10-01 19:27+0000\n"
"Last-Translator: Raithlin <raithlin@noreply.codeberg.org>\n"
"POT-Creation-Date: 2026-10-09 19:03+0000\n"
"PO-Revision-Date: 2026-10-09 14:20+0000\n"
"Last-Translator: return42 <return42@noreply.codeberg.org>\n"
"Language: af\n"
"Language-Team: Afrikaans "
"<https://translate.codeberg.org/projects/searxng/searxng/af/>\n"
@@ -53,7 +53,7 @@ msgstr "toeps"
#. CATEGORY_NAMES['BLOGS']
#: searx/searxng.msg
msgid "blogs"
msgstr "blogs"
msgstr "webjoernaal"
#. CATEGORY_NAMES['DICTIONARIES']
#: searx/searxng.msg
@@ -98,7 +98,7 @@ msgstr "kaart"
#. CATEGORY_NAMES['MOVIES']
#: searx/searxng.msg
msgid "movies"
msgstr "rolprente"
msgstr "flieks"
#. CATEGORY_NAMES['MUSIC']
#: searx/searxng.msg
@@ -589,15 +589,107 @@ msgstr "Bron"
msgid "Error loading the next page"
msgstr "Fout met die laai van die volgende bladsy"
#: searx/webapp.py:478 searx/webapp.py:878
#: searx/webapp.py:332
msgid "close"
msgstr ""
#: searx/webapp.py:333
msgid "How to navigate SearXNG with hotkeys"
msgstr ""
#: searx/webapp.py:334
msgid "Control"
msgstr ""
#: searx/webapp.py:335
msgid "Results"
msgstr ""
#: searx/webapp.py:336
msgid "Navigation"
msgstr ""
#: searx/webapp.py:337
msgid "Other"
msgstr ""
#: searx/webapp.py:338
msgid "remove focus from the focused input"
msgstr ""
#: searx/webapp.py:339
msgid "copy url of the selected result to the clipboard"
msgstr ""
#: searx/webapp.py:340
msgid "toggle help window"
msgstr ""
#: searx/webapp.py:341
msgid "focus on the search input"
msgstr ""
#: searx/webapp.py:342
msgid "go to next page"
msgstr ""
#: searx/webapp.py:343
msgid "open search result"
msgstr ""
#: searx/webapp.py:344
msgid "go to previous page"
msgstr ""
#: searx/webapp.py:345
msgid "reload page from the server"
msgstr ""
#: searx/webapp.py:346
msgid "open the result in a new tab"
msgstr ""
#: searx/webapp.py:347
msgid "select previous search result"
msgstr ""
#: searx/webapp.py:348
msgid "select next search result"
msgstr ""
#: searx/webapp.py:349
msgid "scroll one page up"
msgstr ""
#: searx/webapp.py:350
msgid "scroll half a page down"
msgstr ""
#: searx/webapp.py:351
msgid "scroll one page down"
msgstr ""
#: searx/webapp.py:352
msgid "scroll to the top of the page"
msgstr ""
#: searx/webapp.py:353
msgid "scroll half a page up"
msgstr ""
#: searx/webapp.py:354
msgid "scroll to the bottom of the page"
msgstr ""
#: searx/webapp.py:502 searx/webapp.py:902
msgid "Invalid settings, please edit your preferences"
msgstr "Ongeldige opstellings, redigeer asb jou voorkeure"
#: searx/webapp.py:494
#: searx/webapp.py:518
msgid "Invalid settings"
msgstr "Ongeldige opstellings"
#: searx/webapp.py:570 searx/webapp.py:660
#: searx/webapp.py:594 searx/webapp.py:684
msgid "search error"
msgstr "soekfout"
Binary file not shown.
+96 -4
View File
@@ -33,7 +33,7 @@ msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2026-10-04 05:47+0000\n"
"POT-Creation-Date: 2026-10-09 19:03+0000\n"
"PO-Revision-Date: 2026-06-28 18:07+0000\n"
"Last-Translator: nebras <nebras@noreply.codeberg.org>\n"
"Language: ar\n"
@@ -600,15 +600,107 @@ msgstr "مصدر"
msgid "Error loading the next page"
msgstr "خطأ في تحميل الصفحة التالية"
#: searx/webapp.py:478 searx/webapp.py:878
#: searx/webapp.py:332
msgid "close"
msgstr ""
#: searx/webapp.py:333
msgid "How to navigate SearXNG with hotkeys"
msgstr ""
#: searx/webapp.py:334
msgid "Control"
msgstr ""
#: searx/webapp.py:335
msgid "Results"
msgstr ""
#: searx/webapp.py:336
msgid "Navigation"
msgstr ""
#: searx/webapp.py:337
msgid "Other"
msgstr ""
#: searx/webapp.py:338
msgid "remove focus from the focused input"
msgstr ""
#: searx/webapp.py:339
msgid "copy url of the selected result to the clipboard"
msgstr ""
#: searx/webapp.py:340
msgid "toggle help window"
msgstr ""
#: searx/webapp.py:341
msgid "focus on the search input"
msgstr ""
#: searx/webapp.py:342
msgid "go to next page"
msgstr ""
#: searx/webapp.py:343
msgid "open search result"
msgstr ""
#: searx/webapp.py:344
msgid "go to previous page"
msgstr ""
#: searx/webapp.py:345
msgid "reload page from the server"
msgstr ""
#: searx/webapp.py:346
msgid "open the result in a new tab"
msgstr ""
#: searx/webapp.py:347
msgid "select previous search result"
msgstr ""
#: searx/webapp.py:348
msgid "select next search result"
msgstr ""
#: searx/webapp.py:349
msgid "scroll one page up"
msgstr ""
#: searx/webapp.py:350
msgid "scroll half a page down"
msgstr ""
#: searx/webapp.py:351
msgid "scroll one page down"
msgstr ""
#: searx/webapp.py:352
msgid "scroll to the top of the page"
msgstr ""
#: searx/webapp.py:353
msgid "scroll half a page up"
msgstr ""
#: searx/webapp.py:354
msgid "scroll to the bottom of the page"
msgstr ""
#: searx/webapp.py:502 searx/webapp.py:902
msgid "Invalid settings, please edit your preferences"
msgstr "إعدادات غير صالحة، يرجى تعديل تفضيلاتك"
#: searx/webapp.py:494
#: searx/webapp.py:518
msgid "Invalid settings"
msgstr "إعدادات غير صالحة"
#: searx/webapp.py:570 searx/webapp.py:660
#: searx/webapp.py:594 searx/webapp.py:684
msgid "search error"
msgstr "خطأ في البحث"
Binary file not shown.
+96 -4
View File
@@ -23,7 +23,7 @@ msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2026-10-04 05:47+0000\n"
"POT-Creation-Date: 2026-10-09 19:03+0000\n"
"PO-Revision-Date: 2026-08-21 20:54+0000\n"
"Last-Translator: return42 <return42@noreply.codeberg.org>\n"
"Language: bg\n"
@@ -589,15 +589,107 @@ msgstr "Източник"
msgid "Error loading the next page"
msgstr "Грешка при зареждането на следващата страница"
#: searx/webapp.py:478 searx/webapp.py:878
#: searx/webapp.py:332
msgid "close"
msgstr ""
#: searx/webapp.py:333
msgid "How to navigate SearXNG with hotkeys"
msgstr ""
#: searx/webapp.py:334
msgid "Control"
msgstr ""
#: searx/webapp.py:335
msgid "Results"
msgstr ""
#: searx/webapp.py:336
msgid "Navigation"
msgstr ""
#: searx/webapp.py:337
msgid "Other"
msgstr ""
#: searx/webapp.py:338
msgid "remove focus from the focused input"
msgstr ""
#: searx/webapp.py:339
msgid "copy url of the selected result to the clipboard"
msgstr ""
#: searx/webapp.py:340
msgid "toggle help window"
msgstr ""
#: searx/webapp.py:341
msgid "focus on the search input"
msgstr ""
#: searx/webapp.py:342
msgid "go to next page"
msgstr ""
#: searx/webapp.py:343
msgid "open search result"
msgstr ""
#: searx/webapp.py:344
msgid "go to previous page"
msgstr ""
#: searx/webapp.py:345
msgid "reload page from the server"
msgstr ""
#: searx/webapp.py:346
msgid "open the result in a new tab"
msgstr ""
#: searx/webapp.py:347
msgid "select previous search result"
msgstr ""
#: searx/webapp.py:348
msgid "select next search result"
msgstr ""
#: searx/webapp.py:349
msgid "scroll one page up"
msgstr ""
#: searx/webapp.py:350
msgid "scroll half a page down"
msgstr ""
#: searx/webapp.py:351
msgid "scroll one page down"
msgstr ""
#: searx/webapp.py:352
msgid "scroll to the top of the page"
msgstr ""
#: searx/webapp.py:353
msgid "scroll half a page up"
msgstr ""
#: searx/webapp.py:354
msgid "scroll to the bottom of the page"
msgstr ""
#: searx/webapp.py:502 searx/webapp.py:902
msgid "Invalid settings, please edit your preferences"
msgstr "Неправилни настройки, моля редактирайте предпочитанията си"
#: searx/webapp.py:494
#: searx/webapp.py:518
msgid "Invalid settings"
msgstr "Невалидни настройки"
#: searx/webapp.py:570 searx/webapp.py:660
#: searx/webapp.py:594 searx/webapp.py:684
msgid "search error"
msgstr "Грешка при търсенето"
Binary file not shown.
+96 -4
View File
@@ -29,7 +29,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2026-10-04 05:47+0000\n"
"POT-Creation-Date: 2026-10-09 19:03+0000\n"
"PO-Revision-Date: 2026-05-19 12:07+0000\n"
"Last-Translator: return42 <return42@noreply.codeberg.org>\n"
"Language: bn\n"
@@ -595,15 +595,107 @@ msgstr "উৎস"
msgid "Error loading the next page"
msgstr "পরবর্তী পৃষ্ঠাটি লোড করায় ত্রুটি দেখা যাচ্ছে"
#: searx/webapp.py:478 searx/webapp.py:878
#: searx/webapp.py:332
msgid "close"
msgstr ""
#: searx/webapp.py:333
msgid "How to navigate SearXNG with hotkeys"
msgstr ""
#: searx/webapp.py:334
msgid "Control"
msgstr ""
#: searx/webapp.py:335
msgid "Results"
msgstr ""
#: searx/webapp.py:336
msgid "Navigation"
msgstr ""
#: searx/webapp.py:337
msgid "Other"
msgstr ""
#: searx/webapp.py:338
msgid "remove focus from the focused input"
msgstr ""
#: searx/webapp.py:339
msgid "copy url of the selected result to the clipboard"
msgstr ""
#: searx/webapp.py:340
msgid "toggle help window"
msgstr ""
#: searx/webapp.py:341
msgid "focus on the search input"
msgstr ""
#: searx/webapp.py:342
msgid "go to next page"
msgstr ""
#: searx/webapp.py:343
msgid "open search result"
msgstr ""
#: searx/webapp.py:344
msgid "go to previous page"
msgstr ""
#: searx/webapp.py:345
msgid "reload page from the server"
msgstr ""
#: searx/webapp.py:346
msgid "open the result in a new tab"
msgstr ""
#: searx/webapp.py:347
msgid "select previous search result"
msgstr ""
#: searx/webapp.py:348
msgid "select next search result"
msgstr ""
#: searx/webapp.py:349
msgid "scroll one page up"
msgstr ""
#: searx/webapp.py:350
msgid "scroll half a page down"
msgstr ""
#: searx/webapp.py:351
msgid "scroll one page down"
msgstr ""
#: searx/webapp.py:352
msgid "scroll to the top of the page"
msgstr ""
#: searx/webapp.py:353
msgid "scroll half a page up"
msgstr ""
#: searx/webapp.py:354
msgid "scroll to the bottom of the page"
msgstr ""
#: searx/webapp.py:502 searx/webapp.py:902
msgid "Invalid settings, please edit your preferences"
msgstr "অকেজো সেটিংস, অনুগ্রহ করে আপনার পছন্দগুলি সম্পাদনা করুন"
#: searx/webapp.py:494
#: searx/webapp.py:518
msgid "Invalid settings"
msgstr "অকেজো সেটিংস"
#: searx/webapp.py:570 searx/webapp.py:660
#: searx/webapp.py:594 searx/webapp.py:684
msgid "search error"
msgstr "সার্চ ত্রুটি"
Binary file not shown.
+96 -4
View File
@@ -13,7 +13,7 @@ msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2026-10-04 05:47+0000\n"
"POT-Creation-Date: 2026-10-09 19:03+0000\n"
"PO-Revision-Date: 2026-05-19 12:07+0000\n"
"Last-Translator: return42 <return42@noreply.codeberg.org>\n"
"Language: bo\n"
@@ -579,15 +579,107 @@ msgstr ""
msgid "Error loading the next page"
msgstr ""
#: searx/webapp.py:478 searx/webapp.py:878
#: searx/webapp.py:332
msgid "close"
msgstr ""
#: searx/webapp.py:333
msgid "How to navigate SearXNG with hotkeys"
msgstr ""
#: searx/webapp.py:334
msgid "Control"
msgstr ""
#: searx/webapp.py:335
msgid "Results"
msgstr ""
#: searx/webapp.py:336
msgid "Navigation"
msgstr ""
#: searx/webapp.py:337
msgid "Other"
msgstr ""
#: searx/webapp.py:338
msgid "remove focus from the focused input"
msgstr ""
#: searx/webapp.py:339
msgid "copy url of the selected result to the clipboard"
msgstr ""
#: searx/webapp.py:340
msgid "toggle help window"
msgstr ""
#: searx/webapp.py:341
msgid "focus on the search input"
msgstr ""
#: searx/webapp.py:342
msgid "go to next page"
msgstr ""
#: searx/webapp.py:343
msgid "open search result"
msgstr ""
#: searx/webapp.py:344
msgid "go to previous page"
msgstr ""
#: searx/webapp.py:345
msgid "reload page from the server"
msgstr ""
#: searx/webapp.py:346
msgid "open the result in a new tab"
msgstr ""
#: searx/webapp.py:347
msgid "select previous search result"
msgstr ""
#: searx/webapp.py:348
msgid "select next search result"
msgstr ""
#: searx/webapp.py:349
msgid "scroll one page up"
msgstr ""
#: searx/webapp.py:350
msgid "scroll half a page down"
msgstr ""
#: searx/webapp.py:351
msgid "scroll one page down"
msgstr ""
#: searx/webapp.py:352
msgid "scroll to the top of the page"
msgstr ""
#: searx/webapp.py:353
msgid "scroll half a page up"
msgstr ""
#: searx/webapp.py:354
msgid "scroll to the bottom of the page"
msgstr ""
#: searx/webapp.py:502 searx/webapp.py:902
msgid "Invalid settings, please edit your preferences"
msgstr "ནུས་མེད་ཀྱི་སྒྲིག་འགོད།ཁྱེད་ཀྱིས་གདམ་ཀ་ལ་བཅོས་སྒྲིག་གཏོང་རོགས།"
#: searx/webapp.py:494
#: searx/webapp.py:518
msgid "Invalid settings"
msgstr "ནུས་མེད་ཀྱི་སྒྲིག་འགོད།"
#: searx/webapp.py:570 searx/webapp.py:660
#: searx/webapp.py:594 searx/webapp.py:684
msgid "search error"
msgstr "འཚོལ་བཤེར་ལ་ནོར་འཁྲུལ་བྱུང་།"
Binary file not shown.
+96 -4
View File
@@ -31,7 +31,7 @@ msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2026-10-04 05:47+0000\n"
"POT-Creation-Date: 2026-10-09 19:03+0000\n"
"PO-Revision-Date: 2026-09-19 15:25+0000\n"
"Last-Translator: return42 <return42@noreply.codeberg.org>\n"
"Language: ca\n"
@@ -597,15 +597,107 @@ msgstr "Origen"
msgid "Error loading the next page"
msgstr "S'ha produït un error en carregar la següent pàgina"
#: searx/webapp.py:478 searx/webapp.py:878
#: searx/webapp.py:332
msgid "close"
msgstr ""
#: searx/webapp.py:333
msgid "How to navigate SearXNG with hotkeys"
msgstr ""
#: searx/webapp.py:334
msgid "Control"
msgstr ""
#: searx/webapp.py:335
msgid "Results"
msgstr ""
#: searx/webapp.py:336
msgid "Navigation"
msgstr ""
#: searx/webapp.py:337
msgid "Other"
msgstr ""
#: searx/webapp.py:338
msgid "remove focus from the focused input"
msgstr ""
#: searx/webapp.py:339
msgid "copy url of the selected result to the clipboard"
msgstr ""
#: searx/webapp.py:340
msgid "toggle help window"
msgstr ""
#: searx/webapp.py:341
msgid "focus on the search input"
msgstr ""
#: searx/webapp.py:342
msgid "go to next page"
msgstr ""
#: searx/webapp.py:343
msgid "open search result"
msgstr ""
#: searx/webapp.py:344
msgid "go to previous page"
msgstr ""
#: searx/webapp.py:345
msgid "reload page from the server"
msgstr ""
#: searx/webapp.py:346
msgid "open the result in a new tab"
msgstr ""
#: searx/webapp.py:347
msgid "select previous search result"
msgstr ""
#: searx/webapp.py:348
msgid "select next search result"
msgstr ""
#: searx/webapp.py:349
msgid "scroll one page up"
msgstr ""
#: searx/webapp.py:350
msgid "scroll half a page down"
msgstr ""
#: searx/webapp.py:351
msgid "scroll one page down"
msgstr ""
#: searx/webapp.py:352
msgid "scroll to the top of the page"
msgstr ""
#: searx/webapp.py:353
msgid "scroll half a page up"
msgstr ""
#: searx/webapp.py:354
msgid "scroll to the bottom of the page"
msgstr ""
#: searx/webapp.py:502 searx/webapp.py:902
msgid "Invalid settings, please edit your preferences"
msgstr "La configuració no és vàlida, editeu-la"
#: searx/webapp.py:494
#: searx/webapp.py:518
msgid "Invalid settings"
msgstr "La configuració no és vàlida"
#: searx/webapp.py:570 searx/webapp.py:660
#: searx/webapp.py:594 searx/webapp.py:684
msgid "search error"
msgstr "error de cerca"
Binary file not shown.
+104 -12
View File
@@ -25,20 +25,21 @@
# radekjuthner <radekjuthner@noreply.codeberg.org>, 2025.
msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2026-10-04 05:47+0000\n"
"PO-Revision-Date: 2026-09-22 13:25+0000\n"
"POT-Creation-Date: 2026-10-09 19:03+0000\n"
"PO-Revision-Date: 2026-10-10 22:27+0000\n"
"Last-Translator: Fjuro <fjuro@noreply.codeberg.org>\n"
"Language: cs\n"
"Language-Team: Czech "
"<https://translate.codeberg.org/projects/searxng/searxng/cs/>\n"
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && "
"n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
"Language-Team: Czech <https://translate.codeberg.org/projects/searxng/"
"searxng/cs/>\n"
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n "
"<= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.18.0\n"
"X-Generator: Weblate 2026.10.1\n"
#. CONSTANT_NAMES['NO_SUBGROUPING']
#: searx/searxng.msg
@@ -594,15 +595,107 @@ msgstr "zdroj"
msgid "Error loading the next page"
msgstr "Chyba při načítání další stránky"
#: searx/webapp.py:478 searx/webapp.py:878
#: searx/webapp.py:332
msgid "close"
msgstr "zavřít"
#: searx/webapp.py:333
msgid "How to navigate SearXNG with hotkeys"
msgstr "Jak se pohybovat v SearXNG pomocí klávesových zkratek"
#: searx/webapp.py:334
msgid "Control"
msgstr "Ovládání"
#: searx/webapp.py:335
msgid "Results"
msgstr "Výsledky"
#: searx/webapp.py:336
msgid "Navigation"
msgstr "Navigace"
#: searx/webapp.py:337
msgid "Other"
msgstr "Ostatní"
#: searx/webapp.py:338
msgid "remove focus from the focused input"
msgstr "odebrat zaměření ze zaměřeného vstupu"
#: searx/webapp.py:339
msgid "copy url of the selected result to the clipboard"
msgstr "zkopírovat adresu zvoleného výsledku do schránky"
#: searx/webapp.py:340
msgid "toggle help window"
msgstr "přepnout okno nápovědy"
#: searx/webapp.py:341
msgid "focus on the search input"
msgstr "zaměřit na vyhledávací pole"
#: searx/webapp.py:342
msgid "go to next page"
msgstr "přejít na další stránku"
#: searx/webapp.py:343
msgid "open search result"
msgstr "otevřít výsledek vyhledávání"
#: searx/webapp.py:344
msgid "go to previous page"
msgstr "přejít na předchozí stránku"
#: searx/webapp.py:345
msgid "reload page from the server"
msgstr "znovu načíst stránku ze serveru"
#: searx/webapp.py:346
msgid "open the result in a new tab"
msgstr "otevřít výsledek v novém panelu"
#: searx/webapp.py:347
msgid "select previous search result"
msgstr "zvolit předchozí výsledek vyhledávání"
#: searx/webapp.py:348
msgid "select next search result"
msgstr "zvolit další výsledek vyhledávání"
#: searx/webapp.py:349
msgid "scroll one page up"
msgstr "posunout o stránku nahoru"
#: searx/webapp.py:350
msgid "scroll half a page down"
msgstr "posunout o půl stránky dolů"
#: searx/webapp.py:351
msgid "scroll one page down"
msgstr "posunout o stránku dolů"
#: searx/webapp.py:352
msgid "scroll to the top of the page"
msgstr "posunout na vršek stránky"
#: searx/webapp.py:353
msgid "scroll half a page up"
msgstr "posunout o půl stránky nahoru"
#: searx/webapp.py:354
msgid "scroll to the bottom of the page"
msgstr "posunout na spodek stránky"
#: searx/webapp.py:502 searx/webapp.py:902
msgid "Invalid settings, please edit your preferences"
msgstr "Neplatné nastavení, upravte své předvolby"
#: searx/webapp.py:494
#: searx/webapp.py:518
msgid "Invalid settings"
msgstr "Neplatné nastavení"
#: searx/webapp.py:570 searx/webapp.py:660
#: searx/webapp.py:594 searx/webapp.py:684
msgid "search error"
msgstr "chyba vyhledávání"
@@ -1438,7 +1531,7 @@ msgstr "Hash předvoleb"
#: searx/templates/simple/preferences/doi_resolver.html:2
msgid "DOI Resolver"
msgstr ""
msgstr "Resolver DOI"
#: searx/templates/simple/preferences/engines.html:9
msgid ""
@@ -2441,4 +2534,3 @@ msgstr "skrýt video"
#~ msgid "Select service used by DOI rewrite"
#~ msgstr "Výběr služby použité při přepisu DOI"
Binary file not shown.
+96 -4
View File
@@ -20,7 +20,7 @@ msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2026-10-04 05:47+0000\n"
"POT-Creation-Date: 2026-10-09 19:03+0000\n"
"PO-Revision-Date: 2026-05-19 12:07+0000\n"
"Last-Translator: return42 <return42@noreply.codeberg.org>\n"
"Language: cy\n"
@@ -587,15 +587,107 @@ msgstr "Ffynhonnell"
msgid "Error loading the next page"
msgstr "Gwall wrth lwytho'r dudalen nesaf"
#: searx/webapp.py:478 searx/webapp.py:878
#: searx/webapp.py:332
msgid "close"
msgstr ""
#: searx/webapp.py:333
msgid "How to navigate SearXNG with hotkeys"
msgstr ""
#: searx/webapp.py:334
msgid "Control"
msgstr ""
#: searx/webapp.py:335
msgid "Results"
msgstr ""
#: searx/webapp.py:336
msgid "Navigation"
msgstr ""
#: searx/webapp.py:337
msgid "Other"
msgstr ""
#: searx/webapp.py:338
msgid "remove focus from the focused input"
msgstr ""
#: searx/webapp.py:339
msgid "copy url of the selected result to the clipboard"
msgstr ""
#: searx/webapp.py:340
msgid "toggle help window"
msgstr ""
#: searx/webapp.py:341
msgid "focus on the search input"
msgstr ""
#: searx/webapp.py:342
msgid "go to next page"
msgstr ""
#: searx/webapp.py:343
msgid "open search result"
msgstr ""
#: searx/webapp.py:344
msgid "go to previous page"
msgstr ""
#: searx/webapp.py:345
msgid "reload page from the server"
msgstr ""
#: searx/webapp.py:346
msgid "open the result in a new tab"
msgstr ""
#: searx/webapp.py:347
msgid "select previous search result"
msgstr ""
#: searx/webapp.py:348
msgid "select next search result"
msgstr ""
#: searx/webapp.py:349
msgid "scroll one page up"
msgstr ""
#: searx/webapp.py:350
msgid "scroll half a page down"
msgstr ""
#: searx/webapp.py:351
msgid "scroll one page down"
msgstr ""
#: searx/webapp.py:352
msgid "scroll to the top of the page"
msgstr ""
#: searx/webapp.py:353
msgid "scroll half a page up"
msgstr ""
#: searx/webapp.py:354
msgid "scroll to the bottom of the page"
msgstr ""
#: searx/webapp.py:502 searx/webapp.py:902
msgid "Invalid settings, please edit your preferences"
msgstr "Gosodiadau annilys, golygwch eich dewisiadau"
#: searx/webapp.py:494
#: searx/webapp.py:518
msgid "Invalid settings"
msgstr "Gosodiadau annilys"
#: searx/webapp.py:570 searx/webapp.py:660
#: searx/webapp.py:594 searx/webapp.py:684
msgid "search error"
msgstr "gwall chwilio"
Binary file not shown.
+96 -4
View File
@@ -19,7 +19,7 @@ msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2026-10-04 05:47+0000\n"
"POT-Creation-Date: 2026-10-09 19:03+0000\n"
"PO-Revision-Date: 2026-06-16 07:07+0000\n"
"Last-Translator: AndersNordh <andersnordh@noreply.codeberg.org>\n"
"Language: da\n"
@@ -585,15 +585,107 @@ msgstr "Kilde"
msgid "Error loading the next page"
msgstr "Fejl ved indlæsning af den næste side"
#: searx/webapp.py:478 searx/webapp.py:878
#: searx/webapp.py:332
msgid "close"
msgstr ""
#: searx/webapp.py:333
msgid "How to navigate SearXNG with hotkeys"
msgstr ""
#: searx/webapp.py:334
msgid "Control"
msgstr ""
#: searx/webapp.py:335
msgid "Results"
msgstr ""
#: searx/webapp.py:336
msgid "Navigation"
msgstr ""
#: searx/webapp.py:337
msgid "Other"
msgstr ""
#: searx/webapp.py:338
msgid "remove focus from the focused input"
msgstr ""
#: searx/webapp.py:339
msgid "copy url of the selected result to the clipboard"
msgstr ""
#: searx/webapp.py:340
msgid "toggle help window"
msgstr ""
#: searx/webapp.py:341
msgid "focus on the search input"
msgstr ""
#: searx/webapp.py:342
msgid "go to next page"
msgstr ""
#: searx/webapp.py:343
msgid "open search result"
msgstr ""
#: searx/webapp.py:344
msgid "go to previous page"
msgstr ""
#: searx/webapp.py:345
msgid "reload page from the server"
msgstr ""
#: searx/webapp.py:346
msgid "open the result in a new tab"
msgstr ""
#: searx/webapp.py:347
msgid "select previous search result"
msgstr ""
#: searx/webapp.py:348
msgid "select next search result"
msgstr ""
#: searx/webapp.py:349
msgid "scroll one page up"
msgstr ""
#: searx/webapp.py:350
msgid "scroll half a page down"
msgstr ""
#: searx/webapp.py:351
msgid "scroll one page down"
msgstr ""
#: searx/webapp.py:352
msgid "scroll to the top of the page"
msgstr ""
#: searx/webapp.py:353
msgid "scroll half a page up"
msgstr ""
#: searx/webapp.py:354
msgid "scroll to the bottom of the page"
msgstr ""
#: searx/webapp.py:502 searx/webapp.py:902
msgid "Invalid settings, please edit your preferences"
msgstr "Ugyldige indstillinger, redigér venligst dine valg"
#: searx/webapp.py:494
#: searx/webapp.py:518
msgid "Invalid settings"
msgstr "Ugyldig indstilling"
#: searx/webapp.py:570 searx/webapp.py:660
#: searx/webapp.py:594 searx/webapp.py:684
msgid "search error"
msgstr "søgefejl"
Binary file not shown.
+103 -11
View File
@@ -32,19 +32,20 @@
# Serpensin <serpensin@noreply.codeberg.org>, 2026.
msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2026-10-04 05:47+0000\n"
"PO-Revision-Date: 2026-09-22 13:25+0000\n"
"POT-Creation-Date: 2026-10-09 19:03+0000\n"
"PO-Revision-Date: 2026-10-10 22:27+0000\n"
"Last-Translator: return42 <return42@noreply.codeberg.org>\n"
"Language: de\n"
"Language-Team: German "
"<https://translate.codeberg.org/projects/searxng/searxng/de/>\n"
"Language-Team: German <https://translate.codeberg.org/projects/searxng/"
"searxng/de/>\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.18.0\n"
"X-Generator: Weblate 2026.10.1\n"
#. CONSTANT_NAMES['NO_SUBGROUPING']
#: searx/searxng.msg
@@ -600,15 +601,107 @@ msgstr "Quelle"
msgid "Error loading the next page"
msgstr "Fehler beim Laden der nächsten Seite"
#: searx/webapp.py:478 searx/webapp.py:878
#: searx/webapp.py:332
msgid "close"
msgstr "schließen"
#: searx/webapp.py:333
msgid "How to navigate SearXNG with hotkeys"
msgstr "SearXNG über Tasten steuern"
#: searx/webapp.py:334
msgid "Control"
msgstr "Steuerung"
#: searx/webapp.py:335
msgid "Results"
msgstr "Ergebnisse"
#: searx/webapp.py:336
msgid "Navigation"
msgstr "Navigation"
#: searx/webapp.py:337
msgid "Other"
msgstr "Weitere"
#: searx/webapp.py:338
msgid "remove focus from the focused input"
msgstr "Fokus vom Eingabefeld nehmen"
#: searx/webapp.py:339
msgid "copy url of the selected result to the clipboard"
msgstr "URL des Ergebnisses in die Zwischenablage kopieren"
#: searx/webapp.py:340
msgid "toggle help window"
msgstr "Hilfe anzeigen"
#: searx/webapp.py:341
msgid "focus on the search input"
msgstr "Fokus auf das Eingabefeld"
#: searx/webapp.py:342
msgid "go to next page"
msgstr "Zur nächsten Seite gehen"
#: searx/webapp.py:343
msgid "open search result"
msgstr "Öffnen der Suchergebnisse"
#: searx/webapp.py:344
msgid "go to previous page"
msgstr "Zurück zu vorherigen Seite"
#: searx/webapp.py:345
msgid "reload page from the server"
msgstr "Seite neu laden"
#: searx/webapp.py:346
msgid "open the result in a new tab"
msgstr "Verweis in neuem Tab öffnen"
#: searx/webapp.py:347
msgid "select previous search result"
msgstr "Auswahl des vorherigen Ergebnisses"
#: searx/webapp.py:348
msgid "select next search result"
msgstr "Auswahl des nächsten Ergebnisses"
#: searx/webapp.py:349
msgid "scroll one page up"
msgstr "Eine Seite aufwärts scrollen"
#: searx/webapp.py:350
msgid "scroll half a page down"
msgstr "Eine halbe Seite abwärts scrollen"
#: searx/webapp.py:351
msgid "scroll one page down"
msgstr "Eine Seite abwärts scrollen"
#: searx/webapp.py:352
msgid "scroll to the top of the page"
msgstr "Zum Anfang der Seite springen"
#: searx/webapp.py:353
msgid "scroll half a page up"
msgstr "Eine halbe Seite aufwärts scrollen"
#: searx/webapp.py:354
msgid "scroll to the bottom of the page"
msgstr "Ans Ende der Seite springen"
#: searx/webapp.py:502 searx/webapp.py:902
msgid "Invalid settings, please edit your preferences"
msgstr "Ungültige Einstellungen, bitte Einstellungen ändern"
#: searx/webapp.py:494
#: searx/webapp.py:518
msgid "Invalid settings"
msgstr "Ungültige Einstellungen"
#: searx/webapp.py:570 searx/webapp.py:660
#: searx/webapp.py:594 searx/webapp.py:684
msgid "search error"
msgstr "Suchfehler"
@@ -1123,7 +1216,7 @@ msgstr "Suchmaschinenname"
#: searx/templates/simple/stats.html:25
msgid "Scores"
msgstr "Ergebnisse"
msgstr "Bewertung"
#: searx/templates/simple/stats.html:26
msgid "Result count"
@@ -1454,7 +1547,7 @@ msgstr "Einstellungen (ohne URL)"
#: searx/templates/simple/preferences/doi_resolver.html:2
msgid "DOI Resolver"
msgstr ""
msgstr "DOI Auflösung"
#: searx/templates/simple/preferences/engines.html:9
msgid ""
@@ -2497,4 +2590,3 @@ msgstr "Video verstecken"
#~ msgid "Select service used by DOI rewrite"
#~ msgstr "Wähle den Dienst für DOI Rewrite"
Binary file not shown.
+96 -4
View File
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2026-10-04 05:47+0000\n"
"POT-Creation-Date: 2026-10-09 19:03+0000\n"
"PO-Revision-Date: 2025-08-13 08:09+0000\n"
"Last-Translator: ijxp <ijxp@noreply.codeberg.org>\n"
"Language: dv\n"
@@ -576,15 +576,107 @@ msgstr ""
msgid "Error loading the next page"
msgstr ""
#: searx/webapp.py:478 searx/webapp.py:878
#: searx/webapp.py:332
msgid "close"
msgstr ""
#: searx/webapp.py:333
msgid "How to navigate SearXNG with hotkeys"
msgstr ""
#: searx/webapp.py:334
msgid "Control"
msgstr ""
#: searx/webapp.py:335
msgid "Results"
msgstr ""
#: searx/webapp.py:336
msgid "Navigation"
msgstr ""
#: searx/webapp.py:337
msgid "Other"
msgstr ""
#: searx/webapp.py:338
msgid "remove focus from the focused input"
msgstr ""
#: searx/webapp.py:339
msgid "copy url of the selected result to the clipboard"
msgstr ""
#: searx/webapp.py:340
msgid "toggle help window"
msgstr ""
#: searx/webapp.py:341
msgid "focus on the search input"
msgstr ""
#: searx/webapp.py:342
msgid "go to next page"
msgstr ""
#: searx/webapp.py:343
msgid "open search result"
msgstr ""
#: searx/webapp.py:344
msgid "go to previous page"
msgstr ""
#: searx/webapp.py:345
msgid "reload page from the server"
msgstr ""
#: searx/webapp.py:346
msgid "open the result in a new tab"
msgstr ""
#: searx/webapp.py:347
msgid "select previous search result"
msgstr ""
#: searx/webapp.py:348
msgid "select next search result"
msgstr ""
#: searx/webapp.py:349
msgid "scroll one page up"
msgstr ""
#: searx/webapp.py:350
msgid "scroll half a page down"
msgstr ""
#: searx/webapp.py:351
msgid "scroll one page down"
msgstr ""
#: searx/webapp.py:352
msgid "scroll to the top of the page"
msgstr ""
#: searx/webapp.py:353
msgid "scroll half a page up"
msgstr ""
#: searx/webapp.py:354
msgid "scroll to the bottom of the page"
msgstr ""
#: searx/webapp.py:502 searx/webapp.py:902
msgid "Invalid settings, please edit your preferences"
msgstr ""
#: searx/webapp.py:494
#: searx/webapp.py:518
msgid "Invalid settings"
msgstr ""
#: searx/webapp.py:570 searx/webapp.py:660
#: searx/webapp.py:594 searx/webapp.py:684
msgid "search error"
msgstr ""
Binary file not shown.
@@ -25,7 +25,7 @@ msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2026-10-04 05:47+0000\n"
"POT-Creation-Date: 2026-10-09 19:03+0000\n"
"PO-Revision-Date: 2026-06-17 20:19+0000\n"
"Last-Translator: return42 <return42@noreply.codeberg.org>\n"
"Language: el_GR\n"
@@ -591,15 +591,107 @@ msgstr "Πηγή"
msgid "Error loading the next page"
msgstr "Σφάλμα φόρτωσης της επόμενης σελίδας"
#: searx/webapp.py:478 searx/webapp.py:878
#: searx/webapp.py:332
msgid "close"
msgstr ""
#: searx/webapp.py:333
msgid "How to navigate SearXNG with hotkeys"
msgstr ""
#: searx/webapp.py:334
msgid "Control"
msgstr ""
#: searx/webapp.py:335
msgid "Results"
msgstr ""
#: searx/webapp.py:336
msgid "Navigation"
msgstr ""
#: searx/webapp.py:337
msgid "Other"
msgstr ""
#: searx/webapp.py:338
msgid "remove focus from the focused input"
msgstr ""
#: searx/webapp.py:339
msgid "copy url of the selected result to the clipboard"
msgstr ""
#: searx/webapp.py:340
msgid "toggle help window"
msgstr ""
#: searx/webapp.py:341
msgid "focus on the search input"
msgstr ""
#: searx/webapp.py:342
msgid "go to next page"
msgstr ""
#: searx/webapp.py:343
msgid "open search result"
msgstr ""
#: searx/webapp.py:344
msgid "go to previous page"
msgstr ""
#: searx/webapp.py:345
msgid "reload page from the server"
msgstr ""
#: searx/webapp.py:346
msgid "open the result in a new tab"
msgstr ""
#: searx/webapp.py:347
msgid "select previous search result"
msgstr ""
#: searx/webapp.py:348
msgid "select next search result"
msgstr ""
#: searx/webapp.py:349
msgid "scroll one page up"
msgstr ""
#: searx/webapp.py:350
msgid "scroll half a page down"
msgstr ""
#: searx/webapp.py:351
msgid "scroll one page down"
msgstr ""
#: searx/webapp.py:352
msgid "scroll to the top of the page"
msgstr ""
#: searx/webapp.py:353
msgid "scroll half a page up"
msgstr ""
#: searx/webapp.py:354
msgid "scroll to the bottom of the page"
msgstr ""
#: searx/webapp.py:502 searx/webapp.py:902
msgid "Invalid settings, please edit your preferences"
msgstr "Μη έγκυρες ρυθμίσεις, παρακαλούμε ελέγξτε τις προτιμήσεις σας"
#: searx/webapp.py:494
#: searx/webapp.py:518
msgid "Invalid settings"
msgstr "Μη έγκυρες ρυθμίσεις"
#: searx/webapp.py:570 searx/webapp.py:660
#: searx/webapp.py:594 searx/webapp.py:684
msgid "search error"
msgstr "σφάλμα αναζήτησης"
Binary file not shown.
+96 -4
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2026-10-04 05:47+0000\n"
"POT-Creation-Date: 2026-10-09 19:03+0000\n"
"PO-Revision-Date: 2014-01-30 15:22+0100\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: en\n"
@@ -572,15 +572,107 @@ msgstr ""
msgid "Error loading the next page"
msgstr ""
#: searx/webapp.py:478 searx/webapp.py:878
#: searx/webapp.py:332
msgid "close"
msgstr ""
#: searx/webapp.py:333
msgid "How to navigate SearXNG with hotkeys"
msgstr ""
#: searx/webapp.py:334
msgid "Control"
msgstr ""
#: searx/webapp.py:335
msgid "Results"
msgstr ""
#: searx/webapp.py:336
msgid "Navigation"
msgstr ""
#: searx/webapp.py:337
msgid "Other"
msgstr ""
#: searx/webapp.py:338
msgid "remove focus from the focused input"
msgstr ""
#: searx/webapp.py:339
msgid "copy url of the selected result to the clipboard"
msgstr ""
#: searx/webapp.py:340
msgid "toggle help window"
msgstr ""
#: searx/webapp.py:341
msgid "focus on the search input"
msgstr ""
#: searx/webapp.py:342
msgid "go to next page"
msgstr ""
#: searx/webapp.py:343
msgid "open search result"
msgstr ""
#: searx/webapp.py:344
msgid "go to previous page"
msgstr ""
#: searx/webapp.py:345
msgid "reload page from the server"
msgstr ""
#: searx/webapp.py:346
msgid "open the result in a new tab"
msgstr ""
#: searx/webapp.py:347
msgid "select previous search result"
msgstr ""
#: searx/webapp.py:348
msgid "select next search result"
msgstr ""
#: searx/webapp.py:349
msgid "scroll one page up"
msgstr ""
#: searx/webapp.py:350
msgid "scroll half a page down"
msgstr ""
#: searx/webapp.py:351
msgid "scroll one page down"
msgstr ""
#: searx/webapp.py:352
msgid "scroll to the top of the page"
msgstr ""
#: searx/webapp.py:353
msgid "scroll half a page up"
msgstr ""
#: searx/webapp.py:354
msgid "scroll to the bottom of the page"
msgstr ""
#: searx/webapp.py:502 searx/webapp.py:902
msgid "Invalid settings, please edit your preferences"
msgstr ""
#: searx/webapp.py:494
#: searx/webapp.py:518
msgid "Invalid settings"
msgstr ""
#: searx/webapp.py:570 searx/webapp.py:660
#: searx/webapp.py:594 searx/webapp.py:684
msgid "search error"
msgstr ""
Binary file not shown.
+96 -4
View File
@@ -23,7 +23,7 @@ msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2026-10-04 05:47+0000\n"
"POT-Creation-Date: 2026-10-09 19:03+0000\n"
"PO-Revision-Date: 2026-05-19 12:07+0000\n"
"Last-Translator: return42 <return42@noreply.codeberg.org>\n"
"Language: eo\n"
@@ -589,15 +589,107 @@ msgstr "Fonto"
msgid "Error loading the next page"
msgstr "Eraro dum la ŝarĝado de la sekvan paĝon"
#: searx/webapp.py:478 searx/webapp.py:878
#: searx/webapp.py:332
msgid "close"
msgstr ""
#: searx/webapp.py:333
msgid "How to navigate SearXNG with hotkeys"
msgstr ""
#: searx/webapp.py:334
msgid "Control"
msgstr ""
#: searx/webapp.py:335
msgid "Results"
msgstr ""
#: searx/webapp.py:336
msgid "Navigation"
msgstr ""
#: searx/webapp.py:337
msgid "Other"
msgstr ""
#: searx/webapp.py:338
msgid "remove focus from the focused input"
msgstr ""
#: searx/webapp.py:339
msgid "copy url of the selected result to the clipboard"
msgstr ""
#: searx/webapp.py:340
msgid "toggle help window"
msgstr ""
#: searx/webapp.py:341
msgid "focus on the search input"
msgstr ""
#: searx/webapp.py:342
msgid "go to next page"
msgstr ""
#: searx/webapp.py:343
msgid "open search result"
msgstr ""
#: searx/webapp.py:344
msgid "go to previous page"
msgstr ""
#: searx/webapp.py:345
msgid "reload page from the server"
msgstr ""
#: searx/webapp.py:346
msgid "open the result in a new tab"
msgstr ""
#: searx/webapp.py:347
msgid "select previous search result"
msgstr ""
#: searx/webapp.py:348
msgid "select next search result"
msgstr ""
#: searx/webapp.py:349
msgid "scroll one page up"
msgstr ""
#: searx/webapp.py:350
msgid "scroll half a page down"
msgstr ""
#: searx/webapp.py:351
msgid "scroll one page down"
msgstr ""
#: searx/webapp.py:352
msgid "scroll to the top of the page"
msgstr ""
#: searx/webapp.py:353
msgid "scroll half a page up"
msgstr ""
#: searx/webapp.py:354
msgid "scroll to the bottom of the page"
msgstr ""
#: searx/webapp.py:502 searx/webapp.py:902
msgid "Invalid settings, please edit your preferences"
msgstr "Nevalidaj agordoj, bonvolu redaktu viajn agordojn"
#: searx/webapp.py:494
#: searx/webapp.py:518
msgid "Invalid settings"
msgstr "Nevalidaj agordoj"
#: searx/webapp.py:570 searx/webapp.py:660
#: searx/webapp.py:594 searx/webapp.py:684
msgid "search error"
msgstr "serĉa eraro"
Binary file not shown.
+98 -6
View File
@@ -52,8 +52,8 @@ msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2026-10-04 05:47+0000\n"
"PO-Revision-Date: 2026-10-05 10:27+0000\n"
"POT-Creation-Date: 2026-10-09 19:03+0000\n"
"PO-Revision-Date: 2026-10-10 22:27+0000\n"
"Last-Translator: gallegonovato <gallegonovato@noreply.codeberg.org>\n"
"Language: es\n"
"Language-Team: Spanish <https://translate.codeberg.org/projects/searxng/"
@@ -63,7 +63,7 @@ msgstr ""
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.18.0\n"
"X-Generator: Weblate 2026.9.1\n"
"X-Generator: Weblate 2026.10.1\n"
#. CONSTANT_NAMES['NO_SUBGROUPING']
#: searx/searxng.msg
@@ -619,15 +619,107 @@ msgstr "Fuente"
msgid "Error loading the next page"
msgstr "Error al cargar la siguiente página"
#: searx/webapp.py:478 searx/webapp.py:878
#: searx/webapp.py:332
msgid "close"
msgstr "cerrar"
#: searx/webapp.py:333
msgid "How to navigate SearXNG with hotkeys"
msgstr "Navegar por SearXNG con atajos de teclado"
#: searx/webapp.py:334
msgid "Control"
msgstr "Control"
#: searx/webapp.py:335
msgid "Results"
msgstr "Resultados"
#: searx/webapp.py:336
msgid "Navigation"
msgstr "Navegación"
#: searx/webapp.py:337
msgid "Other"
msgstr "Otro"
#: searx/webapp.py:338
msgid "remove focus from the focused input"
msgstr "Desenfocar el campo de texto"
#: searx/webapp.py:339
msgid "copy url of the selected result to the clipboard"
msgstr "Copiar URL seleccionada al portapapeles"
#: searx/webapp.py:340
msgid "toggle help window"
msgstr "Abrir/cerrar la ventana de ayuda"
#: searx/webapp.py:341
msgid "focus on the search input"
msgstr "Ir al cuadro de búsqueda"
#: searx/webapp.py:342
msgid "go to next page"
msgstr "Siguiente página"
#: searx/webapp.py:343
msgid "open search result"
msgstr "Ver resultado"
#: searx/webapp.py:344
msgid "go to previous page"
msgstr "Página anterior"
#: searx/webapp.py:345
msgid "reload page from the server"
msgstr "Recargar página"
#: searx/webapp.py:346
msgid "open the result in a new tab"
msgstr "Abrir en nueva pestaña"
#: searx/webapp.py:347
msgid "select previous search result"
msgstr "Seleccionar resultado anterior"
#: searx/webapp.py:348
msgid "select next search result"
msgstr "Seleccionar resultado siguiente"
#: searx/webapp.py:349
msgid "scroll one page up"
msgstr "Desplazarse página arriba"
#: searx/webapp.py:350
msgid "scroll half a page down"
msgstr "Desplazarse a la mitad de la página"
#: searx/webapp.py:351
msgid "scroll one page down"
msgstr "Desplazarse página abajo"
#: searx/webapp.py:352
msgid "scroll to the top of the page"
msgstr "Ir al principio de la página"
#: searx/webapp.py:353
msgid "scroll half a page up"
msgstr "Desplazarse a la mitad de la página"
#: searx/webapp.py:354
msgid "scroll to the bottom of the page"
msgstr "Ir al final de la página"
#: searx/webapp.py:502 searx/webapp.py:902
msgid "Invalid settings, please edit your preferences"
msgstr "Ajustes inválidos, por favor, cambia tus preferencias"
#: searx/webapp.py:494
#: searx/webapp.py:518
msgid "Invalid settings"
msgstr "Ajustes inválidos"
#: searx/webapp.py:570 searx/webapp.py:660
#: searx/webapp.py:594 searx/webapp.py:684
msgid "search error"
msgstr "error en la búsqueda"
Binary file not shown.
+101 -9
View File
@@ -21,8 +21,8 @@ msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2026-10-04 05:47+0000\n"
"PO-Revision-Date: 2026-10-05 10:27+0000\n"
"POT-Creation-Date: 2026-10-09 19:03+0000\n"
"PO-Revision-Date: 2026-10-12 06:27+0000\n"
"Last-Translator: Priit Jõerüüt <jrtcdbrg@noreply.codeberg.org>\n"
"Language: et\n"
"Language-Team: Estonian <https://translate.codeberg.org/projects/searxng/"
@@ -32,7 +32,7 @@ msgstr ""
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.18.0\n"
"X-Generator: Weblate 2026.9.1\n"
"X-Generator: Weblate 2026.10.1\n"
#. CONSTANT_NAMES['NO_SUBGROUPING']
#: searx/searxng.msg
@@ -588,15 +588,107 @@ msgstr "Allikas"
msgid "Error loading the next page"
msgstr "Viga järgmise lehekülje laadimisel"
#: searx/webapp.py:478 searx/webapp.py:878
#: searx/webapp.py:332
msgid "close"
msgstr "sulge"
#: searx/webapp.py:333
msgid "How to navigate SearXNG with hotkeys"
msgstr "Kiirklahvide kasutus SearXNG-s"
#: searx/webapp.py:334
msgid "Control"
msgstr "Tegevuste juhtimine"
#: searx/webapp.py:335
msgid "Results"
msgstr "Tulemused"
#: searx/webapp.py:336
msgid "Navigation"
msgstr "Liikumine lehel"
#: searx/webapp.py:337
msgid "Other"
msgstr "Muu"
#: searx/webapp.py:338
msgid "remove focus from the focused input"
msgstr "eemalda hetkel kehtiv fookus"
#: searx/webapp.py:339
msgid "copy url of the selected result to the clipboard"
msgstr "kopeeri valitud otsingutulemuse võrguaadress lõikelauale"
#: searx/webapp.py:340
msgid "toggle help window"
msgstr "lülita abiteave sisse/välja"
#: searx/webapp.py:341
msgid "focus on the search input"
msgstr "säti fookus otsingukastile"
#: searx/webapp.py:342
msgid "go to next page"
msgstr "ava järgmine leht"
#: searx/webapp.py:343
msgid "open search result"
msgstr "ava otsingutulemused"
#: searx/webapp.py:344
msgid "go to previous page"
msgstr "ava eelmine leht"
#: searx/webapp.py:345
msgid "reload page from the server"
msgstr "laadi leht serverist uuesti"
#: searx/webapp.py:346
msgid "open the result in a new tab"
msgstr "ava otsingutulemus uuel vahekaardil"
#: searx/webapp.py:347
msgid "select previous search result"
msgstr "vali eelmine otsingutulemus"
#: searx/webapp.py:348
msgid "select next search result"
msgstr "vali järgmine otsingutulemus"
#: searx/webapp.py:349
msgid "scroll one page up"
msgstr "keri lehe jagu ülespoole"
#: searx/webapp.py:350
msgid "scroll half a page down"
msgstr "keri poole lehe jagu allapoole"
#: searx/webapp.py:351
msgid "scroll one page down"
msgstr "keri lehe jagu allapoole"
#: searx/webapp.py:352
msgid "scroll to the top of the page"
msgstr "keri lehe ülaäärde"
#: searx/webapp.py:353
msgid "scroll half a page up"
msgstr "keri poole lehe jagu ülespoole"
#: searx/webapp.py:354
msgid "scroll to the bottom of the page"
msgstr "keri lehe alaäärde"
#: searx/webapp.py:502 searx/webapp.py:902
msgid "Invalid settings, please edit your preferences"
msgstr "Sobimatud seaded, palun muuda oma eelistusi"
msgstr "Vigased seadistused, palun muuda oma eelistusi"
#: searx/webapp.py:494
#: searx/webapp.py:518
msgid "Invalid settings"
msgstr "Sobimatud seaded"
msgstr "Vigased seadistused"
#: searx/webapp.py:570 searx/webapp.py:660
#: searx/webapp.py:594 searx/webapp.py:684
msgid "search error"
msgstr "otsingu viga"
@@ -622,7 +714,7 @@ msgstr "SSL viga: sertifikaadi valideerimine ei õnnestunud"
#: searx/webutils.py:42
msgid "unexpected crash"
msgstr "ootamatu krahh"
msgstr "ootamatu kokkujooksmine"
#: searx/webutils.py:48
msgid "HTTP error"
Binary file not shown.
+108 -16
View File
@@ -18,19 +18,20 @@
# return42 <return42@noreply.codeberg.org>, 2025.
msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2026-10-04 05:47+0000\n"
"PO-Revision-Date: 2026-07-23 22:07+0000\n"
"POT-Creation-Date: 2026-10-09 19:03+0000\n"
"PO-Revision-Date: 2026-10-26 23:27+0000\n"
"Last-Translator: alexgabi <alexgabi@noreply.codeberg.org>\n"
"Language: eu\n"
"Language-Team: Basque "
"<https://translate.codeberg.org/projects/searxng/searxng/eu/>\n"
"Language-Team: Basque <https://translate.codeberg.org/projects/searxng/"
"searxng/eu/>\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.18.0\n"
"X-Generator: Weblate 2026.10.1\n"
#. CONSTANT_NAMES['NO_SUBGROUPING']
#: searx/searxng.msg
@@ -50,7 +51,7 @@ msgstr "aplikazioak"
#. CATEGORY_NAMES['BLOGS']
#: searx/searxng.msg
msgid "blogs"
msgstr ""
msgstr "blogak"
#. CATEGORY_NAMES['DICTIONARIES']
#: searx/searxng.msg
@@ -70,7 +71,7 @@ msgstr "orokorra"
#. CATEGORY_NAMES['ICONS']
#: searx/searxng.msg
msgid "icons"
msgstr ""
msgstr "ikonoak"
#. CATEGORY_NAMES['IMAGES']
#: searx/searxng.msg
@@ -95,7 +96,7 @@ msgstr "mapa"
#. CATEGORY_NAMES['MOVIES']
#: searx/searxng.msg
msgid "movies"
msgstr ""
msgstr "filmak"
#. CATEGORY_NAMES['MUSIC']
#: searx/searxng.msg
@@ -155,12 +156,12 @@ msgstr "software wikiak"
#. CATEGORY_NAMES['STOCK_IMAGES']
#: searx/searxng.msg
msgid "stock images"
msgstr ""
msgstr "artxiboko irudiak"
#. CATEGORY_NAMES['TRANSLATE']
#: searx/searxng.msg
msgid "translate"
msgstr ""
msgstr "itzuli"
#. CATEGORY_NAMES['TV']
#: searx/searxng.msg
@@ -175,7 +176,7 @@ msgstr "bideoak"
#. CATEGORY_NAMES['WEATHER']
#: searx/searxng.msg
msgid "weather"
msgstr ""
msgstr "eguraldia"
#. CATEGORY_NAMES['WEB']
#: searx/searxng.msg
@@ -586,15 +587,107 @@ msgstr "Iturria"
msgid "Error loading the next page"
msgstr "Errorea hurrengo orrialdea kargatzean"
#: searx/webapp.py:478 searx/webapp.py:878
#: searx/webapp.py:332
msgid "close"
msgstr "itxi"
#: searx/webapp.py:333
msgid "How to navigate SearXNG with hotkeys"
msgstr "Nola nabigatu SearXNG laster-teklen bidez"
#: searx/webapp.py:334
msgid "Control"
msgstr "Kontrola"
#: searx/webapp.py:335
msgid "Results"
msgstr "Emaitzak"
#: searx/webapp.py:336
msgid "Navigation"
msgstr "Nabigazioa"
#: searx/webapp.py:337
msgid "Other"
msgstr "Bestelakoak"
#: searx/webapp.py:338
msgid "remove focus from the focused input"
msgstr "kendu fokua fokuratutako sarreratik"
#: searx/webapp.py:339
msgid "copy url of the selected result to the clipboard"
msgstr "kopiatu hautatutako emaitzen url-a arbelean"
#: searx/webapp.py:340
msgid "toggle help window"
msgstr "txandakatu laguntza leihoa"
#: searx/webapp.py:341
msgid "focus on the search input"
msgstr "zentratu bilaketa-sarreran"
#: searx/webapp.py:342
msgid "go to next page"
msgstr "joan hurrengo orrira"
#: searx/webapp.py:343
msgid "open search result"
msgstr "ireki bilaketaren emaitza"
#: searx/webapp.py:344
msgid "go to previous page"
msgstr "joan aurreko orrira"
#: searx/webapp.py:345
msgid "reload page from the server"
msgstr "birkargatu orria zerbitzaritik"
#: searx/webapp.py:346
msgid "open the result in a new tab"
msgstr "ireki emaitza fitxa berri batean"
#: searx/webapp.py:347
msgid "select previous search result"
msgstr "hautatu aurreko bilaketaren emaitza"
#: searx/webapp.py:348
msgid "select next search result"
msgstr "hautatu hurrengo bilaketaren emaitza"
#: searx/webapp.py:349
msgid "scroll one page up"
msgstr "korritu orri bat gora"
#: searx/webapp.py:350
msgid "scroll half a page down"
msgstr "korritu orri erdia behera"
#: searx/webapp.py:351
msgid "scroll one page down"
msgstr "korritu orri bat behera"
#: searx/webapp.py:352
msgid "scroll to the top of the page"
msgstr "korritu orriaren goiko aldera"
#: searx/webapp.py:353
msgid "scroll half a page up"
msgstr "korritu orri erdia gora"
#: searx/webapp.py:354
msgid "scroll to the bottom of the page"
msgstr "korritu orriaren bukaerara"
#: searx/webapp.py:502 searx/webapp.py:902
msgid "Invalid settings, please edit your preferences"
msgstr "Ezarpen baliogabeak, editatu zure hobespenak"
#: searx/webapp.py:494
#: searx/webapp.py:518
msgid "Invalid settings"
msgstr "Ezarpen baliogabeak"
#: searx/webapp.py:570 searx/webapp.py:660
#: searx/webapp.py:594 searx/webapp.py:684
msgid "search error"
msgstr "bilaketa akatsa"
@@ -1430,7 +1523,7 @@ msgstr "Hobespenen hash"
#: searx/templates/simple/preferences/doi_resolver.html:2
msgid "DOI Resolver"
msgstr ""
msgstr "DOI ebazlea"
#: searx/templates/simple/preferences/engines.html:9
msgid ""
@@ -2426,4 +2519,3 @@ msgstr "ezkutatu bideoa"
#~ msgid "Select service used by DOI rewrite"
#~ msgstr "Hautatu DOI berridazketa-k erabilitako zerbitzua"
Binary file not shown.
@@ -30,7 +30,7 @@ msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2026-10-04 05:47+0000\n"
"POT-Creation-Date: 2026-10-09 19:03+0000\n"
"PO-Revision-Date: 2026-08-04 12:25+0000\n"
"Last-Translator: mvtbh <mvtbh@noreply.codeberg.org>\n"
"Language: fa_IR\n"
@@ -596,15 +596,107 @@ msgstr "منبع"
msgid "Error loading the next page"
msgstr "خطا در بارگزاری صفحه جدید"
#: searx/webapp.py:478 searx/webapp.py:878
#: searx/webapp.py:332
msgid "close"
msgstr ""
#: searx/webapp.py:333
msgid "How to navigate SearXNG with hotkeys"
msgstr ""
#: searx/webapp.py:334
msgid "Control"
msgstr ""
#: searx/webapp.py:335
msgid "Results"
msgstr ""
#: searx/webapp.py:336
msgid "Navigation"
msgstr ""
#: searx/webapp.py:337
msgid "Other"
msgstr ""
#: searx/webapp.py:338
msgid "remove focus from the focused input"
msgstr ""
#: searx/webapp.py:339
msgid "copy url of the selected result to the clipboard"
msgstr ""
#: searx/webapp.py:340
msgid "toggle help window"
msgstr ""
#: searx/webapp.py:341
msgid "focus on the search input"
msgstr ""
#: searx/webapp.py:342
msgid "go to next page"
msgstr ""
#: searx/webapp.py:343
msgid "open search result"
msgstr ""
#: searx/webapp.py:344
msgid "go to previous page"
msgstr ""
#: searx/webapp.py:345
msgid "reload page from the server"
msgstr ""
#: searx/webapp.py:346
msgid "open the result in a new tab"
msgstr ""
#: searx/webapp.py:347
msgid "select previous search result"
msgstr ""
#: searx/webapp.py:348
msgid "select next search result"
msgstr ""
#: searx/webapp.py:349
msgid "scroll one page up"
msgstr ""
#: searx/webapp.py:350
msgid "scroll half a page down"
msgstr ""
#: searx/webapp.py:351
msgid "scroll one page down"
msgstr ""
#: searx/webapp.py:352
msgid "scroll to the top of the page"
msgstr ""
#: searx/webapp.py:353
msgid "scroll half a page up"
msgstr ""
#: searx/webapp.py:354
msgid "scroll to the bottom of the page"
msgstr ""
#: searx/webapp.py:502 searx/webapp.py:902
msgid "Invalid settings, please edit your preferences"
msgstr "تنظیمات نادرست است، لطفا تنظیمات جستجو را تغییر دهید"
#: searx/webapp.py:494
#: searx/webapp.py:518
msgid "Invalid settings"
msgstr "تنظیمات نادرست"
#: searx/webapp.py:570 searx/webapp.py:660
#: searx/webapp.py:594 searx/webapp.py:684
msgid "search error"
msgstr "خطای جست‌وجو"
Binary file not shown.
+107 -15
View File
@@ -17,23 +17,24 @@
# Anonymous <anonymous@users.noreply.translate.codeberg.org>, 2025.
# Ricky-Tigg <ricky-tigg@users.noreply.translate.codeberg.org>, 2025.
# return42 <return42@noreply.codeberg.org>, 2025, 2026.
# artnay <artnay@noreply.codeberg.org>, 2025.
# artnay <artnay@noreply.codeberg.org>, 2025, 2026.
# Ricky-Tigg <ricky-tigg@noreply.codeberg.org>, 2025.
msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2026-10-04 05:47+0000\n"
"PO-Revision-Date: 2026-05-19 12:07+0000\n"
"Last-Translator: return42 <return42@noreply.codeberg.org>\n"
"POT-Creation-Date: 2026-10-09 19:03+0000\n"
"PO-Revision-Date: 2026-10-29 14:05+0000\n"
"Last-Translator: artnay <artnay@noreply.codeberg.org>\n"
"Language: fi\n"
"Language-Team: Finnish "
"<https://translate.codeberg.org/projects/searxng/searxng/fi/>\n"
"Language-Team: Finnish <https://translate.codeberg.org/projects/searxng/"
"searxng/fi/>\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.18.0\n"
"X-Generator: Weblate 2026.10.1\n"
#. CONSTANT_NAMES['NO_SUBGROUPING']
#: searx/searxng.msg
@@ -178,7 +179,7 @@ msgstr "videot"
#. CATEGORY_NAMES['WEATHER']
#: searx/searxng.msg
msgid "weather"
msgstr ""
msgstr "sää"
#. CATEGORY_NAMES['WEB']
#: searx/searxng.msg
@@ -589,15 +590,107 @@ msgstr "Lähde"
msgid "Error loading the next page"
msgstr "Virhe ladattaessa seuraavaa sivua"
#: searx/webapp.py:478 searx/webapp.py:878
#: searx/webapp.py:332
msgid "close"
msgstr "sulje"
#: searx/webapp.py:333
msgid "How to navigate SearXNG with hotkeys"
msgstr ""
#: searx/webapp.py:334
msgid "Control"
msgstr ""
#: searx/webapp.py:335
msgid "Results"
msgstr "Tulokset"
#: searx/webapp.py:336
msgid "Navigation"
msgstr "Navigaatio"
#: searx/webapp.py:337
msgid "Other"
msgstr ""
#: searx/webapp.py:338
msgid "remove focus from the focused input"
msgstr ""
#: searx/webapp.py:339
msgid "copy url of the selected result to the clipboard"
msgstr "kopioi valitun tuloksen osoite leikepöydälle"
#: searx/webapp.py:340
msgid "toggle help window"
msgstr ""
#: searx/webapp.py:341
msgid "focus on the search input"
msgstr ""
#: searx/webapp.py:342
msgid "go to next page"
msgstr "siirry seuraavalle sivulle"
#: searx/webapp.py:343
msgid "open search result"
msgstr "avaa hakutulos"
#: searx/webapp.py:344
msgid "go to previous page"
msgstr "siirry edelliselle sivulle"
#: searx/webapp.py:345
msgid "reload page from the server"
msgstr "lataa sivu uudelleen palvelimelta"
#: searx/webapp.py:346
msgid "open the result in a new tab"
msgstr "avaa tulos uuteen välilehteen"
#: searx/webapp.py:347
msgid "select previous search result"
msgstr "valitse edellinen hakutulos"
#: searx/webapp.py:348
msgid "select next search result"
msgstr "valitse seuraava hakutulos"
#: searx/webapp.py:349
msgid "scroll one page up"
msgstr "vieritä yksi sivu ylös"
#: searx/webapp.py:350
msgid "scroll half a page down"
msgstr "vieritä puoli sivua alas"
#: searx/webapp.py:351
msgid "scroll one page down"
msgstr "vieritä yksi sivu alas"
#: searx/webapp.py:352
msgid "scroll to the top of the page"
msgstr "vieritä sivun yläosaan"
#: searx/webapp.py:353
msgid "scroll half a page up"
msgstr "vieritä puoli sivua ylös"
#: searx/webapp.py:354
msgid "scroll to the bottom of the page"
msgstr "vieritä sivun alaosaan"
#: searx/webapp.py:502 searx/webapp.py:902
msgid "Invalid settings, please edit your preferences"
msgstr "Virheelliset asetukset, muokkaa siis asetuksia"
#: searx/webapp.py:494
#: searx/webapp.py:518
msgid "Invalid settings"
msgstr "Virheelliset asetukset"
#: searx/webapp.py:570 searx/webapp.py:660
#: searx/webapp.py:594 searx/webapp.py:684
msgid "search error"
msgstr "hakuvirhe"
@@ -1436,7 +1529,7 @@ msgstr "Asetusten tiiviste"
#: searx/templates/simple/preferences/doi_resolver.html:2
msgid "DOI Resolver"
msgstr ""
msgstr "DOI-ratkaisija"
#: searx/templates/simple/preferences/engines.html:9
msgid ""
@@ -1673,11 +1766,11 @@ msgstr "Resoluutio"
#: searx/templates/simple/result_templates/images.html:55
msgid "Image formats"
msgstr ""
msgstr "Kuvamuodot"
#: searx/templates/simple/result_templates/images.html:56
msgid "original format"
msgstr ""
msgstr "alkuperäinen muoto"
#: searx/templates/simple/result_templates/images.html:64
msgid "View source"
@@ -2445,4 +2538,3 @@ msgstr "piilota video"
#~ msgid "Select service used by DOI rewrite"
#~ msgstr "Valitse palvelu, jota käytetään DOI:n uudelleenkirjoituksessa"
Binary file not shown.
+110 -14
View File
@@ -20,20 +20,21 @@
# return42 <return42@noreply.codeberg.org>, 2025, 2026.
msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2026-10-04 05:47+0000\n"
"PO-Revision-Date: 2026-09-22 13:25+0000\n"
"POT-Creation-Date: 2026-10-09 19:03+0000\n"
"PO-Revision-Date: 2026-10-20 12:27+0000\n"
"Last-Translator: marc-lopez <marc-lopez@noreply.codeberg.org>\n"
"Language: fil\n"
"Language-Team: Filipino "
"<https://translate.codeberg.org/projects/searxng/searxng/fil/>\n"
"Plural-Forms: nplurals=2; plural=(n == 1 || n==2 || n==3) || (n % 10 != 4"
" || n % 10 != 6 || n % 10 != 9);\n"
"Language-Team: Filipino <https://translate.codeberg.org/projects/searxng/"
"searxng/fil/>\n"
"Plural-Forms: nplurals=2; plural=(n == 1 || n==2 || n==3) || (n % 10 != 4 || "
"n % 10 != 6 || n % 10 != 9);\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.18.0\n"
"X-Generator: Weblate 2026.10.1\n"
#. CONSTANT_NAMES['NO_SUBGROUPING']
#: searx/searxng.msg
@@ -589,15 +590,107 @@ msgstr "Pinagmulan"
msgid "Error loading the next page"
msgstr "Error sa paglo-load ng susunod na pahina"
#: searx/webapp.py:478 searx/webapp.py:878
#: searx/webapp.py:332
msgid "close"
msgstr "I-sara"
#: searx/webapp.py:333
msgid "How to navigate SearXNG with hotkeys"
msgstr "Paano mag-navigate sa SearXNG gamit ang hotkeys"
#: searx/webapp.py:334
msgid "Control"
msgstr "Kontrol"
#: searx/webapp.py:335
msgid "Results"
msgstr "Mga Resulta"
#: searx/webapp.py:336
msgid "Navigation"
msgstr "Nabigasyon"
#: searx/webapp.py:337
msgid "Other"
msgstr "Iba Pa"
#: searx/webapp.py:338
msgid "remove focus from the focused input"
msgstr "tanggalin ang pagtutok sa tinutukan na input"
#: searx/webapp.py:339
msgid "copy url of the selected result to the clipboard"
msgstr "i-kopya ang url ng napiling resulta sa clipboard"
#: searx/webapp.py:340
msgid "toggle help window"
msgstr "i-bukas/i-sara ang help window"
#: searx/webapp.py:341
msgid "focus on the search input"
msgstr "tumutok sa input para sa paghahanap"
#: searx/webapp.py:342
msgid "go to next page"
msgstr "lipat patungo sa susunod na pahina"
#: searx/webapp.py:343
msgid "open search result"
msgstr "buksan ang resulta ng paghahanap"
#: searx/webapp.py:344
msgid "go to previous page"
msgstr "lipat sa nakalipas na pahina"
#: searx/webapp.py:345
msgid "reload page from the server"
msgstr "i-load ulit ang pahina galing sa server"
#: searx/webapp.py:346
msgid "open the result in a new tab"
msgstr "buksan ang resulta sa panibagong tab"
#: searx/webapp.py:347
msgid "select previous search result"
msgstr "piliin ang nakalipas na resulta ng paghahanap"
#: searx/webapp.py:348
msgid "select next search result"
msgstr "piliin ang susunod na resulta ng paghahanap"
#: searx/webapp.py:349
msgid "scroll one page up"
msgstr "i-scroll pataas ng isang pahina"
#: searx/webapp.py:350
msgid "scroll half a page down"
msgstr "i-scroll pababa ng kalahating pahina"
#: searx/webapp.py:351
msgid "scroll one page down"
msgstr "i-scroll pababa ng isang pahina"
#: searx/webapp.py:352
msgid "scroll to the top of the page"
msgstr "I-scroll patungo sa tuktok ng pahina"
#: searx/webapp.py:353
msgid "scroll half a page up"
msgstr "i-scroll pataas ng kalahating pahina"
#: searx/webapp.py:354
msgid "scroll to the bottom of the page"
msgstr "i-scroll patungo sa ilalim ng pahina"
#: searx/webapp.py:502 searx/webapp.py:902
msgid "Invalid settings, please edit your preferences"
msgstr "Di-wastong mga setting, pakibago ang iyong mga kagustuhan"
#: searx/webapp.py:494
#: searx/webapp.py:518
msgid "Invalid settings"
msgstr "Di-wastong mga setting"
#: searx/webapp.py:570 searx/webapp.py:660
#: searx/webapp.py:594 searx/webapp.py:684
msgid "search error"
msgstr "nagkaproblema sa paghahanap ng mga resulta"
@@ -1360,7 +1453,7 @@ msgstr "Kusang tinatapos"
#: searx/templates/simple/preferences/autocomplete.html:15
msgid "Show possible queries as you type"
msgstr ""
msgstr "Ipakita ang mga posible na query habang nagta-type"
#: searx/templates/simple/preferences/center_alignment.html:2
msgid "Center Alignment"
@@ -1368,7 +1461,7 @@ msgstr "Pag-align sa Gitnang"
#: searx/templates/simple/preferences/center_alignment.html:14
msgid "Display results in the center of the page (Oscar layout)."
msgstr ""
msgstr "Ipakita ang mga resulta sa gitna ng pahina (layout na Oscar)."
#: searx/templates/simple/preferences/cookies.html:2
msgid ""
@@ -1381,6 +1474,8 @@ msgstr ""
#: searx/templates/simple/preferences/cookies.html:3
msgid "With this list, you can assess the transparency of SearXNG."
msgstr ""
"Sa pamamagitan ng listahan na ito, maaaring siyasatin ang katapatan ng "
"SearXNG."
#: searx/templates/simple/preferences/cookies.html:9
msgid "Cookie name"
@@ -1431,13 +1526,15 @@ msgstr "Hash ng mga preference"
#: searx/templates/simple/preferences/doi_resolver.html:2
msgid "DOI Resolver"
msgstr ""
msgstr "DOI solver"
#: searx/templates/simple/preferences/engines.html:9
msgid ""
"This tab does not exist in the user interface, but you can search with "
"these engines via !bangs."
msgstr ""
"Wala ang tab na ito sa user interface, pero makakahanap ka sa mga makinang "
"ito gamit ang !bangs."
#: searx/templates/simple/preferences/engines.html:15
msgid "Enable all"
@@ -2455,4 +2552,3 @@ msgstr "itago ang video"
#~ msgid "Select service used by DOI rewrite"
#~ msgstr "Pumili ng serbisyo na ginagamit sa pagsulat ng DOI"
Binary file not shown.
+104 -12
View File
@@ -39,7 +39,7 @@
# guenael <guenael@users.noreply.translate.codeberg.org>, 2025.
# return42 <return42@noreply.codeberg.org>, 2025, 2026.
# wags07 <wags07@noreply.codeberg.org>, 2025.
# demilune <demilune@noreply.codeberg.org>, 2025.
# demilune <demilune@noreply.codeberg.org>, 2025, 2026.
# Hēphaistos <hephaistos@noreply.codeberg.org>, 2025.
# ledjfou <ledjfou@noreply.codeberg.org>, 2025.
# vbrodeur <vbrodeur@noreply.codeberg.org>, 2025.
@@ -48,19 +48,20 @@
# Machou <machou@noreply.codeberg.org>, 2026.
msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2026-10-04 05:47+0000\n"
"PO-Revision-Date: 2026-09-22 13:25+0000\n"
"Last-Translator: return42 <return42@noreply.codeberg.org>\n"
"POT-Creation-Date: 2026-10-09 19:03+0000\n"
"PO-Revision-Date: 2026-10-26 23:27+0000\n"
"Last-Translator: demilune <demilune@noreply.codeberg.org>\n"
"Language: fr\n"
"Language-Team: French "
"<https://translate.codeberg.org/projects/searxng/searxng/fr/>\n"
"Language-Team: French <https://translate.codeberg.org/projects/searxng/"
"searxng/fr/>\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.18.0\n"
"X-Generator: Weblate 2026.10.1\n"
#. CONSTANT_NAMES['NO_SUBGROUPING']
#: searx/searxng.msg
@@ -100,7 +101,7 @@ msgstr "général"
#. CATEGORY_NAMES['ICONS']
#: searx/searxng.msg
msgid "icons"
msgstr ""
msgstr "icônes"
#. CATEGORY_NAMES['IMAGES']
#: searx/searxng.msg
@@ -616,15 +617,107 @@ msgstr "Source"
msgid "Error loading the next page"
msgstr "Erreur lors du chargement de la page suivante"
#: searx/webapp.py:478 searx/webapp.py:878
#: searx/webapp.py:332
msgid "close"
msgstr "fermer"
#: searx/webapp.py:333
msgid "How to navigate SearXNG with hotkeys"
msgstr "Naviguer sur SearXNG à l'aide de raccourcis clavier"
#: searx/webapp.py:334
msgid "Control"
msgstr "Contrôle"
#: searx/webapp.py:335
msgid "Results"
msgstr "Résultats"
#: searx/webapp.py:336
msgid "Navigation"
msgstr "Navigation"
#: searx/webapp.py:337
msgid "Other"
msgstr "Autre"
#: searx/webapp.py:338
msgid "remove focus from the focused input"
msgstr ""
#: searx/webapp.py:339
msgid "copy url of the selected result to the clipboard"
msgstr ""
#: searx/webapp.py:340
msgid "toggle help window"
msgstr ""
#: searx/webapp.py:341
msgid "focus on the search input"
msgstr ""
#: searx/webapp.py:342
msgid "go to next page"
msgstr ""
#: searx/webapp.py:343
msgid "open search result"
msgstr ""
#: searx/webapp.py:344
msgid "go to previous page"
msgstr ""
#: searx/webapp.py:345
msgid "reload page from the server"
msgstr ""
#: searx/webapp.py:346
msgid "open the result in a new tab"
msgstr ""
#: searx/webapp.py:347
msgid "select previous search result"
msgstr ""
#: searx/webapp.py:348
msgid "select next search result"
msgstr ""
#: searx/webapp.py:349
msgid "scroll one page up"
msgstr ""
#: searx/webapp.py:350
msgid "scroll half a page down"
msgstr ""
#: searx/webapp.py:351
msgid "scroll one page down"
msgstr ""
#: searx/webapp.py:352
msgid "scroll to the top of the page"
msgstr ""
#: searx/webapp.py:353
msgid "scroll half a page up"
msgstr ""
#: searx/webapp.py:354
msgid "scroll to the bottom of the page"
msgstr ""
#: searx/webapp.py:502 searx/webapp.py:902
msgid "Invalid settings, please edit your preferences"
msgstr "Paramètres non valides, veuillez modifier vos préférences"
#: searx/webapp.py:494
#: searx/webapp.py:518
msgid "Invalid settings"
msgstr "Paramètres non valides"
#: searx/webapp.py:570 searx/webapp.py:660
#: searx/webapp.py:594 searx/webapp.py:684
msgid "search error"
msgstr "erreur de recherche"
@@ -2502,4 +2595,3 @@ msgstr "cacher la vidéo"
#~ msgid "Select service used by DOI rewrite"
#~ msgstr "Sélectionner le service utilisé pour la réécriture par DOI"
Binary file not shown.
+110 -19
View File
@@ -10,19 +10,19 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2026-10-04 05:47+0000\n"
"PO-Revision-Date: 2026-08-04 12:25+0000\n"
"Last-Translator: Aindriú Mac Giolla Eoin <aindriu80@noreply.codeberg.org>"
"\n"
"POT-Creation-Date: 2026-10-09 19:03+0000\n"
"PO-Revision-Date: 2026-10-24 14:27+0000\n"
"Last-Translator: Aindriú Mac Giolla Eoin <aindriu80@noreply.codeberg.org>\n"
"Language: ga\n"
"Language-Team: Irish "
"<https://translate.codeberg.org/projects/searxng/searxng/ga/>\n"
"Plural-Forms: nplurals=5; plural=n==1 ? 0 : n==2 ? 1 : (n>2 && n<7) ? 2 "
":(n>6 && n<11) ? 3 : 4;\n"
"Language-Team: Irish <https://translate.codeberg.org/projects/searxng/"
"searxng/ga/>\n"
"Plural-Forms: nplurals=5; plural=n==1 ? 0 : n==2 ? 1 : (n>2 && n<7) ? 2 :(n>"
"6 && n<11) ? 3 : 4;\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.18.0\n"
"X-Generator: Weblate 2026.10.1\n"
#. CONSTANT_NAMES['NO_SUBGROUPING']
#: searx/searxng.msg
@@ -42,7 +42,7 @@ msgstr "aipeanna"
#. CATEGORY_NAMES['BLOGS']
#: searx/searxng.msg
msgid "blogs"
msgstr ""
msgstr "blaganna"
#. CATEGORY_NAMES['DICTIONARIES']
#: searx/searxng.msg
@@ -62,7 +62,7 @@ msgstr "ginearálta"
#. CATEGORY_NAMES['ICONS']
#: searx/searxng.msg
msgid "icons"
msgstr ""
msgstr "deilbhíní"
#. CATEGORY_NAMES['IMAGES']
#: searx/searxng.msg
@@ -87,7 +87,7 @@ msgstr "léarscáil"
#. CATEGORY_NAMES['MOVIES']
#: searx/searxng.msg
msgid "movies"
msgstr ""
msgstr "scannáin"
#. CATEGORY_NAMES['MUSIC']
#: searx/searxng.msg
@@ -147,12 +147,12 @@ msgstr "bogearraí wikis"
#. CATEGORY_NAMES['STOCK_IMAGES']
#: searx/searxng.msg
msgid "stock images"
msgstr ""
msgstr "íomhánna stoic"
#. CATEGORY_NAMES['TRANSLATE']
#: searx/searxng.msg
msgid "translate"
msgstr ""
msgstr "aistrigh"
#. CATEGORY_NAMES['TV']
#: searx/searxng.msg
@@ -167,7 +167,7 @@ msgstr "físeáin"
#. CATEGORY_NAMES['WEATHER']
#: searx/searxng.msg
msgid "weather"
msgstr ""
msgstr "aimsir"
#. CATEGORY_NAMES['WEB']
#: searx/searxng.msg
@@ -578,15 +578,107 @@ msgstr "Foinse"
msgid "Error loading the next page"
msgstr "Earráid ag luchtú an chéad leathanach eile"
#: searx/webapp.py:478 searx/webapp.py:878
#: searx/webapp.py:332
msgid "close"
msgstr "dún"
#: searx/webapp.py:333
msgid "How to navigate SearXNG with hotkeys"
msgstr "Conas nascleanúint a dhéanamh i SearXNG le heochracha aicearra"
#: searx/webapp.py:334
msgid "Control"
msgstr "Rialú"
#: searx/webapp.py:335
msgid "Results"
msgstr "Torthaí"
#: searx/webapp.py:336
msgid "Navigation"
msgstr "Nascleanúint"
#: searx/webapp.py:337
msgid "Other"
msgstr "Eile"
#: searx/webapp.py:338
msgid "remove focus from the focused input"
msgstr "bain an fócas den ionchur atá dírithe"
#: searx/webapp.py:339
msgid "copy url of the selected result to the clipboard"
msgstr "cóipeáil url an toraidh roghnaithe chuig an ngearrthaisce"
#: searx/webapp.py:340
msgid "toggle help window"
msgstr "scoránaigh an fhuinneog chabhrach"
#: searx/webapp.py:341
msgid "focus on the search input"
msgstr "dírigh ar an ionchur cuardaigh"
#: searx/webapp.py:342
msgid "go to next page"
msgstr "téigh go dtí an chéad leathanach eile"
#: searx/webapp.py:343
msgid "open search result"
msgstr "oscail toradh cuardaigh"
#: searx/webapp.py:344
msgid "go to previous page"
msgstr "téigh go dtí an leathanach roimhe seo"
#: searx/webapp.py:345
msgid "reload page from the server"
msgstr "athlódáil an leathanach ón bhfreastalaí"
#: searx/webapp.py:346
msgid "open the result in a new tab"
msgstr "Oscail an toradh i gcluaisín nua"
#: searx/webapp.py:347
msgid "select previous search result"
msgstr "roghnaigh an toradh cuardaigh roimhe seo"
#: searx/webapp.py:348
msgid "select next search result"
msgstr "roghnaigh an chéad toradh cuardaigh eile"
#: searx/webapp.py:349
msgid "scroll one page up"
msgstr "scrollaigh suas leathanach amháin"
#: searx/webapp.py:350
msgid "scroll half a page down"
msgstr "scrollaigh síos leathleathanach"
#: searx/webapp.py:351
msgid "scroll one page down"
msgstr "scrollaigh síos leathanach amháin"
#: searx/webapp.py:352
msgid "scroll to the top of the page"
msgstr "scrollaigh go barr an leathanaigh"
#: searx/webapp.py:353
msgid "scroll half a page up"
msgstr "scrollaigh leathleathanach suas"
#: searx/webapp.py:354
msgid "scroll to the bottom of the page"
msgstr "scrollaigh go bun an leathanaigh"
#: searx/webapp.py:502 searx/webapp.py:902
msgid "Invalid settings, please edit your preferences"
msgstr "Socruithe neamhbhailí, cuir do chuid roghanna in"
#: searx/webapp.py:494
#: searx/webapp.py:518
msgid "Invalid settings"
msgstr "Socruithe neamhbhaintí"
#: searx/webapp.py:570 searx/webapp.py:660
#: searx/webapp.py:594 searx/webapp.py:684
msgid "search error"
msgstr "earráid cuardaigh"
@@ -1429,7 +1521,7 @@ msgstr "Roghanna hais"
#: searx/templates/simple/preferences/doi_resolver.html:2
msgid "DOI Resolver"
msgstr ""
msgstr "Réiteoir DOI"
#: searx/templates/simple/preferences/engines.html:9
msgid ""
@@ -2001,4 +2093,3 @@ msgstr "físeán a cheilt"
#~ msgid "Select service used by DOI rewrite"
#~ msgstr "Roghnaigh seirbhís a úsáideann DOI athscríobh"
Binary file not shown.
+98 -6
View File
@@ -16,8 +16,8 @@ msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2026-10-04 05:47+0000\n"
"PO-Revision-Date: 2026-10-05 10:27+0000\n"
"POT-Creation-Date: 2026-10-09 19:03+0000\n"
"PO-Revision-Date: 2026-10-13 08:27+0000\n"
"Last-Translator: ghose <ghose@noreply.codeberg.org>\n"
"Language: gl\n"
"Language-Team: Galician <https://translate.codeberg.org/projects/searxng/"
@@ -27,7 +27,7 @@ msgstr ""
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.18.0\n"
"X-Generator: Weblate 2026.9.1\n"
"X-Generator: Weblate 2026.10.1\n"
#. CONSTANT_NAMES['NO_SUBGROUPING']
#: searx/searxng.msg
@@ -583,15 +583,107 @@ msgstr "Fonte"
msgid "Error loading the next page"
msgstr "Erro ao cargar a páxina seguinte"
#: searx/webapp.py:478 searx/webapp.py:878
#: searx/webapp.py:332
msgid "close"
msgstr "fechar"
#: searx/webapp.py:333
msgid "How to navigate SearXNG with hotkeys"
msgstr "Como utilizar SearXNG usando teclas con funcións"
#: searx/webapp.py:334
msgid "Control"
msgstr "Control"
#: searx/webapp.py:335
msgid "Results"
msgstr "Resultados"
#: searx/webapp.py:336
msgid "Navigation"
msgstr "Navegación"
#: searx/webapp.py:337
msgid "Other"
msgstr "Outros"
#: searx/webapp.py:338
msgid "remove focus from the focused input"
msgstr "retirar o foco do campo que o ten actualmente"
#: searx/webapp.py:339
msgid "copy url of the selected result to the clipboard"
msgstr "copiar ao portapapeis o url do resultado seleccionado"
#: searx/webapp.py:340
msgid "toggle help window"
msgstr "activar a xanela de axuda"
#: searx/webapp.py:341
msgid "focus on the search input"
msgstr "foco na caixa de texto para buscar"
#: searx/webapp.py:342
msgid "go to next page"
msgstr "ir á páxina seguinte"
#: searx/webapp.py:343
msgid "open search result"
msgstr "abrir o resultado da búsqueda"
#: searx/webapp.py:344
msgid "go to previous page"
msgstr "ir á páxina anterior"
#: searx/webapp.py:345
msgid "reload page from the server"
msgstr "volver a cargar a páxina desde o servidor"
#: searx/webapp.py:346
msgid "open the result in a new tab"
msgstr "abrir o resultado nunha nova pestana"
#: searx/webapp.py:347
msgid "select previous search result"
msgstr "seleccionar o resultado anterior da búsqueda"
#: searx/webapp.py:348
msgid "select next search result"
msgstr "seleccionar o resultado seguinte da búsqueda"
#: searx/webapp.py:349
msgid "scroll one page up"
msgstr "desprazarse unha páxina arriba"
#: searx/webapp.py:350
msgid "scroll half a page down"
msgstr "desprazarse media páxina abaixo"
#: searx/webapp.py:351
msgid "scroll one page down"
msgstr "desprazarse unha páxina abaixo"
#: searx/webapp.py:352
msgid "scroll to the top of the page"
msgstr "desprazarse ata a parte superior da páxina"
#: searx/webapp.py:353
msgid "scroll half a page up"
msgstr "desprazarse media páxina arriba"
#: searx/webapp.py:354
msgid "scroll to the bottom of the page"
msgstr "desprazarse á parte inferior da páxina"
#: searx/webapp.py:502 searx/webapp.py:902
msgid "Invalid settings, please edit your preferences"
msgstr "Axustes non válidos, por favor edita a configuración"
#: searx/webapp.py:494
#: searx/webapp.py:518
msgid "Invalid settings"
msgstr "Axustes non válidos"
#: searx/webapp.py:570 searx/webapp.py:660
#: searx/webapp.py:594 searx/webapp.py:684
msgid "search error"
msgstr "fallo na busca"
Binary file not shown.
+98 -6
View File
@@ -29,8 +29,8 @@ msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2026-10-04 05:47+0000\n"
"PO-Revision-Date: 2026-09-29 03:27+0000\n"
"POT-Creation-Date: 2026-10-09 19:03+0000\n"
"PO-Revision-Date: 2026-10-09 14:20+0000\n"
"Last-Translator: ngf <ngf@noreply.codeberg.org>\n"
"Language: he\n"
"Language-Team: Hebrew "
@@ -190,7 +190,7 @@ msgstr "מזג האוויר"
#. CATEGORY_NAMES['WEB']
#: searx/searxng.msg
msgid "web"
msgstr "רשת"
msgstr "רשתweb"
#. STYLE_NAMES['AUTO']
#: searx/searxng.msg
@@ -596,15 +596,107 @@ msgstr "מקור"
msgid "Error loading the next page"
msgstr "שגיאה בטעינת העמוד הבא"
#: searx/webapp.py:478 searx/webapp.py:878
#: searx/webapp.py:332
msgid "close"
msgstr ""
#: searx/webapp.py:333
msgid "How to navigate SearXNG with hotkeys"
msgstr ""
#: searx/webapp.py:334
msgid "Control"
msgstr ""
#: searx/webapp.py:335
msgid "Results"
msgstr ""
#: searx/webapp.py:336
msgid "Navigation"
msgstr ""
#: searx/webapp.py:337
msgid "Other"
msgstr ""
#: searx/webapp.py:338
msgid "remove focus from the focused input"
msgstr ""
#: searx/webapp.py:339
msgid "copy url of the selected result to the clipboard"
msgstr ""
#: searx/webapp.py:340
msgid "toggle help window"
msgstr ""
#: searx/webapp.py:341
msgid "focus on the search input"
msgstr ""
#: searx/webapp.py:342
msgid "go to next page"
msgstr ""
#: searx/webapp.py:343
msgid "open search result"
msgstr ""
#: searx/webapp.py:344
msgid "go to previous page"
msgstr ""
#: searx/webapp.py:345
msgid "reload page from the server"
msgstr ""
#: searx/webapp.py:346
msgid "open the result in a new tab"
msgstr ""
#: searx/webapp.py:347
msgid "select previous search result"
msgstr ""
#: searx/webapp.py:348
msgid "select next search result"
msgstr ""
#: searx/webapp.py:349
msgid "scroll one page up"
msgstr ""
#: searx/webapp.py:350
msgid "scroll half a page down"
msgstr ""
#: searx/webapp.py:351
msgid "scroll one page down"
msgstr ""
#: searx/webapp.py:352
msgid "scroll to the top of the page"
msgstr ""
#: searx/webapp.py:353
msgid "scroll half a page up"
msgstr ""
#: searx/webapp.py:354
msgid "scroll to the bottom of the page"
msgstr ""
#: searx/webapp.py:502 searx/webapp.py:902
msgid "Invalid settings, please edit your preferences"
msgstr "הגדרות לא תקינות, עליך לתקן את ההעדפות שלך"
#: searx/webapp.py:494
#: searx/webapp.py:518
msgid "Invalid settings"
msgstr "הגדרות לא תקינות"
#: searx/webapp.py:570 searx/webapp.py:660
#: searx/webapp.py:594 searx/webapp.py:684
msgid "search error"
msgstr "שגיאת חיפוש"
Binary file not shown.
+96 -4
View File
@@ -24,7 +24,7 @@ msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2026-10-04 05:47+0000\n"
"POT-Creation-Date: 2026-10-09 19:03+0000\n"
"PO-Revision-Date: 2026-09-19 15:25+0000\n"
"Last-Translator: return42 <return42@noreply.codeberg.org>\n"
"Language: hr\n"
@@ -591,15 +591,107 @@ msgstr "Izvor"
msgid "Error loading the next page"
msgstr "Greška u učitavnju sljedeće stranice"
#: searx/webapp.py:478 searx/webapp.py:878
#: searx/webapp.py:332
msgid "close"
msgstr ""
#: searx/webapp.py:333
msgid "How to navigate SearXNG with hotkeys"
msgstr ""
#: searx/webapp.py:334
msgid "Control"
msgstr ""
#: searx/webapp.py:335
msgid "Results"
msgstr ""
#: searx/webapp.py:336
msgid "Navigation"
msgstr ""
#: searx/webapp.py:337
msgid "Other"
msgstr ""
#: searx/webapp.py:338
msgid "remove focus from the focused input"
msgstr ""
#: searx/webapp.py:339
msgid "copy url of the selected result to the clipboard"
msgstr ""
#: searx/webapp.py:340
msgid "toggle help window"
msgstr ""
#: searx/webapp.py:341
msgid "focus on the search input"
msgstr ""
#: searx/webapp.py:342
msgid "go to next page"
msgstr ""
#: searx/webapp.py:343
msgid "open search result"
msgstr ""
#: searx/webapp.py:344
msgid "go to previous page"
msgstr ""
#: searx/webapp.py:345
msgid "reload page from the server"
msgstr ""
#: searx/webapp.py:346
msgid "open the result in a new tab"
msgstr ""
#: searx/webapp.py:347
msgid "select previous search result"
msgstr ""
#: searx/webapp.py:348
msgid "select next search result"
msgstr ""
#: searx/webapp.py:349
msgid "scroll one page up"
msgstr ""
#: searx/webapp.py:350
msgid "scroll half a page down"
msgstr ""
#: searx/webapp.py:351
msgid "scroll one page down"
msgstr ""
#: searx/webapp.py:352
msgid "scroll to the top of the page"
msgstr ""
#: searx/webapp.py:353
msgid "scroll half a page up"
msgstr ""
#: searx/webapp.py:354
msgid "scroll to the bottom of the page"
msgstr ""
#: searx/webapp.py:502 searx/webapp.py:902
msgid "Invalid settings, please edit your preferences"
msgstr "Nevažeće postavke, molimo uredite svoje postavke"
#: searx/webapp.py:494
#: searx/webapp.py:518
msgid "Invalid settings"
msgstr "Nevažeće postavke"
#: searx/webapp.py:570 searx/webapp.py:660
#: searx/webapp.py:594 searx/webapp.py:684
msgid "search error"
msgstr "greška u pretraživanju"
Binary file not shown.
+98 -6
View File
@@ -25,8 +25,8 @@ msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2026-10-04 05:47+0000\n"
"PO-Revision-Date: 2026-10-06 13:27+0000\n"
"POT-Creation-Date: 2026-10-09 19:03+0000\n"
"PO-Revision-Date: 2026-10-13 08:27+0000\n"
"Last-Translator: kratos <makesocialfoss32@keemail.me>\n"
"Language: hu\n"
"Language-Team: Hungarian <https://translate.codeberg.org/projects/searxng/"
@@ -36,7 +36,7 @@ msgstr ""
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.18.0\n"
"X-Generator: Weblate 2026.9.1\n"
"X-Generator: Weblate 2026.10.1\n"
#. CONSTANT_NAMES['NO_SUBGROUPING']
#: searx/searxng.msg
@@ -592,15 +592,107 @@ msgstr "Forrás"
msgid "Error loading the next page"
msgstr "Hiba a következő oldal betöltése során"
#: searx/webapp.py:478 searx/webapp.py:878
#: searx/webapp.py:332
msgid "close"
msgstr "bezárás"
#: searx/webapp.py:333
msgid "How to navigate SearXNG with hotkeys"
msgstr "Hogyan navigáljon a SearXNG-ben gyorsbillentyűkkel"
#: searx/webapp.py:334
msgid "Control"
msgstr "Vezérlés"
#: searx/webapp.py:335
msgid "Results"
msgstr "Eredmények"
#: searx/webapp.py:336
msgid "Navigation"
msgstr "Navigáció"
#: searx/webapp.py:337
msgid "Other"
msgstr "Egyéb"
#: searx/webapp.py:338
msgid "remove focus from the focused input"
msgstr "a fókusz megszüntetése az aktív beviteli mezőn"
#: searx/webapp.py:339
msgid "copy url of the selected result to the clipboard"
msgstr "a kijelölt találat webcímének másolása a vágólapra"
#: searx/webapp.py:340
msgid "toggle help window"
msgstr "súgóablak megjelenítése vagy elrejtése"
#: searx/webapp.py:341
msgid "focus on the search input"
msgstr "fókusz áthelyezése a keresőmezőre"
#: searx/webapp.py:342
msgid "go to next page"
msgstr "ugrás a következő oldalra"
#: searx/webapp.py:343
msgid "open search result"
msgstr "keresési találat megnyitása"
#: searx/webapp.py:344
msgid "go to previous page"
msgstr "vissza az előző oldalra"
#: searx/webapp.py:345
msgid "reload page from the server"
msgstr "oldal újratöltése a kiszolgálóról"
#: searx/webapp.py:346
msgid "open the result in a new tab"
msgstr "találat megnyitása új lapon"
#: searx/webapp.py:347
msgid "select previous search result"
msgstr "előző keresési találat kijelölése"
#: searx/webapp.py:348
msgid "select next search result"
msgstr "következő keresési találat kijelölése"
#: searx/webapp.py:349
msgid "scroll one page up"
msgstr "görgetés egy oldallal felfelé"
#: searx/webapp.py:350
msgid "scroll half a page down"
msgstr "görgetés fél oldallal lefelé"
#: searx/webapp.py:351
msgid "scroll one page down"
msgstr "görgetés egy oldallal lefelé"
#: searx/webapp.py:352
msgid "scroll to the top of the page"
msgstr "ugrás az oldal tetejére"
#: searx/webapp.py:353
msgid "scroll half a page up"
msgstr "görgetés fél oldallal felfelé"
#: searx/webapp.py:354
msgid "scroll to the bottom of the page"
msgstr "Ugrás az oldal aljára"
#: searx/webapp.py:502 searx/webapp.py:902
msgid "Invalid settings, please edit your preferences"
msgstr "Érvénytelen beállítások, módosítsa őket"
#: searx/webapp.py:494
#: searx/webapp.py:518
msgid "Invalid settings"
msgstr "Érvénytelen beállítások"
#: searx/webapp.py:570 searx/webapp.py:660
#: searx/webapp.py:594 searx/webapp.py:684
msgid "search error"
msgstr "keresési hiba"
Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More