diff --git a/.github/workflows/cleanup.yml b/.github/workflows/cleanup.yml index d429e0ce3..d6af8feee 100644 --- a/.github/workflows/cleanup.yml +++ b/.github/workflows/cleanup.yml @@ -5,7 +5,7 @@ name: Cleanup on: workflow_dispatch: schedule: - - cron: "4 4 * * 0" + - cron: "4 4 * * *" concurrency: group: ${{ github.workflow }} @@ -16,6 +16,8 @@ permissions: jobs: container-cache: + # FIXME: On forks it fails with "Failed to fetch packages: missing field `id` at line 1 column 141" + if: github.repository_owner == 'searxng' || github.event_name == 'workflow_dispatch' name: Container cache runs-on: ubuntu-24.04 permissions: @@ -28,7 +30,7 @@ jobs: with: account: "${{ github.repository_owner }}" token: "${{ secrets.GITHUB_TOKEN }}" - image-names: "cache" - image-tags: "!searxng-*" - cut-off: "1w" + image-names: "cache base" + image-tags: "!searxng*" + cut-off: "1d" keep-n-most-recent: "100" diff --git a/.github/workflows/container.yml b/.github/workflows/container.yml index 72e03be50..0285bcd5c 100644 --- a/.github/workflows/container.yml +++ b/.github/workflows/container.yml @@ -25,10 +25,83 @@ env: PYTHON_VERSION: "3.13" jobs: + build-base: + if: | + (github.repository_owner == 'searxng' && github.event.workflow_run.conclusion == 'success') + || github.event_name == 'workflow_dispatch' + name: Build base + runs-on: ubuntu-24.04 + permissions: + # Organization GHCR + packages: write + + steps: + - if: github.repository_owner == 'searxng' + name: Checkout + uses: actions/checkout@v4 + with: + persist-credentials: "false" + + - if: github.repository_owner == 'searxng' + name: Get date + id: date + run: echo "date=$(date +'%Y%m%d')" >>$GITHUB_OUTPUT + + - if: github.repository_owner == 'searxng' + name: Check cache apko + id: cache-apko + uses: actions/cache/restore@v4 + with: + # yamllint disable-line rule:line-length + key: "apko-${{ steps.date.outputs.date }}-${{ hashFiles('./container/base.yml', './container/base-builder.yml') }}" + path: "/tmp/.apko/" + lookup-only: true + + - if: github.repository_owner == 'searxng' && steps.cache-apko.outputs.cache-hit != 'true' + name: Setup cache apko + uses: actions/cache@v4 + with: + # yamllint disable-line rule:line-length + key: "apko-${{ steps.date.outputs.date }}-${{ hashFiles('./container/base.yml', './container/base-builder.yml') }}" + restore-keys: "apko-${{ steps.date.outputs.date }}-" + path: "/tmp/.apko/" + + - if: github.repository_owner == 'searxng' && steps.cache-apko.outputs.cache-hit != 'true' + name: Setup apko + run: | + eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)" + brew install apko + + - if: github.repository_owner == 'searxng' && steps.cache-apko.outputs.cache-hit != 'true' + name: Login to GHCR + uses: docker/login-action@v3 + with: + registry: "ghcr.io" + username: "${{ github.repository_owner }}" + password: "${{ secrets.GITHUB_TOKEN }}" + + - if: github.repository_owner == 'searxng' && steps.cache-apko.outputs.cache-hit != 'true' + name: Build + run: | + eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)" + + apko publish ./container/base.yml ghcr.io/${{ github.repository_owner }}/base:searxng \ + --cache-dir=/tmp/.apko/ \ + --sbom=false \ + --vcs=false \ + --log-level=debug + + apko publish ./container/base-builder.yml ghcr.io/${{ github.repository_owner }}/base:searxng-builder \ + --cache-dir=/tmp/.apko/ \ + --sbom=false \ + --vcs=false \ + --log-level=debug + build: - if: github.event_name == 'workflow_dispatch' || github.event.workflow_run.conclusion == 'success' + if: github.repository_owner == 'searxng' || github.event_name == 'workflow_dispatch' name: Build (${{ matrix.arch }}) runs-on: ${{ matrix.os }} + needs: build-base strategy: fail-fast: false matrix: diff --git a/.github/workflows/security.yml b/.github/workflows/security.yml index e994306b8..73a5fd77f 100644 --- a/.github/workflows/security.yml +++ b/.github/workflows/security.yml @@ -16,6 +16,7 @@ permissions: jobs: container: + if: github.repository_owner == 'searxng' name: Container runs-on: ubuntu-24.04-arm permissions: @@ -30,7 +31,7 @@ jobs: - name: Run Trivy scanner uses: aquasecurity/trivy-action@0.30.0 with: - image-ref: "docker.io/searxng/searxng:latest" + image-ref: "ghcr.io/searxng/searxng:latest" vuln-type: "os,library" severity: "UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL" ignore-unfixed: "false" diff --git a/Makefile b/Makefile index 917d3aeb4..a7a1535af 100644 --- a/Makefile +++ b/Makefile @@ -54,7 +54,7 @@ ci.test: test.yamllint test.black test.types.ci test.pylint test.unit test.robo test: test.yamllint test.black test.types.dev test.pylint test.unit test.robot test.rst test.shell test.shell: $(Q)shellcheck -x -s dash \ - container/docker-entrypoint.sh + container/entrypoint.sh $(Q)shellcheck -x -s bash \ utils/brand.sh \ $(MTOOLS) \ diff --git a/client/simple/package-lock.json b/client/simple/package-lock.json index 1b4c423f7..f0e8e8306 100644 --- a/client/simple/package-lock.json +++ b/client/simple/package-lock.json @@ -7,34 +7,31 @@ "": { "name": "simple", "version": "1.0.0", - "dependencies": { - "autocomplete-js": "^2.7.1" - }, "devDependencies": { - "@eslint/js": "^9.26.0", + "@eslint/js": "^9.27.0", "copy-webpack-plugin": "^13.0.0", "css-loader": "^7.1.2", "edge.js": "^6.2.1", - "eslint": "^9.26.0", + "eslint": "^9.27.0", "filemanager-webpack-plugin": "^8.0.0", - "globals": "^16.1.0", + "globals": "^16.2.0", "ionicons": "^8.0.8", "leaflet": "^1.9.4", "less": "^4.3.0", "less-loader": "^12.3.0", "normalize.css": "^8.0.1", - "sharp": "^0.34.1", + "sharp": "^0.34.2", "style-loader": "^4.0.0", - "stylelint": "^16.19.1", + "stylelint": "^16.20.0", "stylelint-config-standard": "^38.0.0", "stylelint-config-standard-less": "^3.0.1", "stylelint-prettier": "^5.0.3", "svgo": "^3.3.2", "swiped-events": "^1.2.0", "vite": "^6.3.5", - "vite-plugin-static-copy": "^2.3.1", + "vite-plugin-static-copy": "^3.0.0", "vite-plugin-stylelint": "^6.0.0", - "webpack": "^5.99.8", + "webpack": "^5.99.9", "webpack-cli": "^6.0.1" } }, @@ -175,9 +172,9 @@ } }, "node_modules/@emnapi/runtime": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.0.tgz", - "integrity": "sha512-64WYIf4UYcdLnbKn/umDlNjQDSS8AgZrI/R9+x5ilkUVFxXcA1Ebl+gQLc/6mERA4407Xof0R7wEyEuj091CVw==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.3.tgz", + "integrity": "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==", "dev": true, "license": "MIT", "optional": true, @@ -678,9 +675,9 @@ } }, "node_modules/@eslint/core": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.13.0.tgz", - "integrity": "sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.14.0.tgz", + "integrity": "sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -728,13 +725,16 @@ } }, "node_modules/@eslint/js": { - "version": "9.26.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.26.0.tgz", - "integrity": "sha512-I9XlJawFdSMvWjDt6wksMCrgns5ggLNfFwFvnShsleWruvXM514Qxk8V246efTw+eo9JABvVz+u3q2RiAowKxQ==", + "version": "9.27.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.27.0.tgz", + "integrity": "sha512-G5JD9Tu5HJEu4z2Uo4aHY2sLV64B7CDMXxFzqzjl3NKd6RVzSXNoE80jk7Y0lJkTTkjiIhBAqmlYwjuBY3tvpA==", "dev": true, "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" } }, "node_modules/@eslint/object-schema": { @@ -748,13 +748,13 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.8.tgz", - "integrity": "sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.1.tgz", + "integrity": "sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.13.0", + "@eslint/core": "^0.14.0", "levn": "^0.4.1" }, "engines": { @@ -828,9 +828,9 @@ } }, "node_modules/@img/sharp-darwin-arm64": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.1.tgz", - "integrity": "sha512-pn44xgBtgpEbZsu+lWf2KNb6OAf70X68k+yk69Ic2Xz11zHR/w24/U49XT7AeRwJ0Px+mhALhU5LPci1Aymk7A==", + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.2.tgz", + "integrity": "sha512-OfXHZPppddivUJnqyKoi5YVeHRkkNE2zUFT2gbpKxp/JZCFYEYubnMg+gOp6lWfasPrTS+KPosKqdI+ELYVDtg==", "cpu": [ "arm64" ], @@ -851,9 +851,9 @@ } }, "node_modules/@img/sharp-darwin-x64": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.1.tgz", - "integrity": "sha512-VfuYgG2r8BpYiOUN+BfYeFo69nP/MIwAtSJ7/Zpxc5QF3KS22z8Pvg3FkrSFJBPNQ7mmcUcYQFBmEQp7eu1F8Q==", + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.2.tgz", + "integrity": "sha512-dYvWqmjU9VxqXmjEtjmvHnGqF8GrVjM2Epj9rJ6BUIXvk8slvNDJbhGFvIoXzkDhrJC2jUxNLz/GUjjvSzfw+g==", "cpu": [ "x64" ], @@ -1027,9 +1027,9 @@ } }, "node_modules/@img/sharp-linux-arm": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.1.tgz", - "integrity": "sha512-anKiszvACti2sGy9CirTlNyk7BjjZPiML1jt2ZkTdcvpLU1YH6CXwRAZCA2UmRXnhiIftXQ7+Oh62Ji25W72jA==", + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.2.tgz", + "integrity": "sha512-0DZzkvuEOqQUP9mo2kjjKNok5AmnOr1jB2XYjkaoNRwpAYMDzRmAqUIa1nRi58S2WswqSfPOWLNOr0FDT3H5RQ==", "cpu": [ "arm" ], @@ -1050,9 +1050,9 @@ } }, "node_modules/@img/sharp-linux-arm64": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.1.tgz", - "integrity": "sha512-kX2c+vbvaXC6vly1RDf/IWNXxrlxLNpBVWkdpRq5Ka7OOKj6nr66etKy2IENf6FtOgklkg9ZdGpEu9kwdlcwOQ==", + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.2.tgz", + "integrity": "sha512-D8n8wgWmPDakc83LORcfJepdOSN6MvWNzzz2ux0MnIbOqdieRZwVYY32zxVx+IFUT8er5KPcyU3XXsn+GzG/0Q==", "cpu": [ "arm64" ], @@ -1073,9 +1073,9 @@ } }, "node_modules/@img/sharp-linux-s390x": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.1.tgz", - "integrity": "sha512-7s0KX2tI9mZI2buRipKIw2X1ufdTeaRgwmRabt5bi9chYfhur+/C1OXg3TKg/eag1W+6CCWLVmSauV1owmRPxA==", + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.2.tgz", + "integrity": "sha512-EGZ1xwhBI7dNISwxjChqBGELCWMGDvmxZXKjQRuqMrakhO8QoMgqCrdjnAqJq/CScxfRn+Bb7suXBElKQpPDiw==", "cpu": [ "s390x" ], @@ -1096,9 +1096,9 @@ } }, "node_modules/@img/sharp-linux-x64": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.1.tgz", - "integrity": "sha512-wExv7SH9nmoBW3Wr2gvQopX1k8q2g5V5Iag8Zk6AVENsjwd+3adjwxtp3Dcu2QhOXr8W9NusBU6XcQUohBZ5MA==", + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.2.tgz", + "integrity": "sha512-sD7J+h5nFLMMmOXYH4DD9UtSNBD05tWSSdWAcEyzqW8Cn5UxXvsHAxmxSesYUsTOBmUnjtxghKDl15EvfqLFbQ==", "cpu": [ "x64" ], @@ -1119,9 +1119,9 @@ } }, "node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.1.tgz", - "integrity": "sha512-DfvyxzHxw4WGdPiTF0SOHnm11Xv4aQexvqhRDAoD00MzHekAj9a/jADXeXYCDFH/DzYruwHbXU7uz+H+nWmSOQ==", + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.2.tgz", + "integrity": "sha512-NEE2vQ6wcxYav1/A22OOxoSOGiKnNmDzCYFOZ949xFmrWZOVII1Bp3NqVVpvj+3UeHMFyN5eP/V5hzViQ5CZNA==", "cpu": [ "arm64" ], @@ -1142,9 +1142,9 @@ } }, "node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.1.tgz", - "integrity": "sha512-pax/kTR407vNb9qaSIiWVnQplPcGU8LRIJpDT5o8PdAx5aAA7AS3X9PS8Isw1/WfqgQorPotjrZL3Pqh6C5EBg==", + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.2.tgz", + "integrity": "sha512-DOYMrDm5E6/8bm/yQLCWyuDJwUnlevR8xtF8bs+gjZ7cyUNYXiSf/E8Kp0Ss5xasIaXSHzb888V1BE4i1hFhAA==", "cpu": [ "x64" ], @@ -1165,9 +1165,9 @@ } }, "node_modules/@img/sharp-wasm32": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.1.tgz", - "integrity": "sha512-YDybQnYrLQfEpzGOQe7OKcyLUCML4YOXl428gOOzBgN6Gw0rv8dpsJ7PqTHxBnXnwXr8S1mYFSLSa727tpz0xg==", + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.2.tgz", + "integrity": "sha512-/VI4mdlJ9zkaq53MbIG6rZY+QRN3MLbR6usYlgITEzi4Rpx5S6LFKsycOQjkOGmqTNmkIdLjEvooFKwww6OpdQ==", "cpu": [ "wasm32" ], @@ -1175,7 +1175,7 @@ "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", "optional": true, "dependencies": { - "@emnapi/runtime": "^1.4.0" + "@emnapi/runtime": "^1.4.3" }, "engines": { "node": "^18.17.0 || ^20.3.0 || >=21.0.0" @@ -1184,10 +1184,30 @@ "url": "https://opencollective.com/libvips" } }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.2.tgz", + "integrity": "sha512-cfP/r9FdS63VA5k0xiqaNaEoGxBg9k7uE+RQGzuK9fHt7jib4zAVVseR9LsE4gJcNWgT6APKMNnCcnyOtmSEUQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, "node_modules/@img/sharp-win32-ia32": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.1.tgz", - "integrity": "sha512-WKf/NAZITnonBf3U1LfdjoMgNO5JYRSlhovhRhMxXVdvWYveM4kM3L8m35onYIdh75cOMCo1BexgVQcCDzyoWw==", + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.2.tgz", + "integrity": "sha512-QLjGGvAbj0X/FXl8n1WbtQ6iVBpWU7JO94u/P2M4a8CFYsvQi4GW2mRy/JqkRx0qpBzaOdKJKw8uc930EX2AHw==", "cpu": [ "ia32" ], @@ -1205,9 +1225,9 @@ } }, "node_modules/@img/sharp-win32-x64": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.1.tgz", - "integrity": "sha512-hw1iIAHpNE8q3uMIRCgGOeDoz9KtFNarFLQclLxr/LK1VBkj8nby18RjFvr6aP7USRYAjTZW6yisnBWMX571Tw==", + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.2.tgz", + "integrity": "sha512-aUdT6zEYtDKCaxkofmmJDJYGCf0+pJg3eU9/oBuqvEeoB9dKI6ZLc/1iLJCTuJQDO4ptntAlkUmHgGjyuobZbw==", "cpu": [ "x64" ], @@ -1333,28 +1353,6 @@ "node": ">=8" } }, - "node_modules/@modelcontextprotocol/sdk": { - "version": "1.11.2", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.11.2.tgz", - "integrity": "sha512-H9vwztj5OAqHg9GockCQC06k1natgcxWQSRpQcPJf6i5+MWBzfKkRtxGbjQf0X2ihii0ffLZCRGbYV2f2bjNCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "content-type": "^1.0.5", - "cors": "^2.8.5", - "cross-spawn": "^7.0.3", - "eventsource": "^3.0.2", - "express": "^5.0.1", - "express-rate-limit": "^7.5.0", - "pkce-challenge": "^5.0.0", - "raw-body": "^3.0.0", - "zod": "^3.23.8", - "zod-to-json-schema": "^3.24.1" - }, - "engines": { - "node": ">=18" - } - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -2235,43 +2233,6 @@ "dev": true, "license": "Apache-2.0" }, - "node_modules/accepts": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", - "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-types": "^3.0.0", - "negotiator": "^1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/mime-types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "^1.54.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/acorn": { "version": "8.14.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", @@ -2526,12 +2487,6 @@ "dev": true, "license": "MIT" }, - "node_modules/autocomplete-js": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/autocomplete-js/-/autocomplete-js-2.7.1.tgz", - "integrity": "sha512-F+1Sj13zbfpbkprKjtyYiaHgBo6YODzNzWgJjgo/p312AeiZVEn3W+NaRRzVZYqMI0Bm7/W36uanp995eNDy+A==", - "license": "MIT" - }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -2585,27 +2540,6 @@ "readable-stream": "^3.4.0" } }, - "node_modules/body-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", - "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "bytes": "^3.1.2", - "content-type": "^1.0.5", - "debug": "^4.4.0", - "http-errors": "^2.0.0", - "iconv-lite": "^0.6.3", - "on-finished": "^2.4.1", - "qs": "^6.14.0", - "raw-body": "^3.0.0", - "type-is": "^2.0.0" - }, - "engines": { - "node": ">=18" - } - }, "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", @@ -2723,14 +2657,14 @@ } }, "node_modules/cacheable": { - "version": "1.8.10", - "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-1.8.10.tgz", - "integrity": "sha512-0ZnbicB/N2R6uziva8l6O6BieBklArWyiGx4GkwAhLKhSHyQtRfM9T1nx7HHuHDKkYB/efJQhz3QJ6x/YqoZzA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-1.9.0.tgz", + "integrity": "sha512-8D5htMCxPDUULux9gFzv30f04Xo3wCnik0oOxKoRTPIBoqA7HtOcJ87uBhQTs3jCfZZTrUBGsYIZOgE0ZRgMAg==", "dev": true, "license": "MIT", "dependencies": { - "hookified": "^1.8.1", - "keyv": "^5.3.2" + "hookified": "^1.8.2", + "keyv": "^5.3.3" } }, "node_modules/cacheable/node_modules/keyv": { @@ -2743,37 +2677,6 @@ "@keyv/serialize": "^1.0.3" } }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -3020,49 +2923,6 @@ "dev": true, "license": "MIT" }, - "node_modules/content-disposition": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", - "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", - "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.6.0" - } - }, "node_modules/copy-anything": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", @@ -3107,20 +2967,6 @@ "dev": true, "license": "MIT" }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/cosmiconfig": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", @@ -3330,9 +3176,9 @@ "license": "CC0-1.0" }, "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3398,20 +3244,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/detect-libc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", - "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", + "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -3500,21 +3336,6 @@ "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/edge-error": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/edge-error/-/edge-error-4.0.2.tgz", @@ -3579,13 +3400,6 @@ "node": ">=18.16.0" } }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true, - "license": "MIT" - }, "node_modules/electron-to-chromium": { "version": "1.5.101", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.101.tgz", @@ -3600,16 +3414,6 @@ "dev": true, "license": "MIT" }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -3701,26 +3505,6 @@ "dev": true, "license": "MIT" }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, "node_modules/es-module-lexer": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz", @@ -3728,19 +3512,6 @@ "dev": true, "license": "MIT" }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/esbuild": { "version": "0.25.0", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.0.tgz", @@ -3805,13 +3576,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true, - "license": "MIT" - }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -3826,9 +3590,9 @@ } }, "node_modules/eslint": { - "version": "9.26.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.26.0.tgz", - "integrity": "sha512-Hx0MOjPh6uK9oq9nVsATZKE/Wlbai7KFjfCuw9UHaguDW3x+HF0O5nIi3ud39TWgrTjTO5nHxmL3R1eANinWHQ==", + "version": "9.27.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.27.0.tgz", + "integrity": "sha512-ixRawFQuMB9DZ7fjU3iGGganFDp3+45bPOdaRurcFHSXO1e/sYwUX/FtQZpLZJR6SjMoJH8hR2pPEAfDyCoU2Q==", "dev": true, "license": "MIT", "dependencies": { @@ -3836,14 +3600,13 @@ "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.20.0", "@eslint/config-helpers": "^0.2.1", - "@eslint/core": "^0.13.0", + "@eslint/core": "^0.14.0", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.26.0", - "@eslint/plugin-kit": "^0.2.8", + "@eslint/js": "9.27.0", + "@eslint/plugin-kit": "^0.3.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", - "@modelcontextprotocol/sdk": "^1.8.0", "@types/estree": "^1.0.6", "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", @@ -3867,8 +3630,7 @@ "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "zod": "^3.24.2" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" @@ -3989,16 +3751,6 @@ "node": ">=0.10.0" } }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", @@ -4009,111 +3761,6 @@ "node": ">=0.8.x" } }, - "node_modules/eventsource": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", - "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eventsource-parser": "^3.0.1" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/eventsource-parser": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.1.tgz", - "integrity": "sha512-VARTJ9CYeuQYb0pZEPbzi740OWFgpHe7AYJ2WFZVnUDUQp5Dk2yJUgF36YsZ81cOyxT0QxmXD2EQpapAouzWVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/express": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", - "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "accepts": "^2.0.0", - "body-parser": "^2.2.0", - "content-disposition": "^1.0.0", - "content-type": "^1.0.5", - "cookie": "^0.7.1", - "cookie-signature": "^1.2.1", - "debug": "^4.4.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "finalhandler": "^2.1.0", - "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "merge-descriptors": "^2.0.0", - "mime-types": "^3.0.0", - "on-finished": "^2.4.1", - "once": "^1.4.0", - "parseurl": "^1.3.3", - "proxy-addr": "^2.0.7", - "qs": "^6.14.0", - "range-parser": "^1.2.1", - "router": "^2.2.0", - "send": "^1.1.0", - "serve-static": "^2.2.0", - "statuses": "^2.0.1", - "type-is": "^2.0.1", - "vary": "^1.1.2" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/express-rate-limit": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.0.tgz", - "integrity": "sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://github.com/sponsors/express-rate-limit" - }, - "peerDependencies": { - "express": "^4.11 || 5 || ^5.0.0-beta.1" - } - }, - "node_modules/express/node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/mime-types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "^1.54.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -4258,24 +3905,6 @@ "node": ">=8" } }, - "node_modules/finalhandler": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", - "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "on-finished": "^2.4.1", - "parseurl": "^1.3.3", - "statuses": "^2.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -4334,26 +3963,6 @@ "node": ">=8" } }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", - "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", @@ -4415,45 +4024,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -4538,9 +4108,9 @@ } }, "node_modules/globals": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-16.1.0.tgz", - "integrity": "sha512-aibexHNbb/jiUSObBgpHLj+sIuUmJnYcgXBlrfsiDZ9rt4aF2TFRbyLgZ2iFQuVZ1K5Mx3FVkbKRSgKrbK3K2g==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.2.0.tgz", + "integrity": "sha512-O+7l9tPdHCU320IigZZPj5zmRCFG9xHmx9cU8FqU2Rp+JN714seHV+2S9+JslCpY4gJwU2vOGox0wzgae/MCEg==", "dev": true, "license": "MIT", "engines": { @@ -4557,19 +4127,6 @@ "dev": true, "license": "MIT" }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -4587,19 +4144,6 @@ "node": ">=8" } }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -4624,9 +4168,9 @@ } }, "node_modules/hookified": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.8.2.tgz", - "integrity": "sha512-5nZbBNP44sFCDjSoB//0N7m508APCgbQ4mGGo1KJGBYyCKNHfry1Pvd0JVHZIxjdnqn8nFRBAN/eFB6Rk/4w5w==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.9.0.tgz", + "integrity": "sha512-2yEEGqphImtKIe1NXWEhu6yD3hlFR4Mxk4Mtp3XEyScpSt4pQ4ymmXA1zzxZpj99QkFK+nN0nzjeb2+RUi/6CQ==", "dev": true, "license": "MIT" }, @@ -4643,29 +4187,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, "license": "MIT", + "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -4834,16 +4362,6 @@ "@stencil/core": "^4.30.0" } }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, "node_modules/is-arrayish": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", @@ -4953,13 +4471,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-promise": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", - "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", - "dev": true, - "license": "MIT" - }, "node_modules/is-what": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", @@ -5346,16 +4857,6 @@ "semver": "bin/semver" } }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, "node_modules/mathml-tag-names": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", @@ -5374,16 +4875,6 @@ "dev": true, "license": "CC0-1.0" }, - "node_modules/media-typer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", - "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/meow": { "version": "13.2.0", "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", @@ -5397,19 +4888,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/merge-descriptors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", - "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -5542,16 +5020,6 @@ "node": ">= 4.4.x" } }, - "node_modules/negotiator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", @@ -5596,42 +5064,6 @@ "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -5760,16 +5192,6 @@ "node": ">= 0.10" } }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -5807,16 +5229,6 @@ "dev": true, "license": "MIT" }, - "node_modules/path-to-regexp": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", - "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - } - }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -5848,16 +5260,6 @@ "node": ">=6" } }, - "node_modules/pkce-challenge": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.0.tgz", - "integrity": "sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16.20.0" - } - }, "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -6155,20 +5557,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", @@ -6187,22 +5575,6 @@ "node": ">=6" } }, - "node_modules/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -6234,32 +5606,6 @@ "safe-buffer": "^5.1.0" } }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", - "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.6.3", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -6466,23 +5812,6 @@ "fsevents": "~2.3.2" } }, - "node_modules/router": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", - "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "depd": "^2.0.0", - "is-promise": "^4.0.0", - "parseurl": "^1.3.3", - "path-to-regexp": "^8.0.0" - }, - "engines": { - "node": ">= 18" - } - }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -6543,7 +5872,8 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true }, "node_modules/sax": { "version": "1.4.1", @@ -6628,9 +5958,9 @@ "license": "BSD-3-Clause" }, "node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, "license": "ISC", "bin": { @@ -6640,52 +5970,6 @@ "node": ">=10" } }, - "node_modules/send": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", - "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.3.5", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "mime-types": "^3.0.1", - "ms": "^2.1.3", - "on-finished": "^2.4.1", - "range-parser": "^1.2.1", - "statuses": "^2.0.1" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/send/node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/send/node_modules/mime-types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "^1.54.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/serialize-javascript": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", @@ -6696,29 +5980,6 @@ "randombytes": "^2.1.0" } }, - "node_modules/serve-static": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", - "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "parseurl": "^1.3.3", - "send": "^1.2.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true, - "license": "ISC" - }, "node_modules/shallow-clone": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", @@ -6733,16 +5994,16 @@ } }, "node_modules/sharp": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.1.tgz", - "integrity": "sha512-1j0w61+eVxu7DawFJtnfYcvSv6qPFvfTaqzTQ2BLknVhHTwGS8sc63ZBF4rzkWMBVKybo4S5OBtDdZahh2A1xg==", + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.2.tgz", + "integrity": "sha512-lszvBmB9QURERtyKT2bNmsgxXK0ShJrL/fvqlonCo7e6xBF8nT8xU6pW+PMIbLsz0RxQk3rgH9kd8UmvOzlMJg==", "dev": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { "color": "^4.2.3", - "detect-libc": "^2.0.3", - "semver": "^7.7.1" + "detect-libc": "^2.0.4", + "semver": "^7.7.2" }, "engines": { "node": "^18.17.0 || ^20.3.0 || >=21.0.0" @@ -6751,8 +6012,8 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-darwin-arm64": "0.34.1", - "@img/sharp-darwin-x64": "0.34.1", + "@img/sharp-darwin-arm64": "0.34.2", + "@img/sharp-darwin-x64": "0.34.2", "@img/sharp-libvips-darwin-arm64": "1.1.0", "@img/sharp-libvips-darwin-x64": "1.1.0", "@img/sharp-libvips-linux-arm": "1.1.0", @@ -6762,15 +6023,16 @@ "@img/sharp-libvips-linux-x64": "1.1.0", "@img/sharp-libvips-linuxmusl-arm64": "1.1.0", "@img/sharp-libvips-linuxmusl-x64": "1.1.0", - "@img/sharp-linux-arm": "0.34.1", - "@img/sharp-linux-arm64": "0.34.1", - "@img/sharp-linux-s390x": "0.34.1", - "@img/sharp-linux-x64": "0.34.1", - "@img/sharp-linuxmusl-arm64": "0.34.1", - "@img/sharp-linuxmusl-x64": "0.34.1", - "@img/sharp-wasm32": "0.34.1", - "@img/sharp-win32-ia32": "0.34.1", - "@img/sharp-win32-x64": "0.34.1" + "@img/sharp-linux-arm": "0.34.2", + "@img/sharp-linux-arm64": "0.34.2", + "@img/sharp-linux-s390x": "0.34.2", + "@img/sharp-linux-x64": "0.34.2", + "@img/sharp-linuxmusl-arm64": "0.34.2", + "@img/sharp-linuxmusl-x64": "0.34.2", + "@img/sharp-wasm32": "0.34.2", + "@img/sharp-win32-arm64": "0.34.2", + "@img/sharp-win32-ia32": "0.34.2", + "@img/sharp-win32-x64": "0.34.2" } }, "node_modules/shebang-command": { @@ -6796,82 +6058,6 @@ "node": ">=8" } }, - "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", @@ -6964,16 +6150,6 @@ "source-map": "^0.6.0" } }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -7059,9 +6235,9 @@ } }, "node_modules/stylelint": { - "version": "16.19.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.19.1.tgz", - "integrity": "sha512-C1SlPZNMKl+d/C867ZdCRthrS+6KuZ3AoGW113RZCOL0M8xOGpgx7G70wq7lFvqvm4dcfdGFVLB/mNaLFChRKw==", + "version": "16.20.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.20.0.tgz", + "integrity": "sha512-B5Myu9WRxrgKuLs3YyUXLP2H0mrbejwNxPmyADlACWwFsrL8Bmor/nTSh4OMae5sHjOz6gkSeccQH34gM4/nAw==", "dev": true, "funding": [ { @@ -7085,15 +6261,15 @@ "cosmiconfig": "^9.0.0", "css-functions-list": "^3.2.3", "css-tree": "^3.1.0", - "debug": "^4.3.7", + "debug": "^4.4.1", "fast-glob": "^3.3.3", "fastest-levenshtein": "^1.0.16", - "file-entry-cache": "^10.0.8", + "file-entry-cache": "^10.1.0", "global-modules": "^2.0.0", "globby": "^11.1.0", "globjoin": "^0.1.4", "html-tags": "^3.3.1", - "ignore": "^7.0.3", + "ignore": "^7.0.4", "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", "known-css-properties": "^0.36.0", @@ -7313,25 +6489,25 @@ "license": "MIT" }, "node_modules/stylelint/node_modules/file-entry-cache": { - "version": "10.0.8", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-10.0.8.tgz", - "integrity": "sha512-FGXHpfmI4XyzbLd3HQ8cbUcsFGohJpZtmQRHr8z8FxxtCe2PcpgIlVLwIgunqjvRmXypBETvwhV4ptJizA+Y1Q==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-10.1.0.tgz", + "integrity": "sha512-Et/ex6smi3wOOB+n5mek+Grf7P2AxZR5ueqRUvAAn4qkyatXi3cUC1cuQXVkX0VlzBVsN4BkWJFmY/fYiRTdww==", "dev": true, "license": "MIT", "dependencies": { - "flat-cache": "^6.1.8" + "flat-cache": "^6.1.9" } }, "node_modules/stylelint/node_modules/flat-cache": { - "version": "6.1.8", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.8.tgz", - "integrity": "sha512-R6MaD3nrJAtO7C3QOuS79ficm2pEAy++TgEUD8ii1LVlbcgZ9DtASLkt9B+RZSFCzm7QHDMlXPsqqB6W2Pfr1Q==", + "version": "6.1.9", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.9.tgz", + "integrity": "sha512-DUqiKkTlAfhtl7g78IuwqYM+YqvT+as0mY+EVk6mfimy19U79pJCzDZQsnqk3Ou/T6hFXWLGbwbADzD/c8Tydg==", "dev": true, "license": "MIT", "dependencies": { - "cacheable": "^1.8.9", + "cacheable": "^1.9.0", "flatted": "^3.3.3", - "hookified": "^1.8.1" + "hookified": "^1.8.2" } }, "node_modules/stylelint/node_modules/globby": { @@ -7366,9 +6542,9 @@ } }, "node_modules/stylelint/node_modules/ignore": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.3.tgz", - "integrity": "sha512-bAH5jbK/F3T3Jls4I0SO1hmPR0dKU0a7+SY6n1yzRtG54FLO8d6w/nxLFX2Nb7dBu6cCWXPaAME6cYqFUMmuCA==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.4.tgz", + "integrity": "sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==", "dev": true, "license": "MIT", "engines": { @@ -7675,16 +6851,6 @@ "node": ">=8.0" } }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, "node_modules/truncatise": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/truncatise/-/truncatise-0.0.8.tgz", @@ -7712,44 +6878,6 @@ "node": ">= 0.8.0" } }, - "node_modules/type-is": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", - "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", - "dev": true, - "license": "MIT", - "dependencies": { - "content-type": "^1.0.5", - "media-typer": "^1.1.0", - "mime-types": "^3.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/type-is/node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/type-is/node_modules/mime-types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "^1.54.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/undici-types": { "version": "6.20.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", @@ -7767,16 +6895,6 @@ "node": ">= 10.0.0" } }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/update-browserslist-db": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz", @@ -7825,16 +6943,6 @@ "dev": true, "license": "MIT" }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/vite": { "version": "6.3.5", "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", @@ -7911,17 +7019,17 @@ } }, "node_modules/vite-plugin-static-copy": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/vite-plugin-static-copy/-/vite-plugin-static-copy-2.3.1.tgz", - "integrity": "sha512-EfsPcBm3ewg3UMG8RJaC0ADq6/qnUZnokXx4By4+2cAcipjT9i0Y0owIJGqmZI7d6nxk4qB1q5aXOwNuSyPdyA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/vite-plugin-static-copy/-/vite-plugin-static-copy-3.0.0.tgz", + "integrity": "sha512-Uki9pPUQ4ZnoMEdIFabvoh9h6Bh9Q1m3iF7BrZvoiF30reREpJh2gZb4jOnW1/uYFzyRiLCmFSkM+8hwiq1vWQ==", "dev": true, "license": "MIT", "dependencies": { "chokidar": "^3.5.3", - "fast-glob": "^3.2.11", - "fs-extra": "^11.1.0", + "fs-extra": "^11.3.0", "p-map": "^7.0.3", - "picocolors": "^1.0.0" + "picocolors": "^1.1.1", + "tinyglobby": "^0.2.13" }, "engines": { "node": "^18.0.0 || >=20.0.0" @@ -8033,9 +7141,9 @@ } }, "node_modules/webpack": { - "version": "5.99.8", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.8.tgz", - "integrity": "sha512-lQ3CPiSTpfOnrEGeXDwoq5hIGzSjmwD72GdfVzF7CQAI7t47rJG9eDWvcEkEn3CUQymAElVvDg3YNTlCYj+qUQ==", + "version": "5.99.9", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.9.tgz", + "integrity": "sha512-brOPwM3JnmOa+7kd3NsmOUOwbDAj8FT9xDsG3IW0MgbN9yZV7Oi/s/+MNQ/EcSMqw7qfoRyXPoeEWT8zLVdVGg==", "dev": true, "license": "MIT", "dependencies": { @@ -8285,26 +7393,6 @@ "engines": { "node": ">= 10" } - }, - "node_modules/zod": { - "version": "3.24.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.4.tgz", - "integrity": "sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, - "node_modules/zod-to-json-schema": { - "version": "3.24.5", - "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.5.tgz", - "integrity": "sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==", - "dev": true, - "license": "ISC", - "peerDependencies": { - "zod": "^3.24.1" - } } } } diff --git a/client/simple/package.json b/client/simple/package.json index f0cb956bb..7fc4d3c79 100644 --- a/client/simple/package.json +++ b/client/simple/package.json @@ -9,33 +9,30 @@ "icons.html": "node theme_icons.js" }, "devDependencies": { - "@eslint/js": "^9.26.0", + "@eslint/js": "^9.27.0", "copy-webpack-plugin": "^13.0.0", "css-loader": "^7.1.2", "edge.js": "^6.2.1", - "eslint": "^9.26.0", + "eslint": "^9.27.0", "filemanager-webpack-plugin": "^8.0.0", - "globals": "^16.1.0", + "globals": "^16.2.0", "ionicons": "^8.0.8", "leaflet": "^1.9.4", "less": "^4.3.0", "less-loader": "^12.3.0", "normalize.css": "^8.0.1", - "sharp": "^0.34.1", + "sharp": "^0.34.2", "style-loader": "^4.0.0", - "stylelint": "^16.19.1", + "stylelint": "^16.20.0", "stylelint-config-standard": "^38.0.0", "stylelint-config-standard-less": "^3.0.1", "stylelint-prettier": "^5.0.3", "svgo": "^3.3.2", "swiped-events": "^1.2.0", "vite": "^6.3.5", - "vite-plugin-static-copy": "^2.3.1", + "vite-plugin-static-copy": "^3.0.0", "vite-plugin-stylelint": "^6.0.0", - "webpack": "^5.99.8", + "webpack": "^5.99.9", "webpack-cli": "^6.0.1" - }, - "dependencies": { - "autocomplete-js": "^2.7.1" } } diff --git a/client/simple/src/js/main/search.js b/client/simple/src/js/main/search.js index aca146c41..c252dfdb5 100644 --- a/client/simple/src/js/main/search.js +++ b/client/simple/src/js/main/search.js @@ -1,14 +1,13 @@ /* SPDX-License-Identifier: AGPL-3.0-or-later */ /* exported AutoComplete */ -import AutoComplete from "../../../node_modules/autocomplete-js/dist/autocomplete.js"; - (function (w, d, searxng) { 'use strict'; var qinput_id = "q", qinput; const isMobile = window.matchMedia("only screen and (max-width: 50em)").matches; + const isResultsPage = document.querySelector("main").id == "main_results"; function submitIfQuery () { if (qinput.value.length > 0) { @@ -38,8 +37,62 @@ import AutoComplete from "../../../node_modules/autocomplete-js/dist/autocomple qinput.addEventListener('input', updateClearButton, false); } + const fetchResults = async (query) => { + let request; + if (searxng.settings.method === 'GET') { + const reqParams = new URLSearchParams(); + reqParams.append("q", query); + request = fetch("./autocompleter?" + reqParams.toString()); + } else { + const formData = new FormData(); + formData.append("q", query); + request = fetch("./autocompleter", { + method: 'POST', + body: formData, + }); + } + + request.then(async function (response) { + const results = await response.json(); + + if (!results) return; + + const autocomplete = d.querySelector(".autocomplete"); + const autocompleteList = d.querySelector(".autocomplete ul"); + autocomplete.classList.add("open"); + autocompleteList.innerHTML = ""; + + // show an error message that no result was found + if (!results[1] || results[1].length == 0) { + const noItemFoundMessage = document.createElement("li"); + noItemFoundMessage.classList.add('no-item-found'); + noItemFoundMessage.innerHTML = searxng.settings.translations.no_item_found; + autocompleteList.appendChild(noItemFoundMessage); + return; + } + + for (let result of results[1]) { + const li = document.createElement("li"); + li.innerText = result; + + searxng.on(li, 'mousedown', () => { + qinput.value = result; + const form = d.querySelector("#search"); + form.submit(); + autocomplete.classList.remove('open'); + }); + autocompleteList.appendChild(li); + } + }); + }; + searxng.ready(function () { + // focus search input on large screens + if (!isMobile && !isResultsPage) document.getElementById("q").focus(); + qinput = d.getElementById(qinput_id); + const autocomplete = d.querySelector(".autocomplete"); + const autocompleteList = d.querySelector(".autocomplete ul"); if (qinput !== null) { // clear button @@ -47,109 +100,45 @@ import AutoComplete from "../../../node_modules/autocomplete-js/dist/autocomple // autocompleter if (searxng.settings.autocomplete) { - searxng.autocomplete = AutoComplete.call(w, { - Url: "./autocompleter", - EmptyMessage: searxng.settings.translations.no_item_found, - HttpMethod: searxng.settings.method, - HttpHeaders: { - "Content-type": "application/x-www-form-urlencoded", - "X-Requested-With": "XMLHttpRequest" - }, - MinChars: searxng.settings.autocomplete_min, - Delay: 300, - _Position: function () {}, - _Open: function () { - var params = this; - Array.prototype.forEach.call(this.DOMResults.getElementsByTagName("li"), function (li) { - if (li.getAttribute("class") != "locked") { - li.onmousedown = function () { - params._Select(li); - }; - } - }); - }, - _Select: function (item) { - AutoComplete.defaults._Select.call(this, item); - var form = item.closest('form'); - if (form) { - form.submit(); + searxng.on(qinput, 'input', () => { + const query = qinput.value; + if (query.length < searxng.settings.autocomplete_min) return; + + setTimeout(() => { + if (query == qinput.value) fetchResults(query); + }, 300); + }); + + searxng.on(qinput, 'keyup', (e) => { + let currentIndex = -1; + const listItems = autocompleteList.children; + for (let i = 0; i < listItems.length; i++) { + if (listItems[i].classList.contains('active')) { + currentIndex = i; + break; } - }, - _MinChars: function () { - if (this.Input.value.indexOf('!') > -1) { - return 0; - } else { - return AutoComplete.defaults._MinChars.call(this); - } - }, - KeyboardMappings: Object.assign({}, AutoComplete.defaults.KeyboardMappings, { - "KeyUpAndDown_up": Object.assign({}, AutoComplete.defaults.KeyboardMappings.KeyUpAndDown_up, { - Callback: function (event) { - AutoComplete.defaults.KeyboardMappings.KeyUpAndDown_up.Callback.call(this, event); - var liActive = this.DOMResults.querySelector("li.active"); - if (liActive) { - AutoComplete.defaults._Select.call(this, liActive); - } - }, - }), - "Tab": Object.assign({}, AutoComplete.defaults.KeyboardMappings.Enter, { - Conditions: [{ - Is: 9, - Not: false - }], - Callback: function (event) { - if (this.DOMResults.getAttribute("class").indexOf("open") != -1) { - var liActive = this.DOMResults.querySelector("li.active"); - if (liActive !== null) { - AutoComplete.defaults._Select.call(this, liActive); - event.preventDefault(); - } - } - }, - }) - }), - }, "#" + qinput_id); - } - - /* - Monkey patch autocomplete.js to fix a bug - With the POST method, the values are not URL encoded: query like "1 + 1" are sent as "1 1" since space are URL encoded as plus. - See HTML specifications: - * HTML5: https://url.spec.whatwg.org/#concept-urlencoded-serializer - * HTML4: https://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1 - - autocomplete.js does not URL encode the name and values: - https://github.com/autocompletejs/autocomplete.js/blob/87069524f3b95e68f1b54d8976868e0eac1b2c83/src/autocomplete.ts#L665 - - The monkey patch overrides the compiled version of the ajax function. - See https://github.com/autocompletejs/autocomplete.js/blob/87069524f3b95e68f1b54d8976868e0eac1b2c83/dist/autocomplete.js#L143-L158 - The patch changes only the line 156 from - params.Request.send(params._QueryArg() + "=" + params._Pre()); - to - params.Request.send(encodeURIComponent(params._QueryArg()) + "=" + encodeURIComponent(params._Pre())); - - Related to: - * https://github.com/autocompletejs/autocomplete.js/issues/78 - * https://github.com/searxng/searxng/issues/1695 - */ - AutoComplete.prototype.ajax = function (params, request, timeout) { - if (timeout === void 0) { timeout = true; } - if (params.$AjaxTimer) { - window.clearTimeout(params.$AjaxTimer); - } - if (timeout === true) { - params.$AjaxTimer = window.setTimeout(AutoComplete.prototype.ajax.bind(null, params, request, false), params.Delay); - } else { - if (params.Request) { - params.Request.abort(); } - params.Request = request; - params.Request.send(encodeURIComponent(params._QueryArg()) + "=" + encodeURIComponent(params._Pre())); - } - }; - if (!isMobile && document.querySelector('.index_endpoint')) { - qinput.focus(); + let newCurrentIndex = -1; + if (e.key === "ArrowUp") { + if (currentIndex >= 0) listItems[currentIndex].classList.remove('active'); + // we need to add listItems.length to the index calculation here because the JavaScript modulos + // operator doesn't work with negative numbers + newCurrentIndex = (currentIndex - 1 + listItems.length) % listItems.length; + } else if (e.key === "ArrowDown") { + if (currentIndex >= 0) listItems[currentIndex].classList.remove('active'); + newCurrentIndex = (currentIndex + 1) % listItems.length; + } else if (e.key === "Tab" || e.key === "Enter") { + autocomplete.classList.remove('open'); + } + + if (newCurrentIndex != -1) { + const selectedItem = listItems[newCurrentIndex]; + selectedItem.classList.add('active'); + + if (!selectedItem.classList.contains('no-item-found')) qinput.value = selectedItem.innerText; + } + }); } } @@ -184,7 +173,7 @@ import AutoComplete from "../../../node_modules/autocomplete-js/dist/autocomple categoryButton.classList.remove("selected"); } button.classList.add("selected"); - }) + }); } // override form submit action to update the actually selected categories diff --git a/client/simple/src/less/autocomplete.less b/client/simple/src/less/autocomplete.less index 8285ff2c6..93efb875e 100644 --- a/client/simple/src/less/autocomplete.less +++ b/client/simple/src/less/autocomplete.less @@ -3,6 +3,7 @@ .autocomplete { position: absolute; width: @search-width; + max-width: calc(100% - 2 * @search-padding-horizontal); max-height: 0; overflow-y: hidden; .ltr-text-align-left(); @@ -65,8 +66,6 @@ @media screen and (max-width: @phone) { .autocomplete { - width: 100%; - > ul > li { padding: 1rem; } diff --git a/client/simple/src/less/definitions.less b/client/simple/src/less/definitions.less index 395a02cde..d2d14e35d 100644 --- a/client/simple/src/less/definitions.less +++ b/client/simple/src/less/definitions.less @@ -287,8 +287,9 @@ @results-image-row-height: 12rem; @results-image-row-height-phone: 10rem; @search-width: 44rem; -// heigh of #search, see detail.less +// height of #search, see detail.less @search-height: 13rem; +@search-padding-horizontal: 0.5rem; /// Device Size /// @desktop > @tablet diff --git a/client/simple/src/less/search.less b/client/simple/src/less/search.less index 460ea09fa..bc49ffadc 100644 --- a/client/simple/src/less/search.less +++ b/client/simple/src/less/search.less @@ -131,7 +131,7 @@ button.category_button { } #search_view { - padding: 0.5rem 0.3rem 0 0.5rem; + padding: 0.5rem @search-padding-horizontal 0 @search-padding-horizontal; grid-area: search; body.results_endpoint & { @@ -141,7 +141,8 @@ button.category_button { .search_box { border-radius: 0.8rem; - width: @search-width; + width: 100%; + max-width: @search-width; display: inline-flex; flex-direction: row; white-space: nowrap; @@ -291,8 +292,7 @@ html.no-js #clear_search.hide_if_nojs { } .search_box { - width: 98%; - display: flex; + width: 100%; } #q { diff --git a/container/Dockerfile b/container/Dockerfile index b0530dfec..d7bc83802 100644 --- a/container/Dockerfile +++ b/container/Dockerfile @@ -1,14 +1,4 @@ -FROM docker.io/library/python:3.13-slim AS builder - -RUN apt-get update \ - && apt-get install -y --no-install-recommends \ - build-essential \ - brotli \ - # uwsgi - libpcre3-dev \ - && rm -rf /var/lib/apt/lists/* - -WORKDIR /usr/local/searxng/ +FROM ghcr.io/searxng/base:searxng-builder AS builder COPY ./requirements.txt ./requirements.txt @@ -19,38 +9,15 @@ RUN --mount=type=cache,id=pip,target=/root/.cache/pip python -m venv ./venv \ COPY ./searx/ ./searx/ -ARG TIMESTAMP_SETTINGS=0 -ARG TIMESTAMP_UWSGI=0 +ARG TIMESTAMP_SETTINGS="0" RUN python -m compileall -q searx \ && touch -c --date=@$TIMESTAMP_SETTINGS ./searx/settings.yml \ - && touch -c --date=@$TIMESTAMP_UWSGI ./container/uwsgi.ini \ - && find /usr/local/searxng/searx/static \ - \( -name '*.html' -o -name '*.css' -o -name '*.js' -o -name '*.svg' -o -name '*.ttf' -o -name '*.eot' \) \ + && find ./searx/static \ + \( -name "*.html" -o -name "*.css" -o -name "*.js" -o -name "*.svg" -o -name "*.ttf" -o -name "*.eot" \) \ -type f -exec gzip -9 -k {} + -exec brotli --best {} + -ARG SEARXNG_UID=977 -ARG SEARXNG_GID=977 - -RUN grep -m1 root /etc/group > /tmp/.searxng.group \ - && grep -m1 root /etc/passwd > /tmp/.searxng.passwd \ - && echo "searxng:x:$SEARXNG_GID:" >> /tmp/.searxng.group \ - && echo "searxng:x:$SEARXNG_UID:$SEARXNG_GID:searxng:/usr/local/searxng:/bin/bash" >> /tmp/.searxng.passwd - -FROM docker.io/library/python:3.13-slim - -RUN apt-get update \ - && apt-get install -y --no-install-recommends \ - # healthcheck - wget \ - # uwsgi - libpcre3 \ - libxml2 \ - mailcap \ - && rm -rf /var/lib/apt/lists/* - -COPY --chown=root:root --from=builder /tmp/.searxng.passwd /etc/passwd -COPY --chown=root:root --from=builder /tmp/.searxng.group /etc/group +FROM ghcr.io/searxng/base:searxng AS dist ARG LABEL_DATE="0001-01-01T00:00:00Z" ARG GIT_URL="unspecified" @@ -58,37 +25,35 @@ ARG SEARXNG_GIT_VERSION="unspecified" ARG LABEL_VCS_REF="unspecified" ARG LABEL_VCS_URL="unspecified" -WORKDIR /usr/local/searxng/ - COPY --chown=searxng:searxng --from=builder /usr/local/searxng/venv/ ./venv/ COPY --chown=searxng:searxng --from=builder /usr/local/searxng/searx/ ./searx/ -COPY --chown=searxng:searxng ./container/ ./container/ +COPY --chown=searxng:searxng ./container/config/ ./.template/ +COPY --chown=searxng:searxng ./container/entrypoint.sh ./entrypoint.sh + +ARG TIMESTAMP_UWSGI="0" + +RUN touch -c --date=@$TIMESTAMP_UWSGI ./.template/uwsgi.ini LABEL org.opencontainers.image.authors="searxng <$GIT_URL>" \ - org.opencontainers.image.created=$LABEL_DATE \ + org.opencontainers.image.created="$LABEL_DATE" \ org.opencontainers.image.description="A privacy-respecting, hackable metasearch engine" \ org.opencontainers.image.documentation="https://github.com/searxng/searxng-docker" \ org.opencontainers.image.licenses="AGPL-3.0-or-later" \ - org.opencontainers.image.revision=$LABEL_VCS_REF \ - org.opencontainers.image.source=$LABEL_VCS_URL \ + org.opencontainers.image.revision="$LABEL_VCS_REF" \ + org.opencontainers.image.source="$LABEL_VCS_URL" \ org.opencontainers.image.title="searxng" \ - org.opencontainers.image.url=$LABEL_VCS_URL \ - org.opencontainers.image.version=$SEARXNG_GIT_VERSION + org.opencontainers.image.url="$LABEL_VCS_URL" \ + org.opencontainers.image.version="$SEARXNG_GIT_VERSION" -ENV CONFIG_PATH=/etc/searxng \ - DATA_PATH=/var/cache/searxng - -ENV SEARXNG_VERSION=$SEARXNG_GIT_VERSION \ - INSTANCE_NAME=searxng \ +ENV SEARXNG_VERSION="$SEARXNG_GIT_VERSION" \ + INSTANCE_NAME="SearXNG" \ AUTOCOMPLETE="" \ BASE_URL="" \ - BIND_ADDRESS=[::]:8080 \ - MORTY_KEY="" \ - MORTY_URL="" \ - SEARXNG_SETTINGS_PATH=$CONFIG_PATH/settings.yml \ - UWSGI_SETTINGS_PATH=$CONFIG_PATH/uwsgi.ini \ - UWSGI_WORKERS=%k \ - UWSGI_THREADS=4 + BIND_ADDRESS="[::]:8080" \ + SEARXNG_SETTINGS_PATH="$CONFIG_PATH/settings.yml" \ + UWSGI_SETTINGS_PATH="$CONFIG_PATH/uwsgi.ini" \ + UWSGI_WORKERS="%k" \ + UWSGI_THREADS="4" VOLUME $CONFIG_PATH VOLUME $DATA_PATH @@ -97,4 +62,4 @@ EXPOSE 8080 HEALTHCHECK CMD wget --quiet --tries=1 --spider http://localhost:8080/healthz || exit 1 -ENTRYPOINT ["/usr/local/searxng/container/docker-entrypoint.sh"] +ENTRYPOINT ["/usr/local/searxng/entrypoint.sh"] diff --git a/container/base-builder.yml b/container/base-builder.yml new file mode 100644 index 000000000..db84ae2f5 --- /dev/null +++ b/container/base-builder.yml @@ -0,0 +1,25 @@ +contents: + keyring: + - https://packages.wolfi.dev/os/wolfi-signing.rsa.pub + repositories: + - https://packages.wolfi.dev/os + packages: + - wolfi-base + - build-base + - python-3.13-dev + - py3-pip + - brotli + +entrypoint: + command: /bin/sh -l + +work-dir: /usr/local/searxng/ + +environment: + PATH: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin + SSL_CERT_FILE: /etc/ssl/certs/ca-certificates.crt + HISTFILE: /dev/null + +archs: + - x86_64 + - aarch64 diff --git a/container/base.yml b/container/base.yml new file mode 100644 index 000000000..55fff617a --- /dev/null +++ b/container/base.yml @@ -0,0 +1,61 @@ +contents: + keyring: + - https://packages.wolfi.dev/os/wolfi-signing.rsa.pub + repositories: + - https://packages.wolfi.dev/os + packages: + - wolfi-baselayout + - ca-certificates-bundle + - busybox + - python-3.13 + # healthcheck + - wget + # uwsgi + - mailcap + +entrypoint: + command: /bin/sh -l + +work-dir: /usr/local/searxng/ + +accounts: + groups: + - groupname: searxng + gid: 977 + users: + - username: searxng + uid: 977 + shell: /bin/ash + +environment: + PATH: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin + SSL_CERT_FILE: /etc/ssl/certs/ca-certificates.crt + HISTFILE: /dev/null + CONFIG_PATH: /etc/searxng + DATA_PATH: /var/cache/searxng + +paths: + # Workdir + - path: /usr/local/searxng/ + type: directory + uid: 977 + gid: 977 + permissions: 0o755 + + # Config volume + - path: /etc/searxng/ + type: directory + uid: 977 + gid: 977 + permissions: 0o755 + + # Data volume + - path: /var/cache/searxng/ + type: directory + uid: 977 + gid: 977 + permissions: 0o755 + +archs: + - x86_64 + - aarch64 diff --git a/container/uwsgi.ini b/container/config/uwsgi.ini similarity index 100% rename from container/uwsgi.ini rename to container/config/uwsgi.ini diff --git a/container/docker-entrypoint.sh b/container/docker-entrypoint.sh deleted file mode 100755 index ee14b2f05..000000000 --- a/container/docker-entrypoint.sh +++ /dev/null @@ -1,126 +0,0 @@ -#!/bin/sh - -help() { - cat <`__. In the :origin:`Dockerfile` the ENTRYPOINT_ is defined as -:origin:`container/docker-entrypoint.sh` +:origin:`container/entrypoint.sh` .. code:: sh docker run --rm -it searxng/searxng -h -.. program-output:: ../container/docker-entrypoint.sh -h +.. program-output:: ../container/entrypoint.sh -h diff --git a/docs/admin/settings/settings_search.rst b/docs/admin/settings/settings_search.rst index 6ce29b809..06ad03b46 100644 --- a/docs/admin/settings/settings_search.rst +++ b/docs/admin/settings/settings_search.rst @@ -41,6 +41,7 @@ - ``duckduckgo`` - ``google`` - ``mwmbl`` + - ``naver`` - ``quark`` - ``qwant`` - ``seznam`` diff --git a/requirements-dev.txt b/requirements-dev.txt index 63c5fe842..418824b03 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -4,7 +4,7 @@ cov-core==1.15.0 black==24.3.0 pylint==3.3.7 splinter==0.21.0 -selenium==4.32.0 +selenium==4.33.0 Pallets-Sphinx-Themes==2.3.0 Sphinx==7.4.7 sphinx-issues==5.0.1 diff --git a/requirements.txt b/requirements.txt index 887e65202..b27f44e52 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,15 +7,15 @@ lxml==5.4.0 pygments==2.19.1 python-dateutil==2.9.0.post0 pyyaml==6.0.2 -httpx[http2]==0.24.1 +httpx[http2]==0.28.1 +httpx-socks[asyncio]==0.10.0 Brotli==1.1.0 uvloop==0.21.0 -httpx-socks[asyncio]==0.7.7 setproctitle==1.3.6 redis==5.2.1 markdown-it-py==3.0.0 fasttext-predict==0.9.2.4 tomli==2.2.1; python_version < '3.11' msgspec==0.19.0 -typer-slim==0.15.3 +typer-slim==0.16.0 isodate==0.7.2 diff --git a/searx/answerers/_core.py b/searx/answerers/_core.py index 9c50d026e..f4b1e00eb 100644 --- a/searx/answerers/_core.py +++ b/searx/answerers/_core.py @@ -21,7 +21,7 @@ log: logging.Logger = logging.getLogger("searx.answerers") @dataclass class AnswererInfo: - """Object that holds informations about an answerer, these infos are shown + """Object that holds information about an answerer, these infos are shown to the user in the Preferences menu. To be able to translate the information into other languages, the text must @@ -53,7 +53,7 @@ class Answerer(abc.ABC): @abc.abstractmethod def info(self) -> AnswererInfo: - """Informations about the *answerer*, see :py:obj:`AnswererInfo`.""" + """Information about the *answerer*, see :py:obj:`AnswererInfo`.""" class ModuleAnswerer(Answerer): diff --git a/searx/autocomplete.py b/searx/autocomplete.py index ebe6972e3..05a641829 100644 --- a/searx/autocomplete.py +++ b/searx/autocomplete.py @@ -149,6 +149,21 @@ def mwmbl(query, _lang): return [result for result in results if not result.startswith("go: ") and not result.startswith("search: ")] +def naver(query, _lang): + # Naver search autocompleter + url = f"https://ac.search.naver.com/nx/ac?{urlencode({'q': query, 'r_format': 'json', 'st': 0})}" + response = get(url) + + results = [] + + if response.ok: + data = response.json() + if data.get('items'): + for item in data['items'][0]: + results.append(item[0]) + return results + + def qihu360search(query, _lang): # 360Search search autocompleter url = f"https://sug.so.360.cn/suggest?{urlencode({'format': 'json', 'word': query})}" @@ -300,6 +315,7 @@ backends = { 'duckduckgo': duckduckgo, 'google': google_complete, 'mwmbl': mwmbl, + 'naver': naver, 'quark': quark, 'qwant': qwant, 'seznam': seznam, diff --git a/searx/botdetection/config.py b/searx/botdetection/config.py index 274be77df..5b73afe1c 100644 --- a/searx/botdetection/config.py +++ b/searx/botdetection/config.py @@ -319,9 +319,9 @@ def dict_deepupdate(base_dict: dict, upd_dict: dict, names=None): """ # pylint: disable=too-many-branches if not isinstance(base_dict, dict): - raise TypeError("argument 'base_dict' is not a ditionary type") + raise TypeError("argument 'base_dict' is not a dictionary type") if not isinstance(upd_dict, dict): - raise TypeError("argument 'upd_dict' is not a ditionary type") + raise TypeError("argument 'upd_dict' is not a dictionary type") if names is None: names = [] diff --git a/searx/cache.py b/searx/cache.py index ea6c17be9..96644419b 100644 --- a/searx/cache.py +++ b/searx/cache.py @@ -42,7 +42,7 @@ class ExpireCacheCfg(msgspec.Struct): # pylint: disable=too-few-public-methods DB will be created in `/tmp/sxng_cache_{self.name}.db`""" MAX_VALUE_LEN: int = 1024 * 10 - """Max lenght of a *serialized* value.""" + """Max length of a *serialized* value.""" MAXHOLD_TIME: int = 60 * 60 * 24 * 7 # 7 days """Hold time (default in sec.), after which a value is removed from the cache.""" @@ -80,7 +80,7 @@ class ExpireCacheCfg(msgspec.Struct): # pylint: disable=too-few-public-methods @dataclasses.dataclass class ExpireCacheStats: - """Dataclass wich provides information on the status of the cache.""" + """Dataclass which provides information on the status of the cache.""" cached_items: dict[str, list[tuple[str, typing.Any, int]]] """Values in the cache mapped by context name. diff --git a/searx/data/__init__.py b/searx/data/__init__.py index 28a3974fa..9be1cd67e 100644 --- a/searx/data/__init__.py +++ b/searx/data/__init__.py @@ -4,29 +4,65 @@ make data.all """ +from __future__ import annotations -__all__ = [ - 'ENGINE_TRAITS', - 'CURRENCIES', - 'USER_AGENTS', - 'EXTERNAL_URLS', - 'WIKIDATA_UNITS', - 'EXTERNAL_BANGS', - 'OSM_KEYS_TAGS', - 'ENGINE_DESCRIPTIONS', - 'LOCALES', - 'ahmia_blacklist_loader', -] +__all__ = ["ahmia_blacklist_loader"] import json -from pathlib import Path +import typing -data_dir = Path(__file__).parent +from .core import log, data_dir +from .currencies import CurrenciesDB + +CURRENCIES: CurrenciesDB +USER_AGENTS: dict[str, typing.Any] +EXTERNAL_URLS: dict[str, typing.Any] +WIKIDATA_UNITS: dict[str, typing.Any] +EXTERNAL_BANGS: dict[str, typing.Any] +OSM_KEYS_TAGS: dict[str, typing.Any] +ENGINE_DESCRIPTIONS: dict[str, typing.Any] +ENGINE_TRAITS: dict[str, typing.Any] +LOCALES: dict[str, typing.Any] + +lazy_globals = { + "CURRENCIES": CurrenciesDB(), + "USER_AGENTS": None, + "EXTERNAL_URLS": None, + "WIKIDATA_UNITS": None, + "EXTERNAL_BANGS": None, + "OSM_KEYS_TAGS": None, + "ENGINE_DESCRIPTIONS": None, + "ENGINE_TRAITS": None, + "LOCALES": None, +} + +data_json_files = { + "USER_AGENTS": "useragents.json", + "EXTERNAL_URLS": "external_urls.json", + "WIKIDATA_UNITS": "wikidata_units.json", + "EXTERNAL_BANGS": "external_bangs.json", + "OSM_KEYS_TAGS": "osm_keys_tags.json", + "ENGINE_DESCRIPTIONS": "engine_descriptions.json", + "ENGINE_TRAITS": "engine_traits.json", + "LOCALES": "locales.json", +} -def _load(filename): - with open(data_dir / filename, encoding='utf-8') as f: - return json.load(f) +def __getattr__(name): + # lazy init of the global objects + if name not in lazy_globals: + raise AttributeError(f"module {__name__!r} has no attribute {name!r}") + + data = lazy_globals[name] + if data is not None: + return data + + log.debug("init searx.data.%s", name) + + with open(data_dir / data_json_files[name], encoding='utf-8') as f: + lazy_globals[name] = json.load(f) + + return lazy_globals[name] def ahmia_blacklist_loader(): @@ -40,14 +76,3 @@ def ahmia_blacklist_loader(): """ with open(data_dir / 'ahmia_blacklist.txt', encoding='utf-8') as f: return f.read().split() - - -CURRENCIES = _load('currencies.json') -USER_AGENTS = _load('useragents.json') -EXTERNAL_URLS = _load('external_urls.json') -WIKIDATA_UNITS = _load('wikidata_units.json') -EXTERNAL_BANGS = _load('external_bangs.json') -OSM_KEYS_TAGS = _load('osm_keys_tags.json') -ENGINE_DESCRIPTIONS = _load('engine_descriptions.json') -ENGINE_TRAITS = _load('engine_traits.json') -LOCALES = _load('locales.json') diff --git a/searx/data/ahmia_blacklist.txt b/searx/data/ahmia_blacklist.txt index 065bd8208..9a05bdb3f 100644 --- a/searx/data/ahmia_blacklist.txt +++ b/searx/data/ahmia_blacklist.txt @@ -5,6 +5,7 @@ 0005267c3295eeb612e9e7d2d7939970 00068777b8c3937133e788cd84229143 000914d0c175724e20a84518b1cb587a +000bb12a3fa367e1442fc9fada841457 000ca35ba2095b1443968d4b0ff584de 0013a67e08315e293c274799fa865e01 00145453e48c99747fd7bb981cca0798 @@ -435,12 +436,14 @@ 0251da7034024e7f4a38af608d6a2717 0251df6c4de395e40201f49f460af671 0253d36abff6b07a63e76f6936eb225e +02543885df081a208d9983fbc267d127 025511df343ea2bf7451edf96a1177fb 02551fd7b9390cd9d5221052b24d0c81 0256647357d27acb21ed2de48e784065 0259e254c258e7ffdb51c350ef5eaacc 025a6e40958e34e996e4b03698984827 025b8f1a86222f25aa7ea4709499352e +025c49b129b65ad81f2335a3ca9cacba 025cf1341b8dc023045bf0b8c4d2b43c 025e8ceea86b8b6a95ab56a2ef8d5e81 0261003d3d876d9c236ff7d3ddff9744 @@ -485,6 +488,7 @@ 0295234924c5e11f293d34e9d449cba0 0295ea4ab97988b8145ae756937435cc 029778e7a2c43224635d8315151870e5 +029981242bcbea18dc8746f289bf6397 029aad6a569e9e5aaf05ef93c9197784 029b98a25eff95a2c409f317c52bc2a9 029bef519d3fc5e7e471dd61c9356e05 @@ -609,6 +613,7 @@ 034dd3de1aeeb36cbdb9d6d56a62166b 0351e0d2c113dc8dba239f699ec02d4c 0351ee6dc13b41686001cab8ea2488d3 +0353152c49a1da7454dfffbb7e4a3558 0355dfcc33108181db526ac37ef673d8 0355f17a3d208dd1c908faa0f2f9e93f 0356b4e31a9d13be51790c68ba28547d @@ -780,6 +785,7 @@ 0425f1c3459237cd37ca97424493af25 04270668bda73f4609b7ad3ddbfd0d94 04286bf4dedb2dbd9723474c2a1f217b +0428fd6aaea85ee8a8216389517c36bf 0429f459757ae450c312b3f4fda43fe6 042ab4ed0bd703331efdcdbff54a1471 042acd38b594f6a5744edc478ae3c8ad @@ -1373,6 +1379,7 @@ 07424ccf8c8a24c6cbe752e5a9fc3812 07424d3e5933262a691315419a28462e 07451a915f5b043135ee4d013287e09d +074626a19cfc491ae97f85efb520685b 07473e90e994a61931d33cc18ea9dc39 07477bfbd67a71588324c3e9c11b5370 0747e2f11ae1a5dc077649ecfa250b40 @@ -1610,6 +1617,7 @@ 08a2bf6db54af53fd03b461ba95d7eed 08a3e379c63dddab3890e765e8585430 08a44f882721208bfc54745d3f55db31 +08a46a8ce28df914deebd6148fb0be53 08a6cb00a5d07b8524c0e0d512b4dba5 08a72c40624802259b58b551d2cdeacf 08a9d464024c1b94ee99c08a4e1d61d1 @@ -1917,6 +1925,7 @@ 0a6960746b5556b557cf543fa276ba9a 0a6b9ff75963121b22c9b7f42cb1d524 0a6c5fb79e7cf454d23445b391c08180 +0a6c6deec7369397efd80788607a293f 0a6d4b62e1dc10e0e502df8243d7f3ce 0a70a665f5f8a752d5550d7520aee426 0a71a55d452e5f059fc1d1f889b7ee4d @@ -2112,6 +2121,7 @@ 0b7c13df18404beaae998694a0d6d3a2 0b7c21a239b30e670d6d024c4f29bca2 0b7ccdf4688c4992d81fdee8d6e357e7 +0b7dbde24d5f6852987eb1d7bed68a5b 0b7feffaf8d4b91d8c618e5bbe602e92 0b803f83d985858b304f7081c8549562 0b814c2b2b04bfaec204b2df7a82aaa0 @@ -2734,6 +2744,7 @@ 0eddb1ebef0dedf7438c3953cb40c1c3 0ede9f742cc16451ac616b17c401790d 0ee3ca15dc2d3a43d4174beac14f81e7 +0ee451f7de2d185a89d47d785b1f594c 0eea546b46a48211c407062119b05169 0eeb10443f206a77fa8f555f4165a01b 0eedfdcb06271288eb40aa41d163fdff @@ -2772,6 +2783,7 @@ 0f1dddcae4a97d15da0a02eef4b6e8fe 0f1e17031e3fde4d2221c865aad9a3d5 0f1e25b58f84ac6d22b988d78e2cca17 +0f1eb9508491b97ebed0d4be19493fb9 0f2117237746ecd2fb3ca29be246be2e 0f22018b7ea2cb0d3e653a3640223deb 0f2293b7d4bec3f83b96b62ae6f98517 @@ -2887,6 +2899,7 @@ 0fb04b5ab393b4aa64bb512d1e06fc75 0fb085b2eb9474cee43950434f45a5fd 0fb2418a5718cccd73398d1b659385ed +0fb637ac874447d39c08b730bf161158 0fb82f76000499d915b83a1ddef63eb6 0fb8477a52fb18854441f57bc266a012 0fb90f728807750145a7d7b0c9c5a990 @@ -3193,6 +3206,7 @@ 1166dbbadfe2bc6c0ca60028b4ce5d5c 1166f356caf638c8f2dbb3ba21300028 1167501c494d049744db1ebeab2c4996 +11687d357c714ba02785ef68c6702898 11698d424ee245ff6d2d8199f39c00dd 116b97ed2fa6bded481f9b38eedb4505 116dd01f9b14bb5c621a98cb25045202 @@ -3661,6 +3675,7 @@ 13c68806d5bea1144414ff6adf614f8c 13c6dcc3911fd9e80b78cc118ad6a855 13c81d82802fb195d1375a168dba834f +13c8747ba6dbe6b515930a4ab4c5a9f0 13c878f5e10d4cb6a052d7cca21fed5a 13ca196cebca0f84445ca520ef716074 13ca32082fbd23791283ebc0eecc0966 @@ -4146,6 +4161,7 @@ 164ac234e744c62dcb3b5994dab07009 164e7f0642f1c8f9606add19ee3dc0f0 164eb5ec53f7929eb73a605a3fc35e22 +164ff12c6949772c32df9f68d8278a8a 1652309be7e2a093125b0858551ae7e4 16545275331852b182b785574b2bedfa 16545c5182accbd81059ce9e8053ee71 @@ -4167,6 +4183,7 @@ 167654a6325c7ef6c60bdccd896c2a4b 1676a13396a4f78080662dd0419a45c1 1677b760edcf80a0ff07f308ebe300e4 +1678444681936cb3038a17ca6c55a702 1678639220d10cf30df4a1ea5add8a34 1678e345417c9592d26eecac92546a13 1678ea4e5910d7d433d5eab5309a1864 @@ -4251,6 +4268,7 @@ 16eb61044968f29101651e5cc83b52c3 16ed77594af8d590360ceaab1aa9d049 16ed8827f10bedbbfda1d17699242c44 +16ee0d16b5107699b27ecd9251c5ec79 16eeb4f73d22550f42a67b120b754326 16f168ff9bff0b81d12741d2b94fce4a 16f2261b876c60908dfe30d8ca9d4edf @@ -4349,6 +4367,7 @@ 177e15ee9ab07b74af6000ceae0cb2f9 177e4059ed4cd7ae4266634ec00e9c10 177f24f33529cca0708befea74693dc9 +17801eca49afd689dfc40d45f1ca8e16 17803f1148ea883641b9c4e96f4cfcae 1780b44492ed31c5ebbc0994bfcee9ac 1782151c47e1c5b3bad69b5ca952ae33 @@ -5035,6 +5054,7 @@ 1b4697cc86ea66c62f761ee377cd818b 1b4887d9532e2e07bda5ed2a9b9b87f2 1b48cb2da599ad766c7bf0451a85df73 +1b48f4f9b3d10661b9ac610a2f480fc4 1b496d5a1006d4958b92d4976f28481e 1b4a2b8150239956a7961b37ee70d9d4 1b4a63b804f9e556aa7bb7187074e327 @@ -5308,6 +5328,7 @@ 1ca0770673e44d26e1d4ff2a16cc4cbe 1ca153b82f15856669a8277f228d7b84 1ca2f7ad9ac214f45e8ffe8e63fc2754 +1ca40db2e8e0a3dd8c66c0e673cc572e 1ca4f0e7494a7beb445cd6dfe4f3c461 1ca51ea82c5eee246c89677041b5c780 1ca5df78c3297f213655fecfedd3ac3b @@ -6177,6 +6198,7 @@ 217630ce668d5317dbc7a8248337a521 2176e4fb6722df48bef98b27650046e6 217722e245d3502b156db853c73b7b17 +2177d0759ee703908972a1b91b675214 2177e2b99d89bb2509e1d3babd1bf199 21784c5b00966e217057e37443898c5f 21789af6c870a60cbed83e64cf3e5463 @@ -6538,6 +6560,7 @@ 2364e8462945adde9b041e506f24acbd 23655a0f04b06ee4e67d0d95c00148dc 23657ec88157711235f8a9b52351dafe +23694f10047d2bd64a62c7f49eeb71a1 23698e1d9c4ced0c960ccc0c275043f6 236de1c21a89c567837752013eb5ee23 236ea4fcf59a70d632c6547a3d0451d1 @@ -7014,6 +7037,8 @@ 260b137532694cd8a9a87074ddf31ca5 260d4da49476b8edf04d8793f05febd6 260f6d2a0a82bbdfb7f7766454793658 +260fe149214dc8c66232131c41cc263e +261043514ca8fded2b27b490e62d3038 2612167ed24bea70b3c2e8c7a8f1d60a 261245ae37c5901ebb2cedb1fd88af13 2617e6af0f0e30955694a93bc1453f74 @@ -7527,6 +7552,7 @@ 28d25a82c04c5fcc231e980e4f1b8bcb 28d465fa943affe9e4a8d2bfe5e17548 28d610caef84bec33a19c864b4b14bf9 +28d6dc8965d3dc95f54c625eaf75910a 28d6e03376e226a55e4ad9974db0960f 28d79b60fb216c681e608d7a2966dba7 28d93c57421e2bd6d1e001884899bb9f @@ -7538,6 +7564,7 @@ 28e17088fde3dd1d00f0ba208e7b4797 28e2f81c81908c2fecf7d85a6b7ffd3e 28e329d8bda4acc6d4e1266aaf343155 +28e34145a1d57f1d6f48e7d115147cd8 28e3a32b505dff3420decc88103601ed 28e605db574af11481e1a00bbe645ad0 28e6d60cc9d47404fae7b5df9f62b49b @@ -7830,6 +7857,7 @@ 2a667936f25a943fdb96abeef23cd981 2a68802d6d188fa53d98bd03296b4b60 2a6934d1ff6187490781620b5e1f2df2 +2a6b97db8c050130da7ae2803e2fd273 2a6c8463ccc4fec7d6367aa264a6ea5d 2a6da9abe15822278af2d7e087c246fb 2a6f6ee7170dca45ea644e0ab87c28c9 @@ -8106,6 +8134,7 @@ 2bd017e38367f7c6d998af2ef38087fd 2bd38f4e598f978dbfd5b55546f1bb51 2bd4b7f8a68e5f830eb86e7f01d679e3 +2bd5a49af5f420e751b87028ecddff03 2bd5c83d815f543e24e5041c02ae0799 2bdaac06653f5e57848b69416ee4a6e9 2bdd0bb805f7a24f7528077b1319b8fb @@ -8780,6 +8809,7 @@ 2f6f00b04ad16c1a6d80be858101e223 2f7073c4225b9aa7b1c570a6a92328ca 2f70cfaa4f5d55ff4693e94936acc845 +2f718c5f111a9adc639edf4c2ee465a8 2f71f2706524be1bd387bb7d0b6eae86 2f753ede59bb097edfde6f23e69bc373 2f754f53a50c3ce017f407508358798f @@ -8820,6 +8850,7 @@ 2faa7393187509976167b601abf59986 2faa8f74216aa7c7a3bbab7585ad06e6 2faaa4cb4fd6bd622e037f0fd08fd288 +2fab984ea26758fdda39759469e98bbc 2fac5bad535410943b367dc515bc8dab 2facea7bc3a70adcde954f3a92b46b39 2faddb1bbfecefba6f0262bce5043e07 @@ -8886,6 +8917,7 @@ 2ff1d0043715903d5bf500a346580f96 2ff1e62a192ff56015af810b29064a07 2ff3d45207511f4933f5edf61a8634e0 +2ff4811e65aa1e897a170ea822754042 2ff557c7eb3e55eb40baf48486d912e7 2ff690a74b955b7025afbc6ee7276e99 2ff69747d51087d4f526f413632d741b @@ -9098,6 +9130,7 @@ 3100b8257162244abb54229c31a0d286 3100fdeb8d0e1780cf2777d54ee33cf1 31012dedb15099d66316b7f9d5244270 +3101a714bf4d8412ceba46045b9c8fca 3102ee4948b07ebea379accf358f4523 3106fed0993b88c4b1ce2a30aa85056a 3107ec64b531336e5a23cb7c0cb3b58c @@ -9164,6 +9197,7 @@ 315ba540431d5a3eeda56c65e44d46b4 315c8c0b4f52bb81b4d828acc2452e7a 315e65cc1f34c1811a37f332e87afe00 +315eabdcd44620d32a81ed91caa69b88 315fa325085bc0f2032b48304014a07c 316019a760a7e6d275a10e07af16a9e9 31625ec9963c9f959ddd11f847ac911b @@ -9272,6 +9306,7 @@ 31f2257d432e18e93a55a45ba8ed8c5c 31f26b99be9daffd665d7acf85a35e08 31f2c254f68524c9c0aef4ca32977c60 +31f36083e351d658036e752f4f1a5fbf 31f3ed765c203ed0c548bda622da8299 31f45e7b6b07273ac71eb44f46fba8d3 31f62cad5ae8b19813a4cae58f349b07 @@ -9467,6 +9502,7 @@ 32f1a7f57b512db5b681d9d5da68263a 32f45aa1b9b38292483ab8666d8ac9cc 32f4b8bad803a08f17adb0b3aa3cf4e3 +32f5d69850195952f4211e1f2d9e028e 32f79d43474946ec1c31ab71eb83163b 32f8f9b79832f90bdf4433fc6be69587 32f902e59aa7f0e29cf4512b142e3716 @@ -9608,6 +9644,7 @@ 33d1fd357388cc918d7cd6547a742457 33d30382ab9e0e2166549b25bf97f31b 33d4701ab79f8df24ba2ab0c1d8d149f +33d5fa01b8e70a4aadef9ed32f05ec7a 33d7c5866c32276d154120c672208a53 33d842cedeade74108a9f7efead305ed 33db469e01631389d3e6eaacc5d08454 @@ -9796,6 +9833,7 @@ 34bb80469543da184f6c4687a7dbbc08 34bb9abcdea4f0bcfe24c6efcad5e3ba 34bc9c5319ce936460cdcf6597b71c23 +34be4885055445fd2690d5581082a350 34c0fe8d3d1b1c6850d519951ad971b1 34c2af1244f7ba549f6ad52ab15fbfe7 34c2bf58dde33d8392733df2857c14ce @@ -9964,6 +10002,7 @@ 35954958024018046d1f1b286a582cd3 3595d0b74e1cd8f9c9ccb1e51a1f0554 3595e6d58e506f0cd754d3af1f4446a3 +359729f10a3dc23a33c840b08e4b15a0 359a62e408cc78676438468cf8900c74 359b76c2b9774f59a828cfa0d6ec9531 359e97b8ea9ec5fc427af5b0d2e28c75 @@ -10508,6 +10547,7 @@ 387a4e5fec020b8da0f317f4fe7721d2 387bd966560c303cedd79921e5b78b9f 387f7889a14750f96f60415eb7fd8c74 +387fb115e32520e9bc91fd9dddd845af 3884f3f21019fe7023adedf9b960d208 3885d6825c8c388bb6c617d1fbd27e77 38870a3f87cbd7f163d739ccefee1afb @@ -10597,6 +10637,7 @@ 38fd5093d7dc284070e9b34028ff788e 38fde3d022d5f870933e44bd82f555ed 39027c02cd003145bc74c563c2059c67 +3903e95fa1e05615940a0bc2153c8793 39047b72ea9f2a256d6fa4edd04b7d36 3904c189b0a64f80797627e3399b5911 39057283f2ba7290242b8c13ca720d6a @@ -10991,6 +11032,7 @@ 3b31e02cdd65585d8c21e8cadf3f0d97 3b33311b30793dd887c185a0febd5c8b 3b3446d5e0402dd6830f8202e65bbd4b +3b34a138152f71f7f437c146fafed625 3b358900d7e5e2130918b2803d61bb20 3b372957e901b62ffb0d85f4390e8d40 3b38b355d44989d3aa7c6a84301bd1a4 @@ -11050,6 +11092,7 @@ 3b79c08a1f5d1c836fa0afb1c70a16d6 3b7b99a2c8e1a883c69b0f4272d26369 3b7c84f7e97bf9659c312cd3b2eaa8db +3b7ebea3e5eff21445ecb659a90a334c 3b7f744494f37c19a126e79482758cba 3b7fe83b78e3d169d3f05eb7d6a45daf 3b81d0b8ea2b4b89062a394894f3cd6e @@ -11120,6 +11163,7 @@ 3bdf407eae98cb17524a7aa69322473f 3be028f4cdfae1d166bbcab6d83a7e1a 3be057ab6966061fa151ff412fc0a764 +3be801ff3f2ce8b80a439e4b2bd2760d 3be8544841171ad614e24591990f2732 3be985fc58de16b34117385ce9708f7e 3bea0568acb91a9dd3ed2773cc367e9c @@ -11322,6 +11366,7 @@ 3cee76540462999330b659db06da8a17 3cee9a5dd9a3e935a637fb07804ec246 3ceed022926d9d651dda04d93cfcc8bd +3cf181e33b379e1bfdcdd5c5abebc496 3cf387bff728dca0760fd4d35cf1d706 3cf58d0d4708cff944d725d5a335c956 3cf7f85fc7932876af46649d02e6041b @@ -11600,6 +11645,7 @@ 3ea6416134718040d4d3b8ee1f66d0a9 3ea6c0393882f680923f96587c1ebebc 3ea853604e6b088167c1f34fb0ff95e2 +3ea8fdfdb606ca56c0053fd42a960a69 3eaa3645b6e85aa0385afc516afc0987 3eaa3a2675ce184c28d63c2d1f5b6cc3 3eabbff96f962ebe883547aab1be0327 @@ -11665,6 +11711,7 @@ 3ef3e87585ca6b637d0c267bdb8c2d69 3ef3ebef19b659a56d98721441845850 3ef4131d520a2d9bf26dd6fe61345e91 +3ef4d00bffa4b7c6dcde270e542448c4 3ef5888d2a20889501094a1c1784a102 3ef870b65bb2072912bb958213bfff16 3ef90411081cf45fb0af9b89ea1f72c8 @@ -12192,6 +12239,7 @@ 41f371db4d3093e95c0d4c771f882c16 41f4a7fd341656fb670ff84822093262 41f5ed0e40f638046b5e5bd74bc86d15 +41f621dd173791bc2e020fc8b658790f 41f8afd05fe87f440135874acf65e8a7 41fa09550baa6720b89ad14a373171d4 41fa72e1dd47cdbcec0415f48fe5154b @@ -12497,6 +12545,7 @@ 4390b82422c7df4351b850b6662d05c5 4391806ca647f912b0f981d18cc07a01 4394e2c9bb6e195980dd173762d10f23 +4397bef5f8da23f9e049f084e2b0c5a1 4397c71ce2b06a0aaf1c7f2cfa36755d 43986c3729c70fb4a5bd2ff2c5b15b0a 4398ccca44b4473d3ae68824880ebf48 @@ -12518,9 +12567,11 @@ 43a715b755029901ab99639f1b7e7107 43ac5e18663e692f78afcad1c753212f 43ac8bcb1723e102321a5e2869485dfb +43ad92cdcc828dc6a8758209f251976d 43ae2c9f8a3c2d507d4e3f32e29291c1 43b14d3b24429b6c6e44192ee272f896 43b1a07f3b558a8dc2e19b65f8667f48 +43b1d41a4af0b16ffa6c7aece70df9fb 43b2e200d9d58469e477e21d7f2ee8be 43b3f657584b3929ab2e5268e75ecfa4 43b49419cc992476d9bb41a6b7fe68c2 @@ -13158,6 +13209,7 @@ 4728c1dd740425bc772076ad0f78abe6 47296ac974fb9c1c3836bd598eee5894 4729e6616dfe0db8113202337628daa6 +472a4a83e12c9338aa019ab71b1cd538 472cf2000130f8a77e3b4de2265facdc 472e7a1a0797d2fb3d00cf964874db4a 472fc7143444e3123879ec40a3f1db40 @@ -13209,6 +13261,7 @@ 476a3eb77739bde4ee459f94abb764da 476ab8f7e92c2a42443493060aae370b 476b2fa725198faa5121c3547d3e8347 +476d3d7cef20b6425bd69fa10f8b8a4b 476ea5205f1e6380a58a6df08c09fd16 4770eea1612bb30564975a9bbf358dee 47714b35c03c6f49a0a4975a16296895 @@ -13516,6 +13569,7 @@ 48fc6af29385c116d37c8de5696dca44 48fdd78848122b4bdead6edf02e073b5 48fee9aba233ba72649bc95759307de6 +48ff0180ae3a8a78997fb890ee109ffc 4905317ce4d52d076ca8bdd3e49ca44c 490540cdb17bd218f1843041937c2f2f 4905ee878e5bbae74d889030b5d5f7f7 @@ -13545,6 +13599,7 @@ 492333ab6a412229720e5ad738e19b3c 4923d6659affb6396d2b9d4ac13869a7 4925c4f814f259924a6e2f6ebf4ae0e7 +492743728e902d23d6d5d53eb2543a03 49277325dd0f0358390a2203f5a7896b 492a2e08c2e3526c7ae7931154b479d2 492a593678012737d98bd06c4ab5dfae @@ -13608,6 +13663,7 @@ 497dbbadf503c2754e3ca8f4ade772db 497dd4c9b950bfeebe8ca1475564261a 497ddd96968b68f3c933270094709b03 +497fe6b5b77e35e8391441306a44ae7a 498c8b74a55c40504df838841c50f530 498d363012544b9065486670301a0b00 498d9848907ea86c296e6908f2683faa @@ -13693,6 +13749,7 @@ 49f945bbac8b563ad109ee7df71c227c 49f9f09bedc8e8156d724e6226d91a29 49fa83f0b5b58d4ef8c452c4bf9d5282 +49fad9093e12519919a7304127e10f6a 49fb7045df30df154c196b145cc98ea5 49fbf597844788a1a8a1633b0b278062 49fc480ef62f2ad8f98793c570890fd5 @@ -13726,6 +13783,7 @@ 4a22f67aa46100b5ee925abb25b1fdb7 4a24051ed87826f394dd38a62695d3d3 4a248cdd983cd58ea7d798c160fc4f60 +4a26b6ed1c266d9bde5cf5e42b84a0f3 4a27220ff91f482eb411b9edd1b968e2 4a2780fed5c4e2aa36e4e1c0e48dc552 4a27fbcc4bd11abd494763c7a409927b @@ -13847,6 +13905,7 @@ 4ad8f41c8001987de29e6c1deff123d0 4ada6bdd950bf63b4c95603dd795b1a4 4ada8d639f42ce1ca43c6eb17802baa0 +4adc3be48978d137080ecacc4bc6bcb0 4adca296b6f9567a6c2fa53f27865d3e 4add259046057425791175040aa7f5f1 4adf9823a4e3540b59168f3926c5970f @@ -14412,6 +14471,7 @@ 4dfed6fe004fd210ea6b6ca081045eb6 4dff7473ffca9d4e6ac22955e90bd4c3 4e074fe040111467eee72e254e64ed42 +4e07eb61d55593353142e4c01d152346 4e08c12df4962152457e12596d308229 4e08d1287975a426b7124013ff7cf6f5 4e0a189a882c70d1d1fecf920213c41f @@ -14529,6 +14589,7 @@ 4e963337e8eb71b845849884a7b35b6d 4e97d024ccaa8ad5c97ccf32a818bb5c 4e989816aee4c90b559a65b783562253 +4e9966e92658343a7a1276f8290c9aaa 4e9a9bb355f473f19669705030826c20 4e9bde5ec8a199be9ee3b888f45509bf 4e9befc446812a156b2bb29a3fe59386 @@ -14650,6 +14711,7 @@ 4f3edb86c8542999a695415371904561 4f3f33f5efd98562c761b2fb4a9d6a9e 4f426816815b5e558d384c6250df4231 +4f427169a6bd2bdbe0009b9915c77aa0 4f430a804cb613c689552167e1a556b2 4f44618433c1c129f223717ed379fcd7 4f48e60858dc789551af56083b5839e3 @@ -14717,6 +14779,7 @@ 4f9bf2aba5e6dfba7f9da70a44be9a53 4f9c08d4e32f540d9bce336ebe1a2718 4f9ccb93ae9e8e68be640c0b94657723 +4f9d2c2dafb8ec79da73e6800165f136 4fa098e48d8415a952ea73e8bdc06b9b 4fa0e3691b89b29a7cb0ce3bfe2c3a6e 4fa16c78b1f133361f177ed27aae3337 @@ -14899,6 +14962,7 @@ 50968cd52286863dc7ebcb794fe1bfa8 5096ac701c78d0dc5829445d0452464b 509b21c7075b184e0a9442de18fcb9fe +509c53cf5aa1f8440e1917100cadbc04 509efb0fb72d699efcc2202b9e8df738 50a04e0edab9eb0f33638e44014bc899 50a27c0ff47ca278030ceaad66ae5b74 @@ -14920,6 +14984,7 @@ 50afd89108c8b230b3456fc4342b9115 50b40bf654d30d283765d41fa56f3c40 50b449bdf9e43272756a934a16ea14b5 +50b44ce4cdd1d844dc0f63213f790285 50b59e1f8b3623163ac5f173a54360f5 50b746380291b31c39dfd51a49bcfb79 50b7d0acb6575322679f80f47a663e07 @@ -14965,6 +15030,7 @@ 50f2bb053f50d4e1300c035d17a27248 50f3af9df22ca6d57883e440310afbdd 50f3afeb653f2070e231eca2fd927034 +50f546b2519eb0334f3c2f16b9387751 50f8fec774c38dd6e77c92cbddc217f7 50f9fa163abbb8aecdea13b024b6341f 50fba0b0b9d7cb1a2e655fa16ce1a78e @@ -15038,6 +15104,7 @@ 515078554d2552e33bd80ae77f945ace 5152327db053043f45e0844e1ed65878 5153ad54a1ef93f18a7dbb2d90599f6c +5153cea05218e4ef7fefe49a84a1aa2e 5154378095868719fd800987ae8c7067 5156b384f3f1c20f947c0f8be9874461 515803b028b1bd972a94509c7474c4b6 @@ -15359,10 +15426,12 @@ 5315d1d2bab05cf4863000863312a449 531684e91481de1f6ab71c683825e771 5316f3530f3bd3b850581804debd1afa +531744ce6be100b5716fd40d7c9de0fc 53174761da7fd6b454d8b88e8a919a9d 531773a4010d17332a7caf09f591c683 53177a67efcf6bfd373fddae10b215e0 53191fa60d0407df72cb2c5abfc40045 +531bed5576743bc965cf1a75f39672e9 531c16f0d2155e7a25bb05182886f6a1 531c251f3349d3a4fd19fba51f0c0bce 531ddc65722f737dc6e21db4719f601a @@ -15928,6 +15997,7 @@ 55dd33bc7bd3729f22af3fe72ef4074b 55ddca1ff9b5a6c07552c2a2032070a3 55de4872b2e2456b0678fc884b88dcd5 +55debbf864d74de3c9f374f3e289f2b8 55df5e14ad4f54d79349cdcdb3ed9788 55e63216197d3818a3a447ca32db25b9 55e63df04cec0b854e06249f1e059be6 @@ -16534,6 +16604,7 @@ 59302280671e8af89575b3df20fe3c08 59328d41e4e8edeefcbf2534e0988ec8 5932d7254df19252bcb9631eafafe6fb +5933b4f2aeeac44c631c46df7dd69df4 5934024048d6f1db3c7c65519a35ae15 593468c6fe28bf4db0519ed4d479ed77 593778650c3c289e594afbb4fdf3171f @@ -17079,6 +17150,7 @@ 5c3ed8b72b3eda7bc6acfb02f3f37902 5c42536cfcc8d0dad8352ca659da3e6b 5c42c1e7c70b17a7810b5b44c03c81b0 +5c42c231c2325f3f82354dfc759481b5 5c4320bf325cdd8e20114525e14f9a86 5c44e68b5db37eea1277a7f5ffa68d9d 5c4529e86446c3406ab013830ea81a2c @@ -17210,6 +17282,7 @@ 5cdeb4e6df97593260509be936465e2e 5cdebcc7034cd6277d9ea85cdbff9fa5 5ce0a5bb5304260fd4b992f996741499 +5ce2695cb47af61a5e0ce4f958fe8ea5 5ce2e4c461a65e39dcd26351248411e0 5ce43e85a4b420b2344548785387966b 5ce4c9bfe401ffe097895183ac7fdb1b @@ -17250,6 +17323,7 @@ 5d1314cfa63355410c5827083249357b 5d13dc34191e9d465c6818c91c376e13 5d14bc76ffc78dadafb5a3669dbfdff5 +5d161de209bf1bf98f219ec307eb065a 5d177927392666524df5705eb3ebb19f 5d1895183e042229ba8a4ee313b6fece 5d18b362d49eb721e31636c281ca4c51 @@ -17281,6 +17355,7 @@ 5d3abccc255b4de613480efccf789d40 5d3acd1731553ac1b12d99a272460c85 5d3ea10db3bf697703df3bb1e5999b2d +5d4207cb8311cea2ce9990bff32ae156 5d43521304247dc7e362a3a42488b3a9 5d43b7004cd2b85e204eb934c4d21f4e 5d441f2a53c15027fdb230f22cd5b1ce @@ -17291,6 +17366,7 @@ 5d4cf609ed33d0e5c962222a4f62bc2e 5d4ed47446d65b3fd7a43889f0ea2aa0 5d4f846d5105ac2a8b3438d6ec5a1064 +5d51181e2725deb04b7e69a73f80306c 5d5130aeef7c56307e39bc857b03cc54 5d5351b57229dfce62a9c1de79c0c5a3 5d53b511e820e0d5f5fea50b317adcf4 @@ -17694,6 +17770,7 @@ 5f86313b2e10abc3980545b82c68bff8 5f86a0d23b8b013c888e0a14f6822ff0 5f886a9589924f5cf4d77f02358d0dc7 +5f88a4a255bf4ee7e4055b40bc668ec9 5f8a2ec713417456b927e0bd4244ec22 5f8a58767579838814e849fb422884ec 5f8c6382f324328181b9da39c996c6b6 @@ -17951,6 +18028,7 @@ 60c5fb168f7e56a84e62e65830433f6f 60c704251c42b530a21d6df5d3a351b0 60c78326d31afd502a3ae2828ec3e7a3 +60c813048196b96ba6ebe545186036f4 60cde4151ef796abe8ab1d54d2efecff 60ce2a8dad2c0cb0a20b227725a2de9d 60ce30408d1eba6e195ebd038ce951a1 @@ -18030,6 +18108,7 @@ 613f1029835a7252580a6932e407c6b3 613f67592fe56f06b2c94df38a0f1c10 61408db2b29a06794fede644ab20f239 +614236ac149fa8f620e9e37778857498 614262e3acf34f0709b2d14c8236d11d 6143f72b0ef132ef553de94c75497e4f 61456bafe129d78150cdc6db87427dec @@ -18794,6 +18873,7 @@ 65831641173f0b18a97b2cff5077392d 65832f6060492902e3f4de8e678666d9 658461930db45db09a61d256a12acdff +658513dac258a043b0d9f279dc684422 65860d5114e4f498ddde3cfcb2fd26f0 658742ef1905d8750547aa5c10480ae8 658755c993f52f8e802899e68fb35e0d @@ -19358,6 +19438,7 @@ 688a2a79406c252ae1247412367f798e 688a8bf9b23ef593e19c55c484484669 688ab0d391a92dea10b000416519d113 +688c8293cf53e8ba22f98e97f08befe7 688e9990fb2da39a3053743ea2baf72b 688eaf480152d00454220652ce45fb44 688fdd6fa158e346c424fffdc75e1c9c @@ -19794,6 +19875,7 @@ 6ace6b2b9672f137929cfeec9a63fea6 6ad146f0525c2dbc966ad888dbf7efa6 6ad51785cb7c26b35786106f03b112ad +6ad5ee75d0764b8b99a8141c954f4f1f 6ad6c838a03bcf9f363c6dec42822ba8 6ad6e3cb7804031dfe989dc6dc1f31c1 6ad80d9071e7cecf739ff58e9a83c719 @@ -19895,6 +19977,7 @@ 6b3f1d9b44bbeed61a5ed2824b59d8ca 6b406dbcbc7fb6e924aef08ec7a22b16 6b419871cf74d990afad21f2b2922353 +6b429588c3893ebd080393b0ea89a535 6b42d6b28c7cd89ddae18b4b79e85310 6b439bf9b8fc5d63bdcbc2ae3c17a0fa 6b4407116af9c1557a1aa63a3da499be @@ -20239,6 +20322,7 @@ 6d1e30693f133b4b505b85bcbf3d3d56 6d1ef843ae5e1936db51836a8e097e70 6d1f81456fa158678f4c574c0bb26fd8 +6d201793e178571f66f27253870a0d48 6d20f535ec451dfff2373515573c33c7 6d24e2945e40baadc4c5d2bcd17304df 6d28603e872afd051c9bdd0a0b7ed7d2 @@ -20423,6 +20507,7 @@ 6e1fb233ddcae13c97e9f9cc1133ad91 6e20bded530e0d55d92ca2ec47961e7e 6e21e7ee5603b9663cf1e8c2bd097e4c +6e220734d4b351482b142b6df489ece4 6e22211fef150f27739ac8cfe0c83b96 6e2269cb145bd1355549f54ebca12f3d 6e245be4e0bf674abba28553fdeb4ec8 @@ -20462,6 +20547,7 @@ 6e5eb13d4564bf66e3325356f307e7de 6e5fa18df4f14b62479efa69e1eacf3d 6e613bab444df20d1f48af8772dba9ed +6e61b449c8534fbe92e40a38019ddee1 6e62d4b7094b92c37c13c8c3dba00a3b 6e634138dec899ffe6229e2afa7f0fdb 6e640be35d729977821d9210cccf5c11 @@ -21135,6 +21221,7 @@ 71f7840a6d3741a3b36d246f48f4b61f 71f7b2185478ee2e56c4717621ff8a0f 71f88215f6f467a9ab65fc26e13b77a8 +71f93bf783ec79580e9997c9895d4054 71fa38de6bdf0ded885df0899fe56601 71fa5c79c17002e70705d7ba5a6f33f4 71fdab28bbaa97d38271099788bd68e7 @@ -21479,6 +21566,7 @@ 73b460210393d8796110d9b426e8573d 73b4f5c1c6d38ed92a250129119797c0 73b6e099869af1a3199259a6e07794ca +73b8c0db1019b9de94e2719285931aec 73bb769999f1e51c14d7ce58c659ea88 73bf1b224ec0387ad08311f1fa5ea180 73c11fe13f798df0cdf4eee548afa8c8 @@ -21921,6 +22009,7 @@ 75f95f5e85bd1f3f46e419020ad63f15 75fff04ce1ebeed5d16530e670db268c 760085ba20b9149fe81aacf83eddc5cd +7600933763452f69ad5b0e343ee0f5a8 760298979e3be1bf18d6a7cf04f8af4c 76034039934bc9609cc7e823a04ab88c 760502d8033eda17002679269ae42cf1 @@ -22571,6 +22660,7 @@ 797124a61ffd65f6a8a3e479913f7ff9 7972f670ac1f6ee26d313be2db065f0f 7973da40cb1e96802e259c96eee30f9b +797401ae93fb906d6629e53e47c982b1 79740340811de064c00fb0b1041efe44 797570b9133e0c2c3eb6eee601ad79b5 79766ed3fe99f02d711e542f80dae4de @@ -23043,6 +23133,7 @@ 7c29cc8c004f6c134e34b5c49a9a7a72 7c2c187d5fcb80c6467f8bc453dab631 7c2cff8f68c99c4c7baca68c6423e26f +7c2e93aab1f292b0ba2c8383393ca2ec 7c2ea8a82633e97f32b77d3998fd4555 7c2ed7dd1602af288bc67ce15cf27687 7c2eef5b6132c9366df606a50297f6bd @@ -23437,6 +23528,7 @@ 7e11c261bcc4bc31d0ca5f9d79604890 7e128ce1c00273e73ba732a6e633ec26 7e153b7108fa221218ff9c2c0c1a0341 +7e1557a5fd1acabf3599bf50107cfb98 7e15728911bdea17f1321897224b4a3f 7e17d9bb1e6057ee99ebad2938f8b7ed 7e1bc22ce97c5b24ac2b703932798eea @@ -23916,6 +24008,7 @@ 80bc83f179ccb15b5fc105bb8720f910 80befb4e9bf34560b46d753ee6115acb 80c0661e3a1ce54e58ec1b2ee39f6cbc +80c1ca1a8dd1a3c523356859479a812c 80c524454f069d8fbdbe6d809a49e837 80c5d6f80eb81faa4eae1934803ddb72 80c6dce86a902bad249c0f1df3c8de92 @@ -23928,6 +24021,7 @@ 80cdc66d676df68f898012f0f9fcaceb 80cf01eaa832367c26d76a9d5b4f820b 80cf190f48263418271326dc3c0b8688 +80cfffcf2aaa447888ef9f5489c7a5e6 80d05144107b1b5ea6b36293525f7e31 80d4b67be7585200ed1319b1e4c9ceeb 80d51dbe2b2914bab95889a96e345373 @@ -24002,6 +24096,7 @@ 8131642c4043d6ce84713e6c61db2e84 8131eaea51d89e6f2530110458513cd4 8133f1a5c55b77ccef0810d32d1b779c +8134b5c117e131d9dd228b3c572bc35b 81358d13c16a9ebae7589ddc887b2911 813785a9a90fb319a631fca698c12384 8137fb7eba55746a5cd413df0c017c63 @@ -24167,6 +24262,7 @@ 82137a6c4eb4c424dd06478e2ff37a99 8213cb107716013405dc8449f6bd9700 821418987dccdd7aa80ab7a1b63b0166 +8216e226abafe6ab8627a022b4308200 8216ef135438ee0e5e84120646bffbdb 82171e1280c520722ae4832ec013383f 8217751134e8a0fd623de86b2cdd1016 @@ -24570,6 +24666,7 @@ 8424d98a44dbea364f7fbf259e3f8e07 8426452629e10ea857cea509bf10c500 84298c2ee702a08c10c18f5e523bbcfb +842a07d3e17c7906d353acd86e0d510a 842a6e586447d28dd15edad7d8c2c08f 842bd654c1a9de1ae231bf18427728a7 842c2d9955795953faa9de49ae14985c @@ -24830,6 +24927,7 @@ 8587613a0d81d113b9cec94f2b9c7ee9 8589c3aadac86ff890ec53fc3df7b390 858a4eb6106da7fe4f235697a06ee7e4 +858ab85605114c068e3e897e05f8a6df 858e4ddd566270e581cbafaa1bd1e3e1 858fd33959f4976224a6790126139d9f 859148c9266cab9411b229b07305d4e2 @@ -25032,6 +25130,7 @@ 86871b3951507a261150fa17d00ca189 8688507b3f5f11cd4a3dc5b413845e46 868b537ad38764182f754aba09915d1c +868bb4ad43aa3988aac08f8e034f7e43 86991eb1355ffc35d2a5039bb93cd2ff 86993c6c3f1e1833a7a3cc6743e87861 869bb234e2767065444f718d89d83724 @@ -25283,7 +25382,9 @@ 87e92dd0e40fc50ebc43796f04ea0225 87ef22ec3877a9d14ccd30aeccfde1fe 87f00f2a5da03ed6df4d05f7281caa24 +87f0e39cd48ba38a6d99faa835afbe8f 87f6e428c8a335e6e4b101ebffb227dc +87f6f41393168aafcb9c01db3641ab85 87f8b35ec1eeacac3b59cd458967efa5 87f9e0c79bc510e7b44e1533fb49b66e 87fb324067b1bd6e5ad768bc867d0582 @@ -25354,6 +25455,7 @@ 884a511263b737c37f361ddeefcc5e66 884b0a9330fc69d5d49a3a6b3f83ede0 884c35e791f1aabed328d72676026f21 +884d41f1b62c73f20c4491f7d849e526 884d808cb3270506628e151c49b051f9 884ffb1cab822a4c8492db48a13f19d9 8850f605aeda7de843dbe36a7083b8dd @@ -25442,6 +25544,7 @@ 88b3062f26b921408c0aba87764af6f6 88b3adaed51aab42fe628c9a693b5454 88b46cf24a7a3cd1cdbcb1029cb0c6e3 +88b63906443380508b381e8b2c8ad59c 88b65d2e6e5493b6da9be84b15715c9b 88b733125439eb1e2448cce121494123 88b82c4bc2ff55409800a729a9df51f3 @@ -25678,6 +25781,7 @@ 89f604f90a8b5466e679b3913ef98646 89f92de3d34aa227526d212921ef95fd 89f932f16ba02d8953763930ce4262f1 +89f9beba4bffa2912beaac73d548988f 89f9cd70ded4727e73a972e513fb10e6 89f9d666f06504da08b5ecd0322d16fb 89fac72430dbcd05e2c14c3f9eb6bc84 @@ -26461,6 +26565,7 @@ 8dedf964458d1b180fad2680309fac97 8deee6aeb279b0b6ec0e086c645b7b70 8def008d89e17619eb340d5085f25791 +8def721c85cec08de05f0e9aa54cb5a4 8defdd23b7fca88d69f6ece6ea63d885 8df011860bb85b91c240e2573dd34bef 8df1867b9879901284a14231f130feef @@ -26548,6 +26653,7 @@ 8e5096d7e10f3643140e2d8bde84c74f 8e55f6a1ac10042f4d63504d4b702573 8e57024d1545207a41c70ab82eee28c7 +8e589099833b8c658a4f64f97e7e523f 8e5933f2fb97ae024abe492df504ca29 8e59d3086c855e1f0938c57b1ff4ce34 8e5ae1879e9e1c2a2b8ad7158477565d @@ -26886,6 +26992,7 @@ 9053e589ede5cf799b9b9596d42d20b9 90547489c9f1c5d83f08c96403af54fe 9055b8af5f0f8fac915e3d2f95ba8be3 +9056852bb99c1f03efd328d4a9ddc83d 9058281d66bd641893c8fc0066e865aa 90582859b0fd0be760a55c71b3614313 905850c28cd05ffa7e6053b189fca4a4 @@ -27341,6 +27448,7 @@ 92c23754c63f287b9f9686abe39f7ab8 92c36f053220afd1ca3341fa9d8cd582 92c430bc558ed92b92cc30439d28a0a9 +92c48e69659528bc694af84967255fca 92c8086c84e0b37b640c9cb44aa16c2e 92c8dd1f4d020de42a8a15f8edfc8775 92cb23f58ce4b861aac0b77c7eded58c @@ -27371,6 +27479,7 @@ 92f2968ab3321be298fa70890e907e27 92f4821c240ca16402e68be3a53bee35 92f5a7d56441e7ca33cf202ebc55ecb0 +92f7e17375718587ad9d3be86653fd1b 92fc4eb821b9ab5457b2afa12d8b84a5 92ffc68c5f1c390604b5fb58aa260621 930059530f1083df6a4f11fdd6f0bc72 @@ -27689,6 +27798,7 @@ 94ac77b584a5b497f2b017846a7b76a8 94ac9531a877f3f6755c714e75fa32d3 94ada90323253873dd90b66ba40e8388 +94af7c940bfda085337e212035870f22 94b0f7cbea9534db2b8587cd9343a191 94b10a0afc1b944b2f7df2817c610635 94b442daad85ca878832332d6a604e52 @@ -27722,6 +27832,7 @@ 94e22cd21ee6e3d00de342b9fe3d3664 94e34579459b8bb6fdd5249a5c46410f 94e7c0c305dd7d2cfb3941ed77d13ff5 +94ec87f3be87da8076582349abc5e787 94ee53e735bf4e02d5d6d2e10dc0626c 94f149bb4c28e82d44b005639ea581b6 94f177f79b4bac3c1085cc80fba218f7 @@ -27765,6 +27876,7 @@ 9529b3962128a44d9cff968a61f89e9b 952a233ff29336d708b1636f01a154e0 952b22ba823b715e18d7f6a18a98c115 +952daae88592ed29e536b0a687bc7b01 952f907ed00aae1d502d96188458dc4b 952ff364f02381d5923fd4790d33f324 95312d1b24a488c1aaf1dc3fd9f618f2 @@ -28008,6 +28120,7 @@ 967758403d06ab582e3174920a9ca912 9678d73dfaf9bee5b3803dfa065d1265 9678f610950c282722077a70094a7d7d +967a63480f72678f750901913770d489 967b01a89ccaf0e7170c35d24980e158 967dd42b2f10cedf4e203bc19c5b8698 967ec6f2e4186e32ecb994733e912641 @@ -28154,6 +28267,7 @@ 9746df8fd5acb58872fb6359f02e9b90 974797d2123f4935a2a3222c82770711 9747e7ba026e9b2129ef83d217530460 +974844e0b11483f6fb0fb03cbc57eeea 974a1e1e59c1eb7e19d87ea50c90274f 97500a08462c7fdc83c31fb14e2ca2a7 9752b843d90eb06d9842418e97e9f244 @@ -28185,6 +28299,7 @@ 977d5de93f9e584aaf760f79d73f5015 977e1826b8e83dc15133d6957e51ac16 978340a7d73b2d9dfead72b642b86e9c +9783cc73906b9f01e19d5da5443bea81 9788ac48083b78b282a3360d34cba2d3 978903c8d30d0bd363eb242d8e6bf9da 9789acf3684f96c2f0caafc477252c7e @@ -28357,6 +28472,7 @@ 985e77fca1abd1a6b2cfdbf11f473649 985ec633ba21223fbbd31f1da350ec5e 9864b9ea121fac1cf437861b6aca3ea0 +9864cf5ec6dbd8f7566669ad122ee55a 986acf25406a033a30c69d57d5745259 986af39f8bed3841397297561d5adaa3 986babb4eaae342f28fae7d442ff09bc @@ -28548,6 +28664,7 @@ 995df8ada5c83cf740813d72201fdfb7 9960d5b1f2ca7fe0b823eab3c7a0a0b7 9961bc7cf483552063e320f7d7580574 +9964d4a4be9dae1b10febc2f55d28630 9964db07992625cf4fb2e8a438bfb430 99651e7fdadec147114f35076e4ceea0 996549f3ee3b174b3fcc6f9bdf1bd001 @@ -29008,6 +29125,7 @@ 9bc60241f70be80046243f842702c282 9bc60eb2112f11c439e1567c3b50cc61 9bc6cc99d092842b65f969acc5abbdab +9bc7e71d8c464e2de2e828990c67675d 9bc90d459fb5a016dfc01eda397d7602 9bc9907cdac51e993eb3f94c38ee9418 9bc9e31d551257ff596ca28bdeba92a6 @@ -29325,6 +29443,7 @@ 9d91e35788fdf67f2941091fdef8348e 9d935262430cfe429c7490963d09fcd7 9d95c47d8165e3c3da80edcebcb2cc5b +9d9777d5ee478878603f728e46cb6da2 9d98fc65878e4629933abde115892b82 9d99d1b2ccb5a8950ac93b23b7696e35 9d9aebf33219b85300611a8c91e7b1bb @@ -29492,6 +29611,7 @@ 9e83f860e740028292a2b5b7350cb8d6 9e8407949b8f4f4ade4ac9a420cdd494 9e848f6c2022e51cbac582aba9131006 +9e84f01f90df1dc8f405c5f70e74a3bb 9e85820fbdefc963d563d5025afde750 9e8769d40c03024bf4ca169489194daa 9e877f684a4e83c61e08de2747ce6850 @@ -29600,6 +29720,7 @@ 9f171aa55dd3a5b319fd4b996ef1c9d7 9f1741e24207ec85de99653036a9ce2e 9f191088b6c278c4428268dd3df88a2d +9f1d45bb689655e7141f7f89127a0c10 9f1db129ade229c7f17dfba0ff280ed8 9f200e257386f251c6a3bc58760c313b 9f22ff86cd3b140e52e3d9fdcc033e21 @@ -29630,6 +29751,7 @@ 9f49578edfd588dc99271d321333cbf4 9f4a5a9735e7a90627e7ce2da9683bc2 9f4b78dc8b5111de238d8eacea7f84ad +9f4ba9b6221d7c579417dcb1220da28f 9f4ddc6427476125544b6c9e7f153511 9f4f809b3ccfeced05f78e9516760e50 9f51a47adce0b9e3c943cfed80b56f88 @@ -29811,6 +29933,7 @@ a03c44a2db95349a2162a337a1c277ab a03cc6f3645a3f99ee05311591c94bf3 a03d656ac0e18d0b1e3da56403e18b24 a03f2b6a68b7b33715bd7afe74b9e77e +a042741fee86db3a41f1db1a04702bed a04441f99124b3c5a097d296103b94f9 a044cafe06a9dbab02af703ae4351cb7 a044f1d1e5bb03025365504da1da7363 @@ -30117,6 +30240,7 @@ a201a390e40cb5e2db7dec9c22be376a a202bedc98d42630836b7d9b13f9bd87 a2055a3a2b1a6d52982ebccf8d2235e7 a205e24bb3607a39fd9d06b4682a814a +a206f9e0bb9ff1aed51cbe684bbcd972 a207b29a98ccf8c33c592d7ab2157682 a209ad43c1313a5fa91e87ba97ad0d0f a20c8de60acf1cc52767edd6e05676b0 @@ -30672,6 +30796,7 @@ a4e06740ba336b7252a674e83e50d854 a4e2c5f46e52d22f2b480e2fc92e774c a4e4a21f4395db7c876ceccafa3d45f3 a4e8652f42673f66069ad19f813f82f6 +a4e8d8887e3a08a850015aaea902c443 a4ea8a19a629e1f6f7c3f95eb09953b3 a4ec1b54c9a2152558783e2e3d4a6b83 a4ecea027ecc6ec471da793bd6c82588 @@ -30691,6 +30816,7 @@ a50856934899d7b0ba22e0219d7c75ec a50a6475615f04fffdbb9012caae4516 a50de03e8890f1f1e336a9332a68a7c1 a511ae9ace9495c309adc18f9b35603b +a511bb1ff5f0f82fe40209b8cb212070 a512462dee847504de2a6e96ba6d732c a513f06df214aef80ef9f3f0ccbb85cf a5141eea4d0e149d321c44d3d318c468 @@ -30888,6 +31014,7 @@ a62f20995b167153a2c61978ea5908aa a630e033562b2502f1f098ee858d0e73 a6315a0db6c74f16591af958d86c9cf6 a63197b3c93ac9bb909cd308b3667a4a +a631c660039554e8aaa64cd3cd470f2c a6324e3efa542db5abee42fb72466ce0 a6328860f557c0ca5180fa123e3ca168 a63556a754fec63abfb4013052fc4b66 @@ -31181,6 +31308,7 @@ a7cda8410b153993b3f112f9c27876d3 a7cf42b2c72aa45d0143a57316ad84f9 a7d06bc8685e7414c8c75318d777615c a7d10c004ec1b02f1b893dcc71bdac46 +a7d25dc45d826dbc8b73b93346a99ffc a7d5d64e2fec691f42f38ebb662ae9fa a7d64290e1040499b1c3be7b3ea82daf a7d71de6b8c80b67e47a3c04f4986c8f @@ -31220,6 +31348,7 @@ a80daf101a5576bde27a0562fa39a4cc a813615d65351d2e5b2c5faf02aa30b4 a8142286dae679088a6e0c540356f6b6 a81454c0889f48a8b4dedb7510628950 +a814d6b139b6f1de703333dbe82bdcae a815255f8dd8ea8f56766d01b08b32ed a8156cf6b2822be4ed2aae7ec987e9b8 a815887fb16aa023e00403a78a3e8e6f @@ -31275,6 +31404,7 @@ a8500c20736f7ec6451b81e7922d9dbe a850e171f57ca7214dd6e270f0fb2254 a85376a28b83d79171bad65d5c0cd17e a853ecf10e295a5340ea1916400d528a +a854e1d2b03a069b3cf7ed10289a586b a856e94c43cf814c0f5ac187e34b6e97 a8575516ce45f950778e2c6822d3a900 a8589fbffb0de629aab10beb6a9fe66f @@ -31296,6 +31426,7 @@ a868a08020c2f51aca1f70b55f771000 a868ab292b4a03756972724718356185 a8696a6fc88b3ed32ed4899816223b99 a86a12ab1f377bc959e830d2faa6611c +a86a3083d1bfd8f49e34cb1d6cf746a9 a86a4f49bef16f0e7d7004d0be4b3be2 a86aeb171959e769847870e08169309d a86c7122f02d5e33779e0ee002a001e9 @@ -31341,6 +31472,7 @@ a8aa1e299c844e49e769fc4cec46e7ae a8ab47eae0999b40539c51bfa6b263ee a8ad92aa5e0abd074ae841ca7eb05631 a8b196597d26b9df153729f8901b11c5 +a8b475aba9ee8661b3b73eb3b0ef9583 a8b4b7dd11193180087f01efe9bd0880 a8b7e7acdb0d306ef5d09f93eb78b2d3 a8ba540d9bd8109f0364d28533121079 @@ -31355,6 +31487,7 @@ a8c899b7aecb9ac02006f2270e1dff9e a8c8ea60889237392b2f5570897bd886 a8c96be24390dc7884ae9f609efa496d a8c9c547176cb01c560ee5d5d35cc0ee +a8cae0e5c4d027e9449396fe4d0815f1 a8cb22502380e52f5bf22f9cefd079d7 a8cbdce74463d485b2ceffc4a37aa21b a8cc74a4f58eb478afcb1c9bb555b90f @@ -31432,6 +31565,7 @@ a93fc1bd88fbc2df95034ccd7bf4010d a940307cd0af50624f8151352fa658db a9403c152e6dc54393245bcda33c73b9 a94049ca1c543ae05108f1bdad6a7b57 +a9415a2f7c89327d6664be07b5104a83 a942628dcaeaf3c05a832b5fc184eff4 a94271fd6eeda401f2c591a95e2f06d9 a9428e6bbabd9f647e9f1dcdbf6e9e81 @@ -31746,6 +31880,7 @@ aadf6cbe3e7adc90b59c4da78a484ee6 aae08c272c8db732acd0979aa47d5864 aae0fd5dbf21ef01122e17c191f66ca1 aae22eef4260b0d141e70af505d64627 +aae273b9e3bb49c66f4d20a6b262b0e9 aae2f3185d477896ab2c3e1e946e94a7 aae337ad54410abe22085fd79dd42421 aae34367842a723d74b5c7663c84844f @@ -31897,6 +32032,7 @@ aba16813601bd452fee184a3815b9779 aba30058484749643439fb4f6a06b3f4 aba40c1226c50fcae9d5faf0b6a3c9bb aba636a9741ad125e78b07e9dcb057cc +aba79ecf897214d2e08ed1f560564042 aba913bf8fecb68046821b21d32a753f aba947b0945cf24cff8fa86a03dfe139 abaa5a127640864d9be9f87ef6db1752 @@ -31911,6 +32047,7 @@ abafd81efd1aecdb84105435c4fe22b4 abb0ffd13a6155c03bdd0b852640f81a abb217c5b42933679c59060f372a91bd abb2c76617a43c0872d45ec706ab199e +abb3175fa3c6474500c97d75ca546bd9 abb4c87957510f04117710d2c8805589 abb4d8aa46709f197491ef7d65106cf1 abb65d50261d54da7d7de3c53494af67 @@ -32555,6 +32692,7 @@ af067bcc545e067eee3f528d6e3c9851 af070590153217a2d8d31a2f3a68c542 af09a8675dd1b2d7cfdb51d204b36d42 af0bff6eeacd222285e5ef241c4e610b +af0efb3a79e1921962c63a4ab517d198 af1104a6c84787397db205a9984f0da5 af11fce599c55d9e8d677a2b550614fe af13405d51f98995fc0b2c121d73772c @@ -32619,6 +32757,7 @@ af5f8ea812f6fade2069847b33ef2681 af608ce4413626cabcc8d470d54a4144 af6544bdd3d79467f8946d9bcb5e0b5a af6545d1cd3327470756725b69335cdb +af66bd34c313bb7aa3f7cf9a7ff0d1a2 af67340f0d5ffe18181d9a356ead95df af67d598838637d4c2299843ee81236a af683e9bc3d22fcfb02bd187053d9cb8 @@ -32880,6 +33019,7 @@ b0a70dc67ef8645c2ce961e96027e2d9 b0a7c582d87a1d1ea55618ca90c7bb52 b0ab7c0702eb486eb3347d177c3ffd44 b0ad3034c7c8839c63c232605e13d336 +b0aef7571961edba6cacc8ff711c6da0 b0af8a15da5d662d4900dce3379a5191 b0b0c709f8a52d22f780261939df1b0e b0b1096dfe76c31d920e4ed312e5e507 @@ -33019,6 +33159,7 @@ b157b93be085c79207c9422cb7e9e33d b159a6d68606f60a60580a09cf7e78bc b15a58aafe4d517835c8714e9b4db95a b160692237247be24409094ee0ad95ba +b160e760b8348ba77366ce694a92d13e b1610be7216ac211e6e39bb65e566cf0 b1661ba861cda15cc1d95e2f8a7241ab b166d51fd6a36efcf180e30482c20793 @@ -33029,6 +33170,7 @@ b16ab5f054c1465229a0bdb2b42cb0de b16c1dbf1578657ea2525e8578dd009f b16c428253fa1f8767a6a605a84c7f7b b16c512ca209542f3e842a415050ced0 +b16dc1e3e70fbfc8f5eafb7781b9b902 b16fe83a264f55b75222032f5e498177 b171888a2e924ef45be770688dfc7aa6 b171bba5b2144b05de78b49586dd7d97 @@ -33072,6 +33214,7 @@ b1964c1efed01461b7091e279d2f06ab b1980824ab97d32da1e9a2f06d47012b b1991efde207664138a9323499f0583b b19996ab23c7493987fb14d8ac110be2 +b199c0054d2a9fb1f466b1912558abdf b199f67e96e0f2906a2c5cd364ed15d4 b19c6c8746bce23db93897c6312d3f5f b19ef5f16ab1f09a93a5edd42576cf08 @@ -33560,6 +33703,7 @@ b42c057630f7f4f1ad80977ca24c0121 b43016383f818427ecfc3eaa780824c2 b432216db666cf4c5e7d265d189b9c04 b432851882594e7dde9df8457ac1a47c +b432b56ac844c5181b0f6bdd45f70881 b4335405dd8e2172e413fd5bfc4e9812 b433cd7bf1314d3ab7e60b889f59ce4e b4350c822e414a85f403129d630e5274 @@ -33837,6 +33981,7 @@ b5dd414058bece579223452845680255 b5dd9625f2f49471d2b272869d97fb7f b5de16777cc623f8f38fa488c1f65eeb b5de4f8c96fb638eb8a3c0def2872f1f +b5de87bb320d2e80ed253a42134f228d b5df908d4737853dc289b64d79834f15 b5e0219ac7ea8c642579f40322c5a1c2 b5e2e3701e1f3e142fecb2587034cd5d @@ -34314,6 +34459,7 @@ b8608f844b96b2479a59197fb01ce72f b8612f05b7b3469670695a8be4a4ded7 b8632072679ea01fdad246db6191e6c1 b8638979ea8c5f41606350b3d9a0c9b0 +b869510c5e72e2bdef7e8b059b370423 b86ac394f404a5ff16da4ad61b7c2468 b86b81062bc60b5b3bfa578cc9f927ef b86b8ab06d3460afd3f600fd06384254 @@ -34552,6 +34698,7 @@ b9d1249478e3934e0451ea68b061a998 b9d1948db61cefe6b94a72d5b13c3210 b9d1ab89b7928a83c1c5ae0bdb8f0ca8 b9d5551c3540426c8a178ec81122971a +b9d589a5341a93bcbc9aaad3102af709 b9d5973e8d6f3c0fb6a0c1bc091d8ee7 b9d903a427b1c8f1c6580f189665e36d b9d938b0445f13b978d3b0c901f2bf24 @@ -34602,6 +34749,7 @@ ba1987ebfcf643da479cf344c9c2f624 ba1a07bbf50ce78eff970e3c7f506ce6 ba1a1b6172a1205ef6df5b10a80f8126 ba1b4396cd82b7d36808421798339113 +ba1c04316648ef3c986b451444cf4213 ba1c65ff320e2960b39e3a4b0a61f04f ba1c76a51ef7649a07b8dd88eb79ebe5 ba1cd4b62b9dc5ceddec44719c16c2eb @@ -34679,6 +34827,7 @@ ba7586b9b4f4338bd4a8fd7d2366243b ba777b1fbda380609d611db54fe9cbd0 ba77938b60b756ca36683bed9ad469a0 ba78b55a233407bf0c6e359028483cd0 +ba79498df405dc3b6ec95515fcba0492 ba795ec2e36ed4937bc1049b434694e4 ba798215fed31ec3da482a91de1b3445 ba79a6caffc5117e8f3196eb7ff48ef7 @@ -35090,6 +35239,7 @@ bcabd318018eb3b60c7a2f6bd81da7e3 bcadddbc7b1bb0a8beb8bf4af34ed08d bcadfa00a1c65b068f201ebd5155cc91 bcaf513b6d06d25055be70a130d0a575 +bcb0195549a6cf8acb6711a79bc02cb3 bcb076b10c0ec05737dc90f5d2978487 bcb0971bc7c2457e5971c0508af95265 bcb2844ca4b7708c2b2c14f56ab52334 @@ -35099,6 +35249,7 @@ bcb6e0b49fcb6b8b055e58c0d8ad285f bcba07074b5a3083456b52094d340ec4 bcbc6b3cf98638baa84e22efaa04f7a6 bcbe8348a4107ef688298f76ebcceb1b +bcbf6c0b4d7631cd92fc4167c628a600 bcc37ccc0025d23fcaa7403127751e46 bcc55a33f1c4c58670b00c72d9787f07 bcc56dea1d7f70b8506ad29b96f214fa @@ -35125,6 +35276,7 @@ bce3f4ccec0e8bedd5a97c3523a8e2c0 bce47f546f07dd52ec3cbcc6ae1d2a0d bce4a83b51846e724a69e2323bee2565 bce7a004287cece1a43ba5f4ed69ae95 +bce85622ce0dd3568970e9fba5f921f4 bce9aef8219ede97efbef91a3b2d9c47 bcea594f1bc067b29e22099817b40e57 bceb637ca41c7e17846f86f02871240c @@ -35444,6 +35596,7 @@ bebef1f0f1d919615911ee50eb4cc1eb bec06655838c61fc533a32ff1dc4afd8 bec7ca27ea5b58a2e59c69ec483527e0 bec938b30a9fcf92592b9f7d5991d34d +becae7cadc63c5a25160c75d78ca1373 becb39128633cf1a225e7594928d40a7 becba62c2de30cbff2c2e688f625641b beccb10c63ff39edfca6d75653118e8c @@ -35523,6 +35676,7 @@ bf233ce1a481581d687bb62331d0c643 bf2452793f3c6cd940f4b079e9da0cd2 bf2532fe6ce175b3d21a1c242e0e721f bf26b8d8177f1c6e71a1287742307721 +bf27e5ed19843984298a49acc078b212 bf27e77b52301acb2371dc7aad3f1ca9 bf2c48809c80ca195fad5fec2191ab26 bf2c64e03c31bbffa29aed80752ef228 @@ -35821,6 +35975,7 @@ c0e1c249434d9ef114efd4ad3543768a c0e23702e09766b7581ae7f9ba24c0d3 c0e2b7e3528e43ed5a8f130f6ff3939e c0e2be1e6d0fbd722988fed47babfc84 +c0e2db92479585a34541ed6bcc795201 c0e332a206dfce80abab3eecd73d6da7 c0e381d5b3bb56f23945cfb018182e20 c0e3fcc18db9d332c25c11f698565234 @@ -35949,6 +36104,7 @@ c1662b61ba2a432993aaa8adb3739bdc c1673faf93e54d0eb24fa234ff4ca448 c1687b5d908456ee2fc314ab832b9dc8 c16a2103e770626c099cf2700dc5df38 +c16b64300119ebb1367598822e1e3f59 c16c3b521a37ed3e08a70d55ee8d7baf c16c9f4eb346ca2671debfac466ef191 c16d75959c1b2a02d2ff791e07d72206 @@ -36088,6 +36244,7 @@ c20608e4d8d40a33e60061381fed91e7 c207465f7436477f030826802fa8d5fb c208199fef03e5d6d9127296094252dc c2096946a2ec9d344b3d74610cb1867b +c2096bc1a301472a6f2d723500ad13e0 c20b90b283a9917d0a192d00f47c32d9 c20bb6986c00324532f15344ac9b350d c20be8853de7d462dbef5596cccf5d06 @@ -36171,6 +36328,7 @@ c27f902332b821b43942e16ff7b8c861 c28728ffc5d176400f57423370902b3c c2873d4d00e7eb354028490a13c4e81a c2889806d60588b2a6c5390ba5416474 +c288d7cf37350be1fb837ef642330d6c c28a6e34dba002dac2d1f83496bb3034 c28b7f4eac528160c60d2c3753130d1d c28bb64316eae681ed19c65b1b2e5c85 @@ -36353,6 +36511,7 @@ c35897ffe17c91756ad6ed2f4c2df62a c359755e89002d8bb3f14da9a8d8639d c359a1d16ea94073f0b2d66e5964bbfa c35a4811bfff3d052bc72542545fa870 +c35b441f400343863df7764a84410222 c35c4e36dd18812818fff0cd81216267 c35c5529b6277d2637e258650f540de1 c35d4eca0f2bc31bd984dc15fcba06c7 @@ -36729,6 +36888,7 @@ c5732c9cc93b85f973a546d278adc2b3 c57387e1e3d8c5eccc7cdd4e98f4b205 c573d56825619ff2c67e341f64133af6 c574e021faa3b2f4d321b6e2ea0d8901 +c5757cdf6a5ca392312d7f1ae7644bfb c5759e87dd67aa5c513db85a2a6f15ec c5776d8d7c1821197bbef236424b90d5 c577889f4e7b13ad169e8898cc92d207 @@ -37042,7 +37202,9 @@ c70d865d7414d93a8614163282b6b421 c70dbe1f7c68539607ea9f81d3206ce7 c70fe8047dee6d355710a98111452cf8 c713d23be678056360d175b8a90a6599 +c7151dd6667d9a4b83d874c2fff06ccb c71676185918675711878b1bf201a765 +c717185e5e2a2fc5bed8f392d2a82e22 c7191f68f7df95fbdf341ce76fe8f952 c7195894a22c31cf14de2240a7f9b54d c71c18c57fdf1c8b6ed4b687edb3772d @@ -37182,6 +37344,7 @@ c7ed4ab01a672ac8a8470b5c60e5949f c7ee3db4a097aaa45e885581f28beafd c7ef72bf5d359bc97e3450045ecf66a9 c7efc97d246c9e47d8a7fabf127baf7a +c7efe97417d8550023d082e03b93cd57 c7f152fa93013ef1fdc8a125ae1f0fa1 c7f27f959c83fcc2d30c7e1c562ec71b c7f3861dc4325c2786e2fb0be4a81174 @@ -37198,6 +37361,7 @@ c8004d37f0385e670b0101a7391094ad c80190f89b911c4629e15ec667c36f04 c802f8231c39ecb66ff3199ca75179b3 c805f82d956c6e778b6bfcf438781101 +c8069c891db41ea68b6387ddee13a50c c806cd12f696205ef55ae1eb2751e4ba c8086993f26fee70ece394bdb7593e40 c80a7ae9a7efdd50fbc5b8bf3d342dd4 @@ -37228,6 +37392,7 @@ c82dd07b5259a426e7296e7e9c63021a c8315ee619ba9d400e8a2d848d048bbd c83335c1576ab28f94f05e79b16b49ce c835248adb6b18e34a45770d864713f8 +c83524aef20aba50fd13661f00402cf6 c835fd0a00a5705a3ffddfbb183e7c67 c836c29d4d71f5119ec19079f9bb6d94 c837b333d1b21d8b4cb31a26e8c2970b @@ -37604,6 +37769,7 @@ ca1bf0773b56678031b4681919c79b80 ca1c71d92dffaae0da278344196d1496 ca1e4be1c0117fe91d1e7b4cbd165ec5 ca210ae240da1d1adc2111e683b4420c +ca2201581ce15e472fda38cac221e01d ca2211b5e1a98fd6b697db99620ddbcf ca232fd5cd14301ac37e546340748571 ca25d41de97bcfca748a0f0171bb54f6 @@ -37797,6 +37963,7 @@ cb02fb6b1eb82a6749a34a33707be0a6 cb03f44e29bd64c4aaa6fe1107578ba8 cb0593a36375b7823c51483ed93aa8ca cb05ef898dfe11a4222868777df2d351 +cb060da0161852857ccee2e3e8f9e603 cb06fab0d6fdcb6d7933a0749b893e41 cb071fd1c728ff567043906072eba5ef cb0c3bf0d4eb67a382f509b65bdf985d @@ -37879,6 +38046,7 @@ cb7e490b9fcf18f3c58e080cd740cebb cb83e70d5011ba0b7592b6dcf1ba3a58 cb84f8064f77b117ba662cce95264f19 cb8847df0560dc0f03548ebb0cb46657 +cb88bf847190e2baec89ae004b6e8ae3 cb89e25ed6e968bba8a40162b05b512b cb8b174fd84b0bba429d6ea876546a10 cb8bc58698355fb1c19ecd8df1de900a @@ -38104,6 +38272,7 @@ ccc67030a5249bd95ff7976c8a16b845 ccc70d6b2ffa127819eb2c75ba085a63 ccc8bdeae955648928f0a092d70c2802 ccc94bf22246f2b59621b8867376509e +ccc9c282ece804ffb2d8566f5b1ee6df ccce5aff881c3ff9f3c7b8831a836efa cccffd87efad1c006a992fd6b51ea846 ccd1731ccf710229cb2152d68870e091 @@ -38330,6 +38499,7 @@ ce06ea6cfe067c1851b87f40a23549e1 ce0830eb28d609d24e520ed57f48c1fb ce091bf03b5eb8e5a0a554a1c2eb6526 ce09a4aa83f73b8ba6289af206a4f6ee +ce0d7f7d462b352e9c8ebdcccc2d77aa ce0ef093a5acd4fbd70035992b4fb98b ce0f9469d0d101c721ad1d3d8bc4bc64 ce104201c33f93c03357be91c75d5bf9 @@ -38351,6 +38521,7 @@ ce23848a8cf1f8c8508fd4306d1f5599 ce2559e7a31f4eb3e87833e6974f3a22 ce25c734868eb18baf8e4aff1ae3ca71 ce2852ee9df78fb230632e88b800ca40 +ce2a28b11f7e81e617090991bd8197da ce2a9dff1b56c4663e614a9c059fb30b ce2cf03e8f0aa07c395c29f97726e2cd ce3114f6c20302af0629e0e832d29d8e @@ -38424,6 +38595,7 @@ ce89107bcd3ec6f73bc65cd843416bee ce89b58e13f807979e5d16334d3d7ff2 ce8c6eb1286eac383024f9cd45e40aee ce8d77d0c71debdab00ff1415f84696f +ce8d835c8bc202accb2d44a772d85f15 ce8f51ed1a082d3428760f14379d179d ce91381740e566ca42bd4f6e11da5e9e ce953d2b2e4b538874cac52777279440 @@ -38471,6 +38643,7 @@ ceca246651679761c6a631fffca56a7a cecadcdb828d657c5072235c4f25ce5d cecbdd48a7b30a29f1a83ae4cbf6564d cecdbf4b860acf733f8d050f01440b79 +ced91b34e00592b8f2c74c061585f765 ced9613c7e8d848abdd4a8d0f0742244 ceda52ad07d1be2f359bbffc77b6b85b cedaeb0bd29fea2b4f2095b15c66ba57 @@ -38565,6 +38738,7 @@ cf47ac70448ffe55c1ebe9cd134386ec cf47cf93822ec8170f596853fc320fc4 cf47fc5539c47154cd7cf3f5a7426cf6 cf4b1ac9155becf5cc12a70bbb1b6dfe +cf4b65ca9526ba464c46d72b4a2f7f6d cf4db1516d6a8de520001d893caa03dd cf4f87da2071ca5957eeefc55b0a6342 cf5224b3e8c93444df7c1c10f48d6870 @@ -38574,6 +38748,7 @@ cf58148f54175490ef7d7c66dcf33361 cf5ab1096653dc27a685328ab1558631 cf5c4d4bb531be453b3dc746819ec9fd cf607dda9f8ef33c99ac204a08cf47b1 +cf611b586b6ec53c1516f535360246c4 cf6340d9a47d760680575e5d09f89e83 cf63cc21e68ee4f727a5bb02eec113e8 cf66a9d6815c68e2d18a5efa85aef5a6 @@ -38721,6 +38896,7 @@ d01c3378002d9d3e7f80c05c448671b1 d01cc450927cf0412c8e4a67afd84e46 d01edf77b7c5ad374b9fa5d14ec61632 d01ff9f9c09f3c3d7602b6ad699b0875 +d0216ded7c1d540db5e17ff51ead006e d0237d02c89c07dc906e9a50d4dcf261 d0242d282a35ddce370fc227469d4ff1 d024a6c5037aee9fc3581f665e41590f @@ -39020,6 +39196,7 @@ d1c94fe461b176c70485ba632bf8fee4 d1c9ff93baf7f0c0072128d9fe8ba453 d1cab63bf309819e9e1f1321c809f72d d1cce21a22e2449846999309891fee33 +d1ccfe4131a1a8fd573ca3717fd2b960 d1cf7ff96411f991e8b11a4964cd7819 d1d1b1dadcfd8844b4fe38126bf313cc d1d3db80fbb2f8e46d736e619860af99 @@ -39790,6 +39967,8 @@ d5e9050da29522a5c72ecca42ffd4251 d5e9d8e846f9ef388ce51744f19eb8be d5ea56e7df1b965b8805f8973a222517 d5eaaa3465574b330c6c27bd2ac23a32 +d5ecdad92f107eebf26c69c41708308b +d5ed33931fbba1fa5c1d431b175833a6 d5edcf161d7dd6cd71c2dfb31ee1c510 d5ee1bc14139d3af2afbff2392702a3c d5ef47d12ceb755348974ccd7dd4af38 @@ -41372,6 +41551,7 @@ de0547c068ccc028ba4cc1f28ed915a5 de06a737772e7c2fcf5cd9a93c5be6cc de087678f68db38ef8eef1e1f0b7b05c de0a0331c5e2266fcd2ab4ffb27f323e +de0a817a867d521766531c88c28a46bc de0d349c73f32438c8cfe529b839f49f de0f7693123fd000c1f2ccd5c48b895e de0ff48c7ac1f0c553a1039fe1799982 @@ -41465,6 +41645,7 @@ de95af2bc32fa7169b1e2c6a056d0fe4 de960d178f2d7465d2164b149b30aa64 de962d5c4da6269bd7a97f9d22159b26 de968c1d29ae9d3a568aed6627ebd56a +de97ebe125963225d471e7a662b4b98b de9a0e43a4fd52abae6862ac1a630d92 de9a25066f54a65fdb62a4cae47bd867 de9bc3035cafb7999344df70068204f1 @@ -41535,6 +41716,7 @@ defb126b13d295ea4ad9c60ff680e274 defb555d456d7a79c376e364631329b8 defd852c049e9fa5e839cd442f54276a deff411de717292a4449e17bfc04fd07 +deff5018e45579cc7f0f4ca52b9bd53d df0393f839b1b01518dd775ce2fca52b df07082bd9a99d6daa0b70a764e863c9 df074577784954d49b4d8018cf685678 @@ -41813,6 +41995,7 @@ e08fe87934d3481f1c0a0e7ef16932e1 e09094ff6ce7c88e70c91811fc4107cc e0913abdbb32ae0c29d135ebb03e7bb3 e0918b0a25ccdbc6bed7f4a741c6e298 +e091ecf5053793fecc2a56f9e1a7e3e9 e09227268450a76a703d8954590ad8e3 e0924829355e45efea09944426467943 e0943453cadeadf44136499c28af7929 @@ -42077,6 +42260,7 @@ e20ac72483f690835af33a32fb5811a1 e20b4023023c6a6cc1b53c7ad0b02c6e e20b5a2642acc6f580f1f8a07d4fad53 e20bae6839bd42bf0d421cafdab9ca29 +e2101d4e1831a45f3410076fcdd8e497 e215cad849e1045fb8d40dee1dde21ed e2180b4a195add9c677af858bf9c8c57 e219cdce32a330a21e46f5415a18d76a @@ -42123,6 +42307,7 @@ e25096716e8097a6c146cf4aed6c1d94 e25185c8dcc90fb8f9a54acf4194bf34 e253bedce4ae5b643c6cda8732e774c5 e254b87fdf5db942f03cb7f777b1272b +e255d6fa4ca0bd281ceb6563fecfbdd1 e25626d550ae59318e49c8c1e66f2d84 e256a43465cd0e9879a4949770c748b7 e2572bb759c6c887e40591d126ca2744 @@ -42165,6 +42350,7 @@ e28ceaaf23ad82f792226acd2a236a4a e28d05cc44c6d65e0a8fd8a6e23d3a69 e28d8efddf4c487340edbc63d037b1e8 e29045d56da1989bcaa63b85c9e79291 +e291f84f7ae263c3a586f7d6f3083f4b e2937cf5e89532ee32cb107d1cfb6f7c e2946ffa46639dcfb7a3b2490dc8451a e29635524cb702961a4bc1e1c6451a5a @@ -42244,6 +42430,7 @@ e2f9b78ab35ff32fe3cc1768f23f995e e2fa2ce826a7f4b3d8bb60b3dbf001ce e2fb2ff566cbe012570c854cb4616f5f e2fdb193213f6b209e12e99fc81fe96a +e300fb6218a28ac766a44dd9f96aadf5 e301a8cc8f8e06cdbcc7df996b93e94b e3028611571e9b87f48ffe12f619d1ac e3034572daf08b02ba908451489d3134 @@ -42414,6 +42601,7 @@ e3f056b4f5db9d56f6b9d3c724055a8f e3f11a553bf85c1bfdf97ba0e35851d2 e3f6e877df51f1df9e94cddd5cec1a8e e3fac11d6e21127d44281b3590374103 +e3fdce0b57119a256719f3f578564c91 e3ff5427c069674b619f0f35754da592 e3ff8893e2cd4934989081b0fe158249 e3ffc6475212b90741a4b443a1603cae @@ -42470,6 +42658,7 @@ e45340763a211b17b1311578539a3bf6 e45406e192feaad91ab832cb4e43cbff e455fe9ba335217ed0c94662d3359db4 e4560ec419d3fdddd74c91e57765c4ca +e4568f5232ae61b25b14d6cc4b0949c4 e456bb8231a0a408576e502c3448906f e458bcb8db4413c7a3c146e1c7a2b8f6 e458d1e74544951c9f909e28144b75dd @@ -42743,6 +42932,7 @@ e5a526708779178ab009e9efbd7b6586 e5a56607de28026ef38a96c8e77bf010 e5a595fd66578d8bab60de0fcaafe237 e5a5b4633e1ecd223f6a630e8532ad48 +e5a919ce8913b315e99ea813fd5e9697 e5a9ab74bbb74660771264dcab33152a e5aae759aecbc592936875ee3ef65380 e5afcfa23f8e58e7ea5371e9e4b60be6 @@ -42838,6 +43028,7 @@ e63077712c3878a0dd9086bc4d8a324d e630ba01cc5547a799cd58e4b223d476 e63215b7601518fbf2b6f38df18c5e60 e6321847b69fc36a32236a00d03cdbbf +e6327ba6e9d9e886e440c419cfd7331f e6331d488bbdfb4d92a1671110f32661 e633bf01bb94b37006a23d87572bd147 e63403867407a1b72e4b45ff127f3433 @@ -42902,6 +43093,7 @@ e680fa43b4c7aa7c8dc91debb910ec2a e68391e14be83ad5cb428c2cfec6bbfb e686d582b0292d6fbf390cf19d2676f1 e687eea879d77fd26b64c75015ad1a2f +e689059aa58fe68da552d8ced38f958f e68a34a16c13b9376e9b0fb6d25cc124 e68a653799edc964680f3dd5e9c79725 e68af299d861cca9c55b5dcde3825e50 @@ -42987,6 +43179,7 @@ e6f5a5c0d56bcee8b6b87e2dfd8b79a4 e6f78202abbcdc4dac2bb5868e7636e3 e6f9a1fc78888abc07c3e20791aea4a0 e6f9dbba94ad6804171f2bd740a60923 +e6facf93112fb88e70f707c69e14618e e6fbd802b65cefffe9b25ed27bd324a1 e6ff2ffdb517d5de5a85519cf199afeb e701c443b45866dc9f13660e45117f6b @@ -43475,6 +43668,7 @@ e9ab9f3dcdeebc709e264c39a65448a7 e9ac8769715d5c5a92a2fa5b6532d24d e9ad3bd3e05ef6016d774c6941f34b13 e9af1c6550085a8ba16c3ce96cd83158 +e9b33b7e844d616f44f5bd0d657aa550 e9b57af3ad907dafb1e08e300b765513 e9b66df100a9826f2090cbff204f69e7 e9b8c5f85c8711f633f61d555bace8e5 @@ -43951,6 +44145,7 @@ ec27878e2f71353214491d914ea6fd05 ec279ccddf12f0a3d18fc035c4ce537c ec29d87198be3d6dbd95e4e69fe94e5d ec2dc762200eb17a2191fbf72ab84a9c +ec2dc7c418a14e64c5a22c36ec3ecb3b ec3273babfe174a70640325c63e72c1c ec34dc6434f296c868a4d555d9ad9cb2 ec34ff7303ce3738e5324d0962cb02fc @@ -44080,6 +44275,7 @@ ece6bcafa34152f0befdc0b2a9d2ec5c ece9ceaa2fbef197c53066993a5f5ea5 ecec18d4fe0d2df913dadf22afdd14b8 ecec7bb7af409223d2b8fa3bcc5f41f9 +ecec9c787a6a76fd7f81c7f75706ed25 ecedc3df34cf0d9f97ab7fa01cf4b317 ecf30f633e5795d81ef632f5350b9162 ecf3f65c7e8d89c8a55e7c2605674862 @@ -44136,6 +44332,7 @@ ed24431c0c405ff288ac1375110e7a73 ed24784023861085d59efd85b6e400c8 ed2488672bfa641b2313f69e0708fa9a ed258eabf8c9d1809b6238b1a2d293fb +ed26c6de499b07009552116a8b481230 ed282b8104b62b9de984317bb1ee0b3f ed2aa2c23a4db744a6984190c21fe371 ed2afcafc1863c1efd1b62210e4e73d8 @@ -44287,6 +44484,7 @@ eddbcb14280502430c213441f257c3d7 eddd69004278a4ecd2a06482cf906f3a eddda44e26cc919e4ad69bd5c0927c6b ede0c86505f940b6bd639a0cf034a973 +ede139c05fb1da3b51bcf938a8becadf ede3f740335cdc85a1f8a865b275a307 ede4666eb8603ec8112601c040d49b45 ede56a182eeebf09b8fcd670fb5acbc0 @@ -44430,6 +44628,7 @@ eebd8e12c2539a84823217b59fdbee5c eebf56ab8e0733dd671cb84159d26dfc eebf99523aad6a142691ddcff3bf0d4f eec08ba43414334cf594bafcdfefcee8 +eec103174c5d7f98897d7ef1cf0e09db eec13a549c6ebfbd2b9a63969082a36d eec144ed5e73fb743b5fa0440dfc552e eec3aac8fd33f752419878a13e5dcbd2 @@ -44564,6 +44763,7 @@ ef6bd3465a28ee9cf6aa24207b979f6a ef6c83b9b535e5af29b362bb40a44dd7 ef6f1365b31c8321c0788bb9dd19a040 ef70325a61dbbed6721bb04534012167 +ef7111c4250ba0f2625eecb7bf65c242 ef71f4c46ae1d6aa3ff903a2385b220f ef72c2aabd5e34ae4ad402d53e020671 ef738a2039abb790e012fbe54bd9221a @@ -44849,6 +45049,7 @@ f0dbb7400d4771a2bfac48dc72ac5f21 f0dcf4ec180d7a8093e3d590f2224317 f0df3cf5f8e8d558a4e86ff6fc7fb7ae f0e1c5720ea75497b0ec7617d33a9dd6 +f0e31f2396324b201a640eaffa3885e9 f0e7859d1357b295aedeab2471c848c8 f0eca4761d3b9cfce2058abbe1883ce1 f0ed7ae2242b3f940d8f4abe6329c851 @@ -45552,6 +45753,7 @@ f4b9ec833fad6a119cd6f418e030896a f4bb276b31acc783b99bb89be6caf53c f4be69e55b2ede3b072139b0d56192d3 f4bfe11702f8cc47bb5fd8da527dcdfa +f4c02e07b052a26f8c8fa316b24239f5 f4c03c0836ab1df0a42c1e61f86a764c f4c33bc101b9e014ccd3c19292bccc68 f4c54000cb8b1372ca72b28a7eaab58d @@ -45894,6 +46096,7 @@ f6896094fedd9fa8995251bcdfdad4ae f68ae7e7be20b1fa2428dc4bbe49fd09 f68da1139a3ba57c1d66225da0c585ad f68e9bade32011ddace66e5fe8788711 +f690810fdc0352bcab870660941742c7 f6943608057c906311c8652716b0bfef f6945e6c3a8039599c7191de19d0118b f694a9f976383a7ede6f8fb270a9e7f0 @@ -46053,6 +46256,7 @@ f76d67994b24dd782890525ec57f8856 f76ec17c4c00bcf343402b3ba6f80002 f770d74061d61bb4a19e59e48ead279f f77133534e6e670c72354ec899b763ae +f7721c84c0215d75f874345dd3cf786c f7760dfb56e99042adc055f6efcc5437 f778cbab9c7ff1d9b9faa0fcef277150 f77a31feb2531ea362e95f1f445e18be @@ -46179,6 +46383,7 @@ f81f29c21949f6ec4874a52c1a8bcb14 f8203f487719248050a6d2242dd4c8c6 f820546f4d19b888a5c1fd9e9af3da0a f8212c07cf2c06e62f136d0f2220bc9c +f824f9a2fc66f013aa12a4883b962e24 f825f4f6913e4a2dfe3bbf1b7ed68c65 f8267072405d07590851124f661f636c f827756d8de0937fcde5329c7dd89007 @@ -47003,6 +47208,7 @@ fc9ce3ca53307a6843bd148bf5ae0fc0 fc9dd3a43f0ae139e9ae5aadd80ddec0 fca0e7ac7298000f82a820c017425f4c fca1776e9cf97ab5d32aef9dc189b818 +fca56a428b5c13372e3b912c3d05d519 fca8db86d376d4e845a379fd2f3ead06 fca981982b5301f980c50ac2e5a757e2 fcafddd71789f3660b4211c932ae0e3f @@ -47207,6 +47413,7 @@ fdcdb782389e3249531534951281a11f fdd18f0a1db219bea88a0ff9fdca4b63 fdd329cba0052c33269ab23ea9c63e02 fdd3325911a4fce988f6fc3d9c66f64b +fdd3c0e9f3af94072deaeb9fa11b9a15 fdd727deef6209b900007f7cba9898cb fddd7eb9aacbf44798a9d7d493873f80 fddef0c27f2c7ba703a006912a35bf9f @@ -47368,6 +47575,7 @@ fec024dfdde6e347262968adaf10367b fec541d7a8a95181fe9de32cef490420 fec5aa7042d154bf4fc4baf62a450045 fec629773270160ba4110b9871935213 +fec6ae44e7a9512e320cd7c8752f39ae fec6c4dc0fb8c6387ff66142a4390802 fec6f80d492c6e5d906a129e990366ce fec8460590d596f617dbe432f06922f4 diff --git a/searx/data/core.py b/searx/data/core.py new file mode 100644 index 000000000..14cc77eb7 --- /dev/null +++ b/searx/data/core.py @@ -0,0 +1,29 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +# pylint: disable=missing-module-docstring +from __future__ import annotations + +import pathlib + +from searx import logger +from searx.cache import ExpireCacheCfg, ExpireCacheSQLite + +log = logger.getChild("data") + +data_dir = pathlib.Path(__file__).parent + +_DATA_CACHE: ExpireCacheSQLite = None # type: ignore + + +def get_cache(): + + global _DATA_CACHE # pylint: disable=global-statement + + if _DATA_CACHE is None: + _DATA_CACHE = ExpireCacheSQLite.build_cache( + ExpireCacheCfg( + name="DATA_CACHE", + # MAX_VALUE_LEN=1024 * 200, # max. 200kB length for a *serialized* value. + # MAXHOLD_TIME=60 * 60 * 24 * 7 * 4, # 4 weeks + ) + ) + return _DATA_CACHE diff --git a/searx/data/currencies.json b/searx/data/currencies.json index 09bee0ea0..b0096673d 100644 --- a/searx/data/currencies.json +++ b/searx/data/currencies.json @@ -1428,7 +1428,7 @@ }, "CZK": { "ar": "كرونة تشيكية", - "bg": "крони", + "bg": "Чешка крона", "bn": "চেক কোরুনা", "ca": "corona txeca", "cs": "koruna česká", @@ -2687,7 +2687,7 @@ "uk": "Йорданський динар" }, "JPY": { - "af": "Jen", + "af": "jen", "ar": "ين ياباني", "bg": "японска йена", "bn": "জাপানি ইয়েন", @@ -4329,7 +4329,7 @@ "PLN": { "af": "Złoty", "ar": "زواتي بولندي", - "bg": "Полска злотаПолска злота", + "bg": "Полска злота", "ca": "złoty", "cs": "zlotý", "da": "zloty", @@ -4375,7 +4375,7 @@ "PLZ": { "af": "Złoty", "ar": "زواتي بولندي", - "bg": "Полска злотаПолска злота", + "bg": "Полска злота", "ca": "złoty", "cs": "zlotý", "da": "zloty", @@ -5881,6 +5881,10 @@ "tt": "самоа таласы", "uk": "Самоанська тала" }, + "XAD": { + "en": "Arab accounting dinar", + "fr": "dinar arabe" + }, "XAF": { "ar": "فرنك وسط إفريقي", "bg": "Централноафрикански CFA франк", @@ -6375,6 +6379,7 @@ "$usd": "USD", "1000 lira": "LBP", "100ドル紙幣": "NIO", + "1億ベネズエラ・ボリバル": "VES", "2019 zimbabwean dollar": "ZWL", "5th zimbabwean dollar": "ZWL", "A$": "AUD", @@ -6511,6 +6516,7 @@ "Z$": "ZWL", "ZK": "ZMW", "a$": "AUD", + "aad": "XAD", "abd doları": "USD", "adb unit of account": "XUA", "ae92 0530 0000 1514 1185 002": "AED", @@ -6610,6 +6616,7 @@ "aoa": "AOA", "apvienotās karalistes sterliņu mārciņa": "GBP", "ar": "MGA", + "arab accounting dinar": "XAD", "arabiemiraattien dirhami": "AED", "arany mint befektetés": "XAU", "arg$": "ARS", @@ -7438,6 +7445,7 @@ "dinar algierski": "DZD", "dinar aljazair": "DZD", "dinar alxeriano": "DZD", + "dinar arabe": "XAD", "dinar argelino": "DZD", "dinar bahrain": "BHD", "dinar bahraini": "BHD", @@ -7458,6 +7466,7 @@ "dinar bhairéin": "BHD", "dinar chuáit": "KWD", "dinar coaitiano": "KWD", + "dinar comptable arabe": "XAD", "dinar couaitiano": "KWD", "dinar covaitiano": "KWD", "dinar coveiteano": "KWD", @@ -9162,7 +9171,6 @@ "jordán dinár": "JOD", "jordánsky dinár": "JOD", "jordánský dinár": "JOD", - "jpy": "JPY", "juan": "CNY", "juanis": "CNY", "juaņa": "CNY", @@ -9813,7 +9821,6 @@ "livre de sainte hélène": "SHP", "livre des îles falkland": "FKP", "livre des îles malouines": "FKP", - "livre egyptienne": "EGP", "livre égyptienne": "EGP", "livre libanaise": "LBP", "livre soudanaise": "SDG", @@ -13367,7 +13374,6 @@ ], "крона чеська": "CZK", "крона швеции": "SEK", - "крони": "CZK", "куба писысы": "CUP", "кубански пезос": "CUP", "кубански песо": "CUP", @@ -13645,10 +13651,6 @@ "PLZ", "PLN" ], - "полска злотаполска злота": [ - "PLZ", - "PLN" - ], "польский злотый": [ "PLZ", "PLN" diff --git a/searx/data/currencies.py b/searx/data/currencies.py new file mode 100644 index 000000000..0721037a1 --- /dev/null +++ b/searx/data/currencies.py @@ -0,0 +1,55 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +"""Simple implementation to store currencies data in a SQL database.""" + +from __future__ import annotations + +__all__ = ["CurrenciesDB"] + +import json +import pathlib + +from .core import get_cache, log + + +class CurrenciesDB: + # pylint: disable=missing-class-docstring + + ctx_names = "data_currencies_names" + ctx_iso4217 = "data_currencies_iso4217" + + json_file = pathlib.Path(__file__).parent / "currencies.json" + + def __init__(self): + self.cache = get_cache() + + def init(self): + if self.cache.properties("currencies loaded") != "OK": + self.load() + self.cache.properties.set("currencies loaded", "OK") + # F I X M E: + # do we need a maintenance .. rember: database is stored + # in /tmp and will be rebuild during the reboot anyway + + def load(self): + log.debug("init searx.data.CURRENCIES") + with open(self.json_file, encoding="utf-8") as f: + data_dict = json.load(f) + for key, value in data_dict["names"].items(): + self.cache.set(key=key, value=value, ctx=self.ctx_names, expire=None) + for key, value in data_dict["iso4217"].items(): + self.cache.set(key=key, value=value, ctx=self.ctx_iso4217, expire=None) + + def name_to_iso4217(self, name): + self.init() + + ret_val = self.cache.get(key=name, default=name, ctx=self.ctx_names) + if isinstance(ret_val, list): + # if more alternatives, use the last in the list + ret_val = ret_val[-1] + return ret_val + + def iso4217_to_name(self, iso4217, language): + self.init() + + iso4217_languages: dict = self.cache.get(key=iso4217, default={}, ctx=self.ctx_iso4217) + return iso4217_languages.get(language, iso4217) diff --git a/searx/data/engine_descriptions.json b/searx/data/engine_descriptions.json index fbccee24b..47ab4fcf7 100644 --- a/searx/data/engine_descriptions.json +++ b/searx/data/engine_descriptions.json @@ -88,23 +88,23 @@ }, "ar":{ "1337x":"1337x هو موقع ويب يوفر دليلًا لملفات التورنت وروابط التورنت المستخدمة لمشاركة الملفات من نظير إلى نظير من خلال بروتوكول بت تورنت. وفقًا لمدونة أخبار تورنت فريك، فإن 1337x هو ثالث أشهر مواقع التورنت اعتبارًا من عام 2021.", - "9gag":"9جاج ‏ هو موقع صور قائم على مواقع الإعلام الاجتماعي ويتمحور حول الصور التي يرفعها المستخدمون والصور الهزلية، يزور الموقع شهريا مليارا زائر كما في شهر ديسمبر 2011 حسب موسس الموقع راي تشان. ويعرف الموقع بشكل رئيسي باستخدام ميم إنترنت.", - "alpine linux packages":"ألباين لينكس ‏ هي توزيعة لينكس مستقلة صممت لتكون صغيرة وبسيطة وآمنة. تستخدم التوزيعة مسل، وبيزي بوكس، وأوبن آر سي بدلًا من مكتبة جنو لسي، وأدوات جنو الأساسية، وسيستم دي الاعتياديين الموجودين في أغلب التوزيعات، مما يجعلها أحد التوزيعات القليلة التي لا تعتمد على جنو.", - "ansa":"وكالة الأنباء الإيطالية أو الوكالة القومية المشتركة للأنباء (بالإيطالية: Agenzia Nazionale Stampa Associata)‏ «أنسا». هي أكبر وكالة للمعلومات في إيطاليا وإحدى كبريات وكالات الأنباء العالمية. تعتبر أنسا وكالة أنباء تعاونية غير ربحية. كما أن أعضائها والمالكون لها هم 36 من كبريات شبكات ووكالات الأنباء في إيطاليا. ومهمتها تكمن في بث تقارير موضوعية ومحايدة للأخبار.", - "apple app store":"متجر التطبيقات ‏ هي خدمة أنتجت لجهازي آي فون وآي بود تاتش وآي باد. صممته وتملكه شركة أبل والتي تمكن المستخدمين من تحميل التطبيقات المختلفة من خلال البرنامج نفسه على الجهاز دون الحاجة لبرنامج آي تيونز ستور بعد تحديث نظام التشغيل iOS 10. بلغ متوسط القيمة التقديرية لحجم المتجر 6 مليارات و200 مليون في عام 2010.", - "apple maps":"خرائط أبل ‏ هي خدمة خرائط ويب طورتها شركة أبل وهو نظام الخرائط الافتراضي الخاص بالأجهزة المستخدمة لأنظمة آي أو إس وماك أوس وووتش أو إس. توفر الخدمة معلومات الاتجاهات والزمن التقديري لوصول السيارات والمشاة وملاحة النقل العام. كما تُقدم خرائط أبل ميزة خاصة تُمكن المستخدم من استكشاف بعض المراكز الحضرية المكتظة بالسكان وغيرها من الأماكن الهامة بمشاهد ثلاثية الأبعاد تُظهر الأبنية.", + "9gag":"9جاج هو موقع صور قائم على مواقع الإعلام الاجتماعي ويتمحور حول الصور التي يرفعها المستخدمون والصور الهزلية، يزور الموقع شهريا مليارا زائر كما في شهر ديسمبر 2011 حسب موسس الموقع راي تشان. ويعرف الموقع بشكل رئيسي باستخدام ميم إنترنت.", + "alpine linux packages":"ألباين لينكس هي توزيعة لينكس مستقلة صممت لتكون صغيرة وبسيطة وآمنة. تستخدم التوزيعة مسل، وبيزي بوكس، وأوبن آر سي بدلًا من مكتبة جنو لسي، وأدوات جنو الأساسية، وسيستم دي الاعتياديين الموجودين في أغلب التوزيعات، مما يجعلها أحد التوزيعات القليلة التي لا تعتمد على جنو.", + "ansa":"وكالة الأنباء الإيطالية أو الوكالة القومية المشتركة للأنباء (بالإيطالية: Agenzia Nazionale Stampa Associata) «أنسا». هي أكبر وكالة للمعلومات في إيطاليا وإحدى كبريات وكالات الأنباء العالمية. تعتبر أنسا وكالة أنباء تعاونية غير ربحية. كما أن أعضائها والمالكون لها هم 36 من كبريات شبكات ووكالات الأنباء في إيطاليا. ومهمتها تكمن في بث تقارير موضوعية ومحايدة للأخبار.", + "apple app store":"متجر التطبيقات هي خدمة أنتجت لجهازي آي فون وآي بود تاتش وآي باد. صممته وتملكه شركة أبل والتي تمكن المستخدمين من تحميل التطبيقات المختلفة من خلال البرنامج نفسه على الجهاز دون الحاجة لبرنامج آي تيونز ستور بعد تحديث نظام التشغيل iOS 10. بلغ متوسط القيمة التقديرية لحجم المتجر 6 مليارات و200 مليون في عام 2010.", + "apple maps":"خرائط أبل هي خدمة خرائط ويب طورتها شركة أبل وهو نظام الخرائط الافتراضي الخاص بالأجهزة المستخدمة لأنظمة آي أو إس وماك أوس وووتش أو إس. توفر الخدمة معلومات الاتجاهات والزمن التقديري لوصول السيارات والمشاة وملاحة النقل العام. كما تُقدم خرائط أبل ميزة خاصة تُمكن المستخدم من استكشاف بعض المراكز الحضرية المكتظة بالسكان وغيرها من الأماكن الهامة بمشاهد ثلاثية الأبعاد تُظهر الأبنية.", "arch linux wiki":[ "توثيق آرتش لينكس على الوِب", "wikidata" ], "artic":"معهد الفن في شيكاغو متحف عام للفن، ومركز ثقافي وتعليمي في الولايات المتحدة. تأسس معهد الفن عام 1866 باسم أكاديمية شيكاغو للتصميم، تضم المجموعات المعروضة في المعهد اللوحات والمنحوتات، والمطبوعات والرسومات والفنون الزخرفية الأوروبية والأمريكية والفن الشرقي والكلاسيكي وفن التصوير الضوئي والمنسوجات وفنون وحرف أفريقيا وأمريكا اللاتينية وجزر المحيط الهادئ وأمريكا ما قبل كولمبوس.", - "arxiv":"أرخايف ‏ بحيث تُنطق في النهاية «أركايف» أو «أرخايف». أرخايف هو أرشيف لمسودات أوراق علمية إلكترونية مكتوبة في مجالات الفيزياء، الرياضيات، الفلك، علم الحاسوب، والإحصاء التي يمكن الوصول إليها عبر الإنترنت. هذه الأرشيفات موجودة على موقع arXiv.org.", - "ask":"أسك دوت كوم ‏ هو باحوث ‏ يركز على الرد على الأسئلة. تأسس الموقع في العام 1996 من قبل غاريت جرونر وديفيد وارثن في بيركلي، كاليفورنيا.", + "arxiv":"أرخايف بحيث تُنطق في النهاية «أركايف» أو «أرخايف». أرخايف هو أرشيف لمسودات أوراق علمية إلكترونية مكتوبة في مجالات الفيزياء، الرياضيات، الفلك، علم الحاسوب، والإحصاء التي يمكن الوصول إليها عبر الإنترنت. هذه الأرشيفات موجودة على موقع arXiv.org.", + "ask":"أسك دوت كوم هو باحوث يركز على الرد على الأسئلة. تأسس الموقع في العام 1996 من قبل غاريت جرونر وديفيد وارثن في بيركلي، كاليفورنيا.", "askubuntu":[ "stackoverflow:ar", "ref" ], - "baidu":"بايدو ‏ هو محرك بحث صيني انطلق يوم 18 يناير 2000. وهو المصنف رقم واحد في الصين والثالث عالمياً حسب عدد الزيارات حسب تصنيف أليكسا، حيث يمكن هذا الموقع من البحث في أكثر من 57 تصنيف مختلف، منها الصور، الفيديو، الأخبار والوثائق وغيرها الكثير. قام بإنشاء موقع بايدو الصينيان روبن لي وإريك تشو، وكلاهما درسا خارج الصين قبل العودة إليها بشهادات عليا حيث أسسا شركة بايدو. وفي سنة 2007، صارت شركة بايدو أول شركة صينية تُسَجل في بورصة نازداك الأمريكية.واتخذ بايدو كشعار له، بايدو يعرف الصينيين أفضل، أو أفضل من غيره، مشيراً بذلك إلى منافسيه الذين يعملون أساساً من قارات بعيدة عن الصين كجوجل.", + "baidu":"بايدو هو محرك بحث صيني انطلق يوم 18 يناير 2000. وهو المصنف رقم واحد في الصين والثالث عالمياً حسب عدد الزيارات حسب تصنيف أليكسا، حيث يمكن هذا الموقع من البحث في أكثر من 57 تصنيف مختلف، منها الصور، الفيديو، الأخبار والوثائق وغيرها الكثير. قام بإنشاء موقع بايدو الصينيان روبن لي وإريك تشو، وكلاهما درسا خارج الصين قبل العودة إليها بشهادات عليا حيث أسسا شركة بايدو. وفي سنة 2007، صارت شركة بايدو أول شركة صينية تُسَجل في بورصة نازداك الأمريكية.واتخذ بايدو كشعار له، بايدو يعرف الصينيين أفضل، أو أفضل من غيره، مشيراً بذلك إلى منافسيه الذين يعملون أساساً من قارات بعيدة عن الصين كجوجل.", "baidu images":[ "baidu:ar", "ref" @@ -114,7 +114,7 @@ "ref" ], "bilibili":"بيليبيلي (بالأنجليزية:bilibili) هو موقع ويب من نوع خدمة استضافة فيديو وتطبيق محمول أنشئ في 26 يونيو 2009، يقع مقره الرئيسي في الصين، وهو متوفر باللغة الصينية. يعد Bilibili واحداً من أهم منصات الفيديو الناشئة في الصين. يحظى الموقع بشعبية ضخمة بين الجيل Z في الصين. يميل محتوى Bilibili إلى أن يكون حول الألعاب والرسوم المتحركة والقصص المصورة. ومع ذلك، فإن عدد أنواع الفيديو الشائعة يتغير مع تزايد شعبية المنصة، ويرتبط معظمها بأسلوب الحياة والجمال. وهو يتشابه إلى حد كبير مع موقع اليوتيوب.", - "bing":"مايكروسوفت بينغ ‏ واختصارًا وهو الاسم السابق: بينغ ‏ ؛ هو محرك بحث أعلن عنه تحت اسم ، طور تحت اسم بالعربية: كومو وإنجليزية: kumo, هو محرك بحث في ويب لشركة مايكروسوفت، صمم لمنافسة رواد هذا المجال جوجل وياهو!، تم الإفصاح عنه من قبل ستيف بالمر الرئيس التنفيذي السابق في مايكروسوفت في 28 مايو 2009 في مؤتمر All Things D في سان دييغو، بينغ هو بديل لايف سيرش Live Search، بدأ عمله بالكامل في 3 يونيو 2009.", + "bing":"مايكروسوفت بينغ واختصارًا وهو الاسم السابق: بينغ ؛ هو محرك بحث أعلن عنه تحت اسم ، طور تحت اسم بالعربية: كومو وإنجليزية: kumo, هو محرك بحث في ويب لشركة مايكروسوفت، صمم لمنافسة رواد هذا المجال جوجل وياهو!، تم الإفصاح عنه من قبل ستيف بالمر الرئيس التنفيذي السابق في مايكروسوفت في 28 مايو 2009 في مؤتمر All Things D في سان دييغو، بينغ هو بديل لايف سيرش Live Search، بدأ عمله بالكامل في 3 يونيو 2009.", "bing images":[ "bing:ar", "ref" @@ -131,8 +131,8 @@ "خدمة استضافة على شبكة الإنترنت لمشاريع تطوير البرمجيات", "wikidata" ], - "bitchute":"بيتشيوت ‏ هو موقع وتطبيق خدمة فيديوهات تم إنشائه في إنجلترا في يناير 2017 من قبل راي فاهي لينافس يوتيوب، حاز هذا الموقع على شعبية عند مدوني اليمين الأقصى مثل أليكس جونس ومن ألذين تم منعهم بسبب سياسات يوتيوب، وقد أتهم الموقع بإثارة الكراهية.", - "brave":"بريف ‏ وتعني شجاع هو متصفح ويب مفتوح المصدر مبني على كروميوم، يعمل المتصفح على نظم تشغيل مايكروسوفت ويندوز وماك أو إس وجنو/لينكس، وكذلك يعمل على نظامي آي أو إس وأندرويد. ترأس بريندان أيخ، منشئ جافاسكربت وأحد مؤسسي مؤسسة موزيلا، مشروع تطوير هذا المتصفح.", + "bitchute":"بيتشيوت هو موقع وتطبيق خدمة فيديوهات تم إنشائه في إنجلترا في يناير 2017 من قبل راي فاهي لينافس يوتيوب، حاز هذا الموقع على شعبية عند مدوني اليمين الأقصى مثل أليكس جونس ومن ألذين تم منعهم بسبب سياسات يوتيوب، وقد أتهم الموقع بإثارة الكراهية.", + "brave":"بريف وتعني شجاع هو متصفح ويب مفتوح المصدر مبني على كروميوم، يعمل المتصفح على نظم تشغيل مايكروسوفت ويندوز وماك أو إس وجنو/لينكس، وكذلك يعمل على نظامي آي أو إس وأندرويد. ترأس بريندان أيخ، منشئ جافاسكربت وأحد مؤسسي مؤسسة موزيلا، مشروع تطوير هذا المتصفح.", "brave.images":[ "brave:ar", "ref" @@ -145,14 +145,14 @@ "brave:ar", "ref" ], - "currency":"دك دك غو أو داك داك غو ‏ هو محرك بحث على الإنترنت يركز على حماية خصوصية الباحثين وتجنب فقاعة التصفية لنتائج البحث المخصصة. يميز DuckDuckGo نفسه عن محركات البحث الأخرى من خلال عدم تحديد سمات مستخدميه وإظهار نفس نتائج البحث لجميع المستخدمين لمصطلح بحث معين.", + "currency":"دك دك غو أو داك داك غو هو محرك بحث على الإنترنت يركز على حماية خصوصية الباحثين وتجنب فقاعة التصفية لنتائج البحث المخصصة. يميز DuckDuckGo نفسه عن محركات البحث الأخرى من خلال عدم تحديد سمات مستخدميه وإظهار نفس نتائج البحث لجميع المستخدمين لمصطلح بحث معين.", "dailymotion":"ديلي موشن (Dailymotion) هو موقع ويب شهير متخصص بمشاركة الفيديو، يعتبر منافس ليوتويب، يسمح للمستخدمين برفع ومشاهدة ومشاركة مقاطع الفيديو بشكل مجاني. في نوفمبر 2012 احتل الموقع المرتبة 31 لأكثر المواقع زيارة في العالم بحجم زائرين يصل إلى 116 مليون زائر في الشهر.", "ddg definitions":[ "currency:ar", "ref" ], - "deezer":"ديزر ‏ وهي منصة إلكترونية تقدم خدمة بث الموسيقى. وتتيح للمستخدمين الاستماع إلى الموسيقى من شركات إنتاج موسيقية، مثل: سوني للترفيه الموسيقي، ومجموعة يونيفرسال ميوزيك، ووارنر ميوزيك على مختلف الأجهزة سواء باستخدام الإنترنت أو من دون اتصال. تم إنشاء المنصّة في باريس، فرنسا، لدى دييزر حاليا 56 مليون ملف صوتي في المكتبة، مع أكثر من 60,000 قناة راديو، و18 مليون مستخدم نشط شهريا، منهم 7 ملايين مشترك اشتراك مدفوع منذ 3 أبريل 2020. الخدمة متاحة على شبكة الإنترنت، ونظام اندرويد، ونظام آي أو اس، وويندوز موبايل، ونظام التشغيل بلاك بيري، وويندوز، وماك.", - "deviantart":"ديڤينت‌آرت ‏ هو هو مجتمع فن أمريكي يتناول الأعمال الفنية، والتصوير الفيديوي والفوتوغرافي. أطلق في 7 أغسطس، 2000، من قبل انجيلو سوتيرا، سكوت جاركوف، ماثيو ستيفنز، وآخرين. تنظم الأعمال الفنية بحسب تصنيفات، وتشمل التصنيفات، التصوير الفوتوغرافي، والفن الرقمي، والفن التقليدي، والأدب، وفلاش، وصناعة الإفلام أو تصوير الأفلام، والأغلفة للتطبيقات، وأدوات تخصيص نظام التشغيل وغيرها، بالإضافة إلى المواد القابلة للتنزيل مثل الدورات التعليمية، والصور الفوتوغرافية. بالإضافة إلى مزايا إضافية مثل المجلات، والاستفتاءات، والمجموعات، ووملفات الأعمال الفنية.", + "deezer":"ديزر وهي منصة إلكترونية تقدم خدمة بث الموسيقى. وتتيح للمستخدمين الاستماع إلى الموسيقى من شركات إنتاج موسيقية، مثل: سوني للترفيه الموسيقي، ومجموعة يونيفرسال ميوزيك، ووارنر ميوزيك على مختلف الأجهزة سواء باستخدام الإنترنت أو من دون اتصال. تم إنشاء المنصّة في باريس، فرنسا، لدى دييزر حاليا 56 مليون ملف صوتي في المكتبة، مع أكثر من 60,000 قناة راديو، و18 مليون مستخدم نشط شهريا، منهم 7 ملايين مشترك اشتراك مدفوع منذ 3 أبريل 2020. الخدمة متاحة على شبكة الإنترنت، ونظام اندرويد، ونظام آي أو اس، وويندوز موبايل، ونظام التشغيل بلاك بيري، وويندوز، وماك.", + "deviantart":"ديڤينت‌آرت هو هو مجتمع فن أمريكي يتناول الأعمال الفنية، والتصوير الفيديوي والفوتوغرافي. أطلق في 7 أغسطس، 2000، من قبل انجيلو سوتيرا، سكوت جاركوف، ماثيو ستيفنز، وآخرين. تنظم الأعمال الفنية بحسب تصنيفات، وتشمل التصنيفات، التصوير الفوتوغرافي، والفن الرقمي، والفن التقليدي، والأدب، وفلاش، وصناعة الإفلام أو تصوير الأفلام، والأغلفة للتطبيقات، وأدوات تخصيص نظام التشغيل وغيرها، بالإضافة إلى المواد القابلة للتنزيل مثل الدورات التعليمية، والصور الفوتوغرافية. بالإضافة إلى مزايا إضافية مثل المجلات، والاستفتاءات، والمجموعات، ووملفات الأعمال الفنية.", "duckduckgo":[ "currency:ar", "ref" @@ -173,32 +173,32 @@ "currency:ar", "ref" ], - "emojipedia":"إيموجي بيديا ‏ هو موقع على الإنترنت مختص بمراجع الإيموجي، قام بإنشائه متخصص الإيموجي جيرمي بورج في 2013.", + "emojipedia":"إيموجي بيديا هو موقع على الإنترنت مختص بمراجع الإيموجي، قام بإنشائه متخصص الإيموجي جيرمي بورج في 2013.", "etymonline":"قاموس علم اشتقاق الألفاظ هو قاموس حر على الانترنت يصف أصول الكلمات باللغة الإنجليزية.", - "fdroid":"إف-درويد ‏ هو مستودع برامج أو «متجر تطبيقات» لتطبيقات الأندرويد، مماثل ومشابه ل جوجل بلاي ستور . المستودع الرئيسي مستضاف من طرف مشروع يحتوي فقط على تطبيقات ذات برامج حرة أو مفتوحة المصدر. التطبيقات يمكن تصفحها وتحميلها من الموقع الرسمي ل إف-درويد بدون حاجة المستخدم إلى تسجيل أو فتح حساب. «مضاد الميزات» على غرار الإعلانات تستعمل التتبع أو أنها تعتمد على برامج غير حرة ويتم ذكر هذا في الوصف. يقدم الموقع أيضا مصدر الكود للتطبيقات ، حيث أن مضيفي البرامج يستعملون خادم ف-درويد، وبالتالي يسمحون لأي شخص من المجموعة في أن يصبح ملك تطبيق معين في المستودع.", - "flickr":"فليكر ‏ هي خدمة استضافة الصور والفيديو بالإضافة إلى كونها مجتمعًا عبر الإنترنت. تأسَّست فليكر من قِبل لوديكورب ‏ عام 2004 وأصبحت منصّة شائعة للمصورين الهواة والمحترفين لاستضافة صور عاليّة الدقة. تغيّرت ملكية فليكر عدة مرات إلى أن امتلكتها سموج موج ‏ منذ العشرين من نيسان/أبريل 2018.", + "fdroid":"إف-درويد هو مستودع برامج أو «متجر تطبيقات» لتطبيقات الأندرويد، مماثل ومشابه ل جوجل بلاي ستور . المستودع الرئيسي مستضاف من طرف مشروع يحتوي فقط على تطبيقات ذات برامج حرة أو مفتوحة المصدر. التطبيقات يمكن تصفحها وتحميلها من الموقع الرسمي ل إف-درويد بدون حاجة المستخدم إلى تسجيل أو فتح حساب. «مضاد الميزات» على غرار الإعلانات تستعمل التتبع أو أنها تعتمد على برامج غير حرة ويتم ذكر هذا في الوصف. يقدم الموقع أيضا مصدر الكود للتطبيقات ، حيث أن مضيفي البرامج يستعملون خادم ف-درويد، وبالتالي يسمحون لأي شخص من المجموعة في أن يصبح ملك تطبيق معين في المستودع.", + "flickr":"فليكر هي خدمة استضافة الصور والفيديو بالإضافة إلى كونها مجتمعًا عبر الإنترنت. تأسَّست فليكر من قِبل لوديكورب عام 2004 وأصبحت منصّة شائعة للمصورين الهواة والمحترفين لاستضافة صور عاليّة الدقة. تغيّرت ملكية فليكر عدة مرات إلى أن امتلكتها سموج موج منذ العشرين من نيسان/أبريل 2018.", "free software directory":"دليل البرمجيات الحرة (FSD) هو مشروع تابع لمؤسسة البرمجيات الحرة (FSF). يقوم بفهرسة البرامج المجانية التي تعمل في ظل أنظمة التشغيل الحرة - خاصة جنو و لينكس. غالبًا ما تكون المشاريع المفهرسة قادرة على العمل في العديد من أنظمة التشغيل الأخرى. كان المشروع في السابق بالاشتراك مع اليونسكو.", "genius":"جينيس (بالإنجليزية:Genius) كان اسمها سابقاً راب جينيس وهي شركة أمريكية للإعلام الرقمي, أسس الموقع في آب 2009 من قبل توم ليهمان، إيلان زيخوري، ومهبود موغادام، والموقع يتيح للمستخدمين تقديم شروح وتفسير كلمات الأغاني، وقصص إخبارية، ومصادر، ووثائق.", "gentoo":[ "gentoo:en", "ref" ], - "github":"غيت هاب ‏ هي شركة تابعة لمايكروسوفت توفر استضافة لتطوير البرامج والتحكم في الإصدار باستخدام غيت. توفر الشركة وظائف التحكم في الإصدار الموزع وإدارة كود المصدر (SCM) لـ «غيت»، بالإضافة إلى ميزاته الخاصة. يوفر النظام التحكم في الوصول والعديد من ميزات التعاون مثل تتبع الأخطاء وطلبات الميزات البرمجية وإدارة المهام والتركيب المتواصل ومواقع ويكي لكل مشروع غيت هاب. يقع مقرها الرئيسي في كاليفورنيا، وهي شركة تابعة لشركة مايكروسوفت منذ عام 2018.", - "gitlab":"غيت لاب ‏ هي شركة مفتوحة النواة تشتهر بتقديم مدير مستودعات غيت الذي يحمل نفس اسم الشركة.", - "goodreads":"جودريدز أو غودريدز ‏ تترجم للعربية بـ القراءات الجيدة هي شبكة اجتماعية تهتم بالكتب وبتوصيات وآراء المستخدمين حول الكتب والمؤلفين، أسس الموقع في عام 2006 من جهد المبرمج الأمريكي أوتيس تشاندلر. انطلق الموقع في ديسمبر 2006 ووصل عدد الأعضاء المسجلين في جود ريدز إلى أكثر من المليون عضو حتى اليوم، شاركوا بما يزيد على 10 ملايين كتاب، ورغم ذلك فإن الموقع لم يكن هادفاً للربح عند إطلاقه وبعد عام واحد فقط تلقى تمويلاً من إحدى الشركات لدفعه إلى الأمام والمحافظة على خدمته المتميزة. في آذار 2013 أعلنت شركة أمازون استحواذها عليه بدون الإفصاح عن مبلغ العقد.", - "google":"بحث جوجل ‏ أو جوجل ‏، هو محرك بحث صممته شركة جوجل. وهو محرك البحث الأكثر استخدامًا على شبكة الويب العالمية عبر جميع الأنظمة الأساسية، مع حصة سوقية تبلغ 92.16٪ اعتبارًا من ديسمبر 2020، ويتعامل مع أكثر من 5.4 مليار عملية بحث يوميًا.", - "google images":"صور جوجل ‏: هو محرك بحث مصمم خصيصاً للبحث عن الصور، بلغ عدد الصور التي تحتويه 10 مليارات صورة، بينما يبلغ عدد متصفحيه مليار مستخدم يومياً. أطلقت هذه الخدمة منذ يوليو 2001.", - "google news":"أخبار جوجل ‏ هو برنامج مبني على الويب، تقدمه شركة جوجل. البرنامج عبارة عن مجمع أخبار. يستخدم البرنامج خوارزمية Storyrank التي يمكن القول أنها الخوارزمية الشقيقة لخوارزمية Pagerank التي جعلت باحوث جوجل من أفضل محركات البحث على الإنترنت. تم تطوير الخوارزمية بواسطة كاريشنا باهارات في العام 2001. تم تقديم أخبار جوجل كنسخة بيتا في أبريل 2002. خرج البرنامج من مرحلة البيتا في 23 يناير 2006. هناك عدة نسخ من البرنامج مخصصة ل 20 إقليما في العالم تستخدم 12 لغة. اللغات المتاحة حالياً هي: العربية، العبرية، الصينية ، اليبانية، الكورية، الفرنسية، الألمانية، الإسبانية، الإنجليزية، الإيطالية، البرتغالية، الهولندية، النرويجية، والسويدية.", - "google play apps":"جوجل بلاي ‏ وسابقًا سوق أندرويد ‏ هي خدمة توزيع رقمية يتم تشغيلها وتطويرها بواسطة جوجل، وهو بمثابة متجر التطبيقات الرسميّ للأجهزة المُعتمدة التي تعمل على نظام التشغيل أندرويد، ممَّا يسمح للمستخدمين بتصفح وتنزيل التطبيقات التي تمَّ تطويرها بِاستخدام مجموعة تطوير برامج أندرويد (SDK) ونشرها عبر جوجل. يُعد جوجل بلاي أيضًا بمثابة متجر وسائط رقمية، حيثُ يعرضُ المُوسيقى، والكتب، والأفلام، والبرامج التلفزيونية. عرض المتجر سابقًا أجهزة جوجل للشراء حتّى طُرح متجر تجزئة منفصل للأجهزة عبر الإنترنت والمسمى متجر جوجل وذلك في 11 مارس 2015. عرض المتجر أيضًا منشورات إخباريَّة ومجلات قبل تجديد أخبار جوجل في 15 مايو 2018. عرض المتجر أيضاً المُوسيقى والبودكاست كجزء من موسيقى جوجل بلاي حتّى ديسمبر 2020 عندما تمَّ استبدال الخدمة بيوتيوب ميوزيك وجوجل بودكاست.", + "github":"غيت هاب هي شركة تابعة لمايكروسوفت توفر استضافة لتطوير البرامج والتحكم في الإصدار باستخدام غيت. توفر الشركة وظائف التحكم في الإصدار الموزع وإدارة كود المصدر (SCM) لـ «غيت»، بالإضافة إلى ميزاته الخاصة. يوفر النظام التحكم في الوصول والعديد من ميزات التعاون مثل تتبع الأخطاء وطلبات الميزات البرمجية وإدارة المهام والتركيب المتواصل ومواقع ويكي لكل مشروع غيت هاب. يقع مقرها الرئيسي في كاليفورنيا، وهي شركة تابعة لشركة مايكروسوفت منذ عام 2018.", + "gitlab":"غيت لاب هي شركة مفتوحة النواة تشتهر بتقديم مدير مستودعات غيت الذي يحمل نفس اسم الشركة.", + "goodreads":"جودريدز أو غودريدز تترجم للعربية بـ القراءات الجيدة هي شبكة اجتماعية تهتم بالكتب وبتوصيات وآراء المستخدمين حول الكتب والمؤلفين، أسس الموقع في عام 2006 من جهد المبرمج الأمريكي أوتيس تشاندلر. انطلق الموقع في ديسمبر 2006 ووصل عدد الأعضاء المسجلين في جود ريدز إلى أكثر من المليون عضو حتى اليوم، شاركوا بما يزيد على 10 ملايين كتاب، ورغم ذلك فإن الموقع لم يكن هادفاً للربح عند إطلاقه وبعد عام واحد فقط تلقى تمويلاً من إحدى الشركات لدفعه إلى الأمام والمحافظة على خدمته المتميزة. في آذار 2013 أعلنت شركة أمازون استحواذها عليه بدون الإفصاح عن مبلغ العقد.", + "google":"بحث جوجل أو جوجل ، هو محرك بحث صممته شركة جوجل. وهو محرك البحث الأكثر استخدامًا على شبكة الويب العالمية عبر جميع الأنظمة الأساسية، مع حصة سوقية تبلغ 92.16٪ اعتبارًا من ديسمبر 2020، ويتعامل مع أكثر من 5.4 مليار عملية بحث يوميًا.", + "google images":"صور جوجل : هو محرك بحث مصمم خصيصاً للبحث عن الصور، بلغ عدد الصور التي تحتويه 10 مليارات صورة، بينما يبلغ عدد متصفحيه مليار مستخدم يومياً. أطلقت هذه الخدمة منذ يوليو 2001.", + "google news":"أخبار جوجل هو برنامج مبني على الويب، تقدمه شركة جوجل. البرنامج عبارة عن مجمع أخبار. يستخدم البرنامج خوارزمية Storyrank التي يمكن القول أنها الخوارزمية الشقيقة لخوارزمية Pagerank التي جعلت باحوث جوجل من أفضل محركات البحث على الإنترنت. تم تطوير الخوارزمية بواسطة كاريشنا باهارات في العام 2001. تم تقديم أخبار جوجل كنسخة بيتا في أبريل 2002. خرج البرنامج من مرحلة البيتا في 23 يناير 2006. هناك عدة نسخ من البرنامج مخصصة ل 20 إقليما في العالم تستخدم 12 لغة. اللغات المتاحة حالياً هي: العربية، العبرية، الصينية ، اليبانية، الكورية، الفرنسية، الألمانية، الإسبانية، الإنجليزية، الإيطالية، البرتغالية، الهولندية، النرويجية، والسويدية.", + "google play apps":"جوجل بلاي وسابقًا سوق أندرويد هي خدمة توزيع رقمية يتم تشغيلها وتطويرها بواسطة جوجل، وهو بمثابة متجر التطبيقات الرسميّ للأجهزة المُعتمدة التي تعمل على نظام التشغيل أندرويد، ممَّا يسمح للمستخدمين بتصفح وتنزيل التطبيقات التي تمَّ تطويرها بِاستخدام مجموعة تطوير برامج أندرويد (SDK) ونشرها عبر جوجل. يُعد جوجل بلاي أيضًا بمثابة متجر وسائط رقمية، حيثُ يعرضُ المُوسيقى، والكتب، والأفلام، والبرامج التلفزيونية. عرض المتجر سابقًا أجهزة جوجل للشراء حتّى طُرح متجر تجزئة منفصل للأجهزة عبر الإنترنت والمسمى متجر جوجل وذلك في 11 مارس 2015. عرض المتجر أيضًا منشورات إخباريَّة ومجلات قبل تجديد أخبار جوجل في 15 مايو 2018. عرض المتجر أيضاً المُوسيقى والبودكاست كجزء من موسيقى جوجل بلاي حتّى ديسمبر 2020 عندما تمَّ استبدال الخدمة بيوتيوب ميوزيك وجوجل بودكاست.", "google play movies":[ "google play apps:ar", "ref" ], - "google scholar":"جوجل سكولار أو الباحث العلمي من جوجل ‏ هو محرك بحث خاص بالمؤلفات العلمية والأكاديمية التي يحتاج إليها الباحثون والدارسون. من مكان واحد، يمكنك البحث عبر العديد من المجالات العلمية ومصادر المعلومات: أبحاث معتمدة ورسائل علمية وكتب وملخصات ومقالات من ناشرين أكاديميين وجمعيات متخصصة ومراكز جمع المعلومات قبل طباعتها والجامعات وغير ذلك من مؤسسات البحث العلمي. يساعدك الباحث العلمي من جوجل على التعرف على أكثر الأبحاث العلمية صلة بمجال بحثك في عالم البحث العلمي.", + "google scholar":"جوجل سكولار أو الباحث العلمي من جوجل هو محرك بحث خاص بالمؤلفات العلمية والأكاديمية التي يحتاج إليها الباحثون والدارسون. من مكان واحد، يمكنك البحث عبر العديد من المجالات العلمية ومصادر المعلومات: أبحاث معتمدة ورسائل علمية وكتب وملخصات ومقالات من ناشرين أكاديميين وجمعيات متخصصة ومراكز جمع المعلومات قبل طباعتها والجامعات وغير ذلك من مؤسسات البحث العلمي. يساعدك الباحث العلمي من جوجل على التعرف على أكثر الأبحاث العلمية صلة بمجال بحثك في عالم البحث العلمي.", "google videos":"جوجل فيديو هو موقع فيديو مجاني، وكذلك محرك بحث للفيديو من غوغل. غوغل فيديو يسمح للفيديو أن يكون جزءًا لا يتجزأ من مواقع أخرى بعيدة ويوفر ما يلزم من كود HTML ويسمح كذلك للمواقع باستضافة كميات كبيرة من الفيديو عن بعد على جوجل فيديو دون الوقوع في عرض النطاق الترددي. بعض أشرطة الفيديو معروضة أيضاً للبيع من خلال متجر غوغل فيديو.", - "hackernews":"هاكر نيوز ‏ هو موقع إخباري اجتماعي يركز على علوم الكمبيوتر وريادة الأعمال. يدار من قبل صندوق الاستثمار وحاضنة الشركات الناشئة Y Combinator الخاصة بـ بول غراهام. بشكل عام يتم تعريف المحتوى الذي يمكن تقديمه على أنه «أي شيء يرضي فضول الفرد الفكري».", + "hackernews":"هاكر نيوز هو موقع إخباري اجتماعي يركز على علوم الكمبيوتر وريادة الأعمال. يدار من قبل صندوق الاستثمار وحاضنة الشركات الناشئة Y Combinator الخاصة بـ بول غراهام. بشكل عام يتم تعريف المحتوى الذي يمكن تقديمه على أنه «أي شيء يرضي فضول الفرد الفكري».", "hoogle":"هاسكل هي لغة برمجة مطابقة للمعايير، للأغراض العامة، وهي لغة وظيفية إلى حد كبير، دون دلالات ألفاظ ملزمة وبكتابة ثابتة وقوية. وقد سُميت بـ هاسكل علي اسم عالم المنطق «هاسكل كوري». وفي اللغة هاسكل، «تمثل الوظيفة مواطن من الدرجة الأولى» من لغة البرمجة. ولكونها لغة برمجة وظيفية فإن بنية التحكم الرئيسية هي الوظيفة. وترجع أصول اللغة إلى ملاحظات هاسكل كوري وأتباعه من المفكرين، بأن «الإثبات هو برنامج؛ والمعادلة التي يثبتها هي نوع للبرنامج».", - "huggingface":"شركة هجينج فيس ‏ هي شركة أمريكية مسجلة بموجب قانون الشركات العام لولاية ديلاوير ومقرها في مدينة نيويورك، وتعمل على تطوير أدوات حوسبة لبناء تطبيقات تستند إلى تعلم الآلة. تشتهر بشكل خاص بمكتبة المحولات (ترانسفورمرز) التي طورتها لتطبيقات معالجة اللغة الطبيعية، ومنصتها التي تتيح للمستخدمين مشاركة نماذج تعلم الآلة ومجاميع البيانات وعرض أعمالهم.", + "huggingface":"شركة هجينج فيس هي شركة أمريكية مسجلة بموجب قانون الشركات العام لولاية ديلاوير ومقرها في مدينة نيويورك، وتعمل على تطوير أدوات حوسبة لبناء تطبيقات تستند إلى تعلم الآلة. تشتهر بشكل خاص بمكتبة المحولات (ترانسفورمرز) التي طورتها لتطبيقات معالجة اللغة الطبيعية، ومنصتها التي تتيح للمستخدمين مشاركة نماذج تعلم الآلة ومجاميع البيانات وعرض أعمالهم.", "huggingface datasets":[ "huggingface:ar", "ref" @@ -207,10 +207,10 @@ "huggingface:ar", "ref" ], - "imdb":"قاعدة بيانات الأفلام على الإنترنت وتُعرف اختصارًا بـ آي إم دي بي ‏ هي قاعدة بيانات عبر الإنترنت للمعلومات المتعلقة بالأفلام والبرامج التلفزيونية ومقاطع الفيديو المنزلية وألعاب الفيديو والمحتوى المتدفق عبر الإنترنت - بما في ذلك الممثلون وطاقم الإنتاج والسير الذاتية الشخصية وملخصات الحبكة، التقييمات وآراء المعجبين وكذا المراجعات النقدية. كان موقع قاعدة بيانات الأفلام على الإنترنت في الأصل موقع ويب يُديره المعجبون إلى أن سيطرت عليهِ شركة آي إم دي بي دوت كوم إنكوايرر ‏ وهي شركةٌ تابعةٌ لشركة أمازون. بدأ الموقع كقاعدة بيانات أفلام على مجموعة يوزنت ‏ على المسار ريك دوت آرتس دوت موفيز ‏ في عام 1990 وانتقلَ إلى الويب في عام 1993.", + "imdb":"قاعدة بيانات الأفلام على الإنترنت وتُعرف اختصارًا بـ آي إم دي بي هي قاعدة بيانات عبر الإنترنت للمعلومات المتعلقة بالأفلام والبرامج التلفزيونية ومقاطع الفيديو المنزلية وألعاب الفيديو والمحتوى المتدفق عبر الإنترنت - بما في ذلك الممثلون وطاقم الإنتاج والسير الذاتية الشخصية وملخصات الحبكة، التقييمات وآراء المعجبين وكذا المراجعات النقدية. كان موقع قاعدة بيانات الأفلام على الإنترنت في الأصل موقع ويب يُديره المعجبون إلى أن سيطرت عليهِ شركة آي إم دي بي دوت كوم إنكوايرر وهي شركةٌ تابعةٌ لشركة أمازون. بدأ الموقع كقاعدة بيانات أفلام على مجموعة يوزنت على المسار ريك دوت آرتس دوت موفيز في عام 1990 وانتقلَ إلى الويب في عام 1993.", "imgur":"إمجور هو مجتمع إلكتروني عبر الإنترنت يقدم خدمات الاستضافة للصور والمشاركة والاستمتاع بأشهر الصور المنتشرة عبر الإنترنت من جميع دول العالم. أسسه آلان شاف ويستخدم البرنامج حاليًا ملايين المتصفحين بشكل يومي.", "iqiyi":"آي تشي يي ، هي منصة فيديو عبر الإنترنت مقرها في بكين، الصين، تم إطلاقها في 22 أبريل 2010.", - "kickass":"كيك اس تورنت ‏ هو موقع على شبكة الانترنت، تأسس في عام 2008، يوفر ملفات وروابط تورنت لتسهيل تبادل الملفات الند للند باستخدام بروتوكول بت تورنت. وتوقف الموقع عن الخدمة في 20 يوليوز عام 2016، بعد أن تم الحجز على اسم نطاقه من قبل حكومة الولايات المتحدة. وأغلقت خوادم بروكسي الموقع من طرف موظفيه في نفس الوقت.", + "kickass":"كيك اس تورنت هو موقع على شبكة الانترنت، تأسس في عام 2008، يوفر ملفات وروابط تورنت لتسهيل تبادل الملفات الند للند باستخدام بروتوكول بت تورنت. وتوقف الموقع عن الخدمة في 20 يوليوز عام 2016، بعد أن تم الحجز على اسم نطاقه من قبل حكومة الولايات المتحدة. وأغلقت خوادم بروكسي الموقع من طرف موظفيه في نفس الوقت.", "lemmy comments":[ "lemmy communities:ar", "ref" @@ -224,16 +224,16 @@ "lemmy communities:ar", "ref" ], - "library genesis":"مكتبة التكوين ‏ وتُدعى اختصارًا LibGen هي محرك بحث للمقالات والكتب حول مواضيع مختلفة، يتيح الموقع الوصول المجاني إلى المحتوى الذي يكون مدفوعًا أو غير رقمي في مكان آخر. من بين أمور أخرى، تتضمن ملفات بي دي اف محتوى من بوابة إلزيفير المعروفة باسم سيانس دايركت", - "library of congress":"مكتبة الكونغرس ‏ تعرف اختصاراً LOC هي مكتبة الأبحاث والتي تخص رسمياً كونغرس الولايات المتحدة وهي المكتبة الوطنية للولايات المتحدة بحكم الأمر الواقع. وهي أقدم مؤسسة ثقافية اتحادية في الولايات المتحدة. تقع المكتبة في ثلاثة مبان في كابيتول هيل في واشنطن دي سي. كما أنها تحتفظ بالمركز الوطني للمحافظة على السمعيات والبصريات في كولبيبر بولاية فيرجينيا. يشرف أمين مكتبة الكونغرس على وظائف المكتبة، ويحافظ مهندس مبنى الكابيتول على مبانيها. تعد مكتبة الكونجرس من أكبر المكتبات في العالم. «مجموعاتها عالمية ولا تقتصر على الموضوع أو التنسيق أو الحدود الوطنية، وتتضمن مواد بحثية من جميع أنحاء العالم وبأكثر من 450 لغة.»", + "library genesis":"مكتبة التكوين وتُدعى اختصارًا LibGen هي محرك بحث للمقالات والكتب حول مواضيع مختلفة، يتيح الموقع الوصول المجاني إلى المحتوى الذي يكون مدفوعًا أو غير رقمي في مكان آخر. من بين أمور أخرى، تتضمن ملفات بي دي اف محتوى من بوابة إلزيفير المعروفة باسم سيانس دايركت", + "library of congress":"مكتبة الكونغرس تعرف اختصاراً LOC هي مكتبة الأبحاث والتي تخص رسمياً كونغرس الولايات المتحدة وهي المكتبة الوطنية للولايات المتحدة بحكم الأمر الواقع. وهي أقدم مؤسسة ثقافية اتحادية في الولايات المتحدة. تقع المكتبة في ثلاثة مبان في كابيتول هيل في واشنطن دي سي. كما أنها تحتفظ بالمركز الوطني للمحافظة على السمعيات والبصريات في كولبيبر بولاية فيرجينيا. يشرف أمين مكتبة الكونغرس على وظائف المكتبة، ويحافظ مهندس مبنى الكابيتول على مبانيها. تعد مكتبة الكونجرس من أكبر المكتبات في العالم. «مجموعاتها عالمية ولا تقتصر على الموضوع أو التنسيق أو الحدود الوطنية، وتتضمن مواد بحثية من جميع أنحاء العالم وبأكثر من 450 لغة.»", "mastodon hashtags":[ "mastodon users:ar", "ref" ], "mastodon users":"ماستدون هو برنامج حُر ومفتوح المصدر لتشغيل خدمات الشبكات الاجتماعية ذاتية الاستضافة. يوفر ميزات التدوينات المصغرة المشابهة لخدمة تويتر، يتم تقديم ماستدون من قبل عدد كبير من عقد ماستدون التي يتم تشغيلها بشكل مستقل ، لكل منها قواعد السلوك الخاصة بها، شروط الخدمة ، خيارات الخصوصية وسياسات الإشراف.", - "mdn":"شبكة مطوري موزيلا ‏ ويختصر إلى MDN هو موقع مؤسسة موزيلا الرسمي لوثائق تطوير وأخبار متصفح الويب فيرفكس، وعميل البريد الإلكتروني ثندربرد ومشاريع مؤسسة موزيلا الأخرى.", + "mdn":"شبكة مطوري موزيلا ويختصر إلى MDN هو موقع مؤسسة موزيلا الرسمي لوثائق تطوير وأخبار متصفح الويب فيرفكس، وعميل البريد الإلكتروني ثندربرد ومشاريع مؤسسة موزيلا الأخرى.", "metacpan":"شبكة أرشيف بريل الشاملة (CPAN) تعد مستودعاً لأكثر من 250000 وحدة برمجية وتحتوي على 39000 وثيقة مصاحبة والتوزيع مكتوبة فيها باللغة بيرل البرمجية بواسطة أكثر من12000 مساهم. كما أن سي بي اي إن تشير إلى شبكة الأرشيف أو برنامج بريل الذي يعمل كواجهة للشبكة وكمثبت برنامج ألي كما أن معظم البرامج الموجودة على سي بي اي إن هي برامج حرة ومفتوحة المصدر.", - "microsoft learn":"مايكروسوفت التعليمية ‏ هي مكتبة من الوثائق التقنية والتدريبية و مبادرة استراتيجية من شركة مايكروسوفت للمستخدمين النهائيين، والمطورين،من خلال تقديم مجموعة متنوعة من الموارد التعليمية والدورات التدريبية. قدمت مايكروسوفت التعليمية في سبتمبر 2018. ، نقلت مستندات مايكروسوفت في عام 2022، حلت مكتبة الوثائق التقنية التي كانت قد استبدلت MSDN وTechNet في عام 2016، إلى Microsoft Learn.", + "microsoft learn":"مايكروسوفت التعليمية هي مكتبة من الوثائق التقنية والتدريبية و مبادرة استراتيجية من شركة مايكروسوفت للمستخدمين النهائيين، والمطورين،من خلال تقديم مجموعة متنوعة من الموارد التعليمية والدورات التدريبية. قدمت مايكروسوفت التعليمية في سبتمبر 2018. ، نقلت مستندات مايكروسوفت في عام 2022، حلت مكتبة الوثائق التقنية التي كانت قد استبدلت MSDN وTechNet في عام 2016، إلى Microsoft Learn.", "mojeek":[ "محرك بحث ويب", "wikidata" @@ -246,19 +246,31 @@ "mojeek:ar", "ref" ], - "mullvadleta":"مولفاد ‏ هو مزود شبكة خاصة افتراضية ومقره السويد. إنه يلتزم بسياسة صارمة لعدم الاحتفاظ بالسجلات وسياسة خصوصية شاملة للغاية. لا تجمع مولفاد أي معلومات منك عند التسجيل. بدلاً من ذلك ، يتم إنشاء رقم عشوائي واستخدامه كمعرف خاص بك. تدعم اوبن في بي إن و وايرجارد. ويدعم أيضًا قفزات خادم متعددة مع ميزة التجسير. تقدم مولفاد خدمة جيدة للغاية مع تركيز قوي على الخصوصية.", + "mullvadleta":"مولفاد هو مزود شبكة خاصة افتراضية ومقره السويد. إنه يلتزم بسياسة صارمة لعدم الاحتفاظ بالسجلات وسياسة خصوصية شاملة للغاية. لا تجمع مولفاد أي معلومات منك عند التسجيل. بدلاً من ذلك ، يتم إنشاء رقم عشوائي واستخدامه كمعرف خاص بك. تدعم اوبن في بي إن و وايرجارد. ويدعم أيضًا قفزات خادم متعددة مع ميزة التجسير. تقدم مولفاد خدمة جيدة للغاية مع تركيز قوي على الخصوصية.", "mullvadleta brave":[ "mullvadleta:ar", "ref" ], "naver":"نافير هي منصة كورية جنوبية على الإنترنت تديرها شركة نافير. ظهرت لأول مرة في عام 1999 كأول بوابة ويب في كوريا الجنوبية لتطوير واستخدام محرك البحث الخاص بها. كما كانت أول مشغل في العالم يقدم ميزة البحث الشامل، والتي تجمع نتائج البحث من مختلف الفئات وتقدمها في صفحة واحدة. أضافت نافير منذ ذلك الحين العديد من الخدمات الجديدة التي تتراوح من الميزات الأساسية مثل البريد الإلكتروني والأخبار إلى أول منصة للأسئلة والأجوبة عبر الإنترنت في العالم يعرف ب«نولج ان».", + "naver images":[ + "naver:ar", + "ref" + ], + "naver news":[ + "naver:ar", + "ref" + ], + "naver videos":[ + "naver:ar", + "ref" + ], "niconico":"نيكونيكو (Niconico)‏ هو موقع ويب معروف متخصص بمشاركة الفيديو في اليابان. تديره شركة نيوانغو وهي شركة تابعة لشركة دوانغو. «نيكو نيكو» هو المحاكاة الصوتية اليابانية ليبتسم. هذا هو الثالث عشر الموقع الزار الأكثر في اليابان.", "nixos wiki":[ "nixos wiki:en", "ref" ], - "npm":"مدير نود جي إس للحزم ‏ أكبر نظام تسجيل حزم برمجية، يعد إن بي أم مدير الحزم الافتراضي لبيئة تشغيل جافا سكريبت Node.js. وهو يتكون من واجهة سطر الأوامر وقاعدة بيانات على الإنترنت، تُدعى سجل إن بي أم. كما يتيح موقع إن بي أم تصفح الحزم واستعراضها.", - "odysee":"أوديسي ‏ هي منصة استضافة فيديو غير مركزية أمريكية مبنية على سلسلة كتل ليبيراري ‏. يشير إلى نفسه كبديل للخدمات السائدة مثل يوتيوب ولكن مع التركيز على حرية التعبير واللامركزية.", + "npm":"مدير نود جي إس للحزم أكبر نظام تسجيل حزم برمجية، يعد إن بي أم مدير الحزم الافتراضي لبيئة تشغيل جافا سكريبت Node.js. وهو يتكون من واجهة سطر الأوامر وقاعدة بيانات على الإنترنت، تُدعى سجل إن بي أم. كما يتيح موقع إن بي أم تصفح الحزم واستعراضها.", + "odysee":"أوديسي هي منصة استضافة فيديو غير مركزية أمريكية مبنية على سلسلة كتل ليبيراري. يشير إلى نفسه كبديل للخدمات السائدة مثل يوتيوب ولكن مع التركيز على حرية التعبير واللامركزية.", "openairedatasets":[ "منظمة في اليونان", "wikidata" @@ -267,19 +279,19 @@ "openairedatasets:ar", "ref" ], - "openlibrary":"المكتبة المفتوحة ‏ مشروع على الإنترنت، يضم مكتبة عامة تحتوي على عدد من الكتب الإلكترونية، وهي مفتوحة المصدر، وهو مشروع قابل للتعديل، حيث يمكن لأي شخص المشاركة. ويتضمن الموقع فهارس مكتبية من مكتبات عديدة.", - "openstreetmap":"خريطة الشارع المفتوحة ‏ مشروع تعاوني يهدف إلى إنشاء خرائط منشورة برخصة حرة. تُرسم الخرائط بطريق جمع البيانات الجغرافية بالمسح الأرضي باستخدام مستقبلات نظام التموضع العالمي المحمولة، وكذلك بالاستعانة بمصادر حرة أخرى. يمكن للمستخدمين تحرير المسارات والطرق وتحديثها من خلال وسائل التحرير المتاحة.", + "openlibrary":"المكتبة المفتوحة مشروع على الإنترنت، يضم مكتبة عامة تحتوي على عدد من الكتب الإلكترونية، وهي مفتوحة المصدر، وهو مشروع قابل للتعديل، حيث يمكن لأي شخص المشاركة. ويتضمن الموقع فهارس مكتبية من مكتبات عديدة.", + "openstreetmap":"خريطة الشارع المفتوحة مشروع تعاوني يهدف إلى إنشاء خرائط منشورة برخصة حرة. تُرسم الخرائط بطريق جمع البيانات الجغرافية بالمسح الأرضي باستخدام مستقبلات نظام التموضع العالمي المحمولة، وكذلك بالاستعانة بمصادر حرة أخرى. يمكن للمستخدمين تحرير المسارات والطرق وتحديثها من خلال وسائل التحرير المتاحة.", "peertube":[ "برنامج مجاني لاستعادة السيطرة على مقاطعك الفيديو! مع أكثر من ٦٠٠٬٠٠٠ مقطع فيديو مُستضاف، وشوهد أكثر من ٧٠ مليون مرة و ١٥٠٬٠٠٠ مستخدم، فإن بييرتيوب هو البرنامج المجاني اللامركزي البديل لمنصات الفيديو التي طورتها Framasoft", "https://joinpeertube.org" ], - "pinterest":"بنترست ‏ هي شبكة اجتماعية أمريكية لنشر الصور و الفيديوهات، أُطلقت عام 2010. مبدأ عمل بنترست مختلف قليلاً عن وسائل التواصل الاجتماعي الأخرى. فكل مشترك في بنترست بإمكانه عمل لوحة حائط \"Board\" أو عدة لوحات حائط افتراضية. ثم يقوم المشترك بعد ذلك بتدبيس \"Pin\" أو تعليق صوراً أو مقاطع فيديو يجدها مثيرة لاهتمامه ويرغب بالاحتفاظ بها في أحد لوحات الحائط الخاصة به. وتكون الصور ومقاطع الفيديو مأخوذة من عدة مواقع في الإنترنت ولذلك يكون دوماً هناك رابط إلكتروني يشير إلى مصدر الصورة. في حال ضغط أحد المستخدمين على الصورة، يأخذه الرابط للموقع الذي أُخِذت منه الصورة. وإذا أُعجب مستخدم آخر بالصور أو الفيديوهات التي قمت بتعليقها بإمكانه تدبيس نفس الصورة أو الفيديو في لوحة الحائط الخاصة به وتسمى هذه العملية بإعادة التدبيس أو إعادة التعليق \"Repin\". وبإمكان أي شخص الاطلاع على هذا الموقع والبحث عن الصور فيه ولكن يشترط التسجيل فيه. إذا أراد المستخدم مشاركة الصور أو إبداء الإعجاب ببعضها أو التعليق عليها. تم تأسيس الموقع من قبل بن سيلبرمان، بول سيارا وإيفان شارب. وتتم إدارة الموقع من قبل مختبرات كولد برو أمّا تمويله فهو من قِبَل مجموعة صغيرة من رجال الأعمال والمخترعين.", - "piratebay":"ذا بايرت بي ‏ ، وهو موقع سويدي يُفَهْرِس ملفات التورنت torrent. وصل تصنيفه في يناير 2010 للمرتبة 99 ضمن تصنيف ألكسا ضمن أكثر المواقع زيارةً عالميًا. في 10 لشهر ديسمبر سنه 2014 حُظِّر الموقع، وذلك بعد مداهمة الشرطة السويدية لخوادم الموقع وفي الأول من فبراير 2015 عاد الموقع للعمل بستة نطاقات جديدة.", - "pubmed":"مدلاين ‏ هي قاعدة بيانات ببليوغرافية في علوم الحياة والعلوم الحيوية الطبية. تحتوي على معلومات ببليوغرافية حول المجلات الأكاديمية في علوم الطب والتمريض والصيدلة وطب الأسنان والطب البيطري والرعاية الصحية. كما يحتوي مدلاين على مواضيع في علم الأحياء والكيمياء الحيوية وكذلك مجالات التطور الجزيئي والطب الحيوي.", + "pinterest":"بنترست هي شبكة اجتماعية أمريكية لنشر الصور و الفيديوهات، أُطلقت عام 2010. مبدأ عمل بنترست مختلف قليلاً عن وسائل التواصل الاجتماعي الأخرى. فكل مشترك في بنترست بإمكانه عمل لوحة حائط \"Board\" أو عدة لوحات حائط افتراضية. ثم يقوم المشترك بعد ذلك بتدبيس \"Pin\" أو تعليق صوراً أو مقاطع فيديو يجدها مثيرة لاهتمامه ويرغب بالاحتفاظ بها في أحد لوحات الحائط الخاصة به. وتكون الصور ومقاطع الفيديو مأخوذة من عدة مواقع في الإنترنت ولذلك يكون دوماً هناك رابط إلكتروني يشير إلى مصدر الصورة. في حال ضغط أحد المستخدمين على الصورة، يأخذه الرابط للموقع الذي أُخِذت منه الصورة. وإذا أُعجب مستخدم آخر بالصور أو الفيديوهات التي قمت بتعليقها بإمكانه تدبيس نفس الصورة أو الفيديو في لوحة الحائط الخاصة به وتسمى هذه العملية بإعادة التدبيس أو إعادة التعليق \"Repin\". وبإمكان أي شخص الاطلاع على هذا الموقع والبحث عن الصور فيه ولكن يشترط التسجيل فيه. إذا أراد المستخدم مشاركة الصور أو إبداء الإعجاب ببعضها أو التعليق عليها. تم تأسيس الموقع من قبل بن سيلبرمان، بول سيارا وإيفان شارب. وتتم إدارة الموقع من قبل مختبرات كولد برو أمّا تمويله فهو من قِبَل مجموعة صغيرة من رجال الأعمال والمخترعين.", + "piratebay":"ذا بايرت بي ، وهو موقع سويدي يُفَهْرِس ملفات التورنت torrent. وصل تصنيفه في يناير 2010 للمرتبة 99 ضمن تصنيف ألكسا ضمن أكثر المواقع زيارةً عالميًا. في 10 لشهر ديسمبر سنه 2014 حُظِّر الموقع، وذلك بعد مداهمة الشرطة السويدية لخوادم الموقع وفي الأول من فبراير 2015 عاد الموقع للعمل بستة نطاقات جديدة.", + "pubmed":"مدلاين هي قاعدة بيانات ببليوغرافية في علوم الحياة والعلوم الحيوية الطبية. تحتوي على معلومات ببليوغرافية حول المجلات الأكاديمية في علوم الطب والتمريض والصيدلة وطب الأسنان والطب البيطري والرعاية الصحية. كما يحتوي مدلاين على مواضيع في علم الأحياء والكيمياء الحيوية وكذلك مجالات التطور الجزيئي والطب الحيوي.", "reddit":"ريديت هو مجتمع إخباري على الإنترنت، إلا أنه يعتبر من مواقع مشاركة الروابط ومناقشتها حتى بات يشبه المنتديات، يعرف ريديت بالصفحة الرئيسية للإنترنت.", "reuters":"رويترز هي مؤسسة إخبارية دولية مملوكة لشركة تومسون رويترز. تأسَّست الوكالة في لندن عام 1851 من قِبل الألماني المولد بول رويتر إلى أن استُحوذَ عليها من قِبل شركة تومسون عام 2008 حيث تُشكّل الآن قسم الإعلام في تومسون رويترز. تُوظّف المؤسّسة – التي تُعتبر واحدةً من أكبر وكالات الأنباء في العالم – حوالي 2500 صحفي و600 مصور صحفي في حوالي مائتي موقع حول العالم.", - "rottentomatoes":"روتن توميتوز ‏ وتعني حرفيًا الطماطم الفاسدة، هو موقع ويب مُتَخصّصٌ في تقييماتٍ وأخبارٍ ومعلوماتٍ حولَ الأفلام والمسلسلات، معروفٌ عالمياً بأنه مُجمّع للتقييمات حيث يجمع تقييمَ النُقّاد لأي فيلم أو مسلسل ويعطي متوسط تقييم له إضافة إلى نسبة مئوية بالمراجعات الإيجابية، كما صارَ يَشمَلُ أيضاً تقييماتٍ للمُسلسلات. وعلى الرغم من ارتباط الاسمُ بتقليد تاريخي حيثُ كان الجماهيرُ يرمونَ الطماطم الفاسدة والخضروات على الأداء السيئ في المسرح، إلا أن الاسم كان مستوحى في الأصل من مشهد يظهر الطماطم في فيلم كندي صدر في عام 1992 بعنوان ليولو (Léolo). بدأ الموقِع في عامِ 1998 على يَد ثلاثة طلاب جامعيين يدرسون في جامعة كاليفورنيا، بمدينة ييركيلي، وهم سين دوونج، وباتريك واي لي، وستيفن وانج. وفي 2010 استَحوذَت عليه شَركة Flixster التي مَلَكتْها وارنر برذرز في 2011. ورئيس تحرير الموقع منذ 2007 هو مات آتشي. الموقِعُ مُتَوفّرٌ بِنُسخةٍ بريطانيّة وأستراليّة وهنديّة. وبدءاً مِن يناير 2015 دَخَلَ الموقع ضِمنَ نِطاقِ أشهَر 500 موقع في تصنيفاتِ موقِع أليكسا.", - "rumble":"رامبل ‏ هو موقع صناعة محتويات فيديو كندي. تم تأسيسه في سنة 2013 من قبل كريس بافلوفسكي. بدأ كموقع لنشر فيديوهات عن الحيوانات الأليفة والأطفال الرضع وثم زادت شهرته ليكون منصة بديلة للمحافظين واليمينيين عن يوتيوب. في يوم 11 يناير 2021 رفع الموقع دعوى ضد غوغل بتهمة التلاعب بنتائج البحث عن الموقع واخفائه وطالب بتعويض ملياري دولار على ذلك. يدير الموقع حالياً دان بونجينو.", + "rottentomatoes":"روتن توميتوز وتعني حرفيًا الطماطم الفاسدة، هو موقع ويب مُتَخصّصٌ في تقييماتٍ وأخبارٍ ومعلوماتٍ حولَ الأفلام والمسلسلات، معروفٌ عالمياً بأنه مُجمّع للتقييمات حيث يجمع تقييمَ النُقّاد لأي فيلم أو مسلسل ويعطي متوسط تقييم له إضافة إلى نسبة مئوية بالمراجعات الإيجابية، كما صارَ يَشمَلُ أيضاً تقييماتٍ للمُسلسلات. وعلى الرغم من ارتباط الاسمُ بتقليد تاريخي حيثُ كان الجماهيرُ يرمونَ الطماطم الفاسدة والخضروات على الأداء السيئ في المسرح، إلا أن الاسم كان مستوحى في الأصل من مشهد يظهر الطماطم في فيلم كندي صدر في عام 1992 بعنوان ليولو (Léolo). بدأ الموقِع في عامِ 1998 على يَد ثلاثة طلاب جامعيين يدرسون في جامعة كاليفورنيا، بمدينة ييركيلي، وهم سين دوونج، وباتريك واي لي، وستيفن وانج. وفي 2010 استَحوذَت عليه شَركة Flixster التي مَلَكتْها وارنر برذرز في 2011. ورئيس تحرير الموقع منذ 2007 هو مات آتشي. الموقِعُ مُتَوفّرٌ بِنُسخةٍ بريطانيّة وأستراليّة وهنديّة. وبدءاً مِن يناير 2015 دَخَلَ الموقع ضِمنَ نِطاقِ أشهَر 500 موقع في تصنيفاتِ موقِع أليكسا.", + "rumble":"رامبل هو موقع صناعة محتويات فيديو كندي. تم تأسيسه في سنة 2013 من قبل كريس بافلوفسكي. بدأ كموقع لنشر فيديوهات عن الحيوانات الأليفة والأطفال الرضع وثم زادت شهرته ليكون منصة بديلة للمحافظين واليمينيين عن يوتيوب. في يوم 11 يناير 2021 رفع الموقع دعوى ضد غوغل بتهمة التلاعب بنتائج البحث عن الموقع واخفائه وطالب بتعويض ملياري دولار على ذلك. يدير الموقع حالياً دان بونجينو.", "semantic scholar":"سيمانتك سكولر هو مشروعٌ طُور في معهد ألن للذكاء الاصطناعي، وصدر للجمهور في نوفمبر 2015، وهو مصممٌ ليكون محرك بحث مدعومًا بالذكاء الاصطناعي للمنشورات الأكاديمية. يستخدم المشروع مزيجًا من التعلم الآلي ومعالجة اللغة الطبيعية والرؤية الآلية لإضافة طبقة من التحليل الدلالي إلى الأساليب التقليدية لتحليل الاقتباس واستخراج الأشكال والكيانات والأماكن ذات الصلة من الأوراق. مقارنةً مع جوجل سكولار وببمد، فإنَّ سيمانتك سكولر مصممٌ لإبراز أهم الأوراق والأكثر تأثيرًا، وتحديد الروابط بينهما.", "seznam":[ "شركة تشيكية", @@ -290,17 +302,17 @@ "مستودع تطوير برمجيات", "wikidata" ], - "stackoverflow":"ستاك إكستشينج ‏ هي شبكة من مواقع الأسئلة والأجوبة التي يهتم كل منها باختصاص معين، ويقوم المستخدمون فيها بطرح الأسئلة، الإجابة عليها، وتقييم الأسئلة والأجوبة بشكل تعاوني غير مركزي.", - "steam":"ستيم ‏ هي منصة توزيع رقمي وإدارة حقوق رقمية ولعب جماعي عبر الإنترنت واتصال طورتها شركة فالف. يتم استخدامها لتوزيع الألعاب والوسائط ذات الصلة عبر الإنترنت، من مطورين مستقلين إلى شركات الألعاب الكبرى. في أكتوبر 2012 وسعت فالف الخدمة لتشمل برمجيات غير الألعاب. توفر ستيم المستخدمين إمكانية التثبيت والإدارة التلقائية للبرمجيات عبر أجهزة كمبيوتر متعددة، بالإضافة للميزات الاجتماعية مثل قوائم الأصدقاء والمجموعات، وأيضا التخزين السحابي ووظيفة المحادثة الصوتية والكتابية في الألعاب. يتم توفير واجهة برمجة التطبيقات وتسمى «ستيم ووركز» (Steamworks) والتي تمكن المطورين من الاستفادة منها لدمج العديد من وظائف ستيم داخل منتجاتهم البرمجية، بما في ذلك الحماية من النسخ، والربط بالشبكة، والإنجازات في الألعاب، ودعم المحتوى الذي يتم إنشائه من قبل المستخدمين.", + "stackoverflow":"ستاك إكستشينج هي شبكة من مواقع الأسئلة والأجوبة التي يهتم كل منها باختصاص معين، ويقوم المستخدمون فيها بطرح الأسئلة، الإجابة عليها، وتقييم الأسئلة والأجوبة بشكل تعاوني غير مركزي.", + "steam":"ستيم هي منصة توزيع رقمي وإدارة حقوق رقمية ولعب جماعي عبر الإنترنت واتصال طورتها شركة فالف. يتم استخدامها لتوزيع الألعاب والوسائط ذات الصلة عبر الإنترنت، من مطورين مستقلين إلى شركات الألعاب الكبرى. في أكتوبر 2012 وسعت فالف الخدمة لتشمل برمجيات غير الألعاب. توفر ستيم المستخدمين إمكانية التثبيت والإدارة التلقائية للبرمجيات عبر أجهزة كمبيوتر متعددة، بالإضافة للميزات الاجتماعية مثل قوائم الأصدقاء والمجموعات، وأيضا التخزين السحابي ووظيفة المحادثة الصوتية والكتابية في الألعاب. يتم توفير واجهة برمجة التطبيقات وتسمى «ستيم ووركز» (Steamworks) والتي تمكن المطورين من الاستفادة منها لدمج العديد من وظائف ستيم داخل منتجاتهم البرمجية، بما في ذلك الحماية من النسخ، والربط بالشبكة، والإنجازات في الألعاب، ودعم المحتوى الذي يتم إنشائه من قبل المستخدمين.", "superuser":[ "stackoverflow:ar", "ref" ], "tagesschau":"تاغسشاو هي خدمة إخبارية تلفزيونية وطنية ودولية ألمانية تنتجها هيئة التحرير فيARD-aktuelll لصالح شبكة التلفزيون العامة الألمانية ARD.", - "tineye":"تِن آي ‏ هو محرك البحث للصور وهي خدمة أنشأتها شركة ‏ مقرها في تورونتو كندا. حيث يقوم المستخدم بإرسال الصورة الي الموقع لكي يقوم محرك بالبحث عن مصدرها.", - "vimeo":"فيميو ‏ هي شركة أمريكية مقرها في مدينة نيويورك تقدم منصة لاستضافة مقاطع الفيديو ومشاركتها وخدماتها. يركز فيميو على تقديم فيديو عالي الوضوح عبر مجموعة من الأجهزة. يعتمد نموذج أعمال فيميو على البرمجيات كخدمة (SaaS). تحصل الشركة على الإيرادات من خلال توفير خطط الاشتراك للشركات وصانعي المحتوى. توفر فيميو لمشتركيها أدوات لإنشاء الفيديو وتحريره وبثه، وحلول برامج المؤسسات، كما تعمل المنصة أيضًا على تسهيل الاتصالات بين محترفي الفيديو والعملاء وخبراء الصناعة الآخرين. اعتبارًا من ديسمبر 2021، بلغ عدد مستخدمي الموقع 260 مليون مستخدم، بما في ذلك 1.6 مليون مشترك في خدماته.", + "tineye":"تِن آي هو محرك البحث للصور وهي خدمة أنشأتها شركة مقرها في تورونتو كندا. حيث يقوم المستخدم بإرسال الصورة الي الموقع لكي يقوم محرك بالبحث عن مصدرها.", + "vimeo":"فيميو هي شركة أمريكية مقرها في مدينة نيويورك تقدم منصة لاستضافة مقاطع الفيديو ومشاركتها وخدماتها. يركز فيميو على تقديم فيديو عالي الوضوح عبر مجموعة من الأجهزة. يعتمد نموذج أعمال فيميو على البرمجيات كخدمة (SaaS). تحصل الشركة على الإيرادات من خلال توفير خطط الاشتراك للشركات وصانعي المحتوى. توفر فيميو لمشتركيها أدوات لإنشاء الفيديو وتحريره وبثه، وحلول برامج المؤسسات، كما تعمل المنصة أيضًا على تسهيل الاتصالات بين محترفي الفيديو والعملاء وخبراء الصناعة الآخرين. اعتبارًا من ديسمبر 2021، بلغ عدد مستخدمي الموقع 260 مليون مستخدم، بما في ذلك 1.6 مليون مشترك في خدماته.", "voidlinux":"فويد لينكس هو توزيعة لينكس مستقلة تعمل بنظام إدارة الحزم X Binary Package System (XBPS) ، والذي تم تصميمه وتنفيذه من البداية، نظام تمهيد. باستثناء عمليات النواة الثنائية، يتكون التثبيت الأساسي بالكامل من البرامج المجانية، ولكن يمكن للمستخدمين الوصول إلى مستودع رسمي غير مجاني لتثبيت البرامج الاحتكارية.", - "wikibooks":"ويكي الكتب ‏ هو مشروع شقيق لويكيبيديا وجزء من مشاريع مؤسسة ويكيميديا. وهو ويكي للكتب تستضيفه مؤسسة ويكيميديا لإيجاد كتب ومراجع للاستخدام المجاني الحر يمكن لأي شخص التعديل والإسهام فيها تحت بنود رخصة جنو للوثائق الحرة؛ بدأ المشروع في 10 يوليو 2003 وكان باللغة الإنجليزية فقط، ثم توسع ليشمل إصدارات بلغات أخرى في يوليو 2004، وبدأت النسخة العربية في 12 سبتمبر 2004. واعتبارًا من يناير 2021 أصبح هناك إصدارات من ويكي الكتب بـ76 لغة، تحتوي على 286482 مقالة، وتضم 1490 محررًا نشطًا.", + "wikibooks":"ويكي الكتب هو مشروع شقيق لويكيبيديا وجزء من مشاريع مؤسسة ويكيميديا. وهو ويكي للكتب تستضيفه مؤسسة ويكيميديا لإيجاد كتب ومراجع للاستخدام المجاني الحر يمكن لأي شخص التعديل والإسهام فيها تحت بنود رخصة جنو للوثائق الحرة؛ بدأ المشروع في 10 يوليو 2003 وكان باللغة الإنجليزية فقط، ثم توسع ليشمل إصدارات بلغات أخرى في يوليو 2004، وبدأت النسخة العربية في 12 سبتمبر 2004. واعتبارًا من يناير 2021 أصبح هناك إصدارات من ويكي الكتب بـ76 لغة، تحتوي على 286482 مقالة، وتضم 1490 محررًا نشطًا.", "wikicommons.audio":[ "wikicommons.images:ar", "ref" @@ -309,7 +321,7 @@ "wikicommons.images:ar", "ref" ], - "wikicommons.images":"ويكيميديا كومنز أو ويكي كومنز ‏ هو أحد مشاريع مؤسسة ويكيميديا هو مخزن الوسائط المتعددة مفتوحة المصدر مثل الصور وملفات الصوت وملفات الوسائط المتعددة الأخرى بحيث يمكن استخدامها في أي مشروع من مشاريع ويكيميديا. وفي أي لغة من لغات ويكيبيديا، أو تحميلها للاستخدام خارج ويكيميديا.", + "wikicommons.images":"ويكيميديا كومنز أو ويكي كومنز هو أحد مشاريع مؤسسة ويكيميديا هو مخزن الوسائط المتعددة مفتوحة المصدر مثل الصور وملفات الصوت وملفات الوسائط المتعددة الأخرى بحيث يمكن استخدامها في أي مشروع من مشاريع ويكيميديا. وفي أي لغة من لغات ويكيبيديا، أو تحميلها للاستخدام خارج ويكيميديا.", "wikicommons.videos":[ "wikicommons.images:ar", "ref" @@ -321,25 +333,25 @@ "wikisource":"ويكي مصدر هي مكتبة رقمية متصلة بالشبكة العنكبوتية مفتوحة للجميع، ويمكن تحميلها على شكل ملف pdf.في هذا المشروع العربي تضم 79٬518 صفحة حتى تاريخ 2020 من الرسائل الأدبية، والكتب والنصوص الدينية والتراثية والتاريخية، والشعر. بدأت ويكي مصدر في نوفمبر 2003 كمجموعة للنصوص الحرة الداعمة لمقالات ويكيبيديا المشروع الأساسي لمؤسسة ويكيميديا. سميت في أول الأمر مشروع سورس بيرغ كمحاولةٍ لنحت اسم ما يعرف بمشروع غوتنبرغ، ثمّ تغيّر اسم المشروع في 6 ديسمبر 2003 إلى ويكي المصدر. وهو مشروع مؤسسة ويكيميديا لجمع وتخزين نصوص الملكية العامة المنشورة سابقًا أو النصوص الحرة التي نفدت حقوق طبعها أو المترجمة ومتوفرة بعدة لغات. انتقل المشروع إلى عنوان موقعه الدائم في 23 يوليو 2004.", "wikispecies":"ويكي أنواع هو أحد مشاريع مؤسسة ويكيميديا، وهو يهدف إلى إنشاء دليل بكل أنواع الكائنات. بدأ المشروع في 13 سبتمبر 2004.", "wikiversity":"ويكي الجامعة هو أحد مشاريع مؤسسة ويكيميديا، يهدف إلى دعم التعليم الحر واستضافة مواد تعليمية مجانية. المشروع بدأ في 15 أغسطس 2006؛ وبدأت النسخة العربية منه في 12 يوليو 2011.", - "wikivoyage":"ويكي الرحلات ‏ هي دليل سياحي على شبكة الإنترنت، كتب بطريقة تشاركية من عدد من الكتاب المتطوعين، ومحتواه هو تحت رخصة حرة.", + "wikivoyage":"ويكي الرحلات هي دليل سياحي على شبكة الإنترنت، كتب بطريقة تشاركية من عدد من الكتاب المتطوعين، ومحتواه هو تحت رخصة حرة.", "wiktionary":"ويكاموس هو مشروع مُتعدد اللغات، أحد مشاريع مؤسسة ويكيميديا على شبكة الإنترنت يهدف إلى إيجاد قاموس حر بلغة الويكي لكل اللغات. يتم تحريرها بشكل تعاوني عن طريق ويكي، وهو متاح في 172 لغة من بينها العربية. مُعظم مفردات اللغة في ويكاموس توفر تعريفات وترجمات للكلمات إلى لغات عديدة، وبعض المفردات متصلة بمعلومات إضافية موجودة عادة في المكنز أو المعجم اللغوي، كما تضم مرادفات الكلمة.", - "wolframalpha":"ولفرام ألفا ‏، هو محرك بحث أطلق عند الساعة الثالثة من صباح 16 مايو 2009. على خلاف محركات البحث التقليدية، فإن ولفرام يقوم بالإجابة عن الأسئلة التي تطرح عليه في حين تقوم البواحيث التقليدية بمجرد عرض قائمة من مواقع الإنترنت ذات العلاقة بالكلمات المفتاحية التي يتم البحث عبرها.", + "wolframalpha":"ولفرام ألفا ، هو محرك بحث أطلق عند الساعة الثالثة من صباح 16 مايو 2009. على خلاف محركات البحث التقليدية، فإن ولفرام يقوم بالإجابة عن الأسئلة التي تطرح عليه في حين تقوم البواحيث التقليدية بمجرد عرض قائمة من مواقع الإنترنت ذات العلاقة بالكلمات المفتاحية التي يتم البحث عبرها.", "wttr.in":[ "Des Moines, Iowa, United States تقرير حالة ألطقس", "https://wttr.in" ], - "yacy":"ياسي ‏ – هو محرك بحثي موزع يستخدم بالمجان، مبني علي مبادئ شبكة النظير للنظير. محتوى المحرك عبار عن برنامج مكتوب بلغة الجافا موزع على العديد من الحواسب الالية في شهر سبتمبر 2006 وكان يسمى ب «نظراء الياسي» كل نظير بمفرده يبحث في شبكة الإنترنت، يحلل ويسجل الصفحات التي وجدت ويخزن التسجيلات في قاعدة بيانات مشتركة بين الاخرون طبقا لمبادئ شبكة النظير للنظير. هو محرك بحث لأي شخص ويمكنه بناء مدخل بحثي لشبكته الداخلية ومساعدته في البحث على الإنترنت العام.", + "yacy":"ياسي – هو محرك بحثي موزع يستخدم بالمجان، مبني علي مبادئ شبكة النظير للنظير. محتوى المحرك عبار عن برنامج مكتوب بلغة الجافا موزع على العديد من الحواسب الالية في شهر سبتمبر 2006 وكان يسمى ب «نظراء الياسي» كل نظير بمفرده يبحث في شبكة الإنترنت، يحلل ويسجل الصفحات التي وجدت ويخزن التسجيلات في قاعدة بيانات مشتركة بين الاخرون طبقا لمبادئ شبكة النظير للنظير. هو محرك بحث لأي شخص ويمكنه بناء مدخل بحثي لشبكته الداخلية ومساعدته في البحث على الإنترنت العام.", "yacy images":[ "yacy:ar", "ref" ], "yahoo news":"ياهو! نيوز بالإنجليزية موقع أخباري تابع لشركة ياهو الأمريكية تقوم بجمع الأخبار من جميع الوكلات والصحف ووضعها في الموقع.", - "youtube":"يوتيوب ‏ هو موقع ويب أمريكي يسمح لمستخدميه برفع، بث، ومشاركة التسجيلات المرئية مجانًا، بالإضافة إلى إمكانية التعليق والتفاعل مع المحتوى. تأسس الموقع في 14 فبراير 2005 على يد تشاد هيرلي وستيف تشين وجاود كريم، وهم ثلاثة موظفين سابقين في شركة باي بال، وكان مقره في مدينة سان برونو، كاليفورنيا. في البداية، اعتمد يوتيوب على تقنية أدوبي فلاش لعرض الفيديوهات، لكنه انتقل لاحقًا إلى تقنية إتش تي إم إل 5 الأكثر حداثة.", + "youtube":"يوتيوب هو موقع ويب أمريكي يسمح لمستخدميه برفع، بث، ومشاركة التسجيلات المرئية مجانًا، بالإضافة إلى إمكانية التعليق والتفاعل مع المحتوى. تأسس الموقع في 14 فبراير 2005 على يد تشاد هيرلي وستيف تشين وجاود كريم، وهم ثلاثة موظفين سابقين في شركة باي بال، وكان مقره في مدينة سان برونو، كاليفورنيا. في البداية، اعتمد يوتيوب على تقنية أدوبي فلاش لعرض الفيديوهات، لكنه انتقل لاحقًا إلى تقنية إتش تي إم إل 5 الأكثر حداثة.", "yummly":[ "تطبيق محمول", "wikidata" ], - "z-library":"مكتبة-زد ‏ هو مشروعshadow library لمشاركه الملفات للوصول إلى مقالات العلميه والنصوص الادبيه وكتب المصالح العامه. ونشآت كمرآه لLibrary Genesis،و اغلبيه كتبها من Library Genesis." + "z-library":"مكتبة-زد هو مشروعshadow library لمشاركه الملفات للوصول إلى مقالات العلميه والنصوص الادبيه وكتب المصالح العامه. ونشآت كمرآه لLibrary Genesis،و اغلبيه كتبها من Library Genesis." }, "bg":{ "1337x":"1337x е уебсайт за споделяне на файлове чрез метода peer-to-peer посредством протокола BitTorrent. Към 2022 г. това е третият най-популярен торент тракер. Създаден е през 2007 г. С нарастващата му популярност десетки търсачки го премахват от резултатите си. Поради естеството на услугата, която предоставя, не са рядкост и правните действия към уебсайта, както и временните прекъсвания на функционалността.", @@ -653,6 +665,18 @@ ], "mastodon users":"মাস্টোডন হল স্ব-হোস্ট করা সামাজিক নেটওয়ার্কিং পরিষেবাগুলি চালানোর জন্য একটি বিনামূল্যের এবং ওপেন-সোর্স সফ্টওয়্যার৷ নিজস্ব আচরণবিধি, পরিষেবার শর্তাবলী, গোপনীয়তা নীতি, গোপনীয়তার বিকল্প এবং বিষয়বস্তু সংযম নীতি।", "naver":"নেইভার একটি দক্ষিণ কোরীয় ইন্টারনেট ভিত্তিমঞ্চ। কোরিয়ার নেইভার কর্পোরেশন এটির পরিচালক। ১৯৯৯ সালে দক্ষিণ কোরিয়ার স্ব-উদ্ভাবিত অনুসন্ধান ইঞ্জিন ব্যবহারকারী প্রথম আন্তর্জাল প্রবেশদ্বার হিসেবে এটি যাত্রা শুরু করে। এটি ছিল বিশ্বের প্রথম পূর্ণাঙ্গ অনুসন্ধান সুবিধা প্রদানকারী ওয়েবসাইট, যেখানে বিভিন্ন শ্রেণীর অনুসন্ধান ফলাফল সংকলিত একটিমাত্র ফলাফল পাতায় সেগুলিকে প্রকাশ করা হত। এরপর নেইভার আরও বেশ কিছু নতুন সেবা যোগ করেছে, যাদের মধ্যে বৈদ্যুতিন ডাক (ই-মেইল) ও সংবাদের মতো প্রাথমিক সুবিধাগুলি থেকে শুরু করে বিশ্বের প্রথম ইন্টারনেটভিত্তিক প্রশ্নোত্তর ভিত্তিমঞ্চ \"নলেজ ইন\" অন্তর্ভুক্ত।", + "naver images":[ + "naver:bn", + "ref" + ], + "naver news":[ + "naver:bn", + "ref" + ], + "naver videos":[ + "naver:bn", + "ref" + ], "nixos wiki":[ "nixos wiki:en", "ref" @@ -878,6 +902,18 @@ "portal web sud-coreà", "wikidata" ], + "naver images":[ + "naver:ca", + "ref" + ], + "naver news":[ + "naver:ca", + "ref" + ], + "naver videos":[ + "naver:ca", + "ref" + ], "nixos wiki":[ "nixos wiki:en", "ref" @@ -1076,11 +1112,23 @@ "mastodon users:cs", "ref" ], - "mastodon users":"Mastodon je sociální síť podobná známější síti X. Na rozdíl od většiny sociálních sítí je Mastodon open source a každý si může založit svoji vlastní instanci. Každá instance má vlastní podmínky užívání, ochrany soukromí a pravidel pro příspěvky; zároveň je propojená s ostatními instancemi, a je tedy možné se na ně připojit pomocí jednoho účtu.", + "mastodon users":"Mastodon je sociální síť podobná síti X. Na rozdíl od většiny sociálních sítí je Mastodon open source a každý si může založit svoji vlastní instanci. Každá instance má vlastní podmínky užívání, ochrany soukromí a pravidel pro příspěvky; zároveň je propojená s ostatními instancemi, a je tedy možné se na ně připojit pomocí jednoho účtu.", "mdn":"MDN Web Docs jsou webové stránky provozované Mozilla Foundation, které obsahují dokumentaci k projektům založených na Mozille jako Firefox či Thunderbird a webových standardům a technologiím. Veškerý editovatelný obsah je ukládán v Git repozitáři na GitHub.com, který umožňuje každému uživateli navrhovat úpravy a diskutovat změny. Server byl založen v roce 2005 pod názvem Mozilla Developer Center a část jeho obsahu pocházela z dnes již zrušeného serveru Netscape DevEdge.", "metacpan":"CPAN je softwarový repozitář obsahující jednak moduly pro programovací jazyk Perl a jednak aplikace napsané v tomto jazyce. První myšlenky k jeho zřízení se objevily už v roce 1993 inspirované repozitářem CTAN typografického systému TeX, ale do provozu byl oficiálně uveden až v roce 1995. Jméno CPAN nese kromě samotného repozitáře i perlový program, který slouží k stažení a instalaci modulů. Kromě toho je možné do repozitáře přistupovat i přes webové rozhraní, kde je například možné i bez instalace číst dokumentaci patřičného modulu generovanou ze standardního formátu POD.", "microsoft learn":"Microsoft Learn je webový portál a elektronická knihovna technické dokumentace a školení pro koncové uživatele, vývojáře a IT profesionály, kteří pracují s produkty společnosti Microsoft. Microsoft Learn byl veřejnosti představen v září 2018. V roce 2022 byla původní knihovna technické dokumentace, která se jmenovala Microsoft Docs, a která v roce 2016 nahradila MSDN a Microsoft TechNet, přesunuta do elektronické knihovny Microsoft Learn.", "naver":"Naver je jihokorejská online platforma provozovaná společností Naver Corporation. Debutoval v roce 1999 jako první webový portál v Jižní Koreji. Byl také prvním operátorem na světě, který zavedl funkci komplexního vyhledávání, která sestavuje výsledky vyhledávání z různých kategorií a prezentuje je na jediné stránce. Naver od té doby přidal množství nových služeb, od základních funkcí, jako je e-mail a zprávy, až po světově první online platformu otázek a odpovědí Knowledge iN.", + "naver images":[ + "naver:cs", + "ref" + ], + "naver news":[ + "naver:cs", + "ref" + ], + "naver videos":[ + "naver:cs", + "ref" + ], "npm":"npm je správce balíčků pro JavaScript, výchozí správce balíčků pro prostředí Node.js.", "odysee":"Odysee je americká decentralizovaná platforma pro sdílení videa postavená na blockchainu LBRY. Staví se jako alternativa k hlavním webům pro sdílení videí, ale s důrazem na svobodu slova a decentralizaci.", "openlibrary":"Open Library je internetová databáze knih. Je provozována v rámci projektu Internet Archive a její ambicí je mít informace o úplně všech vydaných knihách. Podporuje různé klasifikace, například ISBN, Deweyův desetinný systém DDC nebo klasifikaci LCC podle Kongresové knihovny.", @@ -1430,10 +1478,10 @@ "alpine linux packages":"Alpine Linux ist eine auf musl und BusyBox basierende Linux-Distribution, die in erster Linie für „Power-User entwickelt wurde, die Sicherheit, Einfachheit und Ressourceneffizienz schätzen“. Sie verwendet einen gehärteten Kernel und kompiliert alle Programme des Benutzerraums standardmäßig als position-independent Code mit Schutz vor Pufferüberlauf. Seit 2016 wird bei Docker, einer Software für Containervirtualisierung, überwiegend Alpine Linux als virtuelles Betriebssystem der Container eingesetzt. Hierdurch stieg das allgemeine Interesse an der Distribution erheblich, außerdem entstanden personelle Verflechtungen. Ein Fork von Alpine Linux, postmarketOS, wurde entwickelt, um auf mobilen Geräten zu laufen.", "annas archive":"Anna’s Archive ist eine kostenfrei nutzbare Metasuchmaschine für Schattenbibliotheken. Als solche bietet sie freien Zugang zu Büchern, wissenschaftlichen Aufsätzen, Comics und Zeitschriften. Die Website wird von einem anonymen Team von Archivaren betrieben, die sich Anna und das „Pirate Library Mirror (PiLiMi) team“ nennen, und finanziert sich über Spenden. Nach eigenen Angaben stehen Metadaten zu über 120 Millionen Werken zur Verfügung.", "ansa":"Die Agenzia Nazionale Stampa Associata (ANSA) ist eine italienische Nachrichten- und Presseagentur, die am 15. Januar 1945 in Rom gegründet wurde. Sie ist eine Genossenschaft aus 30 assoziierten Verlagen und 43 Tageszeitungen Italiens und gilt als führende Nachrichtenagentur Italiens vor Adnkronos und AGI.", - "apple app store":"Der App Store ist eine digitale Vertriebsplattform für Anwendungssoftware vom US-amerikanischen Unternehmen Apple. Die Plattform wurde 2008 eingeführt und bietet Mobile Apps für iOS- und iPadOS-Geräte und Software für tvOS und watchOS.", + "apple app store":"Der App Store ist eine digitale Vertriebsplattform für Anwendungssoftware vom US-amerikanischen Unternehmen Apple. Die Plattform wurde 2008 eingeführt und bietet Mobile Apps für iOS- und iPadOS-Geräte, Software für tvOS, watchOS und visionOS, sowie Anwendungen für macOS.", "apple maps":"Apple Karten ist ein Kartendienst von Apple, der im September 2012 mit dem hauseigenen Betriebssystem iOS 6 gestartet wurde. Die iOS-eigene Anwendung Karten ist die lokalisierte Anwendung für den Kartendienst auf dem iPhone, iPad und iPod touch. Seit OS X Mavericks ist die Anwendung Karten auch auf dem Mac vorinstalliert.", "artic":"Das Art Institute of Chicago ist ein 1866 gegründetes Kunstmuseum, verbunden mit der seit 1866 tätigen Kunsthochschule, 1882 umbenannt in School of the Art Institute of Chicago (SAIC) in Chicago, Illinois, (USA).", - "arxiv":"arXiv.org ist ein Dokumentenserver für Preprints aus den Bereichen Physik, Mathematik, Informatik, Statistik, Finanzmathematik und Biologie. Ausgesprochen wird arXiv als „archive“ (englisch), wobei das X für das griechische χ steht.", + "arxiv":"arXiv.org ist eine kuratierte digitale Plattform zum Austausch von Forschungsergebnissen aus den Bereichen Physik, Mathematik, Informatik, Statistik, Finanzmathematik, Biologie, Elektroingenieurwesen und Systemwissenschaft sowie Wirtschaftswissenschaften. Ausgesprochen wird arXiv als „archive“ (englisch), wobei das X für das griechische χ steht.", "ask":"Ask.com ist ein Internetportal, das ursprünglich als Suchmaschine funktionierte, inzwischen aber nur noch Antworten aus einem festen Frage-Antwort-Reservoir generiert.", "askubuntu":[ "stackoverflow:de", @@ -1615,6 +1663,18 @@ "https://www.moviepilot.de" ], "naver":"Naver ist ein südkoreanisches Webportal, das 1999 entwickelt wurde. Es umfasst eine Suchmaschine und diverse weitere Dienste.", + "naver images":[ + "naver:de", + "ref" + ], + "naver news":[ + "naver:de", + "ref" + ], + "naver videos":[ + "naver:de", + "ref" + ], "niconico":"Nico Nico Douga ist ein japanischer Videoportal- und Livestream-Anbieter, der von Niwango geleitet wird. Seine Spitznamen sind Nico Nico und Nico-dō, wobei nikoniko das japanische Ideophon (Gitaigo) für „lächeln“ ist und dōga für „Video“ steht. Nico Nico Douga ist die am neuntmeisten besuchte Website in Japan. Die Seite hat 2007 den Japanese Good Design Award gewonnen und eine Anerkennung in der Kategorie Digital Communities beim Prix Ars Electronica 2008.", "npm":"npm ist ein Paketmanager für die JavaScript-Laufzeitumgebung Node.js. npm wurde 2010 von Isaac Schlueter als Mitarbeiter des kalifornischen Cloud-Plattform-Anbieters Joyent programmiert. 2014 gründete er die „npm, inc.“", "odysee":"Odysee ist eine amerikanische, dezentralisierte Videoplattform, die auf der LBRY Blockchain basiert. Sie positioniert sich als Alternative zu Diensten wie YouTube mit einem Fokus auf freie Meinungsäußerung und Dezentralisierung.", @@ -2006,7 +2066,7 @@ "ref" ], "deezer":"Deezer is a French music streaming service and media service provider founded in 2007 that provides users with access to a vast library of music tracks, podcasts, and radio stations. It offers streaming services in over 180 countries and features a catalog of more than 90 million licensed tracks, making it one of the largest streaming platforms available. Deezer is available on various devices, including Android, iOS, macOS and others. The company is 41.4% owned by the Access Industries investment fund since 2016, 8.1% by Orange Group and 4.5% by the Pinault family through Artémis Group.", - "deviantart":"DeviantArt is an American online community that features artwork, videography, photography, and literature, launched on August 7, 2000, by Angelo Sotira, Scott Jarkoff, and Matthew Stephens, among others.", + "deviantart":"DeviantArt is an American online community that features artwork, videography, photography, and literature, launched on August 7, 2000, by Mathew Stephens, Scott Jarkoff and Angelo Sotira, among others.", "discuss.python":"Discourse is an open source Internet forum system released on August 26, 2014. It was founded by Jeff Atwood, Robin Ward, and Sam Saffron.", "docker hub":[ "hosting service for Docker repository", @@ -2037,6 +2097,10 @@ "wikidata" ], "emojipedia":"Emojipedia is an emoji reference website which documents the meaning and common usage of emoji characters in the Unicode Standard. Most commonly described as an emoji encyclopedia or emoji dictionary, Emojipedia also publishes articles and provides tools for tracking new emoji characters, design changes and usage trends. It has been owned by Zedge since 2021.", + "encyclosearch":[ + "Search over two dozen encyclopedias at once with EncycloSearch! EncycloSearch is an ad-free, open-source encyclopedia search engine and reader. Supported by the Knowledge Standards Foundation.", + "https://encyclosearch.org" + ], "erowid":"Erowid, also called Erowid Center, is a non-profit educational organization that provides information about psychoactive plants and chemicals.", "etymonline":"Etymonline, or Online Etymology Dictionary, sometimes abbreviated as OED, is a free online dictionary that describes the origins of English words, written and compiled by Douglas R. Harper.", "fdroid":"F-Droid is a free and open source app store and software repository for Android, serving a similar function to the Google Play store. The main repository, hosted by the project, contains only free and open source apps. Applications can be browsed, downloaded and installed from the F-Droid website or client app without the need to register an account. \"Anti-features\" such as advertising, user tracking, or dependence on non-free software are flagged in app descriptions.", @@ -2068,7 +2132,7 @@ "google":"Google Search is a search engine operated by Google. It allows users to search for information on the Web by entering keywords or phrases. Google Search uses algorithms to analyze and rank websites based on their relevance to the search query. It is the most popular search engine worldwide.", "google images":"Google Images is a search engine owned by Gsuite that allows users to search the World Wide Web for images. It was introduced on July 12, 2001, due to a demand for pictures of the green Versace dress of Jennifer Lopez worn in February 2000. In 2011, Gsuite image search functionality was added.", "google news":"Google News is a news aggregator service developed by Google. It presents a continuous flow of links to articles organized from thousands of publishers and magazines.", - "google play apps":"Google Play, also known as the Google Play Store or the Play Store, is a digital distribution service operated and developed by Google. It serves as the official app store for certified devices running on the Android operating system and its derivatives, as well as ChromeOS, allowing users to browse and download applications developed with the Android software development kit and published through Google. Google Play has also served as a digital media store, with it offering various media for purchase such as books, movies, musical singles, television programs, and video games.", + "google play apps":"Google Play, also known as the Google Play Store, Play Store, or sometimes the Android Store, is a digital distribution service operated and developed by Google. It serves as the official app store for certified devices running on the Android operating system and its derivatives, as well as ChromeOS, allowing users to browse and download applications developed with the Android software development kit and published through Google. Google Play has also served as a digital media store, with it offering various media for purchase such as books, movies, musical singles, television programs, and video games.", "google play movies":[ "google play apps:en", "ref" @@ -2091,14 +2155,10 @@ "huggingface:en", "ref" ], - "il post":"Il Post is an Italian online daily newspaper, founded and directed in 2010 by Luca Sofri. The editorial staff includes assistant editors Francesco Costa and Elena Zacchetti and journalists Arianna Cavallo, Luca Misculin, Giulia Balducci and Emanuele Menietti, as well as contributions from Luca Sofri and a number of other collaborators.", - "imdb":"The Internet Movie Database (IMDb) is an online database of information related to films, television series, podcasts, home videos, video games, and streaming content online – including cast, production crew and personal biographies, plot summaries, trivia, ratings, and fan and critical reviews. IMDb began as a fan-operated movie database on the Usenet group \"rec.arts.movies\" in 1990, and moved to the Web in 1993. Since 1998, it has been owned and operated by IMDb.com, Inc., a subsidiary of Amazon.", + "il post":"Il Post is an Italian online daily newspaper, founded in 2010 by Luca Sofri and directed by Francesco Costa. The editorial staff includes assistant editors Francesco Costa and Elena Zacchetti and journalists Arianna Cavallo, Luca Misculin, Giulia Balducci and Emanuele Menietti, as well as contributions from Luca Sofri and a number of other collaborators.", + "imdb":"IMDb, historically known as the Internet Movie Database, is an online database of information related to films, television series, podcasts, home videos, video games, and streaming content online – including cast, production crew and personal biographies, plot summaries, trivia, ratings, and fan and critical reviews. IMDb began as a fan-operated movie database on the Usenet group \"rec.arts.movies\" in 1990, and moved to the Web in 1993. Since 1998, it has been owned and operated by IMDb.com, Inc., a subsidiary of Amazon.", "imgur":"Imgur is an American online image sharing and image hosting service with a focus on social gossip that was founded by Alan Schaaf in 2009. The service has hosted viral images and memes, particularly those posted on Reddit.", "ina":"The Institut national de l'audiovisuel is a repository of all French radio and television audiovisual archives. Additionally it provides free access to archives of countries such as Afghanistan and Cambodia. It has its headquarters in Bry-sur-Marne.", - "invidious":[ - "Invidious Instances", - "https://api.invidious.io/" - ], "ipernity":[ "The worlds largest non-commercial photo, video and blog sharing community - financed only by membership dues, without any intention of making a profit.", "https://www.ipernity.com" @@ -2127,7 +2187,7 @@ "https://lib.rs" ], "library genesis":"Library Genesis is a shadow library project for file-sharing access to scholarly journal articles, academic and general-interest books, images, comics, audiobooks, and magazines. The site enables free access to content that is otherwise paywalled or not digitized elsewhere. LibGen describes itself as a \"links aggregator\", providing a searchable database of items \"collected from publicly available public Internet resources\" as well as files uploaded \"from users\". The URL libgen.is was down in January to March of 2025.", - "library of congress":"The Library of Congress (LOC) is a research library in Washington, D.C., serving as the library and research service for the United States Congress and the de facto national library of the United States. It also administers copyright law through the United States Copyright Office.", + "library of congress":"The Library of Congress (LOC) is a research library in Washington, D.C., serving as the library and research service for the United States Congress and the de facto national library of the United States. It also administers copyright law through the United States Copyright Office, and it houses the Congressional Research Service.", "libretranslate":[ "Free and Open Source Machine Translation API. Free to download, offline capable and easy to setup. Run your own API server in just a few minutes.Free and Open Source Machine Translation API. Free to download, offline capable and easy to setup. Run your own API server in just a few minutes.", "https://libretranslate.com" @@ -2185,6 +2245,18 @@ "https://mymemory.translated.net/" ], "naver":"Naver is a South Korean online platform operated by the Naver Corporation. The company's products include a search engine, email hosting, blogs, maps, and mobile payment.", + "naver images":[ + "naver:en", + "ref" + ], + "naver news":[ + "naver:en", + "ref" + ], + "naver videos":[ + "naver:en", + "ref" + ], "niconico":"Niconico, Inc. , known before 2012 as Nico Nico Douga , is a Japanese video sharing service based in Tokyo, Japan. \"Niconico\" or \"nikoniko\" is the Japanese ideophone for smiling. As of 2021, Niconico is the 34th most-visited website in Japan, according to Alexa Internet.", "nixos wiki":[ "NixOS Wiki - NixOS Wiki", @@ -2260,7 +2332,7 @@ ], "pubmed":"MEDLINE is a bibliographic database of life sciences and biomedical information. It includes bibliographic information for articles from academic journals covering medicine, nursing, pharmacy, dentistry, veterinary medicine, and health care. MEDLINE also covers much of the literature in biology and biochemistry, as well as fields such as molecular evolution.", "pypi":"The Python Package Index, abbreviated as PyPI and also known as the Cheese Shop, is the official third-party software repository for Python. It is analogous to the CPAN repository for Perl and to the CRAN repository for R. PyPI is run by the Python Software Foundation, a charity. Some package managers, including pip, use PyPI as the default source for packages and their dependencies.", - "quark":"Shenma Inc. is a \"mobile-first\" search engine for China that was launched in April 2014. It is a joint venture between Alibaba Group and UCWeb. In April 2017, according to China Internet Watch, Shenma had an 8.8% of the China search engine market share, which made it the second most used search engine after Baidu. Shenma comes with UC Browser, a mobile browser with an estimated 20% share of China's browser market and over 30% of China's mobile browser marketshare. Shenma search was co-founded as a mobile search engine by UCWeb and Alibaba in 2013. In 2014, Alibaba acquired UCWeb.", + "quark":"Shenma Inc. is a \"mobile-first\" search engine for China that was launched in April 2014. It is a joint venture between Alibaba Group and UCWeb.", "quark images":[ "quark:en", "ref" @@ -2282,7 +2354,7 @@ "online database of internet radio stations", "wikidata" ], - "reddit":"Reddit is an American proprietary social news aggregation and forum social media platform. Registered users submit content to the site such as links, text posts, images, and videos, which are then voted up or down by other members. Posts are organized by subject into user-created boards called \"subreddits\". Submissions with more upvotes appear towards the top of their subreddit and, if they receive enough upvotes, ultimately on the site's front page. Reddit administrators moderate the communities. Moderation is also conducted by community-specific moderators, who are unpaid volunteers. It is operated by Reddit Inc., based in San Francisco.", + "reddit":"Reddit is an American proprietary social news aggregation and forum social media platform. Registered users submit content to the site such as links, text posts, images, and videos, which are then voted up or down by other members. Posts are organized by subject into user-created boards called \"subreddits\". Submissions with more upvotes appear towards the top of their subreddit and, if they receive enough upvotes, ultimately on the site's front page. Reddit administrators moderate the communities. Moderation is also conducted by community-specific moderators, who are unpaid volunteers. It is operated by Reddit, Inc., based in San Francisco.", "reuters":"Reuters is a news agency owned by Thomson Reuters. It employs around 2,500 journalists and 600 photojournalists in about 200 locations worldwide writing in 16 languages. Reuters is one of the largest news agencies in the world.", "rottentomatoes":"Rotten Tomatoes is an American review-aggregation website for film and television. The company was launched in August 1998 by three undergraduate students at the University of California, Berkeley: Senh Duong, Patrick Y. Lee, and Stephen Wang. Although the name \"Rotten Tomatoes\" connects to the practice of audiences throwing rotten tomatoes in disapproval of a poor stage performance, the direct inspiration for the name from Duong, Lee, and Wang came from an equivalent scene in the 1992 Canadian film Léolo.", "rubygems":"RubyGems is a package manager for the Ruby programming language that provides a standard format for distributing Ruby programs and libraries, a tool designed to easily manage the installation of gems, and a server for distributing them. It was created by Chad Fowler, Jim Weirich, David Alan Black, Paul Brannan and Richard Kilmer in 2004.", @@ -2332,7 +2404,7 @@ "wikidata" ], "stackoverflow":"Stack Exchange is a network of question-and-answer (Q&A) websites on topics in diverse fields, each site covering a specific topic, where questions, answers, and users are subject to a reputation award process. The reputation system allows the sites to be self-moderating. Currently, Stack Exchange is composed of 173 communities bringing in over 100 million unique visitors each month. As of February 2025 the three most active sites in the network are Stack Overflow, Mathematics, and Ask Ubuntu.", - "startpage":"Startpage is a Dutch search engine company that highlights privacy as its distinguishing feature. The website advertises that it allows users to obtain Bing Search and Google Search results while protecting users' privacy by not storing personal information or search data and removing all trackers. Startpage.com also includes an Anonymous View browsing feature that allows users the option to open search results via proxy for increased anonymity.", + "startpage":"Startpage.com is a Dutch search engine website that highlights privacy as its distinguishing feature. The website advertises that it allows users to obtain Bing Search and Google Search results while protecting users' privacy by not storing personal information or search data and removing all trackers. Startpage.com also includes an Anonymous View browsing feature that allows users the option to open search results via proxy for increased anonymity. Startpage is owned and operated by Surfboard Holding BV, The Hague, the Netherlands.", "startpage images":[ "startpage:en", "ref" @@ -2361,7 +2433,11 @@ "https://www.tokyotosho.info/" ], "unsplash":"Unsplash is a website dedicated to proprietary stock photography. Since 2021, it has been owned by Getty Images. The website claims over 330,000 contributing photographers and generates more than 13 billion photo impressions per month on their growing library of over 5 million photos. Unsplash has been cited as one of the world's leading photography websites by Forbes, Design Hub, CNET, Medium and The Next Web.", - "vimeo":"Vimeo, Inc. is an American video hosting, sharing, and services provider founded in 2004 and headquartered in New York City. Vimeo focuses on the delivery of high-definition video across a range of devices and operates on a software as a service (SaaS) business model. The platform provides tools for video creation, editing, and broadcasting along with enterprise software solutions and the means for video professionals to connect with clients and other professionals. As of December 2021, the site has 260 million users, with around 1.6 million subscribers to its services.", + "uxwing":[ + "Exclusive Free icons SVG images easily copy paste SVG code or download SVG vector & PNG for commercial use no attribution required. You can use this icons library for websites, PowerPoint, applications, Android, etc", + "https://uxwing.com" + ], + "vimeo":"Vimeo is an American video hosting, sharing, and services provider founded in 2004 and headquartered in New York City. Vimeo focuses on the delivery of high-definition video across a range of devices and operates on a software as a service (SaaS) business model. The platform provides tools for video creation, editing, and broadcasting along with enterprise software solutions and the means for video professionals to connect with clients and other professionals. As of December 2021, the site has 260 million users, with around 1.6 million subscribers to its services.", "voidlinux":"Void Linux is an independent Linux distribution that uses the X Binary Package System (XBPS) package manager, which was designed and implemented from scratch, and the runit init system. Excluding binary kernel blobs, a base install is composed entirely of free software.", "wallhaven":[ "Your source for the best high quality wallpapers on the Net!", @@ -2385,13 +2461,13 @@ "wikicommons.images:en", "ref" ], - "wikidata":"Wikidata is a collaboratively edited multilingual knowledge graph hosted by the Wikimedia Foundation. It is a common source of open data that Wikimedia projects such as Wikipedia, and anyone else, are able to use under the CC0 public domain license. Wikidata is a wiki powered by the software MediaWiki, including its extension for semi-structured data, the Wikibase. As of early-2025, Wikidata had 1.65 billion item statements.", + "wikidata":"Wikidata is a collaboratively edited multilingual knowledge graph hosted by the Wikimedia Foundation. It is a common source of open data that Wikimedia projects such as Wikipedia, and anyone else, are able to use under the CC0 public domain license. Wikidata is a wiki powered by the software MediaWiki, including its extension for semi-structured data, the Wikibase. As of early 2025, Wikidata had 1.65 billion item statements.", "wikimini":[ "family of online encyclopedias for children", "wikidata" ], "wikinews":"Wikinews is a free-content news wiki and a project of the Wikimedia Foundation that works through collaborative journalism through user-created content. Wikipedia co-founder Jimmy Wales has distinguished Wikinews from Wikipedia by saying, \"On Wikinews, each story is to be written as a news story as opposed to an encyclopedia article.\" Wikinews's neutral point of view policy aims to distinguish it from other citizen journalism efforts such as Indymedia and OhmyNews. In contrast to most Wikimedia Foundation projects, Wikinews allows original work in the form of original reporting and interviews. In contrast to newspapers, Wikinews does not permit op-ed.", - "wikipedia":"Wikipedia is a free online encyclopedia, written and maintained by a community of volunteers, known as Wikipedians, through open collaboration and the wiki software MediaWiki. Founded by Jimmy Wales and Larry Sanger on January 15, 2001, Wikipedia has been hosted since 2003 by the Wikimedia Foundation, an American nonprofit organization funded mainly by donations from readers. Wikipedia is the largest and most-read reference work in history.", + "wikipedia":"Wikipedia is a free online encyclopedia, written and maintained by a community of volunteers, known as Wikipedians, through open collaboration and the wiki software MediaWiki. Founded by Jimmy Wales and Larry Sanger in 2001, Wikipedia has been hosted since 2003 by the Wikimedia Foundation, an American nonprofit organization funded mainly by donations from readers. Wikipedia is the largest and most-read reference work in history.", "wikiquote":"Wikiquote is part of a family of wiki-based projects run by the Wikimedia Foundation using MediaWiki software. The project's objective is to collaboratively produce a vast reference of quotations from prominent people, books, films, proverbs, etc. and writings about them. The website aims to be as accurate as possible regarding the provenance and sourcing of the quotations.", "wikisource":"Wikisource is an online wiki-based digital library of free-content textual sources operated by the Wikimedia Foundation. Wikisource is the name of the project as a whole; it is also the name for each instance of that project, one for each language. The project's aim is to host all forms of free text, in many languages, and translations. Originally conceived as an archive to store useful or important historical texts, it has expanded to become a general-content library. The project officially began on November 24, 2003, under the name Project Sourceberg, a play on Project Gutenberg. The name Wikisource was adopted later that year and it received its own domain name.", "wikispecies":"Wikispecies is a wiki-based online project supported by the Wikimedia Foundation. Its aim is to create a comprehensive open content catalogue of all species; the project is directed at scientists, rather than at the general public. Jimmy Wales stated that editors are not required to fax in their degrees, but that submissions will have to pass muster with a technical audience. Wikispecies is available under the GNU Free Documentation License and CC BY-SA 4.0.", @@ -2711,7 +2787,7 @@ "google":"El buscador de Google o buscador web de Google es un motor de búsqueda en la web propiedad de Alphabet Inc. Es el motor de búsqueda más utilizado en la Web y recibe cientos de millones de consultas cada día a través de sus diferentes servicios. El objetivo principal del buscador de Google es buscar texto en las páginas web, en lugar de otro tipo de datos. Fue desarrollado originalmente por Larry Page y Sergey Brin en 1997.", "google images":"Google Imágenes es una especialización del buscador principal para imágenes, se introdujo el 12 de julio de 2001 debido a la demanda de imágenes del vestido verde de Versace que usó Jennifer López en febrero de 2000. En 2011, se agregó la función de búsqueda inversa de imágenes.", "google news":"Google Noticias, conocido en España como Google News, es un agregador y buscador de noticias automatizado que rastrea de forma constante la información de los principales medios de comunicación en línea.", - "google play apps":"Google Play o Google Play Store es una plataforma de distribución digital de aplicaciones móviles para los dispositivos con sistema operativo Android, así como una tienda en línea desarrollada y operada por Google. Esta plataforma permite a los usuarios navegar y descargar aplicaciones, juegos, música, libros, revistas y películas. También se pueden adquirir dispositivos móviles como ordenadores Chromebook, teléfonos inteligentes Nexus y Pixel, Google Chromecast, entre otros. También cuenta con versiones para Wear OS y Android TV.", + "google play apps":"Google Play o Google Play Store es una plataforma de distribución digital de aplicaciones móviles para los dispositivos con sistema operativo Android, así como una tienda en línea desarrollada y operada por play store Esta plataforma permite a los usuarios navegar y descargar aplicaciones, juegos, música, libros, revistas y películas. También se pueden adquirir dispositivos móviles como ordenadores Chromebook, teléfonos inteligentes Nexus y Pixel, Google Chromecast, entre otros. También cuenta con versiones para Wear OS y Android TV.", "google play movies":[ "google play apps:es", "ref" @@ -2735,6 +2811,10 @@ "imdb":"Internet Movie Database es una base de datos en línea que en un principio almacena información relacionada con películas, y con el tiempo se transforma en la base de datos más grande del mundo donde se encuentran programas de televisión, eventos en vivo y difundidos en televisión o en la web, entrega de premios, especiales y videojuegos. Se encuentra el personal de equipo de producción, actores, series y programas de televisión, videojuegos, actores de doblaje y personajes ficticios que aparecen en los medios de entretenimiento visual. Recibe más de 100 millones de usuarios únicos al mes y cuenta con una versión móvil. IMDb fue inaugurada el 17 de octubre de 1990, y en 1998 fue adquirida por Amazon.com.", "imgur":"Imgur es un sitio web para alojar imágenes en línea, fundado por Alan Schaaf en el 2009 en Ohio, Estados Unidos, como un regalo para la comunidad de Reddit. Imgur es, actualmente, una de las mayores webs de contenido de imágenes de Internet donde son juzgadas en tiempo real por una comunidad de usuarios a través de comentarios y votos.", "ina":"El Instituto nacional del audiovisual (INA) es un organismo público francés cuya misión principal es archivar las producciones audiovisuales y producir, editar, publicar, comercializar y distribuir contenidos audiovisuales y multimedia para todos los públicos, ya sean profesionales, empresas o particulares, para todas las pantallas o plataformas de difusión, incluido el audio. El INA también incluye un centro de formación e investigación destinado a desarrollar y transmitir conocimientos y experiencia en los campos audiovisual, mediático y digital.", + "ipernity":[ + "La comunidad de intercambio de fotos, vídeos y blogs no comerciales más grande del mundo, financiada únicamente por las cuotas de los miembros, sin ánimo de lucro.", + "https://www.ipernity.com" + ], "iqiyi":"iQIYI, anteriormente Qiyi, es una plataforma de vídeo en línea basada en Pekín, lanzada el 22 de abril de 2010. iQIYI es una de las plataformas de vídeo en línea de mayor tamaño del mundo, con casi 6 mil millones de horas de reproducciones en su servicio cada mes, y con más de 500 millones de usuarios activos al mes.", "kickass":"KickassTorrents es un sitio web que proporciona un directorio de archivos torrent y enlaces magnéticos para facilitar el intercambio de archivos peer-to-peer mediante el protocolo BitTorrent. Fue fundada en 2008 y fue puesto fuera de línea el 20 de julio de 2016, cuando el dominio fue capturado por el gobierno de Estados Unidos. Los servidores proxy del sitio fueron cerrados por su personal, al mismo tiempo.", "lemmy comments":[ @@ -2783,6 +2863,18 @@ "ref" ], "naver":"Naver es el principal portal de Internet de Corea del Sur. Naver fue lanzado en junio de 1999 y fue el primer portal coreano que disponía de un buscador propio e independiente integrado con la página. Desde entonces ha liderado la carrera del desarrollo de buscadores en Corea. Además Naver proporciona muchos servicios a los internautas: posee una agencia de noticias propia que cubre exhaustivamente más de 90 medios de comunicación, un servicio de correo electrónico y un buscador de tesis doctorales. Su contenido más popular son los de los manhwas Torre de Dios y Girls of the Wilds. También es dueña de la aplicación de llamadas gratis LINE.", + "naver images":[ + "naver:es", + "ref" + ], + "naver news":[ + "naver:es", + "ref" + ], + "naver videos":[ + "naver:es", + "ref" + ], "niconico":"Niconico , anteriormente conocido como Nico Nico Douga , es una web de alojamiento de vídeos de origen japonés creada por Niwango. Nico Nico Douga, según Alexa, es la duodécima web más visitada en Japón.", "nixos wiki":[ "nixos wiki:en", @@ -2816,7 +2908,7 @@ ], "reddit":"Reddit es un sitio web de marcadores sociales y agregador de noticias donde los usuarios pueden añadir textos, imágenes, videos o enlaces. Los usuarios pueden votar a favor o en contra del contenido, haciendo que aparezcan en las publicaciones destacadas. Su público es mayoritariamente anglosajón y la mayoría de la actividad se realiza en inglés. Reddit fue software libre desde el 19 de junio de 2009 hasta septiembre de 2017, cuando la compañía archivó y cerró el acceso a sus repositorios en Github, que incluían todo el código escrito para Reddit excepto las partes antispam.", "reuters":"Reuters es una agencia de noticias con sede en el Reino Unido, conocida por suministrar información a medios de comunicación y mercados financieros.", - "rottentomatoes":"Rotten Tomatoes es un sitio web estadounidense de revisión y reseñas para cine y televisión. La compañía fue fundada en agosto de 1998 por tres estudiantes universitarios de la Universidad de California, Berkeley: Senh Duong, Patrick Y. Lee y Stephen Wang. Aunque el nombre \"Rotten Tomatoes\" se conecta con la práctica de audiencias arrojando tomates podridos cuando desaprueba una pobre actuación en el escenario, la inspiración original proviene de una escena con tomates en la película canadiense de 1992 Léolo.", + "rottentomatoes":"Rotten Tomatoes es un sitio web estadounidense de revisión y reseñas para cine y televisión. La compañía fue fundada en agosto de 1998 por tres estudiantes universitarios de la Universidad de California, Berkeley: Senh Duong, Patrick Y. Lee y Stephen Wang. Aunque el nombre «Rotten Tomatoes» se conecta con la práctica de audiencias arrojando tomates podridos cuando desaprueba una pobre actuación en el escenario, la inspiración original proviene de una escena con tomates en la película canadiense de 1992 Léolo.", "rubygems":"RubyGems es un gestor de paquetes para el lenguaje de programación Ruby que proporciona un formato estándar y autocontenido para poder distribuir programas o bibliotecas en Ruby, una herramienta destinada a gestionar la instalación de estos, y un servidor para su distribución. Es, por tanto, equivalente al papel que juegan CPAN y PEAR en los lenguajes Perl y PHP, respectivamente. RubyGems es parte de la librería estándar a partir de la versión 1.9 de Ruby.", "rumble":"Rumble es una plataforma de video en línea canadiense con sede en Toronto. Fue fundada en 2013 por Chris Pavlovski, un emprendedor tecnológico de Canadá. El recuento mensual de usuarios de Rumble ha experimentado un rápido crecimiento desde julio de 2020, pasando de 1,6 millones de usuarios mensuales a 31,9 millones al final del primer trimestre de 2021.", "semantic scholar":"Semantic Scholar es un motor de búsqueda respaldado por un sistema de inteligencia artificial dedicado a trabajar con publicaciones académicas. Desarrollado en el Allen Institute for Artificial Intelligence, se lanzó al público en noviembre de 2015. Utiliza avances recientes en el procesamiento del lenguaje natural para proporcionar resúmenes de artículos académicos.", @@ -3190,7 +3282,7 @@ "ref" ], "wikidata":"Wikidata elkarlanean sortutako datu-base eleanitz bat da, Wikimedia Fundazioak kudeatua. Wikidataren xedea da iturri bateratu bat eskaintzea zenbait datutarako (adibidez, pertsonen jaiotegunak eta jarduerak, edo Wikipediako artikulu bat nola den beste hizkuntzen Wikipedietan. Informazio hori Wikimediaren proiektuetan erabiltzen da gero, adibidez Wikipedian. Wikipediako artikulu askotan goian eskuinaldean hainbat daturekin agertzen den infotaula, kasu askotan automatikoki sortu izan da artikulu horri buruz Wikidatan dagoen informazioarekin.", - "wikipedia":"Wikipedia eduki askeko entziklopedia bat da, lankidetzaz editatua, eleanitza, Interneten argitaratua, Wikimedia Fundazioa irabazi asmorik gabeko erakundeak sustengatua. Wikipedia mundu osoko boluntarioek idazten dute. Internetera konektatutako edonork parte har dezake Wikipediako artikuluetan, aldatu lotura sakatuz. 2015ko azaroaren bostean, 291 hizkuntzatako edizioak zituen, eta horietatik 275 zeuden aktibo. Proiektuaren xedea da ahalik eta hizkuntza gehienetan idatzitako entziklopedia sortu eta hedatzea. Guztira 37 milioi artikulu ditu, horietatik 461.286 euskaraz eta bost milioitik gora ingelesez.", + "wikipedia":"Wikipedia eduki askeko entziklopedia bat da, lankidetzaz editatua, eleanitza, Interneten argitaratua, Wikimedia Fundazioa irabazi asmorik gabeko erakundeak sustengatua. Wikipedia mundu osoko boluntarioek idazten dute. Internetera konektatutako edonork parte har dezake Wikipediako artikuluetan, aldatu lotura sakatuz. 2015ko azaroaren bostean, 291 hizkuntzatako edizioak zituen, eta horietatik 275 zeuden aktibo. Proiektuaren xedea da ahalik eta hizkuntza gehienetan idatzitako entziklopedia sortu eta hedatzea. Guztira 37 milioi artikulu ditu, horietatik 464.025 euskaraz eta bost milioitik gora ingelesez.", "wikiquote":"Wikiesanak Wikimedia Fundazioaren aipu ezagunen bilduma da. Bertan pertsona entzutetsuen esanak, liburu ospetsuetako aipamenak eta herrialde ezberdinetako esaera zaharrak edo atsotitzak aurki daitezke. Wikipedia bezala, internet bidezko elkarlanean eta wiki softwarean oinarritzen den webgunea da. GFDL lizentziapean argitaratzen da. Hastapenetan ingelesez soilik bazen ere, 2004 urteaz geroztik 79 hizkuntza ezberdinetan dago. Ingelesezko bertsioa artikulu gehien duena izan da ordutik, 2010 urteko hasieran ia ehun mila orri eta hamazazpi mila bat aipuak biltzeko artikulu duela. 2010. urtearen hasieran euskarazko bertsioak mila orrialde baino gehiago zituen, eta horietako ehun baino gehiago, aipu-orrialdeak.", "wikisource":"Wikiteka wikian dagoen testu eduki askeko Interneteko liburutegi digitala da, Wikimedia Fundazioak kudeatutakoa. Wikiteka da proiektu osoaren izena, baita proiektu horretako ale bakoitzaren izena ere, non ale bakoitza hizkuntza desberdin bati dagokion. Beraz, hizkuntza askotako iturriek osatzen dute Wikiteka.", "wikispecies":"Wikiespezieak Wikimedia Fundazioaren proiektu bat da. Bertan, naturako izaki espezie ezberdinen informazioa aurki dezakegu; animaliak, landareak, onddoak, bakteriak, eta gainontzeko bizi-formak.", @@ -3264,7 +3356,7 @@ "ref" ], "deezer":"دیزر رسانه جاری موسیقی و پادکست مبتنی بر اینترنت است. این سرویس در اوت ۲۰۰۷ در پاریس فرانسه پایه‌گذاری شد. تا تاریخ ۳ آوریل ۲۰۱۸، ۱۴ میلیون کاربر ماهانه فعال و ۶ میلیون مشترک پولی برای دیزر گزارش شده‌است.", - "deviantart":"دوینت‌آرت یک شبکه اجتماعی آنلاین با محوریت هنر است. پایگاه رسمی آن در ۷ آگوست سال ۲۰۰۰ توسط چند طراح وب با ایده‌های نو راه‌اندازی شد. آثار هنری در این ‍‍ پایگاه عبارتند از; عکاسی، هنر دیجیتال، نقاشی دیجیتال، هنر سنتی، ادبیات، پویانمایی، فیلم سازی، پوسته برای برنامه‌های کاربردی و غیره که با دیگران به اشتراک گذاشته می‌شوند.", + "deviantart":"دوینت‌آرت یک شبکه اجتماعی آنلاین با محوریت هنر است. پایگاه رسمی آن در ۷ اوت سال ۲۰۰۰ توسط چند طراح وب با ایده‌های نو راه‌اندازی شد. آثار هنری در این ‍‍ پایگاه عبارتند از; عکاسی، هنر دیجیتال، نقاشی دیجیتال، هنر سنتی، ادبیات، پویانمایی، فیلم سازی، پوسته برای برنامه‌های کاربردی و غیره که با دیگران به اشتراک گذاشته می‌شوند.", "duckduckgo":[ "currency:fa-IR", "ref" @@ -3340,6 +3432,18 @@ "ref" ], "naver":"موتور جستجوی ناور (به کره‌ای: 네이버) یک موتور جستجوی معروف در کره است که در حدود ۷۰ درصد بازار مشترک را در مقابل ۲ درصد گوگل داراست .Naver در سال ۱۹۹۹ توسط گروهی از مهندسان شرکت Sumsong ایجاد شد. و به عنوان اولین وب پورتال کره جنوبی شناخته می‌شود و یک پورتال بومی اختصاصی محسوب می گردد.", + "naver images":[ + "naver:fa-IR", + "ref" + ], + "naver news":[ + "naver:fa-IR", + "ref" + ], + "naver videos":[ + "naver:fa-IR", + "ref" + ], "niconico":"نیکونیکو ، یک سرویس اشتراک‌گذاری ویدیوی ژاپنی مستقر در توکیو، ژاپن است. «نیکونیکو» ایدئوفون ژاپنی برای لبخند زدن است. طبق گزارش الکسا اینترنت از سال ۲۰۲۱، نیکونیکو سی و چهارمین وب سایت پربازدید در ژاپن است.", "nixos wiki":[ "nixos wiki:en", @@ -3413,6 +3517,7 @@ }, "fi":{ "9gag":"9GAG on vuonna 2008 perustettu meemeihin ja muuhun internethuumoriin keskittyvä verkkosivusto. Se syntyi hongkonglaisen opiskelijaryhmän työnä, johon kuului Ray Chan, Chris Chan, Derek Chan, Marco Fung ja Brian Yu, koska Facebook ei ollut saatavilla Hongkongissa. 9GAG-sovellus on saatavilla Androidille, iOS:lle, Windows Phonelle ja BlackBerry 10:lle. 9GAG on saavuttanut sosiaalisen median kuten Facebookin, Twitterin ja Instagramin avulla suuren suosion. Marraskuussa 2017 9GAG:in sivuilla oli käynyt yli 223 miljoonaa vierailijaa.", + "alpine linux packages":"Alpine Linux on riippumaton Linux-jakelu, joka on suunniteltu käyttöön reittimissä, palomuureissa, säiliöissä ja palvelimissa. Alpine Linux on suunniteltu pieneksi, ja se voidaan ajaa suoraan RAM-muistista. Alpine Linux perustuu musl-kirjastolle ja Busyboxille. Alpine Linux on suosittu säiliöissä, joissa hyökkäyspinta-ala minimoidaan ja suoritus tehdään kustannustehokkaaksi. Alpine Linuxista on saatavilla 32- ja 64-bittisiä versioita useille alustoille: i386 (x86), AMD64, ARMv6, ARMv8, PowerPC ja IBM System z (s390x) arkkitehtuureille.", "ansa":[ "italialainen uutistoimisto", "wikidata" @@ -3726,12 +3831,12 @@ "apple maps":"Apple Plans est une application de cartographie en ligne développée par Apple. Il s'agit de l'application de cartographie par défaut sur iOS, iPadOS, macOS et watchOS. Elle permet de donner les directions et l'heure d'arrivée estimée que l'on soit en voiture, à pied, en bicyclette ou en transport en commun. Une fonctionnalité appelée « tour Flyover » permet d'explorer certaines zones urbaines et autres points d'intérêt modélisés en 3D.", "artic":"L'Art Institute of Chicago est un musée situé à Chicago aux États-Unis. Deuxième plus grand musée d'art du pays après le Metropolitan Museum of Art de New York, il abrite l'une des plus importantes collections d'art des États-Unis.", "arxiv":"arXiv est une archive ouverte de prépublications électroniques d'articles scientifiques dans les domaines de la physique, des mathématiques, de l'informatique, de la biologie quantitative, de la finance quantitative, de la statistique, de l'ingénierie électrique et des systèmes, et de l'économie, et qui est accessible gratuitement par Internet.", - "ask":"Ask.com anciennement Ask Jeeves, est un moteur de recherche sur Internet fondé en 1996 par Garrett Gruener et David Warthen à Berkeley en Californie. Le moteur initial fut conçu et implémenté par Gary Chevsky.", + "ask":"Ask.com anciennement Ask Jeves, est un moteur de recherche sur Internet fondé en 1996 par Garrett Gruener et David Warthen à Berkeley en Californie. Le moteur initial fut conçu et implémenté par Gary Chevsky.", "askubuntu":[ "stackoverflow:fr", "ref" ], - "baidu":"Baidu est une entreprise Internet chinoise. Son moteur de recherche en chinois peut chercher du texte et des images. En juin 2013, c'est le site le plus consulté de Chine et, en 2019, c'est le 3e site le plus consulté sur Internet. Baidu signifie « Cent degrés » en chinois. En 2023, l'entreprise propose un index de plus de 3 milliards de pages web. Elle participe activement à la communauté du logiciel libre, notamment dans le domaine de l'intelligence artificielle.", + "baidu":"Baidu est une entreprise Internet chinoise. Son moteur de recherche en chinois peut chercher du texte et des images. En juin 2013, c'est le site le plus consulté de Chine et, en 2019, c'est le troisième site le plus consulté au monde. En 2023, l'entreprise propose un index de plus de 3 milliards de pages web. Elle participe activement à la communauté du logiciel libre, notamment dans le domaine de l'intelligence artificielle.", "baidu images":[ "baidu:fr", "ref" @@ -3821,7 +3926,7 @@ "github":"GitHub est un service web d'hébergement et de gestion de développement de logiciels, utilisant le logiciel de gestion de versions Git. Ce site est développé en Ruby on Rails et Erlang par Chris Wanstrath, PJ Hyett et Tom Preston-Werner. GitHub propose des comptes professionnels payants, ainsi que des comptes gratuits pour les projets de logiciels libres.", "gitlab":"GitLab est un logiciel libre de forge basé sur git proposant les fonctionnalités de wiki, un système de suivi des bugs, l’intégration continue et la livraison continue. Développé par GitLab Inc et créé par Dmitriy Zaporozhets et par Valery Sizov, le logiciel est utilisé par plusieurs grandes entreprises informatiques, dont IBM, Sony, le centre de recherche de Jülich, la NASA, Alibaba, Oracle, Invincea, O’Reilly Media, Leibniz Rechenzentrum, le CERN, European XFEL, la GNOME Foundation, KDE, Boeing, Autodata, SpaceX, Symbio et Altares.", "goodreads":"Goodreads est un site web de critiques et de notation de livres. Fondé en décembre 2006, puis lancé en janvier 2007 par Otis Chandler II, un ingénieur informatique et entrepreneur, et Elizabeth Khuri, ce site se base sur des notions de catalogage social et permet aux individus de faire des recherches dans une vaste base de données comprenant des livres, des annotations et des critiques littéraires. Les usagers peuvent y créer un compte pour consigner leurs impressions de lecture, ce qui génère des listes de suggestions personnalisées. Ils ont également la possibilité de créer leurs propres clubs de lecture, des sondages, des blogs et de lancer des discussions.", - "google":"Google /ˈgu.gəl/ est un moteur de recherche sur Internet gratuit et libre d'accès sur le World Wide Web, ayant donné son nom à la société Google. C'est aujourd'hui le moteur de recherche et le site web le plus visité au monde : 90 % des internautes l'utilisaient en 2018.", + "google":"Google /ˈgu.gəl/ est un moteur de recherche sur Internet gratuit et libre d'accès sur le World Wide Web, ayant donné son nom à la société Google.", "google images":"Google Images est un service proposé depuis 2001 par le moteur de recherche Google pour permettre de trouver sur le web des images en rapport avec un sujet donné.", "google news":"Google Actualités ou Google News est un service en ligne gratuit de Google qui présente de façon automatisée des articles d'information en provenance de sources sur le Web. Il fonctionne de la même manière qu'un moteur de recherche, en n'indexant que les articles de presse. Ce service, disponible dans vingt-deux pays, a été créé en avril 2002. La partie française du service est sortie de son statut bêta le 14 mai 2009. En juin 2017, Google change le design de Google Actualités pour une version plus épurée et plus claire pour l'utilisateur. Elle propose également des articles dont les faits sont vérifiés dans la version américaine.", "google play apps":"Google Play est une suite d'applications et un magasin d'applications créée par Google le 22 octobre 2008 par fusion des services Android Market, Google Movies, Google ebookstor et Google Music. Elle regroupe Play Store, le magasin d'applications officiel pour les appareils fonctionnant sous Android et Chrome OS, Play Films et séries, une boutique de location de films et de séries télévisées, Play Livres, une boutique d'achat en ligne de livres et de magazines, et Play Jeux, un service de sauvegarde, de récompense et de défis autour des jeux mobiles disponibles sur le Play Store.", @@ -3846,6 +3951,10 @@ "imdb":"L’Internet Movie Database, abrégé en IMDb, est une base de données en ligne sur le cinéma mondial, sur la télévision, et plus secondairement les jeux vidéo. IMDb restitue un grand nombre d’informations concernant les films, les acteurs, les réalisateurs, les scénaristes et toutes personnes et entreprises intervenant dans l’élaboration d’un film, d’un téléfilm, d’une série télévisée ou d’un jeu vidéo. L’accès aux informations publiques est gratuit. Un service payant, IMDbPro, donne accès aux informations supplémentaires susceptibles d’intéresser les professionnels. Créé le 17 octobre 1990 par l'Anglais Col Needham, c’est un site visité, en 2010, par plus de 57 millions d’usagers uniques chaque mois, ce qui le plaçait au 39e rang des sites les plus visités au monde. Il appartient depuis 1998 à Amazon.", "imgur":"imgur est une société américaine fondée par Alan Schaaf en 2009 qui exploite un site d'hébergement d'images.", "ina":"L'Institut national de l'audiovisuel (INA) est un établissement public à caractère industriel et commercial français ayant pour mission principale d'archiver les productions audiovisuelles et de produire, d'éditer, de publier, de commercialiser et de distribuer des contenus audiovisuels et multimédias à destination de tous les publics, professionnels, entreprises ou particuliers, pour tous les écrans ou plateformes de diffusion, y compris audio. L'INA comprend également un centre de formation et de recherche visant à développer et transmettre les savoirs et expertises dans les domaines de l'audiovisuel, des médias et du numérique.", + "ipernity":[ + "La plus grande communauté non commerciale de partage de photos, vidéos et blogs au monde, financée uniquement par les cotisations des membres, à but non lucratif.", + "https://www.ipernity.com" + ], "iqiyi":"iQiyi est un site de publication de vidéos en ligne créé le 22 avril 2010 en République populaire de Chine. Il cumulait plus de 50 millions de vidéos visionnées quotidiennement en mai 2013. Le public chinois visualise en tout plus d'1,28 milliard d'émissions de télévision et de films par mois d'après des statistiques de septembre 2014.", "kickass":"KickassTorrents est un annuaire web de fichiers torrent et de liens magnet destiné à faciliter le partage de fichiers. Le site a été fondé en 2008 et a été mis hors ligne le 20 juillet 2016, lorsque le domaine a été saisi par le gouvernement des États-Unis. Les sites proxy ont été fermés par les membres de son équipe le même jour. Le 16 décembre 2016, KickassTorrents est de retour en ligne sur une nouvelle adresse, créée par l'équipe originale.", "lemmy comments":[ @@ -3871,7 +3980,7 @@ "mastodon users:fr", "ref" ], - "mastodon users":"Mastodon est un réseau social et logiciel de microblogage auto-hébergé, libre, distribué et décentralisé via ActivityPub au sein du Fediverse. Il permet de partager des messages, images, médias et autres contenus. C'est une alternative à Twitter. Des instances sont publiquement mises à disposition afin de faciliter son utilisation.", + "mastodon users":"Mastodon est un logiciel de microblogage libre et open source fonctionnant sur le protocole ActivityPub.", "mdn":"MDN Web Docs, précédemment Mozilla Developer Network et anciennement Mozilla Developer Center, est un dépôt de documentation et une ressource d'apprentissage pour les développeurs web utilisés par Mozilla, Microsoft, Google et Samsung.", "metacpan":"Le Comprehensive Perl Archive Network, ou CPAN, est un site Web consacré au langage de programmation Perl. CPAN désigne également un module Perl servant à accéder à ce site. Son nom vient du Comprehensive TeX Archive Network, ou CTAN, son homologue consacré à TeX.", "microsoft learn":[ @@ -3894,6 +4003,18 @@ "ref" ], "naver":"Naver est une plateforme en ligne sud-coréenne gérée par la société Naver Corporation. Le site a été créé en 1999 en tant que premier portail Web en Corée à développer et utiliser son propre moteur de recherche. Il a également été le premier opérateur au monde à introduire la fonction de recherche intégrée, qui compile les résultats de recherche de différentes catégories et les présente sur une seule page. Depuis, Naver a ajouté une multitude de nouveaux services telles que le courrier électronique et les nouvelles, puis aussi la première plateforme de questions-réponses en ligne Knowledge iN.", + "naver images":[ + "naver:fr", + "ref" + ], + "naver news":[ + "naver:fr", + "ref" + ], + "naver videos":[ + "naver:fr", + "ref" + ], "niconico":"Niconico (ニコニコ, Nikoniko, litt. « Sourire ») anciennement connu sous le nom Nico Nico Dōga (ニコニコ動画, litt. « Sourire vidéos ») ou Nico-dō est un site web de partage de vidéos, très populaire au Japon, géré par Niwango (en). Le site est surnommé « Niconico » ou « Nico-dō », sachant que « nico nico » est l'onomatopée pour le sourire. Niconico est classé 13e parmi les sites web les plus visités au Japon. Le site a gagné le Good Design Award japonais en 2007, et le Honoray Mentions Awards de la catégorie des communautés digitales au Prix Ars Electronica 2008. Sa particularité est que les commentaires de la vidéo s'affichent directement sur celle-ci au même moment qu'ils ont été écrits, ils sont appelés « danmaku » (弾幕). Cette fonctionnalité est aussi développée par le chinois bilibili.", "nixos wiki":[ "nixos wiki:ru", @@ -3972,7 +4093,7 @@ "wikicommons.images:fr", "ref" ], - "wikicommons.images":"Wikimedia Commons est une base de données multimédia. Elle héberge des images, des sons, d'autres médias audiovisuels et des données JSON sous licence libre. Elle centralise des médias libres, tels que photographies, dessins, schémas, partitions, cartes géographiques, textes écrits et parlés, animations et vidéos, objets 3D qui ont une utilité pour les projets du mouvement Wikimédia. En novembre 2023, elle passe la barre des 100 millions de fichiers hébergés.", + "wikicommons.images":"Wikimedia Commons est une bibliothèque numérique collaborative et gratuite lancée en 2004. Elle héberge des images, des sons, d'autres médias audiovisuels et des données JSON. Elle centralise des médias tels que photographies, dessins, schémas, fichiers son, partitions, cartes géographiques, textes écrits et parlés, animations et vidéos, objets 3D qui ont une utilité pour les projets du mouvement Wikimédia. En novembre 2023, elle passe la barre des 100 millions de fichiers hébergés.", "wikicommons.videos":[ "wikicommons.images:fr", "ref" @@ -4266,7 +4387,7 @@ "annas archive":"הארכיון של אנה היא ספריית צללים חינמית וללא מטרת רווח, המספקת גישה מקוונת לספרים וחומרים כתובים ולמידע עליהם ממגוון מקורות באמצעות רב מנוע. הספרייה הוקמה על ידי צוות ארכיונאים אנונימיים כתגובה למאמצי איגוד המוציאים לאור הבריטי וגילדת המחברים האמריקאית יחד עם רשויות החוק לסגור את האתר Z-library בנובמבר 2022.", "apple app store":"App Store היא חנות אפליקציות ייעודית למכשירי iOS, אשר מפותחת ומתוחזקת על ידי חברת אפל. השירות מאפשר למשתמשים להוריד יישומים (אפליקציות) מחנות ה-iTunes. היישומים בחנות פותחו על ידי ערכת פיתוח התוכנה של ה-iOS‏, ופורסמו על ידי אפל.", "apple maps":"אפל מפות הוא יישום מובנה במערכת ההפעלה iOS של המכשירים מבית חברת אפל, ומציע דרכי הגעה ליעדים, עדכוני תנועה, בתי עסק בסביבה ותכונות נוספות.", - "artic":"מכון האמנות של שיקגו הוא מוזיאון לאמנות יפה בפארק גרנט בשיקגו שבמדינת אילינוי בארצות הברית. מכון האמנות מכיל את אחד האוספים הגדולים ביותר בעולם של אמנות אימפרסיוניסטית ופוסט-אימפרסיוניסטית. כמו כן, קיימים במוזיאון מגוון אוספים הכוללים אמנות אסייתית, אמריקאית, אמנות מודרנית ואמנות עכשווית.", + "artic":"מכון האמנות של שיקגו הוא מוזיאון לאמנויות יפות בפארק גרנט בשיקגו שבמדינת אילינוי בארצות הברית. מכון האמנות מכיל את אחד האוספים הגדולים ביותר בעולם של אמנות אימפרסיוניסטית ופוסט-אימפרסיוניסטית. כמו כן, קיימים במוזיאון מגוון אוספים הכוללים אמנות אסייתית, אמריקאית, אמנות מודרנית ואמנות עכשווית.", "ask":"Ask.com הוא מנוע חיפוש אינטרנטי למענה שאלות שהוקם בשנת 1996 על ידי גרט גרונר ודייוויד וורט'ן בברקלי, קליפורניה. מטרתו של מנוע החיפוש היא לכוון את המחפש במהירות ובדיוק מיטבי אל העמוד העונה על שאלתו. במקרה בו הוא אינו מצליח למצוא מידע במאגר המידע שלו, הוא מפנה את המשתמש לאתרים אחרים על ידי מנועי החיפוש. התכונות המיוחדות של מנוע חיפוש Ask.com כוללות, בין היתר, מדריך מיוחד המוקדש רק לקניות יחד עם צפייה בשאלות שנשאלות ברגעים אלו ממש על ידי משתמשים אחרים. נכון ל-2008, מנוע חיפוש זה היה אחראי רק לכ-5% מכלל החיפושים בעולם.", "baidu":"Baidu הוא תאגיד טכנולוגיה בינלאומי שמרכזו ברפובליקה העממית של סין. מטה החברה נמצא ב\"Baidu Campus\" במחוז הֵידִיאַן, בייג'ינג.", "baidu images":[ @@ -4690,6 +4811,18 @@ "ref" ], "naver":"A Naver dél-koreai internetes portál és keresőmotor, melyet 1999-ben hozott létre egy korábbi Samsung-alkalmazott. A Naver saját keresőmotort fejlesztett, ami kifejezetten koreai nyelvű tartalomra specializálódik. 2009-ben a keresőmotorok között az ötödik helyen szerepelt a világon, a Google, a Yahoo!, a Baidu és a Microsoft után. A Naver a koreai piac domináns keresője, a keresések mintegy 70%-át itt bonyolítják és mintegy 25 millió felhasználónak ez a kezdőoldala a böngészőben. A Woori Investment and Securities elemzése szerint a Google-nek azért nem sikerült megvetnie a lábát a koreai piacon a Naverrel szemben, mert túl kevés koreai nyelvű tartalmat szolgáltat.", + "naver images":[ + "naver:hu", + "ref" + ], + "naver news":[ + "naver:hu", + "ref" + ], + "naver videos":[ + "naver:hu", + "ref" + ], "niconico":"Niconico, korábban Nico Nico Douga vagy röviden „Niko-dó”-ként ismert weboldal, egy japán videómegosztó portál, amit a Niwango, a Dwango egy leányvállalata üzemeltet. A „Niconico” vagy „nikoniko” egy japán hangulatfestő szó a mosolygásra. 2012. április 18. óta a 14. és 10. helyek között mozog a leglátogatottabb oldalak listáján Japánban. 2007-ben ez az oldal nyerte meg a Good Design Award-ot, és „Tiszteletbeli díjazott” volt „Digitális közösségek” kategóriában a 2008-as Ars Electronica-díj díjkiosztó rendezvényén.", "odysee":"Az Odysee egy amerikai decentralizált videómegosztó platform, amely az LBRY blokkláncra épül. A nagy videomegosztó oldalak alternatívájaként pozicionálja magát, de a szólásszabadságra és a decentralizációra helyezi a hangsúlyt.", "openstreetmap":"Az OpenStreetMap (OSM) csoportmunkán alapuló térképfejlesztés, melynek célja egy szabadon szerkeszthető és felhasználható térkép készítése az egész világról.", @@ -4892,7 +5025,7 @@ "google scholar":"Google Cendekia adalah layanan yang memungkinkan pengguna untuk melakukan pencarian materi-materi pelajaran berupa teks dalam berbagai format publikasi. Diluncurkan pada tahun 2004, indeks Google Cendekia mencakup jurnal-jurnal daring dari publikasi ilmiah. Google Cendekia menyediakan cara yang mudah untuk mencari literatur akademis secara luas. Seseorang dapat mencari di seluruh bidang ilmu dan referensi dari satu tempat: makalah peer-reviewed, tesis, buku, abstrak, dan artikel, dari penerbit akademis, komunitas profesional, pusat data pracetak, universitas, dan organisasi akademis lainnya. Google Cendekia akan membantu seseorang mengidentifikasi penelitian paling relevan dari seluruh penelitian akademis. Google Cendekia bertujuan menyusun artikel seperti yang dilakukan peneliti, dengan memperhatikan kelengkapan teks setiap artikel, penulis, publikasi yang menampilkan artikel, dan frekuensi penggunaan kutipan artikel dalam literatur akademis lainnya. Hasil paling relevan akan selalu muncul pada halaman pertama.", "google videos":"Google Videos merupakan layanan saling berbagi video dari situs Google. Lewat layanan ini bahkan pengguna Blogspot/Blogger tidak perlu login untuk dapat memajang video sebagai suntingan. Google Video menyediakan layanan video yang mudah digunakan.", "hackernews":"Hacker News adalah situs web berita sosial berfokus pada ilmu komputer dan kewirausahaan. Dijalankan oleh dana investasi Paul Graham dan inkubator startup, Y Combinator. Secara umum, konten yang dapat dikirimkan didefinisikan sebagai \"segala sesuatu yang memuaskan keingintahuan intelektual seseorang\".", - "hoogle":"Haskell adalah bahasa pemrograman fungsional murni. Nama bahasa pemrograman Haskell diambil dari nama seseorang matematikawan Haskell Curry, yang terkenal akan karyanya di bidang combinatory logic. Haskell hanya mengenal expression dan equation.", + "hoogle":"Haskell adalah merupakan bahasa pemrograman fungsional murni. Nama bahasa pemrograman Haskell diambil dari nama seseorang matematikawan Haskell Curry, yang terkenal akan karyanya di bidang combinatory logic. Haskell hanya mengenal expression dan equation.", "huggingface":"Hugging Face, Inc. adalah sebuah perusahaan Amerika Serikat yang mengembangkan perkakas untuk mengembangkan aplikasi menggunakan pembelajaran mesin. Perusahaan ini membangun sebuah perpustakaan transformer untuk aplikasi pengolahan bahasa alami dan sebuah platform yang digunakan oleh pengguna untuk berbagi model pembelajaran mesin dan kumpulan data.", "huggingface datasets":[ "huggingface:id", @@ -4928,6 +5061,18 @@ "https://learn.microsoft.com" ], "naver":"Naver adalah sebuah portal web populer di Korea Selatan, yang dimiliki oleh Naver Corporation. Naver diluncurkan pada bulan Juni 1999 oleh mantan karyawan Samsung, dan menjadi portal web pertama di Korea Selatan yang menggunakan sistem mesin pencari mereka sendiri. Salah satu di antara fitur Naver adalah \"Comprehensive Search\", yang diluncurkan pada 2000, yang menampilkan hasil dari berbagai kategori dalam satu laman.", + "naver images":[ + "naver:id", + "ref" + ], + "naver news":[ + "naver:id", + "ref" + ], + "naver videos":[ + "naver:id", + "ref" + ], "niconico":"Niconico , sebelum 2012 dikenal sebagai Nico Nico Douga , adalah sebuah layanan berbagi video Jepang di dunia maya. \"Niconico\" atau \"nikoniko\" adalah ideofon Jepang untuk tersenyum. Pada 2021, Niconico adalah situs web paling banyak dikunjungi ke-30 di Jepang, menurut Alexa Internet.", "nixos wiki":[ "nixos wiki:en", @@ -5159,6 +5304,18 @@ "ref" ], "naver":"Naver è una piattaforma online sudcoreana gestita da Naver Corporation. Ha debuttato nel 1999 come il primo portale web in Corea del Sud a sviluppare e utilizzare il proprio motore di ricerca. È stato anche il primo operatore al mondo a introdurre la funzione di ricerca completa, che raccoglie i risultati della ricerca da varie categorie e li presenta in un'unica pagina. Da allora Naver ha aggiunto una moltitudine di nuovi servizi che vanno dalle funzionalità di base come casella e-mail e sito di notizie alla prima piattaforma di domande e risposte online al mondo Knowledge iN.", + "naver images":[ + "naver:it", + "ref" + ], + "naver news":[ + "naver:it", + "ref" + ], + "naver videos":[ + "naver:it", + "ref" + ], "niconico":"Niconico , precedentemente conosciuto come Nico Nico Dōga , è un popolare sito web giapponese di video sharing gestito da Niwango, sussidiaria di Dwango.", "nixos wiki":[ "nixos wiki:en", @@ -5265,7 +5422,7 @@ "ref" ], "alpine linux packages":"Alpine Linux (アルパイン・リナックス) は、muslとBusyBoxをベースとしたLinuxディストリビューションである。セキュリティ・シンプルさ・リソース効率を重視するパワーユーザー向けに設計されている。Alpine Linuxではgrsecurity/PaXを適用したLinuxカーネルを使用しており、全てのユーザ空間バイナリがスタックスマッシング保護 付きの位置独立実行ファイル (PIE) としてコンパイルされている。", - "annas archive":"Anna's Archiveは、様々な書籍リソースへのアクセスを提供する無料の非営利オンラインシャドウライブラリメタサーチエンジンで、匿名のアーキビストのチーム によって、2022年11月にあったZ-Libraryに対する法的措置に対抗する目的で作られた。", + "annas archive":"Anna's Archiveは、2022年のZ-Libraryを閉鎖しようとする法執行機関の動きの直後、アンナという偽名の人物によって開設されたオープンソースの検索エンジンであり、シャドウライブラリを対象としている。Z-Library、Sci-Hub、Library Genesisを含む主要なシャドウライブラリなどの記録を集約している。自身を「人類史上最大の真にオープンな図書館」と称し、「存在するすべての書籍をカタログ化し、これらすべての書籍をデジタル形式で簡単に利用可能にするという人類の進展を追跡する」ことを目指すと述べている。このサイトは著作権のある資料のダウンロードについて責任を負わないと主張している。これは、このサイトがメタデータをインデックス化するのみで、ファイル自体は直接ホストせず、第三者によるダウンロードリンクを提供するのみであるためである。しかしながら、政府によるネット検閲や出版社および出版業界の業界団体による訴訟の対象となっており、大規模な著作権侵害に関与しているとされている。", "ansa":"ANSA通信 はイタリアの通信社。イタリアの主要新聞社36社が加盟する非営利の協同組合という形になっている。", "apple app store":"App Store(アップ・ストア)は、Appleが運営するiPhone、iPod touch、iPad向けアプリケーションのダウンロードサービスである。Mac OS X 10.6.6以降を搭載したMacにも同様のサービスがあるが、こちらは Mac App Store を参考のこと。", "apple maps":"マップ は、Appleが運営・開発する地図アプリケーション。iOS、iPadOS、macOS、watchOSのデフォルトの地図アプリケーションである。", @@ -5316,6 +5473,7 @@ "brave:ja", "ref" ], + "btdigg":"BTDiggは、初めてMainline DHTに対応した検索エンジンである。このサービスはBitTorrent DHTネットワークに参加し、ネットワークの維持や、マグネットリンクといくつかのトレント属性(名称、サイズ、ファイル一覧)の対応を支援していた。これらの属性はインデックス化されてデータベースに挿入されていた。エンドユーザーに対しては、BTDiggはWebインターフェースを通じて全文検索データベース検索を提供していた。検索システムのWeb部分は、ユーザーのテキストクエリにより適切な情報を取得していた。Web検索は欧州およびアジアの言語によるクエリに対応していた。プロジェクト名は「BitTorrent Digger」の略称であり、この文脈において「digger」はトレジャーハンターを意味する。2016年6月には検索エンジンスパムが原因とされる理由でサービスはオフラインとなった。しかし2025年現在、サービスは再びオンラインとなっていると報告されているが、IPフィルタリングの影響により通常のクリアネット接続からはアクセス困難な場合が多い。サービスはTorネットワークやTor Browser経由でアクセス可能である。", "currency":"DuckDuckGo(ダックダックゴー)は、インターネット検索エンジンである。利用者のプライバシーの保護と利用履歴等を記録保存しないことを運営方針としている。VivaldiやTor Browserの標準検索エンジンにも採用されている。また、DuckDuckGoは検索結果のパーソナライズを行わないため「フィルターバブル」に陥らない(DuckDuckGoはGoogleのフィルターバブル問題についてブログで指摘している)。", "dailymotion":"Dailymotion(デイリーモーション)は、Canal+傘下のDAILYMOTION SAが運営する、フランスの動画共有サービス。", "ddg definitions":[ @@ -5379,7 +5537,7 @@ "imgur":"Imgur は、アラン・シャーフが2009年にアメリカ合衆国オハイオ州アセンズで立ち上げたオンライン画像共有と画像管理サービスである。「家庭から、コメント、投票、共有によってコミュニティがリアルタイムでウェブにおける最も人気のある画像にアクセスする場所」と自称している。1日100万人以上のユーザーに無料の画像管理サービスとコメント型ソーシャルコミュニティを提供している。運営企業は広告販売や商用ホスティング、グッズ販売で収益を上げている。", "ina":"フランス国立視聴覚研究所 は、フランスの全ラジオ・テレビの視聴覚アーカイヴの宝庫である。ラジオフランスが主催し、放送局本部の建物内にある。内部にフランス音楽研究グループ を有する。", "iqiyi":"iQIYI は、中華人民共和国のビデオ・オン・デマンド及び動画配信サービスであり、百度傘下のオンラインエンターテイメント企業である。", - "library genesis":"Library Genesis(LibGen)は、様々な分野の論文・書籍の検索エンジンであり、有料で配布されていたり、どこにおいてもデジタル化されていなかったりするコンテンツを無料でアクセス可能にしている。特に、エルゼビアのScienceDirectウェブポータルで配布されているPDFファイルを収録している。", + "library genesis":"Library Genesis(LibGen)は、シャドウライブラリプロジェクトであり、ファイル共有によって学術雑誌の記事や学術書、一般向け書籍、画像、コミック、オーディオブック、雑誌などへのアクセスを提供している。他ではペイウォールで保護されていたり、デジタル化されていなかったりするコンテンツを無料でアクセス可能にしている。", "library of congress":"アメリカ議会図書館 は、アメリカ合衆国の事実上の国立図書館。蔵書数・予算額・職員数全ての点で世界最大規模の図書館である。", "mastodon hashtags":[ "mastodon users:ja", @@ -5389,6 +5547,18 @@ "mdn":"MDN Web Docsは、ウェブ標準及びMozillaプロジェクトの開発文書のためのMozillaの公式ウェブサイトである。以前の名称はMozilla Developer Network。", "metacpan":"CPAN とは、Perlのライブラリ・モジュールやその他のPerlで書かれたソフトウェアを集めた巨大なアーカイブで、世界中のサーバにその内容がミラーリングされている。再利用性・汎用性の高いモジュールが登録されており、Perlプログラマができるだけ車輪の再発明をせずに済むための支援環境となっている。登録モジュールの検索システムも提供されているため、Perlプログラマは望む機能を持ったモジュールを容易に入手することができる。", "naver":"ネイバー は、ネイバー (企業)が運営する、大韓民国(韓国)の最大手ポータルサイトである。", + "naver images":[ + "naver:ja", + "ref" + ], + "naver news":[ + "naver:ja", + "ref" + ], + "naver videos":[ + "naver:ja", + "ref" + ], "nixos wiki":[ "nixos wiki:en", "ref" @@ -5397,7 +5567,7 @@ "openlibrary":"Open Library(オープンライブラリ)とは「これまでに出版された本のウェブページ」を作るためのオンラインプロジェクトである。カリフォルニア州立図書館とケール・オースチン財団による非営利プロジェクト「インターネットアーカイブ」の一環として進められている。", "openstreetmap":"オープンストリートマップ は、自由に利用でき、なおかつ編集機能のある世界地図を作るオープンコラボレーションプロジェクトである。GPS機能を持った携帯機器、空中写真、衛星画像、他の地理情報システムからのデータをもとに作られていくのが基本だが、編集ツール上で道1本から手入力での追加も可能である。与えられた画像とベクトルデータセットはオープンデータベースライセンス (ODbL) 1.0のもと再利用可能である。", "pinterest":"Pinterest(ピンタレスト)とは、アメリカ合衆国カリフォルニア州サンフランシスコに本拠を置くPinterest, Inc.(ピンタレスト社)が運営・管理する写真共有サービス。アプリやウェブサイト方式によって提供され、ピンボード風の画面構成となっている。ユーザーはイベント・関心事・趣味などテーマ別の画像コレクションを作成・管理することができ、また他のユーザーが作成したピンボードを閲覧して自身のコレクションに加えたり、「好み」の写真として画像を「リピン」することもできるという特徴がある。", - "piratebay":"パイレート・ベイ は、デジタルコンテンツのトレントファイルを検索できるインデックスサイトである。2003年に、スウェーデンの反著作権団体Piratbyrånによって設立された。利用者はマグネットリンクおよびトレントファイルの検索、ダウンロード、掲載が可能である。マグネットリンクとトレントファイルは、BitTorrentプロトコルを用いたP2Pファイル共有に使用される。", + "piratebay":"パイレート・ベイ(The Pirate Bay、略称: TPB)は、無料の検索可能なオンラインインデックスで、「映画」「音楽」「ゲーム」「ポルノ」「ソフトウェア」を検索できる。2003年にスウェーデンのシンクタンクPiratbyrånによって設立された。パイレート・ベイではP2Pトレントプロトコルのユーザー間の接続を容易にし、ユーザーはマグネットリンクを追加することでサイトに貢献することができる。パイレート・ベイは一貫して世界で最も訪問されたトレントサイトの一つにランクしている。", "pubmed":"MEDLINE(メドライン)またはMEDLARS Online は、医学を中心とする生命科学の文献情報を収集したオンラインデータベースである。1964年に米国国立医学図書館 が作成したコンピューター化医学文献データベース「MEDLARS」は、1971年10月27日にオンライン検索サービスが開始され、1997年にはPubMedの名でインターネットに無料公開された後、改良が重ねられて成長を続け、2007年現在、月に7000万回程度のアクセスがある世界で最もよく使用される生物医学系データベースである。", "pypi":"Python Package Index は、プログラミング言語Pythonの、サードパーティーソフトウェアリポジトリである。すべてのオープンソースなPythonパッケージの包括的なカタログととらえることができる。 Pipなどのパッケージマネージャは、パッケージやその依存パッケージをPyPIからダウンロードしてインストールする機能を持つ。", "reddit":"Reddit(レディット)はアメリカ合衆国の掲示板型ソーシャルニュースサイト。主に英語圏のユーザーを対象とする。ニュース記事、画像のリンクやテキストを投稿し、コメントを付けることが可能。カリフォルニア州サンフランシスコに拠点を置くReddit, Inc.が運営する。2021年1月時点の月間利用者数は4億3000万人。欧米ではTwitterユーザー数並び利用時間を超える。", @@ -5440,7 +5610,7 @@ "wikidata":"ウィキデータ はウィキメディア財団が提供する共同編集型のデータベース(知識基盤)である。パブリックドメイン・ライセンスの下で、誰もが使用できるオープンデータを提供することを目的としている。ウィキメディア・コモンズがメディアファイルの格納場所を提供して他のウィキメディアプロジェクトがそれを利用する方法と同様に、データに対してこれを行う。ウィキデータはウィキベースソフトウェアを用いて稼働している。", "wikipedia":"ウィキペディア は、世界中のボランティアの共同作業によって執筆及び作成されるフリーの多言語インターネット百科事典。収録されている全ての内容がオープンコンテントで商業広告が存在しないということを特徴とし、主に寄付に依って活動している非営利団体「ウィキメディア財団」が所有・運営している。「ウィキペディア(Wikipedia)」という名前は、ウェブブラウザ上でウェブページを編集することができる「ウィキ(Wiki)」というシステムを使用した「百科事典」 であることに由来する造語である。設立者の1人であるラリー・サンガーにより命名された。", "wikisource":"ウィキソース (Wikisource) は、ウィキメディア財団が運営するウィキを利用した自由に利用できるテキストを集めた電子図書館である。ウィキソースはプロジェクトの名前でもあり、またプロジェクトのインスタンス(実体)である個々のサイト(主に各言語版)もウィキソースと呼ばれ、複数のウィキソースが集まって大きなウィキソースプロジェクトを形成している。ウィキソースの目的はあらゆる形態のフリーテキストを、多数の言語および翻訳においても提供することである。元々は有用または重要な歴史的文書を保存するアーカイブとして着想され、今では幅広いコンテンツを扱うライブラリとなっている。", - "wikispecies":"ウィキスピーシーズ (Wikispecies) は、ウィキメディア財団により運用されているウィキメディア・プロジェクトの一つ。言語別サイトには分かれておらず、コモンズと同じく各ページ内に多言語を併載する。 ウィキペディアやウィクショナリー等と同じく、ウィキベースのオンラインプロジェクトである。 動物界、植物界、菌界、真正細菌(細菌界)、古細菌、原生生物等々、ドメインや界から種や亜種に至るまであらゆる生物の分類の目録をフリーコンテントとして収集している。", + "wikispecies":"ウィキスピーシーズ は、ウィキメディア財団により運用されているウィキメディア・プロジェクトの一つ。言語別サイトには分かれておらず、コモンズと同じく各ページ内に多言語を併載する。ウィキペディアやウィクショナリー等と同じく、ウィキベースのオンラインプロジェクトである。動物界、植物界、菌界、真正細菌(細菌界)、古細菌、原生生物等々、ドメインや界から種や亜種に至るまであらゆる生物の分類の目録をフリーコンテントとして収集している。", "wiktionary":"ウィクショナリー (Wiktionary) は、コピーレフトなライセンス・オープンコンテントの辞書兼シソーラス(類語辞典)を作成し、配布することを目的としたウィキメディア財団によるプロジェクトである。GNU Free Documentation License (GFDL) およびクリエイティブ・コモンズ 表示 - 継承 3.0 非移植 のデュアルライセンスで公開される。2002年12月12日に活動を開始した。", "wolframalpha":"Wolfram Alpha(WolframAlphaともWolfram|Alphaとも表記される)は、ウルフラム・リサーチが開発した質問応答システム。事実についての質問に対して、構造化されたデータを使って計算し、直接答えを返すオンラインサービスである。他の検索エンジンのように、答えを含んでいる可能性のあるドキュメントやウェブページのリストを返すわけではない。このサービスは2009年3月に英国人科学者スティーブン・ウルフラムが発表し、同年5月15日に公開された。また、2018年6月18日には日本語版のWolfram Alphaも公開された。2022年時点では日本語に対応しているのは数学関連のクエリのみであるが、「5個のボールの並べ方は何通りあるか」「ニュートン法を使ってxcos x=0 を解く」などの質問に対して日本語で答えることができる。", "yacy":"YaCy(ヤシー、ヤスィー)とは、「人民による人民のためのウェブ検索」を標語する、オープンソースの分散型検索エンジンである。GPLv2でライセンスされている。YaCyのコアはJavaによって記述されており、ネットワークはピア・ツー・ピア (P2P)で構築されている。", @@ -5451,7 +5621,8 @@ "youtube":[ "YouTube でお気に入りの動画や音楽を楽しみ、オリジナルのコンテンツをアップロードして友だちや家族、世界中の人たちと共有しましょう。", "https://www.youtube.com/" - ] + ], + "z-library":"Z-Library は、シャドウライブラリプロジェクトであり、ファイル共有を通じて学術雑誌の記事、学術書、一般向け書籍へのアクセスを提供している。当初はLibrary Genesisのミラーサイトとして始まったが、その後劇的に広まった。" }, "ko":{ "9gag":"9GAG는 홍콩의 이미지 기반 소셜 미디어 사이트이다. 2011년 12월 기준 월 페이지뷰가 10억 건을 넘었다. 인터넷에 유행하는 이미지가 주로 올라오는 것으로 알려져 있다. 레딧과 같은 다른 비슷한 사이트와 마찬가지로 게시글에 덧글과 추천을 할 수 있다.", @@ -5600,7 +5771,19 @@ "mullvadleta:ko", "ref" ], - "naver":"네이버(영어: NAVER)는 1999년 6월에 출시된 대한민국의 포털사이트이다. 또한 네이버는 1997년 2월 26일 이해진, 권혁일, 김보경, 구창진, 오승환, 최재영, 강석호 등으로 구성된 삼성SDS의 사내 벤처에서 '웹글라이더'라는 이름으로 시작해서 1998년 1월에 분리된 네이버컴 주식회사에서 운영하다가 2000년 자회사인 한게임과 합병하여 NHN이 된 후 재분리하여 현재는 네이버(주)에서 운영하고 있다.(검색창;네이버)", + "naver":"네이버(영어: NAVER)는 1999년 6월에 출시된 대한민국의 포털사이트이다. 또한 네이버는 1997년 2월 26일 이해진, 권혁일, 김보경, 구창진, 오승환, 최재영, 강석호 등으로 구성된 삼성SDS의 사내 벤처에서 '웹글라이더'라는 이름으로 시작해서 1998년 1월에 분리된 네이버컴 주식회사에서 운영하다가 2000년 자회사인 한게임과 합병하여 NHN이 된 후 재분리하여 현재는 네이버(주)에서 운영하고 있다.(검색창;네이버) 네이버가 사실 삼성전자 이랑 합병하려고 했으나 실패했다", + "naver images":[ + "naver:ko", + "ref" + ], + "naver news":[ + "naver:ko", + "ref" + ], + "naver videos":[ + "naver:ko", + "ref" + ], "niconico":"니코니코 동화(일본어: ニコニコ動画 니코니코 도가[*], 영어: Niconico)는 일본의 동영상 사이트이다. 가도카와 디완고에서 운영하고 있다. 줄여서 니코동이나 니코니코로도 칭하며, 동영상 시청자가 직접 영상 화면에 코멘트를 삽입할 수 있다는 것이 큰 특징이다. 니코니코 동화 모바일 서비스를 운영하여, 일본에서는 모바일로도 사이트에 접속할 수 있다. 니코니코(にこにこ, ニコニコ)는 일본어로 \"싱글벙글\" 또는 \"생글생글\"을, 동화(動畵)는 이야기가 아닌 \"동영상\"을 뜻한다.", "nixos wiki":[ "nixos wiki:en", @@ -5631,7 +5814,7 @@ "ref" ], "reddit":"레딧(Reddit)은 미국의 소셜 뉴스 집계, 콘텐츠 등급 및 토론 웹사이트이다. 등록된 사용자(일반적으로 \"레디터\"라고 함)는 링크, 텍스트 게시물, 이미지, 동영상 등의 콘텐츠를 사이트에 제출한 후 다른 회원에 의해 투표된다. 게시물은 주제별로 \"커뮤니티\" 또는 \"서브레딧\"이라고 불리는 사용자가 만든 게시판으로 구성된다. 더 많은 업보트가 있는 제출물은 하위 레딧의 맨 위에 표시되며, 충분한 업보트를 받은 경우 최종적으로 사이트의 첫 페이지에 표시된다. 레딧 관리자는 커뮤니티를 관리하며 중재는 레딧 직원이 아닌 커뮤니티별 중재자에 의해 수행된다.", - "reuters":"로이터(Reuters)는 통신사의 하나다. 독일인 파울 율리우스 로이터(Paul Julius Baron von Reuter)가 설립한 영국의 뉴스 및 정보제공기업이다. 현재는 신문, 방송 등에 뉴스를 공급하는 전통적인 통신사의 기능보다 증시 시황 속보 등 금융정보 제공 등의 비중이 커져 있다.", + "reuters":"로이터(Reuters)는 통신사의 하나로, 독일인 파울 율리우스 로이터(Paul Julius Baron von Reuter)가 설립한 영국의 뉴스 및 정보제공기업이다. 현재는 신문, 방송 등에 뉴스를 공급하는 전통적인 통신사의 기능보다는, 오히려 경제 증시 시황 속보 등 금융 정보 제공 등의 비중이 커져 있다.", "rottentomatoes":"로튼 토마토(Rotten Tomatoes)는 영화 관련 웹사이트 가운데 하나이다. 영화에 대한 소식, 비평, 정보 등을 제공한다. 주로 비평가 위주의 평점을 매기는 곳이다. 사이트 이름은 옛날 공연을 보던 관객들이 연기력이 매우 나쁜 연기자들에게 토마토를 던졌던 것에서 비롯되었다.", "rubygems":"RubyGems는 루비 프로그래밍 언어를 위한 패키지 관리자이다. 루비 프로그램들과 라이브러리들을 배포하기 위한 표준 포맷을 제공한다. 그 외에 gems의 설치를 쉽게 관리하도록 설계된 도구와 이들을 배포하기 위한 서버도 제공한다. RubyConf 2004 기간 중 Chad Fowler, Jim Weirich, David Alan Black, Paul Brannan, Richard Kilmer에 의해 개발되었다.", "rumble":"럼블(Rumble)은 온타리오주 토론토에 본사를 두고 플로리다주 롱보트 키에 미국 본사를 두고 있는 온라인 비디오 플랫폼, 웹 호스팅, 클라우드 서비스 기업이다. 캐나다의 기술 기업가인 크리스 파블롭스키(Chris Pavlovski)가 2013년에 설립했다. 럼블의 클라우드 서비스 사업은 트루스 소셜을 호스팅하며, 비디오 플랫폼은 미국 우익 및 극우 사용자들 사이에서 인기가 있다. 럼블은 \"알트테크\"(alt-tech)로 설명되었다.", @@ -5674,7 +5857,7 @@ "wikinews":"위키뉴스(영어: Wikinews)는 위키미디어 재단의 뉴스 소스이다. 위키뉴스는 GNU 자유 문서 사용 허가서 1.2 이상에 따라 배포되는 위키미디어 재단의 다른 프로젝트와는 달리 크리에이티브 커먼즈의 저작자표시 사용 허가서 2.5 이상의 라이선스를 가진다. 위키뉴스에서 지지하는 중립적 시각 정책은 오마이뉴스와 같은 시민 언론의 노력과는 구별된다. 위키미디어 재단의 대부분의 프로젝트와 달리 위키뉴스는 독자적인 리포트와 인터뷰 형태의 독자적인 기사를 허용한다.", "wikipedia":"위키백과(위키百科, IPA: [ɥikçibɛ̝k̚k͈wa̠], [ykçibɛ̝k̚k͈wa̠] ) 또는 위키피디아(영어: Wikipedia, IPA: [ˌwɪkɪˈpiːdɪə] )는 누구나 자유롭게 쓰는 다언어판 온라인 백과사전이다. 협업을 개방한 위키 기반 편집 시스템을 사용하여 자발적인 위키백과 사용자 공동체가 작성하고 관리한다. 위키백과는 대표적인 집단 지성의 사례로 평가받으며 역사상 최대로 가장 많이 읽는 참고서이기도 하다. 시밀러웹과 (과거) 알렉사 인터넷에서 가장 인기있는 웹사이트 10곳 중 하나로 꾸준히 순위를 올린다. 2024년 1월 기준으로 위키백과는 세계에서 7번째로 인기있는 사이트로 순위를 올렸다. 위키백과는 자유 저작물을 보유하고 상업적인 광고가 없다. 주로 기부금으로 지원을 받는 비영리 단체인 위키미디어 재단이 소유하고 지원한다.", "wikiquote":"위키인용집(Wikiquote)은 위키백과의 자매 프로젝트로, 2004년 7월부터 영어판 위키인용집을 시작으로 여러 언어로 프로젝트가 번역되었다. 이 프로젝트의 목표는 유명한 인물이 한 말이나 책의 문장 등을 인용하고 해석하는 것이니 일종의 어록이라고 할 수 있다.", - "wikisource":"위키문헌(-文獻, 영어: Wikisource)은 위키미디어 재단에서 추진하고 있는 프로젝트이다. 위키문헌 프로젝트의 목표는 모든 사람들이 자유로이 쓸 수 있는 정보자료를 한 곳에 모으는 것이다. 자비 출판 문서나 서적을 올리는 것은 허용되지 않는다.", + "wikisource":"위키문헌(-文獻, 영어: Wikisource)은 위키미디어 재단이 운영하는 자유 콘텐츠 문헌의 온라인 위키 기반 디지털 도서관이다. 위키문헌 프로젝트의 목표는 모든 사람들이 자유로이 쓸 수 있는 정보자료를 한 곳에 모으는 것이다. 자비 출판 문서나 서적을 올리는 것은 허용되지 않는다.", "wikispecies":"위키생물종(Wikispecies 위키스피시즈[*])은 위키미디어 재단의 지원을 받는 생물 분류 도감용 프로젝트이다.", "wikiversity":"위키배움터(영어: Wikiversity 위키버시티[*])는 위키미디어 재단의 프로젝트이다. URL은 www.wikiversity.org이다. 위키버시티는 2006년 8월 15일 영어판이 제일 먼저 시작했으며 새로운 언어판들이 위키배움터 베타에서 시험판으로 생기고 있다. 위키배움터는 모두에게 열린 학습공간을 지향한다.", "wikivoyage":"위키여행(Wikivoyage, 프랑스어 발음: //, 비키부아야주; 영어 발음: //, 위키보이지)은 자발적 참여자가 함께 만들어가는 여행 가이드북 웹사이트이다. 이름은 위키(wiki)와 여행을 뜻하는 프랑스어 부아야주(voyage)를 합쳐 만들었다.", @@ -6118,7 +6301,7 @@ "youtube":"ഗൂഗിൾ ഉടമസ്ഥതയിലുള്ള ഇന്റർനെറ്റ് വീഡിയോ ഷെയറിംഗ് വെബ്‌സൈറ്റാണ്‌ യൂട്യൂബ്. ഈ സംവിധാനത്തിലൂടെ ലോകത്തെവിടെനിന്നും ഉപഭോക്താക്കൾക്ക് വീഡിയോ ഖണ്ഡങ്ങൾ മറ്റുള്ളവരുമായി പങ്കുവയ്ക്കുവാൻ കഴിയുന്നു. 2005 ഫെബ്രുവരിയിൽ പേയ്പാൽ എന്ന ഇ-വ്യാപാര കമ്പനിയിൽ ജോലി ചെയ്തിരുന്ന സ്റ്റീവ് ചെൻ, ചാഡ് ഹർലി, ജാവേദ് കരീം എന്നിവരാണ് യൂട്യൂബ് സ്ഥാപിച്ചത്. കാലിഫോർണിയയിലെ സാൻ ബ്രൂണൊ അസ്ഥാനമാക്കി പ്രവർത്തനമാരംഭിച്ച ഈ വെബ് സേവന കമ്പനി അഡോബ് ഫ്ലാഷ് സാങ്കേതിക വിദ്യ അടിസ്ഥാനമാക്കിയാണു പ്രവർത്തിക്കുന്നത്. വീഡിയോ ഖണ്ഡങ്ങൾ, സംഗീതം, ടെലിവിഷൻ പരിപാടികൾ തുടങ്ങിയവയെല്ലാം ഈ വെബ് സൈറ്റ് വഴി പങ്കുവയ്ക്കപ്പെടുന്നുണ്ട്. യുട്യൂബിൽ അംഗമായാൽ ആർക്കും വീഡിയോകൾ അപ്‌ലോഡ് ചെയ്യാവുന്നതാണ്. ശ്ലീലമായ വീഡിയോകൾ മാത്രമാണ് അനുവദിക്കുക. പുതിയ ഉപഭോക്താക്കൾക്ക് 10 മിനുട്ടിൽ കൂടുതൽ വീഡിയോ കയറ്റാൻ അനുമതി നൽകുന്നില്ല. ഓർക്കുട്ട് പോലെ തന്നെ എല്ലാ രാജ്യങ്ങളിലും യുട്യൂബിനു അനുമതി നൽകിയിട്ടില്ല. ഉപഭോക്താക്കൾക്ക് യൂട്യൂബിൽ നിന്ന് വീഡിയോ ഖണ്ഡങ്ങൾ ഡൗൺലോഡ് ചെയ്യാനും സാധിക്കും.വെബ്‌സൈറ്റ്, മൊബൈൽ അപ്ലിക്കേഷനുകൾ എന്നിവ ഉൾപ്പെടെ വീഡിയോകൾ കാണാനും മറ്റ് വെബ്‌സൈറ്റുകൾ കൂട്ടിച്ചേർക്കാനായി യൂട്യൂബ് നിരവധി മാർഗങ്ങൾ നൽകുന്നു. ലഭ്യമായ ഉള്ളടക്കത്തിൽ സംഗീത വീഡിയോകൾ, വീഡിയോ ക്ലിപ്പുകൾ, ഹ്രസ്വ, ഡോക്യുമെന്ററി ഫിലിമുകൾ, ഓഡിയോ റെക്കോർഡിംഗുകൾ, മൂവി ട്രെയിലറുകൾ, തത്സമയ സ്ട്രീമുകൾ, വീഡിയോ ബ്ലോഗുകൾ എന്നിവ ഉൾപ്പെടുന്നു. മിക്ക ഉള്ളടക്കവും സൃഷ്ടിക്കുന്നത് വ്യക്തികളാണ്, പക്ഷേ മീഡിയ കോർപ്പറേഷനുകളും വീഡിയോകൾ പ്രസിദ്ധീകരിക്കുന്നു. കാണുന്നതിനും അപ്‌ലോഡുചെയ്യുന്നതിനും പുറമെ, രജിസ്റ്റർ ചെയ്ത ഉപയോക്താക്കൾക്ക് വീഡിയോകളിൽ അഭിപ്രായമിടാനും റേറ്റുചെയ്യാനും പ്ലേലിസ്റ്റുകൾ സൃഷ്ടിക്കാനും മറ്റ് ഉപയോക്താക്കൾക്ക് സബ്സ്ക്രൈബ് ചെയ്യാനും കഴിയും. 2005 ൽ സ്ഥാപിതമായ യുട്യൂബ് തൊട്ടടുത്ത വർഷം ഗൂഗിൾ 1.65 ബില്യൺ യുഎസ് ഡോളറിന് സ്വന്തമാക്കി. 2020 ൽ 19.8 ബില്യൺ ഡോളർ സമ്പാദിച്ച യൂട്യൂബ് ഗൂഗിളിന്റെ ഏറ്റവും ലാഭകരമായ അനുബന്ധ സ്ഥാപനങ്ങളിലൊന്നായി ഇത് മാറി. ഗൂഗിളിന്റെ ആഡ്സെൻസ്(AdSense) പ്രോഗ്രാമിൽ നിന്ന് യൂട്യൂബും തിരഞ്ഞെടുത്ത സ്രഷ്‌ടാക്കളും പരസ്യ വരുമാനം നേടുന്നു. ഭൂരിഭാഗം വീഡിയോകളും കാണാൻ സൗജന്യമാണ്, പക്ഷേ ചിലതിന് സംഗീതമോ പ്രീമിയം സബ്സ്ക്രിപ്ഷനോ ആവശ്യമാണ്." }, "ms":{ - "annas archive":"Anna's Archive ialah enjin metasearch perpustakaan bayangan dalam talian percuma yang menyediakan akses kepada pelbagai sumber buku. Laman web ini ditubuhkan oleh pasukan arkivis tanpa nama dan dilancarkan sebagai tindak balas langsung kepada usaha penguatkuasaan undang-undang untuk menutup Z-Library pada November 2022 yang dibantu oleh Persatuan Penerbit dan Persatuan Pengarang.", + "annas archive":"Anna's Archive ialah enjin carian meta perpustakaan bayangan dalam talian percuma yang menyediakan akses kepada pelbagai sumber buku. Laman web ini ditubuhkan oleh pasukan arkivis tanpa nama dan dilancarkan sebagai tindak balas langsung kepada usaha penguatkuasaan undang-undang untuk menutup Z-Library pada November 2022 yang dibantu oleh Persatuan Penerbit dan Persatuan Pengarang.", "apple app store":"App Store adalah platform pengedaran digital, dibangunkan dan diselenggarakan oleh Apple Inc., untuk aplikasi mudah alih pada sistem operasi iOS. Kedai ini membolehkan pengguna melayari dan memuat turun aplikasi yang dibangunkan dengan kit pembangunan perisian iOS Apple. Apl boleh dimuat turun di telefon pintar iPhone, komputer pegang tangan iPod Touch, atau komputer tablet iPad, dan sesetengahnya boleh dipindahkan ke Apple Watchsmartwatch atau generasi ke-4 atau lebih baru Apple TV sebagai sambungan aplikasi iPhone.", "apple maps":"Peta ialah sebuah aplikasi dan perkhidmatan peta dalam talian oleh Apple.", "artic":"Institut Seni Chicago ialah sebuah muzium seni halus luas yang terletak di Grant Park, Chicago, Illinois. Institut seni ini menempatkan salah sebuah koleksi seni Impresionis dan Pasca-Impresionis yang terpenting di dunia. Antara pegangan-pegangannya yang beraneka termasuk karya Pelukis Agung, seni Amerika Syarikat, seni perhiasan Eropah dan Amerika, seni Asia dan seni moden dan kontemporari tersohor. Ia terletak di 111 South Michigan Avenue di Chicago Landmark Historic Michigan Boulevard District. Muzium ini bergabung dengan Sekolah Institut Seni Chicago. Pada keluasan sejuta kaki persegi, institut ini adalah muzium seni kedua terbesar di Amerika Syarikat, mengekori Muzium Seni Metropolitan di New York.", @@ -6223,6 +6406,18 @@ ], "mastodon users":"Mastodon adalah perisian khidmat rangkaian sosial bersumber terbuka dan bebas yang swarumah. Ia memiliki ciri mikroblog mirip infrastruktur Twitter yang ditawarkan oleh sejumlah besar pelayan Mastodon yang dijalankan secara mandiri melalui titik-titik sambung dikelola dengan aturan tatalaku, kawalan edaran kandungan dan ketentuan penggunaan yang tersendiri.", "naver":"Naver ialah platform dalam talian Korea Selatan yang dikendalikan oleh Naver Corporation. Ia dimulakan pada tahun 1999 sebagai portal web pertama di Korea yang membangun dan menggunakan enjin carian sendiri. Ia juga merupakan operator pertama di dunia untuk memperkenalkan ciri carian komprehensif yang mennyusun hasil carian dari pelbagai kategori dan membentangkannya dalam satu halaman. Sejak itu, Naver telah menambahkan banyak perkhidmatan baru dari ciri-ciri asas seperti e-mel dan berita sehingga ke platform Q&A dalam talian pertama yang dikenali sebagai Knowledge iN.", + "naver images":[ + "naver:ms", + "ref" + ], + "naver news":[ + "naver:ms", + "ref" + ], + "naver videos":[ + "naver:ms", + "ref" + ], "nixos wiki":[ "nixos wiki:en", "ref" @@ -7382,6 +7577,18 @@ "ref" ], "naver":"Naver – popularny południowokoreański serwis internetowy będący własnością Naver Corporation. Został uruchomiony w czerwcu 1999 roku przez byłych pracowników Samsunga. Zadebiutował jako pierwszy południowokoreański serwis wykorzystujący autorskie algorytmy przeszukiwania. Posiadał co najmniej 70% udziałów na koreańskim rynku w 2011 roku.", + "naver images":[ + "naver:pl", + "ref" + ], + "naver news":[ + "naver:pl", + "ref" + ], + "naver videos":[ + "naver:pl", + "ref" + ], "niconico":"Niconico , dawniej Nico Nico Douga lub w skrócie „Nico-dō” – japoński serwis internetowy umożliwiający udostępnianie filmów, zarządzany przez Niwango, filię Dwango. „Niconico” jest onomatopeją uśmiechu. Do 18 kwietnia 2012 roku platforma Niconico była czternastym najczęściej odwiedzanym serwisem internetowym. Strona zdobyła japońską nagrodę Good Design Award w 2007 roku i Honorary Mention w kategorii Digital Communities podczas Prix Ars Electronica w 2008 roku.", "npm":"npm – domyślny manager pakietów dla środowiska Node.js, może być także używany do zarządzania warstwą front-end aplikacji WWW. NPM to także repozytorium pakietów oraz nazwa firmy która nim zarządza. Istnieją także inne managery pakietów, które korzystają z repozytorium npm., np. Yarn.", "openlibrary":"Open Library – projekt online mający na celu stworzenie „one web page for every book ever published” [jedną stronę internetową dla każdej opublikowanej książki], z danymi o książkach na licencji CC0, oraz o kodzie źródłowym na licencji AGPLv3. Stworzony przez Aarona Swartza, Brewstera Kahle’a, Alexisa Rossiego, Ananda Chitipothu, oraz Rebeccę Hargrave Malamud, jest projektem Internet Archive, organizacji non-profit. Został częściowo sfinansowany z dotacji Biblioteki Stanowej Kalifornii i Fundacji Kahle/Austin. Open Library udostępnia cyfrowe kopie online w wielu formatach, utworzone z obrazów wielu książek należących do domeny publicznej, o wyczerpanym nakładzie, oraz te w druku.", @@ -7508,14 +7715,14 @@ ], "btdigg":"O BTDigg é o primeiro mecanismo de pesquisa BitTorrent DHT. Ele participou da rede BitTorrent DHT, suportando a rede e fazendo correspondência entre links magnéticos e alguns atributos de torrent que são indexados e inseridos em um banco de dados. Para usuários finais, o BTDigg fornece uma pesquisa de banco de dados em texto completo via interface da web. A web part de seu sistema de pesquisa recuperou informações adequadas por meio de uma consulta de texto do usuário. A pesquisa na Web suportava consultas nos idiomas europeu e asiático. O nome do projeto era um acrônimo de BitTorrent Digger. Ficou offline em junho de 2016, devido a um índice de spam. O site retornou no final de 2016 em um domínio pontocom, ficou offline novamente e agora está online. O site btdig.com tem a fonte de origem do rastreador de torrents listada no Github, dhtcrawler2.", "crossref":"A Crossref é uma organização sem fins lucrativos de infraestrutura digital aberta voltada à comunidade global de pesquisa acadêmica. É a maior agência de registro de Identificadores Digitais de Objetos da Fundação Internacional DOI. Tem mais de 19.000 membros de mais de 150 países que representam editoras, bibliotecas, instituições de pesquisa e agências de fomento, tendo sido lançado no início de 2000 como um esforço cooperativo entre editoras para permitir links de citação persistentes entre plataformas distintas. Até julho de 2023, a Crossref havia identificado e conectado 150 milhões de registros de metadados para objetos de pesquisa, disponibilizando-os abertamente para reuso sem restrições. Eles intermediam uma média de 1,1 bilhão de resoluções de DOIs todo mês e recebem por volta de 1 bilhão de consultas de metadados todo mês.", - "currency":"DuckDuckGo é um motor de pesquisa sediado em Paoli, Pensilvânia que tem a particularidade de utilizar informações de contribuições colaborativas para melhorar a relevância dos resultados. O motor de pesquisa se define como tendo foco na privacidade ao não registrar as informações dos usuários.", + "currency":"DuckDuckGo é um motor de pesquisa sediado em Paoli, Pensilvânia, do qual tem a particularidade de utilizar informações de contribuições colaborativas para melhorar a relevância dos resultados. Além disso, este motor se define como focado na privacidade dos usuários ao não registrar as suas informações.", "dailymotion":"Dailymotion é uma plataforma de compartilhamento de vídeos fundada em março de 2005 na França. Ela disponibiliza vídeos dos mais variados conteúdos aos seus usuários. É um dos mais acessados do mundo. De acordo com dados fornecidos em novembro de 2006, o serviço recebia cerca de dezesseis milhões de acessos e nove mil vídeos diariamente.", "ddg definitions":[ "currency:pt", "ref" ], "deezer":"Deezer é um serviço de streaming de áudio lançado em 2007. Disponível para usuários de mais de 180 países, a plataforma possui atualmente mais de 90 milhões de músicas, mais de 100 milhões de playlists e mais de 4 milhões de programas de áudio, como podcasts, em seu acervo. É uma empresa de capital fechado, com sede em Paris, e escritórios em Londres, Berlim, Miami, São Paulo e em outros lugares do mundo. Criada em Paris, França, a Deezer possui 16 milhões de usuários ativos mensais, permitindo que os usuários ouçam conteúdo de música de gravadoras incluindo EMI, Sony, Universal Music Group e Warner Music Group.", - "deviantart":"DeviantArt, Inc é uma empresa virtual estadunidense, formando um site que voltado para artistas. Ela permite que iniciantes ou profissionais compartilhem, promovam e interajam por meio de obras de arte digitalizadas, incorporando tanto a fotografia, videografia, literatura, fotomanipulação, arte tradicional, arte clássica e arte contemporânea.", + "deviantart":"DeviantArt, Inc é uma empresa virtual, criada nos Estados Unidos, na forma de um website direcionado para artistas. Ele permite que iniciantes ou profissionais compartilhem, promovam e interajam por meio de obras de arte digitalizadas, incorporando tanto a fotografia, videografia, literatura, foto-manipulação, arte tradicional, arte clássica e arte contemporânea.", "duckduckgo":[ "currency:pt", "ref" @@ -7574,6 +7781,10 @@ "imdb":"IMDb, por extenso Internet Movie Database, é uma base de dados online de informação sobre cinema, TV, música e games, hoje pertencente à Amazon.", "imgur":"Imgur é um servidor de hospedagem de imagem fundado em 2009 por Alan Schaaf. O lema da empresa é \"O lar da hospedagem de imagens mais popular da internet, com auxilio em tempo real por uma comunidade dedicada que comenta, vota e compartilha”.", "ina":"Institut national de l'audiovisuel (Ina) é uma instituição pública francesa, de caráter industrial e comercial, encarregada principalmente do arquivamento de produções audiovisuais. Também é responsável pela produção, edição, cessão de conteúdos audiovisuais e multimídia destinados a todos os públicos, profissionais ou particulares. O Ina é também um centro de formação e pesquisa que visa desenvolver e transmitir conhecimento nas áreas ligadas à produção audiovisual. É associado à Federação Internacional da Indústria Fonográfica - IFPI.", + "ipernity":[ + "A maior comunidade não-comercial de partilha de fotos, vídeos e blogues do mundo - apenas financiada pelas cotas dos membros, sem fins de lucro.", + "https://www.ipernity.com" + ], "iqiyi":"iQIYI, anteriormente Qiyi, é uma plataforma de streaming com sede em Pequim, China, lançada em 22 de abril de 2010.", "kickass":"O KickassTorrents é um site fundado em 2008 que fornece arquivos de torrent e links magnéticos para facilitar a partilha de ficheiros peer-to-peer usando o protocolo BitTorrent. Em novembro de 2014, o KAT tornou-se o site torrent mais visitado no mundo, ultrapassando o The Pirate Bay, segundo o ranking Alexa.", "lemmy comments":[ @@ -7607,6 +7818,18 @@ "https://learn.microsoft.com" ], "naver":"Naver é um popular portal de busca da Coreia do Sul, com um market share superior a 70%, comparado com 2% do Google. O Naver foi lançado em junho de 1999 por ex-funcionários da Samsung, e estreou como o primeiro portal da Coreia do Sul a usar seu próprio motor de busca. Entre os recursos do Naver está a \"Comprehensive Search\", lançada em 2000, que fornece resultados de várias categorias em uma única página. Desde então, tem agregado novos serviços, como a \"Knowledge Search\", lançada em 2002. Ele também oferece serviços de Internet, incluindo um serviço de notícias, um serviço de e-mail, um serviço de busca de teses acadêmicas e um portal para crianças. Em 2005, Naver lançou Happybean, o primeiro portal de doações online do mundo, que permite aos usuários encontrar informações e fazer doações para mais de 20.000 organizações da sociedade civil e de assistência social.", + "naver images":[ + "naver:pt", + "ref" + ], + "naver news":[ + "naver:pt", + "ref" + ], + "naver videos":[ + "naver:pt", + "ref" + ], "niconico":"Niconico é um serviço de armazenamento de vídeo japonês online. \"Niconico\" ou \"nikoniko\" é uma palavra japonesa para sorriso. Até setembro de 2015, Niconico era o 10.º sítio eletrônico mais visitado do Japão, de acordo com os rankings de tráfego do Alexa. O sítio venceu o Prêmio Good Design Japonês em 2007 e recebeu uma Menção Honrosa na categoria Comunidades Digitais na Prix Ars Electronica 2008.", "nixos wiki":[ "nixos wiki:en", @@ -7999,6 +8222,18 @@ "naver:pt", "ref" ], + "naver images":[ + "naver:pt", + "ref" + ], + "naver news":[ + "naver:pt", + "ref" + ], + "naver videos":[ + "naver:pt", + "ref" + ], "niconico":[ "niconico:pt", "ref" @@ -8512,6 +8747,18 @@ "ref" ], "naver":"Naver — крупнейший интернет-портал и самая популярная поисковая система в Южной Корее. На него приходится 70 % поисковых запросов в стране. Принадлежит компании Naver Corporation. Был открыт в 1999 году. Тогда Naver первым из корейских интернет-порталов разработал свою собственную поисковую систему.", + "naver images":[ + "naver:ru", + "ref" + ], + "naver news":[ + "naver:ru", + "ref" + ], + "naver videos":[ + "naver:ru", + "ref" + ], "niconico":"Nico Nico Douga (яп. ニコニコ動画 Нико Нико До:га) или niconico — японский видеохостинг. Основан в 2006 году. Одна из особенностей дизайна – всплывающие комментарии с таймкодом. Также зрители могут маркировать видеофайл тегами, классифицируя его содержимое. Регистрация не является обязательной для просмотра и поиска видео.", "nixos wiki":[ "NixOS Wiki — NixOS Wiki", @@ -8545,7 +8792,7 @@ ], "reddit":"Reddit — сайт, сочетающий черты социальной сети и форума, на котором зарегистрированные пользователи могут размещать ссылки на какую-либо понравившуюся информацию в интернете и обсуждать её. Как и многие другие подобные сайты, Reddit поддерживает систему голосования за понравившиеся сообщения — наиболее популярные из них оказываются на заглавной странице сайта. Один из наиболее популярных сайтов в мире — 20-е место по посещаемости по данным SimilarWeb.", "reuters":"«Рейтер» — одно из крупнейших в мире международных агентств новостей и финансовой информации, существует с 1851 года.", - "rottentomatoes":"Rotten Tomatoes — сайт-агрегатор рецензий, на котором собирают обзоры фильмов и сериалов из различных изданий, информацию о фильмах и новости кинематографа. На основе отзывов, оставленных критиками в СМИ, Rotten Tomatoes вычисляет рейтинг одобрения каждого фильма.", + "rottentomatoes":"Rotten Tomatoes — сайт-агрегатор рецензий, на котором собирают обзоры фильмов и сериалов из различных изданий, информацию о фильмах и новости кинематографа. На основе отзывов, оставленных критиками в СМИ, Rotten Tomatoes вычисляет рейтинг одобрения каждого фильма. Данные Rotten Tomatoes и его главного конкурента Metacritic часто используют как способ измерить качество фильма или его успех у профессиональных критиков.", "rubygems":"RubyGems (от англ. gem, gems— драгоценный камень) — система управления пакетами для языка программирования Руби, которая предоставляет стандартный формат для программ и библиотек Руби, инструменты, предназначенные для простого управления установкой «gems», и сервер для их распространения.", "rumble":"Rumble — канадский видеохостинг и облачная система хранения, имеющий штаб-квартиры в канадском Торонто и Лонгбот-Ки. Основан в октябре 2013 года канадским предпринимателем Крисом Павловски.", "semantic scholar":"Semantic Scholar (англ. Semantic Scholar — поисковая интернет-платформа, разработанная в Институте искусственного интеллекта Аллена. Проект был запущен в 2015 году. Поиск научных публикаций производится с поддержкой искусственного интеллекта для статей в научных журналах. Поисковый сервис комбинирует машинное обучение, обработку естественного языка и машинного зрения, чтобы добавить слой семантического анализа к традиционным методам анализа цитирования. Semantic Scholar выделяет наиболее важные статьи, а также связи между ними.", @@ -8853,7 +9100,7 @@ "wikivoyage":"Wikicesty je webový cestovateľský sprievodca pre turistické destinácie a cestovateľské témy písaný dobrovoľníkmi. Ide o sesterský projekt Wikipédie a spravuje ho Nadácia Wikimedia.", "wiktionary":"Wikislovník je mnohojazyčný a otvorený webový projekt určený na vytvorenie slobodného úplného slovníka vo všetkých prirodzených jazykoch a niekoľkých umelých. Jeho heslá môžu obsahovať definície, výslovnosť, skloňovanie, príklady použitia, podobné výrazy, obrázky na ilustráciu a ďalšie možnosti. Stránka je spoločne upravovaná cez wiki a jej názov vznikol spojením slov wiki a slovník. Rovnako ako jeho sesterské projekty, akou napríklad Wikipédia, je prevádzkovaný Wikimedia Foundation a písaný dobrovoľníkmi, ktorí sa volajú Wikislovníkári. Je dostupný v 171 jazykoch a jednej jazykovej verzii pre jednoduchú angličtinu. Jeho slovenská mutácia dosiahla dňa 18. januára 2019 25 000 hesiel. Vďaka softvéru MediaWiki môže skoro každý s prístupom na internet vytvárať a upravovať heslá.", "wolframalpha":"Wolfram Alpha je internetová služba slúžiaca k vyhľadávaniu a znázorneniu informácií prevažne súvisiacich s matematikou a súvisiacimi vedeckými oblasťami. Služba bola vyvinutá spoločnosťou Wolfram Research a je založená na softvéri Mathematica. Služba bola spustená v máji 2009 Stephenom Wolframom. V roku 2009 bola vyhlásená americkým magazínom Popular Science ako najväčšia počítačová inovácia roku.", - "youtube":"YouTube je internetová databáza videí, väčšinou krátkych. YouTube založil Chad Hurley v roku 2005 a v novembri 2006 ho kúpil Google. V súčasnosti ide o najväčší svetový systém na zdieľanie video súborov na internete." + "youtube":"YouTube je internetová databáza videí, väčšinou krátkych. YouTube založil Chad Hurley v roku 2005 a v novembri 2006 ho odkúpila spoločnosť Google. V súčasnosti ide o najväčší svetový systém na zdieľanie video súborov na internete." }, "sl":{ "acfun":[ @@ -8974,6 +9221,10 @@ "github":"GitHub je spletni gostiteljski servis za repozitorije v Git. Ponuja distribuirano upravljanje z izvorno kodo (SCM) z Git ter nekatere dodatne storitve. V nasprotju z Git-om, ki je ukazno orodje, ponuja GitHub spletni grafični vmesnik. Zagotavlja tudi kontrolo dostopa in številne storitve za kolaborativni razvoj, npr. sledenje napakam, zahteve za lastnosti, upravljanje z nalogami in wiki za vsak projekt.", "goodreads":"Goodreads je spletna stran, ki omogoča uporabnikom iskanje knjig za branje in izdelavo lastnih seznamov, baz, kritik ter citatov. Prijavljenim uporabnikom je omogočeno ustvarjanje interesnih skupin, blogov, anket, diskusijskih baz in podobno, v bazo pa lahko vpisujejo tudi nove knjige. Sedež podjetja je v San Franciscu, njegov trenutni lastnik pa je Amazon.", "google":"Iskanje Google ali pa preprosto Google je spletni iskalnik, ki ga je razvilo podjetje Google. Je najbolj uporabljen iskalnik na svetovnem spletu, ki poskrbi za več kot tri milijarde iskanj vsak dan. Od Februarja 2016 je najbolj uporabljen iskalnik v ZDA s 64.0% tržnim deležem.", + "google images":[ + "Google Slike. Najobsežnejše iskanje slik v spletu.", + "https://images.google.com" + ], "google news":[ "agregator novic in aplikacija, ki jo je razvilo podjetje Google", "wikidata" @@ -9018,6 +9269,18 @@ "južnokorejski iskalnik in spletni portal", "wikidata" ], + "naver images":[ + "naver:sl", + "ref" + ], + "naver news":[ + "naver:sl", + "ref" + ], + "naver videos":[ + "naver:sl", + "ref" + ], "niconico":[ "japonski ponudnik gostovanja videoposnetkov in živih prenosov", "wikidata" @@ -9163,6 +9426,10 @@ "gitlab":"GitLab је веб-алатка животног циклуса DevOps с отвореним изворним кодом. Алатка пружа менаџер спремишта за Git који нуди функције викија, функцију праћења проблема и канал за непрекидну интеграцију. Софтвер је развила компанија GitLab Inc., а првобитно су га направили Украјинци Дмитриј Запорожец и Валериј Сизов.", "goodreads":"Гудридс је компанија у власништву Амазона, чији веб-сајт омогућава корисницима да обележавају, оцењују и пишу рецензије за књиге које су прочитали, да би на основу тога од стране веб-сајта могли да добију предлоге за књиге које би такође могле да их интересују. Сајт је покренут 2007. године и данас има преко 900.000.000 наслова, и око 30.000.000 чланова. Такође веб-сајт функционише и као друштвена мрежа, и могуће је додавати пријатеље, као и видети књиге које они читају. Повремено се и организују такмичања, као и награде за најбољу књигу године. Један интернет портал из Хрватске је веб-сајт Goodreads описао као „друштвену мрежу за љубитеље књига”.", "google":"Гугл претрага, позната и као Гугл веб-претрага или једноставно Гугл, веб-претраживач је ког је развио Гугл ЛЛЦ. Он је најкоришћенији претраживач веба на светској комуникационој мрежи на свим платформама, са тржишним уделом од 92,74 % у октобру 2018, вршећи више од 3,5 милијарди претрага сваки дан.", + "google images":[ + "Google слике. Најопсежнија претрага слика на вебу.", + "https://images.google.com" + ], "google news":[ "Свеобухватно, ажурно извештавање о вестима које Google вести прикупља из извора широм света.", "https://news.google.com" @@ -9492,8 +9759,8 @@ "Google Images. வலையில் கிடைக்கக்கூடிய மிக விரிவான படத் தேடல்.", "https://images.google.com" ], - "google news":"கூகிள் செய்திகள், கூகிள் நிறுவனத்தால் வழங்கப்படும் இலவச செய்தி திரட்டி ஆகும். ஒரு தானியங்கி திரட்டல் வழிமுறை மூலம் ஆயிரக்கணக்கான பிரசுரங்களின் சமீபத்திய செய்திகளை இது தேர்ந்தெடுக்கிறது.", - "google play apps":"கூகுள்பிளே என்பது இலக்கமுறை தகவல்களை வழங்கும் ஒரு சேவையாகும். இது கூகிள் நிறுவனத்தால் வழங்கப்படுகிறது. இது ஆன்டிராய்டு பயன்பாடுகள், இசைக்கோப்புகள், புத்தகங்கள், திரைப்படங்கள், விளையாட்டுகள் போன்றவற்றை கொண்ட ஓர் இணையக் கடை ஆகும். மார்ச் 2012ல் கூகுள்தனது ஆன்டிராய்டு அங்காடியையும், இசைச் சேவையையும் இணைத்து கூகுள்பிளேவை ஆரம்பித்தது. 2017 ஆம் ஆண்டு புள்ளிவிவரப்படி, 35 இலட்சம் பதிவிறக்கங்கள், இத்தளத்தில் நடந்துள்ளன.", + "google news":"கூகிள் செய்திகள், கூகிள் நிறுவனத்தால் வழங்கப்படும் இலவச செய்தி திரட்டி ஆகும். ஒரு தானியங்கி திரட்டல் வழிமுறை மூலம் ஆயிரக்கணக்கான பிரசுரங்களின் அண்மைய செய்திகளை இது தேர்ந்தெடுக்கிறது.", + "google play apps":"கூகுள்பிளே என்பது இலக்கமுறை தகவல்களை வழங்கும் ஒரு சேவையாகும். இது கூகிள் நிறுவனத்தால் வழங்கப்படுகிறது. இது ஆன்டிராய்டு பயன்பாடுகள், இசைக்கோப்புகள், புத்தகங்கள், திரைப்படங்கள், விளையாட்டுகள் போன்றவற்றை கொண்ட ஓர் இணையக் கடை ஆகும். மார்ச் 2012ல் கூகுள் தனது ஆன்டிராய்டு அங்காடியையும், இசைச் சேவையையும் இணைத்து கூகுள்பிளேவை ஆரம்பித்தது. 2017 ஆம் ஆண்டு புள்ளிவிவரப்படி, இத்தளத்தில் 35 இலட்சம் பதிவிறக்கங்கள் நடந்துள்ளன.", "google play movies":[ "google play apps:ta", "ref" @@ -9531,7 +9798,7 @@ ], "wikidata":"விக்கித்தரவு (Wikidata) என்பது விக்கிமீடியா நிறுவனத்தால் இயக்கப்படும் பன்மொழி விக்கி அறிவுத் தளம் ஆகும். விக்கிப்பீடியா போன்ற விக்கிமீடியத் திட்டங்களில் பயன்படுத்துவதற்கான தரவுகளை வழங்கும் பொதுமூலமாக இது தொழிற்படுகின்றது. விக்கிபேசு என்ற மென்பொருளில் இது கட்டமைக்கப்பட்டுள்ளது.", "wikinews":"விக்கிசெய்தி, விக்கிமீடியா நிறுவனத்திரால் நடத்தப்படும் கட்டற்ற செய்திக் களமாகும். இது உலகளாவிய தன்னார்வலர்கள் தாமாகவே செய்திகளை உடனுக்குடன் மேலேற்றம் செய்யும் முறையாகும்.", - "wikipedia":"விக்கிப்பீடியா என்பது, வணிக நோக்கற்ற விக்கிமீடியா நிறுவனத்தின் உதவியுடன் நடத்தப்படும், கூட்டாகத் தொகுக்கப்படும், பன்மொழி, கட்டற்ற இணையக் கலைக்களஞ்சியமாகும். தமிழ் விக்கிப்பீடியாவின் 1,73,614 கட்டுரைகளுடன் சேர்த்து இதன் மொத்தக் கட்டுரைகளான 24 மில்லியன் கட்டுரைகளும் உலகெங்கிலுமுள்ள தன்னார்வலர்களால் கூட்டாக எழுதப்படுகின்றன. பெரும்பாலும் இதன் எல்லாக் கட்டுரைகளும், இதனைப் பயன்படுத்தும் எவராலும், தொகுக்கப்படக் கூடுவன. மேலும் இது கிட்டத்தட்ட 100,000 முனைப்பான பங்களிப்பாளர்களையும் கொண்டுள்ளது. ஏப்ரல் 2025 வரையில், விக்கிப்பீடியா 285 மொழிகளில் செயற்படுகிறது. இது இணையத்தளத்தில் இயங்கும் உசாத்துணைப் பகுதிகளிலேயே மிகவும் பெரியதும், அதிகப் புகழ்பெற்றதுமாகும். மேலும், இது அலெக்சா இணையத்தளத்தில் காணப்படும் இணையத்தளங்களின் தரவரிசையில் ஆறாவது இடத்தில் உள்ளதோடு, உலகளவில் அண்ணளவாக 365 மில்லியன் வாசகர்களையும் கொண்டுள்ளது.", + "wikipedia":"விக்கிப்பீடியா என்பது, வணிக நோக்கற்ற விக்கிமீடியா நிறுவனத்தின் உதவியுடன் நடத்தப்படும், கூட்டாகத் தொகுக்கப்படும், பன்மொழி, கட்டற்ற இணையக் கலைக்களஞ்சியமாகும். தமிழ் விக்கிப்பீடியாவின் 1,74,023 கட்டுரைகளுடன் சேர்த்து இதன் மொத்தக் கட்டுரைகளான 24 மில்லியன் கட்டுரைகளும் உலகெங்கிலுமுள்ள தன்னார்வலர்களால் கூட்டாக எழுதப்படுகின்றன. பெரும்பாலும் இதன் எல்லாக் கட்டுரைகளும், இதனைப் பயன்படுத்தும் எவராலும், தொகுக்கப்படக் கூடுவன. மேலும் இது கிட்டத்தட்ட 100,000 முனைப்பான பங்களிப்பாளர்களையும் கொண்டுள்ளது. மே 2025 வரையில், விக்கிப்பீடியா 285 மொழிகளில் செயற்படுகிறது. இது இணையத்தளத்தில் இயங்கும் உசாத்துணைப் பகுதிகளிலேயே மிகவும் பெரியதும், அதிகப் புகழ்பெற்றதுமாகும். மேலும், இது அலெக்சா இணையத்தளத்தில் காணப்படும் இணையத்தளங்களின் தரவரிசையில் ஆறாவது இடத்தில் உள்ளதோடு, உலகளவில் அண்ணளவாக 365 மில்லியன் வாசகர்களையும் கொண்டுள்ளது.", "wikiquote":"விக்கி மேற்கோள் (Wikiquote), விக்கிப்பீடியாவை நடத்தும் விக்கிமீடியா நிறுவனத்தின் இன்னொரு திட்டமாகும். இத்திட்டமும் விக்கி மென்பொருளை பயன்படுத்துகிறது. அனைத்து மொழிகளில் உள்ள மேற்கோள்களின் கட்டற்ற இணையத் தொகுப்பை உருவாக்குவது இத்திட்டத்தின் நோக்கமாகும். மேலும் இது புகழ்பெற்ற மக்கள், திரைப்படங்கள், புத்தகங்கள் மற்றும் பழமொழி ஆகியவற்றின் மேற்கோள்களை உள்ளடக்கிய ஒரு மேற்கோள் களஞ்சியமாகும்.", "wikisource":"விக்கிமூலம் (Wikisource) ஓர் இலவச இணைய நூலகம் ஆகும். விக்கிமீடியா அறக்கட்டளை நடத்தும் விக்கித் திட்டங்களுள் இதுவும் ஒன்று. இது கட்டற்ற உள்ளடக்கம் (பகிர்வுரிமம்) கொண்ட மூல நூல்களின் இணையத் தொகுப்பாகும்.", "wikispecies":"விக்கியினங்கள் விக்கி‎யை அடிப்படையாகக் கொண்ட விக்கிமீடியா நிறுவனத்தின் ஒரு இணையத் திட்டமாகும். இத்திட்டம் உலகிலுள்ள உயிரினங்களின் பெயர் அட்டவணையை தயாரிப்பதற்காக ஆகத்து 2004ம் வருடம் உருவாக்கப்பட்ட திட்டம் ஆகும்.", @@ -9754,7 +10021,7 @@ ], "openstreetmap":"โอเพินสตรีตแมป เป็นโครงการความร่วมมือเพื่อสร้างแผนที่เสรีที่แก้ไขได้ของโลก", "pinterest":"พินเทอเรสต์ เป็นบริการการแบ่งปันรูปภาพและบริการโซเชียลมีเดียที่ออกแบบมาเพื่อเปิดใช้งานการบันทึกและค้นหาข้อมูล บนเวิลด์ไวด์เว็บโดยใช้รูปภาพ และในขนาดเล็กกว่า กิฟและวิดีโอ ในรูปแบบของพินบอร์ด เว็บไซต์นี้สร้างโดยเบน ซิลเบอร์แมน, พอล สเกียร์รา และอีวาน ชาร์ป และมีผู้ใช้งานรายเดือน 300 ล้านคนในเดือนสิงหาคม ค.ศ. 2019 บริการนี้ดำเนินการโดยพินเทอเรสต์ อิงค์ ซึ่งตั้งอยู่ในซานฟรานซิสโก", - "piratebay":"เดอะไพเรตเบย์ เป็นเว็บไซต์สัญชาติสวีเดนที่ให้บริการบิตทอร์เรนต์ ซึ่งเปิดให้บริการมาตั้งแต่เดือนพฤศจิกายน พ.ศ. 2546 และกล่าวอ้างว่าเป็น \"เว็บไซต์บิตทอร์เรนต์แทร็กเกอร์ที่ใหญ่ที่สุดในโลก\" ได้รับการจัดอันดับจากอเล็กซา ให้เป็นเว็บไซต์ที่มีผู้เข้าชมมากเป็นอันดับที่ 106 เมื่อวันที่ 15 พฤศจิกายน พ.ศ. 2551 ทางเว็บไซต์ได้ประกาศว่ามีจำนวนผู้ใช้พร้อมกันถึง 25 ล้านเพียร์ และมีจำนวนผู้ใช้ที่ลงทะเบียนเข้าใช้งานทั้งสิ้น 3,500,000 ล้านชื่อ โดยในปัจจุบันเดอะไพเรตเบย์ได้ปิดระบบสมัครสมาชิกและอัปโหลดแบบไร้บัญชีไปแล้วเนึ่องจากมีไฟล์ทอร์เรนต์ที่ฝังไวรัสคอมพิวเตอร์มากเกินไป และในปี พ.ศ. 2565 เดอะไพเรตเบย์มีไฟล์ทอร์เรนต์รวมกันทั้งหมดถึง 6.7 เพตะไบต์ และไฟล์ทอร์เรนต์ที่มีการ Seed อยู่ถึง 2.5 เพตะไบต์", + "piratebay":"เดอะไพเรตเบย์ เป็นดัชนีออนไลน์ที่สามารถค้นหาภาพยนตร์, ดนตรี, วิดีโอเกม, สื่อลามก และซอฟต์แวร์ได้ฟรี ก่อตั้งใน ค.ศ. 2003 โดย think tank ชาวสวีเดน Piratbyrån เดอะไพเรตเบย์อำนวยความสะดวกในการเชื่อมต่อโพรโทคอลทอร์เรนต์เพียร์ทูเพียร์ระหว่างผู้ใช้ที่สามารถมีส่วนสนับสนุนเว็บไซต์ได้ โดยการเพิ่มลิงก์แม่เหล็ก เดอะไพเรตเบย์ได้รับการจัดอันดับให้เป็นหนึ่งในเว็บไซต์ทอร์เรนต์ที่มีผู้เยี่ยมชมมากที่สุดในโลกอย่างต่อเนื่อง", "reddit":"เรดดิต เป็นเว็บรวบรวมข่าวสาร จัดลำดับข้อมูลออนไลน์ และเว็บสนทนาสัญชาติอเมริกัน ผู้ใช้ที่ลงทะเบียนแล้วสามารถโพสต์เนื้อหา เช่น ลิงก์ ข้อความ และรูปภาพ ให้ผู้ใช้อื่น ๆ สามารถโหวตขึ้นหรือลงได้ โพสต์ถูกแบ่งตามหมวดหมู่จัดโดยผู้ใช้ เรียกว่า \"ซับเรดดิต” ซึ่งมีหมวดหมู่หลากหลาย เช่น ข่าวสาร กีฬา หนัง เกม ดนตรี หนังสือ การออกกำลังกาย อาหาร ภาพถ่าย เป็นต้น โพสต์ที่ได้รับโหวตขึ้นมาก ๆ จะมีโอกาสอยู่บนหน้าแรก ๆ ของซับเรดดิตนั้น ๆ และหากได้รับความนิยมมาก ๆ จะสามารถขึ้นไปยังหน้าแรกของเรดดิตในที่สุด แม้จะมีกฎป้องกันการดูหมิ่นออนไลน์อยู่มาก ผู้ดูแลของเรดดิตใช้เวลามากในการดูแลเรดดิต", "reuters":"สำนักข่าวรอยเตอร์ส คือผู้ให้บริการข้อมูลทางการเงินและรายงานข่าวต่าง ๆ ให้แก่สำนักข่าวต่าง ๆ ของโลก สำนักงานใหญ่ตั้งอยู่ที่กรุงลอนดอน ประเทศอังกฤษ โดยรอยเตอร์สได้รับรายได้ส่วนมาก จากการให้บริการข้อมูลทางการเงินต่าง ๆ เช่น ราคาหุ้นในตลาดต่างๆ อัตราแลกเปลี่ยน ราคาน้ำมัน รายงานการวิเคราะห์หลักทรัพย์ เป็นต้น และการให้บริการซื้อขายผ่านอินเทอร์เน็ตต่าง ๆ โดยปัจจุบันนี้รอยเตอร์สมีส่วนแบ่งการตลาดในด้านการบริการข้อมูลทางการเงินมากเป็นอันดับสอง ประมาณร้อยละ 23 รองจาก บลูมเบิร์ก (Bloomberg) ที่ควบคุมส่วนแบ่งการตลาดมากถึงร้อยละ 33", "rottentomatoes":"รอตเทนโทเมโทส์ เป็นเว็บไซต์ที่เปิดตัวในปี 2541 อุทิศให้กับการรบทปริทัศน์ภาพยนตร์และข่าว รู้จักกันอย่างกว้างขวางว่าเป็นผู้รวบรวมบทปริทัศน์ภาพยนตร์ ปัจจุบันครอบคลุมเนื้อหาโทรทัศน์ด้วย ชื่อของรอตเทนโทเมโทส์ นั้น เกิดจากการปฏิบัติที่ผู้ชมจะโยนมะเขือเทศเน่าเมื่อไม่เห็นชอบกับการแสดงเวทีที่เลว บริษัทก่อตั้งขึ้นโดย Senh Duong และตั้งแต่เดือนมกราคม 2553 ได้รับการเป็นเจ้าของโดยฟิลค์สเตอร์ แต่ต่อมาฟิลค์สเตอร์ถูกซื้อต่อกิจการในปี 2554 โดยวอร์เนอร์บราเธอร์ส", @@ -9933,6 +10200,18 @@ "ref" ], "naver":"Naver, Güney Kore merkezli bir arama motoru ve internet portalıdır. Site, Haziran 1999 tarihinde eski Samsung çalışanları tarafından kurulmuş olup Güney Kore'nin kendi arama motoruna sahip ilk internet portalıdır. Günümüzde Naver Corporation bünyesinde faaliyet göstermektedir.", + "naver images":[ + "naver:tr", + "ref" + ], + "naver news":[ + "naver:tr", + "ref" + ], + "naver videos":[ + "naver:tr", + "ref" + ], "niconico":"Niconico, Inc., eskiden Nico Nico Douga , Japonya merkezli bir video barındırma sitesidir. Site, 12 Aralık 2006 tarihinde kurulmuştur. Eylül 2015 tarihi itibarı ile Japonya'da en çok ziyaret edilen sekizinci web sitedir. 2007 yılında site İyi Tasarım Ödülü ve 2008'de Prix Ars Electronica Dijital Topluluklar kategorisinde Onursal Anma kazanmıştır.", "nixos wiki":[ "nixos wiki:en", @@ -10240,6 +10519,18 @@ ], "mixcloud":"Mixcloud онлайн сервіс зі стримінгу музики, який забезпечує прослуховування і розповсюдження радіо-шоу, DJ-міксів і подкастів, які надаються його ж зареєстрованими користувачами.", "naver":"Навіер або Найвер, ориг. Naver від англ. navigate – направляти — найбільший інтернет-портал і найпопулярніша пошукова система в Південній Кореї, що належить корпорації Naver Corporation. Був запущений у червні 1999 року групою колишніх співробітників Samsung. Дебютував в якості першого порталу який використовував свої власні алгоритми пошуку. Займав у 2011 році – 70%, 77% в 2015 р. а в 2017 вже 74,7% пошукового ринку країни.", + "naver images":[ + "naver:uk", + "ref" + ], + "naver news":[ + "naver:uk", + "ref" + ], + "naver videos":[ + "naver:uk", + "ref" + ], "niconico":"Nico Nico Douga або Niconico — японський відеохостинг. Перегляд відеофайлів на сайті потребує реєстрації; перегляд заголовків, описів та пошук — ні. Глядачі можуть залишати коментарі до будь-якого моменту відео і маркувати відеофайл тегами, класифікуючи його вміст. Сайт надає користувачам різні додаткові сервіси [Архівовано 8 серпня 2020 у Wayback Machine.]. Автоматично складаються рейтинги популярності [Архівовано 22 червня 2013 у Wayback Machine.] відео різних жанрів.", "nixos wiki":[ "nixos wiki:ru", @@ -10454,6 +10745,18 @@ "https://learn.microsoft.com" ], "naver":"Naver là một nền tảng trực tuyến của Hàn Quốc được điều hành bởi Naver Corporation. Được ra mắt lần đầu năm 1999, Naver vốn là cổng thông tin điện tử đầu tiên tại Hàn Quốc, sau đó được phát triển thành một công cụ tìm kiếm riêng. Đây cũng là nhà điều hành đầu tiên trên thế giới ra mắt tính năng tìm kiếm toàn diện, tính toán các kết quả tìm kiếm từ nhiều danh mục tìm kiếm khác nhau và trình bày chúng trong một trang duy nhất. Từ đó, Naver cũng đã xây dựng thêm vô số các dịch vụ từ cơ bản như e-mail, tin tức đến nền tảng trực tuyến Q&A đầu tiên trên thế giới Knowledge iN.", + "naver images":[ + "naver:vi", + "ref" + ], + "naver news":[ + "naver:vi", + "ref" + ], + "naver videos":[ + "naver:vi", + "ref" + ], "niconico":"Niconico , trước đây là Nico Nico Douga hay gọi tắt là \"Nico-dō\", là một website chia sẻ video của Nhật Bản được điều hành bởi Dwango, bắt đầu hoạt động từ ngày 12 tháng 12 năm 2006.", "npm":"npm là chương trình quản lý thư viện ngầm định trong môi trường Node.js. Nó bao gồm một trình gọi dòng lệnh (CLI) từ máy khách Client với tên gọi là npm, và cơ sở dữ liệu trực tuyến chứa các gói public và private còn được gọi là npm registry. npm registry được gọi từ npm client và trên web browser. Tất cả được quản lý trực tiếp từ npm, Inc.", "openstreetmap":"OpenStreetMap là một dịch vụ bản đồ thế giới trực tuyến có nội dung mở. OpenStreetMap nhằm mục đích cung cấp dữ liệu địa lý do nhiều người cùng cộng tác với nhau trên hệ thống wiki. Nó thường được gọi \"Wikipedia của bản đồ\". Dự án OpenStreetMap được sáng lập năm 2004, chủ yếu để cạnh tranh với các công ty và cơ quan chính phủ cung cấp dữ liệu địa lý theo các điều khoản sử dụng được coi là quá chặt chẽ.", @@ -10575,6 +10878,18 @@ "mdn":"MDN Web Docs 是一個汇集众多Mozilla基金會產品和網路技術開發文档的免费網站。", "metacpan":"CPAN 中譯為“Perl綜合典藏網”,“Perl综合档案网”或者“Perl程序库”。它包含了極多用Perl寫成的軟體和其文件。", "naver":"NAVER(韓語:)是韩国著名入口/搜索引擎网站,它使用獨有的搜尋引擎,並且在韓文搜尋服務中獨佔鰲頭。除了搜尋之外也提供入口網站的許多服務,例如新聞、電子信箱、電子地圖服務(含街景地圖)等。在Alexa排名上是韓國國內第一大的入口網站。 据ComScore统计,Naver在2007年8月收到二十亿次搜索,占70%以上的韩国搜索查询,它是世界上排名第十五的网民最常用的搜索引擎,超过25万韩国人选择Naver作为浏览器起始页。", + "naver images":[ + "naver:zh-HK", + "ref" + ], + "naver news":[ + "naver:zh-HK", + "ref" + ], + "naver videos":[ + "naver:zh-HK", + "ref" + ], "niconico":"Niconico動畫 是日本多玩國公司營運的在线弹幕视频分享网站。其中「Niconico」()意爲微笑,「動畫」()意爲視頻。Niconico動畫與YouTube等视频共享网站相似,但Niconico動畫提供观看者可在视频画面上留言并以弹幕的形式出現在视频上的功能。", "npm":"npm 是Node.js預設的、用JavaScript編寫的軟體套件管理系統。", "openlibrary":"开放图书馆(英文:)是互联网档案馆旗下的非营利网站暨在线图书馆项目,收录了许多公有领域图书的在线版本,旨在为每一本已出版的图书创建一个网页。本网站由亚伦·斯沃茨、布魯斯特·卡利、Alexis Rossi、Anand Chitipothu和 Rebecca Malamud在2006年创建,其部分资金来自加州州立图书馆與 Kahle/Austin 基金会。", @@ -10813,6 +11128,18 @@ "naver:zh-HK", "ref" ], + "naver images":[ + "naver:zh-HK", + "ref" + ], + "naver news":[ + "naver:zh-HK", + "ref" + ], + "naver videos":[ + "naver:zh-HK", + "ref" + ], "niconico":[ "niconico:zh-HK", "ref" @@ -11111,6 +11438,18 @@ "naver:zh-HK", "ref" ], + "naver images":[ + "naver:zh-HK", + "ref" + ], + "naver news":[ + "naver:zh-HK", + "ref" + ], + "naver videos":[ + "naver:zh-HK", + "ref" + ], "niconico":[ "niconico:zh-HK", "ref" diff --git a/searx/data/engine_traits.json b/searx/data/engine_traits.json index 6f80992ec..d687d116e 100644 --- a/searx/data/engine_traits.json +++ b/searx/data/engine_traits.json @@ -7381,7 +7381,6 @@ "ko": "korean", "ks": "kashmiri", "ku": "kurdish", - "kw": "cornish", "la": "latin", "lb": "luxembourgish", "ln": "lingala", diff --git a/searx/data/useragents.json b/searx/data/useragents.json index 6b806e372..95a245560 100644 --- a/searx/data/useragents.json +++ b/searx/data/useragents.json @@ -5,7 +5,7 @@ ], "ua": "Mozilla/5.0 ({os}; rv:{version}) Gecko/20100101 Firefox/{version}", "versions": [ - "138.0", - "137.0" + "139.0", + "138.0" ] } \ No newline at end of file diff --git a/searx/data/wikidata_units.json b/searx/data/wikidata_units.json index 545f289fa..c9bcad24c 100644 --- a/searx/data/wikidata_units.json +++ b/searx/data/wikidata_units.json @@ -4199,11 +4199,6 @@ "symbol": "St", "to_si_factor": 13450.0 }, - "Q235729": { - "si_name": "Q11574", - "symbol": "y (365 days)", - "to_si_factor": 31536000.0 - }, "Q23823681": { "si_name": "Q25236", "symbol": "TW", diff --git a/searx/enginelib/__init__.py b/searx/enginelib/__init__.py index 0435b14e1..9cb49c0cd 100644 --- a/searx/enginelib/__init__.py +++ b/searx/enginelib/__init__.py @@ -79,7 +79,7 @@ class EngineCache: `). In the :origin:`searx/engines/demo_offline.py` engine you can find an - exemplary implementation of such a cache other exaples are implemeted + exemplary implementation of such a cache other examples are implemented in: - :origin:`searx/engines/radio_browser.py` diff --git a/searx/engines/adobe_stock.py b/searx/engines/adobe_stock.py index 775e5d107..4ab4312a1 100644 --- a/searx/engines/adobe_stock.py +++ b/searx/engines/adobe_stock.py @@ -156,7 +156,7 @@ def parse_image_item(item): def parse_video_item(item): # in video items, the title is more or less a "content description", we try - # to reduce the lenght of the title .. + # to reduce the length of the title .. title = item["title"] content = "" diff --git a/searx/engines/currency_convert.py b/searx/engines/currency_convert.py index cbb1d6cc4..c4c757e3f 100644 --- a/searx/engines/currency_convert.py +++ b/searx/engines/currency_convert.py @@ -3,6 +3,7 @@ """ import json +from searx.result_types import EngineResults # about about = { @@ -28,13 +29,15 @@ def request(_query, params): return params -def response(resp): +def response(resp) -> EngineResults: + res = EngineResults() + # remove first and last lines to get only json json_resp = resp.text[resp.text.find('\n') + 1 : resp.text.rfind('\n') - 2] try: conversion_rate = float(json.loads(json_resp)["to"][0]["mid"]) except IndexError: - return [] + return res answer = '{0} {1} = {2} {3}, 1 {1} ({5}) = {4} {3} ({6})'.format( resp.search_params['amount'], resp.search_params['from'], @@ -46,5 +49,5 @@ def response(resp): ) url = f"https://duckduckgo.com/?q={resp.search_params['from']}+to+{resp.search_params['to']}" - - return [{"answer": answer, "url": url}] + res.add(res.types.Answer(answer=answer, url=url)) + return res diff --git a/searx/engines/duckduckgo.py b/searx/engines/duckduckgo.py index 62e1603a6..06299e6aa 100644 --- a/searx/engines/duckduckgo.py +++ b/searx/engines/duckduckgo.py @@ -58,19 +58,21 @@ paging = True time_range_support = True safesearch = True # user can't select but the results are filtered -url = "https://html.duckduckgo.com/html" +url = "https://html.duckduckgo.com/html/" time_range_dict = {'day': 'd', 'week': 'w', 'month': 'm', 'year': 'y'} form_data = {'v': 'l', 'api': 'd.js', 'o': 'json'} -CACHE: EngineCache +_CACHE: EngineCache = None # type: ignore """Persistent (SQLite) key/value cache that deletes its values after ``expire`` seconds.""" -def init(_): # pylint: disable=unused-argument - global CACHE # pylint: disable=global-statement - CACHE = EngineCache("duckduckgo") # type:ignore +def get_cache(): + global _CACHE # pylint: disable=global-statement + if _CACHE is None: + _CACHE = EngineCache("duckduckgo") # type:ignore + return _CACHE def get_vqd(query: str, region: str, force_request: bool = False) -> str: @@ -105,8 +107,9 @@ def get_vqd(query: str, region: str, force_request: bool = False) -> str: seems the block list is a sliding window: to get my IP rid from the bot list I had to cool down my IP for 1h (send no requests from that IP to DDG). """ - key = CACHE.secret_hash(f"{query}//{region}") - value = CACHE.get(key=key) + cache = get_cache() + key = cache.secret_hash(f"{query}//{region}") + value = cache.get(key=key) if value is not None and not force_request: logger.debug("vqd: re-use cached value: %s", value) return value @@ -124,15 +127,16 @@ def get_vqd(query: str, region: str, force_request: bool = False) -> str: logger.error("vqd: got HTTP %s from duckduckgo.com", resp.status_code) if value: - CACHE.set(key=key, value=value) + cache.set(key=key, value=value) else: logger.error("vqd value from duckduckgo.com ", resp.status_code) return value def set_vqd(query: str, region: str, value: str): - key = CACHE.secret_hash(f"{query}//{region}") - CACHE.set(key=key, value=value, expire=3600) + cache = get_cache() + key = cache.secret_hash(f"{query}//{region}") + cache.set(key=key, value=value, expire=3600) def get_ddg_lang(eng_traits: EngineTraits, sxng_locale, default='en_US'): @@ -244,7 +248,6 @@ def quote_ddg_bangs(query): def request(query, params): - query = quote_ddg_bangs(query) if len(query) >= 500: @@ -252,93 +255,79 @@ def request(query, params): params["url"] = None return - # Advanced search syntax ends in CAPTCHA - # https://duckduckgo.com/duckduckgo-help-pages/results/syntax/ - query = " ".join( - [ - x.removeprefix("site:").removeprefix("intitle:").removeprefix("inurl:").removeprefix("filetype:") - for x in query.split() - ] - ) eng_region: str = traits.get_region(params['searxng_locale'], traits.all_locale) # type: ignore - if eng_region == "wt-wt": - # https://html.duckduckgo.com/html sets an empty value for "all". - eng_region = "" - params['data']['kl'] = eng_region - params['cookies']['kl'] = eng_region + # Note: The API is reverse-engineered from DuckDuckGo's HTML webpage + # (https://html.duckduckgo.com/html/) and may be subject to additional bot detection mechanisms + # and breaking changes in the future. + # + # The params['data'] dictionary can have the following key parameters, in this order: + # - q (str): Search query string + # - b (str): Beginning parameter - empty string for first page requests + # - s (int): Search offset for pagination + # - nextParams (str): Continuation parameters from previous page response, typically empty + # - v (str): Typically 'l' for subsequent pages + # - o (str): Output format, typically 'json' + # - dc (int): Display count - value equal to offset (s) + 1 + # - api (str): API endpoint identifier, typically 'd.js' + # - vqd (str): Validation query digest + # - kl (str): Keyboard language/region code (e.g., 'en-us') + # - df (str): Time filter, maps to values like 'd' (day), 'w' (week), 'm' (month), 'y' (year) - # eng_lang = get_ddg_lang(traits, params['searxng_locale']) - - params['url'] = url - params['method'] = 'POST' params['data']['q'] = query - # The API is not documented, so we do some reverse engineering and emulate - # what https://html.duckduckgo.com/html does when you press "next Page" link - # again and again .. - - params['headers']['Content-Type'] = 'application/x-www-form-urlencoded' - - params['headers']['Sec-Fetch-Dest'] = "document" - params['headers']['Sec-Fetch-Mode'] = "navigate" # at least this one is used by ddg's bot detection - params['headers']['Sec-Fetch-Site'] = "same-origin" - params['headers']['Sec-Fetch-User'] = "?1" - - # Form of the initial search page does have empty values in the form if params['pageno'] == 1: - params['data']['b'] = "" - - params['data']['df'] = '' - if params['time_range'] in time_range_dict: - - params['data']['df'] = time_range_dict[params['time_range']] - params['cookies']['df'] = time_range_dict[params['time_range']] - - if params['pageno'] == 2: - - # second page does have an offset of 20 - offset = (params['pageno'] - 1) * 20 + elif params['pageno'] >= 2: + offset = 10 + (params['pageno'] - 2) * 15 # Page 2 = 10, Page 3+ = 10 + n*15 params['data']['s'] = offset - params['data']['dc'] = offset + 1 - - elif params['pageno'] > 2: - - # third and following pages do have an offset of 20 + n*50 - offset = 20 + (params['pageno'] - 2) * 50 - params['data']['s'] = offset - params['data']['dc'] = offset + 1 - - if params['pageno'] > 1: - - # initial page does not have these additional data in the input form - params['data']['o'] = form_data.get('o', 'json') - params['data']['api'] = form_data.get('api', 'd.js') params['data']['nextParams'] = form_data.get('nextParams', '') params['data']['v'] = form_data.get('v', 'l') - params['headers']['Referer'] = url + params['data']['o'] = form_data.get('o', 'json') + params['data']['dc'] = offset + 1 + params['data']['api'] = form_data.get('api', 'd.js') + # vqd is required to request other pages after the first one vqd = get_vqd(query, eng_region, force_request=False) - - # Certain conditions must be met in order to call up one of the - # following pages ... - if vqd: - params['data']['vqd'] = vqd # follow up pages / requests needs a vqd argument + params['data']['vqd'] = vqd else: - # Don't try to call follow up pages without a vqd value. DDG - # recognizes this as a request from a bot. This lowers the + # Don't try to call follow up pages without a vqd value. + # DDG recognizes this as a request from a bot. This lowers the # reputation of the SearXNG IP and DDG starts to activate CAPTCHAs. params["url"] = None return if params['searxng_locale'].startswith("zh"): - # Some locales (at least China) do not have a "next page" button and ddg + # Some locales (at least China) do not have a "next page" button and DDG # will return a HTTP/2 403 Forbidden for a request of such a page. params["url"] = None return + # Put empty kl in form data if language/region set to all + if eng_region == "wt-wt": + params['data']['kl'] = "" + else: + params['data']['kl'] = eng_region + + params['data']['df'] = '' + if params['time_range'] in time_range_dict: + params['data']['df'] = time_range_dict[params['time_range']] + params['cookies']['df'] = time_range_dict[params['time_range']] + + params['cookies']['kl'] = eng_region + + params['url'] = url + params['method'] = 'POST' + + params['headers']['Content-Type'] = 'application/x-www-form-urlencoded' + params['headers']['Referer'] = url + params['headers']['Sec-Fetch-Dest'] = "document" + params['headers']['Sec-Fetch-Mode'] = "navigate" # at least this one is used by ddg's bot detection + params['headers']['Sec-Fetch-Site'] = "same-origin" + params['headers']['Sec-Fetch-User'] = "?1" + + logger.debug("param headers: %s", params['headers']) logger.debug("param data: %s", params['data']) logger.debug("param cookies: %s", params['cookies']) @@ -383,8 +372,9 @@ def response(resp) -> EngineResults: continue item["title"] = extract_text(title) item["url"] = eval_xpath(div_result, './/h2/a/@href')[0] - item["content"] = extract_text(eval_xpath(div_result, './/a[contains(@class, "result__snippet")]')[0]) - + item["content"] = extract_text( + eval_xpath_getindex(div_result, './/a[contains(@class, "result__snippet")]', 0, []) + ) results.append(item) zero_click_info_xpath = '//div[@id="zero_click_abstract"]' diff --git a/searx/engines/invidious.py b/searx/engines/invidious.py index 540f89a2f..d51c371d0 100644 --- a/searx/engines/invidious.py +++ b/searx/engines/invidious.py @@ -1,6 +1,13 @@ # SPDX-License-Identifier: AGPL-3.0-or-later """Invidious (Videos) + +If you want to use invidious with SearXNG you should setup one locally. +No public instance offer a public API now + +- https://github.com/searxng/searxng/issues/2722#issuecomment-2884993248 + """ +from __future__ import annotations import time import random @@ -13,7 +20,7 @@ from searx.utils import humanize_number about = { "website": 'https://api.invidious.io/', "wikidata_id": 'Q79343316', - "official_api_documentation": 'https://github.com/iv-org/documentation/blob/master/API.md', + "official_api_documentation": 'https://docs.invidious.io/api/', "use_official_api": True, "require_api_key": False, "results": 'JSON', @@ -25,7 +32,12 @@ paging = True time_range_support = True # base_url can be overwritten by a list of URLs in the settings.yml -base_url = 'https://vid.puffyan.us' +base_url: list | str = [] + + +def init(_): + if not base_url: + raise ValueError("missing invidious base_url") def request(query, params): diff --git a/searx/engines/material_icons.py b/searx/engines/material_icons.py index 381cedae1..7dba62c3b 100644 --- a/searx/engines/material_icons.py +++ b/searx/engines/material_icons.py @@ -1,7 +1,5 @@ # SPDX-License-Identifier: AGPL-3.0-or-later -"""Material Icons (images) - -""" +"""Material Icons (icons)""" import re from json import loads @@ -14,6 +12,8 @@ about = { "require_api_key": False, "results": 'JSON', } +categories = ['images', 'icons'] + search_url = "https://fonts.google.com/metadata/icons?key=material_symbols&incomplete=true" result_url = "https://fonts.google.com/icons?icon.query={query}&selected=Material+Symbols+Outlined:{icon_name}:FILL@0{fill};wght@400;GRAD@0;opsz@24" # pylint: disable=line-too-long img_src_url = "https://fonts.gstatic.com/s/i/short-term/release/materialsymbolsoutlined/{icon_name}/{svg_type}/24px.svg" @@ -46,7 +46,7 @@ def response(resp): continue tags = [tag.title() for tag in result["tags"]] - categories = [category.title() for category in result["categories"]] + icon_categories = [category.title() for category in result["categories"]] results.append( { @@ -54,7 +54,7 @@ def response(resp): 'url': result_url.format(icon_name=result["name"], query=result["name"], fill=0 if outlined else 1), 'img_src': img_src_url.format(icon_name=result["name"], svg_type=svg_type), 'title': result["name"].replace("_", "").title(), - 'content': ", ".join(tags) + " / " + ", ".join(categories), + 'content': ", ".join(tags) + " / " + ", ".join(icon_categories), } ) diff --git a/searx/engines/naver.py b/searx/engines/naver.py new file mode 100644 index 000000000..d92af676e --- /dev/null +++ b/searx/engines/naver.py @@ -0,0 +1,210 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +# pylint: disable=line-too-long +"""Naver for SearXNG""" + +from urllib.parse import urlencode +from lxml import html + +from searx.exceptions import SearxEngineAPIException, SearxEngineXPathException +from searx.result_types import EngineResults, MainResult +from searx.utils import ( + eval_xpath_getindex, + eval_xpath_list, + eval_xpath, + extract_text, + extr, + html_to_text, + parse_duration_string, + js_variable_to_python, +) + +# engine metadata +about = { + "website": "https://search.naver.com", + "wikidata_id": "Q485639", + "use_official_api": False, + "require_api_key": False, + "results": "HTML", + "language": "ko", +} + +categories = [] +paging = True + +time_range_support = True +time_range_dict = {"day": "1d", "week": "1w", "month": "1m", "year": "1y"} + +base_url = "https://search.naver.com" + +naver_category = "general" +"""Naver supports general, images, news, videos search. + +- ``general``: search for general +- ``images``: search for images +- ``news``: search for news +- ``videos``: search for videos +""" + +# Naver cannot set the number of results on one page, set default value for paging +naver_category_dict = { + "general": { + "start": 15, + "where": "web", + }, + "images": { + "start": 50, + "where": "image", + }, + "news": { + "start": 10, + "where": "news", + }, + "videos": { + "start": 48, + "where": "video", + }, +} + + +def init(_): + if naver_category not in ('general', 'images', 'news', 'videos'): + raise SearxEngineAPIException(f"Unsupported category: {naver_category}") + + +def request(query, params): + query_params = { + "query": query, + } + + if naver_category in naver_category_dict: + query_params["start"] = (params["pageno"] - 1) * naver_category_dict[naver_category]["start"] + 1 + query_params["where"] = naver_category_dict[naver_category]["where"] + + if params["time_range"] in time_range_dict: + query_params["nso"] = f"p:{time_range_dict[params['time_range']]}" + + params["url"] = f"{base_url}/search.naver?{urlencode(query_params)}" + return params + + +def response(resp) -> EngineResults: + parsers = {'general': parse_general, 'images': parse_images, 'news': parse_news, 'videos': parse_videos} + + return parsers[naver_category](resp.text) + + +def parse_general(data): + results = EngineResults() + + dom = html.fromstring(data) + + for item in eval_xpath_list(dom, "//ul[contains(@class, 'lst_total')]/li[contains(@class, 'bx')]"): + thumbnail = None + try: + thumbnail = eval_xpath_getindex(item, ".//div[contains(@class, 'thumb_single')]//img/@data-lazysrc", 0) + except (ValueError, TypeError, SearxEngineXPathException): + pass + + results.add( + MainResult( + title=extract_text(eval_xpath(item, ".//a[contains(@class, 'link_tit')]")), + url=eval_xpath_getindex(item, ".//a[contains(@class, 'link_tit')]/@href", 0), + content=extract_text( + eval_xpath(item, ".//div[contains(@class, 'total_dsc_wrap')]//a[contains(@class, 'api_txt_lines')]") + ), + thumbnail=thumbnail, + ) + ) + + return results + + +def parse_images(data): + results = [] + + match = extr(data, '') + if match: + json = js_variable_to_python(match.strip()) + items = json.get('content', {}).get('items', []) + + for item in items: + results.append( + { + "template": "images.html", + "url": item.get('link'), + "thumbnail_src": item.get('thumb'), + "img_src": item.get('originalUrl'), + "title": html_to_text(item.get('title')), + "source": item.get('source'), + "resolution": f"{item.get('orgWidth')} x {item.get('orgHeight')}", + } + ) + + return results + + +def parse_news(data): + results = EngineResults() + dom = html.fromstring(data) + + for item in eval_xpath_list( + dom, "//div[contains(@class, 'sds-comps-base-layout') and contains(@class, 'sds-comps-full-layout')]" + ): + title = extract_text(eval_xpath(item, ".//span[contains(@class, 'sds-comps-text-type-headline1')]/text()")) + + url = eval_xpath_getindex(item, ".//a[@href and @nocr='1']/@href", 0) + + content = extract_text(eval_xpath(item, ".//span[contains(@class, 'sds-comps-text-type-body1')]")) + + thumbnail = None + try: + thumbnail = eval_xpath_getindex( + item, + ".//div[contains(@class, 'sds-comps-image') and contains(@class, 'sds-rego-thumb-overlay')]//img[@src]/@src", + 0, + ) + except (ValueError, TypeError, SearxEngineXPathException): + pass + + if title and content and url: + results.add( + MainResult( + title=title, + url=url, + content=content, + thumbnail=thumbnail, + ) + ) + + return results + + +def parse_videos(data): + results = [] + + dom = html.fromstring(data) + + for item in eval_xpath_list(dom, "//li[contains(@class, 'video_item')]"): + thumbnail = None + try: + thumbnail = eval_xpath_getindex(item, ".//img[contains(@class, 'thumb')]/@src", 0) + except (ValueError, TypeError, SearxEngineXPathException): + pass + + length = None + try: + length = parse_duration_string(extract_text(eval_xpath(item, ".//span[contains(@class, 'time')]"))) + except (ValueError, TypeError): + pass + + results.append( + { + "template": "videos.html", + "title": extract_text(eval_xpath(item, ".//a[contains(@class, 'info_title')]")), + "url": eval_xpath_getindex(item, ".//a[contains(@class, 'info_title')]/@href", 0), + "thumbnail": thumbnail, + 'length': length, + } + ) + + return results diff --git a/searx/engines/pinterest.py b/searx/engines/pinterest.py index 841b98ba0..924926677 100644 --- a/searx/engines/pinterest.py +++ b/searx/engines/pinterest.py @@ -1,6 +1,5 @@ # SPDX-License-Identifier: AGPL-3.0-or-later -"""Pinterest (images) -""" +"""Pinterest (images)""" from json import dumps @@ -28,6 +27,11 @@ def request(query, params): 'context': {}, } params['url'] = f"{base_url}/resource/BaseSearchResource/get/?data={dumps(args)}" + params['headers'] = { + 'X-Pinterest-AppState': 'active', + 'X-Pinterest-Source-Url': '/ideas/', + 'X-Pinterest-PWS-Handler': 'www/ideas.js', + } return params diff --git a/searx/engines/presearch.py b/searx/engines/presearch.py index 1093b5cff..36b754f87 100644 --- a/searx/engines/presearch.py +++ b/searx/engines/presearch.py @@ -137,19 +137,20 @@ def _get_request_id(query, params): if l.territory: headers['Accept-Language'] = f"{l.language}-{l.territory},{l.language};" "q=0.9,*;" "q=0.5" - resp_text = get(url, headers=headers).text # type: ignore + resp = get(url, headers=headers) - for line in resp_text.split("\n"): + for line in resp.text.split("\n"): if "window.searchId = " in line: - return line.split("= ")[1][:-1].replace('"', "") + return line.split("= ")[1][:-1].replace('"', ""), resp.cookies - return None + raise RuntimeError("Couldn't find any request id for presearch") def request(query, params): - request_id = _get_request_id(query, params) + request_id, cookies = _get_request_id(query, params) params["headers"]["Accept"] = "application/json" params["url"] = f"{base_url}/results?id={request_id}" + params["cookies"] = cookies return params diff --git a/searx/engines/selfhst.py b/searx/engines/selfhst.py index a85c4e877..f5ba3a136 100644 --- a/searx/engines/selfhst.py +++ b/searx/engines/selfhst.py @@ -11,7 +11,7 @@ about = { "require_api_key": False, "results": 'JSON', } -categories = ['images'] +categories = ['images', 'icons'] icons_list_url = 'https://cdn.selfh.st/directory/icons.json' diff --git a/searx/engines/svgrepo.py b/searx/engines/svgrepo.py index 156f4b2a8..0b821ed64 100644 --- a/searx/engines/svgrepo.py +++ b/searx/engines/svgrepo.py @@ -1,5 +1,5 @@ # SPDX-License-Identifier: AGPL-3.0-or-later -"""Svgrepo (images) +"""Svgrepo (icons) """ from lxml import html @@ -14,7 +14,7 @@ about = { } paging = True -categories = ['images'] +categories = ['images', 'icons'] base_url = "https://www.svgrepo.com" results_xpath = "//div[@class='style_nodeListing__7Nmro']/div" diff --git a/searx/engines/tagesschau.py b/searx/engines/tagesschau.py index 58bd40e56..aa3df6f06 100644 --- a/searx/engines/tagesschau.py +++ b/searx/engines/tagesschau.py @@ -77,7 +77,7 @@ def response(resp): elif item_type == 'video': results.append(_video(item)) else: - logger.error("unknow result type: %s", item_type) + logger.error("unknown result type: %s", item_type) return results diff --git a/searx/engines/uxwing.py b/searx/engines/uxwing.py new file mode 100644 index 000000000..98408432b --- /dev/null +++ b/searx/engines/uxwing.py @@ -0,0 +1,50 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +"""UXwing (images)""" + +from urllib.parse import quote_plus +from lxml import html + +from searx.utils import eval_xpath, eval_xpath_list, extract_text + +about = { + "website": 'https://uxwing.com', + "wikidata_id": None, + "official_api_documentation": None, + "use_official_api": False, + "require_api_key": False, + "results": 'HTML', +} +categories = ['images', 'icons'] + +base_url = "https://uxwing.com" + + +def request(query, params): + params['url'] = f"{base_url}/?s={quote_plus(query)}" + return params + + +def response(resp): + results = [] + + doc = html.fromstring(resp.text) + for result in eval_xpath_list(doc, "//article[starts-with(@id, 'post')]"): + classes = extract_text(eval_xpath(result, "./@class")).split(" ") + tags = [] + for css_class in classes: + for prefix in ("category", "tag"): + if css_class.startswith(prefix): + tag = css_class.removeprefix(prefix) + tags.append(tag.replace("-", " ").title()) + + results.append( + { + 'template': 'images.html', + 'url': extract_text(eval_xpath(result, "./a/@href")), + 'img_src': extract_text(eval_xpath(result, ".//img/@src")), + 'title': extract_text(eval_xpath(result, ".//img/@alt")), + 'content': ', '.join(tags), + } + ) + + return results diff --git a/searx/engines/yahoo.py b/searx/engines/yahoo.py index a882c6947..63b007729 100644 --- a/searx/engines/yahoo.py +++ b/searx/engines/yahoo.py @@ -44,6 +44,29 @@ time_range_dict = { 'month': ('1m', 'm'), } +region2domain = { + "CO": "co.search.yahoo.com", # Colombia + "TH": "th.search.yahoo.com", # Thailand + "VE": "ve.search.yahoo.com", # Venezuela + "CL": "cl.search.yahoo.com", # Chile + "HK": "hk.search.yahoo.com", # Hong Kong + "PE": "pe.search.yahoo.com", # Peru + "CA": "ca.search.yahoo.com", # Canada + "DE": "de.search.yahoo.com", # Germany + "FR": "fr.search.yahoo.com", # France + "TW": "tw.search.yahoo.com", # Taiwan + "GB": "uk.search.yahoo.com", # United Kingdom + "UK": "uk.search.yahoo.com", + "BR": "br.search.yahoo.com", # Brazil + "IN": "in.search.yahoo.com", # India + "ES": "espanol.search.yahoo.com", # Espanol + "PH": "ph.search.yahoo.com", # Philippines + "AR": "ar.search.yahoo.com", # Argentina + "MX": "mx.search.yahoo.com", # Mexico + "SG": "sg.search.yahoo.com", # Singapore +} +"""Map regions to domain""" + lang2domain = { 'zh_chs': 'hk.search.yahoo.com', 'zh_cht': 'tw.search.yahoo.com', @@ -65,40 +88,40 @@ lang2domain = { yahoo_languages = { "all": "any", - "ar": "ar", - "bg": "bg", - "cs": "cs", - "da": "da", - "de": "de", - "el": "el", - "en": "en", - "es": "es", - "et": "et", - "fi": "fi", - "fr": "fr", - "he": "he", - "hr": "hr", - "hu": "hu", - "it": "it", - "ja": "ja", - "ko": "ko", - "lt": "lt", - "lv": "lv", - "nl": "nl", - "no": "no", - "pl": "pl", - "pt": "pt", - "ro": "ro", - "ru": "ru", - "sk": "sk", - "sl": "sl", - "sv": "sv", - "th": "th", - "tr": "tr", - "zh": "zh_chs", + "ar": "ar", # Arabic + "bg": "bg", # Bulgarian + "cs": "cs", # Czech + "da": "da", # Danish + "de": "de", # German + "el": "el", # Greek + "en": "en", # English + "es": "es", # Spanish + "et": "et", # Estonian + "fi": "fi", # Finnish + "fr": "fr", # French + "he": "he", # Hebrew + "hr": "hr", # Croatian + "hu": "hu", # Hungarian + "it": "it", # Italian + "ja": "ja", # Japanese + "ko": "ko", # Korean + "lt": "lt", # Lithuanian + "lv": "lv", # Latvian + "nl": "nl", # Dutch + "no": "no", # Norwegian + "pl": "pl", # Polish + "pt": "pt", # Portuguese + "ro": "ro", # Romanian + "ru": "ru", # Russian + "sk": "sk", # Slovak + "sl": "sl", # Slovenian + "sv": "sv", # Swedish + "th": "th", # Thai + "tr": "tr", # Turkish + "zh": "zh_chs", # Chinese (Simplified) "zh_Hans": "zh_chs", 'zh-CN': "zh_chs", - "zh_Hant": "zh_cht", + "zh_Hant": "zh_cht", # Chinese (Traditional) "zh-HK": "zh_cht", 'zh-TW': "zh_cht", } @@ -107,7 +130,7 @@ yahoo_languages = { def request(query, params): """build request""" - lang = params["language"].split("-")[0] + lang, region = (params["language"].split("-") + [None])[:2] lang = yahoo_languages.get(lang, "any") offset = (params['pageno'] - 1) * 7 + 1 @@ -127,9 +150,11 @@ def request(query, params): } ) - domain = lang2domain.get(lang, '%s.search.yahoo.com' % lang) + domain = region2domain.get(region) + if not domain: + domain = lang2domain.get(lang, '%s.search.yahoo.com' % lang) params['url'] = 'https://%s/search?%s' % (domain, args) - return params + params['domain'] = domain def parse_url(url_string): @@ -157,14 +182,22 @@ def response(resp): results = [] dom = html.fromstring(resp.text) + url_xpath = './/div[contains(@class,"compTitle")]/h3/a/@href' + title_xpath = './/h3//a/@aria-label' + + domain = resp.search_params['domain'] + if domain == "search.yahoo.com": + url_xpath = './/div[contains(@class,"compTitle")]/a/@href' + title_xpath = './/div[contains(@class,"compTitle")]/a/h3/span' + # parse results for result in eval_xpath_list(dom, '//div[contains(@class,"algo-sr")]'): - url = eval_xpath_getindex(result, './/h3/a/@href', 0, default=None) + url = eval_xpath_getindex(result, url_xpath, 0, default=None) if url is None: continue url = parse_url(url) - title = eval_xpath_getindex(result, './/h3//a/@aria-label', 0, default='') + title = eval_xpath_getindex(result, title_xpath, 0, default='') title: str = extract_text(title) content = eval_xpath_getindex(result, './/div[contains(@class, "compText")]', 0, default='') content: str = extract_text(content, allow_none=True) diff --git a/searx/engines/zlibrary.py b/searx/engines/zlibrary.py index c9acb28fe..6357232af 100644 --- a/searx/engines/zlibrary.py +++ b/searx/engines/zlibrary.py @@ -180,6 +180,8 @@ def fetch_traits(engine_traits: EngineTraits) -> None: # pylint: disable=import-outside-toplevel, too-many-branches import babel + import httpx + from searx.network import get # see https://github.com/searxng/searxng/issues/762 from searx.locales import language_tag @@ -191,7 +193,7 @@ def fetch_traits(engine_traits: EngineTraits) -> None: try: resp = get(base_url, verify=False) - except SearxException as exc: + except (SearxException, httpx.ConnectError) as exc: print(f"ERROR: zlibrary domain '{base_url}' is seized?") print(f" --> {exc}") _use_old_values() diff --git a/searx/extended_types.py b/searx/extended_types.py index 41e3a56a9..e5c824a9c 100644 --- a/searx/extended_types.py +++ b/searx/extended_types.py @@ -42,7 +42,7 @@ class SXNG_Request(flask.Request): """list of searx.plugins.Plugin.id (the id of the plugins)""" preferences: "searx.preferences.Preferences" - """The prefernces of the request.""" + """The preferences of the request.""" errors: list[str] """A list of errors (translated text) added by :py:obj:`searx.webapp` in diff --git a/searx/favicons/cache.py b/searx/favicons/cache.py index cf71705aa..24daac457 100644 --- a/searx/favicons/cache.py +++ b/searx/favicons/cache.py @@ -140,7 +140,7 @@ class FaviconCacheConfig(msgspec.Struct): # pylint: disable=too-few-public-meth @dataclasses.dataclass class FaviconCacheStats: - """Dataclass wich provides information on the status of the cache.""" + """Dataclass which provides information on the status of the cache.""" favicons: int | None = None bytes: int | None = None @@ -387,7 +387,7 @@ CREATE TABLE IF NOT EXISTS blob_map ( self.properties.set("LAST_MAINTENANCE", "") # hint: this (also) sets the m_time of the property! # Do maintenance tasks. This can be take a little more time, to avoid - # DB locks, etablish a new DB connecton. + # DB locks, establish a new DB connection. with self.connect() as conn: diff --git a/searx/network/client.py b/searx/network/client.py index 05d8e88fa..f35ba2d6e 100644 --- a/searx/network/client.py +++ b/searx/network/client.py @@ -24,7 +24,7 @@ LOOP = None SSLCONTEXTS: Dict[Any, SSLContext] = {} -def shuffle_ciphers(ssl_context): +def shuffle_ciphers(ssl_context: SSLContext): """Shuffle httpx's default ciphers of a SSL context randomly. From `What Is TLS Fingerprint and How to Bypass It`_ @@ -41,16 +41,16 @@ def shuffle_ciphers(ssl_context): https://www.zenrows.com/blog/what-is-tls-fingerprint#how-to-bypass-tls-fingerprinting """ - c_list = httpx._config.DEFAULT_CIPHERS.split(':') # pylint: disable=protected-access + c_list = [cipher["name"] for cipher in ssl_context.get_ciphers()] sc_list, c_list = c_list[:3], c_list[3:] random.shuffle(c_list) ssl_context.set_ciphers(":".join(sc_list + c_list)) -def get_sslcontexts(proxy_url=None, cert=None, verify=True, trust_env=True, http2=False): - key = (proxy_url, cert, verify, trust_env, http2) +def get_sslcontexts(proxy_url=None, cert=None, verify=True, trust_env=True): + key = (proxy_url, cert, verify, trust_env) if key not in SSLCONTEXTS: - SSLCONTEXTS[key] = httpx.create_ssl_context(cert, verify, trust_env, http2) + SSLCONTEXTS[key] = httpx.create_ssl_context(verify, cert, trust_env) shuffle_ciphers(SSLCONTEXTS[key]) return SSLCONTEXTS[key] @@ -120,7 +120,7 @@ def get_transport_for_socks_proxy(verify, http2, local_address, proxy_url, limit rdns = True proxy_type, proxy_host, proxy_port, proxy_username, proxy_password = parse_proxy_url(proxy_url) - verify = get_sslcontexts(proxy_url, None, verify, True, http2) if verify is True else verify + verify = get_sslcontexts(proxy_url, None, verify, True) if verify is True else verify return AsyncProxyTransportFixed( proxy_type=proxy_type, proxy_host=proxy_host, @@ -138,7 +138,7 @@ def get_transport_for_socks_proxy(verify, http2, local_address, proxy_url, limit def get_transport(verify, http2, local_address, proxy_url, limit, retries): - verify = get_sslcontexts(None, None, verify, True, http2) if verify is True else verify + verify = get_sslcontexts(None, None, verify, True) if verify is True else verify return httpx.AsyncHTTPTransport( # pylint: disable=protected-access verify=verify, diff --git a/searx/network/network.py b/searx/network/network.py index 178ebcbf2..8e2a1f12d 100644 --- a/searx/network/network.py +++ b/searx/network/network.py @@ -180,7 +180,7 @@ class Network: Network._TOR_CHECK_RESULT[proxies] = result return result - async def get_client(self, verify=None, max_redirects=None): + async def get_client(self, verify=None, max_redirects=None) -> httpx.AsyncClient: verify = self.verify if verify is None else verify max_redirects = self.max_redirects if max_redirects is None else max_redirects local_address = next(self._local_addresses_cycle) @@ -269,6 +269,8 @@ class Network: kwargs_clients = Network.extract_kwargs_clients(kwargs) while retries >= 0: # pragma: no cover client = await self.get_client(**kwargs_clients) + cookies = kwargs.pop("cookies", None) + client.cookies = httpx.Cookies(cookies) try: if stream: response = client.stream(method, url, **kwargs) diff --git a/searx/openmetrics.py b/searx/openmetrics.py index 2cc89839b..a9ea01e08 100644 --- a/searx/openmetrics.py +++ b/searx/openmetrics.py @@ -8,7 +8,7 @@ class OpenMetricsFamily: # pylint: disable=too-few-public-methods The type_hint parameter must be one of 'counter', 'gauge', 'histogram', 'summary'. The help_hint parameter is a short string explaining the metric. The data_info parameter is a dictionary of descriptionary parameters for the data point (e.g. request method/path). - The data parameter is a flat list of the actual data in shape of a primive type. + The data parameter is a flat list of the actual data in shape of a primitive type. See https://github.com/OpenObservability/OpenMetrics/blob/main/specification/OpenMetrics.md for more information. """ diff --git a/searx/plugins/_core.py b/searx/plugins/_core.py index f5ae56e15..bb1f813d3 100644 --- a/searx/plugins/_core.py +++ b/searx/plugins/_core.py @@ -26,7 +26,7 @@ log: logging.Logger = logging.getLogger("searx.plugins") @dataclass class PluginInfo: - """Object that holds informations about a *plugin*, these infos are shown to + """Object that holds information about a *plugin*, these infos are shown to the user in the Preferences menu. To be able to translate the information into other languages, the text must @@ -85,7 +85,7 @@ class Plugin(abc.ABC): constructor (if not already set in the subclass).""" info: PluginInfo - """Informations about the *plugin*, see :py:obj:`PluginInfo`.""" + """Information about the *plugin*, see :py:obj:`PluginInfo`.""" fqn: str = "" @@ -129,8 +129,8 @@ class Plugin(abc.ABC): def init(self, app: "flask.Flask") -> bool: # pylint: disable=unused-argument """Initialization of the plugin, the return value decides whether this plugin is active or not. Initialization only takes place once, at the - time the WEB application is set up. The base methode always returns - ``True``, the methode can be overwritten in the inheritances, + time the WEB application is set up. The base method always returns + ``True``, the method can be overwritten in the inheritances, - ``True`` plugin is active - ``False`` plugin is inactive diff --git a/searx/search/processors/online_currency.py b/searx/search/processors/online_currency.py index 197e0e061..0d7900616 100644 --- a/searx/search/processors/online_currency.py +++ b/searx/search/processors/online_currency.py @@ -12,24 +12,13 @@ from .online import OnlineProcessor parser_re = re.compile('.*?(\\d+(?:\\.\\d+)?) ([^.0-9]+) (?:in|to) ([^.0-9]+)', re.I) -def normalize_name(name): +def normalize_name(name: str): + name = name.strip() name = name.lower().replace('-', ' ').rstrip('s') name = re.sub(' +', ' ', name) return unicodedata.normalize('NFKD', name).lower() -def name_to_iso4217(name): - name = normalize_name(name) - currency = CURRENCIES['names'].get(name, [name]) - if isinstance(currency, str): - return currency - return currency[-1] - - -def iso4217_to_name(iso4217, language): - return CURRENCIES['iso4217'].get(iso4217, {}).get(language, iso4217) - - class OnlineCurrencyProcessor(OnlineProcessor): """Processor class used by ``online_currency`` engines.""" @@ -52,14 +41,15 @@ class OnlineCurrencyProcessor(OnlineProcessor): amount = float(amount_str) except ValueError: return None - from_currency = name_to_iso4217(from_currency.strip()) - to_currency = name_to_iso4217(to_currency.strip()) + + from_currency = CURRENCIES.name_to_iso4217(normalize_name(from_currency)) + to_currency = CURRENCIES.name_to_iso4217(normalize_name(to_currency)) params['amount'] = amount params['from'] = from_currency params['to'] = to_currency - params['from_name'] = iso4217_to_name(from_currency, 'en') - params['to_name'] = iso4217_to_name(to_currency, 'en') + params['from_name'] = CURRENCIES.iso4217_to_name(from_currency, "en") + params['to_name'] = CURRENCIES.iso4217_to_name(to_currency, "en") return params def get_default_tests(self): diff --git a/searx/settings.yml b/searx/settings.yml index 7e0455701..1fdf221b0 100644 --- a/searx/settings.yml +++ b/searx/settings.yml @@ -34,7 +34,7 @@ search: # Filter results. 0: None, 1: Moderate, 2: Strict safe_search: 0 # Existing autocomplete backends: "360search", "baidu", "brave", "dbpedia", "duckduckgo", "google", "yandex", - # "mwmbl", "seznam", "sogou", "stract", "swisscows", "quark", "qwant", "wikipedia" - + # "mwmbl", "naver", "seznam", "sogou", "stract", "swisscows", "quark", "qwant", "wikipedia" - # leave blank to turn it off by default. autocomplete: "" # minimun characters to type before autocompleter starts @@ -252,8 +252,8 @@ plugins: # # hostnames: # replace: -# '(.*\.)?youtube\.com$': 'invidious.example.com' -# '(.*\.)?youtu\.be$': 'invidious.example.com' +# '(.*\.)?youtube\.com$': 'yt.example.com' +# '(.*\.)?youtu\.be$': 'yt.example.com' # '(.*\.)?reddit\.com$': 'teddit.example.com' # '(.*\.)?redd\.it$': 'teddit.example.com' # '(www\.)?twitter\.com$': 'nitter.example.com' @@ -270,8 +270,8 @@ plugins: # replace: 'rewrite-hosts.yml' # # Content of 'rewrite-hosts.yml' (place the file in the same directory as 'settings.yml'): -# '(.*\.)?youtube\.com$': 'invidious.example.com' -# '(.*\.)?youtu\.be$': 'invidious.example.com' +# '(.*\.)?youtube\.com$': 'yt.example.com' +# '(.*\.)?youtu\.be$': 'yt.example.com' # checker: @@ -1053,7 +1053,6 @@ engines: - name: material icons engine: material_icons - categories: images shortcut: mi disabled: true @@ -1117,6 +1116,7 @@ engines: - name: il post engine: il_post shortcut: pst + disabled: true - name: huggingface engine: huggingface @@ -1152,16 +1152,15 @@ engines: timeout: 6.0 disabled: true - - name: invidious - engine: invidious - # Instanes will be selected randomly, see https://api.invidious.io/ for - # instances that are stable (good uptime) and close to you. - base_url: - - https://invidious.adminforge.de - - https://inv.nadeko.net - shortcut: iv - timeout: 3.0 - disabled: true + # - name: invidious + # engine: invidious + # # if you want to use invidious with SearXNG you should setup one locally + # # https://github.com/searxng/searxng/issues/2722#issuecomment-2884993248 + # base_url: + # - https://invidious.example1.com + # - https://invidious.example2.com + # shortcut: iv + # timeout: 3.0 - name: ipernity engine: ipernity @@ -1237,11 +1236,13 @@ engines: shortcut: zlib categories: files timeout: 7.0 + disabled: true - name: library of congress engine: loc shortcut: loc categories: images + disabled: true - name: libretranslate engine: libretranslate @@ -1708,6 +1709,7 @@ engines: engine: qwant shortcut: qw categories: [general, web] + disabled: true additional_tests: rosebud: *test_rosebud @@ -2359,25 +2361,31 @@ engines: disabled: true - name: naver - shortcut: nvr categories: [general, web] - engine: xpath - paging: true - search_url: https://search.naver.com/search.naver?where=webkr&sm=osp_hty&ie=UTF-8&query={query}&start={pageno} - url_xpath: //a[@class="link_tit"]/@href - title_xpath: //a[@class="link_tit"] - content_xpath: //div[@class="total_dsc_wrap"]/a - first_page_num: 1 - page_size: 10 + engine: naver + shortcut: nvr + disabled: true + + - name: naver images + naver_category: images + categories: [images] + engine: naver + shortcut: nvri + disabled: true + + - name: naver news + naver_category: news + categories: [news] + engine: naver + shortcut: nvrn + disabled: true + + - name: naver videos + naver_category: videos + categories: [videos] + engine: naver + shortcut: nvrv disabled: true - about: - website: https://www.naver.com/ - wikidata_id: Q485639 - official_api_documentation: https://developers.naver.com/docs/nmt/examples/ - use_official_api: false - require_api_key: false - results: HTML - language: ko - name: rubygems shortcut: rbg @@ -2524,6 +2532,11 @@ engines: engine: tootfinder shortcut: toot + - name: uxwing + engine: uxwing + shortcut: ux + disabled: true + - name: voidlinux engine: voidlinux shortcut: void diff --git a/searx/sqlitedb.py b/searx/sqlitedb.py index 364b43db3..95466eac9 100644 --- a/searx/sqlitedb.py +++ b/searx/sqlitedb.py @@ -114,7 +114,7 @@ class SQLiteAppl(abc.ABC): """ SQLITE_JOURNAL_MODE = "WAL" - """``SQLiteAppl`` applications are optimzed for WAL_ mode, its not recommend + """``SQLiteAppl`` applications are optimized for WAL_ mode, its not recommend to change the journal mode (see :py:obj:`SQLiteAppl.tear_down`). .. _WAL: https://sqlite.org/wal.html @@ -145,7 +145,7 @@ class SQLiteAppl(abc.ABC): - https://github.com/python/cpython/issues/118172 - https://github.com/python/cpython/issues/123873 - The workaround for SQLite3 multithreading cache inconsistency ist to set + The workaround for SQLite3 multithreading cache inconsistency is to set option ``cached_statements`` to ``0`` by default. """ diff --git a/searx/static/themes/simple/css/searxng-rtl.min.css b/searx/static/themes/simple/css/searxng-rtl.min.css index 5ddce2b5c..7e2f294f2 100644 --- a/searx/static/themes/simple/css/searxng-rtl.min.css +++ b/searx/static/themes/simple/css/searxng-rtl.min.css @@ -1 +1 @@ -/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}:root{--color-base-font: #444;--color-base-font-rgb: 68, 68, 68;--color-base-background: #fff;--color-base-background-mobile: #f2f5f8;--color-url-font: #334999;--color-url-visited-font: #9822c3;--color-header-background: #fdfbff;--color-header-border: #ddd;--color-footer-background: #fdfbff;--color-footer-border: #ddd;--color-sidebar-border: #ddd;--color-sidebar-font: #000;--color-sidebar-background: #fff;--color-backtotop-font: #444;--color-backtotop-border: #ddd;--color-backtotop-background: #fff;--color-btn-background: #3050ff;--color-btn-font: #fff;--color-show-btn-background: #bbb;--color-show-btn-font: #000;--color-search-border: #bbb;--color-search-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-search-background: #fff;--color-search-font: #222;--color-search-background-hover: #3050ff;--color-error: #db3434;--color-error-background: #fae1e1;--color-warning: #dbba34;--color-warning-background: #faf5e1;--color-success: #42db34;--color-success-background: #e3fae1;--color-categories-item-selected-font: #3050ff;--color-categories-item-border-selected: #3050ff;--color-autocomplete-font: #000;--color-autocomplete-border: #bbb;--color-autocomplete-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-autocomplete-background: #fff;--color-autocomplete-background-hover: #e3e3e3;--color-answer-font: #444;--color-answer-background: #fff;--color-result-keyvalue-col-table: #fdfbff;--color-result-keyvalue-odd: #fdfbff;--color-result-keyvalue-even: #fff;--color-result-background: #fff;--color-result-border: #ddd;--color-result-url-font: #000;--color-result-vim-selected: #f7f7f7;--color-result-vim-arrow: #000bbb;--color-result-description-highlight-font: #000;--color-result-link-font: #000bbb;--color-result-link-font-highlight: #000bbb;--color-result-link-visited-font: #9822c3;--color-result-publishdate-font: #777;--color-result-engines-font: #545454;--color-result-search-url-border: #ddd;--color-result-search-url-font: #000;--color-result-image-span-font: #444;--color-result-image-span-font-selected: #fff;--color-result-image-background: #fff;--color-settings-tr-hover: #ebebeb;--color-settings-engine-description-font: #545454;--color-settings-table-group-background: #0001;--color-result-detail-font: #fff;--color-result-detail-label-font: lightgray;--color-result-detail-background: #242424;--color-result-detail-hr: #555;--color-result-detail-link: #8af;--color-result-detail-loader-border: rgba(255, 255, 255, .2);--color-result-detail-loader-borderleft: rgba(0, 0, 0, 0);--color-toolkit-badge-font: #fff;--color-toolkit-badge-background: #545454;--color-toolkit-kbd-font: #fff;--color-toolkit-kbd-background: #000;--color-toolkit-dialog-border: #ddd;--color-toolkit-dialog-background: #fff;--color-toolkit-tabs-label-border: #fff;--color-toolkit-tabs-section-border: #ddd;--color-toolkit-select-background: #e1e1e1;--color-toolkit-select-border: #ddd;--color-toolkit-select-background-hover: #bbb;--color-toolkit-input-text-font: #222;--color-toolkit-checkbox-onoff-off-background: #ddd;--color-toolkit-checkbox-onoff-on-background: #ddd;--color-toolkit-checkbox-onoff-on-mark-background: #3050ff;--color-toolkit-checkbox-onoff-on-mark-color: #fff;--color-toolkit-checkbox-onoff-off-mark-background: #aaa;--color-toolkit-checkbox-onoff-off-mark-color: #fff;--color-toolkit-checkbox-label-background: #ddd;--color-toolkit-checkbox-label-border: #ddd;--color-toolkit-checkbox-input-border: #3050ff;--color-toolkit-engine-tooltip-border: #ddd;--color-toolkit-engine-tooltip-background: #fff;--color-toolkit-loader-border: rgba(0, 0, 0, .2);--color-toolkit-loader-borderleft: rgba(255, 255, 255, 0);--color-doc-code: #003;--color-doc-code-background: #ddeaff;--color-bar-chart-primary: #5bc0de;--color-bar-chart-secondary: #deb15b;--color-image-resolution-background: rgba(0, 0, 0, .5);--color-image-resolution-font: #fff;--color-loading-indicator: rgba(255, 255, 255, .2);--color-loading-indicator-gap: #fff;--color-line-number: #64708d;--color-favicon-background-color: #ddd;--color-favicon-border-color: #ccc}@media (prefers-color-scheme: dark){:root.theme-auto{--color-base-font: #bbb;--color-base-font-rgb: 187, 187, 187;--color-base-background: #222428;--color-base-background-mobile: #222428;--color-url-font: #8af;--color-url-visited-font: #c09cd9;--color-header-background: #1e1e22;--color-header-border: #333;--color-footer-background: #1e1e22;--color-footer-border: #333;--color-sidebar-border: #555;--color-sidebar-font: #fff;--color-sidebar-background: #292c34;--color-backtotop-font: #bbb;--color-backtotop-border: #333;--color-backtotop-background: #2b2e36;--color-btn-background: #58f;--color-btn-font: #222;--color-show-btn-background: #555;--color-show-btn-font: #fff;--color-search-border: #555;--color-search-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-search-background: #2b2e36;--color-search-font: #fff;--color-search-background-hover: #58f;--color-error: #f55b5b;--color-error-background: #390a0a;--color-warning: #f1d561;--color-warning-background: #39300a;--color-success: #79f56e;--color-success-background: #0e390a;--color-categories-item-selected-font: #58f;--color-categories-item-border-selected: #58f;--color-autocomplete-font: #fff;--color-autocomplete-border: #555;--color-autocomplete-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-autocomplete-background: #2b2e36;--color-autocomplete-background-hover: #1e1e22;--color-answer-font: #bbb;--color-answer-background: #26292f;--color-result-keyvalue-col-table: #1e1e22;--color-result-keyvalue-odd: #1e1e22;--color-result-keyvalue-even: #26292f;--color-result-background: #26292f;--color-result-border: #333;--color-result-url-font: #fff;--color-result-vim-selected: #1f1f23cc;--color-result-vim-arrow: #8af;--color-result-description-highlight-font: #fff;--color-result-link-font: #8af;--color-result-link-font-highlight: #8af;--color-result-link-visited-font: #c09cd9;--color-result-publishdate-font: #888;--color-result-engines-font: #a4a4a4;--color-result-search-url-border: #555;--color-result-search-url-font: #fff;--color-result-detail-font: #fff;--color-result-detail-label-font: lightgray;--color-result-detail-background: #1a1a1c;--color-result-detail-hr: #555;--color-result-detail-link: #8af;--color-result-detail-loader-border: rgba(255, 255, 255, .2);--color-result-detail-loader-borderleft: rgba(0, 0, 0, 0);--color-result-image-span-font: #bbb;--color-result-image-span-font-selected: #222;--color-result-image-background: #222;--color-settings-tr-hover: #2c2c32;--color-settings-engine-description-font: #909090;--color-settings-table-group-background: #1b1b21;--color-toolkit-badge-font: #fff;--color-toolkit-badge-background: #555;--color-toolkit-kbd-font: #000;--color-toolkit-kbd-background: #fff;--color-toolkit-dialog-border: #555;--color-toolkit-dialog-background: #1e1e22;--color-toolkit-tabs-label-border: #222;--color-toolkit-tabs-section-border: #555;--color-toolkit-select-background: #313338;--color-toolkit-select-border: #555;--color-toolkit-select-background-hover: #373b49;--color-toolkit-input-text-font: #fff;--color-toolkit-checkbox-onoff-off-background: #313338;--color-toolkit-checkbox-onoff-on-background: #313338;--color-toolkit-checkbox-onoff-on-mark-background: #58f;--color-toolkit-checkbox-onoff-on-mark-color: #222;--color-toolkit-checkbox-onoff-off-mark-background: #ddd;--color-toolkit-checkbox-onoff-off-mark-color: #222;--color-toolkit-checkbox-label-background: #222;--color-toolkit-checkbox-label-border: #333;--color-toolkit-checkbox-input-border: #58f;--color-toolkit-engine-tooltip-border: #333;--color-toolkit-engine-tooltip-background: #222;--color-toolkit-loader-border: rgba(255, 255, 255, .2);--color-toolkit-loader-borderleft: rgba(0, 0, 0, 0);--color-doc-code: #ddd;--color-doc-code-background: #4d5a6f;--color-favicon-background-color: #ddd;--color-favicon-border-color: #ccc}}:root.theme-dark{--color-base-font: #bbb;--color-base-font-rgb: 187, 187, 187;--color-base-background: #222428;--color-base-background-mobile: #222428;--color-url-font: #8af;--color-url-visited-font: #c09cd9;--color-header-background: #1e1e22;--color-header-border: #333;--color-footer-background: #1e1e22;--color-footer-border: #333;--color-sidebar-border: #555;--color-sidebar-font: #fff;--color-sidebar-background: #292c34;--color-backtotop-font: #bbb;--color-backtotop-border: #333;--color-backtotop-background: #2b2e36;--color-btn-background: #58f;--color-btn-font: #222;--color-show-btn-background: #555;--color-show-btn-font: #fff;--color-search-border: #555;--color-search-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-search-background: #2b2e36;--color-search-font: #fff;--color-search-background-hover: #58f;--color-error: #f55b5b;--color-error-background: #390a0a;--color-warning: #f1d561;--color-warning-background: #39300a;--color-success: #79f56e;--color-success-background: #0e390a;--color-categories-item-selected-font: #58f;--color-categories-item-border-selected: #58f;--color-autocomplete-font: #fff;--color-autocomplete-border: #555;--color-autocomplete-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-autocomplete-background: #2b2e36;--color-autocomplete-background-hover: #1e1e22;--color-answer-font: #bbb;--color-answer-background: #26292f;--color-result-keyvalue-col-table: #1e1e22;--color-result-keyvalue-odd: #1e1e22;--color-result-keyvalue-even: #26292f;--color-result-background: #26292f;--color-result-border: #333;--color-result-url-font: #fff;--color-result-vim-selected: #1f1f23cc;--color-result-vim-arrow: #8af;--color-result-description-highlight-font: #fff;--color-result-link-font: #8af;--color-result-link-font-highlight: #8af;--color-result-link-visited-font: #c09cd9;--color-result-publishdate-font: #888;--color-result-engines-font: #a4a4a4;--color-result-search-url-border: #555;--color-result-search-url-font: #fff;--color-result-detail-font: #fff;--color-result-detail-label-font: lightgray;--color-result-detail-background: #1a1a1c;--color-result-detail-hr: #555;--color-result-detail-link: #8af;--color-result-detail-loader-border: rgba(255, 255, 255, .2);--color-result-detail-loader-borderleft: rgba(0, 0, 0, 0);--color-result-image-span-font: #bbb;--color-result-image-span-font-selected: #222;--color-result-image-background: #222;--color-settings-tr-hover: #2c2c32;--color-settings-engine-description-font: #909090;--color-settings-table-group-background: #1b1b21;--color-toolkit-badge-font: #fff;--color-toolkit-badge-background: #555;--color-toolkit-kbd-font: #000;--color-toolkit-kbd-background: #fff;--color-toolkit-dialog-border: #555;--color-toolkit-dialog-background: #1e1e22;--color-toolkit-tabs-label-border: #222;--color-toolkit-tabs-section-border: #555;--color-toolkit-select-background: #313338;--color-toolkit-select-border: #555;--color-toolkit-select-background-hover: #373b49;--color-toolkit-input-text-font: #fff;--color-toolkit-checkbox-onoff-off-background: #313338;--color-toolkit-checkbox-onoff-on-background: #313338;--color-toolkit-checkbox-onoff-on-mark-background: #58f;--color-toolkit-checkbox-onoff-on-mark-color: #222;--color-toolkit-checkbox-onoff-off-mark-background: #ddd;--color-toolkit-checkbox-onoff-off-mark-color: #222;--color-toolkit-checkbox-label-background: #222;--color-toolkit-checkbox-label-border: #333;--color-toolkit-checkbox-input-border: #58f;--color-toolkit-engine-tooltip-border: #333;--color-toolkit-engine-tooltip-background: #222;--color-toolkit-loader-border: rgba(255, 255, 255, .2);--color-toolkit-loader-borderleft: rgba(0, 0, 0, 0);--color-doc-code: #ddd;--color-doc-code-background: #4d5a6f;--color-favicon-background-color: #ddd;--color-favicon-border-color: #ccc}:root.theme-black{--color-base-font: #bbb;--color-base-font-rgb: 187, 187, 187;--color-base-background: #222428;--color-base-background-mobile: #222428;--color-url-font: #8af;--color-url-visited-font: #c09cd9;--color-header-background: #1e1e22;--color-header-border: #333;--color-footer-background: #1e1e22;--color-footer-border: #333;--color-sidebar-border: #555;--color-sidebar-font: #fff;--color-sidebar-background: #292c34;--color-backtotop-font: #bbb;--color-backtotop-border: #333;--color-backtotop-background: #2b2e36;--color-btn-background: #58f;--color-btn-font: #222;--color-show-btn-background: #555;--color-show-btn-font: #fff;--color-search-border: #555;--color-search-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-search-background: #2b2e36;--color-search-font: #fff;--color-search-background-hover: #58f;--color-error: #f55b5b;--color-error-background: #390a0a;--color-warning: #f1d561;--color-warning-background: #39300a;--color-success: #79f56e;--color-success-background: #0e390a;--color-categories-item-selected-font: #58f;--color-categories-item-border-selected: #58f;--color-autocomplete-font: #fff;--color-autocomplete-border: #555;--color-autocomplete-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-autocomplete-background: #2b2e36;--color-autocomplete-background-hover: #1e1e22;--color-answer-font: #bbb;--color-answer-background: #26292f;--color-result-keyvalue-col-table: #1e1e22;--color-result-keyvalue-odd: #1e1e22;--color-result-keyvalue-even: #26292f;--color-result-background: #26292f;--color-result-border: #333;--color-result-url-font: #fff;--color-result-vim-selected: #1f1f23cc;--color-result-vim-arrow: #8af;--color-result-description-highlight-font: #fff;--color-result-link-font: #8af;--color-result-link-font-highlight: #8af;--color-result-link-visited-font: #c09cd9;--color-result-publishdate-font: #888;--color-result-engines-font: #a4a4a4;--color-result-search-url-border: #555;--color-result-search-url-font: #fff;--color-result-detail-font: #fff;--color-result-detail-label-font: lightgray;--color-result-detail-background: #1a1a1c;--color-result-detail-hr: #555;--color-result-detail-link: #8af;--color-result-detail-loader-border: rgba(255, 255, 255, .2);--color-result-detail-loader-borderleft: rgba(0, 0, 0, 0);--color-result-image-span-font: #bbb;--color-result-image-span-font-selected: #222;--color-result-image-background: #222;--color-settings-tr-hover: #2c2c32;--color-settings-engine-description-font: #909090;--color-settings-table-group-background: #1b1b21;--color-toolkit-badge-font: #fff;--color-toolkit-badge-background: #555;--color-toolkit-kbd-font: #000;--color-toolkit-kbd-background: #fff;--color-toolkit-dialog-border: #555;--color-toolkit-dialog-background: #1e1e22;--color-toolkit-tabs-label-border: #222;--color-toolkit-tabs-section-border: #555;--color-toolkit-select-background: #313338;--color-toolkit-select-border: #555;--color-toolkit-select-background-hover: #373b49;--color-toolkit-input-text-font: #fff;--color-toolkit-checkbox-onoff-off-background: #313338;--color-toolkit-checkbox-onoff-on-background: #313338;--color-toolkit-checkbox-onoff-on-mark-background: #58f;--color-toolkit-checkbox-onoff-on-mark-color: #222;--color-toolkit-checkbox-onoff-off-mark-background: #ddd;--color-toolkit-checkbox-onoff-off-mark-color: #222;--color-toolkit-checkbox-label-background: #222;--color-toolkit-checkbox-label-border: #333;--color-toolkit-checkbox-input-border: #58f;--color-toolkit-engine-tooltip-border: #333;--color-toolkit-engine-tooltip-background: #222;--color-toolkit-loader-border: rgba(255, 255, 255, .2);--color-toolkit-loader-borderleft: rgba(0, 0, 0, 0);--color-doc-code: #ddd;--color-doc-code-background: #4d5a6f;--color-favicon-background-color: #ddd;--color-favicon-border-color: #ccc;--color-base-background: #000;--color-base-background-mobile: #000;--color-header-background: #000;--color-footer-background: #000;--color-sidebar-background: #000}.code-highlight pre{line-height:100%}.code-highlight td.linenos .normal,.code-highlight span.linenos{color:inherit;background-color:transparent;padding-left:5px;padding-right:5px}.code-highlight td.linenos .special,.code-highlight span.linenos.special{color:#000;background-color:#ffffc0;padding-left:5px;padding-right:5px}.code-highlight .hll{background-color:#ffc}.code-highlight .c{color:#3d7b7b;font-style:italic}.code-highlight .err{border:1px solid #F00}.code-highlight .k{color:green;font-weight:700}.code-highlight .o{color:#666}.code-highlight .ch,.code-highlight .cm{color:#3d7b7b;font-style:italic}.code-highlight .cp{color:#9c6500}.code-highlight .cpf,.code-highlight .c1,.code-highlight .cs{color:#3d7b7b;font-style:italic}.code-highlight .gd{color:#a00000}.code-highlight .ge{font-style:italic}.code-highlight .ges{font-weight:700;font-style:italic}.code-highlight .gr{color:#e40000}.code-highlight .gh{color:navy;font-weight:700}.code-highlight .gi{color:#008400}.code-highlight .go{color:#717171}.code-highlight .gp{color:navy;font-weight:700}.code-highlight .gs{font-weight:700}.code-highlight .gu{color:purple;font-weight:700}.code-highlight .gt{color:#04d}.code-highlight .kc,.code-highlight .kd,.code-highlight .kn{color:green;font-weight:700}.code-highlight .kp{color:green}.code-highlight .kr{color:green;font-weight:700}.code-highlight .kt{color:#b00040}.code-highlight .m{color:#666}.code-highlight .s{color:#ba2121}.code-highlight .na{color:#687822}.code-highlight .nb{color:green}.code-highlight .nc{color:#00f;font-weight:700}.code-highlight .no{color:#800}.code-highlight .nd{color:#a2f}.code-highlight .ni{color:#717171;font-weight:700}.code-highlight .ne{color:#cb3f38;font-weight:700}.code-highlight .nf{color:#00f}.code-highlight .nl{color:#767600}.code-highlight .nn{color:#00f;font-weight:700}.code-highlight .nt{color:green;font-weight:700}.code-highlight .nv{color:#19177c}.code-highlight .ow{color:#a2f;font-weight:700}.code-highlight .w{color:#bbb}.code-highlight .mb,.code-highlight .mf,.code-highlight .mh,.code-highlight .mi,.code-highlight .mo{color:#666}.code-highlight .sa,.code-highlight .sb,.code-highlight .sc,.code-highlight .dl{color:#ba2121}.code-highlight .sd{color:#ba2121;font-style:italic}.code-highlight .s2{color:#ba2121}.code-highlight .se{color:#aa5d1f;font-weight:700}.code-highlight .sh{color:#ba2121}.code-highlight .si{color:#a45a77;font-weight:700}.code-highlight .sx{color:green}.code-highlight .sr{color:#a45a77}.code-highlight .s1{color:#ba2121}.code-highlight .ss{color:#19177c}.code-highlight .bp{color:green}.code-highlight .fm{color:#00f}.code-highlight .vc,.code-highlight .vg,.code-highlight .vi,.code-highlight .vm{color:#19177c}.code-highlight .il{color:#666}.codelines{margin:.125rem 0 0;padding:1rem 0 0}.code-highlight pre{overflow:auto;margin:0;padding:0 0 .75rem}.code-highlight .linenos{-webkit-user-select:none;user-select:none;cursor:default;margin-right:8px;text-align:right}.code-highlight .linenos::selection{background:transparent}.code-highlight .linenos::-moz-selection{background:transparent}.code-highlight span.linenos{color:var(--color-line-number)}@media (prefers-color-scheme: dark){:root.theme-auto .code-highlight pre{line-height:100%}:root.theme-auto .code-highlight td.linenos .normal{color:#3c4354;background-color:transparent;padding-left:5px;padding-right:5px}:root.theme-auto .code-highlight span.linenos{color:#3c4354;background-color:transparent;padding-left:5px;padding-right:5px}:root.theme-auto .code-highlight td.linenos .special{color:#3c4354;background-color:#ffffc0;padding-left:5px;padding-right:5px}:root.theme-auto .code-highlight span.linenos.special{color:#3c4354;background-color:#ffffc0;padding-left:5px;padding-right:5px}:root.theme-auto .code-highlight .hll{background-color:#6e7681}:root.theme-auto .code-highlight .c{color:#7e8aa1}:root.theme-auto .code-highlight .err{color:#f88f7f}:root.theme-auto .code-highlight .esc{color:#d4d2c8}:root.theme-auto .code-highlight .g{color:#d4d2c8}:root.theme-auto .code-highlight .k{color:#ffad66}:root.theme-auto .code-highlight .l{color:#d5ff80}:root.theme-auto .code-highlight .n{color:#d4d2c8}:root.theme-auto .code-highlight .o{color:#ffad66}:root.theme-auto .code-highlight .x{color:#d4d2c8}:root.theme-auto .code-highlight .p{color:#d4d2c8}:root.theme-auto .code-highlight .ch{color:#f88f7f;font-style:italic}:root.theme-auto .code-highlight .cm{color:#7e8aa1}:root.theme-auto .code-highlight .cp{color:#ffad66;font-weight:700}:root.theme-auto .code-highlight .cpf{color:#7e8aa1}:root.theme-auto .code-highlight .c1{color:#7e8aa1}:root.theme-auto .code-highlight .cs{color:#7e8aa1;font-style:italic}:root.theme-auto .code-highlight .gd{color:#f88f7f;background-color:#3d1e20}:root.theme-auto .code-highlight .ge{color:#d4d2c8;font-style:italic}:root.theme-auto .code-highlight .ges{color:#d4d2c8}:root.theme-auto .code-highlight .gr{color:#f88f7f}:root.theme-auto .code-highlight .gh{color:#d4d2c8}:root.theme-auto .code-highlight .gi{color:#6ad4af;background-color:#19362c}:root.theme-auto .code-highlight .go{color:#7e8aa1}:root.theme-auto .code-highlight .gp{color:#d4d2c8}:root.theme-auto .code-highlight .gs{color:#d4d2c8;font-weight:700}:root.theme-auto .code-highlight .gu{color:#d4d2c8}:root.theme-auto .code-highlight .gt{color:#f88f7f}:root.theme-auto .code-highlight .kc{color:#ffad66}:root.theme-auto .code-highlight .kd{color:#ffad66}:root.theme-auto .code-highlight .kn{color:#ffad66}:root.theme-auto .code-highlight .kp{color:#ffad66}:root.theme-auto .code-highlight .kr{color:#ffad66}:root.theme-auto .code-highlight .kt{color:#73d0ff}:root.theme-auto .code-highlight .ld{color:#d5ff80}:root.theme-auto .code-highlight .m{color:#dfbfff}:root.theme-auto .code-highlight .s{color:#d5ff80}:root.theme-auto .code-highlight .na{color:#ffd173}:root.theme-auto .code-highlight .nb{color:#ffd173}:root.theme-auto .code-highlight .nc{color:#73d0ff}:root.theme-auto .code-highlight .no{color:#ffd173}:root.theme-auto .code-highlight .nd{color:#7e8aa1;font-weight:700;font-style:italic}:root.theme-auto .code-highlight .ni{color:#95e6cb}:root.theme-auto .code-highlight .ne{color:#73d0ff}:root.theme-auto .code-highlight .nf{color:#ffd173}:root.theme-auto .code-highlight .nl{color:#d4d2c8}:root.theme-auto .code-highlight .nn{color:#d4d2c8}:root.theme-auto .code-highlight .nx{color:#d4d2c8}:root.theme-auto .code-highlight .py{color:#ffd173}:root.theme-auto .code-highlight .nt{color:#5ccfe6}:root.theme-auto .code-highlight .nv{color:#d4d2c8}:root.theme-auto .code-highlight .ow{color:#ffad66}:root.theme-auto .code-highlight .pm{color:#d4d2c8}:root.theme-auto .code-highlight .w{color:#d4d2c8}:root.theme-auto .code-highlight .mb{color:#dfbfff}:root.theme-auto .code-highlight .mf{color:#dfbfff}:root.theme-auto .code-highlight .mh{color:#dfbfff}:root.theme-auto .code-highlight .mi{color:#dfbfff}:root.theme-auto .code-highlight .mo{color:#dfbfff}:root.theme-auto .code-highlight .sa{color:#f29e74}:root.theme-auto .code-highlight .sb{color:#d5ff80}:root.theme-auto .code-highlight .sc{color:#d5ff80}:root.theme-auto .code-highlight .dl{color:#d5ff80}:root.theme-auto .code-highlight .sd{color:#7e8aa1}:root.theme-auto .code-highlight .s2{color:#d5ff80}:root.theme-auto .code-highlight .se{color:#95e6cb}:root.theme-auto .code-highlight .sh{color:#d5ff80}:root.theme-auto .code-highlight .si{color:#95e6cb}:root.theme-auto .code-highlight .sx{color:#95e6cb}:root.theme-auto .code-highlight .sr{color:#95e6cb}:root.theme-auto .code-highlight .s1{color:#d5ff80}:root.theme-auto .code-highlight .ss{color:#dfbfff}:root.theme-auto .code-highlight .bp{color:#5ccfe6}:root.theme-auto .code-highlight .fm{color:#ffd173}:root.theme-auto .code-highlight .vc{color:#d4d2c8}:root.theme-auto .code-highlight .vg{color:#d4d2c8}:root.theme-auto .code-highlight .vi{color:#d4d2c8}:root.theme-auto .code-highlight .vm{color:#d4d2c8}:root.theme-auto .code-highlight .il{color:#dfbfff}:root.theme-auto .code-highlight pre{overflow:auto;margin:0;padding:0 0 .75rem}:root.theme-auto .code-highlight .linenos{-webkit-user-select:none;user-select:none;cursor:default;margin-right:8px;text-align:right}:root.theme-auto .code-highlight .linenos::selection{background:transparent}:root.theme-auto .code-highlight .linenos::-moz-selection{background:transparent}:root.theme-auto .code-highlight span.linenos{color:var(--color-line-number)}}:root.theme-dark .code-highlight pre{line-height:100%}:root.theme-dark .code-highlight td.linenos .normal{color:#3c4354;background-color:transparent;padding-left:5px;padding-right:5px}:root.theme-dark .code-highlight span.linenos{color:#3c4354;background-color:transparent;padding-left:5px;padding-right:5px}:root.theme-dark .code-highlight td.linenos .special{color:#3c4354;background-color:#ffffc0;padding-left:5px;padding-right:5px}:root.theme-dark .code-highlight span.linenos.special{color:#3c4354;background-color:#ffffc0;padding-left:5px;padding-right:5px}:root.theme-dark .code-highlight .hll{background-color:#6e7681}:root.theme-dark .code-highlight .c{color:#7e8aa1}:root.theme-dark .code-highlight .err{color:#f88f7f}:root.theme-dark .code-highlight .esc{color:#d4d2c8}:root.theme-dark .code-highlight .g{color:#d4d2c8}:root.theme-dark .code-highlight .k{color:#ffad66}:root.theme-dark .code-highlight .l{color:#d5ff80}:root.theme-dark .code-highlight .n{color:#d4d2c8}:root.theme-dark .code-highlight .o{color:#ffad66}:root.theme-dark .code-highlight .x{color:#d4d2c8}:root.theme-dark .code-highlight .p{color:#d4d2c8}:root.theme-dark .code-highlight .ch{color:#f88f7f;font-style:italic}:root.theme-dark .code-highlight .cm{color:#7e8aa1}:root.theme-dark .code-highlight .cp{color:#ffad66;font-weight:700}:root.theme-dark .code-highlight .cpf{color:#7e8aa1}:root.theme-dark .code-highlight .c1{color:#7e8aa1}:root.theme-dark .code-highlight .cs{color:#7e8aa1;font-style:italic}:root.theme-dark .code-highlight .gd{color:#f88f7f;background-color:#3d1e20}:root.theme-dark .code-highlight .ge{color:#d4d2c8;font-style:italic}:root.theme-dark .code-highlight .ges{color:#d4d2c8}:root.theme-dark .code-highlight .gr{color:#f88f7f}:root.theme-dark .code-highlight .gh{color:#d4d2c8}:root.theme-dark .code-highlight .gi{color:#6ad4af;background-color:#19362c}:root.theme-dark .code-highlight .go{color:#7e8aa1}:root.theme-dark .code-highlight .gp{color:#d4d2c8}:root.theme-dark .code-highlight .gs{color:#d4d2c8;font-weight:700}:root.theme-dark .code-highlight .gu{color:#d4d2c8}:root.theme-dark .code-highlight .gt{color:#f88f7f}:root.theme-dark .code-highlight .kc{color:#ffad66}:root.theme-dark .code-highlight .kd{color:#ffad66}:root.theme-dark .code-highlight .kn{color:#ffad66}:root.theme-dark .code-highlight .kp{color:#ffad66}:root.theme-dark .code-highlight .kr{color:#ffad66}:root.theme-dark .code-highlight .kt{color:#73d0ff}:root.theme-dark .code-highlight .ld{color:#d5ff80}:root.theme-dark .code-highlight .m{color:#dfbfff}:root.theme-dark .code-highlight .s{color:#d5ff80}:root.theme-dark .code-highlight .na{color:#ffd173}:root.theme-dark .code-highlight .nb{color:#ffd173}:root.theme-dark .code-highlight .nc{color:#73d0ff}:root.theme-dark .code-highlight .no{color:#ffd173}:root.theme-dark .code-highlight .nd{color:#7e8aa1;font-weight:700;font-style:italic}:root.theme-dark .code-highlight .ni{color:#95e6cb}:root.theme-dark .code-highlight .ne{color:#73d0ff}:root.theme-dark .code-highlight .nf{color:#ffd173}:root.theme-dark .code-highlight .nl{color:#d4d2c8}:root.theme-dark .code-highlight .nn{color:#d4d2c8}:root.theme-dark .code-highlight .nx{color:#d4d2c8}:root.theme-dark .code-highlight .py{color:#ffd173}:root.theme-dark .code-highlight .nt{color:#5ccfe6}:root.theme-dark .code-highlight .nv{color:#d4d2c8}:root.theme-dark .code-highlight .ow{color:#ffad66}:root.theme-dark .code-highlight .pm{color:#d4d2c8}:root.theme-dark .code-highlight .w{color:#d4d2c8}:root.theme-dark .code-highlight .mb{color:#dfbfff}:root.theme-dark .code-highlight .mf{color:#dfbfff}:root.theme-dark .code-highlight .mh{color:#dfbfff}:root.theme-dark .code-highlight .mi{color:#dfbfff}:root.theme-dark .code-highlight .mo{color:#dfbfff}:root.theme-dark .code-highlight .sa{color:#f29e74}:root.theme-dark .code-highlight .sb{color:#d5ff80}:root.theme-dark .code-highlight .sc{color:#d5ff80}:root.theme-dark .code-highlight .dl{color:#d5ff80}:root.theme-dark .code-highlight .sd{color:#7e8aa1}:root.theme-dark .code-highlight .s2{color:#d5ff80}:root.theme-dark .code-highlight .se{color:#95e6cb}:root.theme-dark .code-highlight .sh{color:#d5ff80}:root.theme-dark .code-highlight .si{color:#95e6cb}:root.theme-dark .code-highlight .sx{color:#95e6cb}:root.theme-dark .code-highlight .sr{color:#95e6cb}:root.theme-dark .code-highlight .s1{color:#d5ff80}:root.theme-dark .code-highlight .ss{color:#dfbfff}:root.theme-dark .code-highlight .bp{color:#5ccfe6}:root.theme-dark .code-highlight .fm{color:#ffd173}:root.theme-dark .code-highlight .vc{color:#d4d2c8}:root.theme-dark .code-highlight .vg{color:#d4d2c8}:root.theme-dark .code-highlight .vi{color:#d4d2c8}:root.theme-dark .code-highlight .vm{color:#d4d2c8}:root.theme-dark .code-highlight .il{color:#dfbfff}:root.theme-dark .code-highlight pre{overflow:auto;margin:0;padding:0 0 .75rem}:root.theme-dark .code-highlight .linenos{-webkit-user-select:none;user-select:none;cursor:default;margin-right:8px;text-align:right}:root.theme-dark .code-highlight .linenos::selection{background:transparent}:root.theme-dark .code-highlight .linenos::-moz-selection{background:transparent}:root.theme-dark .code-highlight span.linenos{color:var(--color-line-number)}html.no-js .hide_if_nojs,html.js .show_if_nojs{display:none}.center{text-align:center}.right{float:right}.left{float:left}.invisible{display:none!important}.list-unstyled{list-style-type:none}.list-unstyled li{margin-top:4px;margin-bottom:4px}.danger{background-color:var(--color-error-background)}.warning{background:var(--color-warning-background)}.success{background:var(--color-success-background)}.badge{display:inline-block;color:var(--color-toolkit-badge-font);background-color:var(--color-toolkit-badge-background);text-align:center;white-space:nowrap;vertical-align:baseline;min-width:10px;padding:1px 5px;border-radius:5px}kbd{padding:2px 4px;margin:1px;font-size:90%;color:var(--color-toolkit-kbd-font);background:var(--color-toolkit-kbd-background)}table{width:100%}table.striped tr{border-bottom:1px solid var(--color-settings-tr-hover)}th{padding:.4em}td{padding:0 4px}tr:hover{background:var(--color-settings-tr-hover)!important}div.selectable_url{display:block;border:1px solid var(--color-result-search-url-border);padding:4px;color:var(--color-result-search-url-font);margin:.1em;overflow:hidden;height:1.2em;line-height:1.2em;border-radius:5px}div.selectable_url pre{display:block;font-size:.8em;word-break:break-all;margin:.1em;-webkit-user-select:all;user-select:all}.dialog-error{position:relative;display:flex;padding:1rem;margin:0 0 1em;border:1px solid var(--color-toolkit-dialog-border);text-align:right;border-radius:10px;color:var(--color-error);background:var(--color-error-background);border-color:var(--color-error)}.dialog-error .close{float:left;position:relative;top:-3px;color:inherit;font-size:1.5em}.dialog-error ul,.dialog-error ol,.dialog-error p{margin:1px 0 0}.dialog-error table{width:auto}.dialog-error tr{vertical-align:text-top}.dialog-error tr:hover{background:transparent!important}.dialog-error td{padding:0 1em 0 0;padding-left:1rem;padding-bottom:0;padding-right:0}.dialog-error h4{margin-top:.3em;margin-bottom:.3em}.dialog-error-block{position:relative;display:flex;padding:1rem;margin:0 0 1em;border:1px solid var(--color-toolkit-dialog-border);text-align:right;border-radius:10px;display:block;color:var(--color-error);background:var(--color-error-background);border-color:var(--color-error)}.dialog-error-block .close{float:left;position:relative;top:-3px;color:inherit;font-size:1.5em}.dialog-error-block ul,.dialog-error-block ol,.dialog-error-block p{margin:1px 0 0}.dialog-error-block table{width:auto}.dialog-error-block tr{vertical-align:text-top}.dialog-error-block tr:hover{background:transparent!important}.dialog-error-block td{padding:0 1em 0 0;padding-left:1rem;padding-bottom:0;padding-right:0}.dialog-error-block h4{margin-top:.3em;margin-bottom:.3em}.dialog-warning{position:relative;display:flex;padding:1rem;margin:0 0 1em;border:1px solid var(--color-toolkit-dialog-border);text-align:right;border-radius:10px;color:var(--color-warning);background:var(--color-warning-background);border-color:var(--color-warning)}.dialog-warning .close{float:left;position:relative;top:-3px;color:inherit;font-size:1.5em}.dialog-warning ul,.dialog-warning ol,.dialog-warning p{margin:1px 0 0}.dialog-warning table{width:auto}.dialog-warning tr{vertical-align:text-top}.dialog-warning tr:hover{background:transparent!important}.dialog-warning td{padding:0 1em 0 0;padding-left:1rem;padding-bottom:0;padding-right:0}.dialog-warning h4{margin-top:.3em;margin-bottom:.3em}.dialog-modal{position:relative;display:flex;padding:1rem;border:1px solid var(--color-toolkit-dialog-border);text-align:right;border-radius:10px;display:block;background:var(--color-toolkit-dialog-background);position:fixed;top:50%;left:50%;margin:0 auto;transform:translate(-50%,-50%);z-index:5000}.dialog-modal .close{float:left;position:relative;top:-3px;color:inherit;font-size:1.5em}.dialog-modal ul,.dialog-modal ol,.dialog-modal p{margin:1px 0 0}.dialog-modal table{width:auto}.dialog-modal tr{vertical-align:text-top}.dialog-modal tr:hover{background:transparent!important}.dialog-modal td{padding:0 1em 0 0;padding-left:1rem;padding-bottom:0;padding-right:0}.dialog-modal h4{margin-top:.3em;margin-bottom:.3em}.dialog-modal h3{margin-top:0}.btn-collapse{cursor:pointer}.scrollx{overflow:auto hidden;display:block;padding:0;margin:0;border:none}.tabs .tabs>label{font-size:90%}ul.tabs{border-bottom:1px solid var(--color-toolkit-tabs-section-border);list-style:none;padding-left:0}ul.tabs li{display:flex}.tabs{display:flex;flex-wrap:wrap;width:100%;min-width:100%}.tabs>*{order:2}.tabs>input[type=radio]{display:none}.tabs>label,.tabs>li>a{order:1;padding:.7em;margin:0 .7em;letter-spacing:.5px;text-transform:uppercase;border:solid var(--color-toolkit-tabs-label-border);border-width:0 0 2px 0;color:unset;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;cursor:pointer}.tabs>label.active,.tabs>li>a.active{border-bottom:2px solid var(--color-categories-item-border-selected);background:var(--color-categories-item-selected);color:var(--color-categories-item-selected-font)}.tabs>label:hover,.tabs>li>a:hover{border-bottom:2px solid var(--color-categories-item-border-selected)}.tabs>section{min-width:100%;padding:.7rem 0;box-sizing:border-box;border-top:1px solid var(--color-toolkit-tabs-section-border);display:none}.tabs>label:last-of-type{border-bottom:2px solid var(--color-categories-item-border-selected);background:var(--color-categories-item-selected);color:var(--color-categories-item-selected-font);letter-spacing:-.1px}.tabs>section:last-of-type{display:block}html body .tabs>input:checked~section{display:none}html body .tabs>input:checked~label{position:inherited;background:inherit;border-bottom:2px solid transparent;font-weight:400;color:inherit}html body .tabs>input:checked~label:hover{border-bottom:2px solid var(--color-categories-item-border-selected)}html body .tabs>input:checked+label{border-bottom:2px solid var(--color-categories-item-border-selected);background:var(--color-categories-item-selected);color:var(--color-categories-item-selected-font)}html body .tabs>input:checked+label+section{display:block}select{height:2.4rem;margin-top:0;margin-left:1rem;margin-bottom:0;margin-right:0;padding:.2rem!important;color:var(--color-search-font);font-size:.9rem;z-index:100}select:hover,select:focus{cursor:pointer}@supports ((background-position-x: 100%) and ((appearance: none) or (-webkit-appearance: none) or (-moz-appearance: none))){select{appearance:none;-webkit-appearance:none;-moz-appearance:none;border-width:0 2rem 0 0;border-color:transparent;background:url(data:image/svg+xml;charset=UTF-8,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%0A%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%0A%3Cg%3E%3Cpolygon%20points%3D%22128%2C192%20256%2C320%20384%2C192%22%2F%3E%3C%2Fg%3E%0A%3C%2Fsvg%3E) no-repeat;background-position-x:calc(100% + 2rem);background-size:2rem;background-origin:content-box;background-color:var(--color-toolkit-select-background);outline:medium none;text-overflow:ellipsis;border-radius:5px}select:hover,select:focus{background-color:var(--color-toolkit-select-background-hover)}select option{background-color:var(--color-base-background)}@media (prefers-color-scheme: dark){html.theme-auto select,html.theme-dark select{background-image:url(data:image/svg+xml;charset=UTF-8,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%0A%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%0A%3Cg%3E%3Cpolygon%20fill%3D%22%23ddd%22%20points%3D%22128%2C192%20256%2C320%20384%2C192%22%2F%3E%3C%2Fg%3E%0A%3C%2Fsvg%3E)}}html.theme-dark select{background-image:url(data:image/svg+xml;charset=UTF-8,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%0A%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%0A%3Cg%3E%3Cpolygon%20fill%3D%22%23ddd%22%20points%3D%22128%2C192%20256%2C320%20384%2C192%22%2F%3E%3C%2Fg%3E%0A%3C%2Fsvg%3E)}}input.checkbox-onoff[type=checkbox]{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;display:inline-block;width:2.5em;height:.7em;box-shadow:none!important;margin:0 16px;border-radius:10px;position:relative}input.checkbox-onoff[type=checkbox]:focus,input.checkbox-onoff[type=checkbox]:hover{outline:none}input.checkbox-onoff[type=checkbox]:focus:after{content:"";position:absolute;width:3.5em;height:1.65em;border:1px solid var(--color-btn-background);border-radius:12px;box-shadow:var(--color-btn-background) 0 0 3px;z-index:1200;top:-.55em;left:-.6em}input.checkbox-onoff[type=checkbox]:before{position:absolute;top:-.5em;display:flex;justify-content:center;align-items:center;font-size:.75em;width:1.875em;height:1.875em;border-radius:50%}input.checkbox-onoff[type=checkbox],input.checkbox-onoff.reversed-checkbox[type=checkbox]:checked{background:var(--color-toolkit-checkbox-onoff-off-background)}input.checkbox-onoff[type=checkbox]:before,input.checkbox-onoff.reversed-checkbox[type=checkbox]:checked:before{left:-.5em;content:"✕";color:var(--color-toolkit-checkbox-onoff-off-mark-color);background:var(--color-toolkit-checkbox-onoff-off-mark-background)}input.checkbox-onoff[type=checkbox]:checked,input.checkbox-onoff.reversed-checkbox[type=checkbox]{background:var(--color-toolkit-checkbox-onoff-on-background)}input.checkbox-onoff[type=checkbox]:checked:before,input.checkbox-onoff.reversed-checkbox[type=checkbox]:before{left:calc(100% - 1.5em);content:"✓";color:var(--color-toolkit-checkbox-onoff-on-mark-color);background:var(--color-toolkit-checkbox-onoff-on-mark-background)}@supports (transform: rotate(-45deg)){input[type=checkbox]:not(.checkbox-onoff){-webkit-appearance:none;-moz-appearance:none;appearance:none;width:20px;height:20px;cursor:pointer;position:relative;top:0;left:0;border:2px solid var(--color-toolkit-checkbox-input-border);border-radius:.3em}input[type=checkbox]:not(.checkbox-onoff):after{content:"";width:9px;height:5px;position:absolute;top:3px;left:2px;border:3px solid var(--color-toolkit-checkbox-label-border);border-top:none;border-right:none;background:transparent;opacity:0;transform:rotate(-45deg)}input[type=checkbox]:not(.checkbox-onoff):checked:after{border-color:var(--color-toolkit-checkbox-input-border);opacity:1}input[type=checkbox][disabled]:not(.checkbox-onoff){border:inherit;background-color:transparent!important;cursor:inherit}input.checkbox[type=checkbox]:not(:checked,[disabled],.checkbox-onoff):hover:after{opacity:.5}}@media screen and (max-width: 50em){.tabs>label{width:100%}}.loader,.loader:after{border-radius:50%;width:2em;height:2em}.loader{margin:1em auto;font-size:10px;position:relative;text-indent:-9999em;border-top:.5em solid var(--color-toolkit-loader-border);border-right:.5em solid var(--color-toolkit-loader-border);border-bottom:.5em solid var(--color-toolkit-loader-border);border-left:.5em solid var(--color-toolkit-loader-borderleft);-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0);-webkit-animation:load8 1.2s infinite linear;animation:load8 1.2s infinite linear}@-webkit-keyframes load8{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes load8{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.engine-tooltip{display:none;position:absolute;padding:.5rem 1rem;margin:0 0 0 2rem;border:1px solid var(--color-toolkit-engine-tooltip-border);background:var(--color-toolkit-engine-tooltip-background);font-size:14px;font-weight:400;z-index:5000;text-align:left;border-radius:10px}th:hover .engine-tooltip,td:hover .engine-tooltip,.engine-tooltip:hover{display:inline-block}.stacked-bar-chart{margin:0;padding:0 .125rem 0 4rem;width:100%;width:-moz-available;width:-webkit-fill-available;width:fill;flex-flow:row nowrap;align-items:center;display:inline-flex}.stacked-bar-chart-value{width:3rem;display:inline-block;position:absolute;padding:0 .5rem;text-align:right}.stacked-bar-chart-base{display:flex;flex-shrink:0;flex-grow:0;flex-basis:unset}.stacked-bar-chart-median{display:flex;flex-shrink:0;flex-grow:0;flex-basis:unset;background:var(--color-base-font);border:1px solid rgba(var(--color-base-font-rgb),.9);padding:.3rem 0}.stacked-bar-chart-rate80{display:flex;flex-shrink:0;flex-grow:0;flex-basis:unset;background:transparent;border:1px solid rgba(var(--color-base-font-rgb),.3);padding:.3rem 0}.stacked-bar-chart-rate95{display:flex;flex-shrink:0;flex-grow:0;flex-basis:unset;background:transparent;border-bottom:1px dotted rgba(var(--color-base-font-rgb),.5);padding:0}.stacked-bar-chart-rate100{display:flex;flex-shrink:0;flex-grow:0;flex-basis:unset;background:transparent;border-left:1px solid rgba(var(--color-base-font-rgb),.9);padding:.4rem 0;width:1px}/*! Autocomplete.js v2.6.3 | license MIT | (c) 2017, Baptiste Donaux | http://autocomplete-js.com */.autocomplete{position:absolute;width:44rem;max-height:0;overflow-y:hidden;text-align:right;border-radius:10px}.autocomplete:active,.autocomplete:focus,.autocomplete:hover{background-color:var(--color-autocomplete-background)}.autocomplete:empty{display:none}.autocomplete>ul{list-style-type:none;margin:0;padding:0}.autocomplete>ul>li{cursor:pointer;padding:.5rem 1rem}.autocomplete>ul>li.active,.autocomplete>ul>li:active,.autocomplete>ul>li:focus,.autocomplete>ul>li:hover{background-color:var(--color-autocomplete-background-hover)}.autocomplete>ul>li.active a:active,.autocomplete>ul>li:active a:active,.autocomplete>ul>li:focus a:active,.autocomplete>ul>li:hover a:active,.autocomplete>ul>li.active a:focus,.autocomplete>ul>li:active a:focus,.autocomplete>ul>li:focus a:focus,.autocomplete>ul>li:hover a:focus,.autocomplete>ul>li.active a:hover,.autocomplete>ul>li:active a:hover,.autocomplete>ul>li:focus a:hover,.autocomplete>ul>li:hover a:hover{text-decoration:none}.autocomplete>ul>li.locked{cursor:inherit}.autocomplete.open{display:block;background-color:var(--color-autocomplete-background);color:var(--color-autocomplete-font);max-height:32rem;overflow-y:auto;z-index:5000;margin-top:3.5rem;border-radius:.8rem}.autocomplete.open:empty{display:none}@media screen and (max-width: 50em){.autocomplete{width:100%}.autocomplete>ul>li{padding:1rem}}#main_results #results.image-detail-open.only_template_images{width:min(98%,59.25rem)!important}#main_results #results.only_template_images.image-detail-open #backToTop{right:56.75rem!important;left:inherit}article.result-images .detail{display:none}#results.image-detail-open article.result-images[data-vim-selected] .detail{display:flex;flex-direction:column;position:fixed;right:60rem;left:0;top:13rem;transition:top 64ms ease-in 0s;bottom:0;background:var(--color-result-detail-background);border:1px solid var(--color-result-detail-background);z-index:1000;padding:4rem 3rem 3rem;overflow-y:scroll}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-images-source{display:block;flex:1;text-align:left;width:100%;border:none;text-decoration:none}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-images-source img{padding:0;margin:0;border:none;object-fit:contain;width:inherit;height:inherit;max-width:100%;min-height:inherit;max-height:calc(100vh - 42rem);background:inherit}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels{color:var(--color-result-detail-font);height:19rem}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels hr{border-top:1px solid var(--color-result-detail-hr);border-bottom:none}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels h4{height:2rem;overflow:hidden;text-overflow:ellipsis;font-size:.9rem;margin-bottom:0}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p{color:var(--color-result-detail-label-font);font-size:.9rem;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;margin:.8rem 0}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p span{display:inline-block;width:12rem}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels h4,#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p,#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a{text-align:right}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p.result-content{height:2rem;line-height:unset;overflow:hidden;text-overflow:ellipsis}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p.result-url{white-space:nowrap;overflow:hidden hidden;text-overflow:ellipsis}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p.result-content:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p.result-url:hover{position:relative;overflow:inherit!important;background:var(--color-result-detail-background);text-overflow:inherit!important}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a,#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a:visited,#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a:active{color:var(--color-result-detail-link)}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a:hover{text-decoration:underline}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close{top:1rem;right:1rem;padding:.4rem}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous{top:1rem;left:6rem;padding:.4rem .3rem .4rem .5rem}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next{top:1rem;left:2rem;padding:.4rem}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous{border-radius:50%;display:block;width:1.5rem;height:1.5rem;position:absolute;filter:opacity(40%);z-index:1200}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close span,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next span,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous span{display:block;width:1.5rem;height:1.5rem;text-align:center}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next span:before,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous span:before{vertical-align:sub}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close:visited,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close:active,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous:visited,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous:active,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next:visited,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next:active{color:var(--color-result-detail-font);background:var(--color-result-detail-background);border:1px solid var(--color-result-detail-font)}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close:focus,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous:focus,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next:focus,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next:hover{filter:opacity(80%)}#results.image-detail-open article.result-images[data-vim-selected] .detail .loader{position:absolute;top:1rem;left:50%;border-top:.5em solid var(--color-result-detail-loader-border);border-right:.5em solid var(--color-result-detail-loader-border);border-bottom:.5em solid var(--color-result-detail-loader-border);border-left:.5em solid var(--color-result-detail-loader-borderleft)}#results.image-detail-open.scrolling article.result-images[data-vim-selected] .detail{top:0}#results.image-detail-open.scrolling article.result-images[data-vim-selected] .detail a.result-images-source img{max-height:calc(100vh - 25rem)}@media screen and (max-width: 79.75em){#results.image-detail-open article.result-images[data-vim-selected] .detail{top:0;right:0}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-images-source{display:flex;flex-direction:column;justify-content:center}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-images-source img{width:100%;max-height:calc(100vh - 24rem)}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next{left:1rem}}@media screen and (max-width: 50em){#results.image-detail-open article.result-images[data-vim-selected] .detail{top:0;right:0;padding:1rem}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-images-source img{width:100%;max-height:calc(100vh - 20rem);margin:0}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p span{width:inherit;margin-left:1rem}}.dialog-modal{animation-name:dialogmodal;animation-duration:.13s}@keyframes dialogmodal{0%{opacity:0}50%{opacity:.5;transform:translate(-50%,-50%) scale(1.05)}}input.checkbox-onoff[type=checkbox]:before{transition:left .25s}iframe[src^="https://w.soundcloud.com"]{height:120px}iframe[src^="https://www.deezer.com"]{height:94px}iframe[src^="https://www.mixcloud.com"]{height:250px}iframe[src^="https://bandcamp.com/EmbeddedPlayer"]{height:350px}iframe[src^="https://bandcamp.com/EmbeddedPlayer/track"]{height:120px}iframe[src^="https://genius.com/songs"]{height:65px}.info-page code{font-family:monospace;border-radius:5px;background-color:var(--color-doc-code-background);color:var(--color-doc-code);padding:.2rem;border:0 none}.stats_endpoint .github-issue-button{display:block;font-size:16px}.stats_endpoint .issue-hide{display:none}.stats_endpoint input[type=checked]{position:absolute}.stats_endpoint label{margin:1rem 1rem 1rem 0}.stats_endpoint .step_content{margin:1rem 1rem 1rem 2rem}.stats_endpoint .step1,.stats_endpoint .step2{visibility:hidden}.stats_endpoint .step1_delay{transition:visibility 0s linear 4s}.stats_endpoint #step1:checked~.step1,.stats_endpoint #step2:checked~.step2{visibility:visible}.engine-stats{border-spacing:0;border-collapse:collapse}.engine-stats tr td,.engine-stats tr th{border-bottom:1px solid var(--color-result-border);padding:.25rem}.engine-stats table.engine-tooltip{border-spacing:0;border-collapse:collapse}.engine-stats table.engine-tooltip td,.engine-stats table.engine-tooltip th{border:none}.engine-stats .engine-name{width:20rem}.engine-stats .engine-score{width:7rem;text-align:right}.engine-stats .engine-reliability{text-align:right}table.engine-error th.engine-error-type,table.engine-error td.engine-error-type,failed-test{width:10rem}.engine-errors{margin-top:3rem}.engine-errors table.engine-error{max-width:1280px;margin:1rem 0 3rem;border:1px solid var(--color-result-border);text-align:right}.engine-errors table.engine-error tr th,.engine-errors table.engine-error tr td{padding:.5rem}.engine-errors table.engine-error span.log_parameters{border-right:1px solid solid var(--color-result-border);padding:0 1rem 0 0;margin:0 0 0 .5rem}.bar-chart-value{width:3em;display:inline-block;text-align:right;padding-right:.5rem}.bar-chart-graph{width:calc(100% - 5rem);display:inline-block}.bar-chart-bar{border:3px solid var(--color-bar-chart-primary);margin:1px 0}.bar-chart-serie1{border:3px solid var(--color-bar-chart-primary);margin:1px 0;float:left}.bar-chart-serie2{border:3px solid var(--color-bar-chart-secondary);margin:1px 0;float:left}.bar0{width:0;border:0}.bar1{width:1%}.bar2{width:2%}.bar3{width:3%}.bar4{width:4%}.bar5{width:5%}.bar6{width:6%}.bar7{width:7%}.bar8{width:8%}.bar9{width:9%}.bar10{width:10%}.bar11{width:11%}.bar12{width:12%}.bar13{width:13%}.bar14{width:14%}.bar15{width:15%}.bar16{width:16%}.bar17{width:17%}.bar18{width:18%}.bar19{width:19%}.bar20{width:20%}.bar21{width:21%}.bar22{width:22%}.bar23{width:23%}.bar24{width:24%}.bar25{width:25%}.bar26{width:26%}.bar27{width:27%}.bar28{width:28%}.bar29{width:29%}.bar30{width:30%}.bar31{width:31%}.bar32{width:32%}.bar33{width:33%}.bar34{width:34%}.bar35{width:35%}.bar36{width:36%}.bar37{width:37%}.bar38{width:38%}.bar39{width:39%}.bar40{width:40%}.bar41{width:41%}.bar42{width:42%}.bar43{width:43%}.bar44{width:44%}.bar45{width:45%}.bar46{width:46%}.bar47{width:47%}.bar48{width:48%}.bar49{width:49%}.bar50{width:50%}.bar51{width:51%}.bar52{width:52%}.bar53{width:53%}.bar54{width:54%}.bar55{width:55%}.bar56{width:56%}.bar57{width:57%}.bar58{width:58%}.bar59{width:59%}.bar60{width:60%}.bar61{width:61%}.bar62{width:62%}.bar63{width:63%}.bar64{width:64%}.bar65{width:65%}.bar66{width:66%}.bar67{width:67%}.bar68{width:68%}.bar69{width:69%}.bar70{width:70%}.bar71{width:71%}.bar72{width:72%}.bar73{width:73%}.bar74{width:74%}.bar75{width:75%}.bar76{width:76%}.bar77{width:77%}.bar78{width:78%}.bar79{width:79%}.bar80{width:80%}.bar81{width:81%}.bar82{width:82%}.bar83{width:83%}.bar84{width:84%}.bar85{width:85%}.bar86{width:86%}.bar87{width:87%}.bar88{width:88%}.bar89{width:89%}.bar90{width:90%}.bar91{width:91%}.bar92{width:92%}.bar93{width:93%}.bar94{width:94%}.bar95{width:95%}.bar96{width:96%}.bar97{width:97%}.bar98{width:98%}.bar99{width:99%}.bar100{width:100%}.osm-map-box{height:300px;width:100%;margin:10px 0}#main_index{margin-top:26vh}.index{text-align:center}.index .title{background:url(../img/searxng.png) no-repeat;min-height:4rem;margin:4rem auto;background-position:center;background-size:contain}.index h1{font-size:4em;visibility:hidden}.index #search,.index #search_header{margin:0 auto;background:inherit;border:inherit;padding:0;display:block}.index .search_filters{display:block;margin:1em 0}.index .category label{padding:6px 10px;border-bottom:initial!important}@media screen and (max-width: 79.75em){div.title h1{font-size:1em}#main_index{margin-top:6em}}table{border-collapse:collapse}table th,table td{text-align:center;padding:1rem .5rem;text-align:right}table tr.pref-group th{font-weight:400;text-align:right;background:var(--color-settings-table-group-background)}#main_preferences form{width:100%}#main_preferences fieldset{margin:8px;border:none}#main_preferences legend{margin:0;padding:5px 0 0;display:block;float:right;width:300px}#main_preferences input[type=text]{width:13.25rem;color:var(--color-toolkit-input-text-font);border:none;background:none repeat scroll 0 0 var(--color-toolkit-select-background);padding:.2rem .4rem;height:2rem;border-radius:5px}#main_preferences input[type=text]:hover,#main_preferences input[type=text]:focus{background-color:var(--color-toolkit-select-background-hover)}#main_preferences div.pref-group{width:100%;font-weight:400;padding:1rem .5rem;text-align:right;background:var(--color-settings-table-group-background)}#main_preferences .value{margin:0;padding:0;float:right;width:15em}#main_preferences .value select,#main_preferences .value input[type=text]{font-size:inherit!important;margin-top:0;margin-left:1rem;margin-bottom:0;margin-right:0}#main_preferences .value select{width:14rem}#main_preferences .value select:focus,#main_preferences .value input:focus{outline:none;box-shadow:0 0 1px 1px var(--color-btn-background)}#main_preferences .description{margin:0;padding:5px 0 0;float:left;width:50%;color:var(--color-settings-engine-description-font);font-size:90%}#main_preferences .bang{text-align:right;border-radius:5px;background-color:var(--color-doc-code-background);color:var(--color-doc-code);padding:.2rem;border:0 none}#main_preferences .category{margin-left:.5rem}#main_preferences .category label{border:2px solid transparent;padding:.2rem .4rem;border-radius:5px}#main_preferences .category input[type=checkbox]:checked+label{border:2px solid var(--color-categories-item-border-selected)}#main_preferences table.table_engines th.name label{cursor:pointer}#main_preferences table.table_engines th.name .engine-tooltip{margin-top:1.8rem;right:calc((100% - 85em)/2 + 10em);max-width:40rem}#main_preferences table.table_engines th.name .engine-tooltip .engine-description{margin-top:.5rem}#main_preferences table.table_engines th.name .engine-tooltip .bang{margin:.3rem}#main_preferences table.table_engines .checkbox-col,#main_preferences table.table_engines .name,#main_preferences table.table_engines .shortcut{text-align:right}#main_preferences table.cookies{width:100%;direction:ltr}#main_preferences table.cookies th,#main_preferences table.cookies td{text-align:left;font-family:monospace;font-size:1rem;padding:.5em;vertical-align:top}#main_preferences table.cookies td:first-child{word-break:keep-all;width:14rem;padding-right:1rem}#main_preferences table.cookies td:last-child{word-break:break-all}#main_preferences table.cookies>tbody>tr:nth-child(2n)>th,#main_preferences table.cookies>tbody>tr:nth-child(2n)>td{background-color:var(--color-settings-tr-hover)}#main_preferences .preferences_back{background:none repeat scroll 0 0 var(--color-btn-background);color:var(--color-btn-font);border:0 none;border-radius:10px;cursor:pointer;display:inline-block;margin:2px 4px;padding:.7em}#main_preferences .preferences_back a{color:var(--color-settings-return-font)}#main_preferences .preferences_back a:first-letter{text-transform:uppercase}#main_preferences #toggle-all-engines-container{width:max-content;margin-left:auto}#main_preferences div.selectable_url pre{width:100%}#main_preferences #copy-hash-container{display:flex;align-items:center;gap:.5rem}#main_preferences #copy-hash-container div.selectable_url pre{width:auto;flex-grow:1}#main_preferences #pref-hash-input{width:100%}@media screen and (max-width: 79.75em){.preferences_back{clear:both}.engine-tooltip{right:10em!important}}#search{padding:0;margin:0}#search_header{padding-top:1.5em;padding-left:2em;padding-right:7rem;margin:0;background:var(--color-header-background);border-bottom:1px solid var(--color-header-border);display:grid;gap:1rem 1.2rem;grid-template-columns:3rem 1fr;grid-template-areas:"logo search" "spacer categories"}.category_checkbox,.category_button{display:inline-block;position:relative;margin-left:1rem;padding:0}.category_checkbox input{display:none}.category_checkbox label{cursor:pointer;padding:.2rem 0;display:inline-flex;text-transform:capitalize;font-size:.9em;border-bottom:2px solid transparent;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.category_checkbox label svg{padding-right:.2rem}.category_checkbox label div.category_name{margin:auto 0}.category_checkbox input[type=checkbox]:checked+label{color:var(--color-categories-item-selected-font);border-bottom:2px solid var(--color-categories-item-border-selected)}button.category_button{background-color:inherit;color:var(--color-base-font);cursor:pointer;padding:.2rem 0;display:inline-flex;align-items:center;text-transform:capitalize;font-size:.9em;border:none;border-bottom:2px solid transparent}button.category_button svg{padding-right:.2rem}button.category_button.selected,button.category_button:active{color:var(--color-categories-item-selected-font);border-bottom:2px solid var(--color-categories-item-border-selected)}.no-js #categories_container:has(button.category_button:focus-within) button.category_button.selected{color:var(--color-base-font);border-bottom:none}.no-js #categories_container:has(button.category_button:focus-within) button.category_button:focus-within{color:var(--color-categories-item-selected-font);border-bottom:2px solid var(--color-categories-item-border-selected)}#search_logo{padding:.5rem 10px 0;grid-area:logo;display:flex;align-items:center;justify-content:center}#search_logo svg{flex:1;width:30px;height:30px;margin:.5rem 0 auto}.search_categories{grid-area:categories}.search_categories .help{display:none}.search_categories:hover .help{display:block;position:absolute;background:var(--color-base-background);padding:1rem .6rem .6rem 0;z-index:1000;width:100%;left:-.1rem}#search_view{padding:.5rem .3rem 0 .5rem;grid-area:search}body.results_endpoint #search_view{padding:.5rem 2.8rem 0 0}.search_box{border-radius:.8rem;width:44rem;display:inline-flex;flex-direction:row;white-space:nowrap;box-shadow:var(--color-search-shadow)}#clear_search{display:block;border-collapse:separate;box-sizing:border-box;width:1.8rem;margin:0;padding:.8rem .2rem;background:none repeat scroll 0 0 var(--color-search-background);border:none;outline:none;color:var(--color-search-font);font-size:1.1rem;z-index:1000}#clear_search:hover{color:var(--color-search-background-hover)}#clear_search.empty *,html.no-js #clear_search.hide_if_nojs{display:none}#q,#send_search{display:block;margin:0;padding:.8rem;background:none repeat scroll 0 0 var(--color-search-background);border:none;outline:none;color:var(--color-search-font);font-size:1.1rem;z-index:100}#q{width:100%;padding-right:1rem;padding-left:0!important;border-radius:0 .8rem .8rem 0}#q::-ms-clear,#q::-webkit-search-cancel-button{display:none}#send_search{border-radius:.8rem 0 0 .8rem}#send_search:hover{cursor:pointer;background-color:var(--color-search-background-hover);color:var(--color-search-background)}.no-js #clear_search,.no-js #send_search{width:auto!important;border-right:1px solid var(--color-search-border)}.search_filters{margin-top:.6rem;margin-left:0;margin-bottom:0;margin-right:10.6rem;display:flex;overflow-x:auto;overscroll-behavior-inline:contain}.search_filters select{background-color:inherit}.search_filters select:hover,.search_filters select:focus{color:var(--color-base-font)}@media screen and (max-width: 79.75em){#search_header{padding:1.5em .5rem 0;column-gap:.5rem}.search_filters{margin-top:.6rem;margin-left:0;margin-bottom:0;margin-right:3.5rem}#categories{font-size:90%;clear:both}}@media screen and (max-width: 79.75em) and (hover: none){#main_index #categories_container,#main_results #categories_container{width:max-content}#main_index #categories_container .category_checkbox,#main_results #categories_container .category_checkbox{display:inline-block;width:auto}#main_index #categories,#main_results #categories{width:100%;text-align:right;overflow:scroll hidden;-webkit-overflow-scrolling:touch}}@media screen and (max-width: 50em){#search_header{width:100%;margin:0;padding:.1rem 0 0;gap:0 0;grid-template-areas:"logo search" "categories categories"}.search_logo{padding:0}.search_box{width:98%;display:flex}#q{width:100%;flex:1}.search_filters{margin:0 10px;padding:.5rem 0}.category{display:inline-block;width:auto;margin:0}.category svg{display:none}.category_checkbox label,.category_button{padding:1rem!important;margin:0!important}#search_view:focus-within{display:block;background-color:var(--color-search-background);position:absolute;top:0;height:100%;width:100%;z-index:2000}#search_view:focus-within .search_box{border-bottom:1px solid var(--color-search-border);width:100%;border-radius:0;box-shadow:none}#search_view:focus-within .search_box #send_search{margin-left:0!important}#search_view:focus-within .search_box *{border:none;border-radius:0;box-shadow:none}#main_results #q:placeholder-shown~#send_search{margin-left:2.6rem;transition:margin .1s}}@media screen and (max-width: 20rem){#search_header{grid-template-areas:"search search" "categories categories"}#search_logo{display:none}}#categories{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}#categories::-webkit-scrollbar{width:0;height:0}#categories_container{position:relative}.favicon img{height:1.5rem;width:1.5rem;border-radius:10%;background-color:var(--color-favicon-background-color);border:1px solid var(--color-favicon-border-color);display:flex}@media screen and (min-width: 50em){.center-alignment-yes #main_results{--center-page-width: 48rem}}@media screen and (width >= 62rem){.center-alignment-yes #main_results{--center-page-width: 60rem}}@media screen and (min-width: 79.75em){.center-alignment-yes #main_results{--center-page-width: 73rem}}@media screen and (min-width: 50em) and (max-width: 79.75em){.center-alignment-yes #main_results #results{grid-template-columns:60% calc(40% - 5rem);margin-left:0;margin-right:0}.center-alignment-yes #main_results #urls{margin-right:3rem}.center-alignment-yes #main_results #sidebar{margin-left:1rem}.center-alignment-yes #main_results #backToTop{right:calc(60% + 1rem)}}@media screen and (min-width: 79.75em){.center-alignment-yes #main_results{display:flex;flex-direction:column;align-items:center}.center-alignment-yes #main_results #search{width:100%;display:flex;flex-direction:column;align-items:center}.center-alignment-yes #main_results #search_header{grid-template-columns:calc(50% - 4.5rem - var(--center-page-width) / 2) 3rem var(--center-page-width);grid-template-areas:"na logo search" "na spacer categories";column-gap:1.2rem;width:100%;padding-left:0;padding-right:0}.center-alignment-yes #main_results .search_filters{margin-right:.5rem;width:var(--center-page-width)}.center-alignment-yes #main_results #results{margin-left:2rem;margin-right:10rem}.center-alignment-yes #main_results #results.only_template_images,.center-alignment-yes #main_results #results.image-detail-open{align-self:flex-start}.center-alignment-yes #main_results #results:not(.only_template_images,.image-detail-open){margin-right:1.5rem;grid-template-columns:calc(var(--center-page-width) - 5rem - 25rem) 25rem}.center-alignment-yes #main_results #results:not(.only_template_images,.image-detail-open) #backToTop{right:calc(50% - 25rem - 5rem + 1rem + var(--center-page-width) / 2)}.center-alignment-yes #main_results #results .result .content{max-width:inherit}.center-alignment-yes #main_results #urls{margin-right:0}.center-alignment-yes #main_results #sidebar{margin-left:0}}.sxng-icon-set{display:inline-block;vertical-align:bottom;line-height:1;text-decoration:inherit;transform:scaleX(-1)}.sxng-icon-set-small{width:1rem;height:1rem;display:inline-block;vertical-align:bottom;line-height:1;text-decoration:inherit;transform:scaleX(-1)}.sxng-icon-set-big{width:1.5rem;height:1.5rem;display:inline-block;vertical-align:bottom;line-height:1;text-decoration:inherit;transform:scaleX(-1)}html{font-family:sans-serif;font-size:.9em;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%;color:var(--color-base-font);background-color:var(--color-base-background);padding:0;margin:0;scroll-behavior:smooth}body,main{padding:0;margin:0}body{display:flex;flex-direction:column;height:100vh;margin:0}@supports (height: 100dvh){body{height:100dvh}}main{width:100%;margin-bottom:2rem;flex:1}.page_with_header{margin:2em auto;width:85em}footer{clear:both;min-height:4rem;padding:1rem 0;width:100%;text-align:center;background-color:var(--color-footer-background);border-top:1px solid var(--color-footer-border);overflow:hidden}footer p{font-size:.9em}.page_with_header .logo{height:40px}input[type=submit],#results button[type=submit],.button{padding:.7rem;display:inline-block;background:var(--color-btn-background);color:var(--color-btn-font);border-radius:10px;border:0;cursor:pointer}a{text-decoration:none;color:var(--color-url-font)}a:visited,a:visited .highlight{color:var(--color-url-visited-font)}article[data-vim-selected]{background:var(--color-result-vim-selected);border-right:.2rem solid var(--color-result-vim-arrow);border-radius:10px 0 0 10px}article.result-images[data-vim-selected]{background:var(--color-result-vim-arrow);border:none;border-radius:10px}article.result-images[data-vim-selected] .image_thumbnail{filter:opacity(60%)}article.result-images[data-vim-selected] span.title,article.result-images[data-vim-selected] span.source{color:var(--color-result-image-span-font-selected)}article[data-vim-selected].category-videos,article[data-vim-selected].category-news,article[data-vim-selected].category-map,article[data-vim-selected].category-music,article[data-vim-selected].category-files,article[data-vim-selected].category-social{border:1px solid var(--color-result-vim-arrow);border-radius:10px}.result{margin:.125rem 0;padding:1rem;box-sizing:border-box;width:100%;border-right:.2rem solid transparent}.result h3{font-size:1.2rem;word-wrap:break-word;margin:.4rem 0;padding:0}.result h3 a{color:var(--color-result-link-font);font-weight:400;font-size:1.1em}.result h3 a:visited{color:var(--color-result-link-visited-font)}.result h3 a:focus,.result h3 a:hover{text-decoration:underline;border:none;outline:none}.result .cache_link,.result .proxyfied_link{font-size:smaller!important;margin-left:.5rem}.result .content,.result .stat{font-size:.9em;margin:0;padding:0;max-width:54em;word-wrap:break-word;line-height:1.24}.result .content .highlight,.result .stat .highlight{color:var(--color-result-description-highlight-font);background:inherit;font-weight:700}.result .altlink a{font-size:.9em;margin:0 10px 0 0;padding:5px 10px;border-radius:5px;background:var(--color-show-btn-background);color:var(--color-show-btn-font);cursor:pointer}.result .altlink a:hover{background:var(--color-btn-background);color:var(--color-btn-font)}.result .codelines .highlight{color:inherit;background:inherit;font-weight:400}.result .url_header{display:flex;gap:.5rem}.result .url_wrapper{display:flex;align-items:center;font-size:1rem;color:var(--color-result-url-font);flex-flow:row nowrap;overflow:hidden;margin:0;padding:0}.result .url_wrapper .url_o1{white-space:nowrap;flex-shrink:1;padding-bottom:1px}.result .url_wrapper .url_o1 .url_i1{unicode-bidi:plaintext}.result .url_wrapper .url_o1:after{content:" ";width:1ch;display:inline-block}.result .url_wrapper .url_o2{overflow:hidden;white-space:nowrap;flex:0 1 content;text-align:right;padding-bottom:1px}.result .url_wrapper .url_o2 .url_i2{float:right}.result .published_date,.result .result_length,.result .result_views,.result .result_author,.result .result_shipping,.result .result_source_country{font-size:.8em;color:var(--color-result-publishdate-font)}.result .result_price{font-size:1.2em;color:var(--color-result-description-highlight-font)}.result img.thumbnail{float:right;padding-top:.6rem;padding-left:1rem;width:7rem;height:unset}.result .break{clear:both}.result-paper .attributes,.result-packages .attributes{display:table;border-spacing:.125rem}.result-paper .attributes div,.result-packages .attributes div{display:table-row}.result-paper .attributes div span,.result-packages .attributes div span{font-size:.9rem;margin-top:.25rem;display:table-cell}.result-paper .attributes div span time,.result-packages .attributes div span time{font-size:.9rem}.result-paper .attributes div span:first-child,.result-packages .attributes div span:first-child{color:var(--color-base-font);min-width:10rem}.result-paper .attributes div span:nth-child(2),.result-packages .attributes div span:nth-child(2){color:var(--color-result-publishdate-font)}.result-paper .content,.result-packages .content{margin-top:.25rem}.result-paper .comments,.result-packages .comments{font-size:.9rem;margin:.25rem 0 0;padding:0;word-wrap:break-word;line-height:1.24;font-style:italic}.result-packages .attributes{margin-top:.3rem}.template_group_images{display:flex;flex-wrap:wrap}.template_group_images:after{flex-grow:10;content:""}.category-videos,.category-news,.category-map,.category-music,.category-files,.category-social{border:1px solid var(--color-result-border);margin:0 .5rem 1rem!important;border-radius:10px}.category-social .image{width:auto!important;min-width:48px;min-height:48px;padding:0 5px 25px 0!important}.audio-control audio{width:100%;padding:10px 0 0}.embedded-content iframe{width:100%;padding:10px 0 0}.result-videos img.thumbnail{float:right;padding-top:.6rem;padding-left:1rem;width:20rem;height:unset}.result-videos .content{overflow:hidden}.result-videos .embedded-video iframe{width:100%;aspect-ratio:16 / 9;padding:10px 0 0}@supports not (aspect-ratio: 1 / 1){.result-videos .embedded-video iframe{height:25.3125rem}}.engines{float:left;display:flex;flex-wrap:wrap;justify-content:flex-end;color:var(--color-result-engines-font)}.engines span{font-size:smaller;margin-top:0;margin-bottom:0;margin-left:.5rem;margin-right:0}.small_font{font-size:.8em}.highlight{color:var(--color-result-link-font-highlight);background:inherit}.empty_element{font-style:italic}.result-images{flex-grow:1;padding:.5rem .5rem 3rem;margin:.25rem;border:none!important;height:12rem;width:unset}.result-images>a{position:relative;outline:none}.result-images img{margin:0;padding:0;border:none;height:100%;width:auto;object-fit:cover;vertical-align:bottom;background:var(--color-result-image-background)}.result-images .image_resolution{position:absolute;right:0;bottom:0;background:var(--color-image-resolution-background);padding:.3rem .5rem;font-size:.9rem;color:var(--color-image-resolution-font);border-top-left-radius:.3rem}.result-images span.title,.result-images span.source{display:block;position:absolute;width:100%;font-size:.9rem;color:var(--color-result-image-span-font);padding:.5rem 0 0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.result-images span.source{padding:1.8rem 0 0;font-size:.7rem}.result-map img.image{float:left!important;height:100px!important;width:auto!important}.result-map table{font-size:.9em;width:auto;border-collapse:separate;border-spacing:0 .35rem}.result-map table th{font-weight:inherit;width:17rem;vertical-align:top;text-align:right}.result-map table td{vertical-align:top;text-align:right}.hidden{display:none!important}#results{margin-top:1rem;margin-left:2rem;margin-bottom:0;margin-right:10rem;display:grid;grid-template:"corrections sidebar" min-content "answers sidebar" min-content "urls sidebar" 1fr "pagination sidebar" min-content / 45rem 25rem;gap:0 5rem}#results #sidebar *:first-child{margin-top:0}#urls{padding:0;grid-area:urls}#apis .wrapper{display:flex}#suggestions .wrapper{display:flex;flex-flow:column;justify-content:flex-end}#suggestions .wrapper form{display:inline-block;flex:1 1 50%}#suggestions input,#infoboxes input{padding:0;margin:3px;font-size:.9em;display:inline-block;background:transparent;color:var(--color-result-search-url-font);cursor:pointer;width:100%;text-overflow:ellipsis;overflow:hidden;text-align:left}#suggestions input[type=submit],#infoboxes input[type=submit],#suggestions .infobox .url a,#infoboxes .infobox .url a{color:var(--color-result-link-font);text-decoration:none;font-size:.9rem}#suggestions input[type=submit]:hover,#infoboxes input[type=submit]:hover,#suggestions .infobox .url a:hover,#infoboxes .infobox .url a:hover{text-decoration:underline}#corrections{grid-area:corrections;display:flex;flex-flow:row wrap;margin:0 0 1em}#corrections h4,#corrections input[type=submit]{display:inline-block;padding:.5rem;margin:.5rem}#corrections input[type=submit]{font-size:.8rem;border-radius:5px}#infoboxes .title,#suggestions .title,#search_url .title,#engines_msg .title,#apis .title{margin:2em 0 .5em;color:var(--color-base-font)}summary.title{cursor:pointer;padding-top:1em}.sidebar-collapsible{border-top:1px solid var(--color-sidebar-border);padding-bottom:.5em}#sidebar-end-collapsible{border-bottom:1px solid var(--color-sidebar-border);width:100%}#answers{grid-area:answers;background:var(--color-answer-background);padding:1rem;margin:1rem 0;margin-top:0;color:var(--color-answer-font);border-radius:10px}#answers h4{display:none}#answers span{overflow-wrap:anywhere}#answers .answer{display:flex;flex-direction:column}#answers .answer-url{margin:5px 10px 10px auto}#infoboxes form{min-width:210px}#sidebar{grid-area:sidebar;word-wrap:break-word;color:var(--color-sidebar-font)}#sidebar .infobox{margin:10px 0;border:1px solid var(--color-sidebar-border);padding:1rem;font-size:.9em;border-radius:10px}#sidebar .infobox h2{margin:0 0 .5em}#sidebar .infobox img{max-width:100%;max-height:12em;display:block;margin:0 auto;padding:0}#sidebar .infobox dt{font-weight:700}#sidebar .infobox .attributes dl{margin:.5em 0}#sidebar .infobox .attributes dt{display:inline;margin:.5em 0 .5em .25em;padding:0}#sidebar .infobox .attributes dd{display:inline;margin:.5em 0;padding:0}#sidebar .infobox input{font-size:1em}#sidebar .infobox br,#sidebar .infobox .attributes,#sidebar .infobox .urls{clear:both}#apis input{font-size:.9em;margin:0 10px 0 0;padding:5px 10px;border-radius:5px;background:var(--color-show-btn-background);color:var(--color-show-btn-font);cursor:pointer}#apis input:hover{background:var(--color-btn-background);color:var(--color-btn-font)}#engines_msg .engine-name{width:10rem}#engines_msg .response-error{color:var(--color-error)}#engines_msg .bar-chart-value{width:auto}#search_url div.selectable_url pre{float:left;width:200em}#search_url button#copy_url{float:right;padding:.4rem;margin-left:.5rem;border-radius:.3rem;display:none}#links_on_top{position:absolute;left:1rem;text-align:left;top:2.7rem;padding:0;border:0;display:flex;align-items:center;font-size:1em;color:var(--color-search-font)}#links_on_top a{display:flex;align-items:center;margin-left:1em}#links_on_top a svg{font-size:1.2em;margin-left:.125em}#links_on_top a,#links_on_top a:link *,#links_on_top a:hover *,#links_on_top a:visited *,#links_on_top a:active *{color:var(--color-search-font)}#pagination{grid-area:pagination}#pagination br{clear:both}.numbered_pagination{display:flex;flex-direction:row;justify-content:center;align-items:center;overflow:hidden}.page_number{background:transparent!important;color:var(--color-result-link-font)!important;text-decoration:underline}.page_number_current{background:transparent;color:var(--color-result-link-visited-font);border:none}#backToTop{border:1px solid var(--color-backtotop-border);margin:0;padding:0;font-size:1em;background:var(--color-backtotop-background);position:fixed;bottom:8rem;right:56.3rem;transition:opacity .5s;opacity:0;pointer-events:none;border-radius:10px}#backToTop a{display:block;margin:0;padding:.7em}#backToTop a,#backToTop a:visited,#backToTop a:hover,#backToTop a:active{color:var(--color-backtotop-font)}#results.scrolling #backToTop{opacity:1;pointer-events:all}@media screen and (width <= calc(79.75em - .5px)){#links_on_top span{display:none}}@media screen and (width <= 52rem){body.results_endpoint #links_on_top .link_on_top_about,body.results_endpoint #links_on_top .link_on_top_donate{display:none}}@media screen and (min-width: 50em) and (max-width: 79.75em){.center-alignment-no #links_on_top span{display:none}.center-alignment-no .page_with_header{margin:2rem .5rem;width:auto}.center-alignment-no #infoboxes{position:inherit;max-width:inherit}.center-alignment-no #infoboxes .infobox{clear:both}.center-alignment-no #infoboxes .infobox img{float:right;max-width:10em;margin:.5em 0 .5em .5em}.center-alignment-no #sidebar{margin:0 .5rem .125rem;padding:0;float:none;border:none;width:auto}.center-alignment-no #sidebar input{border:0}.center-alignment-no .result .thumbnail{max-width:98%}.center-alignment-no .result .url span.url{display:block;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;width:100%}.center-alignment-no .result .engines{float:left;display:flex;flex-wrap:wrap;justify-content:flex-end;padding:3px 0 0}.center-alignment-no .result-images{border-bottom:none!important}.center-alignment-no .image_result,.center-alignment-no .image_result img{max-width:98%}.center-alignment-no #backToTop{display:none}.center-alignment-no #pagination{margin:2rem 0 0!important}.center-alignment-no #main_results div#results{margin:0 auto;justify-content:center;display:grid;grid-template:"corrections" min-content "answers" min-content "sidebar" min-content "urls" 1fr "pagination" min-content / 45rem;gap:0}}#main_results div#results.only_template_images{margin:1rem .5rem 0;display:grid;grid-template:"corrections" min-content "answers" min-content "sidebar" min-content "urls" 1fr "pagination" min-content / 100%;gap:0}#main_results div#results.only_template_images #sidebar{display:none}#main_results div#results.only_template_images #urls{margin:0;display:flex;flex-wrap:wrap}#main_results div#results.only_template_images #urls:after{flex-grow:10;content:""}#main_results div#results.only_template_images #backToTop{right:auto;left:1rem}#main_results div#results.only_template_images #pagination{margin-left:4rem}@media screen and (max-width: 50em){#links_on_top span{display:none}.page_with_header{margin:2rem .5rem;width:auto}#infoboxes{position:inherit;max-width:inherit}#infoboxes .infobox{clear:both}#infoboxes .infobox img{float:right;max-width:10em;margin:.5em 0 .5em .5em}#sidebar{margin:0 .5rem .125rem;padding:0;float:none;border:none;width:auto}#sidebar input{border:0}.result .thumbnail{max-width:98%}.result .url span.url{display:block;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;width:100%}.result .engines{float:left;display:flex;flex-wrap:wrap;justify-content:flex-end;padding:3px 0 0}.result-images{border-bottom:none!important}.image_result,.image_result img{max-width:98%}#backToTop{display:none}#pagination{margin:2rem 0 0!important}#main_results div#results{margin:0 auto;justify-content:center;display:grid;grid-template:"corrections" min-content "answers" min-content "sidebar" min-content "urls" 1fr "pagination" min-content / 45rem;gap:0}html{background-color:var(--color-base-background-mobile)}#main_results div#results{grid-template-columns:100%;margin:0 auto}#links_on_top{top:1.4rem;left:10px}#main_index #links_on_top{top:.5rem;left:.5rem}#results{margin:0;padding:0}#pagination{margin:2rem 1rem 0!important}article[data-vim-selected]{border:1px solid var(--color-result-vim-arrow);border-radius:10px}.result{background:var(--color-result-background);border:1px solid var(--color-result-background);margin:1rem 2%;width:96%;border-radius:10px}.result-images{margin:0;height:10rem;background:var(--color-base-background-mobile);width:unset}.infobox{border:none!important;background-color:var(--color-sidebar-background)}.numbered_pagination{display:none}.result-paper .attributes,.result-packages .attributes,.result-paper .attributes div,.result-packages .attributes div{display:block}.result-paper .attributes div span,.result-packages .attributes div span{display:inline}.result-paper .attributes div span:first-child,.result-packages .attributes div span:first-child{font-weight:700}.result-paper .attributes div span:nth-child(2),.result-packages .attributes div span:nth-child(2){margin-right:.5rem}}@media screen and (max-width: 35em){.result-videos img.thumbnail{float:none!important}.result-videos .content{overflow:inherit}}pre code{white-space:pre-wrap}#main_results .result-keyvalue caption{padding:.8rem .5rem;font-style:italic;caption-side:bottom;background-color:var(--color-result-keyvalue-table)}#main_results .result-keyvalue .col-key{width:25%}#main_results .result-keyvalue table{word-break:break-word;table-layout:fixed;width:100%;background-color:var(--color-result-keyvalue-table)}#main_results .result-keyvalue tr.odd{background-color:var(--color-result-keyvalue-odd)}#main_results .result-keyvalue tr.even{background-color:var(--color-result-keyvalue-even)}#main_results .result-keyvalue th,#main_results .result-keyvalue td{padding:.3rem .5rem}#q,#sidebar .infobox dt bdi{direction:rtl}#urls{direction:initial;text-align:right}#urls .result .url_header{direction:rtl}#urls .result .url_wrapper{justify-content:end}#main_results div#results.only_template_images #urls{direction:rtl}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p{direction:rtl}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p.result-url{direction:ltr}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p.result-url span{direction:rtl;float:right}@supports ((background-position-x: 100%) and ((appearance: none) or (-webkit-appearance: none) or (-moz-appearance: none))){select{border-width:0 0 0 2rem;background-position-x:-2rem}}#vim-hotkeys-help table{direction:ltr;text-align:left}#main_preferences h1,#main_stats h1{background-position-x:100%}.bar-chart-serie1,.bar-chart-serie2{float:right}.engine-stats .engine-name,.engine-stats .engine-score,.engine-stats .result-count,.engine-stats .response-time,.engine-stats .engine-reliability{text-align:right} +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}:root{--color-base-font: #444;--color-base-font-rgb: 68, 68, 68;--color-base-background: #fff;--color-base-background-mobile: #f2f5f8;--color-url-font: #334999;--color-url-visited-font: #9822c3;--color-header-background: #fdfbff;--color-header-border: #ddd;--color-footer-background: #fdfbff;--color-footer-border: #ddd;--color-sidebar-border: #ddd;--color-sidebar-font: #000;--color-sidebar-background: #fff;--color-backtotop-font: #444;--color-backtotop-border: #ddd;--color-backtotop-background: #fff;--color-btn-background: #3050ff;--color-btn-font: #fff;--color-show-btn-background: #bbb;--color-show-btn-font: #000;--color-search-border: #bbb;--color-search-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-search-background: #fff;--color-search-font: #222;--color-search-background-hover: #3050ff;--color-error: #db3434;--color-error-background: #fae1e1;--color-warning: #dbba34;--color-warning-background: #faf5e1;--color-success: #42db34;--color-success-background: #e3fae1;--color-categories-item-selected-font: #3050ff;--color-categories-item-border-selected: #3050ff;--color-autocomplete-font: #000;--color-autocomplete-border: #bbb;--color-autocomplete-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-autocomplete-background: #fff;--color-autocomplete-background-hover: #e3e3e3;--color-answer-font: #444;--color-answer-background: #fff;--color-result-keyvalue-col-table: #fdfbff;--color-result-keyvalue-odd: #fdfbff;--color-result-keyvalue-even: #fff;--color-result-background: #fff;--color-result-border: #ddd;--color-result-url-font: #000;--color-result-vim-selected: #f7f7f7;--color-result-vim-arrow: #000bbb;--color-result-description-highlight-font: #000;--color-result-link-font: #000bbb;--color-result-link-font-highlight: #000bbb;--color-result-link-visited-font: #9822c3;--color-result-publishdate-font: #777;--color-result-engines-font: #545454;--color-result-search-url-border: #ddd;--color-result-search-url-font: #000;--color-result-image-span-font: #444;--color-result-image-span-font-selected: #fff;--color-result-image-background: #fff;--color-settings-tr-hover: #ebebeb;--color-settings-engine-description-font: #545454;--color-settings-table-group-background: #0001;--color-result-detail-font: #fff;--color-result-detail-label-font: lightgray;--color-result-detail-background: #242424;--color-result-detail-hr: #555;--color-result-detail-link: #8af;--color-result-detail-loader-border: rgba(255, 255, 255, .2);--color-result-detail-loader-borderleft: rgba(0, 0, 0, 0);--color-toolkit-badge-font: #fff;--color-toolkit-badge-background: #545454;--color-toolkit-kbd-font: #fff;--color-toolkit-kbd-background: #000;--color-toolkit-dialog-border: #ddd;--color-toolkit-dialog-background: #fff;--color-toolkit-tabs-label-border: #fff;--color-toolkit-tabs-section-border: #ddd;--color-toolkit-select-background: #e1e1e1;--color-toolkit-select-border: #ddd;--color-toolkit-select-background-hover: #bbb;--color-toolkit-input-text-font: #222;--color-toolkit-checkbox-onoff-off-background: #ddd;--color-toolkit-checkbox-onoff-on-background: #ddd;--color-toolkit-checkbox-onoff-on-mark-background: #3050ff;--color-toolkit-checkbox-onoff-on-mark-color: #fff;--color-toolkit-checkbox-onoff-off-mark-background: #aaa;--color-toolkit-checkbox-onoff-off-mark-color: #fff;--color-toolkit-checkbox-label-background: #ddd;--color-toolkit-checkbox-label-border: #ddd;--color-toolkit-checkbox-input-border: #3050ff;--color-toolkit-engine-tooltip-border: #ddd;--color-toolkit-engine-tooltip-background: #fff;--color-toolkit-loader-border: rgba(0, 0, 0, .2);--color-toolkit-loader-borderleft: rgba(255, 255, 255, 0);--color-doc-code: #003;--color-doc-code-background: #ddeaff;--color-bar-chart-primary: #5bc0de;--color-bar-chart-secondary: #deb15b;--color-image-resolution-background: rgba(0, 0, 0, .5);--color-image-resolution-font: #fff;--color-loading-indicator: rgba(255, 255, 255, .2);--color-loading-indicator-gap: #fff;--color-line-number: #64708d;--color-favicon-background-color: #ddd;--color-favicon-border-color: #ccc}@media (prefers-color-scheme: dark){:root.theme-auto{--color-base-font: #bbb;--color-base-font-rgb: 187, 187, 187;--color-base-background: #222428;--color-base-background-mobile: #222428;--color-url-font: #8af;--color-url-visited-font: #c09cd9;--color-header-background: #1e1e22;--color-header-border: #333;--color-footer-background: #1e1e22;--color-footer-border: #333;--color-sidebar-border: #555;--color-sidebar-font: #fff;--color-sidebar-background: #292c34;--color-backtotop-font: #bbb;--color-backtotop-border: #333;--color-backtotop-background: #2b2e36;--color-btn-background: #58f;--color-btn-font: #222;--color-show-btn-background: #555;--color-show-btn-font: #fff;--color-search-border: #555;--color-search-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-search-background: #2b2e36;--color-search-font: #fff;--color-search-background-hover: #58f;--color-error: #f55b5b;--color-error-background: #390a0a;--color-warning: #f1d561;--color-warning-background: #39300a;--color-success: #79f56e;--color-success-background: #0e390a;--color-categories-item-selected-font: #58f;--color-categories-item-border-selected: #58f;--color-autocomplete-font: #fff;--color-autocomplete-border: #555;--color-autocomplete-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-autocomplete-background: #2b2e36;--color-autocomplete-background-hover: #1e1e22;--color-answer-font: #bbb;--color-answer-background: #26292f;--color-result-keyvalue-col-table: #1e1e22;--color-result-keyvalue-odd: #1e1e22;--color-result-keyvalue-even: #26292f;--color-result-background: #26292f;--color-result-border: #333;--color-result-url-font: #fff;--color-result-vim-selected: #1f1f23cc;--color-result-vim-arrow: #8af;--color-result-description-highlight-font: #fff;--color-result-link-font: #8af;--color-result-link-font-highlight: #8af;--color-result-link-visited-font: #c09cd9;--color-result-publishdate-font: #888;--color-result-engines-font: #a4a4a4;--color-result-search-url-border: #555;--color-result-search-url-font: #fff;--color-result-detail-font: #fff;--color-result-detail-label-font: lightgray;--color-result-detail-background: #1a1a1c;--color-result-detail-hr: #555;--color-result-detail-link: #8af;--color-result-detail-loader-border: rgba(255, 255, 255, .2);--color-result-detail-loader-borderleft: rgba(0, 0, 0, 0);--color-result-image-span-font: #bbb;--color-result-image-span-font-selected: #222;--color-result-image-background: #222;--color-settings-tr-hover: #2c2c32;--color-settings-engine-description-font: #909090;--color-settings-table-group-background: #1b1b21;--color-toolkit-badge-font: #fff;--color-toolkit-badge-background: #555;--color-toolkit-kbd-font: #000;--color-toolkit-kbd-background: #fff;--color-toolkit-dialog-border: #555;--color-toolkit-dialog-background: #1e1e22;--color-toolkit-tabs-label-border: #222;--color-toolkit-tabs-section-border: #555;--color-toolkit-select-background: #313338;--color-toolkit-select-border: #555;--color-toolkit-select-background-hover: #373b49;--color-toolkit-input-text-font: #fff;--color-toolkit-checkbox-onoff-off-background: #313338;--color-toolkit-checkbox-onoff-on-background: #313338;--color-toolkit-checkbox-onoff-on-mark-background: #58f;--color-toolkit-checkbox-onoff-on-mark-color: #222;--color-toolkit-checkbox-onoff-off-mark-background: #ddd;--color-toolkit-checkbox-onoff-off-mark-color: #222;--color-toolkit-checkbox-label-background: #222;--color-toolkit-checkbox-label-border: #333;--color-toolkit-checkbox-input-border: #58f;--color-toolkit-engine-tooltip-border: #333;--color-toolkit-engine-tooltip-background: #222;--color-toolkit-loader-border: rgba(255, 255, 255, .2);--color-toolkit-loader-borderleft: rgba(0, 0, 0, 0);--color-doc-code: #ddd;--color-doc-code-background: #4d5a6f;--color-favicon-background-color: #ddd;--color-favicon-border-color: #ccc}}:root.theme-dark{--color-base-font: #bbb;--color-base-font-rgb: 187, 187, 187;--color-base-background: #222428;--color-base-background-mobile: #222428;--color-url-font: #8af;--color-url-visited-font: #c09cd9;--color-header-background: #1e1e22;--color-header-border: #333;--color-footer-background: #1e1e22;--color-footer-border: #333;--color-sidebar-border: #555;--color-sidebar-font: #fff;--color-sidebar-background: #292c34;--color-backtotop-font: #bbb;--color-backtotop-border: #333;--color-backtotop-background: #2b2e36;--color-btn-background: #58f;--color-btn-font: #222;--color-show-btn-background: #555;--color-show-btn-font: #fff;--color-search-border: #555;--color-search-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-search-background: #2b2e36;--color-search-font: #fff;--color-search-background-hover: #58f;--color-error: #f55b5b;--color-error-background: #390a0a;--color-warning: #f1d561;--color-warning-background: #39300a;--color-success: #79f56e;--color-success-background: #0e390a;--color-categories-item-selected-font: #58f;--color-categories-item-border-selected: #58f;--color-autocomplete-font: #fff;--color-autocomplete-border: #555;--color-autocomplete-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-autocomplete-background: #2b2e36;--color-autocomplete-background-hover: #1e1e22;--color-answer-font: #bbb;--color-answer-background: #26292f;--color-result-keyvalue-col-table: #1e1e22;--color-result-keyvalue-odd: #1e1e22;--color-result-keyvalue-even: #26292f;--color-result-background: #26292f;--color-result-border: #333;--color-result-url-font: #fff;--color-result-vim-selected: #1f1f23cc;--color-result-vim-arrow: #8af;--color-result-description-highlight-font: #fff;--color-result-link-font: #8af;--color-result-link-font-highlight: #8af;--color-result-link-visited-font: #c09cd9;--color-result-publishdate-font: #888;--color-result-engines-font: #a4a4a4;--color-result-search-url-border: #555;--color-result-search-url-font: #fff;--color-result-detail-font: #fff;--color-result-detail-label-font: lightgray;--color-result-detail-background: #1a1a1c;--color-result-detail-hr: #555;--color-result-detail-link: #8af;--color-result-detail-loader-border: rgba(255, 255, 255, .2);--color-result-detail-loader-borderleft: rgba(0, 0, 0, 0);--color-result-image-span-font: #bbb;--color-result-image-span-font-selected: #222;--color-result-image-background: #222;--color-settings-tr-hover: #2c2c32;--color-settings-engine-description-font: #909090;--color-settings-table-group-background: #1b1b21;--color-toolkit-badge-font: #fff;--color-toolkit-badge-background: #555;--color-toolkit-kbd-font: #000;--color-toolkit-kbd-background: #fff;--color-toolkit-dialog-border: #555;--color-toolkit-dialog-background: #1e1e22;--color-toolkit-tabs-label-border: #222;--color-toolkit-tabs-section-border: #555;--color-toolkit-select-background: #313338;--color-toolkit-select-border: #555;--color-toolkit-select-background-hover: #373b49;--color-toolkit-input-text-font: #fff;--color-toolkit-checkbox-onoff-off-background: #313338;--color-toolkit-checkbox-onoff-on-background: #313338;--color-toolkit-checkbox-onoff-on-mark-background: #58f;--color-toolkit-checkbox-onoff-on-mark-color: #222;--color-toolkit-checkbox-onoff-off-mark-background: #ddd;--color-toolkit-checkbox-onoff-off-mark-color: #222;--color-toolkit-checkbox-label-background: #222;--color-toolkit-checkbox-label-border: #333;--color-toolkit-checkbox-input-border: #58f;--color-toolkit-engine-tooltip-border: #333;--color-toolkit-engine-tooltip-background: #222;--color-toolkit-loader-border: rgba(255, 255, 255, .2);--color-toolkit-loader-borderleft: rgba(0, 0, 0, 0);--color-doc-code: #ddd;--color-doc-code-background: #4d5a6f;--color-favicon-background-color: #ddd;--color-favicon-border-color: #ccc}:root.theme-black{--color-base-font: #bbb;--color-base-font-rgb: 187, 187, 187;--color-base-background: #222428;--color-base-background-mobile: #222428;--color-url-font: #8af;--color-url-visited-font: #c09cd9;--color-header-background: #1e1e22;--color-header-border: #333;--color-footer-background: #1e1e22;--color-footer-border: #333;--color-sidebar-border: #555;--color-sidebar-font: #fff;--color-sidebar-background: #292c34;--color-backtotop-font: #bbb;--color-backtotop-border: #333;--color-backtotop-background: #2b2e36;--color-btn-background: #58f;--color-btn-font: #222;--color-show-btn-background: #555;--color-show-btn-font: #fff;--color-search-border: #555;--color-search-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-search-background: #2b2e36;--color-search-font: #fff;--color-search-background-hover: #58f;--color-error: #f55b5b;--color-error-background: #390a0a;--color-warning: #f1d561;--color-warning-background: #39300a;--color-success: #79f56e;--color-success-background: #0e390a;--color-categories-item-selected-font: #58f;--color-categories-item-border-selected: #58f;--color-autocomplete-font: #fff;--color-autocomplete-border: #555;--color-autocomplete-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-autocomplete-background: #2b2e36;--color-autocomplete-background-hover: #1e1e22;--color-answer-font: #bbb;--color-answer-background: #26292f;--color-result-keyvalue-col-table: #1e1e22;--color-result-keyvalue-odd: #1e1e22;--color-result-keyvalue-even: #26292f;--color-result-background: #26292f;--color-result-border: #333;--color-result-url-font: #fff;--color-result-vim-selected: #1f1f23cc;--color-result-vim-arrow: #8af;--color-result-description-highlight-font: #fff;--color-result-link-font: #8af;--color-result-link-font-highlight: #8af;--color-result-link-visited-font: #c09cd9;--color-result-publishdate-font: #888;--color-result-engines-font: #a4a4a4;--color-result-search-url-border: #555;--color-result-search-url-font: #fff;--color-result-detail-font: #fff;--color-result-detail-label-font: lightgray;--color-result-detail-background: #1a1a1c;--color-result-detail-hr: #555;--color-result-detail-link: #8af;--color-result-detail-loader-border: rgba(255, 255, 255, .2);--color-result-detail-loader-borderleft: rgba(0, 0, 0, 0);--color-result-image-span-font: #bbb;--color-result-image-span-font-selected: #222;--color-result-image-background: #222;--color-settings-tr-hover: #2c2c32;--color-settings-engine-description-font: #909090;--color-settings-table-group-background: #1b1b21;--color-toolkit-badge-font: #fff;--color-toolkit-badge-background: #555;--color-toolkit-kbd-font: #000;--color-toolkit-kbd-background: #fff;--color-toolkit-dialog-border: #555;--color-toolkit-dialog-background: #1e1e22;--color-toolkit-tabs-label-border: #222;--color-toolkit-tabs-section-border: #555;--color-toolkit-select-background: #313338;--color-toolkit-select-border: #555;--color-toolkit-select-background-hover: #373b49;--color-toolkit-input-text-font: #fff;--color-toolkit-checkbox-onoff-off-background: #313338;--color-toolkit-checkbox-onoff-on-background: #313338;--color-toolkit-checkbox-onoff-on-mark-background: #58f;--color-toolkit-checkbox-onoff-on-mark-color: #222;--color-toolkit-checkbox-onoff-off-mark-background: #ddd;--color-toolkit-checkbox-onoff-off-mark-color: #222;--color-toolkit-checkbox-label-background: #222;--color-toolkit-checkbox-label-border: #333;--color-toolkit-checkbox-input-border: #58f;--color-toolkit-engine-tooltip-border: #333;--color-toolkit-engine-tooltip-background: #222;--color-toolkit-loader-border: rgba(255, 255, 255, .2);--color-toolkit-loader-borderleft: rgba(0, 0, 0, 0);--color-doc-code: #ddd;--color-doc-code-background: #4d5a6f;--color-favicon-background-color: #ddd;--color-favicon-border-color: #ccc;--color-base-background: #000;--color-base-background-mobile: #000;--color-header-background: #000;--color-footer-background: #000;--color-sidebar-background: #000}.code-highlight pre{line-height:100%}.code-highlight td.linenos .normal,.code-highlight span.linenos{color:inherit;background-color:transparent;padding-left:5px;padding-right:5px}.code-highlight td.linenos .special,.code-highlight span.linenos.special{color:#000;background-color:#ffffc0;padding-left:5px;padding-right:5px}.code-highlight .hll{background-color:#ffc}.code-highlight .c{color:#3d7b7b;font-style:italic}.code-highlight .err{border:1px solid #F00}.code-highlight .k{color:green;font-weight:700}.code-highlight .o{color:#666}.code-highlight .ch,.code-highlight .cm{color:#3d7b7b;font-style:italic}.code-highlight .cp{color:#9c6500}.code-highlight .cpf,.code-highlight .c1,.code-highlight .cs{color:#3d7b7b;font-style:italic}.code-highlight .gd{color:#a00000}.code-highlight .ge{font-style:italic}.code-highlight .ges{font-weight:700;font-style:italic}.code-highlight .gr{color:#e40000}.code-highlight .gh{color:navy;font-weight:700}.code-highlight .gi{color:#008400}.code-highlight .go{color:#717171}.code-highlight .gp{color:navy;font-weight:700}.code-highlight .gs{font-weight:700}.code-highlight .gu{color:purple;font-weight:700}.code-highlight .gt{color:#04d}.code-highlight .kc,.code-highlight .kd,.code-highlight .kn{color:green;font-weight:700}.code-highlight .kp{color:green}.code-highlight .kr{color:green;font-weight:700}.code-highlight .kt{color:#b00040}.code-highlight .m{color:#666}.code-highlight .s{color:#ba2121}.code-highlight .na{color:#687822}.code-highlight .nb{color:green}.code-highlight .nc{color:#00f;font-weight:700}.code-highlight .no{color:#800}.code-highlight .nd{color:#a2f}.code-highlight .ni{color:#717171;font-weight:700}.code-highlight .ne{color:#cb3f38;font-weight:700}.code-highlight .nf{color:#00f}.code-highlight .nl{color:#767600}.code-highlight .nn{color:#00f;font-weight:700}.code-highlight .nt{color:green;font-weight:700}.code-highlight .nv{color:#19177c}.code-highlight .ow{color:#a2f;font-weight:700}.code-highlight .w{color:#bbb}.code-highlight .mb,.code-highlight .mf,.code-highlight .mh,.code-highlight .mi,.code-highlight .mo{color:#666}.code-highlight .sa,.code-highlight .sb,.code-highlight .sc,.code-highlight .dl{color:#ba2121}.code-highlight .sd{color:#ba2121;font-style:italic}.code-highlight .s2{color:#ba2121}.code-highlight .se{color:#aa5d1f;font-weight:700}.code-highlight .sh{color:#ba2121}.code-highlight .si{color:#a45a77;font-weight:700}.code-highlight .sx{color:green}.code-highlight .sr{color:#a45a77}.code-highlight .s1{color:#ba2121}.code-highlight .ss{color:#19177c}.code-highlight .bp{color:green}.code-highlight .fm{color:#00f}.code-highlight .vc,.code-highlight .vg,.code-highlight .vi,.code-highlight .vm{color:#19177c}.code-highlight .il{color:#666}.codelines{margin:.125rem 0 0;padding:1rem 0 0}.code-highlight pre{overflow:auto;margin:0;padding:0 0 .75rem}.code-highlight .linenos{-webkit-user-select:none;user-select:none;cursor:default;margin-right:8px;text-align:right}.code-highlight .linenos::selection{background:transparent}.code-highlight .linenos::-moz-selection{background:transparent}.code-highlight span.linenos{color:var(--color-line-number)}@media (prefers-color-scheme: dark){:root.theme-auto .code-highlight pre{line-height:100%}:root.theme-auto .code-highlight td.linenos .normal{color:#3c4354;background-color:transparent;padding-left:5px;padding-right:5px}:root.theme-auto .code-highlight span.linenos{color:#3c4354;background-color:transparent;padding-left:5px;padding-right:5px}:root.theme-auto .code-highlight td.linenos .special{color:#3c4354;background-color:#ffffc0;padding-left:5px;padding-right:5px}:root.theme-auto .code-highlight span.linenos.special{color:#3c4354;background-color:#ffffc0;padding-left:5px;padding-right:5px}:root.theme-auto .code-highlight .hll{background-color:#6e7681}:root.theme-auto .code-highlight .c{color:#7e8aa1}:root.theme-auto .code-highlight .err{color:#f88f7f}:root.theme-auto .code-highlight .esc{color:#d4d2c8}:root.theme-auto .code-highlight .g{color:#d4d2c8}:root.theme-auto .code-highlight .k{color:#ffad66}:root.theme-auto .code-highlight .l{color:#d5ff80}:root.theme-auto .code-highlight .n{color:#d4d2c8}:root.theme-auto .code-highlight .o{color:#ffad66}:root.theme-auto .code-highlight .x{color:#d4d2c8}:root.theme-auto .code-highlight .p{color:#d4d2c8}:root.theme-auto .code-highlight .ch{color:#f88f7f;font-style:italic}:root.theme-auto .code-highlight .cm{color:#7e8aa1}:root.theme-auto .code-highlight .cp{color:#ffad66;font-weight:700}:root.theme-auto .code-highlight .cpf{color:#7e8aa1}:root.theme-auto .code-highlight .c1{color:#7e8aa1}:root.theme-auto .code-highlight .cs{color:#7e8aa1;font-style:italic}:root.theme-auto .code-highlight .gd{color:#f88f7f;background-color:#3d1e20}:root.theme-auto .code-highlight .ge{color:#d4d2c8;font-style:italic}:root.theme-auto .code-highlight .ges{color:#d4d2c8}:root.theme-auto .code-highlight .gr{color:#f88f7f}:root.theme-auto .code-highlight .gh{color:#d4d2c8}:root.theme-auto .code-highlight .gi{color:#6ad4af;background-color:#19362c}:root.theme-auto .code-highlight .go{color:#7e8aa1}:root.theme-auto .code-highlight .gp{color:#d4d2c8}:root.theme-auto .code-highlight .gs{color:#d4d2c8;font-weight:700}:root.theme-auto .code-highlight .gu{color:#d4d2c8}:root.theme-auto .code-highlight .gt{color:#f88f7f}:root.theme-auto .code-highlight .kc{color:#ffad66}:root.theme-auto .code-highlight .kd{color:#ffad66}:root.theme-auto .code-highlight .kn{color:#ffad66}:root.theme-auto .code-highlight .kp{color:#ffad66}:root.theme-auto .code-highlight .kr{color:#ffad66}:root.theme-auto .code-highlight .kt{color:#73d0ff}:root.theme-auto .code-highlight .ld{color:#d5ff80}:root.theme-auto .code-highlight .m{color:#dfbfff}:root.theme-auto .code-highlight .s{color:#d5ff80}:root.theme-auto .code-highlight .na{color:#ffd173}:root.theme-auto .code-highlight .nb{color:#ffd173}:root.theme-auto .code-highlight .nc{color:#73d0ff}:root.theme-auto .code-highlight .no{color:#ffd173}:root.theme-auto .code-highlight .nd{color:#7e8aa1;font-weight:700;font-style:italic}:root.theme-auto .code-highlight .ni{color:#95e6cb}:root.theme-auto .code-highlight .ne{color:#73d0ff}:root.theme-auto .code-highlight .nf{color:#ffd173}:root.theme-auto .code-highlight .nl{color:#d4d2c8}:root.theme-auto .code-highlight .nn{color:#d4d2c8}:root.theme-auto .code-highlight .nx{color:#d4d2c8}:root.theme-auto .code-highlight .py{color:#ffd173}:root.theme-auto .code-highlight .nt{color:#5ccfe6}:root.theme-auto .code-highlight .nv{color:#d4d2c8}:root.theme-auto .code-highlight .ow{color:#ffad66}:root.theme-auto .code-highlight .pm{color:#d4d2c8}:root.theme-auto .code-highlight .w{color:#d4d2c8}:root.theme-auto .code-highlight .mb{color:#dfbfff}:root.theme-auto .code-highlight .mf{color:#dfbfff}:root.theme-auto .code-highlight .mh{color:#dfbfff}:root.theme-auto .code-highlight .mi{color:#dfbfff}:root.theme-auto .code-highlight .mo{color:#dfbfff}:root.theme-auto .code-highlight .sa{color:#f29e74}:root.theme-auto .code-highlight .sb{color:#d5ff80}:root.theme-auto .code-highlight .sc{color:#d5ff80}:root.theme-auto .code-highlight .dl{color:#d5ff80}:root.theme-auto .code-highlight .sd{color:#7e8aa1}:root.theme-auto .code-highlight .s2{color:#d5ff80}:root.theme-auto .code-highlight .se{color:#95e6cb}:root.theme-auto .code-highlight .sh{color:#d5ff80}:root.theme-auto .code-highlight .si{color:#95e6cb}:root.theme-auto .code-highlight .sx{color:#95e6cb}:root.theme-auto .code-highlight .sr{color:#95e6cb}:root.theme-auto .code-highlight .s1{color:#d5ff80}:root.theme-auto .code-highlight .ss{color:#dfbfff}:root.theme-auto .code-highlight .bp{color:#5ccfe6}:root.theme-auto .code-highlight .fm{color:#ffd173}:root.theme-auto .code-highlight .vc{color:#d4d2c8}:root.theme-auto .code-highlight .vg{color:#d4d2c8}:root.theme-auto .code-highlight .vi{color:#d4d2c8}:root.theme-auto .code-highlight .vm{color:#d4d2c8}:root.theme-auto .code-highlight .il{color:#dfbfff}:root.theme-auto .code-highlight pre{overflow:auto;margin:0;padding:0 0 .75rem}:root.theme-auto .code-highlight .linenos{-webkit-user-select:none;user-select:none;cursor:default;margin-right:8px;text-align:right}:root.theme-auto .code-highlight .linenos::selection{background:transparent}:root.theme-auto .code-highlight .linenos::-moz-selection{background:transparent}:root.theme-auto .code-highlight span.linenos{color:var(--color-line-number)}}:root.theme-dark .code-highlight pre{line-height:100%}:root.theme-dark .code-highlight td.linenos .normal{color:#3c4354;background-color:transparent;padding-left:5px;padding-right:5px}:root.theme-dark .code-highlight span.linenos{color:#3c4354;background-color:transparent;padding-left:5px;padding-right:5px}:root.theme-dark .code-highlight td.linenos .special{color:#3c4354;background-color:#ffffc0;padding-left:5px;padding-right:5px}:root.theme-dark .code-highlight span.linenos.special{color:#3c4354;background-color:#ffffc0;padding-left:5px;padding-right:5px}:root.theme-dark .code-highlight .hll{background-color:#6e7681}:root.theme-dark .code-highlight .c{color:#7e8aa1}:root.theme-dark .code-highlight .err{color:#f88f7f}:root.theme-dark .code-highlight .esc{color:#d4d2c8}:root.theme-dark .code-highlight .g{color:#d4d2c8}:root.theme-dark .code-highlight .k{color:#ffad66}:root.theme-dark .code-highlight .l{color:#d5ff80}:root.theme-dark .code-highlight .n{color:#d4d2c8}:root.theme-dark .code-highlight .o{color:#ffad66}:root.theme-dark .code-highlight .x{color:#d4d2c8}:root.theme-dark .code-highlight .p{color:#d4d2c8}:root.theme-dark .code-highlight .ch{color:#f88f7f;font-style:italic}:root.theme-dark .code-highlight .cm{color:#7e8aa1}:root.theme-dark .code-highlight .cp{color:#ffad66;font-weight:700}:root.theme-dark .code-highlight .cpf{color:#7e8aa1}:root.theme-dark .code-highlight .c1{color:#7e8aa1}:root.theme-dark .code-highlight .cs{color:#7e8aa1;font-style:italic}:root.theme-dark .code-highlight .gd{color:#f88f7f;background-color:#3d1e20}:root.theme-dark .code-highlight .ge{color:#d4d2c8;font-style:italic}:root.theme-dark .code-highlight .ges{color:#d4d2c8}:root.theme-dark .code-highlight .gr{color:#f88f7f}:root.theme-dark .code-highlight .gh{color:#d4d2c8}:root.theme-dark .code-highlight .gi{color:#6ad4af;background-color:#19362c}:root.theme-dark .code-highlight .go{color:#7e8aa1}:root.theme-dark .code-highlight .gp{color:#d4d2c8}:root.theme-dark .code-highlight .gs{color:#d4d2c8;font-weight:700}:root.theme-dark .code-highlight .gu{color:#d4d2c8}:root.theme-dark .code-highlight .gt{color:#f88f7f}:root.theme-dark .code-highlight .kc{color:#ffad66}:root.theme-dark .code-highlight .kd{color:#ffad66}:root.theme-dark .code-highlight .kn{color:#ffad66}:root.theme-dark .code-highlight .kp{color:#ffad66}:root.theme-dark .code-highlight .kr{color:#ffad66}:root.theme-dark .code-highlight .kt{color:#73d0ff}:root.theme-dark .code-highlight .ld{color:#d5ff80}:root.theme-dark .code-highlight .m{color:#dfbfff}:root.theme-dark .code-highlight .s{color:#d5ff80}:root.theme-dark .code-highlight .na{color:#ffd173}:root.theme-dark .code-highlight .nb{color:#ffd173}:root.theme-dark .code-highlight .nc{color:#73d0ff}:root.theme-dark .code-highlight .no{color:#ffd173}:root.theme-dark .code-highlight .nd{color:#7e8aa1;font-weight:700;font-style:italic}:root.theme-dark .code-highlight .ni{color:#95e6cb}:root.theme-dark .code-highlight .ne{color:#73d0ff}:root.theme-dark .code-highlight .nf{color:#ffd173}:root.theme-dark .code-highlight .nl{color:#d4d2c8}:root.theme-dark .code-highlight .nn{color:#d4d2c8}:root.theme-dark .code-highlight .nx{color:#d4d2c8}:root.theme-dark .code-highlight .py{color:#ffd173}:root.theme-dark .code-highlight .nt{color:#5ccfe6}:root.theme-dark .code-highlight .nv{color:#d4d2c8}:root.theme-dark .code-highlight .ow{color:#ffad66}:root.theme-dark .code-highlight .pm{color:#d4d2c8}:root.theme-dark .code-highlight .w{color:#d4d2c8}:root.theme-dark .code-highlight .mb{color:#dfbfff}:root.theme-dark .code-highlight .mf{color:#dfbfff}:root.theme-dark .code-highlight .mh{color:#dfbfff}:root.theme-dark .code-highlight .mi{color:#dfbfff}:root.theme-dark .code-highlight .mo{color:#dfbfff}:root.theme-dark .code-highlight .sa{color:#f29e74}:root.theme-dark .code-highlight .sb{color:#d5ff80}:root.theme-dark .code-highlight .sc{color:#d5ff80}:root.theme-dark .code-highlight .dl{color:#d5ff80}:root.theme-dark .code-highlight .sd{color:#7e8aa1}:root.theme-dark .code-highlight .s2{color:#d5ff80}:root.theme-dark .code-highlight .se{color:#95e6cb}:root.theme-dark .code-highlight .sh{color:#d5ff80}:root.theme-dark .code-highlight .si{color:#95e6cb}:root.theme-dark .code-highlight .sx{color:#95e6cb}:root.theme-dark .code-highlight .sr{color:#95e6cb}:root.theme-dark .code-highlight .s1{color:#d5ff80}:root.theme-dark .code-highlight .ss{color:#dfbfff}:root.theme-dark .code-highlight .bp{color:#5ccfe6}:root.theme-dark .code-highlight .fm{color:#ffd173}:root.theme-dark .code-highlight .vc{color:#d4d2c8}:root.theme-dark .code-highlight .vg{color:#d4d2c8}:root.theme-dark .code-highlight .vi{color:#d4d2c8}:root.theme-dark .code-highlight .vm{color:#d4d2c8}:root.theme-dark .code-highlight .il{color:#dfbfff}:root.theme-dark .code-highlight pre{overflow:auto;margin:0;padding:0 0 .75rem}:root.theme-dark .code-highlight .linenos{-webkit-user-select:none;user-select:none;cursor:default;margin-right:8px;text-align:right}:root.theme-dark .code-highlight .linenos::selection{background:transparent}:root.theme-dark .code-highlight .linenos::-moz-selection{background:transparent}:root.theme-dark .code-highlight span.linenos{color:var(--color-line-number)}html.no-js .hide_if_nojs,html.js .show_if_nojs{display:none}.center{text-align:center}.right{float:right}.left{float:left}.invisible{display:none!important}.list-unstyled{list-style-type:none}.list-unstyled li{margin-top:4px;margin-bottom:4px}.danger{background-color:var(--color-error-background)}.warning{background:var(--color-warning-background)}.success{background:var(--color-success-background)}.badge{display:inline-block;color:var(--color-toolkit-badge-font);background-color:var(--color-toolkit-badge-background);text-align:center;white-space:nowrap;vertical-align:baseline;min-width:10px;padding:1px 5px;border-radius:5px}kbd{padding:2px 4px;margin:1px;font-size:90%;color:var(--color-toolkit-kbd-font);background:var(--color-toolkit-kbd-background)}table{width:100%}table.striped tr{border-bottom:1px solid var(--color-settings-tr-hover)}th{padding:.4em}td{padding:0 4px}tr:hover{background:var(--color-settings-tr-hover)!important}div.selectable_url{display:block;border:1px solid var(--color-result-search-url-border);padding:4px;color:var(--color-result-search-url-font);margin:.1em;overflow:hidden;height:1.2em;line-height:1.2em;border-radius:5px}div.selectable_url pre{display:block;font-size:.8em;word-break:break-all;margin:.1em;-webkit-user-select:all;user-select:all}.dialog-error{position:relative;display:flex;padding:1rem;margin:0 0 1em;border:1px solid var(--color-toolkit-dialog-border);text-align:right;border-radius:10px;color:var(--color-error);background:var(--color-error-background);border-color:var(--color-error)}.dialog-error .close{float:left;position:relative;top:-3px;color:inherit;font-size:1.5em}.dialog-error ul,.dialog-error ol,.dialog-error p{margin:1px 0 0}.dialog-error table{width:auto}.dialog-error tr{vertical-align:text-top}.dialog-error tr:hover{background:transparent!important}.dialog-error td{padding:0 1em 0 0;padding-left:1rem;padding-bottom:0;padding-right:0}.dialog-error h4{margin-top:.3em;margin-bottom:.3em}.dialog-error-block{position:relative;display:flex;padding:1rem;margin:0 0 1em;border:1px solid var(--color-toolkit-dialog-border);text-align:right;border-radius:10px;display:block;color:var(--color-error);background:var(--color-error-background);border-color:var(--color-error)}.dialog-error-block .close{float:left;position:relative;top:-3px;color:inherit;font-size:1.5em}.dialog-error-block ul,.dialog-error-block ol,.dialog-error-block p{margin:1px 0 0}.dialog-error-block table{width:auto}.dialog-error-block tr{vertical-align:text-top}.dialog-error-block tr:hover{background:transparent!important}.dialog-error-block td{padding:0 1em 0 0;padding-left:1rem;padding-bottom:0;padding-right:0}.dialog-error-block h4{margin-top:.3em;margin-bottom:.3em}.dialog-warning{position:relative;display:flex;padding:1rem;margin:0 0 1em;border:1px solid var(--color-toolkit-dialog-border);text-align:right;border-radius:10px;color:var(--color-warning);background:var(--color-warning-background);border-color:var(--color-warning)}.dialog-warning .close{float:left;position:relative;top:-3px;color:inherit;font-size:1.5em}.dialog-warning ul,.dialog-warning ol,.dialog-warning p{margin:1px 0 0}.dialog-warning table{width:auto}.dialog-warning tr{vertical-align:text-top}.dialog-warning tr:hover{background:transparent!important}.dialog-warning td{padding:0 1em 0 0;padding-left:1rem;padding-bottom:0;padding-right:0}.dialog-warning h4{margin-top:.3em;margin-bottom:.3em}.dialog-modal{position:relative;display:flex;padding:1rem;border:1px solid var(--color-toolkit-dialog-border);text-align:right;border-radius:10px;display:block;background:var(--color-toolkit-dialog-background);position:fixed;top:50%;left:50%;margin:0 auto;transform:translate(-50%,-50%);z-index:5000}.dialog-modal .close{float:left;position:relative;top:-3px;color:inherit;font-size:1.5em}.dialog-modal ul,.dialog-modal ol,.dialog-modal p{margin:1px 0 0}.dialog-modal table{width:auto}.dialog-modal tr{vertical-align:text-top}.dialog-modal tr:hover{background:transparent!important}.dialog-modal td{padding:0 1em 0 0;padding-left:1rem;padding-bottom:0;padding-right:0}.dialog-modal h4{margin-top:.3em;margin-bottom:.3em}.dialog-modal h3{margin-top:0}.btn-collapse{cursor:pointer}.scrollx{overflow:auto hidden;display:block;padding:0;margin:0;border:none}.tabs .tabs>label{font-size:90%}ul.tabs{border-bottom:1px solid var(--color-toolkit-tabs-section-border);list-style:none;padding-left:0}ul.tabs li{display:flex}.tabs{display:flex;flex-wrap:wrap;width:100%;min-width:100%}.tabs>*{order:2}.tabs>input[type=radio]{display:none}.tabs>label,.tabs>li>a{order:1;padding:.7em;margin:0 .7em;letter-spacing:.5px;text-transform:uppercase;border:solid var(--color-toolkit-tabs-label-border);border-width:0 0 2px 0;color:unset;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;cursor:pointer}.tabs>label.active,.tabs>li>a.active{border-bottom:2px solid var(--color-categories-item-border-selected);background:var(--color-categories-item-selected);color:var(--color-categories-item-selected-font)}.tabs>label:hover,.tabs>li>a:hover{border-bottom:2px solid var(--color-categories-item-border-selected)}.tabs>section{min-width:100%;padding:.7rem 0;box-sizing:border-box;border-top:1px solid var(--color-toolkit-tabs-section-border);display:none}.tabs>label:last-of-type{border-bottom:2px solid var(--color-categories-item-border-selected);background:var(--color-categories-item-selected);color:var(--color-categories-item-selected-font);letter-spacing:-.1px}.tabs>section:last-of-type{display:block}html body .tabs>input:checked~section{display:none}html body .tabs>input:checked~label{position:inherited;background:inherit;border-bottom:2px solid transparent;font-weight:400;color:inherit}html body .tabs>input:checked~label:hover{border-bottom:2px solid var(--color-categories-item-border-selected)}html body .tabs>input:checked+label{border-bottom:2px solid var(--color-categories-item-border-selected);background:var(--color-categories-item-selected);color:var(--color-categories-item-selected-font)}html body .tabs>input:checked+label+section{display:block}select{height:2.4rem;margin-top:0;margin-left:1rem;margin-bottom:0;margin-right:0;padding:.2rem!important;color:var(--color-search-font);font-size:.9rem;z-index:100}select:hover,select:focus{cursor:pointer}@supports ((background-position-x: 100%) and ((appearance: none) or (-webkit-appearance: none) or (-moz-appearance: none))){select{appearance:none;-webkit-appearance:none;-moz-appearance:none;border-width:0 2rem 0 0;border-color:transparent;background:url(data:image/svg+xml;charset=UTF-8,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%0A%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%0A%3Cg%3E%3Cpolygon%20points%3D%22128%2C192%20256%2C320%20384%2C192%22%2F%3E%3C%2Fg%3E%0A%3C%2Fsvg%3E) no-repeat;background-position-x:calc(100% + 2rem);background-size:2rem;background-origin:content-box;background-color:var(--color-toolkit-select-background);outline:medium none;text-overflow:ellipsis;border-radius:5px}select:hover,select:focus{background-color:var(--color-toolkit-select-background-hover)}select option{background-color:var(--color-base-background)}@media (prefers-color-scheme: dark){html.theme-auto select,html.theme-dark select{background-image:url(data:image/svg+xml;charset=UTF-8,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%0A%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%0A%3Cg%3E%3Cpolygon%20fill%3D%22%23ddd%22%20points%3D%22128%2C192%20256%2C320%20384%2C192%22%2F%3E%3C%2Fg%3E%0A%3C%2Fsvg%3E)}}html.theme-dark select{background-image:url(data:image/svg+xml;charset=UTF-8,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%0A%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%0A%3Cg%3E%3Cpolygon%20fill%3D%22%23ddd%22%20points%3D%22128%2C192%20256%2C320%20384%2C192%22%2F%3E%3C%2Fg%3E%0A%3C%2Fsvg%3E)}}input.checkbox-onoff[type=checkbox]{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;display:inline-block;width:2.5em;height:.7em;box-shadow:none!important;margin:0 16px;border-radius:10px;position:relative}input.checkbox-onoff[type=checkbox]:focus,input.checkbox-onoff[type=checkbox]:hover{outline:none}input.checkbox-onoff[type=checkbox]:focus:after{content:"";position:absolute;width:3.5em;height:1.65em;border:1px solid var(--color-btn-background);border-radius:12px;box-shadow:var(--color-btn-background) 0 0 3px;z-index:1200;top:-.55em;left:-.6em}input.checkbox-onoff[type=checkbox]:before{position:absolute;top:-.5em;display:flex;justify-content:center;align-items:center;font-size:.75em;width:1.875em;height:1.875em;border-radius:50%}input.checkbox-onoff[type=checkbox],input.checkbox-onoff.reversed-checkbox[type=checkbox]:checked{background:var(--color-toolkit-checkbox-onoff-off-background)}input.checkbox-onoff[type=checkbox]:before,input.checkbox-onoff.reversed-checkbox[type=checkbox]:checked:before{left:-.5em;content:"✕";color:var(--color-toolkit-checkbox-onoff-off-mark-color);background:var(--color-toolkit-checkbox-onoff-off-mark-background)}input.checkbox-onoff[type=checkbox]:checked,input.checkbox-onoff.reversed-checkbox[type=checkbox]{background:var(--color-toolkit-checkbox-onoff-on-background)}input.checkbox-onoff[type=checkbox]:checked:before,input.checkbox-onoff.reversed-checkbox[type=checkbox]:before{left:calc(100% - 1.5em);content:"✓";color:var(--color-toolkit-checkbox-onoff-on-mark-color);background:var(--color-toolkit-checkbox-onoff-on-mark-background)}@supports (transform: rotate(-45deg)){input[type=checkbox]:not(.checkbox-onoff){-webkit-appearance:none;-moz-appearance:none;appearance:none;width:20px;height:20px;cursor:pointer;position:relative;top:0;left:0;border:2px solid var(--color-toolkit-checkbox-input-border);border-radius:.3em}input[type=checkbox]:not(.checkbox-onoff):after{content:"";width:9px;height:5px;position:absolute;top:3px;left:2px;border:3px solid var(--color-toolkit-checkbox-label-border);border-top:none;border-right:none;background:transparent;opacity:0;transform:rotate(-45deg)}input[type=checkbox]:not(.checkbox-onoff):checked:after{border-color:var(--color-toolkit-checkbox-input-border);opacity:1}input[type=checkbox][disabled]:not(.checkbox-onoff){border:inherit;background-color:transparent!important;cursor:inherit}input.checkbox[type=checkbox]:not(:checked,[disabled],.checkbox-onoff):hover:after{opacity:.5}}@media screen and (max-width: 50em){.tabs>label{width:100%}}.loader,.loader:after{border-radius:50%;width:2em;height:2em}.loader{margin:1em auto;font-size:10px;position:relative;text-indent:-9999em;border-top:.5em solid var(--color-toolkit-loader-border);border-right:.5em solid var(--color-toolkit-loader-border);border-bottom:.5em solid var(--color-toolkit-loader-border);border-left:.5em solid var(--color-toolkit-loader-borderleft);-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0);-webkit-animation:load8 1.2s infinite linear;animation:load8 1.2s infinite linear}@-webkit-keyframes load8{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes load8{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.engine-tooltip{display:none;position:absolute;padding:.5rem 1rem;margin:0 0 0 2rem;border:1px solid var(--color-toolkit-engine-tooltip-border);background:var(--color-toolkit-engine-tooltip-background);font-size:14px;font-weight:400;z-index:5000;text-align:left;border-radius:10px}th:hover .engine-tooltip,td:hover .engine-tooltip,.engine-tooltip:hover{display:inline-block}.stacked-bar-chart{margin:0;padding:0 .125rem 0 4rem;width:100%;width:-moz-available;width:-webkit-fill-available;width:fill;flex-flow:row nowrap;align-items:center;display:inline-flex}.stacked-bar-chart-value{width:3rem;display:inline-block;position:absolute;padding:0 .5rem;text-align:right}.stacked-bar-chart-base{display:flex;flex-shrink:0;flex-grow:0;flex-basis:unset}.stacked-bar-chart-median{display:flex;flex-shrink:0;flex-grow:0;flex-basis:unset;background:var(--color-base-font);border:1px solid rgba(var(--color-base-font-rgb),.9);padding:.3rem 0}.stacked-bar-chart-rate80{display:flex;flex-shrink:0;flex-grow:0;flex-basis:unset;background:transparent;border:1px solid rgba(var(--color-base-font-rgb),.3);padding:.3rem 0}.stacked-bar-chart-rate95{display:flex;flex-shrink:0;flex-grow:0;flex-basis:unset;background:transparent;border-bottom:1px dotted rgba(var(--color-base-font-rgb),.5);padding:0}.stacked-bar-chart-rate100{display:flex;flex-shrink:0;flex-grow:0;flex-basis:unset;background:transparent;border-left:1px solid rgba(var(--color-base-font-rgb),.9);padding:.4rem 0;width:1px}/*! Autocomplete.js v2.6.3 | license MIT | (c) 2017, Baptiste Donaux | http://autocomplete-js.com */.autocomplete{position:absolute;width:44rem;max-width:calc(100% - 1rem);max-height:0;overflow-y:hidden;text-align:right;border-radius:10px}.autocomplete:active,.autocomplete:focus,.autocomplete:hover{background-color:var(--color-autocomplete-background)}.autocomplete:empty{display:none}.autocomplete>ul{list-style-type:none;margin:0;padding:0}.autocomplete>ul>li{cursor:pointer;padding:.5rem 1rem}.autocomplete>ul>li.active,.autocomplete>ul>li:active,.autocomplete>ul>li:focus,.autocomplete>ul>li:hover{background-color:var(--color-autocomplete-background-hover)}.autocomplete>ul>li.active a:active,.autocomplete>ul>li:active a:active,.autocomplete>ul>li:focus a:active,.autocomplete>ul>li:hover a:active,.autocomplete>ul>li.active a:focus,.autocomplete>ul>li:active a:focus,.autocomplete>ul>li:focus a:focus,.autocomplete>ul>li:hover a:focus,.autocomplete>ul>li.active a:hover,.autocomplete>ul>li:active a:hover,.autocomplete>ul>li:focus a:hover,.autocomplete>ul>li:hover a:hover{text-decoration:none}.autocomplete>ul>li.locked{cursor:inherit}.autocomplete.open{display:block;background-color:var(--color-autocomplete-background);color:var(--color-autocomplete-font);max-height:32rem;overflow-y:auto;z-index:5000;margin-top:3.5rem;border-radius:.8rem}.autocomplete.open:empty{display:none}@media screen and (max-width: 50em){.autocomplete>ul>li{padding:1rem}}#main_results #results.image-detail-open.only_template_images{width:min(98%,59.25rem)!important}#main_results #results.only_template_images.image-detail-open #backToTop{right:56.75rem!important;left:inherit}article.result-images .detail{display:none}#results.image-detail-open article.result-images[data-vim-selected] .detail{display:flex;flex-direction:column;position:fixed;right:60rem;left:0;top:13rem;transition:top 64ms ease-in 0s;bottom:0;background:var(--color-result-detail-background);border:1px solid var(--color-result-detail-background);z-index:1000;padding:4rem 3rem 3rem;overflow-y:scroll}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-images-source{display:block;flex:1;text-align:left;width:100%;border:none;text-decoration:none}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-images-source img{padding:0;margin:0;border:none;object-fit:contain;width:inherit;height:inherit;max-width:100%;min-height:inherit;max-height:calc(100vh - 42rem);background:inherit}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels{color:var(--color-result-detail-font);height:19rem}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels hr{border-top:1px solid var(--color-result-detail-hr);border-bottom:none}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels h4{height:2rem;overflow:hidden;text-overflow:ellipsis;font-size:.9rem;margin-bottom:0}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p{color:var(--color-result-detail-label-font);font-size:.9rem;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;margin:.8rem 0}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p span{display:inline-block;width:12rem}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels h4,#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p,#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a{text-align:right}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p.result-content{height:2rem;line-height:unset;overflow:hidden;text-overflow:ellipsis}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p.result-url{white-space:nowrap;overflow:hidden hidden;text-overflow:ellipsis}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p.result-content:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p.result-url:hover{position:relative;overflow:inherit!important;background:var(--color-result-detail-background);text-overflow:inherit!important}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a,#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a:visited,#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a:active{color:var(--color-result-detail-link)}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a:hover{text-decoration:underline}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close{top:1rem;right:1rem;padding:.4rem}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous{top:1rem;left:6rem;padding:.4rem .3rem .4rem .5rem}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next{top:1rem;left:2rem;padding:.4rem}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous{border-radius:50%;display:block;width:1.5rem;height:1.5rem;position:absolute;filter:opacity(40%);z-index:1200}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close span,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next span,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous span{display:block;width:1.5rem;height:1.5rem;text-align:center}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next span:before,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous span:before{vertical-align:sub}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close:visited,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close:active,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous:visited,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous:active,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next:visited,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next:active{color:var(--color-result-detail-font);background:var(--color-result-detail-background);border:1px solid var(--color-result-detail-font)}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close:focus,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous:focus,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next:focus,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next:hover{filter:opacity(80%)}#results.image-detail-open article.result-images[data-vim-selected] .detail .loader{position:absolute;top:1rem;left:50%;border-top:.5em solid var(--color-result-detail-loader-border);border-right:.5em solid var(--color-result-detail-loader-border);border-bottom:.5em solid var(--color-result-detail-loader-border);border-left:.5em solid var(--color-result-detail-loader-borderleft)}#results.image-detail-open.scrolling article.result-images[data-vim-selected] .detail{top:0}#results.image-detail-open.scrolling article.result-images[data-vim-selected] .detail a.result-images-source img{max-height:calc(100vh - 25rem)}@media screen and (max-width: 79.75em){#results.image-detail-open article.result-images[data-vim-selected] .detail{top:0;right:0}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-images-source{display:flex;flex-direction:column;justify-content:center}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-images-source img{width:100%;max-height:calc(100vh - 24rem)}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next{left:1rem}}@media screen and (max-width: 50em){#results.image-detail-open article.result-images[data-vim-selected] .detail{top:0;right:0;padding:1rem}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-images-source img{width:100%;max-height:calc(100vh - 20rem);margin:0}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p span{width:inherit;margin-left:1rem}}.dialog-modal{animation-name:dialogmodal;animation-duration:.13s}@keyframes dialogmodal{0%{opacity:0}50%{opacity:.5;transform:translate(-50%,-50%) scale(1.05)}}input.checkbox-onoff[type=checkbox]:before{transition:left .25s}iframe[src^="https://w.soundcloud.com"]{height:120px}iframe[src^="https://www.deezer.com"]{height:94px}iframe[src^="https://www.mixcloud.com"]{height:250px}iframe[src^="https://bandcamp.com/EmbeddedPlayer"]{height:350px}iframe[src^="https://bandcamp.com/EmbeddedPlayer/track"]{height:120px}iframe[src^="https://genius.com/songs"]{height:65px}.info-page code{font-family:monospace;border-radius:5px;background-color:var(--color-doc-code-background);color:var(--color-doc-code);padding:.2rem;border:0 none}.stats_endpoint .github-issue-button{display:block;font-size:16px}.stats_endpoint .issue-hide{display:none}.stats_endpoint input[type=checked]{position:absolute}.stats_endpoint label{margin:1rem 1rem 1rem 0}.stats_endpoint .step_content{margin:1rem 1rem 1rem 2rem}.stats_endpoint .step1,.stats_endpoint .step2{visibility:hidden}.stats_endpoint .step1_delay{transition:visibility 0s linear 4s}.stats_endpoint #step1:checked~.step1,.stats_endpoint #step2:checked~.step2{visibility:visible}.engine-stats{border-spacing:0;border-collapse:collapse}.engine-stats tr td,.engine-stats tr th{border-bottom:1px solid var(--color-result-border);padding:.25rem}.engine-stats table.engine-tooltip{border-spacing:0;border-collapse:collapse}.engine-stats table.engine-tooltip td,.engine-stats table.engine-tooltip th{border:none}.engine-stats .engine-name{width:20rem}.engine-stats .engine-score{width:7rem;text-align:right}.engine-stats .engine-reliability{text-align:right}table.engine-error th.engine-error-type,table.engine-error td.engine-error-type,failed-test{width:10rem}.engine-errors{margin-top:3rem}.engine-errors table.engine-error{max-width:1280px;margin:1rem 0 3rem;border:1px solid var(--color-result-border);text-align:right}.engine-errors table.engine-error tr th,.engine-errors table.engine-error tr td{padding:.5rem}.engine-errors table.engine-error span.log_parameters{border-right:1px solid solid var(--color-result-border);padding:0 1rem 0 0;margin:0 0 0 .5rem}.bar-chart-value{width:3em;display:inline-block;text-align:right;padding-right:.5rem}.bar-chart-graph{width:calc(100% - 5rem);display:inline-block}.bar-chart-bar{border:3px solid var(--color-bar-chart-primary);margin:1px 0}.bar-chart-serie1{border:3px solid var(--color-bar-chart-primary);margin:1px 0;float:left}.bar-chart-serie2{border:3px solid var(--color-bar-chart-secondary);margin:1px 0;float:left}.bar0{width:0;border:0}.bar1{width:1%}.bar2{width:2%}.bar3{width:3%}.bar4{width:4%}.bar5{width:5%}.bar6{width:6%}.bar7{width:7%}.bar8{width:8%}.bar9{width:9%}.bar10{width:10%}.bar11{width:11%}.bar12{width:12%}.bar13{width:13%}.bar14{width:14%}.bar15{width:15%}.bar16{width:16%}.bar17{width:17%}.bar18{width:18%}.bar19{width:19%}.bar20{width:20%}.bar21{width:21%}.bar22{width:22%}.bar23{width:23%}.bar24{width:24%}.bar25{width:25%}.bar26{width:26%}.bar27{width:27%}.bar28{width:28%}.bar29{width:29%}.bar30{width:30%}.bar31{width:31%}.bar32{width:32%}.bar33{width:33%}.bar34{width:34%}.bar35{width:35%}.bar36{width:36%}.bar37{width:37%}.bar38{width:38%}.bar39{width:39%}.bar40{width:40%}.bar41{width:41%}.bar42{width:42%}.bar43{width:43%}.bar44{width:44%}.bar45{width:45%}.bar46{width:46%}.bar47{width:47%}.bar48{width:48%}.bar49{width:49%}.bar50{width:50%}.bar51{width:51%}.bar52{width:52%}.bar53{width:53%}.bar54{width:54%}.bar55{width:55%}.bar56{width:56%}.bar57{width:57%}.bar58{width:58%}.bar59{width:59%}.bar60{width:60%}.bar61{width:61%}.bar62{width:62%}.bar63{width:63%}.bar64{width:64%}.bar65{width:65%}.bar66{width:66%}.bar67{width:67%}.bar68{width:68%}.bar69{width:69%}.bar70{width:70%}.bar71{width:71%}.bar72{width:72%}.bar73{width:73%}.bar74{width:74%}.bar75{width:75%}.bar76{width:76%}.bar77{width:77%}.bar78{width:78%}.bar79{width:79%}.bar80{width:80%}.bar81{width:81%}.bar82{width:82%}.bar83{width:83%}.bar84{width:84%}.bar85{width:85%}.bar86{width:86%}.bar87{width:87%}.bar88{width:88%}.bar89{width:89%}.bar90{width:90%}.bar91{width:91%}.bar92{width:92%}.bar93{width:93%}.bar94{width:94%}.bar95{width:95%}.bar96{width:96%}.bar97{width:97%}.bar98{width:98%}.bar99{width:99%}.bar100{width:100%}.osm-map-box{height:300px;width:100%;margin:10px 0}#main_index{margin-top:26vh}.index{text-align:center}.index .title{background:url(../img/searxng.png) no-repeat;min-height:4rem;margin:4rem auto;background-position:center;background-size:contain}.index h1{font-size:4em;visibility:hidden}.index #search,.index #search_header{margin:0 auto;background:inherit;border:inherit;padding:0;display:block}.index .search_filters{display:block;margin:1em 0}.index .category label{padding:6px 10px;border-bottom:initial!important}@media screen and (max-width: 79.75em){div.title h1{font-size:1em}#main_index{margin-top:6em}}table{border-collapse:collapse}table th,table td{text-align:center;padding:1rem .5rem;text-align:right}table tr.pref-group th{font-weight:400;text-align:right;background:var(--color-settings-table-group-background)}#main_preferences form{width:100%}#main_preferences fieldset{margin:8px;border:none}#main_preferences legend{margin:0;padding:5px 0 0;display:block;float:right;width:300px}#main_preferences input[type=text]{width:13.25rem;color:var(--color-toolkit-input-text-font);border:none;background:none repeat scroll 0 0 var(--color-toolkit-select-background);padding:.2rem .4rem;height:2rem;border-radius:5px}#main_preferences input[type=text]:hover,#main_preferences input[type=text]:focus{background-color:var(--color-toolkit-select-background-hover)}#main_preferences div.pref-group{width:100%;font-weight:400;padding:1rem .5rem;text-align:right;background:var(--color-settings-table-group-background)}#main_preferences .value{margin:0;padding:0;float:right;width:15em}#main_preferences .value select,#main_preferences .value input[type=text]{font-size:inherit!important;margin-top:0;margin-left:1rem;margin-bottom:0;margin-right:0}#main_preferences .value select{width:14rem}#main_preferences .value select:focus,#main_preferences .value input:focus{outline:none;box-shadow:0 0 1px 1px var(--color-btn-background)}#main_preferences .description{margin:0;padding:5px 0 0;float:left;width:50%;color:var(--color-settings-engine-description-font);font-size:90%}#main_preferences .bang{text-align:right;border-radius:5px;background-color:var(--color-doc-code-background);color:var(--color-doc-code);padding:.2rem;border:0 none}#main_preferences .category{margin-left:.5rem}#main_preferences .category label{border:2px solid transparent;padding:.2rem .4rem;border-radius:5px}#main_preferences .category input[type=checkbox]:checked+label{border:2px solid var(--color-categories-item-border-selected)}#main_preferences table.table_engines th.name label{cursor:pointer}#main_preferences table.table_engines th.name .engine-tooltip{margin-top:1.8rem;right:calc((100% - 85em)/2 + 10em);max-width:40rem}#main_preferences table.table_engines th.name .engine-tooltip .engine-description{margin-top:.5rem}#main_preferences table.table_engines th.name .engine-tooltip .bang{margin:.3rem}#main_preferences table.table_engines .checkbox-col,#main_preferences table.table_engines .name,#main_preferences table.table_engines .shortcut{text-align:right}#main_preferences table.cookies{width:100%;direction:ltr}#main_preferences table.cookies th,#main_preferences table.cookies td{text-align:left;font-family:monospace;font-size:1rem;padding:.5em;vertical-align:top}#main_preferences table.cookies td:first-child{word-break:keep-all;width:14rem;padding-right:1rem}#main_preferences table.cookies td:last-child{word-break:break-all}#main_preferences table.cookies>tbody>tr:nth-child(2n)>th,#main_preferences table.cookies>tbody>tr:nth-child(2n)>td{background-color:var(--color-settings-tr-hover)}#main_preferences .preferences_back{background:none repeat scroll 0 0 var(--color-btn-background);color:var(--color-btn-font);border:0 none;border-radius:10px;cursor:pointer;display:inline-block;margin:2px 4px;padding:.7em}#main_preferences .preferences_back a{color:var(--color-settings-return-font)}#main_preferences .preferences_back a:first-letter{text-transform:uppercase}#main_preferences #toggle-all-engines-container{width:max-content;margin-left:auto}#main_preferences div.selectable_url pre{width:100%}#main_preferences #copy-hash-container{display:flex;align-items:center;gap:.5rem}#main_preferences #copy-hash-container div.selectable_url pre{width:auto;flex-grow:1}#main_preferences #pref-hash-input{width:100%}@media screen and (max-width: 79.75em){.preferences_back{clear:both}.engine-tooltip{right:10em!important}}#search{padding:0;margin:0}#search_header{padding-top:1.5em;padding-left:2em;padding-right:7rem;margin:0;background:var(--color-header-background);border-bottom:1px solid var(--color-header-border);display:grid;gap:1rem 1.2rem;grid-template-columns:3rem 1fr;grid-template-areas:"logo search" "spacer categories"}.category_checkbox,.category_button{display:inline-block;position:relative;margin-left:1rem;padding:0}.category_checkbox input{display:none}.category_checkbox label{cursor:pointer;padding:.2rem 0;display:inline-flex;text-transform:capitalize;font-size:.9em;border-bottom:2px solid transparent;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.category_checkbox label svg{padding-right:.2rem}.category_checkbox label div.category_name{margin:auto 0}.category_checkbox input[type=checkbox]:checked+label{color:var(--color-categories-item-selected-font);border-bottom:2px solid var(--color-categories-item-border-selected)}button.category_button{background-color:inherit;color:var(--color-base-font);cursor:pointer;padding:.2rem 0;display:inline-flex;align-items:center;text-transform:capitalize;font-size:.9em;border:none;border-bottom:2px solid transparent}button.category_button svg{padding-right:.2rem}button.category_button.selected,button.category_button:active{color:var(--color-categories-item-selected-font);border-bottom:2px solid var(--color-categories-item-border-selected)}.no-js #categories_container:has(button.category_button:focus-within) button.category_button.selected{color:var(--color-base-font);border-bottom:none}.no-js #categories_container:has(button.category_button:focus-within) button.category_button:focus-within{color:var(--color-categories-item-selected-font);border-bottom:2px solid var(--color-categories-item-border-selected)}#search_logo{padding:.5rem 10px 0;grid-area:logo;display:flex;align-items:center;justify-content:center}#search_logo svg{flex:1;width:30px;height:30px;margin:.5rem 0 auto}.search_categories{grid-area:categories}.search_categories .help{display:none}.search_categories:hover .help{display:block;position:absolute;background:var(--color-base-background);padding:1rem .6rem .6rem 0;z-index:1000;width:100%;left:-.1rem}#search_view{padding:.5rem .5rem 0;grid-area:search}body.results_endpoint #search_view{padding:.5rem 2.8rem 0 0}.search_box{border-radius:.8rem;width:100%;max-width:44rem;display:inline-flex;flex-direction:row;white-space:nowrap;box-shadow:var(--color-search-shadow)}#clear_search{display:block;border-collapse:separate;box-sizing:border-box;width:1.8rem;margin:0;padding:.8rem .2rem;background:none repeat scroll 0 0 var(--color-search-background);border:none;outline:none;color:var(--color-search-font);font-size:1.1rem;z-index:1000}#clear_search:hover{color:var(--color-search-background-hover)}#clear_search.empty *,html.no-js #clear_search.hide_if_nojs{display:none}#q,#send_search{display:block;margin:0;padding:.8rem;background:none repeat scroll 0 0 var(--color-search-background);border:none;outline:none;color:var(--color-search-font);font-size:1.1rem;z-index:100}#q{width:100%;padding-right:1rem;padding-left:0!important;border-radius:0 .8rem .8rem 0}#q::-ms-clear,#q::-webkit-search-cancel-button{display:none}#send_search{border-radius:.8rem 0 0 .8rem}#send_search:hover{cursor:pointer;background-color:var(--color-search-background-hover);color:var(--color-search-background)}.no-js #clear_search,.no-js #send_search{width:auto!important;border-right:1px solid var(--color-search-border)}.search_filters{margin-top:.6rem;margin-left:0;margin-bottom:0;margin-right:10.6rem;display:flex;overflow-x:auto;overscroll-behavior-inline:contain}.search_filters select{background-color:inherit}.search_filters select:hover,.search_filters select:focus{color:var(--color-base-font)}@media screen and (max-width: 79.75em){#search_header{padding:1.5em .5rem 0;column-gap:.5rem}.search_filters{margin-top:.6rem;margin-left:0;margin-bottom:0;margin-right:3.5rem}#categories{font-size:90%;clear:both}}@media screen and (max-width: 79.75em) and (hover: none){#main_index #categories_container,#main_results #categories_container{width:max-content}#main_index #categories_container .category_checkbox,#main_results #categories_container .category_checkbox{display:inline-block;width:auto}#main_index #categories,#main_results #categories{width:100%;text-align:right;overflow:scroll hidden;-webkit-overflow-scrolling:touch}}@media screen and (max-width: 50em){#search_header{width:100%;margin:0;padding:.1rem 0 0;gap:0 0;grid-template-areas:"logo search" "categories categories"}.search_logo{padding:0}.search_box{width:100%}#q{width:100%;flex:1}.search_filters{margin:0 10px;padding:.5rem 0}.category{display:inline-block;width:auto;margin:0}.category svg{display:none}.category_checkbox label,.category_button{padding:1rem!important;margin:0!important}#search_view:focus-within{display:block;background-color:var(--color-search-background);position:absolute;top:0;height:100%;width:100%;z-index:2000}#search_view:focus-within .search_box{border-bottom:1px solid var(--color-search-border);width:100%;border-radius:0;box-shadow:none}#search_view:focus-within .search_box #send_search{margin-left:0!important}#search_view:focus-within .search_box *{border:none;border-radius:0;box-shadow:none}#main_results #q:placeholder-shown~#send_search{margin-left:2.6rem;transition:margin .1s}}@media screen and (max-width: 20rem){#search_header{grid-template-areas:"search search" "categories categories"}#search_logo{display:none}}#categories{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}#categories::-webkit-scrollbar{width:0;height:0}#categories_container{position:relative}.favicon img{height:1.5rem;width:1.5rem;border-radius:10%;background-color:var(--color-favicon-background-color);border:1px solid var(--color-favicon-border-color);display:flex}@media screen and (min-width: 50em){.center-alignment-yes #main_results{--center-page-width: 48rem}}@media screen and (width >= 62rem){.center-alignment-yes #main_results{--center-page-width: 60rem}}@media screen and (min-width: 79.75em){.center-alignment-yes #main_results{--center-page-width: 73rem}}@media screen and (min-width: 50em) and (max-width: 79.75em){.center-alignment-yes #main_results #results{grid-template-columns:60% calc(40% - 5rem);margin-left:0;margin-right:0}.center-alignment-yes #main_results #urls{margin-right:3rem}.center-alignment-yes #main_results #sidebar{margin-left:1rem}.center-alignment-yes #main_results #backToTop{right:calc(60% + 1rem)}}@media screen and (min-width: 79.75em){.center-alignment-yes #main_results{display:flex;flex-direction:column;align-items:center}.center-alignment-yes #main_results #search{width:100%;display:flex;flex-direction:column;align-items:center}.center-alignment-yes #main_results #search_header{grid-template-columns:calc(50% - 4.5rem - var(--center-page-width) / 2) 3rem var(--center-page-width);grid-template-areas:"na logo search" "na spacer categories";column-gap:1.2rem;width:100%;padding-left:0;padding-right:0}.center-alignment-yes #main_results .search_filters{margin-right:.5rem;width:var(--center-page-width)}.center-alignment-yes #main_results #results{margin-left:2rem;margin-right:10rem}.center-alignment-yes #main_results #results.only_template_images,.center-alignment-yes #main_results #results.image-detail-open{align-self:flex-start}.center-alignment-yes #main_results #results:not(.only_template_images,.image-detail-open){margin-right:1.5rem;grid-template-columns:calc(var(--center-page-width) - 5rem - 25rem) 25rem}.center-alignment-yes #main_results #results:not(.only_template_images,.image-detail-open) #backToTop{right:calc(50% - 25rem - 5rem + 1rem + var(--center-page-width) / 2)}.center-alignment-yes #main_results #results .result .content{max-width:inherit}.center-alignment-yes #main_results #urls{margin-right:0}.center-alignment-yes #main_results #sidebar{margin-left:0}}.sxng-icon-set{display:inline-block;vertical-align:bottom;line-height:1;text-decoration:inherit;transform:scaleX(-1)}.sxng-icon-set-small{width:1rem;height:1rem;display:inline-block;vertical-align:bottom;line-height:1;text-decoration:inherit;transform:scaleX(-1)}.sxng-icon-set-big{width:1.5rem;height:1.5rem;display:inline-block;vertical-align:bottom;line-height:1;text-decoration:inherit;transform:scaleX(-1)}html{font-family:sans-serif;font-size:.9em;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%;color:var(--color-base-font);background-color:var(--color-base-background);padding:0;margin:0;scroll-behavior:smooth}body,main{padding:0;margin:0}body{display:flex;flex-direction:column;height:100vh;margin:0}@supports (height: 100dvh){body{height:100dvh}}main{width:100%;margin-bottom:2rem;flex:1}.page_with_header{margin:2em auto;width:85em}footer{clear:both;min-height:4rem;padding:1rem 0;width:100%;text-align:center;background-color:var(--color-footer-background);border-top:1px solid var(--color-footer-border);overflow:hidden}footer p{font-size:.9em}.page_with_header .logo{height:40px}input[type=submit],#results button[type=submit],.button{padding:.7rem;display:inline-block;background:var(--color-btn-background);color:var(--color-btn-font);border-radius:10px;border:0;cursor:pointer}a{text-decoration:none;color:var(--color-url-font)}a:visited,a:visited .highlight{color:var(--color-url-visited-font)}article[data-vim-selected]{background:var(--color-result-vim-selected);border-right:.2rem solid var(--color-result-vim-arrow);border-radius:10px 0 0 10px}article.result-images[data-vim-selected]{background:var(--color-result-vim-arrow);border:none;border-radius:10px}article.result-images[data-vim-selected] .image_thumbnail{filter:opacity(60%)}article.result-images[data-vim-selected] span.title,article.result-images[data-vim-selected] span.source{color:var(--color-result-image-span-font-selected)}article[data-vim-selected].category-videos,article[data-vim-selected].category-news,article[data-vim-selected].category-map,article[data-vim-selected].category-music,article[data-vim-selected].category-files,article[data-vim-selected].category-social{border:1px solid var(--color-result-vim-arrow);border-radius:10px}.result{margin:.125rem 0;padding:1rem;box-sizing:border-box;width:100%;border-right:.2rem solid transparent}.result h3{font-size:1.2rem;word-wrap:break-word;margin:.4rem 0;padding:0}.result h3 a{color:var(--color-result-link-font);font-weight:400;font-size:1.1em}.result h3 a:visited{color:var(--color-result-link-visited-font)}.result h3 a:focus,.result h3 a:hover{text-decoration:underline;border:none;outline:none}.result .cache_link,.result .proxyfied_link{font-size:smaller!important;margin-left:.5rem}.result .content,.result .stat{font-size:.9em;margin:0;padding:0;max-width:54em;word-wrap:break-word;line-height:1.24}.result .content .highlight,.result .stat .highlight{color:var(--color-result-description-highlight-font);background:inherit;font-weight:700}.result .altlink a{font-size:.9em;margin:0 10px 0 0;padding:5px 10px;border-radius:5px;background:var(--color-show-btn-background);color:var(--color-show-btn-font);cursor:pointer}.result .altlink a:hover{background:var(--color-btn-background);color:var(--color-btn-font)}.result .codelines .highlight{color:inherit;background:inherit;font-weight:400}.result .url_header{display:flex;gap:.5rem}.result .url_wrapper{display:flex;align-items:center;font-size:1rem;color:var(--color-result-url-font);flex-flow:row nowrap;overflow:hidden;margin:0;padding:0}.result .url_wrapper .url_o1{white-space:nowrap;flex-shrink:1;padding-bottom:1px}.result .url_wrapper .url_o1 .url_i1{unicode-bidi:plaintext}.result .url_wrapper .url_o1:after{content:" ";width:1ch;display:inline-block}.result .url_wrapper .url_o2{overflow:hidden;white-space:nowrap;flex:0 1 content;text-align:right;padding-bottom:1px}.result .url_wrapper .url_o2 .url_i2{float:right}.result .published_date,.result .result_length,.result .result_views,.result .result_author,.result .result_shipping,.result .result_source_country{font-size:.8em;color:var(--color-result-publishdate-font)}.result .result_price{font-size:1.2em;color:var(--color-result-description-highlight-font)}.result img.thumbnail{float:right;padding-top:.6rem;padding-left:1rem;width:7rem;height:unset}.result .break{clear:both}.result-paper .attributes,.result-packages .attributes{display:table;border-spacing:.125rem}.result-paper .attributes div,.result-packages .attributes div{display:table-row}.result-paper .attributes div span,.result-packages .attributes div span{font-size:.9rem;margin-top:.25rem;display:table-cell}.result-paper .attributes div span time,.result-packages .attributes div span time{font-size:.9rem}.result-paper .attributes div span:first-child,.result-packages .attributes div span:first-child{color:var(--color-base-font);min-width:10rem}.result-paper .attributes div span:nth-child(2),.result-packages .attributes div span:nth-child(2){color:var(--color-result-publishdate-font)}.result-paper .content,.result-packages .content{margin-top:.25rem}.result-paper .comments,.result-packages .comments{font-size:.9rem;margin:.25rem 0 0;padding:0;word-wrap:break-word;line-height:1.24;font-style:italic}.result-packages .attributes{margin-top:.3rem}.template_group_images{display:flex;flex-wrap:wrap}.template_group_images:after{flex-grow:10;content:""}.category-videos,.category-news,.category-map,.category-music,.category-files,.category-social{border:1px solid var(--color-result-border);margin:0 .5rem 1rem!important;border-radius:10px}.category-social .image{width:auto!important;min-width:48px;min-height:48px;padding:0 5px 25px 0!important}.audio-control audio{width:100%;padding:10px 0 0}.embedded-content iframe{width:100%;padding:10px 0 0}.result-videos img.thumbnail{float:right;padding-top:.6rem;padding-left:1rem;width:20rem;height:unset}.result-videos .content{overflow:hidden}.result-videos .embedded-video iframe{width:100%;aspect-ratio:16 / 9;padding:10px 0 0}@supports not (aspect-ratio: 1 / 1){.result-videos .embedded-video iframe{height:25.3125rem}}.engines{float:left;display:flex;flex-wrap:wrap;justify-content:flex-end;color:var(--color-result-engines-font)}.engines span{font-size:smaller;margin-top:0;margin-bottom:0;margin-left:.5rem;margin-right:0}.small_font{font-size:.8em}.highlight{color:var(--color-result-link-font-highlight);background:inherit}.empty_element{font-style:italic}.result-images{flex-grow:1;padding:.5rem .5rem 3rem;margin:.25rem;border:none!important;height:12rem;width:unset}.result-images>a{position:relative;outline:none}.result-images img{margin:0;padding:0;border:none;height:100%;width:auto;object-fit:cover;vertical-align:bottom;background:var(--color-result-image-background)}.result-images .image_resolution{position:absolute;right:0;bottom:0;background:var(--color-image-resolution-background);padding:.3rem .5rem;font-size:.9rem;color:var(--color-image-resolution-font);border-top-left-radius:.3rem}.result-images span.title,.result-images span.source{display:block;position:absolute;width:100%;font-size:.9rem;color:var(--color-result-image-span-font);padding:.5rem 0 0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.result-images span.source{padding:1.8rem 0 0;font-size:.7rem}.result-map img.image{float:left!important;height:100px!important;width:auto!important}.result-map table{font-size:.9em;width:auto;border-collapse:separate;border-spacing:0 .35rem}.result-map table th{font-weight:inherit;width:17rem;vertical-align:top;text-align:right}.result-map table td{vertical-align:top;text-align:right}.hidden{display:none!important}#results{margin-top:1rem;margin-left:2rem;margin-bottom:0;margin-right:10rem;display:grid;grid-template:"corrections sidebar" min-content "answers sidebar" min-content "urls sidebar" 1fr "pagination sidebar" min-content / 45rem 25rem;gap:0 5rem}#results #sidebar *:first-child{margin-top:0}#urls{padding:0;grid-area:urls}#apis .wrapper{display:flex}#suggestions .wrapper{display:flex;flex-flow:column;justify-content:flex-end}#suggestions .wrapper form{display:inline-block;flex:1 1 50%}#suggestions input,#infoboxes input{padding:0;margin:3px;font-size:.9em;display:inline-block;background:transparent;color:var(--color-result-search-url-font);cursor:pointer;width:100%;text-overflow:ellipsis;overflow:hidden;text-align:left}#suggestions input[type=submit],#infoboxes input[type=submit],#suggestions .infobox .url a,#infoboxes .infobox .url a{color:var(--color-result-link-font);text-decoration:none;font-size:.9rem}#suggestions input[type=submit]:hover,#infoboxes input[type=submit]:hover,#suggestions .infobox .url a:hover,#infoboxes .infobox .url a:hover{text-decoration:underline}#corrections{grid-area:corrections;display:flex;flex-flow:row wrap;margin:0 0 1em}#corrections h4,#corrections input[type=submit]{display:inline-block;padding:.5rem;margin:.5rem}#corrections input[type=submit]{font-size:.8rem;border-radius:5px}#infoboxes .title,#suggestions .title,#search_url .title,#engines_msg .title,#apis .title{margin:2em 0 .5em;color:var(--color-base-font)}summary.title{cursor:pointer;padding-top:1em}.sidebar-collapsible{border-top:1px solid var(--color-sidebar-border);padding-bottom:.5em}#sidebar-end-collapsible{border-bottom:1px solid var(--color-sidebar-border);width:100%}#answers{grid-area:answers;background:var(--color-answer-background);padding:1rem;margin:1rem 0;margin-top:0;color:var(--color-answer-font);border-radius:10px}#answers h4{display:none}#answers span{overflow-wrap:anywhere}#answers .answer{display:flex;flex-direction:column}#answers .answer-url{margin:5px 10px 10px auto}#infoboxes form{min-width:210px}#sidebar{grid-area:sidebar;word-wrap:break-word;color:var(--color-sidebar-font)}#sidebar .infobox{margin:10px 0;border:1px solid var(--color-sidebar-border);padding:1rem;font-size:.9em;border-radius:10px}#sidebar .infobox h2{margin:0 0 .5em}#sidebar .infobox img{max-width:100%;max-height:12em;display:block;margin:0 auto;padding:0}#sidebar .infobox dt{font-weight:700}#sidebar .infobox .attributes dl{margin:.5em 0}#sidebar .infobox .attributes dt{display:inline;margin:.5em 0 .5em .25em;padding:0}#sidebar .infobox .attributes dd{display:inline;margin:.5em 0;padding:0}#sidebar .infobox input{font-size:1em}#sidebar .infobox br,#sidebar .infobox .attributes,#sidebar .infobox .urls{clear:both}#apis input{font-size:.9em;margin:0 10px 0 0;padding:5px 10px;border-radius:5px;background:var(--color-show-btn-background);color:var(--color-show-btn-font);cursor:pointer}#apis input:hover{background:var(--color-btn-background);color:var(--color-btn-font)}#engines_msg .engine-name{width:10rem}#engines_msg .response-error{color:var(--color-error)}#engines_msg .bar-chart-value{width:auto}#search_url div.selectable_url pre{float:left;width:200em}#search_url button#copy_url{float:right;padding:.4rem;margin-left:.5rem;border-radius:.3rem;display:none}#links_on_top{position:absolute;left:1rem;text-align:left;top:2.7rem;padding:0;border:0;display:flex;align-items:center;font-size:1em;color:var(--color-search-font)}#links_on_top a{display:flex;align-items:center;margin-left:1em}#links_on_top a svg{font-size:1.2em;margin-left:.125em}#links_on_top a,#links_on_top a:link *,#links_on_top a:hover *,#links_on_top a:visited *,#links_on_top a:active *{color:var(--color-search-font)}#pagination{grid-area:pagination}#pagination br{clear:both}.numbered_pagination{display:flex;flex-direction:row;justify-content:center;align-items:center;overflow:hidden}.page_number{background:transparent!important;color:var(--color-result-link-font)!important;text-decoration:underline}.page_number_current{background:transparent;color:var(--color-result-link-visited-font);border:none}#backToTop{border:1px solid var(--color-backtotop-border);margin:0;padding:0;font-size:1em;background:var(--color-backtotop-background);position:fixed;bottom:8rem;right:56.3rem;transition:opacity .5s;opacity:0;pointer-events:none;border-radius:10px}#backToTop a{display:block;margin:0;padding:.7em}#backToTop a,#backToTop a:visited,#backToTop a:hover,#backToTop a:active{color:var(--color-backtotop-font)}#results.scrolling #backToTop{opacity:1;pointer-events:all}@media screen and (width <= calc(79.75em - .5px)){#links_on_top span{display:none}}@media screen and (width <= 52rem){body.results_endpoint #links_on_top .link_on_top_about,body.results_endpoint #links_on_top .link_on_top_donate{display:none}}@media screen and (min-width: 50em) and (max-width: 79.75em){.center-alignment-no #links_on_top span{display:none}.center-alignment-no .page_with_header{margin:2rem .5rem;width:auto}.center-alignment-no #infoboxes{position:inherit;max-width:inherit}.center-alignment-no #infoboxes .infobox{clear:both}.center-alignment-no #infoboxes .infobox img{float:right;max-width:10em;margin:.5em 0 .5em .5em}.center-alignment-no #sidebar{margin:0 .5rem .125rem;padding:0;float:none;border:none;width:auto}.center-alignment-no #sidebar input{border:0}.center-alignment-no .result .thumbnail{max-width:98%}.center-alignment-no .result .url span.url{display:block;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;width:100%}.center-alignment-no .result .engines{float:left;display:flex;flex-wrap:wrap;justify-content:flex-end;padding:3px 0 0}.center-alignment-no .result-images{border-bottom:none!important}.center-alignment-no .image_result,.center-alignment-no .image_result img{max-width:98%}.center-alignment-no #backToTop{display:none}.center-alignment-no #pagination{margin:2rem 0 0!important}.center-alignment-no #main_results div#results{margin:0 auto;justify-content:center;display:grid;grid-template:"corrections" min-content "answers" min-content "sidebar" min-content "urls" 1fr "pagination" min-content / 45rem;gap:0}}#main_results div#results.only_template_images{margin:1rem .5rem 0;display:grid;grid-template:"corrections" min-content "answers" min-content "sidebar" min-content "urls" 1fr "pagination" min-content / 100%;gap:0}#main_results div#results.only_template_images #sidebar{display:none}#main_results div#results.only_template_images #urls{margin:0;display:flex;flex-wrap:wrap}#main_results div#results.only_template_images #urls:after{flex-grow:10;content:""}#main_results div#results.only_template_images #backToTop{right:auto;left:1rem}#main_results div#results.only_template_images #pagination{margin-left:4rem}@media screen and (max-width: 50em){#links_on_top span{display:none}.page_with_header{margin:2rem .5rem;width:auto}#infoboxes{position:inherit;max-width:inherit}#infoboxes .infobox{clear:both}#infoboxes .infobox img{float:right;max-width:10em;margin:.5em 0 .5em .5em}#sidebar{margin:0 .5rem .125rem;padding:0;float:none;border:none;width:auto}#sidebar input{border:0}.result .thumbnail{max-width:98%}.result .url span.url{display:block;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;width:100%}.result .engines{float:left;display:flex;flex-wrap:wrap;justify-content:flex-end;padding:3px 0 0}.result-images{border-bottom:none!important}.image_result,.image_result img{max-width:98%}#backToTop{display:none}#pagination{margin:2rem 0 0!important}#main_results div#results{margin:0 auto;justify-content:center;display:grid;grid-template:"corrections" min-content "answers" min-content "sidebar" min-content "urls" 1fr "pagination" min-content / 45rem;gap:0}html{background-color:var(--color-base-background-mobile)}#main_results div#results{grid-template-columns:100%;margin:0 auto}#links_on_top{top:1.4rem;left:10px}#main_index #links_on_top{top:.5rem;left:.5rem}#results{margin:0;padding:0}#pagination{margin:2rem 1rem 0!important}article[data-vim-selected]{border:1px solid var(--color-result-vim-arrow);border-radius:10px}.result{background:var(--color-result-background);border:1px solid var(--color-result-background);margin:1rem 2%;width:96%;border-radius:10px}.result-images{margin:0;height:10rem;background:var(--color-base-background-mobile);width:unset}.infobox{border:none!important;background-color:var(--color-sidebar-background)}.numbered_pagination{display:none}.result-paper .attributes,.result-packages .attributes,.result-paper .attributes div,.result-packages .attributes div{display:block}.result-paper .attributes div span,.result-packages .attributes div span{display:inline}.result-paper .attributes div span:first-child,.result-packages .attributes div span:first-child{font-weight:700}.result-paper .attributes div span:nth-child(2),.result-packages .attributes div span:nth-child(2){margin-right:.5rem}}@media screen and (max-width: 35em){.result-videos img.thumbnail{float:none!important}.result-videos .content{overflow:inherit}}pre code{white-space:pre-wrap}#main_results .result-keyvalue caption{padding:.8rem .5rem;font-style:italic;caption-side:bottom;background-color:var(--color-result-keyvalue-table)}#main_results .result-keyvalue .col-key{width:25%}#main_results .result-keyvalue table{word-break:break-word;table-layout:fixed;width:100%;background-color:var(--color-result-keyvalue-table)}#main_results .result-keyvalue tr.odd{background-color:var(--color-result-keyvalue-odd)}#main_results .result-keyvalue tr.even{background-color:var(--color-result-keyvalue-even)}#main_results .result-keyvalue th,#main_results .result-keyvalue td{padding:.3rem .5rem}#q,#sidebar .infobox dt bdi{direction:rtl}#urls{direction:initial;text-align:right}#urls .result .url_header{direction:rtl}#urls .result .url_wrapper{justify-content:end}#main_results div#results.only_template_images #urls{direction:rtl}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p{direction:rtl}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p.result-url{direction:ltr}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p.result-url span{direction:rtl;float:right}@supports ((background-position-x: 100%) and ((appearance: none) or (-webkit-appearance: none) or (-moz-appearance: none))){select{border-width:0 0 0 2rem;background-position-x:-2rem}}#vim-hotkeys-help table{direction:ltr;text-align:left}#main_preferences h1,#main_stats h1{background-position-x:100%}.bar-chart-serie1,.bar-chart-serie2{float:right}.engine-stats .engine-name,.engine-stats .engine-score,.engine-stats .result-count,.engine-stats .response-time,.engine-stats .engine-reliability{text-align:right} diff --git a/searx/static/themes/simple/css/searxng.min.css b/searx/static/themes/simple/css/searxng.min.css index 3721b0120..6ca440aad 100644 --- a/searx/static/themes/simple/css/searxng.min.css +++ b/searx/static/themes/simple/css/searxng.min.css @@ -1 +1 @@ -/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}:root{--color-base-font: #444;--color-base-font-rgb: 68, 68, 68;--color-base-background: #fff;--color-base-background-mobile: #f2f5f8;--color-url-font: #334999;--color-url-visited-font: #9822c3;--color-header-background: #fdfbff;--color-header-border: #ddd;--color-footer-background: #fdfbff;--color-footer-border: #ddd;--color-sidebar-border: #ddd;--color-sidebar-font: #000;--color-sidebar-background: #fff;--color-backtotop-font: #444;--color-backtotop-border: #ddd;--color-backtotop-background: #fff;--color-btn-background: #3050ff;--color-btn-font: #fff;--color-show-btn-background: #bbb;--color-show-btn-font: #000;--color-search-border: #bbb;--color-search-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-search-background: #fff;--color-search-font: #222;--color-search-background-hover: #3050ff;--color-error: #db3434;--color-error-background: #fae1e1;--color-warning: #dbba34;--color-warning-background: #faf5e1;--color-success: #42db34;--color-success-background: #e3fae1;--color-categories-item-selected-font: #3050ff;--color-categories-item-border-selected: #3050ff;--color-autocomplete-font: #000;--color-autocomplete-border: #bbb;--color-autocomplete-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-autocomplete-background: #fff;--color-autocomplete-background-hover: #e3e3e3;--color-answer-font: #444;--color-answer-background: #fff;--color-result-keyvalue-col-table: #fdfbff;--color-result-keyvalue-odd: #fdfbff;--color-result-keyvalue-even: #fff;--color-result-background: #fff;--color-result-border: #ddd;--color-result-url-font: #000;--color-result-vim-selected: #f7f7f7;--color-result-vim-arrow: #000bbb;--color-result-description-highlight-font: #000;--color-result-link-font: #000bbb;--color-result-link-font-highlight: #000bbb;--color-result-link-visited-font: #9822c3;--color-result-publishdate-font: #777;--color-result-engines-font: #545454;--color-result-search-url-border: #ddd;--color-result-search-url-font: #000;--color-result-image-span-font: #444;--color-result-image-span-font-selected: #fff;--color-result-image-background: #fff;--color-settings-tr-hover: #ebebeb;--color-settings-engine-description-font: #545454;--color-settings-table-group-background: #0001;--color-result-detail-font: #fff;--color-result-detail-label-font: lightgray;--color-result-detail-background: #242424;--color-result-detail-hr: #555;--color-result-detail-link: #8af;--color-result-detail-loader-border: rgba(255, 255, 255, .2);--color-result-detail-loader-borderleft: rgba(0, 0, 0, 0);--color-toolkit-badge-font: #fff;--color-toolkit-badge-background: #545454;--color-toolkit-kbd-font: #fff;--color-toolkit-kbd-background: #000;--color-toolkit-dialog-border: #ddd;--color-toolkit-dialog-background: #fff;--color-toolkit-tabs-label-border: #fff;--color-toolkit-tabs-section-border: #ddd;--color-toolkit-select-background: #e1e1e1;--color-toolkit-select-border: #ddd;--color-toolkit-select-background-hover: #bbb;--color-toolkit-input-text-font: #222;--color-toolkit-checkbox-onoff-off-background: #ddd;--color-toolkit-checkbox-onoff-on-background: #ddd;--color-toolkit-checkbox-onoff-on-mark-background: #3050ff;--color-toolkit-checkbox-onoff-on-mark-color: #fff;--color-toolkit-checkbox-onoff-off-mark-background: #aaa;--color-toolkit-checkbox-onoff-off-mark-color: #fff;--color-toolkit-checkbox-label-background: #ddd;--color-toolkit-checkbox-label-border: #ddd;--color-toolkit-checkbox-input-border: #3050ff;--color-toolkit-engine-tooltip-border: #ddd;--color-toolkit-engine-tooltip-background: #fff;--color-toolkit-loader-border: rgba(0, 0, 0, .2);--color-toolkit-loader-borderleft: rgba(255, 255, 255, 0);--color-doc-code: #003;--color-doc-code-background: #ddeaff;--color-bar-chart-primary: #5bc0de;--color-bar-chart-secondary: #deb15b;--color-image-resolution-background: rgba(0, 0, 0, .5);--color-image-resolution-font: #fff;--color-loading-indicator: rgba(255, 255, 255, .2);--color-loading-indicator-gap: #fff;--color-line-number: #64708d;--color-favicon-background-color: #ddd;--color-favicon-border-color: #ccc}@media (prefers-color-scheme: dark){:root.theme-auto{--color-base-font: #bbb;--color-base-font-rgb: 187, 187, 187;--color-base-background: #222428;--color-base-background-mobile: #222428;--color-url-font: #8af;--color-url-visited-font: #c09cd9;--color-header-background: #1e1e22;--color-header-border: #333;--color-footer-background: #1e1e22;--color-footer-border: #333;--color-sidebar-border: #555;--color-sidebar-font: #fff;--color-sidebar-background: #292c34;--color-backtotop-font: #bbb;--color-backtotop-border: #333;--color-backtotop-background: #2b2e36;--color-btn-background: #58f;--color-btn-font: #222;--color-show-btn-background: #555;--color-show-btn-font: #fff;--color-search-border: #555;--color-search-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-search-background: #2b2e36;--color-search-font: #fff;--color-search-background-hover: #58f;--color-error: #f55b5b;--color-error-background: #390a0a;--color-warning: #f1d561;--color-warning-background: #39300a;--color-success: #79f56e;--color-success-background: #0e390a;--color-categories-item-selected-font: #58f;--color-categories-item-border-selected: #58f;--color-autocomplete-font: #fff;--color-autocomplete-border: #555;--color-autocomplete-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-autocomplete-background: #2b2e36;--color-autocomplete-background-hover: #1e1e22;--color-answer-font: #bbb;--color-answer-background: #26292f;--color-result-keyvalue-col-table: #1e1e22;--color-result-keyvalue-odd: #1e1e22;--color-result-keyvalue-even: #26292f;--color-result-background: #26292f;--color-result-border: #333;--color-result-url-font: #fff;--color-result-vim-selected: #1f1f23cc;--color-result-vim-arrow: #8af;--color-result-description-highlight-font: #fff;--color-result-link-font: #8af;--color-result-link-font-highlight: #8af;--color-result-link-visited-font: #c09cd9;--color-result-publishdate-font: #888;--color-result-engines-font: #a4a4a4;--color-result-search-url-border: #555;--color-result-search-url-font: #fff;--color-result-detail-font: #fff;--color-result-detail-label-font: lightgray;--color-result-detail-background: #1a1a1c;--color-result-detail-hr: #555;--color-result-detail-link: #8af;--color-result-detail-loader-border: rgba(255, 255, 255, .2);--color-result-detail-loader-borderleft: rgba(0, 0, 0, 0);--color-result-image-span-font: #bbb;--color-result-image-span-font-selected: #222;--color-result-image-background: #222;--color-settings-tr-hover: #2c2c32;--color-settings-engine-description-font: #909090;--color-settings-table-group-background: #1b1b21;--color-toolkit-badge-font: #fff;--color-toolkit-badge-background: #555;--color-toolkit-kbd-font: #000;--color-toolkit-kbd-background: #fff;--color-toolkit-dialog-border: #555;--color-toolkit-dialog-background: #1e1e22;--color-toolkit-tabs-label-border: #222;--color-toolkit-tabs-section-border: #555;--color-toolkit-select-background: #313338;--color-toolkit-select-border: #555;--color-toolkit-select-background-hover: #373b49;--color-toolkit-input-text-font: #fff;--color-toolkit-checkbox-onoff-off-background: #313338;--color-toolkit-checkbox-onoff-on-background: #313338;--color-toolkit-checkbox-onoff-on-mark-background: #58f;--color-toolkit-checkbox-onoff-on-mark-color: #222;--color-toolkit-checkbox-onoff-off-mark-background: #ddd;--color-toolkit-checkbox-onoff-off-mark-color: #222;--color-toolkit-checkbox-label-background: #222;--color-toolkit-checkbox-label-border: #333;--color-toolkit-checkbox-input-border: #58f;--color-toolkit-engine-tooltip-border: #333;--color-toolkit-engine-tooltip-background: #222;--color-toolkit-loader-border: rgba(255, 255, 255, .2);--color-toolkit-loader-borderleft: rgba(0, 0, 0, 0);--color-doc-code: #ddd;--color-doc-code-background: #4d5a6f;--color-favicon-background-color: #ddd;--color-favicon-border-color: #ccc}}:root.theme-dark{--color-base-font: #bbb;--color-base-font-rgb: 187, 187, 187;--color-base-background: #222428;--color-base-background-mobile: #222428;--color-url-font: #8af;--color-url-visited-font: #c09cd9;--color-header-background: #1e1e22;--color-header-border: #333;--color-footer-background: #1e1e22;--color-footer-border: #333;--color-sidebar-border: #555;--color-sidebar-font: #fff;--color-sidebar-background: #292c34;--color-backtotop-font: #bbb;--color-backtotop-border: #333;--color-backtotop-background: #2b2e36;--color-btn-background: #58f;--color-btn-font: #222;--color-show-btn-background: #555;--color-show-btn-font: #fff;--color-search-border: #555;--color-search-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-search-background: #2b2e36;--color-search-font: #fff;--color-search-background-hover: #58f;--color-error: #f55b5b;--color-error-background: #390a0a;--color-warning: #f1d561;--color-warning-background: #39300a;--color-success: #79f56e;--color-success-background: #0e390a;--color-categories-item-selected-font: #58f;--color-categories-item-border-selected: #58f;--color-autocomplete-font: #fff;--color-autocomplete-border: #555;--color-autocomplete-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-autocomplete-background: #2b2e36;--color-autocomplete-background-hover: #1e1e22;--color-answer-font: #bbb;--color-answer-background: #26292f;--color-result-keyvalue-col-table: #1e1e22;--color-result-keyvalue-odd: #1e1e22;--color-result-keyvalue-even: #26292f;--color-result-background: #26292f;--color-result-border: #333;--color-result-url-font: #fff;--color-result-vim-selected: #1f1f23cc;--color-result-vim-arrow: #8af;--color-result-description-highlight-font: #fff;--color-result-link-font: #8af;--color-result-link-font-highlight: #8af;--color-result-link-visited-font: #c09cd9;--color-result-publishdate-font: #888;--color-result-engines-font: #a4a4a4;--color-result-search-url-border: #555;--color-result-search-url-font: #fff;--color-result-detail-font: #fff;--color-result-detail-label-font: lightgray;--color-result-detail-background: #1a1a1c;--color-result-detail-hr: #555;--color-result-detail-link: #8af;--color-result-detail-loader-border: rgba(255, 255, 255, .2);--color-result-detail-loader-borderleft: rgba(0, 0, 0, 0);--color-result-image-span-font: #bbb;--color-result-image-span-font-selected: #222;--color-result-image-background: #222;--color-settings-tr-hover: #2c2c32;--color-settings-engine-description-font: #909090;--color-settings-table-group-background: #1b1b21;--color-toolkit-badge-font: #fff;--color-toolkit-badge-background: #555;--color-toolkit-kbd-font: #000;--color-toolkit-kbd-background: #fff;--color-toolkit-dialog-border: #555;--color-toolkit-dialog-background: #1e1e22;--color-toolkit-tabs-label-border: #222;--color-toolkit-tabs-section-border: #555;--color-toolkit-select-background: #313338;--color-toolkit-select-border: #555;--color-toolkit-select-background-hover: #373b49;--color-toolkit-input-text-font: #fff;--color-toolkit-checkbox-onoff-off-background: #313338;--color-toolkit-checkbox-onoff-on-background: #313338;--color-toolkit-checkbox-onoff-on-mark-background: #58f;--color-toolkit-checkbox-onoff-on-mark-color: #222;--color-toolkit-checkbox-onoff-off-mark-background: #ddd;--color-toolkit-checkbox-onoff-off-mark-color: #222;--color-toolkit-checkbox-label-background: #222;--color-toolkit-checkbox-label-border: #333;--color-toolkit-checkbox-input-border: #58f;--color-toolkit-engine-tooltip-border: #333;--color-toolkit-engine-tooltip-background: #222;--color-toolkit-loader-border: rgba(255, 255, 255, .2);--color-toolkit-loader-borderleft: rgba(0, 0, 0, 0);--color-doc-code: #ddd;--color-doc-code-background: #4d5a6f;--color-favicon-background-color: #ddd;--color-favicon-border-color: #ccc}:root.theme-black{--color-base-font: #bbb;--color-base-font-rgb: 187, 187, 187;--color-base-background: #222428;--color-base-background-mobile: #222428;--color-url-font: #8af;--color-url-visited-font: #c09cd9;--color-header-background: #1e1e22;--color-header-border: #333;--color-footer-background: #1e1e22;--color-footer-border: #333;--color-sidebar-border: #555;--color-sidebar-font: #fff;--color-sidebar-background: #292c34;--color-backtotop-font: #bbb;--color-backtotop-border: #333;--color-backtotop-background: #2b2e36;--color-btn-background: #58f;--color-btn-font: #222;--color-show-btn-background: #555;--color-show-btn-font: #fff;--color-search-border: #555;--color-search-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-search-background: #2b2e36;--color-search-font: #fff;--color-search-background-hover: #58f;--color-error: #f55b5b;--color-error-background: #390a0a;--color-warning: #f1d561;--color-warning-background: #39300a;--color-success: #79f56e;--color-success-background: #0e390a;--color-categories-item-selected-font: #58f;--color-categories-item-border-selected: #58f;--color-autocomplete-font: #fff;--color-autocomplete-border: #555;--color-autocomplete-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-autocomplete-background: #2b2e36;--color-autocomplete-background-hover: #1e1e22;--color-answer-font: #bbb;--color-answer-background: #26292f;--color-result-keyvalue-col-table: #1e1e22;--color-result-keyvalue-odd: #1e1e22;--color-result-keyvalue-even: #26292f;--color-result-background: #26292f;--color-result-border: #333;--color-result-url-font: #fff;--color-result-vim-selected: #1f1f23cc;--color-result-vim-arrow: #8af;--color-result-description-highlight-font: #fff;--color-result-link-font: #8af;--color-result-link-font-highlight: #8af;--color-result-link-visited-font: #c09cd9;--color-result-publishdate-font: #888;--color-result-engines-font: #a4a4a4;--color-result-search-url-border: #555;--color-result-search-url-font: #fff;--color-result-detail-font: #fff;--color-result-detail-label-font: lightgray;--color-result-detail-background: #1a1a1c;--color-result-detail-hr: #555;--color-result-detail-link: #8af;--color-result-detail-loader-border: rgba(255, 255, 255, .2);--color-result-detail-loader-borderleft: rgba(0, 0, 0, 0);--color-result-image-span-font: #bbb;--color-result-image-span-font-selected: #222;--color-result-image-background: #222;--color-settings-tr-hover: #2c2c32;--color-settings-engine-description-font: #909090;--color-settings-table-group-background: #1b1b21;--color-toolkit-badge-font: #fff;--color-toolkit-badge-background: #555;--color-toolkit-kbd-font: #000;--color-toolkit-kbd-background: #fff;--color-toolkit-dialog-border: #555;--color-toolkit-dialog-background: #1e1e22;--color-toolkit-tabs-label-border: #222;--color-toolkit-tabs-section-border: #555;--color-toolkit-select-background: #313338;--color-toolkit-select-border: #555;--color-toolkit-select-background-hover: #373b49;--color-toolkit-input-text-font: #fff;--color-toolkit-checkbox-onoff-off-background: #313338;--color-toolkit-checkbox-onoff-on-background: #313338;--color-toolkit-checkbox-onoff-on-mark-background: #58f;--color-toolkit-checkbox-onoff-on-mark-color: #222;--color-toolkit-checkbox-onoff-off-mark-background: #ddd;--color-toolkit-checkbox-onoff-off-mark-color: #222;--color-toolkit-checkbox-label-background: #222;--color-toolkit-checkbox-label-border: #333;--color-toolkit-checkbox-input-border: #58f;--color-toolkit-engine-tooltip-border: #333;--color-toolkit-engine-tooltip-background: #222;--color-toolkit-loader-border: rgba(255, 255, 255, .2);--color-toolkit-loader-borderleft: rgba(0, 0, 0, 0);--color-doc-code: #ddd;--color-doc-code-background: #4d5a6f;--color-favicon-background-color: #ddd;--color-favicon-border-color: #ccc;--color-base-background: #000;--color-base-background-mobile: #000;--color-header-background: #000;--color-footer-background: #000;--color-sidebar-background: #000}.code-highlight pre{line-height:100%}.code-highlight td.linenos .normal,.code-highlight span.linenos{color:inherit;background-color:transparent;padding-left:5px;padding-right:5px}.code-highlight td.linenos .special,.code-highlight span.linenos.special{color:#000;background-color:#ffffc0;padding-left:5px;padding-right:5px}.code-highlight .hll{background-color:#ffc}.code-highlight .c{color:#3d7b7b;font-style:italic}.code-highlight .err{border:1px solid #F00}.code-highlight .k{color:green;font-weight:700}.code-highlight .o{color:#666}.code-highlight .ch,.code-highlight .cm{color:#3d7b7b;font-style:italic}.code-highlight .cp{color:#9c6500}.code-highlight .cpf,.code-highlight .c1,.code-highlight .cs{color:#3d7b7b;font-style:italic}.code-highlight .gd{color:#a00000}.code-highlight .ge{font-style:italic}.code-highlight .ges{font-weight:700;font-style:italic}.code-highlight .gr{color:#e40000}.code-highlight .gh{color:navy;font-weight:700}.code-highlight .gi{color:#008400}.code-highlight .go{color:#717171}.code-highlight .gp{color:navy;font-weight:700}.code-highlight .gs{font-weight:700}.code-highlight .gu{color:purple;font-weight:700}.code-highlight .gt{color:#04d}.code-highlight .kc,.code-highlight .kd,.code-highlight .kn{color:green;font-weight:700}.code-highlight .kp{color:green}.code-highlight .kr{color:green;font-weight:700}.code-highlight .kt{color:#b00040}.code-highlight .m{color:#666}.code-highlight .s{color:#ba2121}.code-highlight .na{color:#687822}.code-highlight .nb{color:green}.code-highlight .nc{color:#00f;font-weight:700}.code-highlight .no{color:#800}.code-highlight .nd{color:#a2f}.code-highlight .ni{color:#717171;font-weight:700}.code-highlight .ne{color:#cb3f38;font-weight:700}.code-highlight .nf{color:#00f}.code-highlight .nl{color:#767600}.code-highlight .nn{color:#00f;font-weight:700}.code-highlight .nt{color:green;font-weight:700}.code-highlight .nv{color:#19177c}.code-highlight .ow{color:#a2f;font-weight:700}.code-highlight .w{color:#bbb}.code-highlight .mb,.code-highlight .mf,.code-highlight .mh,.code-highlight .mi,.code-highlight .mo{color:#666}.code-highlight .sa,.code-highlight .sb,.code-highlight .sc,.code-highlight .dl{color:#ba2121}.code-highlight .sd{color:#ba2121;font-style:italic}.code-highlight .s2{color:#ba2121}.code-highlight .se{color:#aa5d1f;font-weight:700}.code-highlight .sh{color:#ba2121}.code-highlight .si{color:#a45a77;font-weight:700}.code-highlight .sx{color:green}.code-highlight .sr{color:#a45a77}.code-highlight .s1{color:#ba2121}.code-highlight .ss{color:#19177c}.code-highlight .bp{color:green}.code-highlight .fm{color:#00f}.code-highlight .vc,.code-highlight .vg,.code-highlight .vi,.code-highlight .vm{color:#19177c}.code-highlight .il{color:#666}.codelines{margin:.125rem 0 0;padding:1rem 0 0}.code-highlight pre{overflow:auto;margin:0;padding:0 0 .75rem}.code-highlight .linenos{-webkit-user-select:none;user-select:none;cursor:default;margin-right:8px;text-align:right}.code-highlight .linenos::selection{background:transparent}.code-highlight .linenos::-moz-selection{background:transparent}.code-highlight span.linenos{color:var(--color-line-number)}@media (prefers-color-scheme: dark){:root.theme-auto .code-highlight pre{line-height:100%}:root.theme-auto .code-highlight td.linenos .normal{color:#3c4354;background-color:transparent;padding-left:5px;padding-right:5px}:root.theme-auto .code-highlight span.linenos{color:#3c4354;background-color:transparent;padding-left:5px;padding-right:5px}:root.theme-auto .code-highlight td.linenos .special{color:#3c4354;background-color:#ffffc0;padding-left:5px;padding-right:5px}:root.theme-auto .code-highlight span.linenos.special{color:#3c4354;background-color:#ffffc0;padding-left:5px;padding-right:5px}:root.theme-auto .code-highlight .hll{background-color:#6e7681}:root.theme-auto .code-highlight .c{color:#7e8aa1}:root.theme-auto .code-highlight .err{color:#f88f7f}:root.theme-auto .code-highlight .esc{color:#d4d2c8}:root.theme-auto .code-highlight .g{color:#d4d2c8}:root.theme-auto .code-highlight .k{color:#ffad66}:root.theme-auto .code-highlight .l{color:#d5ff80}:root.theme-auto .code-highlight .n{color:#d4d2c8}:root.theme-auto .code-highlight .o{color:#ffad66}:root.theme-auto .code-highlight .x{color:#d4d2c8}:root.theme-auto .code-highlight .p{color:#d4d2c8}:root.theme-auto .code-highlight .ch{color:#f88f7f;font-style:italic}:root.theme-auto .code-highlight .cm{color:#7e8aa1}:root.theme-auto .code-highlight .cp{color:#ffad66;font-weight:700}:root.theme-auto .code-highlight .cpf{color:#7e8aa1}:root.theme-auto .code-highlight .c1{color:#7e8aa1}:root.theme-auto .code-highlight .cs{color:#7e8aa1;font-style:italic}:root.theme-auto .code-highlight .gd{color:#f88f7f;background-color:#3d1e20}:root.theme-auto .code-highlight .ge{color:#d4d2c8;font-style:italic}:root.theme-auto .code-highlight .ges{color:#d4d2c8}:root.theme-auto .code-highlight .gr{color:#f88f7f}:root.theme-auto .code-highlight .gh{color:#d4d2c8}:root.theme-auto .code-highlight .gi{color:#6ad4af;background-color:#19362c}:root.theme-auto .code-highlight .go{color:#7e8aa1}:root.theme-auto .code-highlight .gp{color:#d4d2c8}:root.theme-auto .code-highlight .gs{color:#d4d2c8;font-weight:700}:root.theme-auto .code-highlight .gu{color:#d4d2c8}:root.theme-auto .code-highlight .gt{color:#f88f7f}:root.theme-auto .code-highlight .kc{color:#ffad66}:root.theme-auto .code-highlight .kd{color:#ffad66}:root.theme-auto .code-highlight .kn{color:#ffad66}:root.theme-auto .code-highlight .kp{color:#ffad66}:root.theme-auto .code-highlight .kr{color:#ffad66}:root.theme-auto .code-highlight .kt{color:#73d0ff}:root.theme-auto .code-highlight .ld{color:#d5ff80}:root.theme-auto .code-highlight .m{color:#dfbfff}:root.theme-auto .code-highlight .s{color:#d5ff80}:root.theme-auto .code-highlight .na{color:#ffd173}:root.theme-auto .code-highlight .nb{color:#ffd173}:root.theme-auto .code-highlight .nc{color:#73d0ff}:root.theme-auto .code-highlight .no{color:#ffd173}:root.theme-auto .code-highlight .nd{color:#7e8aa1;font-weight:700;font-style:italic}:root.theme-auto .code-highlight .ni{color:#95e6cb}:root.theme-auto .code-highlight .ne{color:#73d0ff}:root.theme-auto .code-highlight .nf{color:#ffd173}:root.theme-auto .code-highlight .nl{color:#d4d2c8}:root.theme-auto .code-highlight .nn{color:#d4d2c8}:root.theme-auto .code-highlight .nx{color:#d4d2c8}:root.theme-auto .code-highlight .py{color:#ffd173}:root.theme-auto .code-highlight .nt{color:#5ccfe6}:root.theme-auto .code-highlight .nv{color:#d4d2c8}:root.theme-auto .code-highlight .ow{color:#ffad66}:root.theme-auto .code-highlight .pm{color:#d4d2c8}:root.theme-auto .code-highlight .w{color:#d4d2c8}:root.theme-auto .code-highlight .mb{color:#dfbfff}:root.theme-auto .code-highlight .mf{color:#dfbfff}:root.theme-auto .code-highlight .mh{color:#dfbfff}:root.theme-auto .code-highlight .mi{color:#dfbfff}:root.theme-auto .code-highlight .mo{color:#dfbfff}:root.theme-auto .code-highlight .sa{color:#f29e74}:root.theme-auto .code-highlight .sb{color:#d5ff80}:root.theme-auto .code-highlight .sc{color:#d5ff80}:root.theme-auto .code-highlight .dl{color:#d5ff80}:root.theme-auto .code-highlight .sd{color:#7e8aa1}:root.theme-auto .code-highlight .s2{color:#d5ff80}:root.theme-auto .code-highlight .se{color:#95e6cb}:root.theme-auto .code-highlight .sh{color:#d5ff80}:root.theme-auto .code-highlight .si{color:#95e6cb}:root.theme-auto .code-highlight .sx{color:#95e6cb}:root.theme-auto .code-highlight .sr{color:#95e6cb}:root.theme-auto .code-highlight .s1{color:#d5ff80}:root.theme-auto .code-highlight .ss{color:#dfbfff}:root.theme-auto .code-highlight .bp{color:#5ccfe6}:root.theme-auto .code-highlight .fm{color:#ffd173}:root.theme-auto .code-highlight .vc{color:#d4d2c8}:root.theme-auto .code-highlight .vg{color:#d4d2c8}:root.theme-auto .code-highlight .vi{color:#d4d2c8}:root.theme-auto .code-highlight .vm{color:#d4d2c8}:root.theme-auto .code-highlight .il{color:#dfbfff}:root.theme-auto .code-highlight pre{overflow:auto;margin:0;padding:0 0 .75rem}:root.theme-auto .code-highlight .linenos{-webkit-user-select:none;user-select:none;cursor:default;margin-right:8px;text-align:right}:root.theme-auto .code-highlight .linenos::selection{background:transparent}:root.theme-auto .code-highlight .linenos::-moz-selection{background:transparent}:root.theme-auto .code-highlight span.linenos{color:var(--color-line-number)}}:root.theme-dark .code-highlight pre{line-height:100%}:root.theme-dark .code-highlight td.linenos .normal{color:#3c4354;background-color:transparent;padding-left:5px;padding-right:5px}:root.theme-dark .code-highlight span.linenos{color:#3c4354;background-color:transparent;padding-left:5px;padding-right:5px}:root.theme-dark .code-highlight td.linenos .special{color:#3c4354;background-color:#ffffc0;padding-left:5px;padding-right:5px}:root.theme-dark .code-highlight span.linenos.special{color:#3c4354;background-color:#ffffc0;padding-left:5px;padding-right:5px}:root.theme-dark .code-highlight .hll{background-color:#6e7681}:root.theme-dark .code-highlight .c{color:#7e8aa1}:root.theme-dark .code-highlight .err{color:#f88f7f}:root.theme-dark .code-highlight .esc{color:#d4d2c8}:root.theme-dark .code-highlight .g{color:#d4d2c8}:root.theme-dark .code-highlight .k{color:#ffad66}:root.theme-dark .code-highlight .l{color:#d5ff80}:root.theme-dark .code-highlight .n{color:#d4d2c8}:root.theme-dark .code-highlight .o{color:#ffad66}:root.theme-dark .code-highlight .x{color:#d4d2c8}:root.theme-dark .code-highlight .p{color:#d4d2c8}:root.theme-dark .code-highlight .ch{color:#f88f7f;font-style:italic}:root.theme-dark .code-highlight .cm{color:#7e8aa1}:root.theme-dark .code-highlight .cp{color:#ffad66;font-weight:700}:root.theme-dark .code-highlight .cpf{color:#7e8aa1}:root.theme-dark .code-highlight .c1{color:#7e8aa1}:root.theme-dark .code-highlight .cs{color:#7e8aa1;font-style:italic}:root.theme-dark .code-highlight .gd{color:#f88f7f;background-color:#3d1e20}:root.theme-dark .code-highlight .ge{color:#d4d2c8;font-style:italic}:root.theme-dark .code-highlight .ges{color:#d4d2c8}:root.theme-dark .code-highlight .gr{color:#f88f7f}:root.theme-dark .code-highlight .gh{color:#d4d2c8}:root.theme-dark .code-highlight .gi{color:#6ad4af;background-color:#19362c}:root.theme-dark .code-highlight .go{color:#7e8aa1}:root.theme-dark .code-highlight .gp{color:#d4d2c8}:root.theme-dark .code-highlight .gs{color:#d4d2c8;font-weight:700}:root.theme-dark .code-highlight .gu{color:#d4d2c8}:root.theme-dark .code-highlight .gt{color:#f88f7f}:root.theme-dark .code-highlight .kc{color:#ffad66}:root.theme-dark .code-highlight .kd{color:#ffad66}:root.theme-dark .code-highlight .kn{color:#ffad66}:root.theme-dark .code-highlight .kp{color:#ffad66}:root.theme-dark .code-highlight .kr{color:#ffad66}:root.theme-dark .code-highlight .kt{color:#73d0ff}:root.theme-dark .code-highlight .ld{color:#d5ff80}:root.theme-dark .code-highlight .m{color:#dfbfff}:root.theme-dark .code-highlight .s{color:#d5ff80}:root.theme-dark .code-highlight .na{color:#ffd173}:root.theme-dark .code-highlight .nb{color:#ffd173}:root.theme-dark .code-highlight .nc{color:#73d0ff}:root.theme-dark .code-highlight .no{color:#ffd173}:root.theme-dark .code-highlight .nd{color:#7e8aa1;font-weight:700;font-style:italic}:root.theme-dark .code-highlight .ni{color:#95e6cb}:root.theme-dark .code-highlight .ne{color:#73d0ff}:root.theme-dark .code-highlight .nf{color:#ffd173}:root.theme-dark .code-highlight .nl{color:#d4d2c8}:root.theme-dark .code-highlight .nn{color:#d4d2c8}:root.theme-dark .code-highlight .nx{color:#d4d2c8}:root.theme-dark .code-highlight .py{color:#ffd173}:root.theme-dark .code-highlight .nt{color:#5ccfe6}:root.theme-dark .code-highlight .nv{color:#d4d2c8}:root.theme-dark .code-highlight .ow{color:#ffad66}:root.theme-dark .code-highlight .pm{color:#d4d2c8}:root.theme-dark .code-highlight .w{color:#d4d2c8}:root.theme-dark .code-highlight .mb{color:#dfbfff}:root.theme-dark .code-highlight .mf{color:#dfbfff}:root.theme-dark .code-highlight .mh{color:#dfbfff}:root.theme-dark .code-highlight .mi{color:#dfbfff}:root.theme-dark .code-highlight .mo{color:#dfbfff}:root.theme-dark .code-highlight .sa{color:#f29e74}:root.theme-dark .code-highlight .sb{color:#d5ff80}:root.theme-dark .code-highlight .sc{color:#d5ff80}:root.theme-dark .code-highlight .dl{color:#d5ff80}:root.theme-dark .code-highlight .sd{color:#7e8aa1}:root.theme-dark .code-highlight .s2{color:#d5ff80}:root.theme-dark .code-highlight .se{color:#95e6cb}:root.theme-dark .code-highlight .sh{color:#d5ff80}:root.theme-dark .code-highlight .si{color:#95e6cb}:root.theme-dark .code-highlight .sx{color:#95e6cb}:root.theme-dark .code-highlight .sr{color:#95e6cb}:root.theme-dark .code-highlight .s1{color:#d5ff80}:root.theme-dark .code-highlight .ss{color:#dfbfff}:root.theme-dark .code-highlight .bp{color:#5ccfe6}:root.theme-dark .code-highlight .fm{color:#ffd173}:root.theme-dark .code-highlight .vc{color:#d4d2c8}:root.theme-dark .code-highlight .vg{color:#d4d2c8}:root.theme-dark .code-highlight .vi{color:#d4d2c8}:root.theme-dark .code-highlight .vm{color:#d4d2c8}:root.theme-dark .code-highlight .il{color:#dfbfff}:root.theme-dark .code-highlight pre{overflow:auto;margin:0;padding:0 0 .75rem}:root.theme-dark .code-highlight .linenos{-webkit-user-select:none;user-select:none;cursor:default;margin-right:8px;text-align:right}:root.theme-dark .code-highlight .linenos::selection{background:transparent}:root.theme-dark .code-highlight .linenos::-moz-selection{background:transparent}:root.theme-dark .code-highlight span.linenos{color:var(--color-line-number)}html.no-js .hide_if_nojs,html.js .show_if_nojs{display:none}.center{text-align:center}.right{float:right}.left{float:left}.invisible{display:none!important}.list-unstyled{list-style-type:none}.list-unstyled li{margin-top:4px;margin-bottom:4px}.danger{background-color:var(--color-error-background)}.warning{background:var(--color-warning-background)}.success{background:var(--color-success-background)}.badge{display:inline-block;color:var(--color-toolkit-badge-font);background-color:var(--color-toolkit-badge-background);text-align:center;white-space:nowrap;vertical-align:baseline;min-width:10px;padding:1px 5px;border-radius:5px}kbd{padding:2px 4px;margin:1px;font-size:90%;color:var(--color-toolkit-kbd-font);background:var(--color-toolkit-kbd-background)}table{width:100%}table.striped tr{border-bottom:1px solid var(--color-settings-tr-hover)}th{padding:.4em}td{padding:0 4px}tr:hover{background:var(--color-settings-tr-hover)!important}div.selectable_url{display:block;border:1px solid var(--color-result-search-url-border);padding:4px;color:var(--color-result-search-url-font);margin:.1em;overflow:hidden;height:1.2em;line-height:1.2em;border-radius:5px}div.selectable_url pre{display:block;font-size:.8em;word-break:break-all;margin:.1em;-webkit-user-select:all;user-select:all}.dialog-error{position:relative;display:flex;padding:1rem;margin:0 0 1em;border:1px solid var(--color-toolkit-dialog-border);text-align:left;border-radius:10px;color:var(--color-error);background:var(--color-error-background);border-color:var(--color-error)}.dialog-error .close{float:right;position:relative;top:-3px;color:inherit;font-size:1.5em}.dialog-error ul,.dialog-error ol,.dialog-error p{margin:1px 0 0}.dialog-error table{width:auto}.dialog-error tr{vertical-align:text-top}.dialog-error tr:hover{background:transparent!important}.dialog-error td{padding:0 1em 0 0;padding-right:1rem;padding-bottom:0;padding-left:0}.dialog-error h4{margin-top:.3em;margin-bottom:.3em}.dialog-error-block{position:relative;display:flex;padding:1rem;margin:0 0 1em;border:1px solid var(--color-toolkit-dialog-border);text-align:left;border-radius:10px;display:block;color:var(--color-error);background:var(--color-error-background);border-color:var(--color-error)}.dialog-error-block .close{float:right;position:relative;top:-3px;color:inherit;font-size:1.5em}.dialog-error-block ul,.dialog-error-block ol,.dialog-error-block p{margin:1px 0 0}.dialog-error-block table{width:auto}.dialog-error-block tr{vertical-align:text-top}.dialog-error-block tr:hover{background:transparent!important}.dialog-error-block td{padding:0 1em 0 0;padding-right:1rem;padding-bottom:0;padding-left:0}.dialog-error-block h4{margin-top:.3em;margin-bottom:.3em}.dialog-warning{position:relative;display:flex;padding:1rem;margin:0 0 1em;border:1px solid var(--color-toolkit-dialog-border);text-align:left;border-radius:10px;color:var(--color-warning);background:var(--color-warning-background);border-color:var(--color-warning)}.dialog-warning .close{float:right;position:relative;top:-3px;color:inherit;font-size:1.5em}.dialog-warning ul,.dialog-warning ol,.dialog-warning p{margin:1px 0 0}.dialog-warning table{width:auto}.dialog-warning tr{vertical-align:text-top}.dialog-warning tr:hover{background:transparent!important}.dialog-warning td{padding:0 1em 0 0;padding-right:1rem;padding-bottom:0;padding-left:0}.dialog-warning h4{margin-top:.3em;margin-bottom:.3em}.dialog-modal{position:relative;display:flex;padding:1rem;border:1px solid var(--color-toolkit-dialog-border);text-align:left;border-radius:10px;display:block;background:var(--color-toolkit-dialog-background);position:fixed;top:50%;left:50%;margin:0 auto;transform:translate(-50%,-50%);z-index:5000}.dialog-modal .close{float:right;position:relative;top:-3px;color:inherit;font-size:1.5em}.dialog-modal ul,.dialog-modal ol,.dialog-modal p{margin:1px 0 0}.dialog-modal table{width:auto}.dialog-modal tr{vertical-align:text-top}.dialog-modal tr:hover{background:transparent!important}.dialog-modal td{padding:0 1em 0 0;padding-right:1rem;padding-bottom:0;padding-left:0}.dialog-modal h4{margin-top:.3em;margin-bottom:.3em}.dialog-modal h3{margin-top:0}.btn-collapse{cursor:pointer}.scrollx{overflow:auto hidden;display:block;padding:0;margin:0;border:none}.tabs .tabs>label{font-size:90%}ul.tabs{border-bottom:1px solid var(--color-toolkit-tabs-section-border);list-style:none;padding-left:0}ul.tabs li{display:flex}.tabs{display:flex;flex-wrap:wrap;width:100%;min-width:100%}.tabs>*{order:2}.tabs>input[type=radio]{display:none}.tabs>label,.tabs>li>a{order:1;padding:.7em;margin:0 .7em;letter-spacing:.5px;text-transform:uppercase;border:solid var(--color-toolkit-tabs-label-border);border-width:0 0 2px 0;color:unset;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;cursor:pointer}.tabs>label.active,.tabs>li>a.active{border-bottom:2px solid var(--color-categories-item-border-selected);background:var(--color-categories-item-selected);color:var(--color-categories-item-selected-font)}.tabs>label:hover,.tabs>li>a:hover{border-bottom:2px solid var(--color-categories-item-border-selected)}.tabs>section{min-width:100%;padding:.7rem 0;box-sizing:border-box;border-top:1px solid var(--color-toolkit-tabs-section-border);display:none}.tabs>label:last-of-type{border-bottom:2px solid var(--color-categories-item-border-selected);background:var(--color-categories-item-selected);color:var(--color-categories-item-selected-font);letter-spacing:-.1px}.tabs>section:last-of-type{display:block}html body .tabs>input:checked~section{display:none}html body .tabs>input:checked~label{position:inherited;background:inherit;border-bottom:2px solid transparent;font-weight:400;color:inherit}html body .tabs>input:checked~label:hover{border-bottom:2px solid var(--color-categories-item-border-selected)}html body .tabs>input:checked+label{border-bottom:2px solid var(--color-categories-item-border-selected);background:var(--color-categories-item-selected);color:var(--color-categories-item-selected-font)}html body .tabs>input:checked+label+section{display:block}select{height:2.4rem;margin-top:0;margin-right:1rem;margin-bottom:0;margin-left:0;padding:.2rem!important;color:var(--color-search-font);font-size:.9rem;z-index:100}select:hover,select:focus{cursor:pointer}@supports ((background-position-x: 100%) and ((appearance: none) or (-webkit-appearance: none) or (-moz-appearance: none))){select{appearance:none;-webkit-appearance:none;-moz-appearance:none;border-width:0 2rem 0 0;border-color:transparent;background:url(data:image/svg+xml;charset=UTF-8,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%0A%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%0A%3Cg%3E%3Cpolygon%20points%3D%22128%2C192%20256%2C320%20384%2C192%22%2F%3E%3C%2Fg%3E%0A%3C%2Fsvg%3E) no-repeat;background-position-x:calc(100% + 2rem);background-size:2rem;background-origin:content-box;background-color:var(--color-toolkit-select-background);outline:medium none;text-overflow:ellipsis;border-radius:5px}select:hover,select:focus{background-color:var(--color-toolkit-select-background-hover)}select option{background-color:var(--color-base-background)}@media (prefers-color-scheme: dark){html.theme-auto select,html.theme-dark select{background-image:url(data:image/svg+xml;charset=UTF-8,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%0A%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%0A%3Cg%3E%3Cpolygon%20fill%3D%22%23ddd%22%20points%3D%22128%2C192%20256%2C320%20384%2C192%22%2F%3E%3C%2Fg%3E%0A%3C%2Fsvg%3E)}}html.theme-dark select{background-image:url(data:image/svg+xml;charset=UTF-8,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%0A%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%0A%3Cg%3E%3Cpolygon%20fill%3D%22%23ddd%22%20points%3D%22128%2C192%20256%2C320%20384%2C192%22%2F%3E%3C%2Fg%3E%0A%3C%2Fsvg%3E)}}input.checkbox-onoff[type=checkbox]{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;display:inline-block;width:2.5em;height:.7em;box-shadow:none!important;margin:0 16px;border-radius:10px;position:relative}input.checkbox-onoff[type=checkbox]:focus,input.checkbox-onoff[type=checkbox]:hover{outline:none}input.checkbox-onoff[type=checkbox]:focus:after{content:"";position:absolute;width:3.5em;height:1.65em;border:1px solid var(--color-btn-background);border-radius:12px;box-shadow:var(--color-btn-background) 0 0 3px;z-index:1200;top:-.55em;left:-.6em}input.checkbox-onoff[type=checkbox]:before{position:absolute;top:-.5em;display:flex;justify-content:center;align-items:center;font-size:.75em;width:1.875em;height:1.875em;border-radius:50%}input.checkbox-onoff[type=checkbox],input.checkbox-onoff.reversed-checkbox[type=checkbox]:checked{background:var(--color-toolkit-checkbox-onoff-off-background)}input.checkbox-onoff[type=checkbox]:before,input.checkbox-onoff.reversed-checkbox[type=checkbox]:checked:before{left:-.5em;content:"✕";color:var(--color-toolkit-checkbox-onoff-off-mark-color);background:var(--color-toolkit-checkbox-onoff-off-mark-background)}input.checkbox-onoff[type=checkbox]:checked,input.checkbox-onoff.reversed-checkbox[type=checkbox]{background:var(--color-toolkit-checkbox-onoff-on-background)}input.checkbox-onoff[type=checkbox]:checked:before,input.checkbox-onoff.reversed-checkbox[type=checkbox]:before{left:calc(100% - 1.5em);content:"✓";color:var(--color-toolkit-checkbox-onoff-on-mark-color);background:var(--color-toolkit-checkbox-onoff-on-mark-background)}@supports (transform: rotate(-45deg)){input[type=checkbox]:not(.checkbox-onoff){-webkit-appearance:none;-moz-appearance:none;appearance:none;width:20px;height:20px;cursor:pointer;position:relative;top:0;left:0;border:2px solid var(--color-toolkit-checkbox-input-border);border-radius:.3em}input[type=checkbox]:not(.checkbox-onoff):after{content:"";width:9px;height:5px;position:absolute;top:3px;left:2px;border:3px solid var(--color-toolkit-checkbox-label-border);border-top:none;border-right:none;background:transparent;opacity:0;transform:rotate(-45deg)}input[type=checkbox]:not(.checkbox-onoff):checked:after{border-color:var(--color-toolkit-checkbox-input-border);opacity:1}input[type=checkbox][disabled]:not(.checkbox-onoff){border:inherit;background-color:transparent!important;cursor:inherit}input.checkbox[type=checkbox]:not(:checked,[disabled],.checkbox-onoff):hover:after{opacity:.5}}@media screen and (max-width: 50em){.tabs>label{width:100%}}.loader,.loader:after{border-radius:50%;width:2em;height:2em}.loader{margin:1em auto;font-size:10px;position:relative;text-indent:-9999em;border-top:.5em solid var(--color-toolkit-loader-border);border-right:.5em solid var(--color-toolkit-loader-border);border-bottom:.5em solid var(--color-toolkit-loader-border);border-left:.5em solid var(--color-toolkit-loader-borderleft);-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0);-webkit-animation:load8 1.2s infinite linear;animation:load8 1.2s infinite linear}@-webkit-keyframes load8{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes load8{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.engine-tooltip{display:none;position:absolute;padding:.5rem 1rem;margin:0 0 0 2rem;border:1px solid var(--color-toolkit-engine-tooltip-border);background:var(--color-toolkit-engine-tooltip-background);font-size:14px;font-weight:400;z-index:5000;text-align:left;border-radius:10px}th:hover .engine-tooltip,td:hover .engine-tooltip,.engine-tooltip:hover{display:inline-block}.stacked-bar-chart{margin:0;padding:0 .125rem 0 4rem;width:100%;width:-moz-available;width:-webkit-fill-available;width:fill;flex-flow:row nowrap;align-items:center;display:inline-flex}.stacked-bar-chart-value{width:3rem;display:inline-block;position:absolute;padding:0 .5rem;text-align:right}.stacked-bar-chart-base{display:flex;flex-shrink:0;flex-grow:0;flex-basis:unset}.stacked-bar-chart-median{display:flex;flex-shrink:0;flex-grow:0;flex-basis:unset;background:var(--color-base-font);border:1px solid rgba(var(--color-base-font-rgb),.9);padding:.3rem 0}.stacked-bar-chart-rate80{display:flex;flex-shrink:0;flex-grow:0;flex-basis:unset;background:transparent;border:1px solid rgba(var(--color-base-font-rgb),.3);padding:.3rem 0}.stacked-bar-chart-rate95{display:flex;flex-shrink:0;flex-grow:0;flex-basis:unset;background:transparent;border-bottom:1px dotted rgba(var(--color-base-font-rgb),.5);padding:0}.stacked-bar-chart-rate100{display:flex;flex-shrink:0;flex-grow:0;flex-basis:unset;background:transparent;border-left:1px solid rgba(var(--color-base-font-rgb),.9);padding:.4rem 0;width:1px}/*! Autocomplete.js v2.6.3 | license MIT | (c) 2017, Baptiste Donaux | http://autocomplete-js.com */.autocomplete{position:absolute;width:44rem;max-height:0;overflow-y:hidden;text-align:left;border-radius:10px}.autocomplete:active,.autocomplete:focus,.autocomplete:hover{background-color:var(--color-autocomplete-background)}.autocomplete:empty{display:none}.autocomplete>ul{list-style-type:none;margin:0;padding:0}.autocomplete>ul>li{cursor:pointer;padding:.5rem 1rem}.autocomplete>ul>li.active,.autocomplete>ul>li:active,.autocomplete>ul>li:focus,.autocomplete>ul>li:hover{background-color:var(--color-autocomplete-background-hover)}.autocomplete>ul>li.active a:active,.autocomplete>ul>li:active a:active,.autocomplete>ul>li:focus a:active,.autocomplete>ul>li:hover a:active,.autocomplete>ul>li.active a:focus,.autocomplete>ul>li:active a:focus,.autocomplete>ul>li:focus a:focus,.autocomplete>ul>li:hover a:focus,.autocomplete>ul>li.active a:hover,.autocomplete>ul>li:active a:hover,.autocomplete>ul>li:focus a:hover,.autocomplete>ul>li:hover a:hover{text-decoration:none}.autocomplete>ul>li.locked{cursor:inherit}.autocomplete.open{display:block;background-color:var(--color-autocomplete-background);color:var(--color-autocomplete-font);max-height:32rem;overflow-y:auto;z-index:5000;margin-top:3.5rem;border-radius:.8rem}.autocomplete.open:empty{display:none}@media screen and (max-width: 50em){.autocomplete{width:100%}.autocomplete>ul>li{padding:1rem}}#main_results #results.image-detail-open.only_template_images{width:min(98%,59.25rem)!important}#main_results #results.only_template_images.image-detail-open #backToTop{left:56.75rem!important;right:inherit}article.result-images .detail{display:none}#results.image-detail-open article.result-images[data-vim-selected] .detail{display:flex;flex-direction:column;position:fixed;left:60rem;right:0;top:13rem;transition:top 64ms ease-in 0s;bottom:0;background:var(--color-result-detail-background);border:1px solid var(--color-result-detail-background);z-index:1000;padding:4rem 3rem 3rem;overflow-y:scroll}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-images-source{display:block;flex:1;text-align:left;width:100%;border:none;text-decoration:none}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-images-source img{padding:0;margin:0;border:none;object-fit:contain;width:inherit;height:inherit;max-width:100%;min-height:inherit;max-height:calc(100vh - 42rem);background:inherit}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels{color:var(--color-result-detail-font);height:19rem}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels hr{border-top:1px solid var(--color-result-detail-hr);border-bottom:none}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels h4{height:2rem;overflow:hidden;text-overflow:ellipsis;font-size:.9rem;margin-bottom:0}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p{color:var(--color-result-detail-label-font);font-size:.9rem;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;margin:.8rem 0}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p span{display:inline-block;width:12rem}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels h4,#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p,#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a{text-align:left}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p.result-content{height:2rem;line-height:unset;overflow:hidden;text-overflow:ellipsis}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p.result-url{white-space:nowrap;overflow:hidden hidden;text-overflow:ellipsis}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p.result-content:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p.result-url:hover{position:relative;overflow:inherit!important;background:var(--color-result-detail-background);text-overflow:inherit!important}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a,#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a:visited,#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a:active{color:var(--color-result-detail-link)}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a:hover{text-decoration:underline}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close{top:1rem;left:1rem;padding:.4rem}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous{top:1rem;right:6rem;padding:.4rem .5rem .4rem .3rem}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next{top:1rem;right:2rem;padding:.4rem}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous{border-radius:50%;display:block;width:1.5rem;height:1.5rem;position:absolute;filter:opacity(40%);z-index:1200}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close span,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next span,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous span{display:block;width:1.5rem;height:1.5rem;text-align:center}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next span:before,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous span:before{vertical-align:sub}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close:visited,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close:active,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous:visited,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous:active,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next:visited,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next:active{color:var(--color-result-detail-font);background:var(--color-result-detail-background);border:1px solid var(--color-result-detail-font)}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close:focus,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous:focus,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next:focus,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next:hover{filter:opacity(80%)}#results.image-detail-open article.result-images[data-vim-selected] .detail .loader{position:absolute;top:1rem;right:50%;border-top:.5em solid var(--color-result-detail-loader-border);border-right:.5em solid var(--color-result-detail-loader-border);border-bottom:.5em solid var(--color-result-detail-loader-border);border-left:.5em solid var(--color-result-detail-loader-borderleft)}#results.image-detail-open.scrolling article.result-images[data-vim-selected] .detail{top:0}#results.image-detail-open.scrolling article.result-images[data-vim-selected] .detail a.result-images-source img{max-height:calc(100vh - 25rem)}@media screen and (max-width: 79.75em){#results.image-detail-open article.result-images[data-vim-selected] .detail{top:0;left:0}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-images-source{display:flex;flex-direction:column;justify-content:center}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-images-source img{width:100%;max-height:calc(100vh - 24rem)}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next{right:1rem}}@media screen and (max-width: 50em){#results.image-detail-open article.result-images[data-vim-selected] .detail{top:0;left:0;padding:1rem}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-images-source img{width:100%;max-height:calc(100vh - 20rem);margin:0}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p span{width:inherit;margin-right:1rem}}.dialog-modal{animation-name:dialogmodal;animation-duration:.13s}@keyframes dialogmodal{0%{opacity:0}50%{opacity:.5;transform:translate(-50%,-50%) scale(1.05)}}input.checkbox-onoff[type=checkbox]:before{transition:left .25s}iframe[src^="https://w.soundcloud.com"]{height:120px}iframe[src^="https://www.deezer.com"]{height:94px}iframe[src^="https://www.mixcloud.com"]{height:250px}iframe[src^="https://bandcamp.com/EmbeddedPlayer"]{height:350px}iframe[src^="https://bandcamp.com/EmbeddedPlayer/track"]{height:120px}iframe[src^="https://genius.com/songs"]{height:65px}.info-page code{font-family:monospace;border-radius:5px;background-color:var(--color-doc-code-background);color:var(--color-doc-code);padding:.2rem;border:0 none}.stats_endpoint .github-issue-button{display:block;font-size:16px}.stats_endpoint .issue-hide{display:none}.stats_endpoint input[type=checked]{position:absolute}.stats_endpoint label{margin:1rem 1rem 1rem 0}.stats_endpoint .step_content{margin:1rem 1rem 1rem 2rem}.stats_endpoint .step1,.stats_endpoint .step2{visibility:hidden}.stats_endpoint .step1_delay{transition:visibility 0s linear 4s}.stats_endpoint #step1:checked~.step1,.stats_endpoint #step2:checked~.step2{visibility:visible}.engine-stats{border-spacing:0;border-collapse:collapse}.engine-stats tr td,.engine-stats tr th{border-bottom:1px solid var(--color-result-border);padding:.25rem}.engine-stats table.engine-tooltip{border-spacing:0;border-collapse:collapse}.engine-stats table.engine-tooltip td,.engine-stats table.engine-tooltip th{border:none}.engine-stats .engine-name{width:20rem}.engine-stats .engine-score{width:7rem;text-align:right}.engine-stats .engine-reliability{text-align:right}table.engine-error th.engine-error-type,table.engine-error td.engine-error-type,failed-test{width:10rem}.engine-errors{margin-top:3rem}.engine-errors table.engine-error{max-width:1280px;margin:1rem 0 3rem;border:1px solid var(--color-result-border);text-align:left}.engine-errors table.engine-error tr th,.engine-errors table.engine-error tr td{padding:.5rem}.engine-errors table.engine-error span.log_parameters{border-right:1px solid solid var(--color-result-border);padding:0 1rem 0 0;margin:0 0 0 .5rem}.bar-chart-value{width:3em;display:inline-block;text-align:right;padding-right:.5rem}.bar-chart-graph{width:calc(100% - 5rem);display:inline-block}.bar-chart-bar{border:3px solid var(--color-bar-chart-primary);margin:1px 0}.bar-chart-serie1{border:3px solid var(--color-bar-chart-primary);margin:1px 0;float:left}.bar-chart-serie2{border:3px solid var(--color-bar-chart-secondary);margin:1px 0;float:left}.bar0{width:0;border:0}.bar1{width:1%}.bar2{width:2%}.bar3{width:3%}.bar4{width:4%}.bar5{width:5%}.bar6{width:6%}.bar7{width:7%}.bar8{width:8%}.bar9{width:9%}.bar10{width:10%}.bar11{width:11%}.bar12{width:12%}.bar13{width:13%}.bar14{width:14%}.bar15{width:15%}.bar16{width:16%}.bar17{width:17%}.bar18{width:18%}.bar19{width:19%}.bar20{width:20%}.bar21{width:21%}.bar22{width:22%}.bar23{width:23%}.bar24{width:24%}.bar25{width:25%}.bar26{width:26%}.bar27{width:27%}.bar28{width:28%}.bar29{width:29%}.bar30{width:30%}.bar31{width:31%}.bar32{width:32%}.bar33{width:33%}.bar34{width:34%}.bar35{width:35%}.bar36{width:36%}.bar37{width:37%}.bar38{width:38%}.bar39{width:39%}.bar40{width:40%}.bar41{width:41%}.bar42{width:42%}.bar43{width:43%}.bar44{width:44%}.bar45{width:45%}.bar46{width:46%}.bar47{width:47%}.bar48{width:48%}.bar49{width:49%}.bar50{width:50%}.bar51{width:51%}.bar52{width:52%}.bar53{width:53%}.bar54{width:54%}.bar55{width:55%}.bar56{width:56%}.bar57{width:57%}.bar58{width:58%}.bar59{width:59%}.bar60{width:60%}.bar61{width:61%}.bar62{width:62%}.bar63{width:63%}.bar64{width:64%}.bar65{width:65%}.bar66{width:66%}.bar67{width:67%}.bar68{width:68%}.bar69{width:69%}.bar70{width:70%}.bar71{width:71%}.bar72{width:72%}.bar73{width:73%}.bar74{width:74%}.bar75{width:75%}.bar76{width:76%}.bar77{width:77%}.bar78{width:78%}.bar79{width:79%}.bar80{width:80%}.bar81{width:81%}.bar82{width:82%}.bar83{width:83%}.bar84{width:84%}.bar85{width:85%}.bar86{width:86%}.bar87{width:87%}.bar88{width:88%}.bar89{width:89%}.bar90{width:90%}.bar91{width:91%}.bar92{width:92%}.bar93{width:93%}.bar94{width:94%}.bar95{width:95%}.bar96{width:96%}.bar97{width:97%}.bar98{width:98%}.bar99{width:99%}.bar100{width:100%}.osm-map-box{height:300px;width:100%;margin:10px 0}#main_index{margin-top:26vh}.index{text-align:center}.index .title{background:url(../img/searxng.png) no-repeat;min-height:4rem;margin:4rem auto;background-position:center;background-size:contain}.index h1{font-size:4em;visibility:hidden}.index #search,.index #search_header{margin:0 auto;background:inherit;border:inherit;padding:0;display:block}.index .search_filters{display:block;margin:1em 0}.index .category label{padding:6px 10px;border-bottom:initial!important}@media screen and (max-width: 79.75em){div.title h1{font-size:1em}#main_index{margin-top:6em}}table{border-collapse:collapse}table th,table td{text-align:center;padding:1rem .5rem;text-align:left}table tr.pref-group th{font-weight:400;text-align:left;background:var(--color-settings-table-group-background)}#main_preferences form{width:100%}#main_preferences fieldset{margin:8px;border:none}#main_preferences legend{margin:0;padding:5px 0 0;display:block;float:left;width:300px}#main_preferences input[type=text]{width:13.25rem;color:var(--color-toolkit-input-text-font);border:none;background:none repeat scroll 0 0 var(--color-toolkit-select-background);padding:.2rem .4rem;height:2rem;border-radius:5px}#main_preferences input[type=text]:hover,#main_preferences input[type=text]:focus{background-color:var(--color-toolkit-select-background-hover)}#main_preferences div.pref-group{width:100%;font-weight:400;padding:1rem .5rem;text-align:left;background:var(--color-settings-table-group-background)}#main_preferences .value{margin:0;padding:0;float:left;width:15em}#main_preferences .value select,#main_preferences .value input[type=text]{font-size:inherit!important;margin-top:0;margin-right:1rem;margin-bottom:0;margin-left:0}#main_preferences .value select{width:14rem}#main_preferences .value select:focus,#main_preferences .value input:focus{outline:none;box-shadow:0 0 1px 1px var(--color-btn-background)}#main_preferences .description{margin:0;padding:5px 0 0;float:right;width:50%;color:var(--color-settings-engine-description-font);font-size:90%}#main_preferences .bang{text-align:left;border-radius:5px;background-color:var(--color-doc-code-background);color:var(--color-doc-code);padding:.2rem;border:0 none}#main_preferences .category{margin-right:.5rem}#main_preferences .category label{border:2px solid transparent;padding:.2rem .4rem;border-radius:5px}#main_preferences .category input[type=checkbox]:checked+label{border:2px solid var(--color-categories-item-border-selected)}#main_preferences table.table_engines th.name label{cursor:pointer}#main_preferences table.table_engines th.name .engine-tooltip{margin-top:1.8rem;left:calc((100% - 85em)/2 + 10em);max-width:40rem}#main_preferences table.table_engines th.name .engine-tooltip .engine-description{margin-top:.5rem}#main_preferences table.table_engines th.name .engine-tooltip .bang{margin:.3rem}#main_preferences table.table_engines .checkbox-col,#main_preferences table.table_engines .name,#main_preferences table.table_engines .shortcut{text-align:left}#main_preferences table.cookies{width:100%;direction:ltr}#main_preferences table.cookies th,#main_preferences table.cookies td{text-align:left;font-family:monospace;font-size:1rem;padding:.5em;vertical-align:top}#main_preferences table.cookies td:first-child{word-break:keep-all;width:14rem;padding-right:1rem}#main_preferences table.cookies td:last-child{word-break:break-all}#main_preferences table.cookies>tbody>tr:nth-child(2n)>th,#main_preferences table.cookies>tbody>tr:nth-child(2n)>td{background-color:var(--color-settings-tr-hover)}#main_preferences .preferences_back{background:none repeat scroll 0 0 var(--color-btn-background);color:var(--color-btn-font);border:0 none;border-radius:10px;cursor:pointer;display:inline-block;margin:2px 4px;padding:.7em}#main_preferences .preferences_back a{color:var(--color-settings-return-font)}#main_preferences .preferences_back a:first-letter{text-transform:uppercase}#main_preferences #toggle-all-engines-container{width:max-content;margin-left:auto}#main_preferences div.selectable_url pre{width:100%}#main_preferences #copy-hash-container{display:flex;align-items:center;gap:.5rem}#main_preferences #copy-hash-container div.selectable_url pre{width:auto;flex-grow:1}#main_preferences #pref-hash-input{width:100%}@media screen and (max-width: 79.75em){.preferences_back{clear:both}.engine-tooltip{left:10em!important}}#search{padding:0;margin:0}#search_header{padding-top:1.5em;padding-right:2em;padding-left:7rem;margin:0;background:var(--color-header-background);border-bottom:1px solid var(--color-header-border);display:grid;gap:1rem 1.2rem;grid-template-columns:3rem 1fr;grid-template-areas:"logo search" "spacer categories"}.category_checkbox,.category_button{display:inline-block;position:relative;margin-right:1rem;padding:0}.category_checkbox input{display:none}.category_checkbox label{cursor:pointer;padding:.2rem 0;display:inline-flex;text-transform:capitalize;font-size:.9em;border-bottom:2px solid transparent;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.category_checkbox label svg{padding-right:.2rem}.category_checkbox label div.category_name{margin:auto 0}.category_checkbox input[type=checkbox]:checked+label{color:var(--color-categories-item-selected-font);border-bottom:2px solid var(--color-categories-item-border-selected)}button.category_button{background-color:inherit;color:var(--color-base-font);cursor:pointer;padding:.2rem 0;display:inline-flex;align-items:center;text-transform:capitalize;font-size:.9em;border:none;border-bottom:2px solid transparent}button.category_button svg{padding-right:.2rem}button.category_button.selected,button.category_button:active{color:var(--color-categories-item-selected-font);border-bottom:2px solid var(--color-categories-item-border-selected)}.no-js #categories_container:has(button.category_button:focus-within) button.category_button.selected{color:var(--color-base-font);border-bottom:none}.no-js #categories_container:has(button.category_button:focus-within) button.category_button:focus-within{color:var(--color-categories-item-selected-font);border-bottom:2px solid var(--color-categories-item-border-selected)}#search_logo{padding:.5rem 10px 0;grid-area:logo;display:flex;align-items:center;justify-content:center}#search_logo svg{flex:1;width:30px;height:30px;margin:.5rem 0 auto}.search_categories{grid-area:categories}.search_categories .help{display:none}.search_categories:hover .help{display:block;position:absolute;background:var(--color-base-background);padding:1rem .6rem .6rem 0;z-index:1000;width:100%;left:-.1rem}#search_view{padding:.5rem .3rem 0 .5rem;grid-area:search}body.results_endpoint #search_view{padding:.5rem 2.8rem 0 0}.search_box{border-radius:.8rem;width:44rem;display:inline-flex;flex-direction:row;white-space:nowrap;box-shadow:var(--color-search-shadow)}#clear_search{display:block;border-collapse:separate;box-sizing:border-box;width:1.8rem;margin:0;padding:.8rem .2rem;background:none repeat scroll 0 0 var(--color-search-background);border:none;outline:none;color:var(--color-search-font);font-size:1.1rem;z-index:1000}#clear_search:hover{color:var(--color-search-background-hover)}#clear_search.empty *,html.no-js #clear_search.hide_if_nojs{display:none}#q,#send_search{display:block;margin:0;padding:.8rem;background:none repeat scroll 0 0 var(--color-search-background);border:none;outline:none;color:var(--color-search-font);font-size:1.1rem;z-index:100}#q{width:100%;padding-left:1rem;padding-right:0!important;border-radius:.8rem 0 0 .8rem}#q::-ms-clear,#q::-webkit-search-cancel-button{display:none}#send_search{border-radius:0 .8rem .8rem 0}#send_search:hover{cursor:pointer;background-color:var(--color-search-background-hover);color:var(--color-search-background)}.no-js #clear_search,.no-js #send_search{width:auto!important;border-left:1px solid var(--color-search-border)}.search_filters{margin-top:.6rem;margin-right:0;margin-bottom:0;margin-left:10.6rem;display:flex;overflow-x:auto;overscroll-behavior-inline:contain}.search_filters select{background-color:inherit}.search_filters select:hover,.search_filters select:focus{color:var(--color-base-font)}@media screen and (max-width: 79.75em){#search_header{padding:1.5em .5rem 0;column-gap:.5rem}.search_filters{margin-top:.6rem;margin-right:0;margin-bottom:0;margin-left:3.5rem}#categories{font-size:90%;clear:both}}@media screen and (max-width: 79.75em) and (hover: none){#main_index #categories_container,#main_results #categories_container{width:max-content}#main_index #categories_container .category_checkbox,#main_results #categories_container .category_checkbox{display:inline-block;width:auto}#main_index #categories,#main_results #categories{width:100%;text-align:left;overflow:scroll hidden;-webkit-overflow-scrolling:touch}}@media screen and (max-width: 50em){#search_header{width:100%;margin:0;padding:.1rem 0 0;gap:0 0;grid-template-areas:"logo search" "categories categories"}.search_logo{padding:0}.search_box{width:98%;display:flex}#q{width:100%;flex:1}.search_filters{margin:0 10px;padding:.5rem 0}.category{display:inline-block;width:auto;margin:0}.category svg{display:none}.category_checkbox label,.category_button{padding:1rem!important;margin:0!important}#search_view:focus-within{display:block;background-color:var(--color-search-background);position:absolute;top:0;height:100%;width:100%;z-index:2000}#search_view:focus-within .search_box{border-bottom:1px solid var(--color-search-border);width:100%;border-radius:0;box-shadow:none}#search_view:focus-within .search_box #send_search{margin-right:0!important}#search_view:focus-within .search_box *{border:none;border-radius:0;box-shadow:none}#main_results #q:placeholder-shown~#send_search{margin-right:2.6rem;transition:margin .1s}}@media screen and (max-width: 20rem){#search_header{grid-template-areas:"search search" "categories categories"}#search_logo{display:none}}#categories{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}#categories::-webkit-scrollbar{width:0;height:0}#categories_container{position:relative}.favicon img{height:1.5rem;width:1.5rem;border-radius:10%;background-color:var(--color-favicon-background-color);border:1px solid var(--color-favicon-border-color);display:flex}@media screen and (min-width: 50em){.center-alignment-yes #main_results{--center-page-width: 48rem}}@media screen and (width >= 62rem){.center-alignment-yes #main_results{--center-page-width: 60rem}}@media screen and (min-width: 79.75em){.center-alignment-yes #main_results{--center-page-width: 73rem}}@media screen and (min-width: 50em) and (max-width: 79.75em){.center-alignment-yes #main_results #results{grid-template-columns:60% calc(40% - 5rem);margin-left:0;margin-right:0}.center-alignment-yes #main_results #urls{margin-left:3rem}.center-alignment-yes #main_results #sidebar{margin-right:1rem}.center-alignment-yes #main_results #backToTop{left:calc(60% + 1rem)}}@media screen and (min-width: 79.75em){.center-alignment-yes #main_results{display:flex;flex-direction:column;align-items:center}.center-alignment-yes #main_results #search{width:100%;display:flex;flex-direction:column;align-items:center}.center-alignment-yes #main_results #search_header{grid-template-columns:calc(50% - 4.5rem - var(--center-page-width) / 2) 3rem var(--center-page-width);grid-template-areas:"na logo search" "na spacer categories";column-gap:1.2rem;width:100%;padding-left:0;padding-right:0}.center-alignment-yes #main_results .search_filters{margin-left:.5rem;width:var(--center-page-width)}.center-alignment-yes #main_results #results{margin-right:2rem;margin-left:10rem}.center-alignment-yes #main_results #results.only_template_images,.center-alignment-yes #main_results #results.image-detail-open{align-self:flex-start}.center-alignment-yes #main_results #results:not(.only_template_images,.image-detail-open){margin-left:1.5rem;grid-template-columns:calc(var(--center-page-width) - 5rem - 25rem) 25rem}.center-alignment-yes #main_results #results:not(.only_template_images,.image-detail-open) #backToTop{left:calc(50% - 25rem - 5rem + 1rem + var(--center-page-width) / 2)}.center-alignment-yes #main_results #results .result .content{max-width:inherit}.center-alignment-yes #main_results #urls{margin-left:0}.center-alignment-yes #main_results #sidebar{margin-right:0}}.sxng-icon-set{display:inline-block;vertical-align:bottom;line-height:1;text-decoration:inherit;transform:scale(1)}.sxng-icon-set-small{width:1rem;height:1rem;display:inline-block;vertical-align:bottom;line-height:1;text-decoration:inherit;transform:scale(1)}.sxng-icon-set-big{width:1.5rem;height:1.5rem;display:inline-block;vertical-align:bottom;line-height:1;text-decoration:inherit;transform:scale(1)}html{font-family:sans-serif;font-size:.9em;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%;color:var(--color-base-font);background-color:var(--color-base-background);padding:0;margin:0;scroll-behavior:smooth}body,main{padding:0;margin:0}body{display:flex;flex-direction:column;height:100vh;margin:0}@supports (height: 100dvh){body{height:100dvh}}main{width:100%;margin-bottom:2rem;flex:1}.page_with_header{margin:2em auto;width:85em}footer{clear:both;min-height:4rem;padding:1rem 0;width:100%;text-align:center;background-color:var(--color-footer-background);border-top:1px solid var(--color-footer-border);overflow:hidden}footer p{font-size:.9em}.page_with_header .logo{height:40px}input[type=submit],#results button[type=submit],.button{padding:.7rem;display:inline-block;background:var(--color-btn-background);color:var(--color-btn-font);border-radius:10px;border:0;cursor:pointer}a{text-decoration:none;color:var(--color-url-font)}a:visited,a:visited .highlight{color:var(--color-url-visited-font)}article[data-vim-selected]{background:var(--color-result-vim-selected);border-left:.2rem solid var(--color-result-vim-arrow);border-radius:0 10px 10px 0}article.result-images[data-vim-selected]{background:var(--color-result-vim-arrow);border:none;border-radius:10px}article.result-images[data-vim-selected] .image_thumbnail{filter:opacity(60%)}article.result-images[data-vim-selected] span.title,article.result-images[data-vim-selected] span.source{color:var(--color-result-image-span-font-selected)}article[data-vim-selected].category-videos,article[data-vim-selected].category-news,article[data-vim-selected].category-map,article[data-vim-selected].category-music,article[data-vim-selected].category-files,article[data-vim-selected].category-social{border:1px solid var(--color-result-vim-arrow);border-radius:10px}.result{margin:.125rem 0;padding:1rem;box-sizing:border-box;width:100%;border-left:.2rem solid transparent}.result h3{font-size:1.2rem;word-wrap:break-word;margin:.4rem 0;padding:0}.result h3 a{color:var(--color-result-link-font);font-weight:400;font-size:1.1em}.result h3 a:visited{color:var(--color-result-link-visited-font)}.result h3 a:focus,.result h3 a:hover{text-decoration:underline;border:none;outline:none}.result .cache_link,.result .proxyfied_link{font-size:smaller!important;margin-left:.5rem}.result .content,.result .stat{font-size:.9em;margin:0;padding:0;max-width:54em;word-wrap:break-word;line-height:1.24}.result .content .highlight,.result .stat .highlight{color:var(--color-result-description-highlight-font);background:inherit;font-weight:700}.result .altlink a{font-size:.9em;margin:0 10px 0 0;padding:5px 10px;border-radius:5px;background:var(--color-show-btn-background);color:var(--color-show-btn-font);cursor:pointer}.result .altlink a:hover{background:var(--color-btn-background);color:var(--color-btn-font)}.result .codelines .highlight{color:inherit;background:inherit;font-weight:400}.result .url_header{display:flex;gap:.5rem}.result .url_wrapper{display:flex;align-items:center;font-size:1rem;color:var(--color-result-url-font);flex-flow:row nowrap;overflow:hidden;margin:0;padding:0}.result .url_wrapper .url_o1{white-space:nowrap;flex-shrink:1;padding-bottom:1px}.result .url_wrapper .url_o1 .url_i1{unicode-bidi:plaintext}.result .url_wrapper .url_o1:after{content:" ";width:1ch;display:inline-block}.result .url_wrapper .url_o2{overflow:hidden;white-space:nowrap;flex:0 1 content;text-align:right;padding-bottom:1px}.result .url_wrapper .url_o2 .url_i2{float:right}.result .published_date,.result .result_length,.result .result_views,.result .result_author,.result .result_shipping,.result .result_source_country{font-size:.8em;color:var(--color-result-publishdate-font)}.result .result_price{font-size:1.2em;color:var(--color-result-description-highlight-font)}.result img.thumbnail{float:left;padding-top:.6rem;padding-right:1rem;width:7rem;height:unset}.result .break{clear:both}.result-paper .attributes,.result-packages .attributes{display:table;border-spacing:.125rem}.result-paper .attributes div,.result-packages .attributes div{display:table-row}.result-paper .attributes div span,.result-packages .attributes div span{font-size:.9rem;margin-top:.25rem;display:table-cell}.result-paper .attributes div span time,.result-packages .attributes div span time{font-size:.9rem}.result-paper .attributes div span:first-child,.result-packages .attributes div span:first-child{color:var(--color-base-font);min-width:10rem}.result-paper .attributes div span:nth-child(2),.result-packages .attributes div span:nth-child(2){color:var(--color-result-publishdate-font)}.result-paper .content,.result-packages .content{margin-top:.25rem}.result-paper .comments,.result-packages .comments{font-size:.9rem;margin:.25rem 0 0;padding:0;word-wrap:break-word;line-height:1.24;font-style:italic}.result-packages .attributes{margin-top:.3rem}.template_group_images{display:flex;flex-wrap:wrap}.template_group_images:after{flex-grow:10;content:""}.category-videos,.category-news,.category-map,.category-music,.category-files,.category-social{border:1px solid var(--color-result-border);margin:0 .5rem 1rem!important;border-radius:10px}.category-social .image{width:auto!important;min-width:48px;min-height:48px;padding:0 5px 25px 0!important}.audio-control audio{width:100%;padding:10px 0 0}.embedded-content iframe{width:100%;padding:10px 0 0}.result-videos img.thumbnail{float:left;padding-top:.6rem;padding-right:1rem;width:20rem;height:unset}.result-videos .content{overflow:hidden}.result-videos .embedded-video iframe{width:100%;aspect-ratio:16 / 9;padding:10px 0 0}@supports not (aspect-ratio: 1 / 1){.result-videos .embedded-video iframe{height:25.3125rem}}.engines{float:right;display:flex;flex-wrap:wrap;justify-content:flex-end;color:var(--color-result-engines-font)}.engines span{font-size:smaller;margin-top:0;margin-bottom:0;margin-right:.5rem;margin-left:0}.small_font{font-size:.8em}.highlight{color:var(--color-result-link-font-highlight);background:inherit}.empty_element{font-style:italic}.result-images{flex-grow:1;padding:.5rem .5rem 3rem;margin:.25rem;border:none!important;height:12rem;width:unset}.result-images>a{position:relative;outline:none}.result-images img{margin:0;padding:0;border:none;height:100%;width:auto;object-fit:cover;vertical-align:bottom;background:var(--color-result-image-background)}.result-images .image_resolution{position:absolute;right:0;bottom:0;background:var(--color-image-resolution-background);padding:.3rem .5rem;font-size:.9rem;color:var(--color-image-resolution-font);border-top-left-radius:.3rem}.result-images span.title,.result-images span.source{display:block;position:absolute;width:100%;font-size:.9rem;color:var(--color-result-image-span-font);padding:.5rem 0 0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.result-images span.source{padding:1.8rem 0 0;font-size:.7rem}.result-map img.image{float:right!important;height:100px!important;width:auto!important}.result-map table{font-size:.9em;width:auto;border-collapse:separate;border-spacing:0 .35rem}.result-map table th{font-weight:inherit;width:17rem;vertical-align:top;text-align:left}.result-map table td{vertical-align:top;text-align:left}.hidden{display:none!important}#results{margin-top:1rem;margin-right:2rem;margin-bottom:0;margin-left:10rem;display:grid;grid-template:"corrections sidebar" min-content "answers sidebar" min-content "urls sidebar" 1fr "pagination sidebar" min-content / 45rem 25rem;gap:0 5rem}#results #sidebar *:first-child{margin-top:0}#urls{padding:0;grid-area:urls}#apis .wrapper{display:flex}#suggestions .wrapper{display:flex;flex-flow:column;justify-content:flex-end}#suggestions .wrapper form{display:inline-block;flex:1 1 50%}#suggestions input,#infoboxes input{padding:0;margin:3px;font-size:.9em;display:inline-block;background:transparent;color:var(--color-result-search-url-font);cursor:pointer;width:100%;text-overflow:ellipsis;overflow:hidden;text-align:left}#suggestions input[type=submit],#infoboxes input[type=submit],#suggestions .infobox .url a,#infoboxes .infobox .url a{color:var(--color-result-link-font);text-decoration:none;font-size:.9rem}#suggestions input[type=submit]:hover,#infoboxes input[type=submit]:hover,#suggestions .infobox .url a:hover,#infoboxes .infobox .url a:hover{text-decoration:underline}#corrections{grid-area:corrections;display:flex;flex-flow:row wrap;margin:0 0 1em}#corrections h4,#corrections input[type=submit]{display:inline-block;padding:.5rem;margin:.5rem}#corrections input[type=submit]{font-size:.8rem;border-radius:5px}#infoboxes .title,#suggestions .title,#search_url .title,#engines_msg .title,#apis .title{margin:2em 0 .5em;color:var(--color-base-font)}summary.title{cursor:pointer;padding-top:1em}.sidebar-collapsible{border-top:1px solid var(--color-sidebar-border);padding-bottom:.5em}#sidebar-end-collapsible{border-bottom:1px solid var(--color-sidebar-border);width:100%}#answers{grid-area:answers;background:var(--color-answer-background);padding:1rem;margin:1rem 0;margin-top:0;color:var(--color-answer-font);border-radius:10px}#answers h4{display:none}#answers span{overflow-wrap:anywhere}#answers .answer{display:flex;flex-direction:column}#answers .answer-url{margin:5px 10px 10px auto}#infoboxes form{min-width:210px}#sidebar{grid-area:sidebar;word-wrap:break-word;color:var(--color-sidebar-font)}#sidebar .infobox{margin:10px 0;border:1px solid var(--color-sidebar-border);padding:1rem;font-size:.9em;border-radius:10px}#sidebar .infobox h2{margin:0 0 .5em}#sidebar .infobox img{max-width:100%;max-height:12em;display:block;margin:0 auto;padding:0}#sidebar .infobox dt{font-weight:700}#sidebar .infobox .attributes dl{margin:.5em 0}#sidebar .infobox .attributes dt{display:inline;margin:.5em .25em .5em 0;padding:0}#sidebar .infobox .attributes dd{display:inline;margin:.5em 0;padding:0}#sidebar .infobox input{font-size:1em}#sidebar .infobox br,#sidebar .infobox .attributes,#sidebar .infobox .urls{clear:both}#apis input{font-size:.9em;margin:0 10px 0 0;padding:5px 10px;border-radius:5px;background:var(--color-show-btn-background);color:var(--color-show-btn-font);cursor:pointer}#apis input:hover{background:var(--color-btn-background);color:var(--color-btn-font)}#engines_msg .engine-name{width:10rem}#engines_msg .response-error{color:var(--color-error)}#engines_msg .bar-chart-value{width:auto}#search_url div.selectable_url pre{float:left;width:200em}#search_url button#copy_url{float:right;padding:.4rem;margin-left:.5rem;border-radius:.3rem;display:none}#links_on_top{position:absolute;right:1rem;text-align:right;top:2.7rem;padding:0;border:0;display:flex;align-items:center;font-size:1em;color:var(--color-search-font)}#links_on_top a{display:flex;align-items:center;margin-left:1em}#links_on_top a svg{font-size:1.2em;margin-right:.125em}#links_on_top a,#links_on_top a:link *,#links_on_top a:hover *,#links_on_top a:visited *,#links_on_top a:active *{color:var(--color-search-font)}#pagination{grid-area:pagination}#pagination br{clear:both}.numbered_pagination{display:flex;flex-direction:row;justify-content:center;align-items:center;overflow:hidden}.page_number{background:transparent!important;color:var(--color-result-link-font)!important;text-decoration:underline}.page_number_current{background:transparent;color:var(--color-result-link-visited-font);border:none}#backToTop{border:1px solid var(--color-backtotop-border);margin:0;padding:0;font-size:1em;background:var(--color-backtotop-background);position:fixed;bottom:8rem;left:56.3rem;transition:opacity .5s;opacity:0;pointer-events:none;border-radius:10px}#backToTop a{display:block;margin:0;padding:.7em}#backToTop a,#backToTop a:visited,#backToTop a:hover,#backToTop a:active{color:var(--color-backtotop-font)}#results.scrolling #backToTop{opacity:1;pointer-events:all}@media screen and (width <= calc(79.75em - .5px)){#links_on_top span{display:none}}@media screen and (width <= 52rem){body.results_endpoint #links_on_top .link_on_top_about,body.results_endpoint #links_on_top .link_on_top_donate{display:none}}@media screen and (min-width: 50em) and (max-width: 79.75em){.center-alignment-no #links_on_top span{display:none}.center-alignment-no .page_with_header{margin:2rem .5rem;width:auto}.center-alignment-no #infoboxes{position:inherit;max-width:inherit}.center-alignment-no #infoboxes .infobox{clear:both}.center-alignment-no #infoboxes .infobox img{float:left;max-width:10em;margin:.5em .5em .5em 0}.center-alignment-no #sidebar{margin:0 .5rem .125rem;padding:0;float:none;border:none;width:auto}.center-alignment-no #sidebar input{border:0}.center-alignment-no .result .thumbnail{max-width:98%}.center-alignment-no .result .url span.url{display:block;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;width:100%}.center-alignment-no .result .engines{float:right;display:flex;flex-wrap:wrap;justify-content:flex-end;padding:3px 0 0}.center-alignment-no .result-images{border-bottom:none!important}.center-alignment-no .image_result,.center-alignment-no .image_result img{max-width:98%}.center-alignment-no #backToTop{display:none}.center-alignment-no #pagination{margin:2rem 0 0!important}.center-alignment-no #main_results div#results{margin:0 auto;justify-content:center;display:grid;grid-template:"corrections" min-content "answers" min-content "sidebar" min-content "urls" 1fr "pagination" min-content / 45rem;gap:0}}#main_results div#results.only_template_images{margin:1rem .5rem 0;display:grid;grid-template:"corrections" min-content "answers" min-content "sidebar" min-content "urls" 1fr "pagination" min-content / 100%;gap:0}#main_results div#results.only_template_images #sidebar{display:none}#main_results div#results.only_template_images #urls{margin:0;display:flex;flex-wrap:wrap}#main_results div#results.only_template_images #urls:after{flex-grow:10;content:""}#main_results div#results.only_template_images #backToTop{left:auto;right:1rem}#main_results div#results.only_template_images #pagination{margin-right:4rem}@media screen and (max-width: 50em){#links_on_top span{display:none}.page_with_header{margin:2rem .5rem;width:auto}#infoboxes{position:inherit;max-width:inherit}#infoboxes .infobox{clear:both}#infoboxes .infobox img{float:left;max-width:10em;margin:.5em .5em .5em 0}#sidebar{margin:0 .5rem .125rem;padding:0;float:none;border:none;width:auto}#sidebar input{border:0}.result .thumbnail{max-width:98%}.result .url span.url{display:block;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;width:100%}.result .engines{float:right;display:flex;flex-wrap:wrap;justify-content:flex-end;padding:3px 0 0}.result-images{border-bottom:none!important}.image_result,.image_result img{max-width:98%}#backToTop{display:none}#pagination{margin:2rem 0 0!important}#main_results div#results{margin:0 auto;justify-content:center;display:grid;grid-template:"corrections" min-content "answers" min-content "sidebar" min-content "urls" 1fr "pagination" min-content / 45rem;gap:0}html{background-color:var(--color-base-background-mobile)}#main_results div#results{grid-template-columns:100%;margin:0 auto}#links_on_top{top:1.4rem;right:10px}#main_index #links_on_top{top:.5rem;right:.5rem}#results{margin:0;padding:0}#pagination{margin:2rem 1rem 0!important}article[data-vim-selected]{border:1px solid var(--color-result-vim-arrow);border-radius:10px}.result{background:var(--color-result-background);border:1px solid var(--color-result-background);margin:1rem 2%;width:96%;border-radius:10px}.result-images{margin:0;height:10rem;background:var(--color-base-background-mobile);width:unset}.infobox{border:none!important;background-color:var(--color-sidebar-background)}.numbered_pagination{display:none}.result-paper .attributes,.result-packages .attributes,.result-paper .attributes div,.result-packages .attributes div{display:block}.result-paper .attributes div span,.result-packages .attributes div span{display:inline}.result-paper .attributes div span:first-child,.result-packages .attributes div span:first-child{font-weight:700}.result-paper .attributes div span:nth-child(2),.result-packages .attributes div span:nth-child(2){margin-left:.5rem}}@media screen and (max-width: 35em){.result-videos img.thumbnail{float:none!important}.result-videos .content{overflow:inherit}}pre code{white-space:pre-wrap}#main_results .result-keyvalue caption{padding:.8rem .5rem;font-style:italic;caption-side:bottom;background-color:var(--color-result-keyvalue-table)}#main_results .result-keyvalue .col-key{width:25%}#main_results .result-keyvalue table{word-break:break-word;table-layout:fixed;width:100%;background-color:var(--color-result-keyvalue-table)}#main_results .result-keyvalue tr.odd{background-color:var(--color-result-keyvalue-odd)}#main_results .result-keyvalue tr.even{background-color:var(--color-result-keyvalue-even)}#main_results .result-keyvalue th,#main_results .result-keyvalue td{padding:.3rem .5rem} +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}:root{--color-base-font: #444;--color-base-font-rgb: 68, 68, 68;--color-base-background: #fff;--color-base-background-mobile: #f2f5f8;--color-url-font: #334999;--color-url-visited-font: #9822c3;--color-header-background: #fdfbff;--color-header-border: #ddd;--color-footer-background: #fdfbff;--color-footer-border: #ddd;--color-sidebar-border: #ddd;--color-sidebar-font: #000;--color-sidebar-background: #fff;--color-backtotop-font: #444;--color-backtotop-border: #ddd;--color-backtotop-background: #fff;--color-btn-background: #3050ff;--color-btn-font: #fff;--color-show-btn-background: #bbb;--color-show-btn-font: #000;--color-search-border: #bbb;--color-search-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-search-background: #fff;--color-search-font: #222;--color-search-background-hover: #3050ff;--color-error: #db3434;--color-error-background: #fae1e1;--color-warning: #dbba34;--color-warning-background: #faf5e1;--color-success: #42db34;--color-success-background: #e3fae1;--color-categories-item-selected-font: #3050ff;--color-categories-item-border-selected: #3050ff;--color-autocomplete-font: #000;--color-autocomplete-border: #bbb;--color-autocomplete-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-autocomplete-background: #fff;--color-autocomplete-background-hover: #e3e3e3;--color-answer-font: #444;--color-answer-background: #fff;--color-result-keyvalue-col-table: #fdfbff;--color-result-keyvalue-odd: #fdfbff;--color-result-keyvalue-even: #fff;--color-result-background: #fff;--color-result-border: #ddd;--color-result-url-font: #000;--color-result-vim-selected: #f7f7f7;--color-result-vim-arrow: #000bbb;--color-result-description-highlight-font: #000;--color-result-link-font: #000bbb;--color-result-link-font-highlight: #000bbb;--color-result-link-visited-font: #9822c3;--color-result-publishdate-font: #777;--color-result-engines-font: #545454;--color-result-search-url-border: #ddd;--color-result-search-url-font: #000;--color-result-image-span-font: #444;--color-result-image-span-font-selected: #fff;--color-result-image-background: #fff;--color-settings-tr-hover: #ebebeb;--color-settings-engine-description-font: #545454;--color-settings-table-group-background: #0001;--color-result-detail-font: #fff;--color-result-detail-label-font: lightgray;--color-result-detail-background: #242424;--color-result-detail-hr: #555;--color-result-detail-link: #8af;--color-result-detail-loader-border: rgba(255, 255, 255, .2);--color-result-detail-loader-borderleft: rgba(0, 0, 0, 0);--color-toolkit-badge-font: #fff;--color-toolkit-badge-background: #545454;--color-toolkit-kbd-font: #fff;--color-toolkit-kbd-background: #000;--color-toolkit-dialog-border: #ddd;--color-toolkit-dialog-background: #fff;--color-toolkit-tabs-label-border: #fff;--color-toolkit-tabs-section-border: #ddd;--color-toolkit-select-background: #e1e1e1;--color-toolkit-select-border: #ddd;--color-toolkit-select-background-hover: #bbb;--color-toolkit-input-text-font: #222;--color-toolkit-checkbox-onoff-off-background: #ddd;--color-toolkit-checkbox-onoff-on-background: #ddd;--color-toolkit-checkbox-onoff-on-mark-background: #3050ff;--color-toolkit-checkbox-onoff-on-mark-color: #fff;--color-toolkit-checkbox-onoff-off-mark-background: #aaa;--color-toolkit-checkbox-onoff-off-mark-color: #fff;--color-toolkit-checkbox-label-background: #ddd;--color-toolkit-checkbox-label-border: #ddd;--color-toolkit-checkbox-input-border: #3050ff;--color-toolkit-engine-tooltip-border: #ddd;--color-toolkit-engine-tooltip-background: #fff;--color-toolkit-loader-border: rgba(0, 0, 0, .2);--color-toolkit-loader-borderleft: rgba(255, 255, 255, 0);--color-doc-code: #003;--color-doc-code-background: #ddeaff;--color-bar-chart-primary: #5bc0de;--color-bar-chart-secondary: #deb15b;--color-image-resolution-background: rgba(0, 0, 0, .5);--color-image-resolution-font: #fff;--color-loading-indicator: rgba(255, 255, 255, .2);--color-loading-indicator-gap: #fff;--color-line-number: #64708d;--color-favicon-background-color: #ddd;--color-favicon-border-color: #ccc}@media (prefers-color-scheme: dark){:root.theme-auto{--color-base-font: #bbb;--color-base-font-rgb: 187, 187, 187;--color-base-background: #222428;--color-base-background-mobile: #222428;--color-url-font: #8af;--color-url-visited-font: #c09cd9;--color-header-background: #1e1e22;--color-header-border: #333;--color-footer-background: #1e1e22;--color-footer-border: #333;--color-sidebar-border: #555;--color-sidebar-font: #fff;--color-sidebar-background: #292c34;--color-backtotop-font: #bbb;--color-backtotop-border: #333;--color-backtotop-background: #2b2e36;--color-btn-background: #58f;--color-btn-font: #222;--color-show-btn-background: #555;--color-show-btn-font: #fff;--color-search-border: #555;--color-search-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-search-background: #2b2e36;--color-search-font: #fff;--color-search-background-hover: #58f;--color-error: #f55b5b;--color-error-background: #390a0a;--color-warning: #f1d561;--color-warning-background: #39300a;--color-success: #79f56e;--color-success-background: #0e390a;--color-categories-item-selected-font: #58f;--color-categories-item-border-selected: #58f;--color-autocomplete-font: #fff;--color-autocomplete-border: #555;--color-autocomplete-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-autocomplete-background: #2b2e36;--color-autocomplete-background-hover: #1e1e22;--color-answer-font: #bbb;--color-answer-background: #26292f;--color-result-keyvalue-col-table: #1e1e22;--color-result-keyvalue-odd: #1e1e22;--color-result-keyvalue-even: #26292f;--color-result-background: #26292f;--color-result-border: #333;--color-result-url-font: #fff;--color-result-vim-selected: #1f1f23cc;--color-result-vim-arrow: #8af;--color-result-description-highlight-font: #fff;--color-result-link-font: #8af;--color-result-link-font-highlight: #8af;--color-result-link-visited-font: #c09cd9;--color-result-publishdate-font: #888;--color-result-engines-font: #a4a4a4;--color-result-search-url-border: #555;--color-result-search-url-font: #fff;--color-result-detail-font: #fff;--color-result-detail-label-font: lightgray;--color-result-detail-background: #1a1a1c;--color-result-detail-hr: #555;--color-result-detail-link: #8af;--color-result-detail-loader-border: rgba(255, 255, 255, .2);--color-result-detail-loader-borderleft: rgba(0, 0, 0, 0);--color-result-image-span-font: #bbb;--color-result-image-span-font-selected: #222;--color-result-image-background: #222;--color-settings-tr-hover: #2c2c32;--color-settings-engine-description-font: #909090;--color-settings-table-group-background: #1b1b21;--color-toolkit-badge-font: #fff;--color-toolkit-badge-background: #555;--color-toolkit-kbd-font: #000;--color-toolkit-kbd-background: #fff;--color-toolkit-dialog-border: #555;--color-toolkit-dialog-background: #1e1e22;--color-toolkit-tabs-label-border: #222;--color-toolkit-tabs-section-border: #555;--color-toolkit-select-background: #313338;--color-toolkit-select-border: #555;--color-toolkit-select-background-hover: #373b49;--color-toolkit-input-text-font: #fff;--color-toolkit-checkbox-onoff-off-background: #313338;--color-toolkit-checkbox-onoff-on-background: #313338;--color-toolkit-checkbox-onoff-on-mark-background: #58f;--color-toolkit-checkbox-onoff-on-mark-color: #222;--color-toolkit-checkbox-onoff-off-mark-background: #ddd;--color-toolkit-checkbox-onoff-off-mark-color: #222;--color-toolkit-checkbox-label-background: #222;--color-toolkit-checkbox-label-border: #333;--color-toolkit-checkbox-input-border: #58f;--color-toolkit-engine-tooltip-border: #333;--color-toolkit-engine-tooltip-background: #222;--color-toolkit-loader-border: rgba(255, 255, 255, .2);--color-toolkit-loader-borderleft: rgba(0, 0, 0, 0);--color-doc-code: #ddd;--color-doc-code-background: #4d5a6f;--color-favicon-background-color: #ddd;--color-favicon-border-color: #ccc}}:root.theme-dark{--color-base-font: #bbb;--color-base-font-rgb: 187, 187, 187;--color-base-background: #222428;--color-base-background-mobile: #222428;--color-url-font: #8af;--color-url-visited-font: #c09cd9;--color-header-background: #1e1e22;--color-header-border: #333;--color-footer-background: #1e1e22;--color-footer-border: #333;--color-sidebar-border: #555;--color-sidebar-font: #fff;--color-sidebar-background: #292c34;--color-backtotop-font: #bbb;--color-backtotop-border: #333;--color-backtotop-background: #2b2e36;--color-btn-background: #58f;--color-btn-font: #222;--color-show-btn-background: #555;--color-show-btn-font: #fff;--color-search-border: #555;--color-search-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-search-background: #2b2e36;--color-search-font: #fff;--color-search-background-hover: #58f;--color-error: #f55b5b;--color-error-background: #390a0a;--color-warning: #f1d561;--color-warning-background: #39300a;--color-success: #79f56e;--color-success-background: #0e390a;--color-categories-item-selected-font: #58f;--color-categories-item-border-selected: #58f;--color-autocomplete-font: #fff;--color-autocomplete-border: #555;--color-autocomplete-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-autocomplete-background: #2b2e36;--color-autocomplete-background-hover: #1e1e22;--color-answer-font: #bbb;--color-answer-background: #26292f;--color-result-keyvalue-col-table: #1e1e22;--color-result-keyvalue-odd: #1e1e22;--color-result-keyvalue-even: #26292f;--color-result-background: #26292f;--color-result-border: #333;--color-result-url-font: #fff;--color-result-vim-selected: #1f1f23cc;--color-result-vim-arrow: #8af;--color-result-description-highlight-font: #fff;--color-result-link-font: #8af;--color-result-link-font-highlight: #8af;--color-result-link-visited-font: #c09cd9;--color-result-publishdate-font: #888;--color-result-engines-font: #a4a4a4;--color-result-search-url-border: #555;--color-result-search-url-font: #fff;--color-result-detail-font: #fff;--color-result-detail-label-font: lightgray;--color-result-detail-background: #1a1a1c;--color-result-detail-hr: #555;--color-result-detail-link: #8af;--color-result-detail-loader-border: rgba(255, 255, 255, .2);--color-result-detail-loader-borderleft: rgba(0, 0, 0, 0);--color-result-image-span-font: #bbb;--color-result-image-span-font-selected: #222;--color-result-image-background: #222;--color-settings-tr-hover: #2c2c32;--color-settings-engine-description-font: #909090;--color-settings-table-group-background: #1b1b21;--color-toolkit-badge-font: #fff;--color-toolkit-badge-background: #555;--color-toolkit-kbd-font: #000;--color-toolkit-kbd-background: #fff;--color-toolkit-dialog-border: #555;--color-toolkit-dialog-background: #1e1e22;--color-toolkit-tabs-label-border: #222;--color-toolkit-tabs-section-border: #555;--color-toolkit-select-background: #313338;--color-toolkit-select-border: #555;--color-toolkit-select-background-hover: #373b49;--color-toolkit-input-text-font: #fff;--color-toolkit-checkbox-onoff-off-background: #313338;--color-toolkit-checkbox-onoff-on-background: #313338;--color-toolkit-checkbox-onoff-on-mark-background: #58f;--color-toolkit-checkbox-onoff-on-mark-color: #222;--color-toolkit-checkbox-onoff-off-mark-background: #ddd;--color-toolkit-checkbox-onoff-off-mark-color: #222;--color-toolkit-checkbox-label-background: #222;--color-toolkit-checkbox-label-border: #333;--color-toolkit-checkbox-input-border: #58f;--color-toolkit-engine-tooltip-border: #333;--color-toolkit-engine-tooltip-background: #222;--color-toolkit-loader-border: rgba(255, 255, 255, .2);--color-toolkit-loader-borderleft: rgba(0, 0, 0, 0);--color-doc-code: #ddd;--color-doc-code-background: #4d5a6f;--color-favicon-background-color: #ddd;--color-favicon-border-color: #ccc}:root.theme-black{--color-base-font: #bbb;--color-base-font-rgb: 187, 187, 187;--color-base-background: #222428;--color-base-background-mobile: #222428;--color-url-font: #8af;--color-url-visited-font: #c09cd9;--color-header-background: #1e1e22;--color-header-border: #333;--color-footer-background: #1e1e22;--color-footer-border: #333;--color-sidebar-border: #555;--color-sidebar-font: #fff;--color-sidebar-background: #292c34;--color-backtotop-font: #bbb;--color-backtotop-border: #333;--color-backtotop-background: #2b2e36;--color-btn-background: #58f;--color-btn-font: #222;--color-show-btn-background: #555;--color-show-btn-font: #fff;--color-search-border: #555;--color-search-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-search-background: #2b2e36;--color-search-font: #fff;--color-search-background-hover: #58f;--color-error: #f55b5b;--color-error-background: #390a0a;--color-warning: #f1d561;--color-warning-background: #39300a;--color-success: #79f56e;--color-success-background: #0e390a;--color-categories-item-selected-font: #58f;--color-categories-item-border-selected: #58f;--color-autocomplete-font: #fff;--color-autocomplete-border: #555;--color-autocomplete-shadow: 0 2px 8px rgba(34, 38, 46, .25);--color-autocomplete-background: #2b2e36;--color-autocomplete-background-hover: #1e1e22;--color-answer-font: #bbb;--color-answer-background: #26292f;--color-result-keyvalue-col-table: #1e1e22;--color-result-keyvalue-odd: #1e1e22;--color-result-keyvalue-even: #26292f;--color-result-background: #26292f;--color-result-border: #333;--color-result-url-font: #fff;--color-result-vim-selected: #1f1f23cc;--color-result-vim-arrow: #8af;--color-result-description-highlight-font: #fff;--color-result-link-font: #8af;--color-result-link-font-highlight: #8af;--color-result-link-visited-font: #c09cd9;--color-result-publishdate-font: #888;--color-result-engines-font: #a4a4a4;--color-result-search-url-border: #555;--color-result-search-url-font: #fff;--color-result-detail-font: #fff;--color-result-detail-label-font: lightgray;--color-result-detail-background: #1a1a1c;--color-result-detail-hr: #555;--color-result-detail-link: #8af;--color-result-detail-loader-border: rgba(255, 255, 255, .2);--color-result-detail-loader-borderleft: rgba(0, 0, 0, 0);--color-result-image-span-font: #bbb;--color-result-image-span-font-selected: #222;--color-result-image-background: #222;--color-settings-tr-hover: #2c2c32;--color-settings-engine-description-font: #909090;--color-settings-table-group-background: #1b1b21;--color-toolkit-badge-font: #fff;--color-toolkit-badge-background: #555;--color-toolkit-kbd-font: #000;--color-toolkit-kbd-background: #fff;--color-toolkit-dialog-border: #555;--color-toolkit-dialog-background: #1e1e22;--color-toolkit-tabs-label-border: #222;--color-toolkit-tabs-section-border: #555;--color-toolkit-select-background: #313338;--color-toolkit-select-border: #555;--color-toolkit-select-background-hover: #373b49;--color-toolkit-input-text-font: #fff;--color-toolkit-checkbox-onoff-off-background: #313338;--color-toolkit-checkbox-onoff-on-background: #313338;--color-toolkit-checkbox-onoff-on-mark-background: #58f;--color-toolkit-checkbox-onoff-on-mark-color: #222;--color-toolkit-checkbox-onoff-off-mark-background: #ddd;--color-toolkit-checkbox-onoff-off-mark-color: #222;--color-toolkit-checkbox-label-background: #222;--color-toolkit-checkbox-label-border: #333;--color-toolkit-checkbox-input-border: #58f;--color-toolkit-engine-tooltip-border: #333;--color-toolkit-engine-tooltip-background: #222;--color-toolkit-loader-border: rgba(255, 255, 255, .2);--color-toolkit-loader-borderleft: rgba(0, 0, 0, 0);--color-doc-code: #ddd;--color-doc-code-background: #4d5a6f;--color-favicon-background-color: #ddd;--color-favicon-border-color: #ccc;--color-base-background: #000;--color-base-background-mobile: #000;--color-header-background: #000;--color-footer-background: #000;--color-sidebar-background: #000}.code-highlight pre{line-height:100%}.code-highlight td.linenos .normal,.code-highlight span.linenos{color:inherit;background-color:transparent;padding-left:5px;padding-right:5px}.code-highlight td.linenos .special,.code-highlight span.linenos.special{color:#000;background-color:#ffffc0;padding-left:5px;padding-right:5px}.code-highlight .hll{background-color:#ffc}.code-highlight .c{color:#3d7b7b;font-style:italic}.code-highlight .err{border:1px solid #F00}.code-highlight .k{color:green;font-weight:700}.code-highlight .o{color:#666}.code-highlight .ch,.code-highlight .cm{color:#3d7b7b;font-style:italic}.code-highlight .cp{color:#9c6500}.code-highlight .cpf,.code-highlight .c1,.code-highlight .cs{color:#3d7b7b;font-style:italic}.code-highlight .gd{color:#a00000}.code-highlight .ge{font-style:italic}.code-highlight .ges{font-weight:700;font-style:italic}.code-highlight .gr{color:#e40000}.code-highlight .gh{color:navy;font-weight:700}.code-highlight .gi{color:#008400}.code-highlight .go{color:#717171}.code-highlight .gp{color:navy;font-weight:700}.code-highlight .gs{font-weight:700}.code-highlight .gu{color:purple;font-weight:700}.code-highlight .gt{color:#04d}.code-highlight .kc,.code-highlight .kd,.code-highlight .kn{color:green;font-weight:700}.code-highlight .kp{color:green}.code-highlight .kr{color:green;font-weight:700}.code-highlight .kt{color:#b00040}.code-highlight .m{color:#666}.code-highlight .s{color:#ba2121}.code-highlight .na{color:#687822}.code-highlight .nb{color:green}.code-highlight .nc{color:#00f;font-weight:700}.code-highlight .no{color:#800}.code-highlight .nd{color:#a2f}.code-highlight .ni{color:#717171;font-weight:700}.code-highlight .ne{color:#cb3f38;font-weight:700}.code-highlight .nf{color:#00f}.code-highlight .nl{color:#767600}.code-highlight .nn{color:#00f;font-weight:700}.code-highlight .nt{color:green;font-weight:700}.code-highlight .nv{color:#19177c}.code-highlight .ow{color:#a2f;font-weight:700}.code-highlight .w{color:#bbb}.code-highlight .mb,.code-highlight .mf,.code-highlight .mh,.code-highlight .mi,.code-highlight .mo{color:#666}.code-highlight .sa,.code-highlight .sb,.code-highlight .sc,.code-highlight .dl{color:#ba2121}.code-highlight .sd{color:#ba2121;font-style:italic}.code-highlight .s2{color:#ba2121}.code-highlight .se{color:#aa5d1f;font-weight:700}.code-highlight .sh{color:#ba2121}.code-highlight .si{color:#a45a77;font-weight:700}.code-highlight .sx{color:green}.code-highlight .sr{color:#a45a77}.code-highlight .s1{color:#ba2121}.code-highlight .ss{color:#19177c}.code-highlight .bp{color:green}.code-highlight .fm{color:#00f}.code-highlight .vc,.code-highlight .vg,.code-highlight .vi,.code-highlight .vm{color:#19177c}.code-highlight .il{color:#666}.codelines{margin:.125rem 0 0;padding:1rem 0 0}.code-highlight pre{overflow:auto;margin:0;padding:0 0 .75rem}.code-highlight .linenos{-webkit-user-select:none;user-select:none;cursor:default;margin-right:8px;text-align:right}.code-highlight .linenos::selection{background:transparent}.code-highlight .linenos::-moz-selection{background:transparent}.code-highlight span.linenos{color:var(--color-line-number)}@media (prefers-color-scheme: dark){:root.theme-auto .code-highlight pre{line-height:100%}:root.theme-auto .code-highlight td.linenos .normal{color:#3c4354;background-color:transparent;padding-left:5px;padding-right:5px}:root.theme-auto .code-highlight span.linenos{color:#3c4354;background-color:transparent;padding-left:5px;padding-right:5px}:root.theme-auto .code-highlight td.linenos .special{color:#3c4354;background-color:#ffffc0;padding-left:5px;padding-right:5px}:root.theme-auto .code-highlight span.linenos.special{color:#3c4354;background-color:#ffffc0;padding-left:5px;padding-right:5px}:root.theme-auto .code-highlight .hll{background-color:#6e7681}:root.theme-auto .code-highlight .c{color:#7e8aa1}:root.theme-auto .code-highlight .err{color:#f88f7f}:root.theme-auto .code-highlight .esc{color:#d4d2c8}:root.theme-auto .code-highlight .g{color:#d4d2c8}:root.theme-auto .code-highlight .k{color:#ffad66}:root.theme-auto .code-highlight .l{color:#d5ff80}:root.theme-auto .code-highlight .n{color:#d4d2c8}:root.theme-auto .code-highlight .o{color:#ffad66}:root.theme-auto .code-highlight .x{color:#d4d2c8}:root.theme-auto .code-highlight .p{color:#d4d2c8}:root.theme-auto .code-highlight .ch{color:#f88f7f;font-style:italic}:root.theme-auto .code-highlight .cm{color:#7e8aa1}:root.theme-auto .code-highlight .cp{color:#ffad66;font-weight:700}:root.theme-auto .code-highlight .cpf{color:#7e8aa1}:root.theme-auto .code-highlight .c1{color:#7e8aa1}:root.theme-auto .code-highlight .cs{color:#7e8aa1;font-style:italic}:root.theme-auto .code-highlight .gd{color:#f88f7f;background-color:#3d1e20}:root.theme-auto .code-highlight .ge{color:#d4d2c8;font-style:italic}:root.theme-auto .code-highlight .ges{color:#d4d2c8}:root.theme-auto .code-highlight .gr{color:#f88f7f}:root.theme-auto .code-highlight .gh{color:#d4d2c8}:root.theme-auto .code-highlight .gi{color:#6ad4af;background-color:#19362c}:root.theme-auto .code-highlight .go{color:#7e8aa1}:root.theme-auto .code-highlight .gp{color:#d4d2c8}:root.theme-auto .code-highlight .gs{color:#d4d2c8;font-weight:700}:root.theme-auto .code-highlight .gu{color:#d4d2c8}:root.theme-auto .code-highlight .gt{color:#f88f7f}:root.theme-auto .code-highlight .kc{color:#ffad66}:root.theme-auto .code-highlight .kd{color:#ffad66}:root.theme-auto .code-highlight .kn{color:#ffad66}:root.theme-auto .code-highlight .kp{color:#ffad66}:root.theme-auto .code-highlight .kr{color:#ffad66}:root.theme-auto .code-highlight .kt{color:#73d0ff}:root.theme-auto .code-highlight .ld{color:#d5ff80}:root.theme-auto .code-highlight .m{color:#dfbfff}:root.theme-auto .code-highlight .s{color:#d5ff80}:root.theme-auto .code-highlight .na{color:#ffd173}:root.theme-auto .code-highlight .nb{color:#ffd173}:root.theme-auto .code-highlight .nc{color:#73d0ff}:root.theme-auto .code-highlight .no{color:#ffd173}:root.theme-auto .code-highlight .nd{color:#7e8aa1;font-weight:700;font-style:italic}:root.theme-auto .code-highlight .ni{color:#95e6cb}:root.theme-auto .code-highlight .ne{color:#73d0ff}:root.theme-auto .code-highlight .nf{color:#ffd173}:root.theme-auto .code-highlight .nl{color:#d4d2c8}:root.theme-auto .code-highlight .nn{color:#d4d2c8}:root.theme-auto .code-highlight .nx{color:#d4d2c8}:root.theme-auto .code-highlight .py{color:#ffd173}:root.theme-auto .code-highlight .nt{color:#5ccfe6}:root.theme-auto .code-highlight .nv{color:#d4d2c8}:root.theme-auto .code-highlight .ow{color:#ffad66}:root.theme-auto .code-highlight .pm{color:#d4d2c8}:root.theme-auto .code-highlight .w{color:#d4d2c8}:root.theme-auto .code-highlight .mb{color:#dfbfff}:root.theme-auto .code-highlight .mf{color:#dfbfff}:root.theme-auto .code-highlight .mh{color:#dfbfff}:root.theme-auto .code-highlight .mi{color:#dfbfff}:root.theme-auto .code-highlight .mo{color:#dfbfff}:root.theme-auto .code-highlight .sa{color:#f29e74}:root.theme-auto .code-highlight .sb{color:#d5ff80}:root.theme-auto .code-highlight .sc{color:#d5ff80}:root.theme-auto .code-highlight .dl{color:#d5ff80}:root.theme-auto .code-highlight .sd{color:#7e8aa1}:root.theme-auto .code-highlight .s2{color:#d5ff80}:root.theme-auto .code-highlight .se{color:#95e6cb}:root.theme-auto .code-highlight .sh{color:#d5ff80}:root.theme-auto .code-highlight .si{color:#95e6cb}:root.theme-auto .code-highlight .sx{color:#95e6cb}:root.theme-auto .code-highlight .sr{color:#95e6cb}:root.theme-auto .code-highlight .s1{color:#d5ff80}:root.theme-auto .code-highlight .ss{color:#dfbfff}:root.theme-auto .code-highlight .bp{color:#5ccfe6}:root.theme-auto .code-highlight .fm{color:#ffd173}:root.theme-auto .code-highlight .vc{color:#d4d2c8}:root.theme-auto .code-highlight .vg{color:#d4d2c8}:root.theme-auto .code-highlight .vi{color:#d4d2c8}:root.theme-auto .code-highlight .vm{color:#d4d2c8}:root.theme-auto .code-highlight .il{color:#dfbfff}:root.theme-auto .code-highlight pre{overflow:auto;margin:0;padding:0 0 .75rem}:root.theme-auto .code-highlight .linenos{-webkit-user-select:none;user-select:none;cursor:default;margin-right:8px;text-align:right}:root.theme-auto .code-highlight .linenos::selection{background:transparent}:root.theme-auto .code-highlight .linenos::-moz-selection{background:transparent}:root.theme-auto .code-highlight span.linenos{color:var(--color-line-number)}}:root.theme-dark .code-highlight pre{line-height:100%}:root.theme-dark .code-highlight td.linenos .normal{color:#3c4354;background-color:transparent;padding-left:5px;padding-right:5px}:root.theme-dark .code-highlight span.linenos{color:#3c4354;background-color:transparent;padding-left:5px;padding-right:5px}:root.theme-dark .code-highlight td.linenos .special{color:#3c4354;background-color:#ffffc0;padding-left:5px;padding-right:5px}:root.theme-dark .code-highlight span.linenos.special{color:#3c4354;background-color:#ffffc0;padding-left:5px;padding-right:5px}:root.theme-dark .code-highlight .hll{background-color:#6e7681}:root.theme-dark .code-highlight .c{color:#7e8aa1}:root.theme-dark .code-highlight .err{color:#f88f7f}:root.theme-dark .code-highlight .esc{color:#d4d2c8}:root.theme-dark .code-highlight .g{color:#d4d2c8}:root.theme-dark .code-highlight .k{color:#ffad66}:root.theme-dark .code-highlight .l{color:#d5ff80}:root.theme-dark .code-highlight .n{color:#d4d2c8}:root.theme-dark .code-highlight .o{color:#ffad66}:root.theme-dark .code-highlight .x{color:#d4d2c8}:root.theme-dark .code-highlight .p{color:#d4d2c8}:root.theme-dark .code-highlight .ch{color:#f88f7f;font-style:italic}:root.theme-dark .code-highlight .cm{color:#7e8aa1}:root.theme-dark .code-highlight .cp{color:#ffad66;font-weight:700}:root.theme-dark .code-highlight .cpf{color:#7e8aa1}:root.theme-dark .code-highlight .c1{color:#7e8aa1}:root.theme-dark .code-highlight .cs{color:#7e8aa1;font-style:italic}:root.theme-dark .code-highlight .gd{color:#f88f7f;background-color:#3d1e20}:root.theme-dark .code-highlight .ge{color:#d4d2c8;font-style:italic}:root.theme-dark .code-highlight .ges{color:#d4d2c8}:root.theme-dark .code-highlight .gr{color:#f88f7f}:root.theme-dark .code-highlight .gh{color:#d4d2c8}:root.theme-dark .code-highlight .gi{color:#6ad4af;background-color:#19362c}:root.theme-dark .code-highlight .go{color:#7e8aa1}:root.theme-dark .code-highlight .gp{color:#d4d2c8}:root.theme-dark .code-highlight .gs{color:#d4d2c8;font-weight:700}:root.theme-dark .code-highlight .gu{color:#d4d2c8}:root.theme-dark .code-highlight .gt{color:#f88f7f}:root.theme-dark .code-highlight .kc{color:#ffad66}:root.theme-dark .code-highlight .kd{color:#ffad66}:root.theme-dark .code-highlight .kn{color:#ffad66}:root.theme-dark .code-highlight .kp{color:#ffad66}:root.theme-dark .code-highlight .kr{color:#ffad66}:root.theme-dark .code-highlight .kt{color:#73d0ff}:root.theme-dark .code-highlight .ld{color:#d5ff80}:root.theme-dark .code-highlight .m{color:#dfbfff}:root.theme-dark .code-highlight .s{color:#d5ff80}:root.theme-dark .code-highlight .na{color:#ffd173}:root.theme-dark .code-highlight .nb{color:#ffd173}:root.theme-dark .code-highlight .nc{color:#73d0ff}:root.theme-dark .code-highlight .no{color:#ffd173}:root.theme-dark .code-highlight .nd{color:#7e8aa1;font-weight:700;font-style:italic}:root.theme-dark .code-highlight .ni{color:#95e6cb}:root.theme-dark .code-highlight .ne{color:#73d0ff}:root.theme-dark .code-highlight .nf{color:#ffd173}:root.theme-dark .code-highlight .nl{color:#d4d2c8}:root.theme-dark .code-highlight .nn{color:#d4d2c8}:root.theme-dark .code-highlight .nx{color:#d4d2c8}:root.theme-dark .code-highlight .py{color:#ffd173}:root.theme-dark .code-highlight .nt{color:#5ccfe6}:root.theme-dark .code-highlight .nv{color:#d4d2c8}:root.theme-dark .code-highlight .ow{color:#ffad66}:root.theme-dark .code-highlight .pm{color:#d4d2c8}:root.theme-dark .code-highlight .w{color:#d4d2c8}:root.theme-dark .code-highlight .mb{color:#dfbfff}:root.theme-dark .code-highlight .mf{color:#dfbfff}:root.theme-dark .code-highlight .mh{color:#dfbfff}:root.theme-dark .code-highlight .mi{color:#dfbfff}:root.theme-dark .code-highlight .mo{color:#dfbfff}:root.theme-dark .code-highlight .sa{color:#f29e74}:root.theme-dark .code-highlight .sb{color:#d5ff80}:root.theme-dark .code-highlight .sc{color:#d5ff80}:root.theme-dark .code-highlight .dl{color:#d5ff80}:root.theme-dark .code-highlight .sd{color:#7e8aa1}:root.theme-dark .code-highlight .s2{color:#d5ff80}:root.theme-dark .code-highlight .se{color:#95e6cb}:root.theme-dark .code-highlight .sh{color:#d5ff80}:root.theme-dark .code-highlight .si{color:#95e6cb}:root.theme-dark .code-highlight .sx{color:#95e6cb}:root.theme-dark .code-highlight .sr{color:#95e6cb}:root.theme-dark .code-highlight .s1{color:#d5ff80}:root.theme-dark .code-highlight .ss{color:#dfbfff}:root.theme-dark .code-highlight .bp{color:#5ccfe6}:root.theme-dark .code-highlight .fm{color:#ffd173}:root.theme-dark .code-highlight .vc{color:#d4d2c8}:root.theme-dark .code-highlight .vg{color:#d4d2c8}:root.theme-dark .code-highlight .vi{color:#d4d2c8}:root.theme-dark .code-highlight .vm{color:#d4d2c8}:root.theme-dark .code-highlight .il{color:#dfbfff}:root.theme-dark .code-highlight pre{overflow:auto;margin:0;padding:0 0 .75rem}:root.theme-dark .code-highlight .linenos{-webkit-user-select:none;user-select:none;cursor:default;margin-right:8px;text-align:right}:root.theme-dark .code-highlight .linenos::selection{background:transparent}:root.theme-dark .code-highlight .linenos::-moz-selection{background:transparent}:root.theme-dark .code-highlight span.linenos{color:var(--color-line-number)}html.no-js .hide_if_nojs,html.js .show_if_nojs{display:none}.center{text-align:center}.right{float:right}.left{float:left}.invisible{display:none!important}.list-unstyled{list-style-type:none}.list-unstyled li{margin-top:4px;margin-bottom:4px}.danger{background-color:var(--color-error-background)}.warning{background:var(--color-warning-background)}.success{background:var(--color-success-background)}.badge{display:inline-block;color:var(--color-toolkit-badge-font);background-color:var(--color-toolkit-badge-background);text-align:center;white-space:nowrap;vertical-align:baseline;min-width:10px;padding:1px 5px;border-radius:5px}kbd{padding:2px 4px;margin:1px;font-size:90%;color:var(--color-toolkit-kbd-font);background:var(--color-toolkit-kbd-background)}table{width:100%}table.striped tr{border-bottom:1px solid var(--color-settings-tr-hover)}th{padding:.4em}td{padding:0 4px}tr:hover{background:var(--color-settings-tr-hover)!important}div.selectable_url{display:block;border:1px solid var(--color-result-search-url-border);padding:4px;color:var(--color-result-search-url-font);margin:.1em;overflow:hidden;height:1.2em;line-height:1.2em;border-radius:5px}div.selectable_url pre{display:block;font-size:.8em;word-break:break-all;margin:.1em;-webkit-user-select:all;user-select:all}.dialog-error{position:relative;display:flex;padding:1rem;margin:0 0 1em;border:1px solid var(--color-toolkit-dialog-border);text-align:left;border-radius:10px;color:var(--color-error);background:var(--color-error-background);border-color:var(--color-error)}.dialog-error .close{float:right;position:relative;top:-3px;color:inherit;font-size:1.5em}.dialog-error ul,.dialog-error ol,.dialog-error p{margin:1px 0 0}.dialog-error table{width:auto}.dialog-error tr{vertical-align:text-top}.dialog-error tr:hover{background:transparent!important}.dialog-error td{padding:0 1em 0 0;padding-right:1rem;padding-bottom:0;padding-left:0}.dialog-error h4{margin-top:.3em;margin-bottom:.3em}.dialog-error-block{position:relative;display:flex;padding:1rem;margin:0 0 1em;border:1px solid var(--color-toolkit-dialog-border);text-align:left;border-radius:10px;display:block;color:var(--color-error);background:var(--color-error-background);border-color:var(--color-error)}.dialog-error-block .close{float:right;position:relative;top:-3px;color:inherit;font-size:1.5em}.dialog-error-block ul,.dialog-error-block ol,.dialog-error-block p{margin:1px 0 0}.dialog-error-block table{width:auto}.dialog-error-block tr{vertical-align:text-top}.dialog-error-block tr:hover{background:transparent!important}.dialog-error-block td{padding:0 1em 0 0;padding-right:1rem;padding-bottom:0;padding-left:0}.dialog-error-block h4{margin-top:.3em;margin-bottom:.3em}.dialog-warning{position:relative;display:flex;padding:1rem;margin:0 0 1em;border:1px solid var(--color-toolkit-dialog-border);text-align:left;border-radius:10px;color:var(--color-warning);background:var(--color-warning-background);border-color:var(--color-warning)}.dialog-warning .close{float:right;position:relative;top:-3px;color:inherit;font-size:1.5em}.dialog-warning ul,.dialog-warning ol,.dialog-warning p{margin:1px 0 0}.dialog-warning table{width:auto}.dialog-warning tr{vertical-align:text-top}.dialog-warning tr:hover{background:transparent!important}.dialog-warning td{padding:0 1em 0 0;padding-right:1rem;padding-bottom:0;padding-left:0}.dialog-warning h4{margin-top:.3em;margin-bottom:.3em}.dialog-modal{position:relative;display:flex;padding:1rem;border:1px solid var(--color-toolkit-dialog-border);text-align:left;border-radius:10px;display:block;background:var(--color-toolkit-dialog-background);position:fixed;top:50%;left:50%;margin:0 auto;transform:translate(-50%,-50%);z-index:5000}.dialog-modal .close{float:right;position:relative;top:-3px;color:inherit;font-size:1.5em}.dialog-modal ul,.dialog-modal ol,.dialog-modal p{margin:1px 0 0}.dialog-modal table{width:auto}.dialog-modal tr{vertical-align:text-top}.dialog-modal tr:hover{background:transparent!important}.dialog-modal td{padding:0 1em 0 0;padding-right:1rem;padding-bottom:0;padding-left:0}.dialog-modal h4{margin-top:.3em;margin-bottom:.3em}.dialog-modal h3{margin-top:0}.btn-collapse{cursor:pointer}.scrollx{overflow:auto hidden;display:block;padding:0;margin:0;border:none}.tabs .tabs>label{font-size:90%}ul.tabs{border-bottom:1px solid var(--color-toolkit-tabs-section-border);list-style:none;padding-left:0}ul.tabs li{display:flex}.tabs{display:flex;flex-wrap:wrap;width:100%;min-width:100%}.tabs>*{order:2}.tabs>input[type=radio]{display:none}.tabs>label,.tabs>li>a{order:1;padding:.7em;margin:0 .7em;letter-spacing:.5px;text-transform:uppercase;border:solid var(--color-toolkit-tabs-label-border);border-width:0 0 2px 0;color:unset;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;cursor:pointer}.tabs>label.active,.tabs>li>a.active{border-bottom:2px solid var(--color-categories-item-border-selected);background:var(--color-categories-item-selected);color:var(--color-categories-item-selected-font)}.tabs>label:hover,.tabs>li>a:hover{border-bottom:2px solid var(--color-categories-item-border-selected)}.tabs>section{min-width:100%;padding:.7rem 0;box-sizing:border-box;border-top:1px solid var(--color-toolkit-tabs-section-border);display:none}.tabs>label:last-of-type{border-bottom:2px solid var(--color-categories-item-border-selected);background:var(--color-categories-item-selected);color:var(--color-categories-item-selected-font);letter-spacing:-.1px}.tabs>section:last-of-type{display:block}html body .tabs>input:checked~section{display:none}html body .tabs>input:checked~label{position:inherited;background:inherit;border-bottom:2px solid transparent;font-weight:400;color:inherit}html body .tabs>input:checked~label:hover{border-bottom:2px solid var(--color-categories-item-border-selected)}html body .tabs>input:checked+label{border-bottom:2px solid var(--color-categories-item-border-selected);background:var(--color-categories-item-selected);color:var(--color-categories-item-selected-font)}html body .tabs>input:checked+label+section{display:block}select{height:2.4rem;margin-top:0;margin-right:1rem;margin-bottom:0;margin-left:0;padding:.2rem!important;color:var(--color-search-font);font-size:.9rem;z-index:100}select:hover,select:focus{cursor:pointer}@supports ((background-position-x: 100%) and ((appearance: none) or (-webkit-appearance: none) or (-moz-appearance: none))){select{appearance:none;-webkit-appearance:none;-moz-appearance:none;border-width:0 2rem 0 0;border-color:transparent;background:url(data:image/svg+xml;charset=UTF-8,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%0A%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%0A%3Cg%3E%3Cpolygon%20points%3D%22128%2C192%20256%2C320%20384%2C192%22%2F%3E%3C%2Fg%3E%0A%3C%2Fsvg%3E) no-repeat;background-position-x:calc(100% + 2rem);background-size:2rem;background-origin:content-box;background-color:var(--color-toolkit-select-background);outline:medium none;text-overflow:ellipsis;border-radius:5px}select:hover,select:focus{background-color:var(--color-toolkit-select-background-hover)}select option{background-color:var(--color-base-background)}@media (prefers-color-scheme: dark){html.theme-auto select,html.theme-dark select{background-image:url(data:image/svg+xml;charset=UTF-8,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%0A%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%0A%3Cg%3E%3Cpolygon%20fill%3D%22%23ddd%22%20points%3D%22128%2C192%20256%2C320%20384%2C192%22%2F%3E%3C%2Fg%3E%0A%3C%2Fsvg%3E)}}html.theme-dark select{background-image:url(data:image/svg+xml;charset=UTF-8,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%0A%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22512%22%20height%3D%22512%22%20viewBox%3D%220%200%20512%20512%22%3E%0A%3Cg%3E%3Cpolygon%20fill%3D%22%23ddd%22%20points%3D%22128%2C192%20256%2C320%20384%2C192%22%2F%3E%3C%2Fg%3E%0A%3C%2Fsvg%3E)}}input.checkbox-onoff[type=checkbox]{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;display:inline-block;width:2.5em;height:.7em;box-shadow:none!important;margin:0 16px;border-radius:10px;position:relative}input.checkbox-onoff[type=checkbox]:focus,input.checkbox-onoff[type=checkbox]:hover{outline:none}input.checkbox-onoff[type=checkbox]:focus:after{content:"";position:absolute;width:3.5em;height:1.65em;border:1px solid var(--color-btn-background);border-radius:12px;box-shadow:var(--color-btn-background) 0 0 3px;z-index:1200;top:-.55em;left:-.6em}input.checkbox-onoff[type=checkbox]:before{position:absolute;top:-.5em;display:flex;justify-content:center;align-items:center;font-size:.75em;width:1.875em;height:1.875em;border-radius:50%}input.checkbox-onoff[type=checkbox],input.checkbox-onoff.reversed-checkbox[type=checkbox]:checked{background:var(--color-toolkit-checkbox-onoff-off-background)}input.checkbox-onoff[type=checkbox]:before,input.checkbox-onoff.reversed-checkbox[type=checkbox]:checked:before{left:-.5em;content:"✕";color:var(--color-toolkit-checkbox-onoff-off-mark-color);background:var(--color-toolkit-checkbox-onoff-off-mark-background)}input.checkbox-onoff[type=checkbox]:checked,input.checkbox-onoff.reversed-checkbox[type=checkbox]{background:var(--color-toolkit-checkbox-onoff-on-background)}input.checkbox-onoff[type=checkbox]:checked:before,input.checkbox-onoff.reversed-checkbox[type=checkbox]:before{left:calc(100% - 1.5em);content:"✓";color:var(--color-toolkit-checkbox-onoff-on-mark-color);background:var(--color-toolkit-checkbox-onoff-on-mark-background)}@supports (transform: rotate(-45deg)){input[type=checkbox]:not(.checkbox-onoff){-webkit-appearance:none;-moz-appearance:none;appearance:none;width:20px;height:20px;cursor:pointer;position:relative;top:0;left:0;border:2px solid var(--color-toolkit-checkbox-input-border);border-radius:.3em}input[type=checkbox]:not(.checkbox-onoff):after{content:"";width:9px;height:5px;position:absolute;top:3px;left:2px;border:3px solid var(--color-toolkit-checkbox-label-border);border-top:none;border-right:none;background:transparent;opacity:0;transform:rotate(-45deg)}input[type=checkbox]:not(.checkbox-onoff):checked:after{border-color:var(--color-toolkit-checkbox-input-border);opacity:1}input[type=checkbox][disabled]:not(.checkbox-onoff){border:inherit;background-color:transparent!important;cursor:inherit}input.checkbox[type=checkbox]:not(:checked,[disabled],.checkbox-onoff):hover:after{opacity:.5}}@media screen and (max-width: 50em){.tabs>label{width:100%}}.loader,.loader:after{border-radius:50%;width:2em;height:2em}.loader{margin:1em auto;font-size:10px;position:relative;text-indent:-9999em;border-top:.5em solid var(--color-toolkit-loader-border);border-right:.5em solid var(--color-toolkit-loader-border);border-bottom:.5em solid var(--color-toolkit-loader-border);border-left:.5em solid var(--color-toolkit-loader-borderleft);-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0);-webkit-animation:load8 1.2s infinite linear;animation:load8 1.2s infinite linear}@-webkit-keyframes load8{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes load8{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.engine-tooltip{display:none;position:absolute;padding:.5rem 1rem;margin:0 0 0 2rem;border:1px solid var(--color-toolkit-engine-tooltip-border);background:var(--color-toolkit-engine-tooltip-background);font-size:14px;font-weight:400;z-index:5000;text-align:left;border-radius:10px}th:hover .engine-tooltip,td:hover .engine-tooltip,.engine-tooltip:hover{display:inline-block}.stacked-bar-chart{margin:0;padding:0 .125rem 0 4rem;width:100%;width:-moz-available;width:-webkit-fill-available;width:fill;flex-flow:row nowrap;align-items:center;display:inline-flex}.stacked-bar-chart-value{width:3rem;display:inline-block;position:absolute;padding:0 .5rem;text-align:right}.stacked-bar-chart-base{display:flex;flex-shrink:0;flex-grow:0;flex-basis:unset}.stacked-bar-chart-median{display:flex;flex-shrink:0;flex-grow:0;flex-basis:unset;background:var(--color-base-font);border:1px solid rgba(var(--color-base-font-rgb),.9);padding:.3rem 0}.stacked-bar-chart-rate80{display:flex;flex-shrink:0;flex-grow:0;flex-basis:unset;background:transparent;border:1px solid rgba(var(--color-base-font-rgb),.3);padding:.3rem 0}.stacked-bar-chart-rate95{display:flex;flex-shrink:0;flex-grow:0;flex-basis:unset;background:transparent;border-bottom:1px dotted rgba(var(--color-base-font-rgb),.5);padding:0}.stacked-bar-chart-rate100{display:flex;flex-shrink:0;flex-grow:0;flex-basis:unset;background:transparent;border-left:1px solid rgba(var(--color-base-font-rgb),.9);padding:.4rem 0;width:1px}/*! Autocomplete.js v2.6.3 | license MIT | (c) 2017, Baptiste Donaux | http://autocomplete-js.com */.autocomplete{position:absolute;width:44rem;max-width:calc(100% - 1rem);max-height:0;overflow-y:hidden;text-align:left;border-radius:10px}.autocomplete:active,.autocomplete:focus,.autocomplete:hover{background-color:var(--color-autocomplete-background)}.autocomplete:empty{display:none}.autocomplete>ul{list-style-type:none;margin:0;padding:0}.autocomplete>ul>li{cursor:pointer;padding:.5rem 1rem}.autocomplete>ul>li.active,.autocomplete>ul>li:active,.autocomplete>ul>li:focus,.autocomplete>ul>li:hover{background-color:var(--color-autocomplete-background-hover)}.autocomplete>ul>li.active a:active,.autocomplete>ul>li:active a:active,.autocomplete>ul>li:focus a:active,.autocomplete>ul>li:hover a:active,.autocomplete>ul>li.active a:focus,.autocomplete>ul>li:active a:focus,.autocomplete>ul>li:focus a:focus,.autocomplete>ul>li:hover a:focus,.autocomplete>ul>li.active a:hover,.autocomplete>ul>li:active a:hover,.autocomplete>ul>li:focus a:hover,.autocomplete>ul>li:hover a:hover{text-decoration:none}.autocomplete>ul>li.locked{cursor:inherit}.autocomplete.open{display:block;background-color:var(--color-autocomplete-background);color:var(--color-autocomplete-font);max-height:32rem;overflow-y:auto;z-index:5000;margin-top:3.5rem;border-radius:.8rem}.autocomplete.open:empty{display:none}@media screen and (max-width: 50em){.autocomplete>ul>li{padding:1rem}}#main_results #results.image-detail-open.only_template_images{width:min(98%,59.25rem)!important}#main_results #results.only_template_images.image-detail-open #backToTop{left:56.75rem!important;right:inherit}article.result-images .detail{display:none}#results.image-detail-open article.result-images[data-vim-selected] .detail{display:flex;flex-direction:column;position:fixed;left:60rem;right:0;top:13rem;transition:top 64ms ease-in 0s;bottom:0;background:var(--color-result-detail-background);border:1px solid var(--color-result-detail-background);z-index:1000;padding:4rem 3rem 3rem;overflow-y:scroll}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-images-source{display:block;flex:1;text-align:left;width:100%;border:none;text-decoration:none}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-images-source img{padding:0;margin:0;border:none;object-fit:contain;width:inherit;height:inherit;max-width:100%;min-height:inherit;max-height:calc(100vh - 42rem);background:inherit}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels{color:var(--color-result-detail-font);height:19rem}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels hr{border-top:1px solid var(--color-result-detail-hr);border-bottom:none}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels h4{height:2rem;overflow:hidden;text-overflow:ellipsis;font-size:.9rem;margin-bottom:0}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p{color:var(--color-result-detail-label-font);font-size:.9rem;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;margin:.8rem 0}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p span{display:inline-block;width:12rem}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels h4,#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p,#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a{text-align:left}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p.result-content{height:2rem;line-height:unset;overflow:hidden;text-overflow:ellipsis}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p.result-url{white-space:nowrap;overflow:hidden hidden;text-overflow:ellipsis}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p.result-content:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p.result-url:hover{position:relative;overflow:inherit!important;background:var(--color-result-detail-background);text-overflow:inherit!important}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a,#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a:visited,#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a:active{color:var(--color-result-detail-link)}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a:hover{text-decoration:underline}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close{top:1rem;left:1rem;padding:.4rem}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous{top:1rem;right:6rem;padding:.4rem .5rem .4rem .3rem}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next{top:1rem;right:2rem;padding:.4rem}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous{border-radius:50%;display:block;width:1.5rem;height:1.5rem;position:absolute;filter:opacity(40%);z-index:1200}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close span,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next span,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous span{display:block;width:1.5rem;height:1.5rem;text-align:center}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next span:before,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous span:before{vertical-align:sub}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close:visited,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close:active,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous:visited,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous:active,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next:visited,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next:active{color:var(--color-result-detail-font);background:var(--color-result-detail-background);border:1px solid var(--color-result-detail-font)}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close:focus,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous:focus,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous:hover,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next:focus,#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next:hover{filter:opacity(80%)}#results.image-detail-open article.result-images[data-vim-selected] .detail .loader{position:absolute;top:1rem;right:50%;border-top:.5em solid var(--color-result-detail-loader-border);border-right:.5em solid var(--color-result-detail-loader-border);border-bottom:.5em solid var(--color-result-detail-loader-border);border-left:.5em solid var(--color-result-detail-loader-borderleft)}#results.image-detail-open.scrolling article.result-images[data-vim-selected] .detail{top:0}#results.image-detail-open.scrolling article.result-images[data-vim-selected] .detail a.result-images-source img{max-height:calc(100vh - 25rem)}@media screen and (max-width: 79.75em){#results.image-detail-open article.result-images[data-vim-selected] .detail{top:0;left:0}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-images-source{display:flex;flex-direction:column;justify-content:center}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-images-source img{width:100%;max-height:calc(100vh - 24rem)}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next{right:1rem}}@media screen and (max-width: 50em){#results.image-detail-open article.result-images[data-vim-selected] .detail{top:0;left:0;padding:1rem}#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-images-source img{width:100%;max-height:calc(100vh - 20rem);margin:0}#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p span{width:inherit;margin-right:1rem}}.dialog-modal{animation-name:dialogmodal;animation-duration:.13s}@keyframes dialogmodal{0%{opacity:0}50%{opacity:.5;transform:translate(-50%,-50%) scale(1.05)}}input.checkbox-onoff[type=checkbox]:before{transition:left .25s}iframe[src^="https://w.soundcloud.com"]{height:120px}iframe[src^="https://www.deezer.com"]{height:94px}iframe[src^="https://www.mixcloud.com"]{height:250px}iframe[src^="https://bandcamp.com/EmbeddedPlayer"]{height:350px}iframe[src^="https://bandcamp.com/EmbeddedPlayer/track"]{height:120px}iframe[src^="https://genius.com/songs"]{height:65px}.info-page code{font-family:monospace;border-radius:5px;background-color:var(--color-doc-code-background);color:var(--color-doc-code);padding:.2rem;border:0 none}.stats_endpoint .github-issue-button{display:block;font-size:16px}.stats_endpoint .issue-hide{display:none}.stats_endpoint input[type=checked]{position:absolute}.stats_endpoint label{margin:1rem 1rem 1rem 0}.stats_endpoint .step_content{margin:1rem 1rem 1rem 2rem}.stats_endpoint .step1,.stats_endpoint .step2{visibility:hidden}.stats_endpoint .step1_delay{transition:visibility 0s linear 4s}.stats_endpoint #step1:checked~.step1,.stats_endpoint #step2:checked~.step2{visibility:visible}.engine-stats{border-spacing:0;border-collapse:collapse}.engine-stats tr td,.engine-stats tr th{border-bottom:1px solid var(--color-result-border);padding:.25rem}.engine-stats table.engine-tooltip{border-spacing:0;border-collapse:collapse}.engine-stats table.engine-tooltip td,.engine-stats table.engine-tooltip th{border:none}.engine-stats .engine-name{width:20rem}.engine-stats .engine-score{width:7rem;text-align:right}.engine-stats .engine-reliability{text-align:right}table.engine-error th.engine-error-type,table.engine-error td.engine-error-type,failed-test{width:10rem}.engine-errors{margin-top:3rem}.engine-errors table.engine-error{max-width:1280px;margin:1rem 0 3rem;border:1px solid var(--color-result-border);text-align:left}.engine-errors table.engine-error tr th,.engine-errors table.engine-error tr td{padding:.5rem}.engine-errors table.engine-error span.log_parameters{border-right:1px solid solid var(--color-result-border);padding:0 1rem 0 0;margin:0 0 0 .5rem}.bar-chart-value{width:3em;display:inline-block;text-align:right;padding-right:.5rem}.bar-chart-graph{width:calc(100% - 5rem);display:inline-block}.bar-chart-bar{border:3px solid var(--color-bar-chart-primary);margin:1px 0}.bar-chart-serie1{border:3px solid var(--color-bar-chart-primary);margin:1px 0;float:left}.bar-chart-serie2{border:3px solid var(--color-bar-chart-secondary);margin:1px 0;float:left}.bar0{width:0;border:0}.bar1{width:1%}.bar2{width:2%}.bar3{width:3%}.bar4{width:4%}.bar5{width:5%}.bar6{width:6%}.bar7{width:7%}.bar8{width:8%}.bar9{width:9%}.bar10{width:10%}.bar11{width:11%}.bar12{width:12%}.bar13{width:13%}.bar14{width:14%}.bar15{width:15%}.bar16{width:16%}.bar17{width:17%}.bar18{width:18%}.bar19{width:19%}.bar20{width:20%}.bar21{width:21%}.bar22{width:22%}.bar23{width:23%}.bar24{width:24%}.bar25{width:25%}.bar26{width:26%}.bar27{width:27%}.bar28{width:28%}.bar29{width:29%}.bar30{width:30%}.bar31{width:31%}.bar32{width:32%}.bar33{width:33%}.bar34{width:34%}.bar35{width:35%}.bar36{width:36%}.bar37{width:37%}.bar38{width:38%}.bar39{width:39%}.bar40{width:40%}.bar41{width:41%}.bar42{width:42%}.bar43{width:43%}.bar44{width:44%}.bar45{width:45%}.bar46{width:46%}.bar47{width:47%}.bar48{width:48%}.bar49{width:49%}.bar50{width:50%}.bar51{width:51%}.bar52{width:52%}.bar53{width:53%}.bar54{width:54%}.bar55{width:55%}.bar56{width:56%}.bar57{width:57%}.bar58{width:58%}.bar59{width:59%}.bar60{width:60%}.bar61{width:61%}.bar62{width:62%}.bar63{width:63%}.bar64{width:64%}.bar65{width:65%}.bar66{width:66%}.bar67{width:67%}.bar68{width:68%}.bar69{width:69%}.bar70{width:70%}.bar71{width:71%}.bar72{width:72%}.bar73{width:73%}.bar74{width:74%}.bar75{width:75%}.bar76{width:76%}.bar77{width:77%}.bar78{width:78%}.bar79{width:79%}.bar80{width:80%}.bar81{width:81%}.bar82{width:82%}.bar83{width:83%}.bar84{width:84%}.bar85{width:85%}.bar86{width:86%}.bar87{width:87%}.bar88{width:88%}.bar89{width:89%}.bar90{width:90%}.bar91{width:91%}.bar92{width:92%}.bar93{width:93%}.bar94{width:94%}.bar95{width:95%}.bar96{width:96%}.bar97{width:97%}.bar98{width:98%}.bar99{width:99%}.bar100{width:100%}.osm-map-box{height:300px;width:100%;margin:10px 0}#main_index{margin-top:26vh}.index{text-align:center}.index .title{background:url(../img/searxng.png) no-repeat;min-height:4rem;margin:4rem auto;background-position:center;background-size:contain}.index h1{font-size:4em;visibility:hidden}.index #search,.index #search_header{margin:0 auto;background:inherit;border:inherit;padding:0;display:block}.index .search_filters{display:block;margin:1em 0}.index .category label{padding:6px 10px;border-bottom:initial!important}@media screen and (max-width: 79.75em){div.title h1{font-size:1em}#main_index{margin-top:6em}}table{border-collapse:collapse}table th,table td{text-align:center;padding:1rem .5rem;text-align:left}table tr.pref-group th{font-weight:400;text-align:left;background:var(--color-settings-table-group-background)}#main_preferences form{width:100%}#main_preferences fieldset{margin:8px;border:none}#main_preferences legend{margin:0;padding:5px 0 0;display:block;float:left;width:300px}#main_preferences input[type=text]{width:13.25rem;color:var(--color-toolkit-input-text-font);border:none;background:none repeat scroll 0 0 var(--color-toolkit-select-background);padding:.2rem .4rem;height:2rem;border-radius:5px}#main_preferences input[type=text]:hover,#main_preferences input[type=text]:focus{background-color:var(--color-toolkit-select-background-hover)}#main_preferences div.pref-group{width:100%;font-weight:400;padding:1rem .5rem;text-align:left;background:var(--color-settings-table-group-background)}#main_preferences .value{margin:0;padding:0;float:left;width:15em}#main_preferences .value select,#main_preferences .value input[type=text]{font-size:inherit!important;margin-top:0;margin-right:1rem;margin-bottom:0;margin-left:0}#main_preferences .value select{width:14rem}#main_preferences .value select:focus,#main_preferences .value input:focus{outline:none;box-shadow:0 0 1px 1px var(--color-btn-background)}#main_preferences .description{margin:0;padding:5px 0 0;float:right;width:50%;color:var(--color-settings-engine-description-font);font-size:90%}#main_preferences .bang{text-align:left;border-radius:5px;background-color:var(--color-doc-code-background);color:var(--color-doc-code);padding:.2rem;border:0 none}#main_preferences .category{margin-right:.5rem}#main_preferences .category label{border:2px solid transparent;padding:.2rem .4rem;border-radius:5px}#main_preferences .category input[type=checkbox]:checked+label{border:2px solid var(--color-categories-item-border-selected)}#main_preferences table.table_engines th.name label{cursor:pointer}#main_preferences table.table_engines th.name .engine-tooltip{margin-top:1.8rem;left:calc((100% - 85em)/2 + 10em);max-width:40rem}#main_preferences table.table_engines th.name .engine-tooltip .engine-description{margin-top:.5rem}#main_preferences table.table_engines th.name .engine-tooltip .bang{margin:.3rem}#main_preferences table.table_engines .checkbox-col,#main_preferences table.table_engines .name,#main_preferences table.table_engines .shortcut{text-align:left}#main_preferences table.cookies{width:100%;direction:ltr}#main_preferences table.cookies th,#main_preferences table.cookies td{text-align:left;font-family:monospace;font-size:1rem;padding:.5em;vertical-align:top}#main_preferences table.cookies td:first-child{word-break:keep-all;width:14rem;padding-right:1rem}#main_preferences table.cookies td:last-child{word-break:break-all}#main_preferences table.cookies>tbody>tr:nth-child(2n)>th,#main_preferences table.cookies>tbody>tr:nth-child(2n)>td{background-color:var(--color-settings-tr-hover)}#main_preferences .preferences_back{background:none repeat scroll 0 0 var(--color-btn-background);color:var(--color-btn-font);border:0 none;border-radius:10px;cursor:pointer;display:inline-block;margin:2px 4px;padding:.7em}#main_preferences .preferences_back a{color:var(--color-settings-return-font)}#main_preferences .preferences_back a:first-letter{text-transform:uppercase}#main_preferences #toggle-all-engines-container{width:max-content;margin-left:auto}#main_preferences div.selectable_url pre{width:100%}#main_preferences #copy-hash-container{display:flex;align-items:center;gap:.5rem}#main_preferences #copy-hash-container div.selectable_url pre{width:auto;flex-grow:1}#main_preferences #pref-hash-input{width:100%}@media screen and (max-width: 79.75em){.preferences_back{clear:both}.engine-tooltip{left:10em!important}}#search{padding:0;margin:0}#search_header{padding-top:1.5em;padding-right:2em;padding-left:7rem;margin:0;background:var(--color-header-background);border-bottom:1px solid var(--color-header-border);display:grid;gap:1rem 1.2rem;grid-template-columns:3rem 1fr;grid-template-areas:"logo search" "spacer categories"}.category_checkbox,.category_button{display:inline-block;position:relative;margin-right:1rem;padding:0}.category_checkbox input{display:none}.category_checkbox label{cursor:pointer;padding:.2rem 0;display:inline-flex;text-transform:capitalize;font-size:.9em;border-bottom:2px solid transparent;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.category_checkbox label svg{padding-right:.2rem}.category_checkbox label div.category_name{margin:auto 0}.category_checkbox input[type=checkbox]:checked+label{color:var(--color-categories-item-selected-font);border-bottom:2px solid var(--color-categories-item-border-selected)}button.category_button{background-color:inherit;color:var(--color-base-font);cursor:pointer;padding:.2rem 0;display:inline-flex;align-items:center;text-transform:capitalize;font-size:.9em;border:none;border-bottom:2px solid transparent}button.category_button svg{padding-right:.2rem}button.category_button.selected,button.category_button:active{color:var(--color-categories-item-selected-font);border-bottom:2px solid var(--color-categories-item-border-selected)}.no-js #categories_container:has(button.category_button:focus-within) button.category_button.selected{color:var(--color-base-font);border-bottom:none}.no-js #categories_container:has(button.category_button:focus-within) button.category_button:focus-within{color:var(--color-categories-item-selected-font);border-bottom:2px solid var(--color-categories-item-border-selected)}#search_logo{padding:.5rem 10px 0;grid-area:logo;display:flex;align-items:center;justify-content:center}#search_logo svg{flex:1;width:30px;height:30px;margin:.5rem 0 auto}.search_categories{grid-area:categories}.search_categories .help{display:none}.search_categories:hover .help{display:block;position:absolute;background:var(--color-base-background);padding:1rem .6rem .6rem 0;z-index:1000;width:100%;left:-.1rem}#search_view{padding:.5rem .5rem 0;grid-area:search}body.results_endpoint #search_view{padding:.5rem 2.8rem 0 0}.search_box{border-radius:.8rem;width:100%;max-width:44rem;display:inline-flex;flex-direction:row;white-space:nowrap;box-shadow:var(--color-search-shadow)}#clear_search{display:block;border-collapse:separate;box-sizing:border-box;width:1.8rem;margin:0;padding:.8rem .2rem;background:none repeat scroll 0 0 var(--color-search-background);border:none;outline:none;color:var(--color-search-font);font-size:1.1rem;z-index:1000}#clear_search:hover{color:var(--color-search-background-hover)}#clear_search.empty *,html.no-js #clear_search.hide_if_nojs{display:none}#q,#send_search{display:block;margin:0;padding:.8rem;background:none repeat scroll 0 0 var(--color-search-background);border:none;outline:none;color:var(--color-search-font);font-size:1.1rem;z-index:100}#q{width:100%;padding-left:1rem;padding-right:0!important;border-radius:.8rem 0 0 .8rem}#q::-ms-clear,#q::-webkit-search-cancel-button{display:none}#send_search{border-radius:0 .8rem .8rem 0}#send_search:hover{cursor:pointer;background-color:var(--color-search-background-hover);color:var(--color-search-background)}.no-js #clear_search,.no-js #send_search{width:auto!important;border-left:1px solid var(--color-search-border)}.search_filters{margin-top:.6rem;margin-right:0;margin-bottom:0;margin-left:10.6rem;display:flex;overflow-x:auto;overscroll-behavior-inline:contain}.search_filters select{background-color:inherit}.search_filters select:hover,.search_filters select:focus{color:var(--color-base-font)}@media screen and (max-width: 79.75em){#search_header{padding:1.5em .5rem 0;column-gap:.5rem}.search_filters{margin-top:.6rem;margin-right:0;margin-bottom:0;margin-left:3.5rem}#categories{font-size:90%;clear:both}}@media screen and (max-width: 79.75em) and (hover: none){#main_index #categories_container,#main_results #categories_container{width:max-content}#main_index #categories_container .category_checkbox,#main_results #categories_container .category_checkbox{display:inline-block;width:auto}#main_index #categories,#main_results #categories{width:100%;text-align:left;overflow:scroll hidden;-webkit-overflow-scrolling:touch}}@media screen and (max-width: 50em){#search_header{width:100%;margin:0;padding:.1rem 0 0;gap:0 0;grid-template-areas:"logo search" "categories categories"}.search_logo{padding:0}.search_box{width:100%}#q{width:100%;flex:1}.search_filters{margin:0 10px;padding:.5rem 0}.category{display:inline-block;width:auto;margin:0}.category svg{display:none}.category_checkbox label,.category_button{padding:1rem!important;margin:0!important}#search_view:focus-within{display:block;background-color:var(--color-search-background);position:absolute;top:0;height:100%;width:100%;z-index:2000}#search_view:focus-within .search_box{border-bottom:1px solid var(--color-search-border);width:100%;border-radius:0;box-shadow:none}#search_view:focus-within .search_box #send_search{margin-right:0!important}#search_view:focus-within .search_box *{border:none;border-radius:0;box-shadow:none}#main_results #q:placeholder-shown~#send_search{margin-right:2.6rem;transition:margin .1s}}@media screen and (max-width: 20rem){#search_header{grid-template-areas:"search search" "categories categories"}#search_logo{display:none}}#categories{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}#categories::-webkit-scrollbar{width:0;height:0}#categories_container{position:relative}.favicon img{height:1.5rem;width:1.5rem;border-radius:10%;background-color:var(--color-favicon-background-color);border:1px solid var(--color-favicon-border-color);display:flex}@media screen and (min-width: 50em){.center-alignment-yes #main_results{--center-page-width: 48rem}}@media screen and (width >= 62rem){.center-alignment-yes #main_results{--center-page-width: 60rem}}@media screen and (min-width: 79.75em){.center-alignment-yes #main_results{--center-page-width: 73rem}}@media screen and (min-width: 50em) and (max-width: 79.75em){.center-alignment-yes #main_results #results{grid-template-columns:60% calc(40% - 5rem);margin-left:0;margin-right:0}.center-alignment-yes #main_results #urls{margin-left:3rem}.center-alignment-yes #main_results #sidebar{margin-right:1rem}.center-alignment-yes #main_results #backToTop{left:calc(60% + 1rem)}}@media screen and (min-width: 79.75em){.center-alignment-yes #main_results{display:flex;flex-direction:column;align-items:center}.center-alignment-yes #main_results #search{width:100%;display:flex;flex-direction:column;align-items:center}.center-alignment-yes #main_results #search_header{grid-template-columns:calc(50% - 4.5rem - var(--center-page-width) / 2) 3rem var(--center-page-width);grid-template-areas:"na logo search" "na spacer categories";column-gap:1.2rem;width:100%;padding-left:0;padding-right:0}.center-alignment-yes #main_results .search_filters{margin-left:.5rem;width:var(--center-page-width)}.center-alignment-yes #main_results #results{margin-right:2rem;margin-left:10rem}.center-alignment-yes #main_results #results.only_template_images,.center-alignment-yes #main_results #results.image-detail-open{align-self:flex-start}.center-alignment-yes #main_results #results:not(.only_template_images,.image-detail-open){margin-left:1.5rem;grid-template-columns:calc(var(--center-page-width) - 5rem - 25rem) 25rem}.center-alignment-yes #main_results #results:not(.only_template_images,.image-detail-open) #backToTop{left:calc(50% - 25rem - 5rem + 1rem + var(--center-page-width) / 2)}.center-alignment-yes #main_results #results .result .content{max-width:inherit}.center-alignment-yes #main_results #urls{margin-left:0}.center-alignment-yes #main_results #sidebar{margin-right:0}}.sxng-icon-set{display:inline-block;vertical-align:bottom;line-height:1;text-decoration:inherit;transform:scale(1)}.sxng-icon-set-small{width:1rem;height:1rem;display:inline-block;vertical-align:bottom;line-height:1;text-decoration:inherit;transform:scale(1)}.sxng-icon-set-big{width:1.5rem;height:1.5rem;display:inline-block;vertical-align:bottom;line-height:1;text-decoration:inherit;transform:scale(1)}html{font-family:sans-serif;font-size:.9em;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%;color:var(--color-base-font);background-color:var(--color-base-background);padding:0;margin:0;scroll-behavior:smooth}body,main{padding:0;margin:0}body{display:flex;flex-direction:column;height:100vh;margin:0}@supports (height: 100dvh){body{height:100dvh}}main{width:100%;margin-bottom:2rem;flex:1}.page_with_header{margin:2em auto;width:85em}footer{clear:both;min-height:4rem;padding:1rem 0;width:100%;text-align:center;background-color:var(--color-footer-background);border-top:1px solid var(--color-footer-border);overflow:hidden}footer p{font-size:.9em}.page_with_header .logo{height:40px}input[type=submit],#results button[type=submit],.button{padding:.7rem;display:inline-block;background:var(--color-btn-background);color:var(--color-btn-font);border-radius:10px;border:0;cursor:pointer}a{text-decoration:none;color:var(--color-url-font)}a:visited,a:visited .highlight{color:var(--color-url-visited-font)}article[data-vim-selected]{background:var(--color-result-vim-selected);border-left:.2rem solid var(--color-result-vim-arrow);border-radius:0 10px 10px 0}article.result-images[data-vim-selected]{background:var(--color-result-vim-arrow);border:none;border-radius:10px}article.result-images[data-vim-selected] .image_thumbnail{filter:opacity(60%)}article.result-images[data-vim-selected] span.title,article.result-images[data-vim-selected] span.source{color:var(--color-result-image-span-font-selected)}article[data-vim-selected].category-videos,article[data-vim-selected].category-news,article[data-vim-selected].category-map,article[data-vim-selected].category-music,article[data-vim-selected].category-files,article[data-vim-selected].category-social{border:1px solid var(--color-result-vim-arrow);border-radius:10px}.result{margin:.125rem 0;padding:1rem;box-sizing:border-box;width:100%;border-left:.2rem solid transparent}.result h3{font-size:1.2rem;word-wrap:break-word;margin:.4rem 0;padding:0}.result h3 a{color:var(--color-result-link-font);font-weight:400;font-size:1.1em}.result h3 a:visited{color:var(--color-result-link-visited-font)}.result h3 a:focus,.result h3 a:hover{text-decoration:underline;border:none;outline:none}.result .cache_link,.result .proxyfied_link{font-size:smaller!important;margin-left:.5rem}.result .content,.result .stat{font-size:.9em;margin:0;padding:0;max-width:54em;word-wrap:break-word;line-height:1.24}.result .content .highlight,.result .stat .highlight{color:var(--color-result-description-highlight-font);background:inherit;font-weight:700}.result .altlink a{font-size:.9em;margin:0 10px 0 0;padding:5px 10px;border-radius:5px;background:var(--color-show-btn-background);color:var(--color-show-btn-font);cursor:pointer}.result .altlink a:hover{background:var(--color-btn-background);color:var(--color-btn-font)}.result .codelines .highlight{color:inherit;background:inherit;font-weight:400}.result .url_header{display:flex;gap:.5rem}.result .url_wrapper{display:flex;align-items:center;font-size:1rem;color:var(--color-result-url-font);flex-flow:row nowrap;overflow:hidden;margin:0;padding:0}.result .url_wrapper .url_o1{white-space:nowrap;flex-shrink:1;padding-bottom:1px}.result .url_wrapper .url_o1 .url_i1{unicode-bidi:plaintext}.result .url_wrapper .url_o1:after{content:" ";width:1ch;display:inline-block}.result .url_wrapper .url_o2{overflow:hidden;white-space:nowrap;flex:0 1 content;text-align:right;padding-bottom:1px}.result .url_wrapper .url_o2 .url_i2{float:right}.result .published_date,.result .result_length,.result .result_views,.result .result_author,.result .result_shipping,.result .result_source_country{font-size:.8em;color:var(--color-result-publishdate-font)}.result .result_price{font-size:1.2em;color:var(--color-result-description-highlight-font)}.result img.thumbnail{float:left;padding-top:.6rem;padding-right:1rem;width:7rem;height:unset}.result .break{clear:both}.result-paper .attributes,.result-packages .attributes{display:table;border-spacing:.125rem}.result-paper .attributes div,.result-packages .attributes div{display:table-row}.result-paper .attributes div span,.result-packages .attributes div span{font-size:.9rem;margin-top:.25rem;display:table-cell}.result-paper .attributes div span time,.result-packages .attributes div span time{font-size:.9rem}.result-paper .attributes div span:first-child,.result-packages .attributes div span:first-child{color:var(--color-base-font);min-width:10rem}.result-paper .attributes div span:nth-child(2),.result-packages .attributes div span:nth-child(2){color:var(--color-result-publishdate-font)}.result-paper .content,.result-packages .content{margin-top:.25rem}.result-paper .comments,.result-packages .comments{font-size:.9rem;margin:.25rem 0 0;padding:0;word-wrap:break-word;line-height:1.24;font-style:italic}.result-packages .attributes{margin-top:.3rem}.template_group_images{display:flex;flex-wrap:wrap}.template_group_images:after{flex-grow:10;content:""}.category-videos,.category-news,.category-map,.category-music,.category-files,.category-social{border:1px solid var(--color-result-border);margin:0 .5rem 1rem!important;border-radius:10px}.category-social .image{width:auto!important;min-width:48px;min-height:48px;padding:0 5px 25px 0!important}.audio-control audio{width:100%;padding:10px 0 0}.embedded-content iframe{width:100%;padding:10px 0 0}.result-videos img.thumbnail{float:left;padding-top:.6rem;padding-right:1rem;width:20rem;height:unset}.result-videos .content{overflow:hidden}.result-videos .embedded-video iframe{width:100%;aspect-ratio:16 / 9;padding:10px 0 0}@supports not (aspect-ratio: 1 / 1){.result-videos .embedded-video iframe{height:25.3125rem}}.engines{float:right;display:flex;flex-wrap:wrap;justify-content:flex-end;color:var(--color-result-engines-font)}.engines span{font-size:smaller;margin-top:0;margin-bottom:0;margin-right:.5rem;margin-left:0}.small_font{font-size:.8em}.highlight{color:var(--color-result-link-font-highlight);background:inherit}.empty_element{font-style:italic}.result-images{flex-grow:1;padding:.5rem .5rem 3rem;margin:.25rem;border:none!important;height:12rem;width:unset}.result-images>a{position:relative;outline:none}.result-images img{margin:0;padding:0;border:none;height:100%;width:auto;object-fit:cover;vertical-align:bottom;background:var(--color-result-image-background)}.result-images .image_resolution{position:absolute;right:0;bottom:0;background:var(--color-image-resolution-background);padding:.3rem .5rem;font-size:.9rem;color:var(--color-image-resolution-font);border-top-left-radius:.3rem}.result-images span.title,.result-images span.source{display:block;position:absolute;width:100%;font-size:.9rem;color:var(--color-result-image-span-font);padding:.5rem 0 0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.result-images span.source{padding:1.8rem 0 0;font-size:.7rem}.result-map img.image{float:right!important;height:100px!important;width:auto!important}.result-map table{font-size:.9em;width:auto;border-collapse:separate;border-spacing:0 .35rem}.result-map table th{font-weight:inherit;width:17rem;vertical-align:top;text-align:left}.result-map table td{vertical-align:top;text-align:left}.hidden{display:none!important}#results{margin-top:1rem;margin-right:2rem;margin-bottom:0;margin-left:10rem;display:grid;grid-template:"corrections sidebar" min-content "answers sidebar" min-content "urls sidebar" 1fr "pagination sidebar" min-content / 45rem 25rem;gap:0 5rem}#results #sidebar *:first-child{margin-top:0}#urls{padding:0;grid-area:urls}#apis .wrapper{display:flex}#suggestions .wrapper{display:flex;flex-flow:column;justify-content:flex-end}#suggestions .wrapper form{display:inline-block;flex:1 1 50%}#suggestions input,#infoboxes input{padding:0;margin:3px;font-size:.9em;display:inline-block;background:transparent;color:var(--color-result-search-url-font);cursor:pointer;width:100%;text-overflow:ellipsis;overflow:hidden;text-align:left}#suggestions input[type=submit],#infoboxes input[type=submit],#suggestions .infobox .url a,#infoboxes .infobox .url a{color:var(--color-result-link-font);text-decoration:none;font-size:.9rem}#suggestions input[type=submit]:hover,#infoboxes input[type=submit]:hover,#suggestions .infobox .url a:hover,#infoboxes .infobox .url a:hover{text-decoration:underline}#corrections{grid-area:corrections;display:flex;flex-flow:row wrap;margin:0 0 1em}#corrections h4,#corrections input[type=submit]{display:inline-block;padding:.5rem;margin:.5rem}#corrections input[type=submit]{font-size:.8rem;border-radius:5px}#infoboxes .title,#suggestions .title,#search_url .title,#engines_msg .title,#apis .title{margin:2em 0 .5em;color:var(--color-base-font)}summary.title{cursor:pointer;padding-top:1em}.sidebar-collapsible{border-top:1px solid var(--color-sidebar-border);padding-bottom:.5em}#sidebar-end-collapsible{border-bottom:1px solid var(--color-sidebar-border);width:100%}#answers{grid-area:answers;background:var(--color-answer-background);padding:1rem;margin:1rem 0;margin-top:0;color:var(--color-answer-font);border-radius:10px}#answers h4{display:none}#answers span{overflow-wrap:anywhere}#answers .answer{display:flex;flex-direction:column}#answers .answer-url{margin:5px 10px 10px auto}#infoboxes form{min-width:210px}#sidebar{grid-area:sidebar;word-wrap:break-word;color:var(--color-sidebar-font)}#sidebar .infobox{margin:10px 0;border:1px solid var(--color-sidebar-border);padding:1rem;font-size:.9em;border-radius:10px}#sidebar .infobox h2{margin:0 0 .5em}#sidebar .infobox img{max-width:100%;max-height:12em;display:block;margin:0 auto;padding:0}#sidebar .infobox dt{font-weight:700}#sidebar .infobox .attributes dl{margin:.5em 0}#sidebar .infobox .attributes dt{display:inline;margin:.5em .25em .5em 0;padding:0}#sidebar .infobox .attributes dd{display:inline;margin:.5em 0;padding:0}#sidebar .infobox input{font-size:1em}#sidebar .infobox br,#sidebar .infobox .attributes,#sidebar .infobox .urls{clear:both}#apis input{font-size:.9em;margin:0 10px 0 0;padding:5px 10px;border-radius:5px;background:var(--color-show-btn-background);color:var(--color-show-btn-font);cursor:pointer}#apis input:hover{background:var(--color-btn-background);color:var(--color-btn-font)}#engines_msg .engine-name{width:10rem}#engines_msg .response-error{color:var(--color-error)}#engines_msg .bar-chart-value{width:auto}#search_url div.selectable_url pre{float:left;width:200em}#search_url button#copy_url{float:right;padding:.4rem;margin-left:.5rem;border-radius:.3rem;display:none}#links_on_top{position:absolute;right:1rem;text-align:right;top:2.7rem;padding:0;border:0;display:flex;align-items:center;font-size:1em;color:var(--color-search-font)}#links_on_top a{display:flex;align-items:center;margin-left:1em}#links_on_top a svg{font-size:1.2em;margin-right:.125em}#links_on_top a,#links_on_top a:link *,#links_on_top a:hover *,#links_on_top a:visited *,#links_on_top a:active *{color:var(--color-search-font)}#pagination{grid-area:pagination}#pagination br{clear:both}.numbered_pagination{display:flex;flex-direction:row;justify-content:center;align-items:center;overflow:hidden}.page_number{background:transparent!important;color:var(--color-result-link-font)!important;text-decoration:underline}.page_number_current{background:transparent;color:var(--color-result-link-visited-font);border:none}#backToTop{border:1px solid var(--color-backtotop-border);margin:0;padding:0;font-size:1em;background:var(--color-backtotop-background);position:fixed;bottom:8rem;left:56.3rem;transition:opacity .5s;opacity:0;pointer-events:none;border-radius:10px}#backToTop a{display:block;margin:0;padding:.7em}#backToTop a,#backToTop a:visited,#backToTop a:hover,#backToTop a:active{color:var(--color-backtotop-font)}#results.scrolling #backToTop{opacity:1;pointer-events:all}@media screen and (width <= calc(79.75em - .5px)){#links_on_top span{display:none}}@media screen and (width <= 52rem){body.results_endpoint #links_on_top .link_on_top_about,body.results_endpoint #links_on_top .link_on_top_donate{display:none}}@media screen and (min-width: 50em) and (max-width: 79.75em){.center-alignment-no #links_on_top span{display:none}.center-alignment-no .page_with_header{margin:2rem .5rem;width:auto}.center-alignment-no #infoboxes{position:inherit;max-width:inherit}.center-alignment-no #infoboxes .infobox{clear:both}.center-alignment-no #infoboxes .infobox img{float:left;max-width:10em;margin:.5em .5em .5em 0}.center-alignment-no #sidebar{margin:0 .5rem .125rem;padding:0;float:none;border:none;width:auto}.center-alignment-no #sidebar input{border:0}.center-alignment-no .result .thumbnail{max-width:98%}.center-alignment-no .result .url span.url{display:block;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;width:100%}.center-alignment-no .result .engines{float:right;display:flex;flex-wrap:wrap;justify-content:flex-end;padding:3px 0 0}.center-alignment-no .result-images{border-bottom:none!important}.center-alignment-no .image_result,.center-alignment-no .image_result img{max-width:98%}.center-alignment-no #backToTop{display:none}.center-alignment-no #pagination{margin:2rem 0 0!important}.center-alignment-no #main_results div#results{margin:0 auto;justify-content:center;display:grid;grid-template:"corrections" min-content "answers" min-content "sidebar" min-content "urls" 1fr "pagination" min-content / 45rem;gap:0}}#main_results div#results.only_template_images{margin:1rem .5rem 0;display:grid;grid-template:"corrections" min-content "answers" min-content "sidebar" min-content "urls" 1fr "pagination" min-content / 100%;gap:0}#main_results div#results.only_template_images #sidebar{display:none}#main_results div#results.only_template_images #urls{margin:0;display:flex;flex-wrap:wrap}#main_results div#results.only_template_images #urls:after{flex-grow:10;content:""}#main_results div#results.only_template_images #backToTop{left:auto;right:1rem}#main_results div#results.only_template_images #pagination{margin-right:4rem}@media screen and (max-width: 50em){#links_on_top span{display:none}.page_with_header{margin:2rem .5rem;width:auto}#infoboxes{position:inherit;max-width:inherit}#infoboxes .infobox{clear:both}#infoboxes .infobox img{float:left;max-width:10em;margin:.5em .5em .5em 0}#sidebar{margin:0 .5rem .125rem;padding:0;float:none;border:none;width:auto}#sidebar input{border:0}.result .thumbnail{max-width:98%}.result .url span.url{display:block;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;width:100%}.result .engines{float:right;display:flex;flex-wrap:wrap;justify-content:flex-end;padding:3px 0 0}.result-images{border-bottom:none!important}.image_result,.image_result img{max-width:98%}#backToTop{display:none}#pagination{margin:2rem 0 0!important}#main_results div#results{margin:0 auto;justify-content:center;display:grid;grid-template:"corrections" min-content "answers" min-content "sidebar" min-content "urls" 1fr "pagination" min-content / 45rem;gap:0}html{background-color:var(--color-base-background-mobile)}#main_results div#results{grid-template-columns:100%;margin:0 auto}#links_on_top{top:1.4rem;right:10px}#main_index #links_on_top{top:.5rem;right:.5rem}#results{margin:0;padding:0}#pagination{margin:2rem 1rem 0!important}article[data-vim-selected]{border:1px solid var(--color-result-vim-arrow);border-radius:10px}.result{background:var(--color-result-background);border:1px solid var(--color-result-background);margin:1rem 2%;width:96%;border-radius:10px}.result-images{margin:0;height:10rem;background:var(--color-base-background-mobile);width:unset}.infobox{border:none!important;background-color:var(--color-sidebar-background)}.numbered_pagination{display:none}.result-paper .attributes,.result-packages .attributes,.result-paper .attributes div,.result-packages .attributes div{display:block}.result-paper .attributes div span,.result-packages .attributes div span{display:inline}.result-paper .attributes div span:first-child,.result-packages .attributes div span:first-child{font-weight:700}.result-paper .attributes div span:nth-child(2),.result-packages .attributes div span:nth-child(2){margin-left:.5rem}}@media screen and (max-width: 35em){.result-videos img.thumbnail{float:none!important}.result-videos .content{overflow:inherit}}pre code{white-space:pre-wrap}#main_results .result-keyvalue caption{padding:.8rem .5rem;font-style:italic;caption-side:bottom;background-color:var(--color-result-keyvalue-table)}#main_results .result-keyvalue .col-key{width:25%}#main_results .result-keyvalue table{word-break:break-word;table-layout:fixed;width:100%;background-color:var(--color-result-keyvalue-table)}#main_results .result-keyvalue tr.odd{background-color:var(--color-result-keyvalue-odd)}#main_results .result-keyvalue tr.even{background-color:var(--color-result-keyvalue-even)}#main_results .result-keyvalue th,#main_results .result-keyvalue td{padding:.3rem .5rem} diff --git a/searx/static/themes/simple/js/searxng.min.js b/searx/static/themes/simple/js/searxng.min.js index f2c49fb32..8d0362fab 100644 --- a/searx/static/themes/simple/js/searxng.min.js +++ b/searx/static/themes/simple/js/searxng.min.js @@ -3,12 +3,12 @@ * (C) Copyright Contributors to the SearXNG project. * (C) Copyright Contributors to the searx project (2014 - 2021). * SPDX-License-Identifier: AGPL-3.0-or-later - */window.searxng=function(h,d){h.Element&&function(r){r.matches=r.matches||r.matchesSelector||r.webkitMatchesSelector||r.msMatchesSelector||function(a){for(var l=this,n=(l.parentNode||l.document).querySelectorAll(a),e=-1;n[++e]&&n[e]!=l;);return!!n[e]}}(Element.prototype);function u(r,a,l){try{r.call(a,l)}catch(n){console.log(n)}}var p=window.searxng||{};p.on=function(r,a,l,n){n=n||!1,typeof r!="string"?r.addEventListener(a,l,n):d.addEventListener(a,function(e){for(var t=e.target||e.srcElement,o=!1;t&&t.matches&&t!==d&&!(o=t.matches(r));)t=t.parentElement;o&&u(l,t,e)},n)},p.ready=function(r){document.readyState!="loading"?r.call(h):h.addEventListener("DOMContentLoaded",r.bind(h))},p.http=function(r,a,l=null){return new Promise(function(n,e){try{var t=new XMLHttpRequest;t.open(r,a,!0),t.timeout=2e4,t.onload=function(){t.status==200?n(t.response,t.responseType):e(Error(t.statusText))},t.onerror=function(){e(Error("Network Error"))},t.onabort=function(){e(Error("Transaction is aborted"))},t.ontimeout=function(){e(Error("Timeout"))},l?t.send(l):t.send()}catch(o){e(o)}})},p.loadStyle=function(r){var a=p.settings.theme_static_path+"/"+r,l="style_"+r.replace(".","_"),n=d.getElementById(l);n===null&&(n=d.createElement("link"),n.setAttribute("id",l),n.setAttribute("rel","stylesheet"),n.setAttribute("type","text/css"),n.setAttribute("href",a),d.body.appendChild(n))},p.loadScript=function(r,a){var l=p.settings.theme_static_path+"/"+r,n="script_"+r.replace(".","_"),e=d.getElementById(n);if(e===null)e=d.createElement("script"),e.setAttribute("id",n),e.setAttribute("src",l),e.onload=a,e.onerror=function(){e.setAttribute("error","1")},d.body.appendChild(e);else if(e.hasAttribute("error"))console.log("callback not executed : script '"+l+"' not loaded.");else try{a.apply(e,[])}catch(t){console.log(t)}},p.insertBefore=function(r,a){a.parentNode.insertBefore(r,a)},p.insertAfter=function(r,a){a.parentNode.insertAfter(r,a.nextSibling)},p.on(".close","click",function(){this.parentNode.classList.add("invisible")});function m(){for(var r of d.getElementsByTagName("body")[0].classList.values())if(r.endsWith("_endpoint"))return r.split("_")[0];return""}return p.endpoint=m(),p}(window,document);searxng.ready(function(){if(searxng.infinite_scroll_supported="IntersectionObserver"in window&&"IntersectionObserverEntry"in window&&"intersectionRatio"in window.IntersectionObserverEntry.prototype,searxng.endpoint!=="results")return;if(!searxng.infinite_scroll_supported){console.log("IntersectionObserver not supported");return}let h=document;var d=h.getElementById("results").classList.contains("only_template_images");function u(){var r=h.createElement("div");return r.classList.add("loader"),r}function p(r,a){r.textContent="",a.forEach(l=>r.appendChild(l))}function m(r){var a=h.querySelector("#pagination form.next_page");if(a){p(h.querySelector("#pagination"),[u()]);var l=new FormData(a);searxng.http("POST",h.querySelector("#search").getAttribute("action"),l).then(function(n){var e=new DOMParser().parseFromString(n,"text/html"),t=e.querySelectorAll("#urls article"),o=e.querySelector("#pagination");h.querySelector("#pagination").remove(),t.length>0&&!d&&h.querySelector("#urls").appendChild(h.createElement("hr")),t.forEach(c=>{h.querySelector("#urls").appendChild(c)}),o&&(h.querySelector("#results").appendChild(o),r())}).catch(function(n){console.log(n);var e=h.createElement("div");e.textContent=searxng.settings.translations.error_loading_next_page,e.classList.add("dialog-error"),e.setAttribute("role","alert"),p(h.querySelector("#pagination"),[e])})}}if(searxng.settings.infinite_scroll&&searxng.infinite_scroll_supported){const r={rootMargin:"20rem"},a="article.result:last-child",l=new IntersectionObserver(n=>{const e=n[0];e.isIntersecting&&(l.unobserve(e.target),m(()=>l.observe(h.querySelector(a),r)))});l.observe(h.querySelector(a),r)}});searxng.ready(function(){function h(i){for(;i!==void 0;){if(i.classList.contains("detail"))return!0;if(i.classList.contains("result"))return!1;i=i.parentNode}return!1}function d(i){for(;i!==void 0;){if(i.classList.contains("result"))return i;i=i.parentNode}}function u(i){return i&&i.classList.contains("result-images")}searxng.on(".result","click",function(i){if(!h(i.target)){a(this)(!0,!0);let f=d(i.target);u(f)&&(i.preventDefault(),searxng.selectImage(f))}}),searxng.on(".result a","focus",function(i){if(!h(i.target)){let f=d(i.target);f&&f.getAttribute("data-vim-selected")===null&&a(f)(!0),u(f)&&searxng.selectImage(f)}},!0);var p={Escape:{key:"ESC",fun:n,des:"remove focus from the focused input",cat:"Control"},c:{key:"c",fun:O,des:"copy url of the selected result to the clipboard",cat:"Results"},h:{key:"h",fun:_,des:"toggle help window",cat:"Other"},i:{key:"i",fun:v,des:"focus on the search input",cat:"Control"},n:{key:"n",fun:t(),des:"go to next page",cat:"Results"},o:{key:"o",fun:b(!1),des:"open search result",cat:"Results"},p:{key:"p",fun:o(),des:"go to previous page",cat:"Results"},r:{key:"r",fun:l,des:"reload page from the server",cat:"Control"},t:{key:"t",fun:b(!0),des:"open the result in a new tab",cat:"Results"}},m={default:Object.assign({ArrowLeft:{key:"←",fun:a("up"),des:"select previous search result",cat:"Results"},ArrowRight:{key:"→",fun:a("down"),des:"select next search result",cat:"Results"}},p),vim:Object.assign({b:{key:"b",fun:s(-window.innerHeight),des:"scroll one page up",cat:"Navigation"},f:{key:"f",fun:s(window.innerHeight),des:"scroll one page down",cat:"Navigation"},u:{key:"u",fun:s(-window.innerHeight/2),des:"scroll half a page up",cat:"Navigation"},d:{key:"d",fun:s(window.innerHeight/2),des:"scroll half a page down",cat:"Navigation"},g:{key:"g",fun:g(-document.body.scrollHeight,"top"),des:"scroll to the top of the page",cat:"Navigation"},v:{key:"v",fun:g(document.body.scrollHeight,"bottom"),des:"scroll to the bottom of the page",cat:"Navigation"},k:{key:"k",fun:a("up"),des:"select previous search result",cat:"Results"},j:{key:"j",fun:a("down"),des:"select next search result",cat:"Results"},y:{key:"y",fun:O,des:"copy url of the selected result to the clipboard",cat:"Results"}},p)},r=m[searxng.settings.hotkeys]||m.default;searxng.on(document,"keydown",function(i){if(Object.prototype.hasOwnProperty.call(r,i.key)&&!i.ctrlKey&&!i.altKey&&!i.shiftKey&&!i.metaKey){var f=i.target.tagName.toLowerCase();i.key==="Escape"?r[i.key].fun(i):(i.target===document.body||f==="a"||f==="button")&&(i.preventDefault(),r[i.key].fun())}});function a(i){return function(f,M){var E=document.querySelector(".result[data-vim-selected]"),A=i;if(E===null){if(E=document.querySelector(".result"),E===null)return;(i==="down"||i==="up")&&(A=E)}var y,w=document.querySelectorAll(".result");if(w=Array.from(w),typeof A!="string")y=A;else switch(A){case"visible":for(var T=document.documentElement.scrollTop||document.body.scrollTop,x=T+document.documentElement.clientHeight,I=0;IT)break}break;case"down":y=w[w.indexOf(E)+1]||E;break;case"up":y=w[w.indexOf(E)-1]||E;break;case"bottom":y=w[w.length-1];break;case"top":default:y=w[0]}if(y){if(E.removeAttribute("data-vim-selected"),y.setAttribute("data-vim-selected","true"),!M){var D=y.querySelector("h3 a")||y.querySelector("a");D!==null&&D.focus()}f||c()}}}function l(){document.location.reload(!0)}function n(i){const f=i.target.tagName.toLowerCase();document.activeElement&&(f==="input"||f==="select"||f==="textarea")?document.activeElement.blur():searxng.closeDetail()}function e(i){return function(){var f=document.querySelector(i);f&&f.click()}}function t(){return e('nav#pagination .next_page button[type="submit"]')}function o(){return e('nav#pagination .previous_page button[type="submit"]')}function c(){var i=document.querySelector(".result[data-vim-selected]");if(i!==null){var f=document.documentElement.scrollTop||document.body.scrollTop,M=document.documentElement.clientHeight,E=i.offsetTop,A=E+i.clientHeight,y=120;if(i.previousElementSibling===null&&AE-y)window.scroll(window.scrollX,E-y);else{var w=f+M;w a")),f!==null){var M=f.getAttribute("href");i?window.open(M):window.location.href=M}}}function k(i){var f={};for(var M in r){var E=r[M];f[E.cat]=f[E.cat]||[],f[E.cat].push(E)}var A=Object.keys(f).sort(function(N,D){return f[D].length-f[N].length});if(A.length!==0){var y='×';y+="

How to navigate SearXNG with hotkeys

",y+="";for(var w=0;w"),y+="",(!I||x)&&(y+="")}y+="
",y+="

"+T[0].cat+"

",y+='
    ';for(var R in T)y+="
  • "+T[R].key+" "+T[R].des+"
  • ";y+="
",y+="
",i.innerHTML=y}}function _(){var i=document.querySelector("#vim-hotkeys-help");if(i==null){i=document.createElement("div"),i.id="vim-hotkeys-help",i.className="dialog-modal",k(i);var f=document.getElementsByTagName("body")[0];f.appendChild(i)}else{i.classList.toggle("invisible");return}}function O(){var i=document.querySelector(".result[data-vim-selected] h3 a");if(i===null)return;const f=i.getAttribute("href");navigator.clipboard.writeText(f)}searxng.scrollPageToSelected=c,searxng.selectNext=a("down"),searxng.selectPrevious=a("up")});(function(h,d,u){u.ready(function(){u.on(".searxng_init_map","click",function(p){this.classList.remove("searxng_init_map");var m=this.dataset.leafletTarget,r=parseFloat(this.dataset.mapLon),a=parseFloat(this.dataset.mapLat),l=parseFloat(this.dataset.mapZoom),n=JSON.parse(this.dataset.mapBoundingbox),e=JSON.parse(this.dataset.mapGeojson);u.loadStyle("css/leaflet.css"),u.loadScript("js/leaflet.js",function(){var t=null;if(n){var o=L.latLng(n[0],n[2]),c=L.latLng(n[1],n[3]);t=L.latLngBounds(o,c)}var s=L.map(m),g="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",v='Map data © OpenStreetMap contributors',b=new L.TileLayer(g,{minZoom:1,maxZoom:19,attribution:v}),k="https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}.png",_='Wikimedia maps | Maps data © OpenStreetMap contributors',O=new L.TileLayer(k,{minZoom:1,maxZoom:19,attribution:_});t?setTimeout(function(){s.fitBounds(t,{maxZoom:17})},0):r&&a&&(l?s.setView(new L.latLng(a,r),l):s.setView(new L.latLng(a,r),8)),s.addLayer(b);var i={"OSM Mapnik":b,"OSM Wikimedia":O};L.control.layers(i).addTo(s),e&&L.geoJson(e).addTo(s)}),p.preventDefault()})})})(window,document,window.searxng);(function(h,d,u){u.endpoint==="preferences"&&u.ready(function(){let p=null;function m(){p==null&&u.http("GET","engine_descriptions.json").then(function(t){p=JSON.parse(t);for(const[o,c]of Object.entries(p)){let s=d.querySelectorAll('[data-engine-name="'+o+'"] .engine-description');for(const g of s){let v=" ("+u.settings.translations.Source+": "+c[1]+")";g.innerHTML=c[0]+v}}})}for(const t of d.querySelectorAll("[data-engine-name]"))u.on(t,"mouseenter",m);const r=d.querySelectorAll(".enable-all-engines"),a=d.querySelectorAll(".disable-all-engines"),l=d.querySelectorAll("tbody input[type=checkbox][class~=checkbox-onoff]"),n=t=>{for(const o of l)o.offsetParent!==null&&(o.checked=!t)};for(const t of r)u.on(t,"click",()=>n(!0));for(const t of a)u.on(t,"click",()=>n(!1));const e=d.querySelector("#copy-hash");u.on(e,"click",t=>{t.preventDefault(),navigator.clipboard.writeText(e.dataset.hash),e.innerText=e.dataset.copiedText})})})(window,document,window.searxng);/*! + */window.searxng=function(h,s){h.Element&&function(n){n.matches=n.matches||n.matchesSelector||n.webkitMatchesSelector||n.msMatchesSelector||function(l){for(var t=this,r=(t.parentNode||t.document).querySelectorAll(l),o=-1;r[++o]&&r[o]!=t;);return!!r[o]}}(Element.prototype);function a(n,l,t){try{n.call(l,t)}catch(r){console.log(r)}}var f=window.searxng||{};f.on=function(n,l,t,r){r=r||!1,typeof n!="string"?n.addEventListener(l,t,r):s.addEventListener(l,function(o){for(var i=o.target||o.srcElement,p=!1;i&&i.matches&&i!==s&&!(p=i.matches(n));)i=i.parentElement;p&&a(t,i,o)},r)},f.ready=function(n){document.readyState!="loading"?n.call(h):h.addEventListener("DOMContentLoaded",n.bind(h))},f.http=function(n,l,t=null){return new Promise(function(r,o){try{var i=new XMLHttpRequest;i.open(n,l,!0),i.timeout=2e4,i.onload=function(){i.status==200?r(i.response,i.responseType):o(Error(i.statusText))},i.onerror=function(){o(Error("Network Error"))},i.onabort=function(){o(Error("Transaction is aborted"))},i.ontimeout=function(){o(Error("Timeout"))},t?i.send(t):i.send()}catch(p){o(p)}})},f.loadStyle=function(n){var l=f.settings.theme_static_path+"/"+n,t="style_"+n.replace(".","_"),r=s.getElementById(t);r===null&&(r=s.createElement("link"),r.setAttribute("id",t),r.setAttribute("rel","stylesheet"),r.setAttribute("type","text/css"),r.setAttribute("href",l),s.body.appendChild(r))},f.loadScript=function(n,l){var t=f.settings.theme_static_path+"/"+n,r="script_"+n.replace(".","_"),o=s.getElementById(r);if(o===null)o=s.createElement("script"),o.setAttribute("id",r),o.setAttribute("src",t),o.onload=l,o.onerror=function(){o.setAttribute("error","1")},s.body.appendChild(o);else if(o.hasAttribute("error"))console.log("callback not executed : script '"+t+"' not loaded.");else try{l.apply(o,[])}catch(i){console.log(i)}},f.insertBefore=function(n,l){l.parentNode.insertBefore(n,l)},f.insertAfter=function(n,l){l.parentNode.insertAfter(n,l.nextSibling)},f.on(".close","click",function(){this.parentNode.classList.add("invisible")});function m(){for(var n of s.getElementsByTagName("body")[0].classList.values())if(n.endsWith("_endpoint"))return n.split("_")[0];return""}return f.endpoint=m(),f}(window,document);searxng.ready(function(){if(searxng.infinite_scroll_supported="IntersectionObserver"in window&&"IntersectionObserverEntry"in window&&"intersectionRatio"in window.IntersectionObserverEntry.prototype,searxng.endpoint!=="results")return;if(!searxng.infinite_scroll_supported){console.log("IntersectionObserver not supported");return}let h=document;var s=h.getElementById("results").classList.contains("only_template_images");function a(){var n=h.createElement("div");return n.classList.add("loader"),n}function f(n,l){n.textContent="",l.forEach(t=>n.appendChild(t))}function m(n){var l=h.querySelector("#pagination form.next_page");if(l){f(h.querySelector("#pagination"),[a()]);var t=new FormData(l);searxng.http("POST",h.querySelector("#search").getAttribute("action"),t).then(function(r){var o=new DOMParser().parseFromString(r,"text/html"),i=o.querySelectorAll("#urls article"),p=o.querySelector("#pagination");h.querySelector("#pagination").remove(),i.length>0&&!s&&h.querySelector("#urls").appendChild(h.createElement("hr")),i.forEach(b=>{h.querySelector("#urls").appendChild(b)}),p&&(h.querySelector("#results").appendChild(p),n())}).catch(function(r){console.log(r);var o=h.createElement("div");o.textContent=searxng.settings.translations.error_loading_next_page,o.classList.add("dialog-error"),o.setAttribute("role","alert"),f(h.querySelector("#pagination"),[o])})}}if(searxng.settings.infinite_scroll&&searxng.infinite_scroll_supported){const n={rootMargin:"20rem"},l="article.result:last-child",t=new IntersectionObserver(r=>{const o=r[0];o.isIntersecting&&(t.unobserve(o.target),m(()=>t.observe(h.querySelector(l),n)))});t.observe(h.querySelector(l),n)}});searxng.ready(function(){function h(e){for(;e!==void 0;){if(e.classList.contains("detail"))return!0;if(e.classList.contains("result"))return!1;e=e.parentNode}return!1}function s(e){for(;e!==void 0;){if(e.classList.contains("result"))return e;e=e.parentNode}}function a(e){return e&&e.classList.contains("result-images")}searxng.on(".result","click",function(e){if(!h(e.target)){l(this)(!0,!0);let u=s(e.target);a(u)&&(e.preventDefault(),searxng.selectImage(u))}}),searxng.on(".result a","focus",function(e){if(!h(e.target)){let u=s(e.target);u&&u.getAttribute("data-vim-selected")===null&&l(u)(!0),a(u)&&searxng.selectImage(u)}},!0);var f={Escape:{key:"ESC",fun:r,des:"remove focus from the focused input",cat:"Control"},c:{key:"c",fun:A,des:"copy url of the selected result to the clipboard",cat:"Results"},h:{key:"h",fun:w,des:"toggle help window",cat:"Other"},i:{key:"i",fun:g,des:"focus on the search input",cat:"Control"},n:{key:"n",fun:i(),des:"go to next page",cat:"Results"},o:{key:"o",fun:v(!1),des:"open search result",cat:"Results"},p:{key:"p",fun:p(),des:"go to previous page",cat:"Results"},r:{key:"r",fun:t,des:"reload page from the server",cat:"Control"},t:{key:"t",fun:v(!0),des:"open the result in a new tab",cat:"Results"}},m={default:Object.assign({ArrowLeft:{key:"←",fun:l("up"),des:"select previous search result",cat:"Results"},ArrowRight:{key:"→",fun:l("down"),des:"select next search result",cat:"Results"}},f),vim:Object.assign({b:{key:"b",fun:c(-window.innerHeight),des:"scroll one page up",cat:"Navigation"},f:{key:"f",fun:c(window.innerHeight),des:"scroll one page down",cat:"Navigation"},u:{key:"u",fun:c(-window.innerHeight/2),des:"scroll half a page up",cat:"Navigation"},d:{key:"d",fun:c(window.innerHeight/2),des:"scroll half a page down",cat:"Navigation"},g:{key:"g",fun:d(-document.body.scrollHeight,"top"),des:"scroll to the top of the page",cat:"Navigation"},v:{key:"v",fun:d(document.body.scrollHeight,"bottom"),des:"scroll to the bottom of the page",cat:"Navigation"},k:{key:"k",fun:l("up"),des:"select previous search result",cat:"Results"},j:{key:"j",fun:l("down"),des:"select next search result",cat:"Results"},y:{key:"y",fun:A,des:"copy url of the selected result to the clipboard",cat:"Results"}},f)},n=m[searxng.settings.hotkeys]||m.default;searxng.on(document,"keydown",function(e){if(Object.prototype.hasOwnProperty.call(n,e.key)&&!e.ctrlKey&&!e.altKey&&!e.shiftKey&&!e.metaKey){var u=e.target.tagName.toLowerCase();e.key==="Escape"?n[e.key].fun(e):(e.target===document.body||u==="a"||u==="button")&&(e.preventDefault(),n[e.key].fun())}});function l(e){return function(u,_){var k=document.querySelector(".result[data-vim-selected]"),T=e;if(k===null){if(k=document.querySelector(".result"),k===null)return;(e==="down"||e==="up")&&(T=k)}var y,S=document.querySelectorAll(".result");if(S=Array.from(S),typeof T!="string")y=T;else switch(T){case"visible":for(var q=document.documentElement.scrollTop||document.body.scrollTop,B=q+document.documentElement.clientHeight,x=0;xq)break}break;case"down":y=S[S.indexOf(k)+1]||k;break;case"up":y=S[S.indexOf(k)-1]||k;break;case"bottom":y=S[S.length-1];break;case"top":default:y=S[0]}if(y){if(k.removeAttribute("data-vim-selected"),y.setAttribute("data-vim-selected","true"),!_){var C=y.querySelector("h3 a")||y.querySelector("a");C!==null&&C.focus()}u||b()}}}function t(){document.location.reload(!0)}function r(e){const u=e.target.tagName.toLowerCase();document.activeElement&&(u==="input"||u==="select"||u==="textarea")?document.activeElement.blur():searxng.closeDetail()}function o(e){return function(){var u=document.querySelector(e);u&&u.click()}}function i(){return o('nav#pagination .next_page button[type="submit"]')}function p(){return o('nav#pagination .previous_page button[type="submit"]')}function b(){var e=document.querySelector(".result[data-vim-selected]");if(e!==null){var u=document.documentElement.scrollTop||document.body.scrollTop,_=document.documentElement.clientHeight,k=e.offsetTop,T=k+e.clientHeight,y=120;if(e.previousElementSibling===null&&T<_){window.scroll(window.scrollX,0);return}if(u>k-y)window.scroll(window.scrollX,k-y);else{var S=u+_;S a")),u!==null){var _=u.getAttribute("href");e?window.open(_):window.location.href=_}}}function E(e){var u={};for(var _ in n){var k=n[_];u[k.cat]=u[k.cat]||[],u[k.cat].push(k)}var T=Object.keys(u).sort(function(M,C){return u[C].length-u[M].length});if(T.length!==0){var y='×';y+="

How to navigate SearXNG with hotkeys

",y+="";for(var S=0;S"),y+="",(!x||B)&&(y+="")}y+="
",y+="

"+q[0].cat+"

",y+='
    ';for(var I in q)y+="
  • "+q[I].key+" "+q[I].des+"
  • ";y+="
",y+="
",e.innerHTML=y}}function w(){var e=document.querySelector("#vim-hotkeys-help");if(e==null){e=document.createElement("div"),e.id="vim-hotkeys-help",e.className="dialog-modal",E(e);var u=document.getElementsByTagName("body")[0];u.appendChild(e)}else{e.classList.toggle("invisible");return}}function A(){var e=document.querySelector(".result[data-vim-selected] h3 a");if(e===null)return;const u=e.getAttribute("href");navigator.clipboard.writeText(u)}searxng.scrollPageToSelected=b,searxng.selectNext=l("down"),searxng.selectPrevious=l("up")});(function(h,s,a){a.ready(function(){a.on(".searxng_init_map","click",function(f){this.classList.remove("searxng_init_map");var m=this.dataset.leafletTarget,n=parseFloat(this.dataset.mapLon),l=parseFloat(this.dataset.mapLat),t=parseFloat(this.dataset.mapZoom),r=JSON.parse(this.dataset.mapBoundingbox),o=JSON.parse(this.dataset.mapGeojson);a.loadStyle("css/leaflet.css"),a.loadScript("js/leaflet.js",function(){var i=null;if(r){var p=L.latLng(r[0],r[2]),b=L.latLng(r[1],r[3]);i=L.latLngBounds(p,b)}var c=L.map(m),d="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",g='Map data © OpenStreetMap contributors',v=new L.TileLayer(d,{minZoom:1,maxZoom:19,attribution:g}),E="https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}.png",w='Wikimedia maps | Maps data © OpenStreetMap contributors',A=new L.TileLayer(E,{minZoom:1,maxZoom:19,attribution:w});i?setTimeout(function(){c.fitBounds(i,{maxZoom:17})},0):n&&l&&(t?c.setView(new L.latLng(l,n),t):c.setView(new L.latLng(l,n),8)),c.addLayer(v);var e={"OSM Mapnik":v,"OSM Wikimedia":A};L.control.layers(e).addTo(c),o&&L.geoJson(o).addTo(c)}),f.preventDefault()})})})(window,document,window.searxng);(function(h,s,a){a.endpoint==="preferences"&&a.ready(function(){let f=null;function m(){f==null&&a.http("GET","engine_descriptions.json").then(function(i){f=JSON.parse(i);for(const[p,b]of Object.entries(f)){let c=s.querySelectorAll('[data-engine-name="'+p+'"] .engine-description');for(const d of c){let g=" ("+a.settings.translations.Source+": "+b[1]+")";d.innerHTML=b[0]+g}}})}for(const i of s.querySelectorAll("[data-engine-name]"))a.on(i,"mouseenter",m);const n=s.querySelectorAll(".enable-all-engines"),l=s.querySelectorAll(".disable-all-engines"),t=s.querySelectorAll("tbody input[type=checkbox][class~=checkbox-onoff]"),r=i=>{for(const p of t)p.offsetParent!==null&&(p.checked=!i)};for(const i of n)a.on(i,"click",()=>r(!0));for(const i of l)a.on(i,"click",()=>r(!1));const o=s.querySelector("#copy-hash");a.on(o,"click",i=>{i.preventDefault(),navigator.clipboard.writeText(o.dataset.hash),o.innerText=o.dataset.copiedText})})})(window,document,window.searxng);/*! * swiped-events.js - v@version@ * Pure JavaScript swipe events * https://github.com/john-doherty/swiped-events * @inspiration https://stackoverflow.com/questions/16348031/disable-scrolling-when-touch-moving-certain-element * @author John Doherty * @license MIT - */(function(h,d){typeof h.CustomEvent!="function"&&(h.CustomEvent=function(s,g){g=g||{bubbles:!1,cancelable:!1,detail:void 0};var v=d.createEvent("CustomEvent");return v.initCustomEvent(s,g.bubbles,g.cancelable,g.detail),v},h.CustomEvent.prototype=h.Event.prototype),d.addEventListener("touchstart",t,!1),d.addEventListener("touchmove",o,!1),d.addEventListener("touchend",e,!1);var u=null,p=null,m=null,r=null,a=null,l=null,n=0;function e(s){if(l===s.target){var g=parseInt(c(l,"data-swipe-threshold","20"),10),v=c(l,"data-swipe-unit","px"),b=parseInt(c(l,"data-swipe-timeout","500"),10),k=Date.now()-a,_="",O=s.changedTouches||s.touches||[];if(v==="vh"&&(g=Math.round(g/100*d.documentElement.clientHeight)),v==="vw"&&(g=Math.round(g/100*d.documentElement.clientWidth)),Math.abs(m)>Math.abs(r)?Math.abs(m)>g&&k0?_="swiped-left":_="swiped-right"):Math.abs(r)>g&&k0?_="swiped-up":_="swiped-down"),_!==""){var i={dir:_.replace(/swiped-/,""),touchType:(O[0]||{}).touchType||"direct",fingers:n,xStart:parseInt(u,10),xEnd:parseInt((O[0]||{}).clientX||-1,10),yStart:parseInt(p,10),yEnd:parseInt((O[0]||{}).clientY||-1,10)};l.dispatchEvent(new CustomEvent("swiped",{bubbles:!0,cancelable:!0,detail:i})),l.dispatchEvent(new CustomEvent(_,{bubbles:!0,cancelable:!0,detail:i}))}u=null,p=null,a=null}}function t(s){s.target.getAttribute("data-swipe-ignore")!=="true"&&(l=s.target,a=Date.now(),u=s.touches[0].clientX,p=s.touches[0].clientY,m=0,r=0,n=s.touches.length)}function o(s){if(!(!u||!p)){var g=s.touches[0].clientX,v=s.touches[0].clientY;m=u-g,r=p-v}}function c(s,g,v){for(;s&&s!==d.documentElement;){var b=s.getAttribute(g);if(b)return b;s=s.parentNode}return v}})(window,document);(function(h,d,u){u.endpoint==="results"&&u.ready(function(){d.querySelectorAll("#urls img").forEach(l=>l.addEventListener("error",()=>{l.src=window.searxng.settings.theme_static_path+"/img/img_load_error.svg"},{once:!0})),d.querySelector("#search_url button#copy_url")&&(d.querySelector("#search_url button#copy_url").style.display="block"),u.on(".btn-collapse","click",function(){var l=this.getAttribute("data-btn-text-collapsed"),n=this.getAttribute("data-btn-text-not-collapsed"),e=this.getAttribute("data-target"),t=d.querySelector(e),o=this.innerHTML;this.classList.contains("collapsed")?o=o.replace(l,n):o=o.replace(n,l),this.innerHTML=o,this.classList.toggle("collapsed"),t.classList.toggle("invisible")}),u.on(".media-loader","click",function(){var l=this.getAttribute("data-target"),n=d.querySelector(l+" > iframe"),e=n.getAttribute("src");(e==null||e===!1)&&n.setAttribute("src",n.getAttribute("data-src"))}),u.on("#copy_url","click",function(){var l=this.parentElement.querySelector("pre");navigator.clipboard.writeText(l.innerText),this.innerText=this.dataset.copiedText});let p;const m=d.createElement("div");m.classList.add("loader");const r=new Image,a=(l,n)=>{p&&clearTimeout(p),p=setTimeout(()=>{r.src=l},1e3),r.onload=()=>{n(),m.remove()},r.onerror=()=>{m.remove()}};u.selectImage=l=>{if(d.getElementById("results").classList.add("image-detail-open"),window.location.hash="#image-viewer",u.scrollPageToSelected(),!l)return;const n=l.querySelector(".result-images-source img");if(!n)return;const e=n.getAttribute("data-src");if(!e)return;const t=l.querySelector(".image_thumbnail");n.src=t.src,l.querySelector(".detail").appendChild(m),a(e,()=>{n.src=e,n.removeAttribute("data-src")})},u.closeDetail=function(){d.getElementById("results").classList.remove("image-detail-open"),window.location.hash=="#image-viewer"&&window.history.back(),u.scrollPageToSelected()},u.on(".result-detail-close","click",l=>{l.preventDefault(),u.closeDetail()}),u.on(".result-detail-previous","click",l=>{l.preventDefault(),u.selectPrevious(!1)}),u.on(".result-detail-next","click",l=>{l.preventDefault(),u.selectNext(!1)}),window.addEventListener("hashchange",()=>{window.location.hash!="#image-viewer"&&u.closeDetail()}),d.querySelectorAll(".swipe-horizontal").forEach(l=>{l.addEventListener("swiped-left",function(){u.selectNext(!1)}),l.addEventListener("swiped-right",function(){u.selectPrevious(!1)})}),h.addEventListener("scroll",function(){var l=d.getElementById("backToTop"),n=document.documentElement.scrollTop||document.body.scrollTop,e=d.getElementById("results");l!==null&&(n>=100?e.classList.add("scrolling"):e.classList.remove("scrolling"))},!0)})})(window,document,window.searxng);function P(h){return h&&h.__esModule&&Object.prototype.hasOwnProperty.call(h,"default")?h.default:h}function C(h){throw new Error('Could not dynamically require "'+h+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var q={exports:{}},H;function B(){return H||(H=1,function(h,d){(function(u){h.exports=u()})(function(){return function(){function u(p,m,r){function a(e,t){if(!m[e]){if(!p[e]){var o=typeof C=="function"&&C;if(!t&&o)return o(e,!0);if(l)return l(e,!0);var c=new Error("Cannot find module '"+e+"'");throw c.code="MODULE_NOT_FOUND",c}var s=m[e]={exports:{}};p[e][0].call(s.exports,function(g){var v=p[e][1][g];return a(v||g)},s,s.exports,u,p,m,r)}return m[e].exports}for(var l=typeof C=="function"&&C,n=0;n=b.From&&o.keyCode<=b.To?v=!b.Not:v=b.Not))};for(var s in n.prototype.getEventsByType(e,t)){var g=n.merge({Operator:r.AND},e.KeyboardMappings[s]),v=r.AND==g.Operator;g.Conditions.forEach(c),v===!0&&g.Callback.call(e,o)}},n.prototype.makeRequest=function(e,t,o){var c=Object.getOwnPropertyNames(e.HttpHeaders),s=new XMLHttpRequest,g=e._HttpMethod(),v=e._Url(),b=e._Pre(),k=encodeURIComponent(e._QueryArg())+"="+encodeURIComponent(b);g.match(/^GET$/i)&&(v.indexOf("?")!==-1?v+="&"+k:v+="?"+k),s.open(g,v,!0);for(var _=c.length-1;_>=0;_--)s.setRequestHeader(c[_],e.HttpHeaders[c[_]]);return s.onreadystatechange=function(){s.readyState==4&&s.status==200?(e.$Cache[b]=s.response,t(s.response)):s.status>=400&&o()},s},n.prototype.ajax=function(e,t,o){o===void 0&&(o=!0),e.$AjaxTimer&&window.clearTimeout(e.$AjaxTimer),o===!0?e.$AjaxTimer=window.setTimeout(n.prototype.ajax.bind(null,e,t,!1),e.Delay):(e.Request&&e.Request.abort(),e.Request=t,e.Request.send(e._QueryArg()+"="+e._Pre()))},n.prototype.cache=function(e,t,o){var c=e._Cache(e._Pre());if(c===void 0){var s=n.prototype.makeRequest(e,t,o);n.prototype.ajax(e,s)}else t(c)},n.prototype.destroy=function(e){for(var t in e.$Listeners)e.Input.removeEventListener(t,e.$Listeners[t]);e.DOMResults.parentNode.removeChild(e.DOMResults)},n.merge=function(){for(var e={},t,o=0;o"+e+""}},HttpHeaders:{"Content-type":"application/x-www-form-urlencoded"},Limit:0,MinChars:0,HttpMethod:"GET",QueryArg:"q",Url:null,KeyboardMappings:{Enter:{Conditions:[{Is:13,Not:!1}],Callback:function(e){if(this.DOMResults.getAttribute("class").indexOf("open")!=-1){var t=this.DOMResults.querySelector("li.active");t!==null&&(e.preventDefault(),this._Select(t),this.DOMResults.setAttribute("class","autocomplete"))}},Operator:r.AND,Event:a.KEYDOWN},KeyUpAndDown_down:{Conditions:[{Is:38,Not:!1},{Is:40,Not:!1}],Callback:function(e){e.preventDefault()},Operator:r.OR,Event:a.KEYDOWN},KeyUpAndDown_up:{Conditions:[{Is:38,Not:!1},{Is:40,Not:!1}],Callback:function(e){e.preventDefault();var t=this.DOMResults.querySelector("li:first-child:not(.locked)"),o=this.DOMResults.querySelector("li:last-child:not(.locked)"),c=this.DOMResults.querySelector("li.active");if(c){var s=Array.prototype.indexOf.call(c.parentNode.children,c),g=s+(e.keyCode-39),v=this.DOMResults.getElementsByTagName("li").length;g<0?g=v-1:g>=v&&(g=0),c.classList.remove("active"),c.parentElement.children.item(g).classList.add("active")}else o&&e.keyCode==38?o.classList.add("active"):t&&t.classList.add("active")},Operator:r.OR,Event:a.KEYUP},AlphaNum:{Conditions:[{Is:13,Not:!0},{From:35,To:40,Not:!0}],Callback:function(){var e=this.Input.getAttribute("data-autocomplete-old-value"),t=this._Pre();t!==""&&t.length>=this._MinChars()?((!e||t!=e)&&this.DOMResults.setAttribute("class","autocomplete open"),n.prototype.cache(this,(function(o){this._Render(this._Post(o)),this._Open()}).bind(this),this._Error)):this._Close()},Operator:r.AND,Event:a.KEYUP}},DOMResults:null,Request:null,Input:null,_EmptyMessage:function(){var e="";return this.Input.hasAttribute("data-autocomplete-empty-message")?e=this.Input.getAttribute("data-autocomplete-empty-message"):this.EmptyMessage!==!1?e=this.EmptyMessage:e="",e},_Limit:function(){var e=this.Input.getAttribute("data-autocomplete-limit");return isNaN(e)||e===null?this.Limit:parseInt(e,10)},_MinChars:function(){var e=this.Input.getAttribute("data-autocomplete-minchars");return isNaN(e)||e===null?this.MinChars:parseInt(e,10)},_Highlight:function(e){return e.replace(this.Highlight.getRegex(this._Pre()),this.Highlight.transform)},_HttpMethod:function(){return this.Input.hasAttribute("data-autocomplete-method")?this.Input.getAttribute("data-autocomplete-method"):this.HttpMethod},_QueryArg:function(){return this.Input.hasAttribute("data-autocomplete-param-name")?this.Input.getAttribute("data-autocomplete-param-name"):this.QueryArg},_Url:function(){return this.Input.hasAttribute("data-autocomplete")?this.Input.getAttribute("data-autocomplete"):this.Url},_Blur:function(e){if(e===void 0&&(e=!1),e)this._Close();else{var t=this;setTimeout(function(){t._Blur(!0)},150)}},_Cache:function(e){return this.$Cache[e]},_Focus:function(){var e=this.Input.getAttribute("data-autocomplete-old-value");(!e||this.Input.value!=e)&&this._MinChars()<=this.Input.value.length&&this.DOMResults.setAttribute("class","autocomplete open")},_Open:function(){var e=this;Array.prototype.forEach.call(this.DOMResults.getElementsByTagName("li"),function(t){t.getAttribute("class")!="locked"&&(t.onclick=function(){e._Select(t)})})},_Close:function(){this.DOMResults.setAttribute("class","autocomplete")},_Position:function(){this.DOMResults.setAttribute("class","autocomplete"),this.DOMResults.setAttribute("style","top:"+(this.Input.offsetTop+this.Input.offsetHeight)+"px;left:"+this.Input.offsetLeft+"px;width:"+this.Input.clientWidth+"px;")},_Render:function(e){var t;typeof e=="string"?t=this._RenderRaw(e):t=this._RenderResponseItems(e),this.DOMResults.hasChildNodes()&&this.DOMResults.removeChild(this.DOMResults.childNodes[0]),this.DOMResults.appendChild(t)},_RenderResponseItems:function(e){var t=document.createElement("ul"),o=document.createElement("li"),c=this._Limit();c<0?e=e.reverse():c===0&&(c=e.length);for(var s=0;s0)this.DOMResults.innerHTML=e;else{var c=this._EmptyMessage();c!==""&&(o.innerHTML=c,o.setAttribute("class","locked"),t.appendChild(o))}return t},_Post:function(e){try{var t=[],o=JSON.parse(e);if(Object.keys(o).length===0)return"";if(Array.isArray(o))for(var c=0;c0){var n=document.getElementById("search");setTimeout(n.submit.bind(n),0)}}function l(n){var e=document.getElementById("clear_search"),t=function(){n.value.length===0?e.classList.add("empty"):e.classList.remove("empty")};t(),e.addEventListener("click",function(o){n.value="",n.focus(),t(),o.preventDefault()}),n.addEventListener("input",t,!1)}u.ready(function(){m=d.getElementById(p),m!==null&&(l(m),u.settings.autocomplete&&(u.autocomplete=S.call(h,{Url:"./autocompleter",EmptyMessage:u.settings.translations.no_item_found,HttpMethod:u.settings.method,HttpHeaders:{"Content-type":"application/x-www-form-urlencoded","X-Requested-With":"XMLHttpRequest"},MinChars:u.settings.autocomplete_min,Delay:300,_Position:function(){},_Open:function(){var t=this;Array.prototype.forEach.call(this.DOMResults.getElementsByTagName("li"),function(o){o.getAttribute("class")!="locked"&&(o.onmousedown=function(){t._Select(o)})})},_Select:function(t){S.defaults._Select.call(this,t);var o=t.closest("form");o&&o.submit()},_MinChars:function(){return this.Input.value.indexOf("!")>-1?0:S.defaults._MinChars.call(this)},KeyboardMappings:Object.assign({},S.defaults.KeyboardMappings,{KeyUpAndDown_up:Object.assign({},S.defaults.KeyboardMappings.KeyUpAndDown_up,{Callback:function(t){S.defaults.KeyboardMappings.KeyUpAndDown_up.Callback.call(this,t);var o=this.DOMResults.querySelector("li.active");o&&S.defaults._Select.call(this,o)}}),Tab:Object.assign({},S.defaults.KeyboardMappings.Enter,{Conditions:[{Is:9,Not:!1}],Callback:function(t){if(this.DOMResults.getAttribute("class").indexOf("open")!=-1){var o=this.DOMResults.querySelector("li.active");o!==null&&(S.defaults._Select.call(this,o),t.preventDefault())}}})})},"#"+p)),S.prototype.ajax=function(t,o,c){c===void 0&&(c=!0),t.$AjaxTimer&&window.clearTimeout(t.$AjaxTimer),c===!0?t.$AjaxTimer=window.setTimeout(S.prototype.ajax.bind(null,t,o,!1),t.Delay):(t.Request&&t.Request.abort(),t.Request=o,t.Request.send(encodeURIComponent(t._QueryArg())+"="+encodeURIComponent(t._Pre())))},!r&&document.querySelector(".index_endpoint")&&m.focus()),m!==null&&u.settings.search_on_category_select&&d.querySelector(".search_filters")!=null&&(u.on(d.getElementById("safesearch"),"change",a),u.on(d.getElementById("time_range"),"change",a),u.on(d.getElementById("language"),"change",a));const n=d.querySelectorAll("button.category_button");for(let t of n)u.on(t,"click",o=>{if(o.shiftKey){o.preventDefault(),t.classList.toggle("selected");return}const c=d.querySelectorAll("button.category_button.selected");for(let s of c)s.classList.remove("selected");t.classList.add("selected")});const e=d.querySelector("#search");e!=null&&u.on(e,"submit",t=>{t.preventDefault();const o=d.querySelector("#selected-categories");if(o){let c=[];for(let s of n)s.classList.contains("selected")&&c.push(s.name.replace("category_",""));o.value=c.join(",")}e.submit()})})})(window,document,window.searxng); + */(function(h,s){typeof h.CustomEvent!="function"&&(h.CustomEvent=function(c,d){d=d||{bubbles:!1,cancelable:!1,detail:void 0};var g=s.createEvent("CustomEvent");return g.initCustomEvent(c,d.bubbles,d.cancelable,d.detail),g},h.CustomEvent.prototype=h.Event.prototype),s.addEventListener("touchstart",i,!1),s.addEventListener("touchmove",p,!1),s.addEventListener("touchend",o,!1);var a=null,f=null,m=null,n=null,l=null,t=null,r=0;function o(c){if(t===c.target){var d=parseInt(b(t,"data-swipe-threshold","20"),10),g=b(t,"data-swipe-unit","px"),v=parseInt(b(t,"data-swipe-timeout","500"),10),E=Date.now()-l,w="",A=c.changedTouches||c.touches||[];if(g==="vh"&&(d=Math.round(d/100*s.documentElement.clientHeight)),g==="vw"&&(d=Math.round(d/100*s.documentElement.clientWidth)),Math.abs(m)>Math.abs(n)?Math.abs(m)>d&&E0?w="swiped-left":w="swiped-right"):Math.abs(n)>d&&E0?w="swiped-up":w="swiped-down"),w!==""){var e={dir:w.replace(/swiped-/,""),touchType:(A[0]||{}).touchType||"direct",fingers:r,xStart:parseInt(a,10),xEnd:parseInt((A[0]||{}).clientX||-1,10),yStart:parseInt(f,10),yEnd:parseInt((A[0]||{}).clientY||-1,10)};t.dispatchEvent(new CustomEvent("swiped",{bubbles:!0,cancelable:!0,detail:e})),t.dispatchEvent(new CustomEvent(w,{bubbles:!0,cancelable:!0,detail:e}))}a=null,f=null,l=null}}function i(c){c.target.getAttribute("data-swipe-ignore")!=="true"&&(t=c.target,l=Date.now(),a=c.touches[0].clientX,f=c.touches[0].clientY,m=0,n=0,r=c.touches.length)}function p(c){if(!(!a||!f)){var d=c.touches[0].clientX,g=c.touches[0].clientY;m=a-d,n=f-g}}function b(c,d,g){for(;c&&c!==s.documentElement;){var v=c.getAttribute(d);if(v)return v;c=c.parentNode}return g}})(window,document);(function(h,s,a){a.endpoint==="results"&&a.ready(function(){s.querySelectorAll("#urls img").forEach(t=>t.addEventListener("error",()=>{t.src=window.searxng.settings.theme_static_path+"/img/img_load_error.svg"},{once:!0})),s.querySelector("#search_url button#copy_url")&&(s.querySelector("#search_url button#copy_url").style.display="block"),a.on(".btn-collapse","click",function(){var t=this.getAttribute("data-btn-text-collapsed"),r=this.getAttribute("data-btn-text-not-collapsed"),o=this.getAttribute("data-target"),i=s.querySelector(o),p=this.innerHTML;this.classList.contains("collapsed")?p=p.replace(t,r):p=p.replace(r,t),this.innerHTML=p,this.classList.toggle("collapsed"),i.classList.toggle("invisible")}),a.on(".media-loader","click",function(){var t=this.getAttribute("data-target"),r=s.querySelector(t+" > iframe"),o=r.getAttribute("src");(o==null||o===!1)&&r.setAttribute("src",r.getAttribute("data-src"))}),a.on("#copy_url","click",function(){var t=this.parentElement.querySelector("pre");navigator.clipboard.writeText(t.innerText),this.innerText=this.dataset.copiedText});let f;const m=s.createElement("div");m.classList.add("loader");const n=new Image,l=(t,r)=>{f&&clearTimeout(f),f=setTimeout(()=>{n.src=t},1e3),n.onload=()=>{r(),m.remove()},n.onerror=()=>{m.remove()}};a.selectImage=t=>{if(s.getElementById("results").classList.add("image-detail-open"),window.location.hash="#image-viewer",a.scrollPageToSelected(),!t)return;const r=t.querySelector(".result-images-source img");if(!r)return;const o=r.getAttribute("data-src");if(!o)return;const i=t.querySelector(".image_thumbnail");r.src=i.src,t.querySelector(".detail").appendChild(m),l(o,()=>{r.src=o,r.removeAttribute("data-src")})},a.closeDetail=function(){s.getElementById("results").classList.remove("image-detail-open"),window.location.hash=="#image-viewer"&&window.history.back(),a.scrollPageToSelected()},a.on(".result-detail-close","click",t=>{t.preventDefault(),a.closeDetail()}),a.on(".result-detail-previous","click",t=>{t.preventDefault(),a.selectPrevious(!1)}),a.on(".result-detail-next","click",t=>{t.preventDefault(),a.selectNext(!1)}),window.addEventListener("hashchange",()=>{window.location.hash!="#image-viewer"&&a.closeDetail()}),s.querySelectorAll(".swipe-horizontal").forEach(t=>{t.addEventListener("swiped-left",function(){a.selectNext(!1)}),t.addEventListener("swiped-right",function(){a.selectPrevious(!1)})}),h.addEventListener("scroll",function(){var t=s.getElementById("backToTop"),r=document.documentElement.scrollTop||document.body.scrollTop,o=s.getElementById("results");t!==null&&(r>=100?o.classList.add("scrolling"):o.classList.remove("scrolling"))},!0)})})(window,document,window.searxng);(function(h,s,a){var f="q",m;const n=window.matchMedia("only screen and (max-width: 50em)").matches,l=document.querySelector("main").id=="main_results";function t(){if(m.value.length>0){var i=document.getElementById("search");setTimeout(i.submit.bind(i),0)}}function r(i){var p=document.getElementById("clear_search"),b=function(){i.value.length===0?p.classList.add("empty"):p.classList.remove("empty")};b(),p.addEventListener("click",function(c){i.value="",i.focus(),b(),c.preventDefault()}),i.addEventListener("input",b,!1)}const o=async i=>{let p;if(a.settings.method==="GET"){const b=new URLSearchParams;b.append("q",i),p=fetch("./autocompleter?"+b.toString())}else{const b=new FormData;b.append("q",i),p=fetch("./autocompleter",{method:"POST",body:b})}p.then(async function(b){const c=await b.json();if(!c)return;const d=s.querySelector(".autocomplete"),g=s.querySelector(".autocomplete ul");if(d.classList.add("open"),g.innerHTML="",!c[1]||c[1].length==0){const v=document.createElement("li");v.classList.add("no-item-found"),v.innerHTML=a.settings.translations.no_item_found,g.appendChild(v);return}for(let v of c[1]){const E=document.createElement("li");E.innerText=v,a.on(E,"mousedown",()=>{m.value=v,s.querySelector("#search").submit(),d.classList.remove("open")}),g.appendChild(E)}})};a.ready(function(){!n&&!l&&document.getElementById("q").focus(),m=s.getElementById(f);const i=s.querySelector(".autocomplete"),p=s.querySelector(".autocomplete ul");m!==null&&(r(m),a.settings.autocomplete&&(a.on(m,"input",()=>{const d=m.value;d.length{d==m.value&&o(d)},300)}),a.on(m,"keyup",d=>{let g=-1;const v=p.children;for(let w=0;w=0&&v[g].classList.remove("active"),E=(g-1+v.length)%v.length):d.key==="ArrowDown"?(g>=0&&v[g].classList.remove("active"),E=(g+1)%v.length):(d.key==="Tab"||d.key==="Enter")&&i.classList.remove("open"),E!=-1){const w=v[E];w.classList.add("active"),w.classList.contains("no-item-found")||(m.value=w.innerText)}}))),m!==null&&a.settings.search_on_category_select&&s.querySelector(".search_filters")!=null&&(a.on(s.getElementById("safesearch"),"change",t),a.on(s.getElementById("time_range"),"change",t),a.on(s.getElementById("language"),"change",t));const b=s.querySelectorAll("button.category_button");for(let d of b)a.on(d,"click",g=>{if(g.shiftKey){g.preventDefault(),d.classList.toggle("selected");return}const v=s.querySelectorAll("button.category_button.selected");for(let E of v)E.classList.remove("selected");d.classList.add("selected")});const c=s.querySelector("#search");c!=null&&a.on(c,"submit",d=>{d.preventDefault();const g=s.querySelector("#selected-categories");if(g){let v=[];for(let E of b)E.classList.contains("selected")&&v.push(E.name.replace("category_",""));g.value=v.join(",")}c.submit()})})})(window,document,window.searxng); //# sourceMappingURL=searxng.min.js.map diff --git a/searx/static/themes/simple/js/searxng.min.js.map b/searx/static/themes/simple/js/searxng.min.js.map index ded00532a..551c8741c 100644 --- a/searx/static/themes/simple/js/searxng.min.js.map +++ b/searx/static/themes/simple/js/searxng.min.js.map @@ -1 +1 @@ -{"version":3,"file":"searxng.min.js","sources":["../../../../../client/simple/src/js/main/00_toolkit.js","../../../../../client/simple/src/js/main/infinite_scroll.js","../../../../../client/simple/src/js/main/keyboard.js","../../../../../client/simple/src/js/main/mapresult.js","../../../../../client/simple/src/js/main/preferences.js","../../../../../client/simple/node_modules/swiped-events/src/swiped-events.js","../../../../../client/simple/src/js/main/results.js","../../../../../client/simple/node_modules/autocomplete-js/dist/autocomplete.js","../../../../../client/simple/src/js/main/search.js"],"sourcesContent":["/**\n * @license\n * (C) Copyright Contributors to the SearXNG project.\n * (C) Copyright Contributors to the searx project (2014 - 2021).\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nwindow.searxng = (function (w, d) {\n\n 'use strict';\n\n // not invented here toolkit with bugs fixed elsewhere\n // purposes : be just good enough and as small as possible\n\n // from https://plainjs.com/javascript/events/live-binding-event-handlers-14/\n if (w.Element) {\n (function (ElementPrototype) {\n ElementPrototype.matches = ElementPrototype.matches ||\n ElementPrototype.matchesSelector ||\n ElementPrototype.webkitMatchesSelector ||\n ElementPrototype.msMatchesSelector ||\n function (selector) {\n var node = this, nodes = (node.parentNode || node.document).querySelectorAll(selector), i = -1;\n while (nodes[++i] && nodes[i] != node);\n return !!nodes[i];\n };\n })(Element.prototype);\n }\n\n function callbackSafe (callback, el, e) {\n try {\n callback.call(el, e);\n } catch (exception) {\n console.log(exception);\n }\n }\n\n var searxng = window.searxng || {};\n\n searxng.on = function (obj, eventType, callback, useCapture) {\n useCapture = useCapture || false;\n if (typeof obj !== 'string') {\n // obj HTMLElement, HTMLDocument\n obj.addEventListener(eventType, callback, useCapture);\n } else {\n // obj is a selector\n d.addEventListener(eventType, function (e) {\n var el = e.target || e.srcElement, found = false;\n while (el && el.matches && el !== d && !(found = el.matches(obj))) el = el.parentElement;\n if (found) callbackSafe(callback, el, e);\n }, useCapture);\n }\n };\n\n searxng.ready = function (callback) {\n if (document.readyState != 'loading') {\n callback.call(w);\n } else {\n w.addEventListener('DOMContentLoaded', callback.bind(w));\n }\n };\n\n searxng.http = function (method, url, data = null) {\n return new Promise(function (resolve, reject) {\n try {\n var req = new XMLHttpRequest();\n req.open(method, url, true);\n req.timeout = 20000;\n\n // On load\n req.onload = function () {\n if (req.status == 200) {\n resolve(req.response, req.responseType);\n } else {\n reject(Error(req.statusText));\n }\n };\n\n // Handle network errors\n req.onerror = function () {\n reject(Error(\"Network Error\"));\n };\n\n req.onabort = function () {\n reject(Error(\"Transaction is aborted\"));\n };\n\n req.ontimeout = function () {\n reject(Error(\"Timeout\"));\n }\n\n // Make the request\n if (data) {\n req.send(data)\n } else {\n req.send();\n }\n } catch (ex) {\n reject(ex);\n }\n });\n };\n\n searxng.loadStyle = function (src) {\n var path = searxng.settings.theme_static_path + \"/\" + src,\n id = \"style_\" + src.replace('.', '_'),\n s = d.getElementById(id);\n if (s === null) {\n s = d.createElement('link');\n s.setAttribute('id', id);\n s.setAttribute('rel', 'stylesheet');\n s.setAttribute('type', 'text/css');\n s.setAttribute('href', path);\n d.body.appendChild(s);\n }\n };\n\n searxng.loadScript = function (src, callback) {\n var path = searxng.settings.theme_static_path + \"/\" + src,\n id = \"script_\" + src.replace('.', '_'),\n s = d.getElementById(id);\n if (s === null) {\n s = d.createElement('script');\n s.setAttribute('id', id);\n s.setAttribute('src', path);\n s.onload = callback;\n s.onerror = function () {\n s.setAttribute('error', '1');\n };\n d.body.appendChild(s);\n } else if (!s.hasAttribute('error')) {\n try {\n callback.apply(s, []);\n } catch (exception) {\n console.log(exception);\n }\n } else {\n console.log(\"callback not executed : script '\" + path + \"' not loaded.\");\n }\n };\n\n searxng.insertBefore = function (newNode, referenceNode) {\n referenceNode.parentNode.insertBefore(newNode, referenceNode);\n };\n\n searxng.insertAfter = function (newNode, referenceNode) {\n referenceNode.parentNode.insertAfter(newNode, referenceNode.nextSibling);\n };\n\n searxng.on('.close', 'click', function () {\n this.parentNode.classList.add('invisible');\n });\n\n function getEndpoint () {\n for (var className of d.getElementsByTagName('body')[0].classList.values()) {\n if (className.endsWith('_endpoint')) {\n return className.split('_')[0];\n }\n }\n return '';\n }\n\n searxng.endpoint = getEndpoint();\n\n return searxng;\n})(window, document);\n","// SPDX-License-Identifier: AGPL-3.0-or-later\n\n/* global searxng */\n\nsearxng.ready(function () {\n 'use strict';\n\n searxng.infinite_scroll_supported = (\n 'IntersectionObserver' in window &&\n 'IntersectionObserverEntry' in window &&\n 'intersectionRatio' in window.IntersectionObserverEntry.prototype);\n\n if (searxng.endpoint !== 'results') {\n return;\n }\n\n if (!searxng.infinite_scroll_supported) {\n console.log('IntersectionObserver not supported');\n return;\n }\n\n let d = document;\n var onlyImages = d.getElementById('results').classList.contains('only_template_images');\n\n function newLoadSpinner () {\n var loader = d.createElement('div');\n loader.classList.add('loader');\n return loader;\n }\n\n function replaceChildrenWith (element, children) {\n element.textContent = '';\n children.forEach(child => element.appendChild(child));\n }\n\n function loadNextPage (callback) {\n var form = d.querySelector('#pagination form.next_page');\n if (!form) {\n return\n }\n replaceChildrenWith(d.querySelector('#pagination'), [ newLoadSpinner() ]);\n var formData = new FormData(form);\n searxng.http('POST', d.querySelector('#search').getAttribute('action'), formData).then(\n function (response) {\n var nextPageDoc = new DOMParser().parseFromString(response, 'text/html');\n var articleList = nextPageDoc.querySelectorAll('#urls article');\n var paginationElement = nextPageDoc.querySelector('#pagination');\n d.querySelector('#pagination').remove();\n if (articleList.length > 0 && !onlyImages) {\n // do not add
element when there are only images\n d.querySelector('#urls').appendChild(d.createElement('hr'));\n }\n articleList.forEach(articleElement => {\n d.querySelector('#urls').appendChild(articleElement);\n });\n if (paginationElement) {\n d.querySelector('#results').appendChild(paginationElement);\n callback();\n }\n }\n ).catch(\n function (err) {\n console.log(err);\n var e = d.createElement('div');\n e.textContent = searxng.settings.translations.error_loading_next_page;\n e.classList.add('dialog-error');\n e.setAttribute('role', 'alert');\n replaceChildrenWith(d.querySelector('#pagination'), [ e ]);\n }\n )\n }\n\n if (searxng.settings.infinite_scroll && searxng.infinite_scroll_supported) {\n const intersectionObserveOptions = {\n rootMargin: \"20rem\",\n };\n const observedSelector = 'article.result:last-child';\n const observer = new IntersectionObserver(entries => {\n const paginationEntry = entries[0];\n if (paginationEntry.isIntersecting) {\n observer.unobserve(paginationEntry.target);\n loadNextPage(() => observer.observe(d.querySelector(observedSelector), intersectionObserveOptions));\n }\n });\n observer.observe(d.querySelector(observedSelector), intersectionObserveOptions);\n }\n\n});\n","/* SPDX-License-Identifier: AGPL-3.0-or-later */\n/* global searxng */\n\nsearxng.ready(function () {\n\n function isElementInDetail (el) {\n while (el !== undefined) {\n if (el.classList.contains('detail')) {\n return true;\n }\n if (el.classList.contains('result')) {\n // we found a result, no need to go to the root of the document:\n // el is not inside a
element\n return false;\n }\n el = el.parentNode;\n }\n return false;\n }\n\n function getResultElement (el) {\n while (el !== undefined) {\n if (el.classList.contains('result')) {\n return el;\n }\n el = el.parentNode;\n }\n return undefined;\n }\n\n function isImageResult (resultElement) {\n return resultElement && resultElement.classList.contains('result-images');\n }\n\n searxng.on('.result', 'click', function (e) {\n if (!isElementInDetail(e.target)) {\n highlightResult(this)(true, true);\n let resultElement = getResultElement(e.target);\n if (isImageResult(resultElement)) {\n e.preventDefault();\n searxng.selectImage(resultElement);\n }\n }\n });\n\n searxng.on('.result a', 'focus', function (e) {\n if (!isElementInDetail(e.target)) {\n let resultElement = getResultElement(e.target);\n if (resultElement && resultElement.getAttribute(\"data-vim-selected\") === null) {\n highlightResult(resultElement)(true);\n }\n if (isImageResult(resultElement)) {\n searxng.selectImage(resultElement);\n }\n }\n }, true);\n\n /* common base for layouts */\n var baseKeyBinding = {\n 'Escape': {\n key: 'ESC',\n fun: removeFocus,\n des: 'remove focus from the focused input',\n cat: 'Control'\n },\n 'c': {\n key: 'c',\n fun: copyURLToClipboard,\n des: 'copy url of the selected result to the clipboard',\n cat: 'Results'\n },\n 'h': {\n key: 'h',\n fun: toggleHelp,\n des: 'toggle help window',\n cat: 'Other'\n },\n 'i': {\n key: 'i',\n fun: searchInputFocus,\n des: 'focus on the search input',\n cat: 'Control'\n },\n 'n': {\n key: 'n',\n fun: GoToNextPage(),\n des: 'go to next page',\n cat: 'Results'\n },\n 'o': {\n key: 'o',\n fun: openResult(false),\n des: 'open search result',\n cat: 'Results'\n },\n 'p': {\n key: 'p',\n fun: GoToPreviousPage(),\n des: 'go to previous page',\n cat: 'Results'\n },\n 'r': {\n key: 'r',\n fun: reloadPage,\n des: 'reload page from the server',\n cat: 'Control'\n },\n 't': {\n key: 't',\n fun: openResult(true),\n des: 'open the result in a new tab',\n cat: 'Results'\n },\n };\n var keyBindingLayouts = {\n\n \"default\": Object.assign(\n { /* SearXNG layout */\n 'ArrowLeft': {\n key: '←',\n fun: highlightResult('up'),\n des: 'select previous search result',\n cat: 'Results'\n },\n 'ArrowRight': {\n key: '→',\n fun: highlightResult('down'),\n des: 'select next search result',\n cat: 'Results'\n },\n }, baseKeyBinding),\n\n 'vim': Object.assign(\n { /* Vim-like Key Layout. */\n 'b': {\n key: 'b',\n fun: scrollPage(-window.innerHeight),\n des: 'scroll one page up',\n cat: 'Navigation'\n },\n 'f': {\n key: 'f',\n fun: scrollPage(window.innerHeight),\n des: 'scroll one page down',\n cat: 'Navigation'\n },\n 'u': {\n key: 'u',\n fun: scrollPage(-window.innerHeight / 2),\n des: 'scroll half a page up',\n cat: 'Navigation'\n },\n 'd': {\n key: 'd',\n fun: scrollPage(window.innerHeight / 2),\n des: 'scroll half a page down',\n cat: 'Navigation'\n },\n 'g': {\n key: 'g',\n fun: scrollPageTo(-document.body.scrollHeight, 'top'),\n des: 'scroll to the top of the page',\n cat: 'Navigation'\n },\n 'v': {\n key: 'v',\n fun: scrollPageTo(document.body.scrollHeight, 'bottom'),\n des: 'scroll to the bottom of the page',\n cat: 'Navigation'\n },\n 'k': {\n key: 'k',\n fun: highlightResult('up'),\n des: 'select previous search result',\n cat: 'Results'\n },\n 'j': {\n key: 'j',\n fun: highlightResult('down'),\n des: 'select next search result',\n cat: 'Results'\n },\n 'y': {\n key: 'y',\n fun: copyURLToClipboard,\n des: 'copy url of the selected result to the clipboard',\n cat: 'Results'\n },\n }, baseKeyBinding)\n }\n\n var keyBindings = keyBindingLayouts[searxng.settings.hotkeys] || keyBindingLayouts.default;\n\n searxng.on(document, \"keydown\", function (e) {\n // check for modifiers so we don't break browser's hotkeys\n if (\n Object.prototype.hasOwnProperty.call(keyBindings, e.key)\n && !e.ctrlKey && !e.altKey\n && !e.shiftKey && !e.metaKey\n ) {\n var tagName = e.target.tagName.toLowerCase();\n if (e.key === 'Escape') {\n keyBindings[e.key].fun(e);\n } else {\n if (e.target === document.body || tagName === 'a' || tagName === 'button') {\n e.preventDefault();\n keyBindings[e.key].fun();\n }\n }\n }\n });\n\n function highlightResult (which) {\n return function (noScroll, keepFocus) {\n var current = document.querySelector('.result[data-vim-selected]'),\n effectiveWhich = which;\n if (current === null) {\n // no selection : choose the first one\n current = document.querySelector('.result');\n if (current === null) {\n // no first one : there are no results\n return;\n }\n // replace up/down actions by selecting first one\n if (which === \"down\" || which === \"up\") {\n effectiveWhich = current;\n }\n }\n\n var next, results = document.querySelectorAll('.result');\n results = Array.from(results); // convert NodeList to Array for further use\n\n if (typeof effectiveWhich !== 'string') {\n next = effectiveWhich;\n } else {\n switch (effectiveWhich) {\n case 'visible':\n var top = document.documentElement.scrollTop || document.body.scrollTop;\n var bot = top + document.documentElement.clientHeight;\n\n for (var i = 0; i < results.length; i++) {\n next = results[i];\n var etop = next.offsetTop;\n var ebot = etop + next.clientHeight;\n\n if ((ebot <= bot) && (etop > top)) {\n break;\n }\n }\n break;\n case 'down':\n next = results[results.indexOf(current) + 1] || current;\n break;\n case 'up':\n next = results[results.indexOf(current) - 1] || current;\n break;\n case 'bottom':\n next = results[results.length - 1];\n break;\n case 'top':\n /* falls through */\n default:\n next = results[0];\n }\n }\n\n if (next) {\n current.removeAttribute('data-vim-selected');\n next.setAttribute('data-vim-selected', 'true');\n if (!keepFocus) {\n var link = next.querySelector('h3 a') || next.querySelector('a');\n if (link !== null) {\n link.focus();\n }\n }\n if (!noScroll) {\n scrollPageToSelected();\n }\n }\n };\n }\n\n function reloadPage () {\n document.location.reload(true);\n }\n\n function removeFocus (e) {\n const tagName = e.target.tagName.toLowerCase();\n if (document.activeElement && (tagName === 'input' || tagName === 'select' || tagName === 'textarea')) {\n document.activeElement.blur();\n } else {\n searxng.closeDetail();\n }\n }\n\n function pageButtonClick (css_selector) {\n return function () {\n var button = document.querySelector(css_selector);\n if (button) {\n button.click();\n }\n };\n }\n\n function GoToNextPage () {\n return pageButtonClick('nav#pagination .next_page button[type=\"submit\"]');\n }\n\n function GoToPreviousPage () {\n return pageButtonClick('nav#pagination .previous_page button[type=\"submit\"]');\n }\n\n function scrollPageToSelected () {\n var sel = document.querySelector('.result[data-vim-selected]');\n if (sel === null) {\n return;\n }\n var wtop = document.documentElement.scrollTop || document.body.scrollTop,\n wheight = document.documentElement.clientHeight,\n etop = sel.offsetTop,\n ebot = etop + sel.clientHeight,\n offset = 120;\n // first element ?\n if ((sel.previousElementSibling === null) && (ebot < wheight)) {\n // set to the top of page if the first element\n // is fully included in the viewport\n window.scroll(window.scrollX, 0);\n return;\n }\n if (wtop > (etop - offset)) {\n window.scroll(window.scrollX, etop - offset);\n } else {\n var wbot = wtop + wheight;\n if (wbot < (ebot + offset)) {\n window.scroll(window.scrollX, ebot - wheight + offset);\n }\n }\n }\n\n function scrollPage (amount) {\n return function () {\n window.scrollBy(0, amount);\n highlightResult('visible')();\n };\n }\n\n function scrollPageTo (position, nav) {\n return function () {\n window.scrollTo(0, position);\n highlightResult(nav)();\n };\n }\n\n function searchInputFocus () {\n window.scrollTo(0, 0);\n var q = document.querySelector('#q');\n q.focus();\n if (q.setSelectionRange) {\n var len = q.value.length;\n q.setSelectionRange(len, len);\n }\n }\n\n function openResult (newTab) {\n return function () {\n var link = document.querySelector('.result[data-vim-selected] h3 a');\n if (link === null) {\n link = document.querySelector('.result[data-vim-selected] > a');\n }\n if (link !== null) {\n var url = link.getAttribute('href');\n if (newTab) {\n window.open(url);\n } else {\n window.location.href = url;\n }\n }\n };\n }\n\n function initHelpContent (divElement) {\n var categories = {};\n\n for (var k in keyBindings) {\n var key = keyBindings[k];\n categories[key.cat] = categories[key.cat] || [];\n categories[key.cat].push(key);\n }\n\n var sorted = Object.keys(categories).sort(function (a, b) {\n return categories[b].length - categories[a].length;\n });\n\n if (sorted.length === 0) {\n return;\n }\n\n var html = '×';\n html += '

How to navigate SearXNG with hotkeys

';\n html += '';\n\n for (var i = 0; i < sorted.length; i++) {\n var cat = categories[sorted[i]];\n\n var lastCategory = i === (sorted.length - 1);\n var first = i % 2 === 0;\n\n if (first) {\n html += '';\n }\n html += ''; // col-sm-*\n\n if (!first || lastCategory) {\n html += ''; // row\n }\n }\n\n html += '
';\n\n html += '

' + cat[0].cat + '

';\n html += '
    ';\n\n for (var cj in cat) {\n html += '
  • ' + cat[cj].key + ' ' + cat[cj].des + '
  • ';\n }\n\n html += '
';\n html += '
';\n\n divElement.innerHTML = html;\n }\n\n function toggleHelp () {\n var helpPanel = document.querySelector('#vim-hotkeys-help');\n if (helpPanel === undefined || helpPanel === null) {\n // first call\n helpPanel = document.createElement('div');\n helpPanel.id = 'vim-hotkeys-help';\n helpPanel.className = 'dialog-modal';\n initHelpContent(helpPanel);\n var body = document.getElementsByTagName('body')[0];\n body.appendChild(helpPanel);\n } else {\n // toggle hidden\n helpPanel.classList.toggle('invisible');\n return;\n }\n }\n\n function copyURLToClipboard () {\n var currentUrlElement = document.querySelector('.result[data-vim-selected] h3 a');\n if (currentUrlElement === null) return;\n\n const url = currentUrlElement.getAttribute('href');\n navigator.clipboard.writeText(url);\n }\n\n searxng.scrollPageToSelected = scrollPageToSelected;\n searxng.selectNext = highlightResult('down');\n searxng.selectPrevious = highlightResult('up');\n});\n","/* SPDX-License-Identifier: AGPL-3.0-or-later */\n/* global L */\n(function (w, d, searxng) {\n 'use strict';\n\n searxng.ready(function () {\n searxng.on('.searxng_init_map', 'click', function (event) {\n // no more request\n this.classList.remove(\"searxng_init_map\");\n\n //\n var leaflet_target = this.dataset.leafletTarget;\n var map_lon = parseFloat(this.dataset.mapLon);\n var map_lat = parseFloat(this.dataset.mapLat);\n var map_zoom = parseFloat(this.dataset.mapZoom);\n var map_boundingbox = JSON.parse(this.dataset.mapBoundingbox);\n var map_geojson = JSON.parse(this.dataset.mapGeojson);\n\n searxng.loadStyle('css/leaflet.css');\n searxng.loadScript('js/leaflet.js', function () {\n var map_bounds = null;\n if (map_boundingbox) {\n var southWest = L.latLng(map_boundingbox[0], map_boundingbox[2]);\n var northEast = L.latLng(map_boundingbox[1], map_boundingbox[3]);\n map_bounds = L.latLngBounds(southWest, northEast);\n }\n\n // init map\n var map = L.map(leaflet_target);\n // create the tile layer with correct attribution\n var osmMapnikUrl = 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png';\n var osmMapnikAttrib = 'Map data © OpenStreetMap contributors';\n var osmMapnik = new L.TileLayer(osmMapnikUrl, {minZoom: 1, maxZoom: 19, attribution: osmMapnikAttrib});\n var osmWikimediaUrl = 'https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}.png';\n var osmWikimediaAttrib = 'Wikimedia maps | Maps data © OpenStreetMap contributors';\n var osmWikimedia = new L.TileLayer(osmWikimediaUrl, {minZoom: 1, maxZoom: 19, attribution: osmWikimediaAttrib});\n // init map view\n if (map_bounds) {\n // TODO hack: https://github.com/Leaflet/Leaflet/issues/2021\n // Still useful ?\n setTimeout(function () {\n map.fitBounds(map_bounds, {\n maxZoom: 17\n });\n }, 0);\n } else if (map_lon && map_lat) {\n if (map_zoom) {\n map.setView(new L.latLng(map_lat, map_lon), map_zoom);\n } else {\n map.setView(new L.latLng(map_lat, map_lon), 8);\n }\n }\n\n map.addLayer(osmMapnik);\n\n var baseLayers = {\n \"OSM Mapnik\": osmMapnik,\n \"OSM Wikimedia\": osmWikimedia,\n };\n\n L.control.layers(baseLayers).addTo(map);\n\n if (map_geojson) {\n L.geoJson(map_geojson).addTo(map);\n } /* else if(map_bounds) {\n L.rectangle(map_bounds, {color: \"#ff7800\", weight: 3, fill:false}).addTo(map);\n } */\n });\n\n // this event occur only once per element\n event.preventDefault();\n });\n });\n})(window, document, window.searxng);\n","/* SPDX-License-Identifier: AGPL-3.0-or-later */\n(function (w, d, searxng) {\n 'use strict';\n\n if (searxng.endpoint !== 'preferences') {\n return;\n }\n\n searxng.ready(function () {\n let engine_descriptions = null;\n function load_engine_descriptions () {\n if (engine_descriptions == null) {\n searxng.http(\"GET\", \"engine_descriptions.json\").then(function (content) {\n engine_descriptions = JSON.parse(content);\n for (const [engine_name, description] of Object.entries(engine_descriptions)) {\n let elements = d.querySelectorAll('[data-engine-name=\"' + engine_name + '\"] .engine-description');\n for (const element of elements) {\n let source = ' (' + searxng.settings.translations.Source + ': ' + description[1] + ')';\n element.innerHTML = description[0] + source;\n }\n }\n });\n }\n }\n\n for (const el of d.querySelectorAll('[data-engine-name]')) {\n searxng.on(el, 'mouseenter', load_engine_descriptions);\n }\n\n const enableAllEngines = d.querySelectorAll(\".enable-all-engines\");\n const disableAllEngines = d.querySelectorAll(\".disable-all-engines\");\n const engineToggles = d.querySelectorAll('tbody input[type=checkbox][class~=checkbox-onoff]');\n const toggleEngines = (enable) => {\n for (const el of engineToggles) {\n // check if element visible, so that only engines of the current category are modified\n if (el.offsetParent !== null) el.checked = !enable;\n }\n };\n for (const el of enableAllEngines) {\n searxng.on(el, 'click', () => toggleEngines(true));\n }\n for (const el of disableAllEngines) {\n searxng.on(el, 'click', () => toggleEngines(false));\n }\n\n const copyHashButton = d.querySelector(\"#copy-hash\");\n searxng.on(copyHashButton, 'click', (e) => {\n e.preventDefault();\n navigator.clipboard.writeText(copyHashButton.dataset.hash);\n copyHashButton.innerText = copyHashButton.dataset.copiedText;\n });\n });\n})(window, document, window.searxng);\n","/*!\n * swiped-events.js - v@version@\n * Pure JavaScript swipe events\n * https://github.com/john-doherty/swiped-events\n * @inspiration https://stackoverflow.com/questions/16348031/disable-scrolling-when-touch-moving-certain-element\n * @author John Doherty \n * @license MIT\n */\n(function (window, document) {\n\n 'use strict';\n\n // patch CustomEvent to allow constructor creation (IE/Chrome)\n if (typeof window.CustomEvent !== 'function') {\n\n window.CustomEvent = function (event, params) {\n\n params = params || { bubbles: false, cancelable: false, detail: undefined };\n\n var evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt;\n };\n\n window.CustomEvent.prototype = window.Event.prototype;\n }\n\n document.addEventListener('touchstart', handleTouchStart, false);\n document.addEventListener('touchmove', handleTouchMove, false);\n document.addEventListener('touchend', handleTouchEnd, false);\n\n var xDown = null;\n var yDown = null;\n var xDiff = null;\n var yDiff = null;\n var timeDown = null;\n var startEl = null;\n var touchCount = 0;\n\n /**\n * Fires swiped event if swipe detected on touchend\n * @param {object} e - browser event object\n * @returns {void}\n */\n function handleTouchEnd(e) {\n\n // if the user released on a different target, cancel!\n if (startEl !== e.target) return;\n\n var swipeThreshold = parseInt(getNearestAttribute(startEl, 'data-swipe-threshold', '20'), 10); // default 20 units\n var swipeUnit = getNearestAttribute(startEl, 'data-swipe-unit', 'px'); // default px\n var swipeTimeout = parseInt(getNearestAttribute(startEl, 'data-swipe-timeout', '500'), 10); // default 500ms\n var timeDiff = Date.now() - timeDown;\n var eventType = '';\n var changedTouches = e.changedTouches || e.touches || [];\n\n if (swipeUnit === 'vh') {\n swipeThreshold = Math.round((swipeThreshold / 100) * document.documentElement.clientHeight); // get percentage of viewport height in pixels\n }\n if (swipeUnit === 'vw') {\n swipeThreshold = Math.round((swipeThreshold / 100) * document.documentElement.clientWidth); // get percentage of viewport height in pixels\n }\n\n if (Math.abs(xDiff) > Math.abs(yDiff)) { // most significant\n if (Math.abs(xDiff) > swipeThreshold && timeDiff < swipeTimeout) {\n if (xDiff > 0) {\n eventType = 'swiped-left';\n }\n else {\n eventType = 'swiped-right';\n }\n }\n }\n else if (Math.abs(yDiff) > swipeThreshold && timeDiff < swipeTimeout) {\n if (yDiff > 0) {\n eventType = 'swiped-up';\n }\n else {\n eventType = 'swiped-down';\n }\n }\n\n if (eventType !== '') {\n\n var eventData = {\n dir: eventType.replace(/swiped-/, ''),\n touchType: (changedTouches[0] || {}).touchType || 'direct',\n fingers: touchCount, // Number of fingers used\n xStart: parseInt(xDown, 10),\n xEnd: parseInt((changedTouches[0] || {}).clientX || -1, 10),\n yStart: parseInt(yDown, 10),\n yEnd: parseInt((changedTouches[0] || {}).clientY || -1, 10)\n };\n\n // fire `swiped` event event on the element that started the swipe\n startEl.dispatchEvent(new CustomEvent('swiped', { bubbles: true, cancelable: true, detail: eventData }));\n\n // fire `swiped-dir` event on the element that started the swipe\n startEl.dispatchEvent(new CustomEvent(eventType, { bubbles: true, cancelable: true, detail: eventData }));\n }\n\n // reset values\n xDown = null;\n yDown = null;\n timeDown = null;\n }\n /**\n * Records current location on touchstart event\n * @param {object} e - browser event object\n * @returns {void}\n */\n function handleTouchStart(e) {\n\n // if the element has data-swipe-ignore=\"true\" we stop listening for swipe events\n if (e.target.getAttribute('data-swipe-ignore') === 'true') return;\n\n startEl = e.target;\n\n timeDown = Date.now();\n xDown = e.touches[0].clientX;\n yDown = e.touches[0].clientY;\n xDiff = 0;\n yDiff = 0;\n touchCount = e.touches.length;\n }\n\n /**\n * Records location diff in px on touchmove event\n * @param {object} e - browser event object\n * @returns {void}\n */\n function handleTouchMove(e) {\n\n if (!xDown || !yDown) return;\n\n var xUp = e.touches[0].clientX;\n var yUp = e.touches[0].clientY;\n\n xDiff = xDown - xUp;\n yDiff = yDown - yUp;\n }\n\n /**\n * Gets attribute off HTML element or nearest parent\n * @param {object} el - HTML element to retrieve attribute from\n * @param {string} attributeName - name of the attribute\n * @param {any} defaultValue - default value to return if no match found\n * @returns {any} attribute value or defaultValue\n */\n function getNearestAttribute(el, attributeName, defaultValue) {\n\n // walk up the dom tree looking for attributeName\n while (el && el !== document.documentElement) {\n\n var attributeValue = el.getAttribute(attributeName);\n\n if (attributeValue) {\n return attributeValue;\n }\n\n el = el.parentNode;\n }\n\n return defaultValue;\n }\n\n}(window, document));\n","/* SPDX-License-Identifier: AGPL-3.0-or-later */\n\nimport \"../../../node_modules/swiped-events/src/swiped-events.js\";\n\n(function (w, d, searxng) {\n 'use strict';\n\n if (searxng.endpoint !== 'results') {\n return;\n }\n\n searxng.ready(function () {\n d.querySelectorAll('#urls img').forEach(\n img =>\n img.addEventListener(\n 'error', () => {\n // console.log(\"ERROR can't load: \" + img.src);\n img.src = window.searxng.settings.theme_static_path + \"/img/img_load_error.svg\";\n },\n {once: true}\n ));\n\n if (d.querySelector('#search_url button#copy_url')) {\n d.querySelector('#search_url button#copy_url').style.display = \"block\";\n }\n\n searxng.on('.btn-collapse', 'click', function () {\n var btnLabelCollapsed = this.getAttribute('data-btn-text-collapsed');\n var btnLabelNotCollapsed = this.getAttribute('data-btn-text-not-collapsed');\n var target = this.getAttribute('data-target');\n var targetElement = d.querySelector(target);\n var html = this.innerHTML;\n if (this.classList.contains('collapsed')) {\n html = html.replace(btnLabelCollapsed, btnLabelNotCollapsed);\n } else {\n html = html.replace(btnLabelNotCollapsed, btnLabelCollapsed);\n }\n this.innerHTML = html;\n this.classList.toggle('collapsed');\n targetElement.classList.toggle('invisible');\n });\n\n searxng.on('.media-loader', 'click', function () {\n var target = this.getAttribute('data-target');\n var iframe_load = d.querySelector(target + ' > iframe');\n var srctest = iframe_load.getAttribute('src');\n if (srctest === null || srctest === undefined || srctest === false) {\n iframe_load.setAttribute('src', iframe_load.getAttribute('data-src'));\n }\n });\n\n searxng.on('#copy_url', 'click', function () {\n var target = this.parentElement.querySelector('pre');\n navigator.clipboard.writeText(target.innerText);\n this.innerText = this.dataset.copiedText;\n });\n\n // searxng.selectImage (gallery)\n // -----------------------------\n\n // setTimeout() ID, needed to cancel *last* loadImage\n let imgTimeoutID;\n\n // progress spinner, while an image is loading\n const imgLoaderSpinner = d.createElement('div');\n imgLoaderSpinner.classList.add('loader');\n\n // singleton image object, which is used for all loading processes of a\n // detailed image\n const imgLoader = new Image();\n\n const loadImage = (imgSrc, onSuccess) => {\n // if defered image load exists, stop defered task.\n if (imgTimeoutID) clearTimeout(imgTimeoutID);\n\n // defer load of the detail image for 1 sec\n imgTimeoutID = setTimeout(() => {\n imgLoader.src = imgSrc;\n }, 1000);\n\n // set handlers in the on-properties\n imgLoader.onload = () => {\n onSuccess();\n imgLoaderSpinner.remove();\n };\n imgLoader.onerror = () => {\n imgLoaderSpinner.remove();\n };\n };\n\n searxng.selectImage = (resultElement) => {\n\n // add a class that can be evaluated in the CSS and indicates that the\n // detail view is open\n d.getElementById('results').classList.add('image-detail-open');\n\n // add a hash to the browser history so that pressing back doesn't return\n // to the previous page this allows us to dismiss the image details on\n // pressing the back button on mobile devices\n window.location.hash = '#image-viewer';\n\n searxng.scrollPageToSelected();\n\n // if there is none element given by the caller, stop here\n if (!resultElement) return;\n\n // find object in the element, if there is none, stop here.\n const img = resultElement.querySelector('.result-images-source img');\n if (!img) return;\n\n // \n const src = img.getAttribute('data-src');\n\n // already loaded high-res image or no high-res image available\n if (!src) return;\n\n // use the image thumbnail until the image is fully loaded\n const thumbnail = resultElement.querySelector('.image_thumbnail');\n img.src = thumbnail.src;\n\n // show a progress spinner\n const detailElement = resultElement.querySelector('.detail');\n detailElement.appendChild(imgLoaderSpinner);\n\n // load full size image in background\n loadImage(src, () => {\n // after the singelton loadImage has loaded the detail image into the\n // cache, it can be used in the origin as src property.\n img.src = src;\n img.removeAttribute('data-src');\n });\n };\n\n searxng.closeDetail = function () {\n d.getElementById('results').classList.remove('image-detail-open');\n // remove #image-viewer hash from url by navigating back\n if (window.location.hash == '#image-viewer') window.history.back();\n searxng.scrollPageToSelected();\n };\n searxng.on('.result-detail-close', 'click', e => {\n e.preventDefault();\n searxng.closeDetail();\n });\n searxng.on('.result-detail-previous', 'click', e => {\n e.preventDefault();\n searxng.selectPrevious(false);\n });\n searxng.on('.result-detail-next', 'click', e => {\n e.preventDefault();\n searxng.selectNext(false);\n });\n\n // listen for the back button to be pressed and dismiss the image details when called\n window.addEventListener('hashchange', () => {\n if (window.location.hash != '#image-viewer') searxng.closeDetail();\n });\n\n d.querySelectorAll('.swipe-horizontal').forEach(\n obj => {\n obj.addEventListener('swiped-left', function () {\n searxng.selectNext(false);\n });\n obj.addEventListener('swiped-right', function () {\n searxng.selectPrevious(false);\n });\n }\n );\n\n w.addEventListener('scroll', function () {\n var e = d.getElementById('backToTop'),\n scrollTop = document.documentElement.scrollTop || document.body.scrollTop,\n results = d.getElementById('results');\n if (e !== null) {\n if (scrollTop >= 100) {\n results.classList.add('scrolling');\n } else {\n results.classList.remove('scrolling');\n }\n }\n }, true);\n\n });\n\n})(window, document, window.searxng);\n","(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.AutoComplete = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i @baptistedonaux\n */\nvar AutoComplete = /** @class */ (function () {\n // Constructor\n function AutoComplete(params, selector) {\n if (params === void 0) { params = {}; }\n if (selector === void 0) { selector = \"[data-autocomplete]\"; }\n if (Array.isArray(selector)) {\n selector.forEach(function (s) {\n new AutoComplete(params, s);\n });\n }\n else if (typeof selector == \"string\") {\n var elements = document.querySelectorAll(selector);\n Array.prototype.forEach.call(elements, function (input) {\n new AutoComplete(params, input);\n });\n }\n else {\n var specificParams = AutoComplete.merge(AutoComplete.defaults, params, {\n DOMResults: document.createElement(\"div\")\n });\n AutoComplete.prototype.create(specificParams, selector);\n return specificParams;\n }\n }\n AutoComplete.prototype.create = function (params, element) {\n params.Input = element;\n if (params.Input.nodeName.match(/^INPUT$/i) && (params.Input.hasAttribute(\"type\") === false || params.Input.getAttribute(\"type\").match(/^TEXT|SEARCH$/i))) {\n params.Input.setAttribute(\"autocomplete\", \"off\");\n params._Position(params);\n params.Input.parentNode.appendChild(params.DOMResults);\n params.$Listeners = {\n blur: params._Blur.bind(params),\n destroy: AutoComplete.prototype.destroy.bind(null, params),\n focus: params._Focus.bind(params),\n keyup: AutoComplete.prototype.event.bind(null, params, EventType.KEYUP),\n keydown: AutoComplete.prototype.event.bind(null, params, EventType.KEYDOWN),\n position: params._Position.bind(params)\n };\n for (var event in params.$Listeners) {\n params.Input.addEventListener(event, params.$Listeners[event]);\n }\n }\n };\n AutoComplete.prototype.getEventsByType = function (params, type) {\n var mappings = {};\n for (var key in params.KeyboardMappings) {\n var event = EventType.KEYUP;\n if (params.KeyboardMappings[key].Event !== undefined) {\n event = params.KeyboardMappings[key].Event;\n }\n if (event == type) {\n mappings[key] = params.KeyboardMappings[key];\n }\n }\n return mappings;\n };\n AutoComplete.prototype.event = function (params, type, event) {\n var eventIdentifier = function (condition) {\n if ((match === true && mapping.Operator == ConditionOperator.AND) || (match === false && mapping.Operator == ConditionOperator.OR)) {\n condition = AutoComplete.merge({\n Not: false\n }, condition);\n if (condition.hasOwnProperty(\"Is\")) {\n if (condition.Is == event.keyCode) {\n match = !condition.Not;\n }\n else {\n match = condition.Not;\n }\n }\n else if (condition.hasOwnProperty(\"From\") && condition.hasOwnProperty(\"To\")) {\n if (event.keyCode >= condition.From && event.keyCode <= condition.To) {\n match = !condition.Not;\n }\n else {\n match = condition.Not;\n }\n }\n }\n };\n for (var name in AutoComplete.prototype.getEventsByType(params, type)) {\n var mapping = AutoComplete.merge({\n Operator: ConditionOperator.AND\n }, params.KeyboardMappings[name]), match = ConditionOperator.AND == mapping.Operator;\n mapping.Conditions.forEach(eventIdentifier);\n if (match === true) {\n mapping.Callback.call(params, event);\n }\n }\n };\n AutoComplete.prototype.makeRequest = function (params, callback, callbackErr) {\n var propertyHttpHeaders = Object.getOwnPropertyNames(params.HttpHeaders), request = new XMLHttpRequest(), method = params._HttpMethod(), url = params._Url(), queryParams = params._Pre(), queryParamsStringify = encodeURIComponent(params._QueryArg()) + \"=\" + encodeURIComponent(queryParams);\n if (method.match(/^GET$/i)) {\n if (url.indexOf(\"?\") !== -1) {\n url += \"&\" + queryParamsStringify;\n }\n else {\n url += \"?\" + queryParamsStringify;\n }\n }\n request.open(method, url, true);\n for (var i = propertyHttpHeaders.length - 1; i >= 0; i--) {\n request.setRequestHeader(propertyHttpHeaders[i], params.HttpHeaders[propertyHttpHeaders[i]]);\n }\n request.onreadystatechange = function () {\n if (request.readyState == 4 && request.status == 200) {\n params.$Cache[queryParams] = request.response;\n callback(request.response);\n }\n else if (request.status >= 400) {\n callbackErr();\n }\n };\n return request;\n };\n AutoComplete.prototype.ajax = function (params, request, timeout) {\n if (timeout === void 0) { timeout = true; }\n if (params.$AjaxTimer) {\n window.clearTimeout(params.$AjaxTimer);\n }\n if (timeout === true) {\n params.$AjaxTimer = window.setTimeout(AutoComplete.prototype.ajax.bind(null, params, request, false), params.Delay);\n }\n else {\n if (params.Request) {\n params.Request.abort();\n }\n params.Request = request;\n params.Request.send(params._QueryArg() + \"=\" + params._Pre());\n }\n };\n AutoComplete.prototype.cache = function (params, callback, callbackErr) {\n var response = params._Cache(params._Pre());\n if (response === undefined) {\n var request = AutoComplete.prototype.makeRequest(params, callback, callbackErr);\n AutoComplete.prototype.ajax(params, request);\n }\n else {\n callback(response);\n }\n };\n AutoComplete.prototype.destroy = function (params) {\n for (var event in params.$Listeners) {\n params.Input.removeEventListener(event, params.$Listeners[event]);\n }\n params.DOMResults.parentNode.removeChild(params.DOMResults);\n };\n AutoComplete.merge = function () {\n var merge = {}, tmp;\n for (var i = 0; i < arguments.length; i++) {\n for (tmp in arguments[i]) {\n merge[tmp] = arguments[i][tmp];\n }\n }\n return merge;\n };\n AutoComplete.defaults = {\n Delay: 150,\n EmptyMessage: \"No result here\",\n Highlight: {\n getRegex: function (value) {\n return new RegExp(value, \"ig\");\n },\n transform: function (value) {\n return \"\" + value + \"\";\n }\n },\n HttpHeaders: {\n \"Content-type\": \"application/x-www-form-urlencoded\"\n },\n Limit: 0,\n MinChars: 0,\n HttpMethod: \"GET\",\n QueryArg: \"q\",\n Url: null,\n KeyboardMappings: {\n \"Enter\": {\n Conditions: [{\n Is: 13,\n Not: false\n }],\n Callback: function (event) {\n if (this.DOMResults.getAttribute(\"class\").indexOf(\"open\") != -1) {\n var liActive = this.DOMResults.querySelector(\"li.active\");\n if (liActive !== null) {\n event.preventDefault();\n this._Select(liActive);\n this.DOMResults.setAttribute(\"class\", \"autocomplete\");\n }\n }\n },\n Operator: ConditionOperator.AND,\n Event: EventType.KEYDOWN\n },\n \"KeyUpAndDown_down\": {\n Conditions: [{\n Is: 38,\n Not: false\n },\n {\n Is: 40,\n Not: false\n }],\n Callback: function (event) {\n event.preventDefault();\n },\n Operator: ConditionOperator.OR,\n Event: EventType.KEYDOWN\n },\n \"KeyUpAndDown_up\": {\n Conditions: [{\n Is: 38,\n Not: false\n },\n {\n Is: 40,\n Not: false\n }],\n Callback: function (event) {\n event.preventDefault();\n var first = this.DOMResults.querySelector(\"li:first-child:not(.locked)\"), last = this.DOMResults.querySelector(\"li:last-child:not(.locked)\"), active = this.DOMResults.querySelector(\"li.active\");\n if (active) {\n var currentIndex = Array.prototype.indexOf.call(active.parentNode.children, active), position = currentIndex + (event.keyCode - 39), lisCount = this.DOMResults.getElementsByTagName(\"li\").length;\n if (position < 0) {\n position = lisCount - 1;\n }\n else if (position >= lisCount) {\n position = 0;\n }\n active.classList.remove(\"active\");\n active.parentElement.children.item(position).classList.add(\"active\");\n }\n else if (last && event.keyCode == 38) {\n last.classList.add(\"active\");\n }\n else if (first) {\n first.classList.add(\"active\");\n }\n },\n Operator: ConditionOperator.OR,\n Event: EventType.KEYUP\n },\n \"AlphaNum\": {\n Conditions: [{\n Is: 13,\n Not: true\n }, {\n From: 35,\n To: 40,\n Not: true\n }],\n Callback: function () {\n var oldValue = this.Input.getAttribute(\"data-autocomplete-old-value\"), currentValue = this._Pre();\n if (currentValue !== \"\" && currentValue.length >= this._MinChars()) {\n if (!oldValue || currentValue != oldValue) {\n this.DOMResults.setAttribute(\"class\", \"autocomplete open\");\n }\n AutoComplete.prototype.cache(this, function (response) {\n this._Render(this._Post(response));\n this._Open();\n }.bind(this), this._Error);\n }\n else {\n this._Close();\n }\n },\n Operator: ConditionOperator.AND,\n Event: EventType.KEYUP\n }\n },\n DOMResults: null,\n Request: null,\n Input: null,\n /**\n * Return the message when no result returns\n */\n _EmptyMessage: function () {\n var emptyMessage = \"\";\n if (this.Input.hasAttribute(\"data-autocomplete-empty-message\")) {\n emptyMessage = this.Input.getAttribute(\"data-autocomplete-empty-message\");\n }\n else if (this.EmptyMessage !== false) {\n emptyMessage = this.EmptyMessage;\n }\n else {\n emptyMessage = \"\";\n }\n return emptyMessage;\n },\n /**\n * Returns the maximum number of results\n */\n _Limit: function () {\n var limit = this.Input.getAttribute(\"data-autocomplete-limit\");\n if (isNaN(limit) || limit === null) {\n return this.Limit;\n }\n return parseInt(limit, 10);\n },\n /**\n * Returns the minimum number of characters entered before firing ajax\n */\n _MinChars: function () {\n var minchars = this.Input.getAttribute(\"data-autocomplete-minchars\");\n if (isNaN(minchars) || minchars === null) {\n return this.MinChars;\n }\n return parseInt(minchars, 10);\n },\n /**\n * Apply transformation on labels response\n */\n _Highlight: function (label) {\n return label.replace(this.Highlight.getRegex(this._Pre()), this.Highlight.transform);\n },\n /**\n * Returns the HHTP method to use\n */\n _HttpMethod: function () {\n if (this.Input.hasAttribute(\"data-autocomplete-method\")) {\n return this.Input.getAttribute(\"data-autocomplete-method\");\n }\n return this.HttpMethod;\n },\n /**\n * Returns the query param to use\n */\n _QueryArg: function () {\n if (this.Input.hasAttribute(\"data-autocomplete-param-name\")) {\n return this.Input.getAttribute(\"data-autocomplete-param-name\");\n }\n return this.QueryArg;\n },\n /**\n * Returns the URL to use for AJAX request\n */\n _Url: function () {\n if (this.Input.hasAttribute(\"data-autocomplete\")) {\n return this.Input.getAttribute(\"data-autocomplete\");\n }\n return this.Url;\n },\n /**\n * Manage the close\n */\n _Blur: function (now) {\n if (now === void 0) { now = false; }\n if (now) {\n this._Close();\n }\n else {\n var params = this;\n setTimeout(function () {\n params._Blur(true);\n }, 150);\n }\n },\n /**\n * Manage the cache\n */\n _Cache: function (value) {\n return this.$Cache[value];\n },\n /**\n * Manage the open\n */\n _Focus: function () {\n var oldValue = this.Input.getAttribute(\"data-autocomplete-old-value\");\n if ((!oldValue || this.Input.value != oldValue) && this._MinChars() <= this.Input.value.length) {\n this.DOMResults.setAttribute(\"class\", \"autocomplete open\");\n }\n },\n /**\n * Bind all results item if one result is opened\n */\n _Open: function () {\n var params = this;\n Array.prototype.forEach.call(this.DOMResults.getElementsByTagName(\"li\"), function (li) {\n if (li.getAttribute(\"class\") != \"locked\") {\n li.onclick = function () {\n params._Select(li);\n };\n }\n });\n },\n _Close: function () {\n this.DOMResults.setAttribute(\"class\", \"autocomplete\");\n },\n /**\n * Position the results HTML element\n */\n _Position: function () {\n this.DOMResults.setAttribute(\"class\", \"autocomplete\");\n this.DOMResults.setAttribute(\"style\", \"top:\" + (this.Input.offsetTop + this.Input.offsetHeight) + \"px;left:\" + this.Input.offsetLeft + \"px;width:\" + this.Input.clientWidth + \"px;\");\n },\n /**\n * Execute the render of results DOM element\n */\n _Render: function (response) {\n var ul;\n if (typeof response == \"string\") {\n ul = this._RenderRaw(response);\n }\n else {\n ul = this._RenderResponseItems(response);\n }\n if (this.DOMResults.hasChildNodes()) {\n this.DOMResults.removeChild(this.DOMResults.childNodes[0]);\n }\n this.DOMResults.appendChild(ul);\n },\n /**\n * ResponseItems[] rendering\n */\n _RenderResponseItems: function (response) {\n var ul = document.createElement(\"ul\"), li = document.createElement(\"li\"), limit = this._Limit();\n // Order\n if (limit < 0) {\n response = response.reverse();\n }\n else if (limit === 0) {\n limit = response.length;\n }\n for (var item = 0; item < Math.min(Math.abs(limit), response.length); item++) {\n li.innerHTML = response[item].Label;\n li.setAttribute(\"data-autocomplete-value\", response[item].Value);\n ul.appendChild(li);\n li = document.createElement(\"li\");\n }\n return ul;\n },\n /**\n * string response rendering (RAW HTML)\n */\n _RenderRaw: function (response) {\n var ul = document.createElement(\"ul\"), li = document.createElement(\"li\");\n if (response.length > 0) {\n this.DOMResults.innerHTML = response;\n }\n else {\n var emptyMessage = this._EmptyMessage();\n if (emptyMessage !== \"\") {\n li.innerHTML = emptyMessage;\n li.setAttribute(\"class\", \"locked\");\n ul.appendChild(li);\n }\n }\n return ul;\n },\n /**\n * Deal with request response\n */\n _Post: function (response) {\n try {\n var returnResponse = [];\n //JSON return\n var json = JSON.parse(response);\n if (Object.keys(json).length === 0) {\n return \"\";\n }\n if (Array.isArray(json)) {\n for (var i = 0; i < Object.keys(json).length; i++) {\n returnResponse[returnResponse.length] = { \"Value\": json[i], \"Label\": this._Highlight(json[i]) };\n }\n }\n else {\n for (var value in json) {\n returnResponse.push({\n \"Value\": value,\n \"Label\": this._Highlight(json[value])\n });\n }\n }\n return returnResponse;\n }\n catch (event) {\n //HTML return\n return response;\n }\n },\n /**\n * Return the autocomplete value to send (before request)\n */\n _Pre: function () {\n return this.Input.value;\n },\n /**\n * Choice one result item\n */\n _Select: function (item) {\n if (item.hasAttribute(\"data-autocomplete-value\")) {\n this.Input.value = item.getAttribute(\"data-autocomplete-value\");\n }\n else {\n this.Input.value = item.innerHTML;\n }\n this.Input.setAttribute(\"data-autocomplete-old-value\", this.Input.value);\n },\n /**\n * Handle HTTP error on the request\n */\n _Error: function () {\n },\n $AjaxTimer: null,\n $Cache: {},\n $Listeners: {}\n };\n return AutoComplete;\n}());\nmodule.exports = AutoComplete;\n\n},{}]},{},[1])(1)\n});\n","/* SPDX-License-Identifier: AGPL-3.0-or-later */\n/* exported AutoComplete */\n\nimport AutoComplete from \"../../../node_modules/autocomplete-js/dist/autocomplete.js\";\n\n(function (w, d, searxng) {\n 'use strict';\n\n var qinput_id = \"q\", qinput;\n\n const isMobile = window.matchMedia(\"only screen and (max-width: 50em)\").matches;\n\n function submitIfQuery () {\n if (qinput.value.length > 0) {\n var search = document.getElementById('search');\n setTimeout(search.submit.bind(search), 0);\n }\n }\n\n function createClearButton (qinput) {\n var cs = document.getElementById('clear_search');\n var updateClearButton = function () {\n if (qinput.value.length === 0) {\n cs.classList.add(\"empty\");\n } else {\n cs.classList.remove(\"empty\");\n }\n };\n\n // update status, event listener\n updateClearButton();\n cs.addEventListener('click', function (ev) {\n qinput.value = '';\n qinput.focus();\n updateClearButton();\n ev.preventDefault();\n });\n qinput.addEventListener('input', updateClearButton, false);\n }\n\n searxng.ready(function () {\n qinput = d.getElementById(qinput_id);\n\n if (qinput !== null) {\n // clear button\n createClearButton(qinput);\n\n // autocompleter\n if (searxng.settings.autocomplete) {\n searxng.autocomplete = AutoComplete.call(w, {\n Url: \"./autocompleter\",\n EmptyMessage: searxng.settings.translations.no_item_found,\n HttpMethod: searxng.settings.method,\n HttpHeaders: {\n \"Content-type\": \"application/x-www-form-urlencoded\",\n \"X-Requested-With\": \"XMLHttpRequest\"\n },\n MinChars: searxng.settings.autocomplete_min,\n Delay: 300,\n _Position: function () {},\n _Open: function () {\n var params = this;\n Array.prototype.forEach.call(this.DOMResults.getElementsByTagName(\"li\"), function (li) {\n if (li.getAttribute(\"class\") != \"locked\") {\n li.onmousedown = function () {\n params._Select(li);\n };\n }\n });\n },\n _Select: function (item) {\n AutoComplete.defaults._Select.call(this, item);\n var form = item.closest('form');\n if (form) {\n form.submit();\n }\n },\n _MinChars: function () {\n if (this.Input.value.indexOf('!') > -1) {\n return 0;\n } else {\n return AutoComplete.defaults._MinChars.call(this);\n }\n },\n KeyboardMappings: Object.assign({}, AutoComplete.defaults.KeyboardMappings, {\n \"KeyUpAndDown_up\": Object.assign({}, AutoComplete.defaults.KeyboardMappings.KeyUpAndDown_up, {\n Callback: function (event) {\n AutoComplete.defaults.KeyboardMappings.KeyUpAndDown_up.Callback.call(this, event);\n var liActive = this.DOMResults.querySelector(\"li.active\");\n if (liActive) {\n AutoComplete.defaults._Select.call(this, liActive);\n }\n },\n }),\n \"Tab\": Object.assign({}, AutoComplete.defaults.KeyboardMappings.Enter, {\n Conditions: [{\n Is: 9,\n Not: false\n }],\n Callback: function (event) {\n if (this.DOMResults.getAttribute(\"class\").indexOf(\"open\") != -1) {\n var liActive = this.DOMResults.querySelector(\"li.active\");\n if (liActive !== null) {\n AutoComplete.defaults._Select.call(this, liActive);\n event.preventDefault();\n }\n }\n },\n })\n }),\n }, \"#\" + qinput_id);\n }\n\n /*\n Monkey patch autocomplete.js to fix a bug\n With the POST method, the values are not URL encoded: query like \"1 + 1\" are sent as \"1 1\" since space are URL encoded as plus.\n See HTML specifications:\n * HTML5: https://url.spec.whatwg.org/#concept-urlencoded-serializer\n * HTML4: https://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1\n\n autocomplete.js does not URL encode the name and values:\n https://github.com/autocompletejs/autocomplete.js/blob/87069524f3b95e68f1b54d8976868e0eac1b2c83/src/autocomplete.ts#L665\n\n The monkey patch overrides the compiled version of the ajax function.\n See https://github.com/autocompletejs/autocomplete.js/blob/87069524f3b95e68f1b54d8976868e0eac1b2c83/dist/autocomplete.js#L143-L158\n The patch changes only the line 156 from\n params.Request.send(params._QueryArg() + \"=\" + params._Pre());\n to\n params.Request.send(encodeURIComponent(params._QueryArg()) + \"=\" + encodeURIComponent(params._Pre()));\n\n Related to:\n * https://github.com/autocompletejs/autocomplete.js/issues/78\n * https://github.com/searxng/searxng/issues/1695\n */\n AutoComplete.prototype.ajax = function (params, request, timeout) {\n if (timeout === void 0) { timeout = true; }\n if (params.$AjaxTimer) {\n window.clearTimeout(params.$AjaxTimer);\n }\n if (timeout === true) {\n params.$AjaxTimer = window.setTimeout(AutoComplete.prototype.ajax.bind(null, params, request, false), params.Delay);\n } else {\n if (params.Request) {\n params.Request.abort();\n }\n params.Request = request;\n params.Request.send(encodeURIComponent(params._QueryArg()) + \"=\" + encodeURIComponent(params._Pre()));\n }\n };\n\n if (!isMobile && document.querySelector('.index_endpoint')) {\n qinput.focus();\n }\n }\n\n // Additionally to searching when selecting a new category, we also\n // automatically start a new search request when the user changes a search\n // filter (safesearch, time range or language) (this requires JavaScript\n // though)\n if (\n qinput !== null\n && searxng.settings.search_on_category_select\n // If .search_filters is undefined (invisible) we are on the homepage and\n // hence don't have to set any listeners\n && d.querySelector(\".search_filters\") != null\n ) {\n searxng.on(d.getElementById('safesearch'), 'change', submitIfQuery);\n searxng.on(d.getElementById('time_range'), 'change', submitIfQuery);\n searxng.on(d.getElementById('language'), 'change', submitIfQuery);\n }\n\n const categoryButtons = d.querySelectorAll(\"button.category_button\");\n for (let button of categoryButtons) {\n searxng.on(button, 'click', (event) => {\n if (event.shiftKey) {\n event.preventDefault();\n button.classList.toggle(\"selected\");\n return;\n }\n\n // manually deselect the old selection when a new category is selected\n const selectedCategories = d.querySelectorAll(\"button.category_button.selected\");\n for (let categoryButton of selectedCategories) {\n categoryButton.classList.remove(\"selected\");\n }\n button.classList.add(\"selected\");\n })\n }\n\n // override form submit action to update the actually selected categories\n const form = d.querySelector(\"#search\");\n if (form != null) {\n searxng.on(form, 'submit', (event) => {\n event.preventDefault();\n const categoryValuesInput = d.querySelector(\"#selected-categories\");\n if (categoryValuesInput) {\n let categoryValues = [];\n for (let categoryButton of categoryButtons) {\n if (categoryButton.classList.contains(\"selected\")) {\n categoryValues.push(categoryButton.name.replace(\"category_\", \"\"));\n }\n }\n categoryValuesInput.value = categoryValues.join(\",\");\n }\n form.submit();\n });\n }\n });\n\n})(window, document, window.searxng);\n"],"names":["w","ElementPrototype","selector","node","nodes","i","callbackSafe","callback","el","e","exception","searxng","obj","eventType","useCapture","found","method","url","data","resolve","reject","req","ex","src","path","id","s","newNode","referenceNode","getEndpoint","className","d","onlyImages","newLoadSpinner","loader","replaceChildrenWith","element","children","child","loadNextPage","form","formData","response","nextPageDoc","articleList","paginationElement","articleElement","err","intersectionObserveOptions","observedSelector","observer","entries","paginationEntry","isElementInDetail","getResultElement","isImageResult","resultElement","highlightResult","baseKeyBinding","removeFocus","copyURLToClipboard","toggleHelp","searchInputFocus","GoToNextPage","openResult","GoToPreviousPage","reloadPage","keyBindingLayouts","scrollPage","scrollPageTo","keyBindings","tagName","which","noScroll","keepFocus","current","effectiveWhich","next","results","top","bot","etop","ebot","link","scrollPageToSelected","pageButtonClick","css_selector","button","sel","wtop","wheight","offset","wbot","amount","position","nav","q","len","newTab","initHelpContent","divElement","categories","k","key","sorted","a","b","html","cat","lastCategory","first","cj","helpPanel","body","currentUrlElement","event","leaflet_target","map_lon","map_lat","map_zoom","map_boundingbox","map_geojson","map_bounds","southWest","northEast","map","osmMapnikUrl","osmMapnikAttrib","osmMapnik","osmWikimediaUrl","osmWikimediaAttrib","osmWikimedia","baseLayers","engine_descriptions","load_engine_descriptions","content","engine_name","description","elements","source","enableAllEngines","disableAllEngines","engineToggles","toggleEngines","enable","copyHashButton","window","document","params","evt","handleTouchStart","handleTouchMove","handleTouchEnd","xDown","yDown","xDiff","yDiff","timeDown","startEl","touchCount","swipeThreshold","getNearestAttribute","swipeUnit","swipeTimeout","timeDiff","changedTouches","eventData","xUp","yUp","attributeName","defaultValue","attributeValue","img","btnLabelCollapsed","btnLabelNotCollapsed","target","targetElement","iframe_load","srctest","imgTimeoutID","imgLoaderSpinner","imgLoader","loadImage","imgSrc","onSuccess","thumbnail","scrollTop","f","module","r","n","t","o","c","require","u","p","exports","ConditionOperator","EventType","AutoComplete","input","specificParams","type","mappings","eventIdentifier","condition","match","mapping","name","callbackErr","propertyHttpHeaders","request","queryParams","queryParamsStringify","timeout","merge","tmp","value","liActive","last","active","currentIndex","lisCount","oldValue","currentValue","emptyMessage","limit","minchars","label","now","li","ul","item","returnResponse","json","qinput_id","qinput","isMobile","submitIfQuery","search","createClearButton","cs","updateClearButton","ev","categoryButtons","selectedCategories","categoryButton","categoryValuesInput","categoryValues"],"mappings":"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","x_google_ignoreList":[5,7]} \ No newline at end of file +{"version":3,"file":"searxng.min.js","sources":["../../../../../client/simple/src/js/main/00_toolkit.js","../../../../../client/simple/src/js/main/infinite_scroll.js","../../../../../client/simple/src/js/main/keyboard.js","../../../../../client/simple/src/js/main/mapresult.js","../../../../../client/simple/src/js/main/preferences.js","../../../../../client/simple/node_modules/swiped-events/src/swiped-events.js","../../../../../client/simple/src/js/main/results.js","../../../../../client/simple/src/js/main/search.js"],"sourcesContent":["/**\n * @license\n * (C) Copyright Contributors to the SearXNG project.\n * (C) Copyright Contributors to the searx project (2014 - 2021).\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nwindow.searxng = (function (w, d) {\n\n 'use strict';\n\n // not invented here toolkit with bugs fixed elsewhere\n // purposes : be just good enough and as small as possible\n\n // from https://plainjs.com/javascript/events/live-binding-event-handlers-14/\n if (w.Element) {\n (function (ElementPrototype) {\n ElementPrototype.matches = ElementPrototype.matches ||\n ElementPrototype.matchesSelector ||\n ElementPrototype.webkitMatchesSelector ||\n ElementPrototype.msMatchesSelector ||\n function (selector) {\n var node = this, nodes = (node.parentNode || node.document).querySelectorAll(selector), i = -1;\n while (nodes[++i] && nodes[i] != node);\n return !!nodes[i];\n };\n })(Element.prototype);\n }\n\n function callbackSafe (callback, el, e) {\n try {\n callback.call(el, e);\n } catch (exception) {\n console.log(exception);\n }\n }\n\n var searxng = window.searxng || {};\n\n searxng.on = function (obj, eventType, callback, useCapture) {\n useCapture = useCapture || false;\n if (typeof obj !== 'string') {\n // obj HTMLElement, HTMLDocument\n obj.addEventListener(eventType, callback, useCapture);\n } else {\n // obj is a selector\n d.addEventListener(eventType, function (e) {\n var el = e.target || e.srcElement, found = false;\n while (el && el.matches && el !== d && !(found = el.matches(obj))) el = el.parentElement;\n if (found) callbackSafe(callback, el, e);\n }, useCapture);\n }\n };\n\n searxng.ready = function (callback) {\n if (document.readyState != 'loading') {\n callback.call(w);\n } else {\n w.addEventListener('DOMContentLoaded', callback.bind(w));\n }\n };\n\n searxng.http = function (method, url, data = null) {\n return new Promise(function (resolve, reject) {\n try {\n var req = new XMLHttpRequest();\n req.open(method, url, true);\n req.timeout = 20000;\n\n // On load\n req.onload = function () {\n if (req.status == 200) {\n resolve(req.response, req.responseType);\n } else {\n reject(Error(req.statusText));\n }\n };\n\n // Handle network errors\n req.onerror = function () {\n reject(Error(\"Network Error\"));\n };\n\n req.onabort = function () {\n reject(Error(\"Transaction is aborted\"));\n };\n\n req.ontimeout = function () {\n reject(Error(\"Timeout\"));\n }\n\n // Make the request\n if (data) {\n req.send(data)\n } else {\n req.send();\n }\n } catch (ex) {\n reject(ex);\n }\n });\n };\n\n searxng.loadStyle = function (src) {\n var path = searxng.settings.theme_static_path + \"/\" + src,\n id = \"style_\" + src.replace('.', '_'),\n s = d.getElementById(id);\n if (s === null) {\n s = d.createElement('link');\n s.setAttribute('id', id);\n s.setAttribute('rel', 'stylesheet');\n s.setAttribute('type', 'text/css');\n s.setAttribute('href', path);\n d.body.appendChild(s);\n }\n };\n\n searxng.loadScript = function (src, callback) {\n var path = searxng.settings.theme_static_path + \"/\" + src,\n id = \"script_\" + src.replace('.', '_'),\n s = d.getElementById(id);\n if (s === null) {\n s = d.createElement('script');\n s.setAttribute('id', id);\n s.setAttribute('src', path);\n s.onload = callback;\n s.onerror = function () {\n s.setAttribute('error', '1');\n };\n d.body.appendChild(s);\n } else if (!s.hasAttribute('error')) {\n try {\n callback.apply(s, []);\n } catch (exception) {\n console.log(exception);\n }\n } else {\n console.log(\"callback not executed : script '\" + path + \"' not loaded.\");\n }\n };\n\n searxng.insertBefore = function (newNode, referenceNode) {\n referenceNode.parentNode.insertBefore(newNode, referenceNode);\n };\n\n searxng.insertAfter = function (newNode, referenceNode) {\n referenceNode.parentNode.insertAfter(newNode, referenceNode.nextSibling);\n };\n\n searxng.on('.close', 'click', function () {\n this.parentNode.classList.add('invisible');\n });\n\n function getEndpoint () {\n for (var className of d.getElementsByTagName('body')[0].classList.values()) {\n if (className.endsWith('_endpoint')) {\n return className.split('_')[0];\n }\n }\n return '';\n }\n\n searxng.endpoint = getEndpoint();\n\n return searxng;\n})(window, document);\n","// SPDX-License-Identifier: AGPL-3.0-or-later\n\n/* global searxng */\n\nsearxng.ready(function () {\n 'use strict';\n\n searxng.infinite_scroll_supported = (\n 'IntersectionObserver' in window &&\n 'IntersectionObserverEntry' in window &&\n 'intersectionRatio' in window.IntersectionObserverEntry.prototype);\n\n if (searxng.endpoint !== 'results') {\n return;\n }\n\n if (!searxng.infinite_scroll_supported) {\n console.log('IntersectionObserver not supported');\n return;\n }\n\n let d = document;\n var onlyImages = d.getElementById('results').classList.contains('only_template_images');\n\n function newLoadSpinner () {\n var loader = d.createElement('div');\n loader.classList.add('loader');\n return loader;\n }\n\n function replaceChildrenWith (element, children) {\n element.textContent = '';\n children.forEach(child => element.appendChild(child));\n }\n\n function loadNextPage (callback) {\n var form = d.querySelector('#pagination form.next_page');\n if (!form) {\n return\n }\n replaceChildrenWith(d.querySelector('#pagination'), [ newLoadSpinner() ]);\n var formData = new FormData(form);\n searxng.http('POST', d.querySelector('#search').getAttribute('action'), formData).then(\n function (response) {\n var nextPageDoc = new DOMParser().parseFromString(response, 'text/html');\n var articleList = nextPageDoc.querySelectorAll('#urls article');\n var paginationElement = nextPageDoc.querySelector('#pagination');\n d.querySelector('#pagination').remove();\n if (articleList.length > 0 && !onlyImages) {\n // do not add
element when there are only images\n d.querySelector('#urls').appendChild(d.createElement('hr'));\n }\n articleList.forEach(articleElement => {\n d.querySelector('#urls').appendChild(articleElement);\n });\n if (paginationElement) {\n d.querySelector('#results').appendChild(paginationElement);\n callback();\n }\n }\n ).catch(\n function (err) {\n console.log(err);\n var e = d.createElement('div');\n e.textContent = searxng.settings.translations.error_loading_next_page;\n e.classList.add('dialog-error');\n e.setAttribute('role', 'alert');\n replaceChildrenWith(d.querySelector('#pagination'), [ e ]);\n }\n )\n }\n\n if (searxng.settings.infinite_scroll && searxng.infinite_scroll_supported) {\n const intersectionObserveOptions = {\n rootMargin: \"20rem\",\n };\n const observedSelector = 'article.result:last-child';\n const observer = new IntersectionObserver(entries => {\n const paginationEntry = entries[0];\n if (paginationEntry.isIntersecting) {\n observer.unobserve(paginationEntry.target);\n loadNextPage(() => observer.observe(d.querySelector(observedSelector), intersectionObserveOptions));\n }\n });\n observer.observe(d.querySelector(observedSelector), intersectionObserveOptions);\n }\n\n});\n","/* SPDX-License-Identifier: AGPL-3.0-or-later */\n/* global searxng */\n\nsearxng.ready(function () {\n\n function isElementInDetail (el) {\n while (el !== undefined) {\n if (el.classList.contains('detail')) {\n return true;\n }\n if (el.classList.contains('result')) {\n // we found a result, no need to go to the root of the document:\n // el is not inside a
element\n return false;\n }\n el = el.parentNode;\n }\n return false;\n }\n\n function getResultElement (el) {\n while (el !== undefined) {\n if (el.classList.contains('result')) {\n return el;\n }\n el = el.parentNode;\n }\n return undefined;\n }\n\n function isImageResult (resultElement) {\n return resultElement && resultElement.classList.contains('result-images');\n }\n\n searxng.on('.result', 'click', function (e) {\n if (!isElementInDetail(e.target)) {\n highlightResult(this)(true, true);\n let resultElement = getResultElement(e.target);\n if (isImageResult(resultElement)) {\n e.preventDefault();\n searxng.selectImage(resultElement);\n }\n }\n });\n\n searxng.on('.result a', 'focus', function (e) {\n if (!isElementInDetail(e.target)) {\n let resultElement = getResultElement(e.target);\n if (resultElement && resultElement.getAttribute(\"data-vim-selected\") === null) {\n highlightResult(resultElement)(true);\n }\n if (isImageResult(resultElement)) {\n searxng.selectImage(resultElement);\n }\n }\n }, true);\n\n /* common base for layouts */\n var baseKeyBinding = {\n 'Escape': {\n key: 'ESC',\n fun: removeFocus,\n des: 'remove focus from the focused input',\n cat: 'Control'\n },\n 'c': {\n key: 'c',\n fun: copyURLToClipboard,\n des: 'copy url of the selected result to the clipboard',\n cat: 'Results'\n },\n 'h': {\n key: 'h',\n fun: toggleHelp,\n des: 'toggle help window',\n cat: 'Other'\n },\n 'i': {\n key: 'i',\n fun: searchInputFocus,\n des: 'focus on the search input',\n cat: 'Control'\n },\n 'n': {\n key: 'n',\n fun: GoToNextPage(),\n des: 'go to next page',\n cat: 'Results'\n },\n 'o': {\n key: 'o',\n fun: openResult(false),\n des: 'open search result',\n cat: 'Results'\n },\n 'p': {\n key: 'p',\n fun: GoToPreviousPage(),\n des: 'go to previous page',\n cat: 'Results'\n },\n 'r': {\n key: 'r',\n fun: reloadPage,\n des: 'reload page from the server',\n cat: 'Control'\n },\n 't': {\n key: 't',\n fun: openResult(true),\n des: 'open the result in a new tab',\n cat: 'Results'\n },\n };\n var keyBindingLayouts = {\n\n \"default\": Object.assign(\n { /* SearXNG layout */\n 'ArrowLeft': {\n key: '←',\n fun: highlightResult('up'),\n des: 'select previous search result',\n cat: 'Results'\n },\n 'ArrowRight': {\n key: '→',\n fun: highlightResult('down'),\n des: 'select next search result',\n cat: 'Results'\n },\n }, baseKeyBinding),\n\n 'vim': Object.assign(\n { /* Vim-like Key Layout. */\n 'b': {\n key: 'b',\n fun: scrollPage(-window.innerHeight),\n des: 'scroll one page up',\n cat: 'Navigation'\n },\n 'f': {\n key: 'f',\n fun: scrollPage(window.innerHeight),\n des: 'scroll one page down',\n cat: 'Navigation'\n },\n 'u': {\n key: 'u',\n fun: scrollPage(-window.innerHeight / 2),\n des: 'scroll half a page up',\n cat: 'Navigation'\n },\n 'd': {\n key: 'd',\n fun: scrollPage(window.innerHeight / 2),\n des: 'scroll half a page down',\n cat: 'Navigation'\n },\n 'g': {\n key: 'g',\n fun: scrollPageTo(-document.body.scrollHeight, 'top'),\n des: 'scroll to the top of the page',\n cat: 'Navigation'\n },\n 'v': {\n key: 'v',\n fun: scrollPageTo(document.body.scrollHeight, 'bottom'),\n des: 'scroll to the bottom of the page',\n cat: 'Navigation'\n },\n 'k': {\n key: 'k',\n fun: highlightResult('up'),\n des: 'select previous search result',\n cat: 'Results'\n },\n 'j': {\n key: 'j',\n fun: highlightResult('down'),\n des: 'select next search result',\n cat: 'Results'\n },\n 'y': {\n key: 'y',\n fun: copyURLToClipboard,\n des: 'copy url of the selected result to the clipboard',\n cat: 'Results'\n },\n }, baseKeyBinding)\n }\n\n var keyBindings = keyBindingLayouts[searxng.settings.hotkeys] || keyBindingLayouts.default;\n\n searxng.on(document, \"keydown\", function (e) {\n // check for modifiers so we don't break browser's hotkeys\n if (\n Object.prototype.hasOwnProperty.call(keyBindings, e.key)\n && !e.ctrlKey && !e.altKey\n && !e.shiftKey && !e.metaKey\n ) {\n var tagName = e.target.tagName.toLowerCase();\n if (e.key === 'Escape') {\n keyBindings[e.key].fun(e);\n } else {\n if (e.target === document.body || tagName === 'a' || tagName === 'button') {\n e.preventDefault();\n keyBindings[e.key].fun();\n }\n }\n }\n });\n\n function highlightResult (which) {\n return function (noScroll, keepFocus) {\n var current = document.querySelector('.result[data-vim-selected]'),\n effectiveWhich = which;\n if (current === null) {\n // no selection : choose the first one\n current = document.querySelector('.result');\n if (current === null) {\n // no first one : there are no results\n return;\n }\n // replace up/down actions by selecting first one\n if (which === \"down\" || which === \"up\") {\n effectiveWhich = current;\n }\n }\n\n var next, results = document.querySelectorAll('.result');\n results = Array.from(results); // convert NodeList to Array for further use\n\n if (typeof effectiveWhich !== 'string') {\n next = effectiveWhich;\n } else {\n switch (effectiveWhich) {\n case 'visible':\n var top = document.documentElement.scrollTop || document.body.scrollTop;\n var bot = top + document.documentElement.clientHeight;\n\n for (var i = 0; i < results.length; i++) {\n next = results[i];\n var etop = next.offsetTop;\n var ebot = etop + next.clientHeight;\n\n if ((ebot <= bot) && (etop > top)) {\n break;\n }\n }\n break;\n case 'down':\n next = results[results.indexOf(current) + 1] || current;\n break;\n case 'up':\n next = results[results.indexOf(current) - 1] || current;\n break;\n case 'bottom':\n next = results[results.length - 1];\n break;\n case 'top':\n /* falls through */\n default:\n next = results[0];\n }\n }\n\n if (next) {\n current.removeAttribute('data-vim-selected');\n next.setAttribute('data-vim-selected', 'true');\n if (!keepFocus) {\n var link = next.querySelector('h3 a') || next.querySelector('a');\n if (link !== null) {\n link.focus();\n }\n }\n if (!noScroll) {\n scrollPageToSelected();\n }\n }\n };\n }\n\n function reloadPage () {\n document.location.reload(true);\n }\n\n function removeFocus (e) {\n const tagName = e.target.tagName.toLowerCase();\n if (document.activeElement && (tagName === 'input' || tagName === 'select' || tagName === 'textarea')) {\n document.activeElement.blur();\n } else {\n searxng.closeDetail();\n }\n }\n\n function pageButtonClick (css_selector) {\n return function () {\n var button = document.querySelector(css_selector);\n if (button) {\n button.click();\n }\n };\n }\n\n function GoToNextPage () {\n return pageButtonClick('nav#pagination .next_page button[type=\"submit\"]');\n }\n\n function GoToPreviousPage () {\n return pageButtonClick('nav#pagination .previous_page button[type=\"submit\"]');\n }\n\n function scrollPageToSelected () {\n var sel = document.querySelector('.result[data-vim-selected]');\n if (sel === null) {\n return;\n }\n var wtop = document.documentElement.scrollTop || document.body.scrollTop,\n wheight = document.documentElement.clientHeight,\n etop = sel.offsetTop,\n ebot = etop + sel.clientHeight,\n offset = 120;\n // first element ?\n if ((sel.previousElementSibling === null) && (ebot < wheight)) {\n // set to the top of page if the first element\n // is fully included in the viewport\n window.scroll(window.scrollX, 0);\n return;\n }\n if (wtop > (etop - offset)) {\n window.scroll(window.scrollX, etop - offset);\n } else {\n var wbot = wtop + wheight;\n if (wbot < (ebot + offset)) {\n window.scroll(window.scrollX, ebot - wheight + offset);\n }\n }\n }\n\n function scrollPage (amount) {\n return function () {\n window.scrollBy(0, amount);\n highlightResult('visible')();\n };\n }\n\n function scrollPageTo (position, nav) {\n return function () {\n window.scrollTo(0, position);\n highlightResult(nav)();\n };\n }\n\n function searchInputFocus () {\n window.scrollTo(0, 0);\n var q = document.querySelector('#q');\n q.focus();\n if (q.setSelectionRange) {\n var len = q.value.length;\n q.setSelectionRange(len, len);\n }\n }\n\n function openResult (newTab) {\n return function () {\n var link = document.querySelector('.result[data-vim-selected] h3 a');\n if (link === null) {\n link = document.querySelector('.result[data-vim-selected] > a');\n }\n if (link !== null) {\n var url = link.getAttribute('href');\n if (newTab) {\n window.open(url);\n } else {\n window.location.href = url;\n }\n }\n };\n }\n\n function initHelpContent (divElement) {\n var categories = {};\n\n for (var k in keyBindings) {\n var key = keyBindings[k];\n categories[key.cat] = categories[key.cat] || [];\n categories[key.cat].push(key);\n }\n\n var sorted = Object.keys(categories).sort(function (a, b) {\n return categories[b].length - categories[a].length;\n });\n\n if (sorted.length === 0) {\n return;\n }\n\n var html = '×';\n html += '

How to navigate SearXNG with hotkeys

';\n html += '';\n\n for (var i = 0; i < sorted.length; i++) {\n var cat = categories[sorted[i]];\n\n var lastCategory = i === (sorted.length - 1);\n var first = i % 2 === 0;\n\n if (first) {\n html += '';\n }\n html += ''; // col-sm-*\n\n if (!first || lastCategory) {\n html += ''; // row\n }\n }\n\n html += '
';\n\n html += '

' + cat[0].cat + '

';\n html += '
    ';\n\n for (var cj in cat) {\n html += '
  • ' + cat[cj].key + ' ' + cat[cj].des + '
  • ';\n }\n\n html += '
';\n html += '
';\n\n divElement.innerHTML = html;\n }\n\n function toggleHelp () {\n var helpPanel = document.querySelector('#vim-hotkeys-help');\n if (helpPanel === undefined || helpPanel === null) {\n // first call\n helpPanel = document.createElement('div');\n helpPanel.id = 'vim-hotkeys-help';\n helpPanel.className = 'dialog-modal';\n initHelpContent(helpPanel);\n var body = document.getElementsByTagName('body')[0];\n body.appendChild(helpPanel);\n } else {\n // toggle hidden\n helpPanel.classList.toggle('invisible');\n return;\n }\n }\n\n function copyURLToClipboard () {\n var currentUrlElement = document.querySelector('.result[data-vim-selected] h3 a');\n if (currentUrlElement === null) return;\n\n const url = currentUrlElement.getAttribute('href');\n navigator.clipboard.writeText(url);\n }\n\n searxng.scrollPageToSelected = scrollPageToSelected;\n searxng.selectNext = highlightResult('down');\n searxng.selectPrevious = highlightResult('up');\n});\n","/* SPDX-License-Identifier: AGPL-3.0-or-later */\n/* global L */\n(function (w, d, searxng) {\n 'use strict';\n\n searxng.ready(function () {\n searxng.on('.searxng_init_map', 'click', function (event) {\n // no more request\n this.classList.remove(\"searxng_init_map\");\n\n //\n var leaflet_target = this.dataset.leafletTarget;\n var map_lon = parseFloat(this.dataset.mapLon);\n var map_lat = parseFloat(this.dataset.mapLat);\n var map_zoom = parseFloat(this.dataset.mapZoom);\n var map_boundingbox = JSON.parse(this.dataset.mapBoundingbox);\n var map_geojson = JSON.parse(this.dataset.mapGeojson);\n\n searxng.loadStyle('css/leaflet.css');\n searxng.loadScript('js/leaflet.js', function () {\n var map_bounds = null;\n if (map_boundingbox) {\n var southWest = L.latLng(map_boundingbox[0], map_boundingbox[2]);\n var northEast = L.latLng(map_boundingbox[1], map_boundingbox[3]);\n map_bounds = L.latLngBounds(southWest, northEast);\n }\n\n // init map\n var map = L.map(leaflet_target);\n // create the tile layer with correct attribution\n var osmMapnikUrl = 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png';\n var osmMapnikAttrib = 'Map data © OpenStreetMap contributors';\n var osmMapnik = new L.TileLayer(osmMapnikUrl, {minZoom: 1, maxZoom: 19, attribution: osmMapnikAttrib});\n var osmWikimediaUrl = 'https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}.png';\n var osmWikimediaAttrib = 'Wikimedia maps | Maps data © OpenStreetMap contributors';\n var osmWikimedia = new L.TileLayer(osmWikimediaUrl, {minZoom: 1, maxZoom: 19, attribution: osmWikimediaAttrib});\n // init map view\n if (map_bounds) {\n // TODO hack: https://github.com/Leaflet/Leaflet/issues/2021\n // Still useful ?\n setTimeout(function () {\n map.fitBounds(map_bounds, {\n maxZoom: 17\n });\n }, 0);\n } else if (map_lon && map_lat) {\n if (map_zoom) {\n map.setView(new L.latLng(map_lat, map_lon), map_zoom);\n } else {\n map.setView(new L.latLng(map_lat, map_lon), 8);\n }\n }\n\n map.addLayer(osmMapnik);\n\n var baseLayers = {\n \"OSM Mapnik\": osmMapnik,\n \"OSM Wikimedia\": osmWikimedia,\n };\n\n L.control.layers(baseLayers).addTo(map);\n\n if (map_geojson) {\n L.geoJson(map_geojson).addTo(map);\n } /* else if(map_bounds) {\n L.rectangle(map_bounds, {color: \"#ff7800\", weight: 3, fill:false}).addTo(map);\n } */\n });\n\n // this event occur only once per element\n event.preventDefault();\n });\n });\n})(window, document, window.searxng);\n","/* SPDX-License-Identifier: AGPL-3.0-or-later */\n(function (w, d, searxng) {\n 'use strict';\n\n if (searxng.endpoint !== 'preferences') {\n return;\n }\n\n searxng.ready(function () {\n let engine_descriptions = null;\n function load_engine_descriptions () {\n if (engine_descriptions == null) {\n searxng.http(\"GET\", \"engine_descriptions.json\").then(function (content) {\n engine_descriptions = JSON.parse(content);\n for (const [engine_name, description] of Object.entries(engine_descriptions)) {\n let elements = d.querySelectorAll('[data-engine-name=\"' + engine_name + '\"] .engine-description');\n for (const element of elements) {\n let source = ' (' + searxng.settings.translations.Source + ': ' + description[1] + ')';\n element.innerHTML = description[0] + source;\n }\n }\n });\n }\n }\n\n for (const el of d.querySelectorAll('[data-engine-name]')) {\n searxng.on(el, 'mouseenter', load_engine_descriptions);\n }\n\n const enableAllEngines = d.querySelectorAll(\".enable-all-engines\");\n const disableAllEngines = d.querySelectorAll(\".disable-all-engines\");\n const engineToggles = d.querySelectorAll('tbody input[type=checkbox][class~=checkbox-onoff]');\n const toggleEngines = (enable) => {\n for (const el of engineToggles) {\n // check if element visible, so that only engines of the current category are modified\n if (el.offsetParent !== null) el.checked = !enable;\n }\n };\n for (const el of enableAllEngines) {\n searxng.on(el, 'click', () => toggleEngines(true));\n }\n for (const el of disableAllEngines) {\n searxng.on(el, 'click', () => toggleEngines(false));\n }\n\n const copyHashButton = d.querySelector(\"#copy-hash\");\n searxng.on(copyHashButton, 'click', (e) => {\n e.preventDefault();\n navigator.clipboard.writeText(copyHashButton.dataset.hash);\n copyHashButton.innerText = copyHashButton.dataset.copiedText;\n });\n });\n})(window, document, window.searxng);\n","/*!\n * swiped-events.js - v@version@\n * Pure JavaScript swipe events\n * https://github.com/john-doherty/swiped-events\n * @inspiration https://stackoverflow.com/questions/16348031/disable-scrolling-when-touch-moving-certain-element\n * @author John Doherty \n * @license MIT\n */\n(function (window, document) {\n\n 'use strict';\n\n // patch CustomEvent to allow constructor creation (IE/Chrome)\n if (typeof window.CustomEvent !== 'function') {\n\n window.CustomEvent = function (event, params) {\n\n params = params || { bubbles: false, cancelable: false, detail: undefined };\n\n var evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt;\n };\n\n window.CustomEvent.prototype = window.Event.prototype;\n }\n\n document.addEventListener('touchstart', handleTouchStart, false);\n document.addEventListener('touchmove', handleTouchMove, false);\n document.addEventListener('touchend', handleTouchEnd, false);\n\n var xDown = null;\n var yDown = null;\n var xDiff = null;\n var yDiff = null;\n var timeDown = null;\n var startEl = null;\n var touchCount = 0;\n\n /**\n * Fires swiped event if swipe detected on touchend\n * @param {object} e - browser event object\n * @returns {void}\n */\n function handleTouchEnd(e) {\n\n // if the user released on a different target, cancel!\n if (startEl !== e.target) return;\n\n var swipeThreshold = parseInt(getNearestAttribute(startEl, 'data-swipe-threshold', '20'), 10); // default 20 units\n var swipeUnit = getNearestAttribute(startEl, 'data-swipe-unit', 'px'); // default px\n var swipeTimeout = parseInt(getNearestAttribute(startEl, 'data-swipe-timeout', '500'), 10); // default 500ms\n var timeDiff = Date.now() - timeDown;\n var eventType = '';\n var changedTouches = e.changedTouches || e.touches || [];\n\n if (swipeUnit === 'vh') {\n swipeThreshold = Math.round((swipeThreshold / 100) * document.documentElement.clientHeight); // get percentage of viewport height in pixels\n }\n if (swipeUnit === 'vw') {\n swipeThreshold = Math.round((swipeThreshold / 100) * document.documentElement.clientWidth); // get percentage of viewport height in pixels\n }\n\n if (Math.abs(xDiff) > Math.abs(yDiff)) { // most significant\n if (Math.abs(xDiff) > swipeThreshold && timeDiff < swipeTimeout) {\n if (xDiff > 0) {\n eventType = 'swiped-left';\n }\n else {\n eventType = 'swiped-right';\n }\n }\n }\n else if (Math.abs(yDiff) > swipeThreshold && timeDiff < swipeTimeout) {\n if (yDiff > 0) {\n eventType = 'swiped-up';\n }\n else {\n eventType = 'swiped-down';\n }\n }\n\n if (eventType !== '') {\n\n var eventData = {\n dir: eventType.replace(/swiped-/, ''),\n touchType: (changedTouches[0] || {}).touchType || 'direct',\n fingers: touchCount, // Number of fingers used\n xStart: parseInt(xDown, 10),\n xEnd: parseInt((changedTouches[0] || {}).clientX || -1, 10),\n yStart: parseInt(yDown, 10),\n yEnd: parseInt((changedTouches[0] || {}).clientY || -1, 10)\n };\n\n // fire `swiped` event event on the element that started the swipe\n startEl.dispatchEvent(new CustomEvent('swiped', { bubbles: true, cancelable: true, detail: eventData }));\n\n // fire `swiped-dir` event on the element that started the swipe\n startEl.dispatchEvent(new CustomEvent(eventType, { bubbles: true, cancelable: true, detail: eventData }));\n }\n\n // reset values\n xDown = null;\n yDown = null;\n timeDown = null;\n }\n /**\n * Records current location on touchstart event\n * @param {object} e - browser event object\n * @returns {void}\n */\n function handleTouchStart(e) {\n\n // if the element has data-swipe-ignore=\"true\" we stop listening for swipe events\n if (e.target.getAttribute('data-swipe-ignore') === 'true') return;\n\n startEl = e.target;\n\n timeDown = Date.now();\n xDown = e.touches[0].clientX;\n yDown = e.touches[0].clientY;\n xDiff = 0;\n yDiff = 0;\n touchCount = e.touches.length;\n }\n\n /**\n * Records location diff in px on touchmove event\n * @param {object} e - browser event object\n * @returns {void}\n */\n function handleTouchMove(e) {\n\n if (!xDown || !yDown) return;\n\n var xUp = e.touches[0].clientX;\n var yUp = e.touches[0].clientY;\n\n xDiff = xDown - xUp;\n yDiff = yDown - yUp;\n }\n\n /**\n * Gets attribute off HTML element or nearest parent\n * @param {object} el - HTML element to retrieve attribute from\n * @param {string} attributeName - name of the attribute\n * @param {any} defaultValue - default value to return if no match found\n * @returns {any} attribute value or defaultValue\n */\n function getNearestAttribute(el, attributeName, defaultValue) {\n\n // walk up the dom tree looking for attributeName\n while (el && el !== document.documentElement) {\n\n var attributeValue = el.getAttribute(attributeName);\n\n if (attributeValue) {\n return attributeValue;\n }\n\n el = el.parentNode;\n }\n\n return defaultValue;\n }\n\n}(window, document));\n","/* SPDX-License-Identifier: AGPL-3.0-or-later */\n\nimport \"../../../node_modules/swiped-events/src/swiped-events.js\";\n\n(function (w, d, searxng) {\n 'use strict';\n\n if (searxng.endpoint !== 'results') {\n return;\n }\n\n searxng.ready(function () {\n d.querySelectorAll('#urls img').forEach(\n img =>\n img.addEventListener(\n 'error', () => {\n // console.log(\"ERROR can't load: \" + img.src);\n img.src = window.searxng.settings.theme_static_path + \"/img/img_load_error.svg\";\n },\n {once: true}\n ));\n\n if (d.querySelector('#search_url button#copy_url')) {\n d.querySelector('#search_url button#copy_url').style.display = \"block\";\n }\n\n searxng.on('.btn-collapse', 'click', function () {\n var btnLabelCollapsed = this.getAttribute('data-btn-text-collapsed');\n var btnLabelNotCollapsed = this.getAttribute('data-btn-text-not-collapsed');\n var target = this.getAttribute('data-target');\n var targetElement = d.querySelector(target);\n var html = this.innerHTML;\n if (this.classList.contains('collapsed')) {\n html = html.replace(btnLabelCollapsed, btnLabelNotCollapsed);\n } else {\n html = html.replace(btnLabelNotCollapsed, btnLabelCollapsed);\n }\n this.innerHTML = html;\n this.classList.toggle('collapsed');\n targetElement.classList.toggle('invisible');\n });\n\n searxng.on('.media-loader', 'click', function () {\n var target = this.getAttribute('data-target');\n var iframe_load = d.querySelector(target + ' > iframe');\n var srctest = iframe_load.getAttribute('src');\n if (srctest === null || srctest === undefined || srctest === false) {\n iframe_load.setAttribute('src', iframe_load.getAttribute('data-src'));\n }\n });\n\n searxng.on('#copy_url', 'click', function () {\n var target = this.parentElement.querySelector('pre');\n navigator.clipboard.writeText(target.innerText);\n this.innerText = this.dataset.copiedText;\n });\n\n // searxng.selectImage (gallery)\n // -----------------------------\n\n // setTimeout() ID, needed to cancel *last* loadImage\n let imgTimeoutID;\n\n // progress spinner, while an image is loading\n const imgLoaderSpinner = d.createElement('div');\n imgLoaderSpinner.classList.add('loader');\n\n // singleton image object, which is used for all loading processes of a\n // detailed image\n const imgLoader = new Image();\n\n const loadImage = (imgSrc, onSuccess) => {\n // if defered image load exists, stop defered task.\n if (imgTimeoutID) clearTimeout(imgTimeoutID);\n\n // defer load of the detail image for 1 sec\n imgTimeoutID = setTimeout(() => {\n imgLoader.src = imgSrc;\n }, 1000);\n\n // set handlers in the on-properties\n imgLoader.onload = () => {\n onSuccess();\n imgLoaderSpinner.remove();\n };\n imgLoader.onerror = () => {\n imgLoaderSpinner.remove();\n };\n };\n\n searxng.selectImage = (resultElement) => {\n\n // add a class that can be evaluated in the CSS and indicates that the\n // detail view is open\n d.getElementById('results').classList.add('image-detail-open');\n\n // add a hash to the browser history so that pressing back doesn't return\n // to the previous page this allows us to dismiss the image details on\n // pressing the back button on mobile devices\n window.location.hash = '#image-viewer';\n\n searxng.scrollPageToSelected();\n\n // if there is none element given by the caller, stop here\n if (!resultElement) return;\n\n // find object in the element, if there is none, stop here.\n const img = resultElement.querySelector('.result-images-source img');\n if (!img) return;\n\n // \n const src = img.getAttribute('data-src');\n\n // already loaded high-res image or no high-res image available\n if (!src) return;\n\n // use the image thumbnail until the image is fully loaded\n const thumbnail = resultElement.querySelector('.image_thumbnail');\n img.src = thumbnail.src;\n\n // show a progress spinner\n const detailElement = resultElement.querySelector('.detail');\n detailElement.appendChild(imgLoaderSpinner);\n\n // load full size image in background\n loadImage(src, () => {\n // after the singelton loadImage has loaded the detail image into the\n // cache, it can be used in the origin as src property.\n img.src = src;\n img.removeAttribute('data-src');\n });\n };\n\n searxng.closeDetail = function () {\n d.getElementById('results').classList.remove('image-detail-open');\n // remove #image-viewer hash from url by navigating back\n if (window.location.hash == '#image-viewer') window.history.back();\n searxng.scrollPageToSelected();\n };\n searxng.on('.result-detail-close', 'click', e => {\n e.preventDefault();\n searxng.closeDetail();\n });\n searxng.on('.result-detail-previous', 'click', e => {\n e.preventDefault();\n searxng.selectPrevious(false);\n });\n searxng.on('.result-detail-next', 'click', e => {\n e.preventDefault();\n searxng.selectNext(false);\n });\n\n // listen for the back button to be pressed and dismiss the image details when called\n window.addEventListener('hashchange', () => {\n if (window.location.hash != '#image-viewer') searxng.closeDetail();\n });\n\n d.querySelectorAll('.swipe-horizontal').forEach(\n obj => {\n obj.addEventListener('swiped-left', function () {\n searxng.selectNext(false);\n });\n obj.addEventListener('swiped-right', function () {\n searxng.selectPrevious(false);\n });\n }\n );\n\n w.addEventListener('scroll', function () {\n var e = d.getElementById('backToTop'),\n scrollTop = document.documentElement.scrollTop || document.body.scrollTop,\n results = d.getElementById('results');\n if (e !== null) {\n if (scrollTop >= 100) {\n results.classList.add('scrolling');\n } else {\n results.classList.remove('scrolling');\n }\n }\n }, true);\n\n });\n\n})(window, document, window.searxng);\n","/* SPDX-License-Identifier: AGPL-3.0-or-later */\n/* exported AutoComplete */\n\n(function (w, d, searxng) {\n 'use strict';\n\n var qinput_id = \"q\", qinput;\n\n const isMobile = window.matchMedia(\"only screen and (max-width: 50em)\").matches;\n const isResultsPage = document.querySelector(\"main\").id == \"main_results\";\n\n function submitIfQuery () {\n if (qinput.value.length > 0) {\n var search = document.getElementById('search');\n setTimeout(search.submit.bind(search), 0);\n }\n }\n\n function createClearButton (qinput) {\n var cs = document.getElementById('clear_search');\n var updateClearButton = function () {\n if (qinput.value.length === 0) {\n cs.classList.add(\"empty\");\n } else {\n cs.classList.remove(\"empty\");\n }\n };\n\n // update status, event listener\n updateClearButton();\n cs.addEventListener('click', function (ev) {\n qinput.value = '';\n qinput.focus();\n updateClearButton();\n ev.preventDefault();\n });\n qinput.addEventListener('input', updateClearButton, false);\n }\n\n const fetchResults = async (query) => {\n let request;\n if (searxng.settings.method === 'GET') {\n const reqParams = new URLSearchParams();\n reqParams.append(\"q\", query);\n request = fetch(\"./autocompleter?\" + reqParams.toString());\n } else {\n const formData = new FormData();\n formData.append(\"q\", query);\n request = fetch(\"./autocompleter\", {\n method: 'POST',\n body: formData,\n });\n }\n\n request.then(async function (response) {\n const results = await response.json();\n\n if (!results) return;\n\n const autocomplete = d.querySelector(\".autocomplete\");\n const autocompleteList = d.querySelector(\".autocomplete ul\");\n autocomplete.classList.add(\"open\");\n autocompleteList.innerHTML = \"\";\n\n // show an error message that no result was found\n if (!results[1] || results[1].length == 0) {\n const noItemFoundMessage = document.createElement(\"li\");\n noItemFoundMessage.classList.add('no-item-found');\n noItemFoundMessage.innerHTML = searxng.settings.translations.no_item_found;\n autocompleteList.appendChild(noItemFoundMessage);\n return;\n }\n\n for (let result of results[1]) {\n const li = document.createElement(\"li\");\n li.innerText = result;\n\n searxng.on(li, 'mousedown', () => {\n qinput.value = result;\n const form = d.querySelector(\"#search\");\n form.submit();\n autocomplete.classList.remove('open');\n });\n autocompleteList.appendChild(li);\n }\n });\n };\n\n searxng.ready(function () {\n // focus search input on large screens\n if (!isMobile && !isResultsPage) document.getElementById(\"q\").focus();\n\n qinput = d.getElementById(qinput_id);\n const autocomplete = d.querySelector(\".autocomplete\");\n const autocompleteList = d.querySelector(\".autocomplete ul\");\n\n if (qinput !== null) {\n // clear button\n createClearButton(qinput);\n\n // autocompleter\n if (searxng.settings.autocomplete) {\n searxng.on(qinput, 'input', () => {\n const query = qinput.value;\n if (query.length < searxng.settings.autocomplete_min) return;\n\n setTimeout(() => {\n if (query == qinput.value) fetchResults(query);\n }, 300);\n });\n\n searxng.on(qinput, 'keyup', (e) => {\n let currentIndex = -1;\n const listItems = autocompleteList.children;\n for (let i = 0; i < listItems.length; i++) {\n if (listItems[i].classList.contains('active')) {\n currentIndex = i;\n break;\n }\n }\n\n let newCurrentIndex = -1;\n if (e.key === \"ArrowUp\") {\n if (currentIndex >= 0) listItems[currentIndex].classList.remove('active');\n // we need to add listItems.length to the index calculation here because the JavaScript modulos\n // operator doesn't work with negative numbers\n newCurrentIndex = (currentIndex - 1 + listItems.length) % listItems.length;\n } else if (e.key === \"ArrowDown\") {\n if (currentIndex >= 0) listItems[currentIndex].classList.remove('active');\n newCurrentIndex = (currentIndex + 1) % listItems.length;\n } else if (e.key === \"Tab\" || e.key === \"Enter\") {\n autocomplete.classList.remove('open');\n }\n\n if (newCurrentIndex != -1) {\n const selectedItem = listItems[newCurrentIndex];\n selectedItem.classList.add('active');\n\n if (!selectedItem.classList.contains('no-item-found')) qinput.value = selectedItem.innerText;\n }\n });\n }\n }\n\n // Additionally to searching when selecting a new category, we also\n // automatically start a new search request when the user changes a search\n // filter (safesearch, time range or language) (this requires JavaScript\n // though)\n if (\n qinput !== null\n && searxng.settings.search_on_category_select\n // If .search_filters is undefined (invisible) we are on the homepage and\n // hence don't have to set any listeners\n && d.querySelector(\".search_filters\") != null\n ) {\n searxng.on(d.getElementById('safesearch'), 'change', submitIfQuery);\n searxng.on(d.getElementById('time_range'), 'change', submitIfQuery);\n searxng.on(d.getElementById('language'), 'change', submitIfQuery);\n }\n\n const categoryButtons = d.querySelectorAll(\"button.category_button\");\n for (let button of categoryButtons) {\n searxng.on(button, 'click', (event) => {\n if (event.shiftKey) {\n event.preventDefault();\n button.classList.toggle(\"selected\");\n return;\n }\n\n // manually deselect the old selection when a new category is selected\n const selectedCategories = d.querySelectorAll(\"button.category_button.selected\");\n for (let categoryButton of selectedCategories) {\n categoryButton.classList.remove(\"selected\");\n }\n button.classList.add(\"selected\");\n });\n }\n\n // override form submit action to update the actually selected categories\n const form = d.querySelector(\"#search\");\n if (form != null) {\n searxng.on(form, 'submit', (event) => {\n event.preventDefault();\n const categoryValuesInput = d.querySelector(\"#selected-categories\");\n if (categoryValuesInput) {\n let categoryValues = [];\n for (let categoryButton of categoryButtons) {\n if (categoryButton.classList.contains(\"selected\")) {\n categoryValues.push(categoryButton.name.replace(\"category_\", \"\"));\n }\n }\n categoryValuesInput.value = categoryValues.join(\",\");\n }\n form.submit();\n });\n }\n });\n\n})(window, document, window.searxng);\n"],"names":["w","d","ElementPrototype","selector","node","nodes","i","callbackSafe","callback","el","e","exception","searxng","obj","eventType","useCapture","found","method","url","data","resolve","reject","req","ex","src","path","id","s","newNode","referenceNode","getEndpoint","className","onlyImages","newLoadSpinner","loader","replaceChildrenWith","element","children","child","loadNextPage","form","formData","response","nextPageDoc","articleList","paginationElement","articleElement","err","intersectionObserveOptions","observedSelector","observer","entries","paginationEntry","isElementInDetail","getResultElement","isImageResult","resultElement","highlightResult","baseKeyBinding","removeFocus","copyURLToClipboard","toggleHelp","searchInputFocus","GoToNextPage","openResult","GoToPreviousPage","reloadPage","keyBindingLayouts","scrollPage","scrollPageTo","keyBindings","tagName","which","noScroll","keepFocus","current","effectiveWhich","next","results","top","bot","etop","ebot","link","scrollPageToSelected","pageButtonClick","css_selector","button","sel","wtop","wheight","offset","wbot","amount","position","nav","q","len","newTab","initHelpContent","divElement","categories","k","key","sorted","a","b","html","cat","lastCategory","first","cj","helpPanel","body","currentUrlElement","event","leaflet_target","map_lon","map_lat","map_zoom","map_boundingbox","map_geojson","map_bounds","southWest","northEast","map","osmMapnikUrl","osmMapnikAttrib","osmMapnik","osmWikimediaUrl","osmWikimediaAttrib","osmWikimedia","baseLayers","engine_descriptions","load_engine_descriptions","content","engine_name","description","elements","source","enableAllEngines","disableAllEngines","engineToggles","toggleEngines","enable","copyHashButton","window","document","params","evt","handleTouchStart","handleTouchMove","handleTouchEnd","xDown","yDown","xDiff","yDiff","timeDown","startEl","touchCount","swipeThreshold","getNearestAttribute","swipeUnit","swipeTimeout","timeDiff","changedTouches","eventData","xUp","yUp","attributeName","defaultValue","attributeValue","img","btnLabelCollapsed","btnLabelNotCollapsed","target","targetElement","iframe_load","srctest","imgTimeoutID","imgLoaderSpinner","imgLoader","loadImage","imgSrc","onSuccess","thumbnail","scrollTop","qinput_id","qinput","isMobile","isResultsPage","submitIfQuery","search","createClearButton","cs","updateClearButton","ev","fetchResults","query","request","reqParams","autocomplete","autocompleteList","noItemFoundMessage","result","li","currentIndex","listItems","newCurrentIndex","selectedItem","categoryButtons","selectedCategories","categoryButton","categoryValuesInput","categoryValues"],"mappings":"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","x_google_ignoreList":[5]} \ No newline at end of file diff --git a/searx/templates/simple/base.html b/searx/templates/simple/base.html index 2eebde676..deac295b7 100644 --- a/searx/templates/simple/base.html +++ b/searx/templates/simple/base.html @@ -64,7 +64,7 @@

- {{ _('Powered by') }} searxng - {{ searx_version }} — {{ _('a privacy-respecting, open metasearch engine') }}
+ {{ _('Powered by') }} SearXNG - {{ searx_version }} — {{ _('a privacy-respecting, open metasearch engine') }}
{{ _('Source code') }} | {{ _('Issue tracker') }} {% if enable_metrics %}| {{ _('Engine stats') }}{% endif %} diff --git a/searx/templates/simple/search.html b/searx/templates/simple/search.html index b26e27821..180c56160 100644 --- a/searx/templates/simple/search.html +++ b/searx/templates/simple/search.html @@ -9,6 +9,7 @@ +

    {% set display_tooltip = true %} diff --git a/searx/templates/simple/simple_search.html b/searx/templates/simple/simple_search.html index f69ba6142..af533e6e0 100644 --- a/searx/templates/simple/simple_search.html +++ b/searx/templates/simple/simple_search.html @@ -5,6 +5,7 @@ +
      diff --git a/searx/translations/af/LC_MESSAGES/messages.mo b/searx/translations/af/LC_MESSAGES/messages.mo index 7ca4a521f..e196b89c5 100644 Binary files a/searx/translations/af/LC_MESSAGES/messages.mo and b/searx/translations/af/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/af/LC_MESSAGES/messages.po b/searx/translations/af/LC_MESSAGES/messages.po index 685b4de9b..d06728011 100644 --- a/searx/translations/af/LC_MESSAGES/messages.po +++ b/searx/translations/af/LC_MESSAGES/messages.po @@ -19,7 +19,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: 2025-01-28 06:11+0000\n" "Last-Translator: return42 " "\n" @@ -73,7 +73,7 @@ msgid "videos" msgstr "video's" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "draadloos" @@ -350,93 +350,93 @@ msgstr "toe" msgid "answered" msgstr "geantwoord" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "Geen item gevind" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "Bron" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "Fout met die laai van die volgende bladsy" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "Ongeldige opstellings, redigeer asb jou voorkeure" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "Ongeldige opstellings" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "soekfout" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "tydsverloop" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "ontledingsfout" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "HTTP protokol fout" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "netwerk fout" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "SSL vout: Kon nie sertifikaat verifieer nie" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "onverwagse breek" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "HTTP fout" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "HTTP koppelingsfout" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "proksie fout" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "CAPTCHA" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "te veel versoeke" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "toegang geweier" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "bediener API fout" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "Opgehef" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "{minutes} minute terug" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "{hours} ure, {minutes} minute terug" @@ -467,15 +467,15 @@ msgstr "Hierdie inskrywing was vervang deur" msgid "Channel" msgstr "Kanaal" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "bitsnelheid" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "stemme" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "klikke" @@ -484,7 +484,7 @@ msgstr "klikke" msgid "Language" msgstr "Taal" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -711,10 +711,6 @@ msgstr "Outeur" msgid "cached" msgstr "gekas" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "gevolmagtig" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "Begin om 'n nuwe probleem op GitHub in te dien" @@ -1826,3 +1822,6 @@ msgstr "versteek video" #~ "gebruik word om voorkeure oor toestelle" #~ " heen te sinkroniseer." +#~ msgid "proxied" +#~ msgstr "gevolmagtig" + diff --git a/searx/translations/ar/LC_MESSAGES/messages.mo b/searx/translations/ar/LC_MESSAGES/messages.mo index c3dd19dfe..d1c8aca17 100644 Binary files a/searx/translations/ar/LC_MESSAGES/messages.mo and b/searx/translations/ar/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/ar/LC_MESSAGES/messages.po b/searx/translations/ar/LC_MESSAGES/messages.po index 6619db0cb..5d2383233 100644 --- a/searx/translations/ar/LC_MESSAGES/messages.po +++ b/searx/translations/ar/LC_MESSAGES/messages.po @@ -28,20 +28,19 @@ # DZDevelopers , 2025. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: 2025-04-15 10:37+0000\n" "Last-Translator: DZDevelopers \n" -"Language-Team: Arabic \n" "Language: ar\n" +"Language-Team: Arabic " +"\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : " +"n%100>=3 && n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " -"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" -"X-Generator: Weblate 5.10.2\n" "Generated-By: Babel 2.17.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -85,7 +84,7 @@ msgid "videos" msgstr "ڤيديوهات" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "راديو" @@ -362,93 +361,93 @@ msgstr "مغلق" msgid "answered" msgstr "أُجيبت" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "تعذر العثور على عناصر" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "المصدر" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "حدث خلل أثناء تحميل الصفحة التالية" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "إنّ الإعدادات خاطئة، يرجى تعديل خياراتك" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "إعدادات غير صالحة" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "خطأ في البحث" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "نفذ الوقت" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "خطأ تحليل" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "خطأ في بروتوكول HTTP" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "خطأ في الشبكة" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "خطأ SSL: فشل التحقق من صحة الشهادة" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "تعطل غير متوقع" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "خطأ HTTP" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "خطأ في اتصال HTTP" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "خطأ في وكيل البروكسي" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "أسئلة التحقق" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "الكثير من الطلبات" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "الدخول مرفوض" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "خطأ في API الخادم" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "معلق" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "{minutes} minute(s) ago" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "قبل {hours} ساعات، {minutes} دقائق" @@ -479,15 +478,15 @@ msgstr "هذا الإدخال تم استبداله بـ" msgid "Channel" msgstr "القناة" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "معدل البت" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "تصويتات" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "نقرات" @@ -496,7 +495,7 @@ msgstr "نقرات" msgid "Language" msgstr "اللغة" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -724,10 +723,6 @@ msgstr "الكاتب" msgid "cached" msgstr "النسخة المخبأة" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "المخدم البروكسي" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "ابدأ بتقديم قضية جديدة على GitHub" @@ -1191,8 +1186,8 @@ msgid "" "A URL containing your preferences. This URL can be used to restore your " "settings on a different device." msgstr "" -"رابط يحتوي على تفضيلاتك. يمكن استخدام هذا الرابط لاستعادة إعداداتك على جهاز " -"مختلف." +"رابط يحتوي على تفضيلاتك. يمكن استخدام هذا الرابط لاستعادة إعداداتك على " +"جهاز مختلف." #: searx/templates/simple/preferences/cookies.html:46 msgid "Copy preferences hash" @@ -2084,3 +2079,7 @@ msgstr "إخفاء الفيديو" #~ "يمكن استخدام تحديد الإعدادات المخصصة في" #~ " تفضيلات URL لمزامنة التفضيلات عبر " #~ "الأجهزة." + +#~ msgid "proxied" +#~ msgstr "المخدم البروكسي" + diff --git a/searx/translations/bg/LC_MESSAGES/messages.mo b/searx/translations/bg/LC_MESSAGES/messages.mo index 52090d7f7..7b6975fda 100644 Binary files a/searx/translations/bg/LC_MESSAGES/messages.mo and b/searx/translations/bg/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/bg/LC_MESSAGES/messages.po b/searx/translations/bg/LC_MESSAGES/messages.po index 5ed79b61d..8786cdd56 100644 --- a/searx/translations/bg/LC_MESSAGES/messages.po +++ b/searx/translations/bg/LC_MESSAGES/messages.po @@ -16,20 +16,22 @@ # Anonymous , 2025. # thenack0 , 2025. # return42 , 2025. +# devrimer , 2025. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" -"PO-Revision-Date: 2025-03-14 07:09+0000\n" -"Last-Translator: return42 \n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" +"PO-Revision-Date: 2025-05-16 04:04+0000\n" +"Last-Translator: devrimer \n" +"Language-Team: Bulgarian \n" "Language: bg\n" -"Language-Team: Bulgarian " -"\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" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.11.4\n" "Generated-By: Babel 2.17.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -73,7 +75,7 @@ msgid "videos" msgstr "видео" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "радио" @@ -350,93 +352,93 @@ msgstr "Затворено" msgid "answered" msgstr "Отговорено" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "Не е намерен артикул" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "Източник" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "Грешка при зареждането на следващата страница" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "Неправилни настройки, моля редактирайте предпочитанията си" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "Невалидни настройки" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "Грешка при търсенето" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "изчакване" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "грешка при анализа" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "Грешка в протокола HTTP" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "мрежова грешка" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "SSL грешка: проверката на сертификата е неуспешна" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "неочакван срив" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "HTTP грешка" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "HTTP грешка във връзката" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "прокси грешка" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "CAPTCHA" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "твърде много повиквания" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "отказан достъп" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "грешка в API на сървъра" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "преустановен" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "преди {minutes} минута(минути)" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "преди {hours} час(ове), {minutes} минута(минути)" @@ -448,7 +450,7 @@ msgstr "Генерирайте различни произволни стойн #: searx/answerers/statistics.py:36 #, python-brace-format msgid "Compute {func} of the arguments" -msgstr "" +msgstr "Изчислете {func} на аргументите" #: searx/engines/openstreetmap.py:158 msgid "Show route in map .." @@ -467,15 +469,15 @@ msgstr "Този запис е заменен от" msgid "Channel" msgstr "Канал" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "Скорост" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "Гласове" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "клика" @@ -484,7 +486,7 @@ msgstr "клика" msgid "Language" msgstr "Език" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -712,10 +714,6 @@ msgstr "Автор" msgid "cached" msgstr "кеширана" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "прекарана" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "Предявете нов проблем в GitHub" @@ -2083,3 +2081,5 @@ msgstr "скрий видеото" #~ "позволи синхронизация между различни " #~ "устройства." +#~ msgid "proxied" +#~ msgstr "прекарана" diff --git a/searx/translations/bn/LC_MESSAGES/messages.mo b/searx/translations/bn/LC_MESSAGES/messages.mo index c8e57a910..a865c0800 100644 Binary files a/searx/translations/bn/LC_MESSAGES/messages.mo and b/searx/translations/bn/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/bn/LC_MESSAGES/messages.po b/searx/translations/bn/LC_MESSAGES/messages.po index bcc003e2e..35a888417 100644 --- a/searx/translations/bn/LC_MESSAGES/messages.po +++ b/searx/translations/bn/LC_MESSAGES/messages.po @@ -26,7 +26,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: 2025-03-06 09:54+0000\n" "Last-Translator: MonsoonFire \n" "Language: bn\n" @@ -79,7 +79,7 @@ msgid "videos" msgstr "ভিডিও" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "বেতার" @@ -356,93 +356,93 @@ msgstr "বন্ধ" msgid "answered" msgstr "উত্তরকৃত" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "কোন আইটেম পাওয়া যায়নি" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "উৎস" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "পরবর্তী পৃষ্ঠাটি লোড করায় ত্রুটি দেখা যাচ্ছে" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "অকেজো সেটিংস, অনুগ্রহ করে আপনার পছন্দগুলি সম্পাদনা করুন" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "অকেজো সেটিংস" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "সার্চ ত্রুটি" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "সময় শেষ" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "পার্স ত্রুটি" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "HTTP প্রোটোকল ত্রুটি" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "নেটওয়ার্ক ত্রুটি" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "SSL ত্রুটি: সার্টিফিকেট বৈধতা ব্যর্থ হয়েছে৷" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "অপ্রত্যাশিত ক্র্যাশ" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "HTTP ত্রুটি" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "HTTP সংযোগ ত্রুটি" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "প্রক্সি ত্রুটি" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "ক্যাপচা" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "অনেক বেশি অনুরোধ" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "প্রবেশ অগ্রাহ্য করা হল" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "সার্ভার API ত্রুটি" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "স্থগিত" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "{minutes} মিনিট আগে" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "{hours} ঘণ্টা, {minutes} মিনিট আগে" @@ -473,15 +473,15 @@ msgstr "এই এনট্রিটি দ্বারা বাতিল ক msgid "Channel" msgstr "চ্যানেল" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "বিটরেট" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "ভোট" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "ক্লিক সংখ্যা" @@ -490,7 +490,7 @@ msgstr "ক্লিক সংখ্যা" msgid "Language" msgstr "ভাষা" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -716,10 +716,6 @@ msgstr "লেখক" msgid "cached" msgstr "ক্যাশকৃত" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "প্রক্সিকৃত" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "GitHub এ একটি নতুন সমস্যা জমা দেওয়া শুরু করুন" @@ -1843,3 +1839,6 @@ msgstr "ভিডিও লুকিয়ে ফেলুন" #~ "প্রেফারেন্সগুলি ডিভাইস জুড়ে সিঙ্ক করে " #~ "ব্যবহার করতে পারেন।" +#~ msgid "proxied" +#~ msgstr "প্রক্সিকৃত" + diff --git a/searx/translations/bo/LC_MESSAGES/messages.mo b/searx/translations/bo/LC_MESSAGES/messages.mo index e57b300a3..4321d0714 100644 Binary files a/searx/translations/bo/LC_MESSAGES/messages.mo and b/searx/translations/bo/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/bo/LC_MESSAGES/messages.po b/searx/translations/bo/LC_MESSAGES/messages.po index d54fab2f9..2497fba4f 100644 --- a/searx/translations/bo/LC_MESSAGES/messages.po +++ b/searx/translations/bo/LC_MESSAGES/messages.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: 2025-01-06 15:52+0000\n" "Last-Translator: return42 " "\n" @@ -66,7 +66,7 @@ msgid "videos" msgstr "བརྙན་ཟློས།" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "" @@ -343,93 +343,93 @@ msgstr "" msgid "answered" msgstr "" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "རྣམ་གྲངས་གང་ཡང་རྙེད་རྒྱུ་མ་བྱུང་།" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "ནུས་མེད་ཀྱི་སྒྲིག་འགོད།ཁྱེད་ཀྱིས་གདམ་ཀ་ལ་བཅོས་སྒྲིག་གཏོང་རོགས།" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "ནུས་མེད་ཀྱི་སྒྲིག་འགོད།" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "འཚོལ་བཤེར་ལ་ནོར་འཁྲུལ་བྱུང་།" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "CAPTCHA" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "སྐར་མ་ {minutes} སྔོན་ལ།" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "ཆུ་ཚོད་ {hours} དང་སྐར་མ {minutes} སྔོན་ལ།" @@ -460,15 +460,15 @@ msgstr "འཚོལ་བྱང་འདི་གཞན་གྱིས་ཚབ msgid "Channel" msgstr "" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "" @@ -477,7 +477,7 @@ msgstr "" msgid "Language" msgstr "" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -689,10 +689,6 @@ msgstr "" msgid "cached" msgstr "འདྲ་བཤུས་རྒྱབ་ཚར།" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "མངག་བཅོལ་བྱེད་ཟིན།" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "" @@ -1994,3 +1990,6 @@ msgstr "རྙན་ཟློས་སྦས།" #~ "sync preferences across devices." #~ msgstr "" +#~ msgid "proxied" +#~ msgstr "མངག་བཅོལ་བྱེད་ཟིན།" + diff --git a/searx/translations/ca/LC_MESSAGES/messages.mo b/searx/translations/ca/LC_MESSAGES/messages.mo index 24baf148d..43849977f 100644 Binary files a/searx/translations/ca/LC_MESSAGES/messages.mo and b/searx/translations/ca/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/ca/LC_MESSAGES/messages.po b/searx/translations/ca/LC_MESSAGES/messages.po index 8e18cb585..b6b8bb8a7 100644 --- a/searx/translations/ca/LC_MESSAGES/messages.po +++ b/searx/translations/ca/LC_MESSAGES/messages.po @@ -26,7 +26,7 @@ msgid "" msgstr "" "Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: 2025-01-06 15:52+0000\n" "Last-Translator: sserra \n" "Language: ca\n" @@ -79,7 +79,7 @@ msgid "videos" msgstr "vídeos" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "radio" @@ -356,93 +356,93 @@ msgstr "tancat" msgid "answered" msgstr "contestat" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "No s'ha trobat cap element" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "Origen" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "S'ha produït un error en carregar la següent pàgina" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "La configuració no és vàlida, editeu-la" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "La configuració no és vàlida" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "error de cerca" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "expirat" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "error de processament" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "error del protocol HTTP" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "error de xarxa" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "error de SSL: la validació del certificat ha fallat" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "error inesperat" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "error de HTTP" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "error de connexió HTTP" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "error del servidor intermediari" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "CAPTCHA" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "masses peticions" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "accés denegat" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "error en l'API del servidor" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "Suspès" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "fa {minutes} minut(s)" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "fa {hours} hores i {minutes} minut(s)" @@ -473,15 +473,15 @@ msgstr "Aquesta entrada ha estat substituïda per" msgid "Channel" msgstr "Canal" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "tasa de bits" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "vots" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "clics" @@ -490,7 +490,7 @@ msgstr "clics" msgid "Language" msgstr "Llengua" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -716,10 +716,6 @@ msgstr "Autor" msgid "cached" msgstr "en memòria cau" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "en servidor intermediari" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "Obriu una incidència a GitHub" @@ -2100,3 +2096,6 @@ msgstr "oculta el vídeo" #~ " l'URL de preferències pot usar-se" #~ " per sincronitzar entre dispositius." +#~ msgid "proxied" +#~ msgstr "en servidor intermediari" + diff --git a/searx/translations/cs/LC_MESSAGES/messages.mo b/searx/translations/cs/LC_MESSAGES/messages.mo index 572d48156..b131a6853 100644 Binary files a/searx/translations/cs/LC_MESSAGES/messages.mo and b/searx/translations/cs/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/cs/LC_MESSAGES/messages.po b/searx/translations/cs/LC_MESSAGES/messages.po index 567b697b8..7646e162a 100644 --- a/searx/translations/cs/LC_MESSAGES/messages.po +++ b/searx/translations/cs/LC_MESSAGES/messages.po @@ -22,20 +22,19 @@ # Fjuro , 2025. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: 2025-03-30 16:28+0000\n" "Last-Translator: Fjuro \n" -"Language-Team: Czech \n" "Language: cs\n" +"Language-Team: Czech " +"\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" -"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" -"X-Generator: Weblate 5.10.2\n" "Generated-By: Babel 2.17.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -79,7 +78,7 @@ msgid "videos" msgstr "videa" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "rádio" @@ -356,93 +355,93 @@ msgstr "zavřené" msgid "answered" msgstr "zodpovězené" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "Nic nenalezeno" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "zdroj" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "Chyba při načítání další stránky" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "Neplatné nastavení, upravte své předvolby" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "Neplatné nastavení" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "chyba vyhledávání" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "čas vypršel" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "chyba parsování" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "chyba HTTP protokolu" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "síťová chyba" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "chyba SSL: ověření certifikátu selhalo" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "nečekaná chyba" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "chyba HTTP" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "Chyba spojení HTTP" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "chyba proxy" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "CAPTCHA" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "příliš mnoho požadavků" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "přístup odepřen" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "chyba API serveru" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "Pozastaveno" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "před {minutes} minutami" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "před {hours} hodinami, {minutes} minutami" @@ -473,15 +472,15 @@ msgstr "Tato položka byla nahrazena položkou" msgid "Channel" msgstr "Kanál" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "datový tok" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "hlasy" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "kliknutí" @@ -490,7 +489,7 @@ msgstr "kliknutí" msgid "Language" msgstr "Jazyk" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -608,9 +607,9 @@ msgid "" "This plugin checks if the address of the request is a Tor exit-node, and " "informs the user if it is; like check.torproject.org, but from SearXNG." msgstr "" -"Tento doplněk kontroluje, zda je adresa požadavku výstupním uzlem sítě Tor, " -"a informuje uživatele, pokud tomu tak je; jako check.torproject.org, ale od " -"SearXNG." +"Tento doplněk kontroluje, zda je adresa požadavku výstupním uzlem sítě " +"Tor, a informuje uživatele, pokud tomu tak je; jako check.torproject.org," +" ale od SearXNG." #: searx/plugins/tor_check.py:65 msgid "Could not download the list of Tor exit-nodes from" @@ -718,10 +717,6 @@ msgstr "Autor" msgid "cached" msgstr "archivovaná verze" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "přes proxy" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "Začněte přidávat novou chybu na Githubu" @@ -2089,3 +2084,7 @@ msgstr "skrýt video" #~ "Zadání vlastních nastavení v URL " #~ "předvoleb lze použít k synchronizaci " #~ "předvoleb mezi zařízeními." + +#~ msgid "proxied" +#~ msgstr "přes proxy" + diff --git a/searx/translations/cy/LC_MESSAGES/messages.mo b/searx/translations/cy/LC_MESSAGES/messages.mo index 723d3148f..078fbad47 100644 Binary files a/searx/translations/cy/LC_MESSAGES/messages.mo and b/searx/translations/cy/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/cy/LC_MESSAGES/messages.po b/searx/translations/cy/LC_MESSAGES/messages.po index 31a705586..137ad81cc 100644 --- a/searx/translations/cy/LC_MESSAGES/messages.po +++ b/searx/translations/cy/LC_MESSAGES/messages.po @@ -19,7 +19,7 @@ msgid "" msgstr "" "Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: 2025-03-07 00:07+0000\n" "Last-Translator: DanielBoone \n" "Language: cy\n" @@ -73,7 +73,7 @@ msgid "videos" msgstr "fideos" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "radio" @@ -350,93 +350,93 @@ msgstr "ar gau" msgid "answered" msgstr "wedi'i ateb" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "Ni chanfuwyd eitem" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "Ffynhonnell" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "Gwall wrth lwytho'r dudalen nesaf" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "Gosodiadau annilys, golygwch eich dewisiadau" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "Gosodiadau annilys" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "gwall chwilio" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "terfyn amser" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "gwall dosrannu" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "gwall protocol HTTP" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "gwall rhwydwaith" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "Gwall SSL: dilysu tystysgrif wedi methu" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "damwain annisgwyl" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "gwall HTTP" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "gwall cysylltiad HTTP" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "gwall dirprwy" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "CAPTCHA" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "gormod o geisiadau" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "mynediad wedi ei wrthod" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "gwall API gweinydd" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "Atal" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "{minutes} munud yn ôl" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "{hours} awr, {minutes} munud yn ôl" @@ -467,15 +467,15 @@ msgstr "Mae'r cofnod hwn wedi ei ddisodli gan" msgid "Channel" msgstr "Sianel" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "cyfradd didau" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "pleidleisiau" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "cliciau" @@ -484,7 +484,7 @@ msgstr "cliciau" msgid "Language" msgstr "Iaith" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -711,10 +711,6 @@ msgstr "Awdur" msgid "cached" msgstr "wedi'i storio" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "wedi'i ddirprwyo" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "Dechrau cyflwyno problem newydd ar GitHub" @@ -2052,3 +2048,6 @@ msgstr "cuddio'r fideo" #~ "gysoni eich dewisiadau ar draws " #~ "dyfeisiau." +#~ msgid "proxied" +#~ msgstr "wedi'i ddirprwyo" + diff --git a/searx/translations/da/LC_MESSAGES/messages.mo b/searx/translations/da/LC_MESSAGES/messages.mo index 457e66124..89217190e 100644 Binary files a/searx/translations/da/LC_MESSAGES/messages.mo and b/searx/translations/da/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/da/LC_MESSAGES/messages.po b/searx/translations/da/LC_MESSAGES/messages.po index f2c9aba24..2ec1bdafb 100644 --- a/searx/translations/da/LC_MESSAGES/messages.po +++ b/searx/translations/da/LC_MESSAGES/messages.po @@ -16,19 +16,18 @@ # AndersNordh , 2025. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: 2025-03-31 14:03+0000\n" "Last-Translator: AndersNordh \n" -"Language-Team: Danish \n" "Language: da\n" +"Language-Team: Danish " +"\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" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.10.2\n" "Generated-By: Babel 2.17.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -72,7 +71,7 @@ msgid "videos" msgstr "videoer" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "Radio" @@ -349,93 +348,93 @@ msgstr "lukket" msgid "answered" msgstr "svaret" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "Intet fundet" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "Kilde" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "Fejl ved indlæsning af den næste side" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "Ugyldige indstillinger, redigér venligst dine valg" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "Ugyldig indstilling" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "søgefejl" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "udløbstid" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "fortolkningsfejl" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "HTTP-protokolfejl" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "netværksfejl" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "SSL-fejl: certifikatvalidering mislykkedes" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "uventet nedbrud" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "HTTP-fejl" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "HTTP-tilkoblingsfejl" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "proxyfejl" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "CAPTCHA" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "for mange forespørgsler" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "adgang nægtet" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "server-API-fejl" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "Suspenderet" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "for {minutes} minut(ter) siden" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "for {hours} time(r) og {minutes} minut(ter) siden" @@ -466,15 +465,15 @@ msgstr "Denne værdi er blevet overskrevet af" msgid "Channel" msgstr "Kanal" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "Bitrate" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "Stemmer" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "Klik" @@ -483,7 +482,7 @@ msgstr "Klik" msgid "Language" msgstr "Sprog" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -712,10 +711,6 @@ msgstr "Forfatter" msgid "cached" msgstr "cachet" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "viderestillet" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "Begynd at indsende et nyt problem på GitHub" @@ -2089,3 +2084,7 @@ msgstr "skjul video" #~ "Specificere brugertilpassede indstillinger i " #~ "præference-URL'en kan bruges til at " #~ "synkronisere præference over flere enheder." + +#~ msgid "proxied" +#~ msgstr "viderestillet" + diff --git a/searx/translations/de/LC_MESSAGES/messages.mo b/searx/translations/de/LC_MESSAGES/messages.mo index b89356569..a591cc0d4 100644 Binary files a/searx/translations/de/LC_MESSAGES/messages.mo and b/searx/translations/de/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/de/LC_MESSAGES/messages.po b/searx/translations/de/LC_MESSAGES/messages.po index cc276067c..4b2546f24 100644 --- a/searx/translations/de/LC_MESSAGES/messages.po +++ b/searx/translations/de/LC_MESSAGES/messages.po @@ -27,19 +27,18 @@ # return42 , 2025. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: 2025-03-30 07:37+0000\n" "Last-Translator: return42 \n" -"Language-Team: German \n" "Language: de\n" +"Language-Team: German " +"\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" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.10.2\n" "Generated-By: Babel 2.17.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -83,7 +82,7 @@ msgid "videos" msgstr "Videos" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "Radio" @@ -360,93 +359,93 @@ msgstr "geschlossen" msgid "answered" msgstr "beantwortet" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "Keine Einträge gefunden" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "Quelle" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "Fehler beim Laden der nächsten Seite" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "Ungültige Einstellungen, bitte Einstellungen ändern" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "Ungültige Einstellungen" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "Suchfehler" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "Zeitüberschreitung" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "Fehler beim Parsen" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "HTTP-Protokollfehler" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "Netzwerkfehler" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "SSL Fehler: Zertifikatsprüfung ist fehlgeschlagen" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "unerwarteter Absturz" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "HTTP-Fehler" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "HTTP-Verbindungsfehler" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "Proxy-Fehler" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "CAPTCHA" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "zu viele Anfragen" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "Zugriff verweigert" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "Server-API-Fehler" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "Ausgesetzt" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "vor {minutes} Minute(n)" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "vor {hours} Stunde(n), {minutes} Minute(n)" @@ -477,15 +476,15 @@ msgstr "Dieser Eintrag wurde überschrieben von" msgid "Channel" msgstr "Kanal" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "Bitrate" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "Stimmen" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "Clicks" @@ -494,7 +493,7 @@ msgstr "Clicks" msgid "Language" msgstr "Sprache" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -540,8 +539,7 @@ msgstr "Ahmia blacklist" #: searx/plugins/ahmia_filter.py:33 msgid "Filter out onion results that appear in Ahmia's blacklist." -msgstr "" -"Filtern der Onion Links, die in der schwarzen Liste von Ahmia erscheinen." +msgstr "Filtern der Onion Links, die in der schwarzen Liste von Ahmia erscheinen." #: searx/plugins/calculator.py:38 msgid "Basic Calculator" @@ -726,10 +724,6 @@ msgstr "Autor" msgid "cached" msgstr "Im Cache" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "proxy" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "Fehlerbericht auf GitHub erstellen" @@ -1200,8 +1194,8 @@ msgid "" "A URL containing your preferences. This URL can be used to restore your " "settings on a different device." msgstr "" -"URL die Ihre Einstellungen enthält. Diese URL kann verwendet werden, um Ihre " -"Einstellungen auf einem anderen Gerät wiederherzustellen" +"URL die Ihre Einstellungen enthält. Diese URL kann verwendet werden, um " +"Ihre Einstellungen auf einem anderen Gerät wiederherzustellen" #: searx/templates/simple/preferences/cookies.html:46 msgid "Copy preferences hash" @@ -2129,3 +2123,7 @@ msgstr "Video verstecken" #~ "anderen Browser werden die aktuellen " #~ "Einstellungen in dem anderen Browser " #~ "gespeichert (Cookie)." + +#~ msgid "proxied" +#~ msgstr "proxy" + diff --git a/searx/translations/dv/LC_MESSAGES/messages.mo b/searx/translations/dv/LC_MESSAGES/messages.mo index 43b6891aa..562c8958f 100644 Binary files a/searx/translations/dv/LC_MESSAGES/messages.mo and b/searx/translations/dv/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/dv/LC_MESSAGES/messages.po b/searx/translations/dv/LC_MESSAGES/messages.po index 16b8413b7..df9f388d9 100644 --- a/searx/translations/dv/LC_MESSAGES/messages.po +++ b/searx/translations/dv/LC_MESSAGES/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: 2025-01-06 15:52+0000\n" "Last-Translator: Anonymous " "\n" @@ -62,7 +62,7 @@ msgid "videos" msgstr "ވީޑިޔޯތައް" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "" @@ -339,93 +339,93 @@ msgstr "" msgid "answered" msgstr "" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "" @@ -456,15 +456,15 @@ msgstr "" msgid "Channel" msgstr "" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "" @@ -473,7 +473,7 @@ msgstr "" msgid "Language" msgstr "" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -685,10 +685,6 @@ msgstr "" msgid "cached" msgstr "" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "" @@ -1723,3 +1719,6 @@ msgstr "" #~ "sync preferences across devices." #~ msgstr "" +#~ msgid "proxied" +#~ msgstr "" + diff --git a/searx/translations/el_GR/LC_MESSAGES/messages.mo b/searx/translations/el_GR/LC_MESSAGES/messages.mo index e910f374c..7133b91a7 100644 Binary files a/searx/translations/el_GR/LC_MESSAGES/messages.mo and b/searx/translations/el_GR/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/el_GR/LC_MESSAGES/messages.po b/searx/translations/el_GR/LC_MESSAGES/messages.po index 1a01a2b52..5e8c12ea9 100644 --- a/searx/translations/el_GR/LC_MESSAGES/messages.po +++ b/searx/translations/el_GR/LC_MESSAGES/messages.po @@ -22,19 +22,18 @@ # sakistzimas , 2025. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: 2025-04-03 21:59+0000\n" "Last-Translator: sakistzimas \n" -"Language-Team: Greek \n" "Language: el_GR\n" +"Language-Team: Greek " +"\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" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.10.2\n" "Generated-By: Babel 2.17.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -78,7 +77,7 @@ msgid "videos" msgstr "Βίντεο" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "ράδιο" @@ -355,93 +354,93 @@ msgstr "κλειστό" msgid "answered" msgstr "απάντησε" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "Δεν βρέθηκαν αντικείμενα" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "Πηγή" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "Σφάλμα φόρτωσης της επόμενης σελίδας" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "Μη έγκυρες ρυθμίσεις, παρακαλούμε ελέγξτε τις προτιμήσεις σας" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "Μη έγκυρες ρυθμίσεις" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "σφάλμα αναζήτησης" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "Λήξη χρόνου" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "σφάλμα ανάλυσης" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "Σφάλμα πρωτοκόλλου HTTP" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "Σφάλμα δικτύου" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "Σφάλμα SSL: η επικύρωση του πιστοποιητικού απέτυχε" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "Απροσδόκητο σφάλμα" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "Σφάλμα HTTP" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "Σφάλμα σύνδεσης HTTP" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "Σφάλμα διακομιστή μεσολάβησης" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "CAPTCHA" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "υπέρβαση ορίου αιτημάτων" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "Άρνηση πρόσβασης" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "Σφάλμα API διακομιστή" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "Σε αναστολή" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "{minutes} λεπτά πριν" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "{hours} ώρα(-ες), {minutes} λεπτό(-ά) πριν" @@ -472,15 +471,15 @@ msgstr "Αυτή η καταχώριση έχει αντικατασταθεί msgid "Channel" msgstr "Κανάλι" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "ρυθμός μετάδοσης" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "ψήφους" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "κλικ" @@ -489,7 +488,7 @@ msgstr "κλικ" msgid "Language" msgstr "Γλώσσα" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -720,10 +719,6 @@ msgstr "Συγγραφέας" msgid "cached" msgstr "προσωρινά αποθηκευμένο" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "Διαμεσολαβημένα" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "Ξεκινήστε την υποβολή ενός νέου ζητήματος στο GitHub" @@ -1197,7 +1192,8 @@ msgid "" "settings on a different device." msgstr "" "Ένα URL που περιέχει τις προτιμήσεις σας. Αυτό το URL μπορεί να " -"χρησιμοποιηθεί για να επαναφέρει τις ρυθμίσεις σας σε διαφορετική συσκευή." +"χρησιμοποιηθεί για να επαναφέρει τις ρυθμίσεις σας σε διαφορετική " +"συσκευή." #: searx/templates/simple/preferences/cookies.html:46 msgid "Copy preferences hash" @@ -2108,3 +2104,7 @@ msgstr "απόκρυψη βίντεο" #~ "σύνδεσμο προτιμήσεων μπορεί να χρησιμοποιηθεί" #~ " για το συγχρονισμό των προτιμήσεων " #~ "σας σε όλες τις συσκευές." + +#~ msgid "proxied" +#~ msgstr "Διαμεσολαβημένα" + diff --git a/searx/translations/en/LC_MESSAGES/messages.mo b/searx/translations/en/LC_MESSAGES/messages.mo index 944c3151b..45807db42 100644 Binary files a/searx/translations/en/LC_MESSAGES/messages.mo and b/searx/translations/en/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/en/LC_MESSAGES/messages.po b/searx/translations/en/LC_MESSAGES/messages.po index 00ec55f84..dd462aafb 100644 --- a/searx/translations/en/LC_MESSAGES/messages.po +++ b/searx/translations/en/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: 2014-01-30 15:22+0100\n" "Last-Translator: FULL NAME \n" "Language: en\n" @@ -59,7 +59,7 @@ msgid "videos" msgstr "" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "" @@ -336,93 +336,93 @@ msgstr "" msgid "answered" msgstr "" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "" @@ -453,15 +453,15 @@ msgstr "" msgid "Channel" msgstr "" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "" @@ -470,7 +470,7 @@ msgstr "" msgid "Language" msgstr "" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -682,10 +682,6 @@ msgstr "" msgid "cached" msgstr "" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "" @@ -1988,3 +1984,6 @@ msgstr "" #~ "sync preferences across devices." #~ msgstr "" +#~ msgid "proxied" +#~ msgstr "" + diff --git a/searx/translations/eo/LC_MESSAGES/messages.mo b/searx/translations/eo/LC_MESSAGES/messages.mo index 43e114e38..fda9e39a4 100644 Binary files a/searx/translations/eo/LC_MESSAGES/messages.mo and b/searx/translations/eo/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/eo/LC_MESSAGES/messages.po b/searx/translations/eo/LC_MESSAGES/messages.po index 31fd6188e..fe8a720ce 100644 --- a/searx/translations/eo/LC_MESSAGES/messages.po +++ b/searx/translations/eo/LC_MESSAGES/messages.po @@ -21,19 +21,18 @@ # return42 , 2025. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: 2025-05-09 07:09+0000\n" "Last-Translator: return42 \n" -"Language-Team: Esperanto \n" "Language: eo\n" +"Language-Team: Esperanto " +"\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" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.10.2\n" "Generated-By: Babel 2.17.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -77,7 +76,7 @@ msgid "videos" msgstr "videoj" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "radio" @@ -354,93 +353,93 @@ msgstr "" msgid "answered" msgstr "" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "Nenio trovita" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "Fonto" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "Eraro dum la ŝarĝado de la sekvan paĝon" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "Nevalidaj agordoj, bonvolu redaktu viajn agordojn" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "Nevalidaj agordoj" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "serĉa eraro" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "eltempiĝo" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "analiza eraro" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "HTTP-protokolo-eraro" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "reta eraro" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "SSL-eraro: atestila validigo malsukcesis" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "neatendita kraŝo" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "HTTP-eraro" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "HTTP-konekto-eraro" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "prokurilo-eraro" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "CAPTCHA" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "tro da petoj" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "aliro rifuzita" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "servilo-API-eraro" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "Suspendigita" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "antaŭ {minutes} minuto(j)" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "antaŭ {hours} horo(j), {minutes} minuto(j)" @@ -471,15 +470,15 @@ msgstr "Tiu ĉi enigo estis anstataŭigita per" msgid "Channel" msgstr "Kanalo" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "bito-rapido" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "voĉoj" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "klakoj" @@ -488,7 +487,7 @@ msgstr "klakoj" msgid "Language" msgstr "Lingvo" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -712,10 +711,6 @@ msgstr "Verkisto" msgid "cached" msgstr "kaŝmemorigita" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "prokurata" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "Komencu sendi novan numeron en GitHub" @@ -2068,3 +2063,7 @@ msgstr "kaŝi videojn" #~ "Specifante kutimajn agordojn en la URL" #~ " de preferoj povas esti uzata por " #~ "sinkronigi preferojn tra aparatoj." + +#~ msgid "proxied" +#~ msgstr "prokurata" + diff --git a/searx/translations/es/LC_MESSAGES/messages.mo b/searx/translations/es/LC_MESSAGES/messages.mo index f66271c60..bf052ca7a 100644 Binary files a/searx/translations/es/LC_MESSAGES/messages.mo and b/searx/translations/es/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/es/LC_MESSAGES/messages.po b/searx/translations/es/LC_MESSAGES/messages.po index 2fba6eeae..1883ae4d4 100644 --- a/searx/translations/es/LC_MESSAGES/messages.po +++ b/searx/translations/es/LC_MESSAGES/messages.po @@ -44,13 +44,14 @@ # curtwheeler , 2025. # return42 , 2025. # Atul_Eterno , 2025. +# realkendrick_fr , 2025. msgid "" msgstr "" "Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" -"PO-Revision-Date: 2025-04-24 14:06+0000\n" -"Last-Translator: Atul_Eterno \n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" +"PO-Revision-Date: 2025-05-27 03:58+0000\n" +"Last-Translator: realkendrick_fr \n" "Language-Team: Spanish \n" "Language: es\n" @@ -58,7 +59,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.10.2\n" +"X-Generator: Weblate 5.11.4\n" "Generated-By: Babel 2.17.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -102,7 +103,7 @@ msgid "videos" msgstr "vídeos" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "radio" @@ -379,93 +380,93 @@ msgstr "cerrar" msgid "answered" msgstr "contestado" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "Ningún artículo encontrado" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "Fuente" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "Error al cargar la siguiente página" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "Ajustes inválidos, por favor, cambia tus preferencias" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "Ajustes inválidos" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "error en la búsqueda" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "expirado" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "error de análisis" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "Error de protocolo HTTP" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "error de red" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "Error SSL: la validación del certificado ha fallado" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "cierre inesperado" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "Error de HTTP" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "Error de conexión HTTP" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "error de proxy" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "CAPTCHA" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "demasiadas peticiones" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "acceso denegado" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "error en la API del servidor" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "Suspendido" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "hace {minutes} minuto(s)" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "hace {hours} hora(s) y {minutes} minuto(s)" @@ -496,15 +497,15 @@ msgstr "Esta entrada ha sido sustituida por" msgid "Channel" msgstr "Canal" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "bitrate" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "votos" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "clics" @@ -513,7 +514,7 @@ msgstr "clics" msgid "Language" msgstr "Idioma" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -558,7 +559,7 @@ msgstr "Lista negra de Ahmia" #: searx/plugins/ahmia_filter.py:33 msgid "Filter out onion results that appear in Ahmia's blacklist." -msgstr "" +msgstr "Filtrar resultados de onion que aparezcan en la lista negra de Ahmia." #: searx/plugins/calculator.py:38 msgid "Basic Calculator" @@ -741,10 +742,6 @@ msgstr "Autor" msgid "cached" msgstr "en caché" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "por un proxy" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "Enviar un nuevo problema a GitHub" @@ -2134,3 +2131,6 @@ msgstr "ocultar video" #~ "URL de preferencias puede usarse para" #~ " sincronizar las preferencias entre " #~ "dispositivos." + +#~ msgid "proxied" +#~ msgstr "por un proxy" diff --git a/searx/translations/et/LC_MESSAGES/messages.mo b/searx/translations/et/LC_MESSAGES/messages.mo index c9eaf896f..4ca574548 100644 Binary files a/searx/translations/et/LC_MESSAGES/messages.mo and b/searx/translations/et/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/et/LC_MESSAGES/messages.po b/searx/translations/et/LC_MESSAGES/messages.po index c4cdbb53b..319b911d4 100644 --- a/searx/translations/et/LC_MESSAGES/messages.po +++ b/searx/translations/et/LC_MESSAGES/messages.po @@ -20,8 +20,8 @@ msgid "" msgstr "" "Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" -"PO-Revision-Date: 2025-03-30 01:58+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" +"PO-Revision-Date: 2025-05-23 07:10+0000\n" "Last-Translator: Priit Jõerüüt \n" "Language-Team: Estonian \n" @@ -30,7 +30,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.10.2\n" +"X-Generator: Weblate 5.11.4\n" "Generated-By: Babel 2.17.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -74,7 +74,7 @@ msgid "videos" msgstr "videod" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "raadio" @@ -351,93 +351,93 @@ msgstr "suletud" msgid "answered" msgstr "vastatud" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "Üksust ei leitud" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "Allikas" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "Viga järgmise lehekülje laadimisel" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "Sobimatud seaded, palun muuda oma eelistusi" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "Sobimatud seaded" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "otsingu viga" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "päring aegus" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "parsimise viga" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "HTTP-protokolli viga" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "võrguviga" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "SSL viga: sertifikaadi valideerimine ei õnnestunud" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "ootamatu krahh" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "HTTP-viga" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "HTTP-ühenduse viga" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "proksiserveri viga" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "ROBOTILÕKS" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "liiga palju päringuid" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "ligipääs keelatud" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "serveri API viga" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "Peatatud" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "{minutes} minut(it) tagasi" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "{hours} tund(i), {minutes} minut(it) tagasi" @@ -468,15 +468,15 @@ msgstr "See üksus on asendatud" msgid "Channel" msgstr "Kanal" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "bitikiirus" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "hääled" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "klikid" @@ -485,7 +485,7 @@ msgstr "klikid" msgid "Language" msgstr "Keel" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -686,7 +686,7 @@ msgstr "Avalikud serverid" #: searx/templates/simple/base.html:75 msgid "Privacy policy" -msgstr "Privaatsuspoliitika" +msgstr "Andmekaitsepõhimõtted" #: searx/templates/simple/base.html:78 msgid "Contact instance maintainer" @@ -715,10 +715,6 @@ msgstr "Autor" msgid "cached" msgstr "vahemälus" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "proksiserveris" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "Alusta veateate või ettepaneku koostamist GitHubis" @@ -2076,3 +2072,6 @@ msgstr "peida video" #~ "Kohandatud seadete määramine eelistuste URL-i" #~ " saad kasutada eelistuste sünkroniseerimiseks " #~ "eri seadmete vahel." + +#~ msgid "proxied" +#~ msgstr "proksiserveris" diff --git a/searx/translations/eu/LC_MESSAGES/messages.mo b/searx/translations/eu/LC_MESSAGES/messages.mo index 6ed8ab63d..72a576f40 100644 Binary files a/searx/translations/eu/LC_MESSAGES/messages.mo and b/searx/translations/eu/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/eu/LC_MESSAGES/messages.po b/searx/translations/eu/LC_MESSAGES/messages.po index bb5cb1409..01b597de1 100644 --- a/searx/translations/eu/LC_MESSAGES/messages.po +++ b/searx/translations/eu/LC_MESSAGES/messages.po @@ -18,7 +18,7 @@ msgid "" msgstr "" "Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: 2025-02-12 15:39+0000\n" "Last-Translator: alexgabi " "\n" @@ -72,7 +72,7 @@ msgid "videos" msgstr "bideoak" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "irratia" @@ -349,93 +349,93 @@ msgstr "itxita" msgid "answered" msgstr "erantzunda" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "Ez da elementurik aurkitu" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "Iturria" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "Errorea hurrengo orrialdea kargatzean" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "Ezarpen baliogabeak, editatu zure hobespenak" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "Ezarpen baliogabeak" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "bilaketa akatsa" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "itxarote-denbora" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "analizatze errorea" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "HTTP protokoloaren errorea" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "sareko errorea" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "SSL errorea: ziurtagiria baliozkotzeak huts egin du" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "ustekabeko kraskatzea" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "HTTP errorea" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "HTTP konexioaren errorea" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "proxy-aren errorea" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "CAPTCHA" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "eskaera gehiegi" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "sarbidea ukatua" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "API zerbitzariaren errorea" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "Etenda" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "duela {minutes} minutu" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "duela {hours} ordu eta {minutes} minutu" @@ -466,15 +466,15 @@ msgstr "Sarrera hau hurrengoarekin ordezkatu da" msgid "Channel" msgstr "Kanala" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "bit emaria" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "botoak" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "klikak" @@ -483,7 +483,7 @@ msgstr "klikak" msgid "Language" msgstr "Hizkuntza" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -711,10 +711,6 @@ msgstr "Egilea" msgid "cached" msgstr "cachean gordeta" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "proxyan gordeta" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "Hasi gai -issue- berri bat bidaltzen GitHub-en" @@ -2072,3 +2068,6 @@ msgstr "ezkutatu bideoa" #~ "zehaztea erabil daiteke gailuen hobespenak " #~ "sinkronizatzeko." +#~ msgid "proxied" +#~ msgstr "proxyan gordeta" + diff --git a/searx/translations/fa_IR/LC_MESSAGES/messages.mo b/searx/translations/fa_IR/LC_MESSAGES/messages.mo index 362e896da..d94251bc6 100644 Binary files a/searx/translations/fa_IR/LC_MESSAGES/messages.mo and b/searx/translations/fa_IR/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/fa_IR/LC_MESSAGES/messages.po b/searx/translations/fa_IR/LC_MESSAGES/messages.po index cd572588b..f3f87ccc3 100644 --- a/searx/translations/fa_IR/LC_MESSAGES/messages.po +++ b/searx/translations/fa_IR/LC_MESSAGES/messages.po @@ -26,19 +26,18 @@ # ehsanrs2 , 2025. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: 2025-05-06 12:53+0000\n" "Last-Translator: ehsanrs2 \n" -"Language-Team: Persian \n" "Language: fa_IR\n" +"Language-Team: Persian " +"\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" -"Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 5.10.2\n" "Generated-By: Babel 2.17.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -82,7 +81,7 @@ msgid "videos" msgstr "ویدیوها" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "رادیو" @@ -359,93 +358,93 @@ msgstr "بسته شده" msgid "answered" msgstr "جواب داده شده" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "چیزی پیدا نشد" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "منبع" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "خطا در بارگزاری صفحه جدید" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "تنظیمات نادرست است، لطفا تنظیمات جستجو را تغییر دهید" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "تنظیمات نادرست" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "خطای جست‌وجو" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "مهلت پاسخ‌دهی به پایان رسید" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "خطای تجزیه" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "خطای پروتکل HTTP" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "خطای شبکه" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "ارور SSL:اعتبار سنجی گواهی امنیتی SSL ناموفق بود" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "مشکل غیرمنتظره" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "خطای HTTP" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "خطای اتصال HTTP" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "خطای پروکسی" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "کپچا" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "درخواست‌های زیاد" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "دسترسی مجاز نیست" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "خطای API سرور" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "تعلیق‌شده" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "{minutes} دقیقه پیش" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "{hours} ساعت و {minutes} دقیقه پیش" @@ -476,15 +475,15 @@ msgstr "این ورودی معلق شده است، توسط" msgid "Channel" msgstr "کانال" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "بیت ریت" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "رای ها" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "کلیک ها" @@ -493,7 +492,7 @@ msgstr "کلیک ها" msgid "Language" msgstr "زبان" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -719,10 +718,6 @@ msgstr "نویسنده" msgid "cached" msgstr "جاسازی‌شده" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "پروکسی‌شده" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "شروع ارائه ی یک مشکل در گیتهاب" @@ -1186,8 +1181,8 @@ msgid "" "A URL containing your preferences. This URL can be used to restore your " "settings on a different device." msgstr "" -"یک URL حاوی تنظیمات برگزیده شما. از این URL می‌توان برای بازیابی تنظیمات شما " -"در دستگاه دیگری استفاده کرد." +"یک URL حاوی تنظیمات برگزیده شما. از این URL می‌توان برای بازیابی تنظیمات " +"شما در دستگاه دیگری استفاده کرد." #: searx/templates/simple/preferences/cookies.html:46 msgid "Copy preferences hash" @@ -2091,3 +2086,7 @@ msgstr "پنهان‌سازی ویدئو" #~ "تعیین تنظیمات سفارشی در URL تنظیمات " #~ "برگزیده می‌تواند برای همگام‌سازی تنظیمات " #~ "برگزیده در بین دستگاه‌ها استفاده شود." + +#~ msgid "proxied" +#~ msgstr "پروکسی‌شده" + diff --git a/searx/translations/fi/LC_MESSAGES/messages.mo b/searx/translations/fi/LC_MESSAGES/messages.mo index 8b2c85d89..651bb25d1 100644 Binary files a/searx/translations/fi/LC_MESSAGES/messages.mo and b/searx/translations/fi/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/fi/LC_MESSAGES/messages.po b/searx/translations/fi/LC_MESSAGES/messages.po index 56a78d2e0..8ee646194 100644 --- a/searx/translations/fi/LC_MESSAGES/messages.po +++ b/searx/translations/fi/LC_MESSAGES/messages.po @@ -17,13 +17,14 @@ # Anonymous , 2025. # Ricky-Tigg , 2025. # return42 , 2025. +# artnay , 2025. msgid "" msgstr "" "Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" -"PO-Revision-Date: 2025-03-31 18:08+0000\n" -"Last-Translator: return42 \n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" +"PO-Revision-Date: 2025-05-27 03:58+0000\n" +"Last-Translator: artnay \n" "Language-Team: Finnish \n" "Language: fi\n" @@ -31,7 +32,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.10.2\n" +"X-Generator: Weblate 5.11.4\n" "Generated-By: Babel 2.17.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -75,7 +76,7 @@ msgid "videos" msgstr "videot" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "radio" @@ -352,93 +353,93 @@ msgstr "suljettu" msgid "answered" msgstr "vastattu" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "Tietuetta ei löytynyt" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "Lähde" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "Virhe ladattaessa seuraavaa sivua" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "Virheelliset asetukset, muokkaa siis asetuksia" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "Virheelliset asetukset" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "hakuvirhe" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "aikakatkaistu" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "jäsentämisvirhe" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "HTTP-protokollavirhe" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "verkkovirhe" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "SSL-virhe: sertifikaatin vahvistus epäonnistui" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "odottamaton kaatuminen" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "HTTP-virhe" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "HTTP-yhteysvirhe" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "proxy-virhe" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "CAPTCHA" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "liian monta pyyntöä" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "pääsy kielletty" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "palvelimen API-virhe" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "Keskeytetty" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "{minutes} minuutti(a) sitten" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "{hours} tunti(a), {minutes} minuutti(a) sitten" @@ -469,15 +470,15 @@ msgstr "Tämän kohdan on korvannut" msgid "Channel" msgstr "Kanava" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "bittinopeus" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "ääntä" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "klikkaukset" @@ -486,7 +487,7 @@ msgstr "klikkaukset" msgid "Language" msgstr "Kieli" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -527,15 +528,15 @@ msgstr "Tiedoston laatu" #: searx/plugins/ahmia_filter.py:32 msgid "Ahmia blacklist" -msgstr "" +msgstr "Ahmia-estolista" #: searx/plugins/ahmia_filter.py:33 msgid "Filter out onion results that appear in Ahmia's blacklist." -msgstr "" +msgstr "Suodata pois Ahmian estolistalla olevat onion-tulokset." #: searx/plugins/calculator.py:38 msgid "Basic Calculator" -msgstr "" +msgstr "Peruslaskin" #: searx/plugins/calculator.py:39 msgid "Calculate mathematical expressions via the search bar" @@ -555,7 +556,7 @@ msgstr "hash-digest" #: searx/plugins/hostnames.py:123 msgid "Hostnames plugin" -msgstr "Isäntänimien laajennus" +msgstr "Isäntänimien liitännäinen" #: searx/plugins/hostnames.py:124 msgid "Rewrite hostnames, remove results or prioritize them based on the hostname" @@ -597,16 +598,16 @@ msgstr "Selaimesi tunnistetiedot: " #: searx/plugins/tor_check.py:42 msgid "Tor check plugin" -msgstr "Tor-verkon tarkistus lisäosa" +msgstr "Tor-verkon tarkistusliitännäinen" #: searx/plugins/tor_check.py:44 msgid "" "This plugin checks if the address of the request is a Tor exit-node, and " "informs the user if it is; like check.torproject.org, but from SearXNG." msgstr "" -"Tämä lisäosa tarkistaa, tuleeko pyyntö TOR exit nodesta, ja ilmoittaa " -"käyttäjälle, jos se on, samalla tavalla kuin check.torproject.org, mutta " -"SearXNGista." +"Tämä liitännäinen tarkistaa, tuleeko pyyntö TOR-poistumissolmusta, ja " +"ilmoittaa käyttäjälle, jos niin on; samalla tavalla kuin " +"check.torproject.org, mutta SearXNGista." #: searx/plugins/tor_check.py:65 msgid "Could not download the list of Tor exit-nodes from" @@ -630,7 +631,7 @@ msgstr "Poista seurantapalvelinten argumentit palautetusta osoitteesta" #: searx/plugins/unit_converter.py:49 msgid "Unit converter plugin" -msgstr "" +msgstr "Yksikkömuuntajan liitännäinen" #: searx/plugins/unit_converter.py:50 msgid "Convert between units" @@ -714,10 +715,6 @@ msgstr "Tekijä" msgid "cached" msgstr "välimuistissa" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "välityspalvelimella" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "Avaa uusi issue GitHubissa" @@ -1124,7 +1121,7 @@ msgstr "Tämä on luettelo SearXNG:n pikavastausmoduuleista." #: searx/templates/simple/preferences/answerers.html:29 msgid "This is the list of plugins." -msgstr "Tämä on lista lisäosista." +msgstr "Tämä on lista liitännäisistä." #: searx/templates/simple/preferences/autocomplete.html:2 msgid "Autocomplete" @@ -1184,6 +1181,8 @@ msgid "" "A URL containing your preferences. This URL can be used to restore your " "settings on a different device." msgstr "" +"Asetuksesi sisältävä URL-osoite. Tätä URL-osoitetta voi käyttää asetusten " +"palauttamiseen eri laitteella." #: searx/templates/simple/preferences/cookies.html:46 msgid "Copy preferences hash" @@ -2088,3 +2087,6 @@ msgstr "piilota video" #~ "Määrittämällä mukautettuja asetuksia asetusten " #~ "URL-osoitteessa voidaan käyttää " #~ "synkronoimiseen asetuksia eri laitteissa." + +#~ msgid "proxied" +#~ msgstr "välityspalvelimella" diff --git a/searx/translations/fil/LC_MESSAGES/messages.mo b/searx/translations/fil/LC_MESSAGES/messages.mo index 76a0bd13f..ecb3542de 100644 Binary files a/searx/translations/fil/LC_MESSAGES/messages.mo and b/searx/translations/fil/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/fil/LC_MESSAGES/messages.po b/searx/translations/fil/LC_MESSAGES/messages.po index 69d2760ed..8043b0804 100644 --- a/searx/translations/fil/LC_MESSAGES/messages.po +++ b/searx/translations/fil/LC_MESSAGES/messages.po @@ -19,20 +19,19 @@ # Kita Ikuyo , 2025. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: 2025-04-09 02:43+0000\n" "Last-Translator: Kita Ikuyo \n" -"Language-Team: Filipino \n" "Language: fil\n" +"Language-Team: Filipino " +"\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" -"Plural-Forms: nplurals=2; plural=(n == 1 || n==2 || n==3) || (n % 10 != 4 || " -"n % 10 != 6 || n % 10 != 9);\n" -"X-Generator: Weblate 5.10.2\n" "Generated-By: Babel 2.17.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -76,7 +75,7 @@ msgid "videos" msgstr "mga bidyo" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "radyo" @@ -353,93 +352,93 @@ msgstr "sarado" msgid "answered" msgstr "sinagot" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "Walang nakita na aytem" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "Pinagmulan" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "Error sa paglo-load ng susunod na pahina" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "Di-wastong mga setting, pakibago ang iyong mga kagustuhan" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "Di-wastong mga setting" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "nagkaproblema sa paghahanap ng mga resulta" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "panandaliang pagtigil" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "error sa pag-parse ng mga resulta" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "Error sa HTTPS protokol" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "Network Error" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "SSL error: Nabigo ang pagpapatunay ng sertipiko" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "Hindi inaasahang pagbagsak" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "HTTP error" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "Error sa koneksyong HTTP" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "Proxy Error" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "CAPTCHA" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "masyadong maraming mga kahilingan" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "tinanggihan ang access" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "pagkakamali sa server API" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "Suspendido" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "{minutes} na minuto ang nakalipas" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "{hours} oras at {minutes} na minto ang nakalipas" @@ -470,15 +469,15 @@ msgstr "Ang tala na ito ay ipinagpaliban ng" msgid "Channel" msgstr "Tyanel" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "bitrate" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "mga boto" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "mga click" @@ -487,7 +486,7 @@ msgstr "mga click" msgid "Language" msgstr "Wika" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -714,10 +713,6 @@ msgstr "Awtor" msgid "cached" msgstr "naka-cache" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "na-proxy" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "Mag-simulang mag-abot ng mga bagong isyu sa GitHub" @@ -1186,8 +1181,8 @@ msgid "" "A URL containing your preferences. This URL can be used to restore your " "settings on a different device." msgstr "" -"URL na naglalaman ng iyong mga kagustuhan. Maaaring gamitin ang URL na ito " -"para i-restore ang mga setting sa ibang device." +"URL na naglalaman ng iyong mga kagustuhan. Maaaring gamitin ang URL na " +"ito para i-restore ang mga setting sa ibang device." #: searx/templates/simple/preferences/cookies.html:46 msgid "Copy preferences hash" @@ -2104,3 +2099,7 @@ msgstr "itago ang video" #~ "maaaring gamitin upang i-sync ang mga" #~ " preference sa iba't ibang mga " #~ "aparato." + +#~ msgid "proxied" +#~ msgstr "na-proxy" + diff --git a/searx/translations/fr/LC_MESSAGES/messages.mo b/searx/translations/fr/LC_MESSAGES/messages.mo index 217fa6c6f..29430f3b2 100644 Binary files a/searx/translations/fr/LC_MESSAGES/messages.mo and b/searx/translations/fr/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/fr/LC_MESSAGES/messages.po b/searx/translations/fr/LC_MESSAGES/messages.po index 9d52eb4d0..b5bd5f595 100644 --- a/searx/translations/fr/LC_MESSAGES/messages.po +++ b/searx/translations/fr/LC_MESSAGES/messages.po @@ -41,19 +41,18 @@ # wags07 , 2025. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: 2025-04-01 21:18+0000\n" "Last-Translator: return42 \n" -"Language-Team: French \n" "Language: fr\n" +"Language-Team: French " +"\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" -"Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 5.10.2\n" "Generated-By: Babel 2.17.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -97,7 +96,7 @@ msgid "videos" msgstr "vidéos" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "radio" @@ -374,93 +373,93 @@ msgstr "Fermé" msgid "answered" msgstr "répondu" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "Pas d'élément trouvé" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "Source" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "Erreur lors du chargement de la page suivante" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "Paramètres non valides, veuillez éditer vos préférences" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "Paramètres non valides" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "erreur de recherche" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "délai dépassé" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "erreur d'analyse" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "erreur de protocole HTTP" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "Erreur de réseau" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "Erreur SSL : La vérification du certificat a échoué" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "erreur inattendue" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "erreur HTTP" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "erreur de connexion HTTP" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "Erreur proxy" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "CAPTCHA" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "trop de requêtes" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "accès refusé" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "erreur API du serveur" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "Suspendu" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "il y a {minutes} minute(s)" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "il y a {hours} heure(s), {minutes} minute(s)" @@ -491,15 +490,15 @@ msgstr "Cet item a été remplacé par" msgid "Channel" msgstr "Chaîne" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "débit" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "voix" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "clics" @@ -508,7 +507,7 @@ msgstr "clics" msgid "Language" msgstr "Langue" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -554,8 +553,7 @@ msgstr "Ahmia liste noire" #: searx/plugins/ahmia_filter.py:33 msgid "Filter out onion results that appear in Ahmia's blacklist." -msgstr "" -"Filtrer les résultat d’onion qui apparaissent dans la liste noire d’Ahmia." +msgstr "Filtrer les résultat d’onion qui apparaissent dans la liste noire d’Ahmia." #: searx/plugins/calculator.py:38 msgid "Basic Calculator" @@ -738,10 +736,6 @@ msgstr "Auteur" msgid "cached" msgstr "en cache" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "proxifié" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "Soumettre un nouveau problème sur GitHub" @@ -1210,8 +1204,8 @@ msgid "" "A URL containing your preferences. This URL can be used to restore your " "settings on a different device." msgstr "" -"Un lien contenant vos préférences. Ce lien peut être utilisé pour restaurer " -"vos paramètres sur un autre appareil." +"Un lien contenant vos préférences. Ce lien peut être utilisé pour " +"restaurer vos paramètres sur un autre appareil." #: searx/templates/simple/preferences/cookies.html:46 msgid "Copy preferences hash" @@ -2136,3 +2130,7 @@ msgstr "cacher la vidéo" #~ " dans l'URL des préférences peut être" #~ " utilisée pour synchroniser les préférences" #~ " entre les appareils." + +#~ msgid "proxied" +#~ msgstr "proxifié" + diff --git a/searx/translations/ga/LC_MESSAGES/messages.mo b/searx/translations/ga/LC_MESSAGES/messages.mo index a7fbc2a6c..26d81894b 100644 Binary files a/searx/translations/ga/LC_MESSAGES/messages.mo and b/searx/translations/ga/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/ga/LC_MESSAGES/messages.po b/searx/translations/ga/LC_MESSAGES/messages.po index f66b115a4..fbb750db3 100644 --- a/searx/translations/ga/LC_MESSAGES/messages.po +++ b/searx/translations/ga/LC_MESSAGES/messages.po @@ -8,18 +8,17 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: 2025-04-14 09:17+0000\n" "Last-Translator: aindriu80 \n" -"Language-Team: Irish \n" "Language: ga\n" +"Language-Team: Irish " +"\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" -"Plural-Forms: nplurals=5; plural=n==1 ? 0 : n==2 ? 1 : (n>2 && n<7) ? 2 :(" -"n>6 && n<11) ? 3 : 4;\n" -"X-Generator: Weblate 5.10.2\n" "Generated-By: Babel 2.17.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -63,7 +62,7 @@ msgid "videos" msgstr "físeáin" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "raidió" @@ -340,93 +339,93 @@ msgstr "dúnta" msgid "answered" msgstr "freagraí" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "Níor aimsíodh aon rud" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "Foinse" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "Earráid ag luchtú an chéad leathanach eile" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "Socruithe neamhbhailí, cuir do chuid roghanna in" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "Socruithe neamhbhaintí" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "earráid cuardaigh" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "amuigh" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "earráid parsála" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "Earráid prótacal HTTP" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "earráid líonra" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "Earráid SSL: theip ar bhailíochtú teastais" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "timpiste gan choinne" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "Earráid HTTP" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "Earráid nasc HTTP" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "earráid seachfhá" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "CAPTCHA" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "an iomarca iarratais" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "rochtain diúltaithe" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "earráid API freastalaí" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "Ar fionraí" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "{minutes} nóiméad ó shin" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "{hours} uair(eanta), {minutes} nóiméad ó shin" @@ -457,15 +456,15 @@ msgstr "Cuireadh an iontráil seo in ionad ag" msgid "Channel" msgstr "Cainéal" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "ráta giotán" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "vótaí" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "cliceáil" @@ -474,7 +473,7 @@ msgstr "cliceáil" msgid "Language" msgstr "Teanga" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -704,10 +703,6 @@ msgstr "Údar" msgid "cached" msgstr "taisceáilte" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "trí sheachvótálaí" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "Tosaigh eisiúint nua a chur isteach ar GitHub" @@ -1638,3 +1633,7 @@ msgstr "físeán a cheilt" #~ "shonrú sna roghanna URL a úsáid " #~ "chun roghanna a shioncronú ar fud " #~ "feistí." + +#~ msgid "proxied" +#~ msgstr "trí sheachvótálaí" + diff --git a/searx/translations/gl/LC_MESSAGES/messages.mo b/searx/translations/gl/LC_MESSAGES/messages.mo index 0504c17d0..e0a75d4bc 100644 Binary files a/searx/translations/gl/LC_MESSAGES/messages.mo and b/searx/translations/gl/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/gl/LC_MESSAGES/messages.po b/searx/translations/gl/LC_MESSAGES/messages.po index 83f13d479..4e510a593 100644 --- a/searx/translations/gl/LC_MESSAGES/messages.po +++ b/searx/translations/gl/LC_MESSAGES/messages.po @@ -13,19 +13,18 @@ # ghose , 2025. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: 2025-04-02 11:49+0000\n" "Last-Translator: ghose \n" -"Language-Team: Galician \n" "Language: gl\n" +"Language-Team: Galician " +"\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" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.10.2\n" "Generated-By: Babel 2.17.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -69,7 +68,7 @@ msgid "videos" msgstr "vídeos" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "radio" @@ -346,93 +345,93 @@ msgstr "fechado" msgid "answered" msgstr "respondido" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "Non se atoparon elementos" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "Fonte" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "Erro ao cargar a páxina seguinte" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "Axustes non válidos, por favor edita a configuración" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "Axustes non válidos" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "fallo na busca" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "tempo máximo" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "erro sintáctico" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "erro de protocolo HTTP" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "erro de conexión" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "Erro SSL: fallou a validación do certificado" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "erro non agardado" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "Erro HTTP" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "Erro da conexión HTTP" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "erro do proxy" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "CAPTCHA" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "demasiadas solicitudes" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "acceso denegado" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "erro na API do servidor" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "Suspendido" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "fai {minutes} minuto(s)" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "fai {hours} hora(s), {minutes} minuto(s)" @@ -463,15 +462,15 @@ msgstr "Esta entrada foi proporcionada por" msgid "Channel" msgstr "Canle" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "taxa de bits" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "votos" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "clicks" @@ -480,7 +479,7 @@ msgstr "clicks" msgid "Language" msgstr "Idioma" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -708,10 +707,6 @@ msgstr "Autoría" msgid "cached" msgstr "en memoria" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "a través de proxy" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "Abre unha incidencia en GitHub" @@ -2094,3 +2089,7 @@ msgstr "agochar vídeo" #~ "Cos axustes personalizados gardados nun " #~ "URL coas preferencias podes utilizalo " #~ "para sincronizalas entre dispositivos." + +#~ msgid "proxied" +#~ msgstr "a través de proxy" + diff --git a/searx/translations/he/LC_MESSAGES/messages.mo b/searx/translations/he/LC_MESSAGES/messages.mo index 1482a6fe3..c5e8058d3 100644 Binary files a/searx/translations/he/LC_MESSAGES/messages.mo and b/searx/translations/he/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/he/LC_MESSAGES/messages.po b/searx/translations/he/LC_MESSAGES/messages.po index c47158204..bbd15e4c1 100644 --- a/searx/translations/he/LC_MESSAGES/messages.po +++ b/searx/translations/he/LC_MESSAGES/messages.po @@ -21,22 +21,23 @@ # Anonymous , 2025. # shoko , 2025. # RoyBarina , 2025. +# ngf , 2025. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" -"PO-Revision-Date: 2025-01-30 05:21+0000\n" -"Last-Translator: RoyBarina " -"\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" +"PO-Revision-Date: 2025-05-27 03:58+0000\n" +"Last-Translator: ngf \n" +"Language-Team: Hebrew \n" "Language: he\n" -"Language-Team: Hebrew " -"\n" -"Plural-Forms: nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 " -"&& n % 10 == 0) ? 2 : 3));\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 && " +"n % 10 == 0) ? 2 : 3));\n" +"X-Generator: Weblate 5.11.4\n" "Generated-By: Babel 2.17.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -80,7 +81,7 @@ msgid "videos" msgstr "וידאו" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "רדיו" @@ -357,93 +358,93 @@ msgstr "סגור" msgid "answered" msgstr "נענו" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "לא נמצא פריט" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "מקור" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "שגיאה בטעינת העמוד הבא" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "הגדרות לא תקינות, עליך לתקן את ההעדפות שלך" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "הגדרות לא תקינות" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "שגיאת חיפוש" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "פקיעת זמן" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "שגיאת ניתוח" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "שגיאת פרוטוקול HTTP" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "שגיאת רשת תקשורת" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "שגיאת SSL: אימות התעודה נכשל" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "קריסה לא צפויה" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "שגיאת HTTP" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "שגיאת חיבור HTTP" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "שגיאת פרוקסי" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "CAPTCHA" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "יותר מדי בקשות" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "הגישה נדחתה" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "שגיאת API שרת" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "מושהה" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "לפני {minutes} דקות" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "לפני {hours} שעות, {minutes} דקות" @@ -474,15 +475,15 @@ msgstr "רשומה זו הוחלפה על ידי" msgid "Channel" msgstr "ערוץ" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "קצב נתונים" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "הצבעות" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "לחיצות" @@ -491,7 +492,7 @@ msgstr "לחיצות" msgid "Language" msgstr "שפה" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -532,15 +533,15 @@ msgstr "איכות קובץ" #: searx/plugins/ahmia_filter.py:32 msgid "Ahmia blacklist" -msgstr "" +msgstr "הרשימה השחורה של Ahmia" #: searx/plugins/ahmia_filter.py:33 msgid "Filter out onion results that appear in Ahmia's blacklist." -msgstr "" +msgstr "מסנן תוצאות onion שמופיעות ברשימת השחורה של Ahmia." #: searx/plugins/calculator.py:38 msgid "Basic Calculator" -msgstr "" +msgstr "מחשבון בסיסי" #: searx/plugins/calculator.py:39 msgid "Calculate mathematical expressions via the search bar" @@ -556,7 +557,7 @@ msgstr "ממיר מחרוזות לתוך hash digests (לקט גיבוב) שונ #: searx/plugins/hash_plugin.py:62 msgid "hash digest" -msgstr "hash digest" +msgstr "דגימת האש" #: searx/plugins/hostnames.py:123 msgid "Hostnames plugin" @@ -632,7 +633,7 @@ msgstr "הסר ארגומנטי איתור מתוך URL מוחזר" #: searx/plugins/unit_converter.py:49 msgid "Unit converter plugin" -msgstr "" +msgstr "תוסף המרה של יחידות" #: searx/plugins/unit_converter.py:50 msgid "Convert between units" @@ -716,10 +717,6 @@ msgstr "מחבר" msgid "cached" msgstr "מוטמן" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "פרוקסי" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "התחל להגיש גיליון חדש ב- GitHub" @@ -1181,6 +1178,8 @@ msgid "" "A URL containing your preferences. This URL can be used to restore your " "settings on a different device." msgstr "" +"כתובת URL המכילה את ההעדפות שלך. ניתן להשתמש בכתובת URL זו כדי לשחזר את " +"ההגדרות שלך במכשיר אחר." #: searx/templates/simple/preferences/cookies.html:46 msgid "Copy preferences hash" @@ -2060,3 +2059,5 @@ msgstr "הסתר וידאו" #~ " בכתובת ההעדפות כדי לסנכרן העדפות בין" #~ " מכשירים." +#~ msgid "proxied" +#~ msgstr "פרוקסי" diff --git a/searx/translations/hr/LC_MESSAGES/messages.mo b/searx/translations/hr/LC_MESSAGES/messages.mo index 9fb359d89..d258b9903 100644 Binary files a/searx/translations/hr/LC_MESSAGES/messages.mo and b/searx/translations/hr/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/hr/LC_MESSAGES/messages.po b/searx/translations/hr/LC_MESSAGES/messages.po index 71abe2fff..dcd38d41d 100644 --- a/searx/translations/hr/LC_MESSAGES/messages.po +++ b/searx/translations/hr/LC_MESSAGES/messages.po @@ -22,7 +22,7 @@ msgid "" msgstr "" "Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: 2025-02-08 02:17+0000\n" "Last-Translator: SecularSteve " "\n" @@ -77,7 +77,7 @@ msgid "videos" msgstr "video zapisi" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "radio" @@ -354,93 +354,93 @@ msgstr "zatvoren" msgid "answered" msgstr "odgovoren" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "Nije pronađena nijedna stavka" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "Izvor" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "Greška u učitavnju sljedeće stranice" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "Nevažeće postavke, molimo uredite svoje postavke" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "Nevažeće postavke" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "greška u pretraživanju" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "pauza" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "pogreška pri raščlanjivanju" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "greška HTTP protokola" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "greška u mreži" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "SSL pogreška: provjera valjanosti certifikata nije uspjela" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "neočekivani prekid" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "HTTP greška" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "greška HTTP veze" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "proxy greška" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "CAPTCHA" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "previše upita" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "pristup odbijen" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "server API greška" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "Suspendirano" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "prije {minutes} minut(u,e,a)" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "prije {hours} sat(i,a) i {minutes} minut(u,e,a)" @@ -471,15 +471,15 @@ msgstr "Ovaj je unos zamijenio" msgid "Channel" msgstr "Kanal" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "bitrata" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "glasovi" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "klikovi" @@ -488,7 +488,7 @@ msgstr "klikovi" msgid "Language" msgstr "Jezik" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -714,10 +714,6 @@ msgstr "Autor" msgid "cached" msgstr "spremljeno" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "preko proxyja" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "Počnite izlagati novi slučaj na GitHub" @@ -2083,3 +2079,6 @@ msgstr "sakrij video" #~ "može se koristiti za sinkronizaciju " #~ "postavki na svim uređajima." +#~ msgid "proxied" +#~ msgstr "preko proxyja" + diff --git a/searx/translations/hu/LC_MESSAGES/messages.mo b/searx/translations/hu/LC_MESSAGES/messages.mo index 29a5033b4..991351ed8 100644 Binary files a/searx/translations/hu/LC_MESSAGES/messages.mo and b/searx/translations/hu/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/hu/LC_MESSAGES/messages.po b/searx/translations/hu/LC_MESSAGES/messages.po index 64d1a6184..320c38cf5 100644 --- a/searx/translations/hu/LC_MESSAGES/messages.po +++ b/searx/translations/hu/LC_MESSAGES/messages.po @@ -23,19 +23,18 @@ # return42 , 2025. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: 2025-03-30 18:03+0000\n" "Last-Translator: kratos \n" -"Language-Team: Hungarian \n" "Language: hu\n" +"Language-Team: Hungarian " +"\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" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.10.2\n" "Generated-By: Babel 2.17.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -79,7 +78,7 @@ msgid "videos" msgstr "videók" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "rádió" @@ -356,93 +355,93 @@ msgstr "Lezárt" msgid "answered" msgstr "megválaszolt" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "Nincs találat" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "Forrás" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "Hiba a következő oldal betöltése során" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "Érvénytelen beállítások, módosítsa őket" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "Érvénytelen beállítások" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "keresési hiba" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "időtúllépés" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "feldolgozási hiba" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "HTTP protokollhiba" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "hálózati hiba" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "SSL hiba: a tanúsítvány ellenőrzése nem sikerült" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "váratlan összeomlás" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "HTTP hiba" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "HTTP csatlakozási hiba" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "proxy hiba" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "CAPTCHA" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "túl sok kérés" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "hozzáférés megtagadva" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "kiszolgáló API hiba" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "Felfüggesztve" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "{minutes} perce" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "{hours} óra, {minutes} perce" @@ -473,15 +472,15 @@ msgstr "Ezt a bejegyzést leváltotta:" msgid "Channel" msgstr "Csatorna" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "bitráta:" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "szavazatok:" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "kattintások" @@ -490,7 +489,7 @@ msgstr "kattintások" msgid "Language" msgstr "Nyelv" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -720,10 +719,6 @@ msgstr "Szerző" msgid "cached" msgstr "tárolt" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "proxy nézet" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "Probléma bejelentése a GitHubon" @@ -2093,3 +2088,7 @@ msgstr "videó elrejtése" #~ "A beállítási webcímben megadott egyéni " #~ "beállítások az eszközök közti szinkronizációra" #~ " használhatók." + +#~ msgid "proxied" +#~ msgstr "proxy nézet" + diff --git a/searx/translations/ia/LC_MESSAGES/messages.mo b/searx/translations/ia/LC_MESSAGES/messages.mo index 1b7147202..8473dfbc6 100644 Binary files a/searx/translations/ia/LC_MESSAGES/messages.mo and b/searx/translations/ia/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/ia/LC_MESSAGES/messages.po b/searx/translations/ia/LC_MESSAGES/messages.po index d7f1cab13..9f2ec1492 100644 --- a/searx/translations/ia/LC_MESSAGES/messages.po +++ b/searx/translations/ia/LC_MESSAGES/messages.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: 2025-01-06 15:53+0000\n" "Last-Translator: return42 " "\n" @@ -65,7 +65,7 @@ msgid "videos" msgstr "videos" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "" @@ -342,93 +342,93 @@ msgstr "" msgid "answered" msgstr "" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "Nulle item trovate" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "Configurationes non valide, per favor, modifica tu preferentias" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "Configurationes invalide" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "error in recerca" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "{minutes} minuta(s) retro" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "{hours} hora(s), {minutes} minuta(s) retro" @@ -459,15 +459,15 @@ msgstr "Iste entrata esseva substituite per" msgid "Channel" msgstr "" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "" @@ -476,7 +476,7 @@ msgstr "" msgid "Language" msgstr "" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -690,10 +690,6 @@ msgstr "" msgid "cached" msgstr "in cache" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "per proxy" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "" @@ -2030,3 +2026,6 @@ msgstr "occultar video" #~ "sync preferences across devices." #~ msgstr "" +#~ msgid "proxied" +#~ msgstr "per proxy" + diff --git a/searx/translations/id/LC_MESSAGES/messages.mo b/searx/translations/id/LC_MESSAGES/messages.mo index 6ef3cd995..e79413712 100644 Binary files a/searx/translations/id/LC_MESSAGES/messages.mo and b/searx/translations/id/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/id/LC_MESSAGES/messages.po b/searx/translations/id/LC_MESSAGES/messages.po index e8b891608..e3a05d029 100644 --- a/searx/translations/id/LC_MESSAGES/messages.po +++ b/searx/translations/id/LC_MESSAGES/messages.po @@ -22,17 +22,16 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: 2025-03-31 14:03+0000\n" "Last-Translator: Linerly \n" -"Language-Team: Indonesian \n" "Language: id\n" +"Language-Team: Indonesian " +"\n" +"Plural-Forms: nplurals=1; plural=0;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 5.10.2\n" "Generated-By: Babel 2.17.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -76,7 +75,7 @@ msgid "videos" msgstr "video" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "radio" @@ -353,93 +352,93 @@ msgstr "Tertutup" msgid "answered" msgstr "dijawab" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "Item tidak ditemukan" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "Sumber" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "Gagal memuat laman berikutnya" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "Pengaturan takvalid. Mohon ubah preferensi Anda" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "Pengaturan takvalid" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "galat pencarian" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "waktu habis" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "kesalahan penguraian" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "kesalahan protokol HTTP" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "galat jaringan" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "Galat SSL: gagal memvalidasi sertifikat" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "kemogokan takterduga" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "galat HTTP" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "galat koneksi HTTP" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "galat proksi" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "CAPTCHA" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "terlalu banyak permintaan" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "akses ditolak" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "galat API peladen" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "Ditangguhkan" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "{minutes} menit yang lalu" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "{hours} jam, {minutes} menit yang lalu" @@ -470,15 +469,15 @@ msgstr "Entri ini telah digantikan oleh" msgid "Channel" msgstr "Saluran" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "kecepatan bit" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "suara" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "klik" @@ -487,7 +486,7 @@ msgstr "klik" msgid "Language" msgstr "Bahasa" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -712,10 +711,6 @@ msgstr "Penulis" msgid "cached" msgstr "tembolok" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "proksi" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "Mulai membuat isu baru di GitHub" @@ -1182,8 +1177,8 @@ msgid "" "A URL containing your preferences. This URL can be used to restore your " "settings on a different device." msgstr "" -"URL yang berisi preferensi Anda. URL ini dapat digunakan untuk memulihkan " -"pengaturan Anda pada perangkat yang berbeda." +"URL yang berisi preferensi Anda. URL ini dapat digunakan untuk memulihkan" +" pengaturan Anda pada perangkat yang berbeda." #: searx/templates/simple/preferences/cookies.html:46 msgid "Copy preferences hash" @@ -1977,3 +1972,7 @@ msgstr "sembunyikan video" #~ "Menyediakan pengaturan kustom pada URL " #~ "preferensi agar dapat digunakan untuk " #~ "menyinkronkan preferensi pada semua perangkat." + +#~ msgid "proxied" +#~ msgstr "proksi" + diff --git a/searx/translations/it/LC_MESSAGES/messages.mo b/searx/translations/it/LC_MESSAGES/messages.mo index 979f222c6..cce1f444c 100644 Binary files a/searx/translations/it/LC_MESSAGES/messages.mo and b/searx/translations/it/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/it/LC_MESSAGES/messages.po b/searx/translations/it/LC_MESSAGES/messages.po index 7dd71a14e..45cf59525 100644 --- a/searx/translations/it/LC_MESSAGES/messages.po +++ b/searx/translations/it/LC_MESSAGES/messages.po @@ -43,19 +43,18 @@ # return42 , 2025. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: 2025-04-10 11:28+0000\n" "Last-Translator: return42 \n" -"Language-Team: Italian \n" "Language: it\n" +"Language-Team: Italian " +"\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" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.10.2\n" "Generated-By: Babel 2.17.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -99,7 +98,7 @@ msgid "videos" msgstr "video" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "radio" @@ -376,93 +375,93 @@ msgstr "chiuso" msgid "answered" msgstr "risposto" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "Nessun oggetto trovato" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "Sorgente" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "Errore di caricamento della pagina successiva" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "Impostazioni non valide, modifica le tue preferenze" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "Impostazioni non valide" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "errore di ricerca" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "tempo scaduto" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "errore di analisi" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "errore protocollo HTTP" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "errore di rete" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "Errore SSL: verifica del certificato fallita" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "crash inaspettato" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "errore HTTP" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "errore di connessione HTTP" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "errore del proxy" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "CAPTCHA" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "troppe richieste" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "accesso negato" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "errore server API" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "Sospeso" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "{minutes} minuto(i) fa" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "di {hours} ora(e) e {minutes} minuto(i) fa" @@ -493,15 +492,15 @@ msgstr "Questa voce è stata sostituita da" msgid "Channel" msgstr "Canale" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "velocità in bit" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "voti" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "clic" @@ -510,7 +509,7 @@ msgstr "clic" msgid "Language" msgstr "Lingua" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -738,10 +737,6 @@ msgstr "Autore" msgid "cached" msgstr "in cache" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "proxy" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "Inizia segnalando un nuovo problema su GitHub" @@ -2130,3 +2125,7 @@ msgstr "nascondi video" #~ "nell'URL delle preferenze è possibile " #~ "sincronizzare le preferenze tra i vari" #~ " dispositivi." + +#~ msgid "proxied" +#~ msgstr "proxy" + diff --git a/searx/translations/ja/LC_MESSAGES/messages.mo b/searx/translations/ja/LC_MESSAGES/messages.mo index 6c183becc..2d13febac 100644 Binary files a/searx/translations/ja/LC_MESSAGES/messages.mo and b/searx/translations/ja/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/ja/LC_MESSAGES/messages.po b/searx/translations/ja/LC_MESSAGES/messages.po index 5555a6a87..efd9d4d76 100644 --- a/searx/translations/ja/LC_MESSAGES/messages.po +++ b/searx/translations/ja/LC_MESSAGES/messages.po @@ -29,19 +29,18 @@ # ayame30 , 2025. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: 2025-04-11 15:12+0000\n" "Last-Translator: ayame30 \n" -"Language-Team: Japanese \n" "Language: ja\n" +"Language-Team: Japanese " +"\n" +"Plural-Forms: nplurals=1; plural=0;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 5.10.2\n" "Generated-By: Babel 2.17.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -85,7 +84,7 @@ msgid "videos" msgstr "動画" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "ラジオ" @@ -362,93 +361,93 @@ msgstr "クローズ" msgid "answered" msgstr "回答" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "アイテムが見つかりません" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "ソース" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "次のページの読み込み中にエラーが発生しました" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "設定が無効です、設定を変更してください" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "無効な設定です" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "検索エラー" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "タイムアウト" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "解析エラー" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "HTTP プロトコルエラー" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "ネットワークエラー" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "SSL エラー: 証明書の検証に失敗しました" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "予期しないクラッシュ" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "HTTP エラー" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "HTTP 接続エラー" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "プロキシエラー" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "CAPTCHA" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "リクエストが多すぎます" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "アクセスが拒否されました" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "サーバー API エラー" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "一時停止" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "{minutes} 分前" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "{hours} 時間と{minutes} 分前" @@ -479,15 +478,15 @@ msgstr "このエントリは、置き換えられました:" msgid "Channel" msgstr "チャンネル" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "ビットレート" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "票数" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "クリック" @@ -496,7 +495,7 @@ msgstr "クリック" msgid "Language" msgstr "言語" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -710,10 +709,6 @@ msgstr "作者" msgid "cached" msgstr "キャッシュ" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "プロキシ" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "Start submiting a new issue on GitHub" @@ -1172,8 +1167,7 @@ msgstr "このURLで違うブラウザに設定を復活" msgid "" "A URL containing your preferences. This URL can be used to restore your " "settings on a different device." -msgstr "設定内容が保存されたURLです。このURLを使用すると、別のデバイスで設定を復元で" -"きます。" +msgstr "設定内容が保存されたURLです。このURLを使用すると、別のデバイスで設定を復元できます。" #: searx/templates/simple/preferences/cookies.html:46 msgid "Copy preferences hash" @@ -2022,3 +2016,7 @@ msgstr "動画を隠す" #~ "preferences URL can be used to " #~ "sync preferences across devices." #~ msgstr "初期設定URLを使うことで、特別な設定をデバイスをまたいで同期できる。" + +#~ msgid "proxied" +#~ msgstr "プロキシ" + diff --git a/searx/translations/ko/LC_MESSAGES/messages.mo b/searx/translations/ko/LC_MESSAGES/messages.mo index 4f24bba66..2f6645868 100644 Binary files a/searx/translations/ko/LC_MESSAGES/messages.mo and b/searx/translations/ko/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/ko/LC_MESSAGES/messages.po b/searx/translations/ko/LC_MESSAGES/messages.po index de7aa39ef..4ae94e8bc 100644 --- a/searx/translations/ko/LC_MESSAGES/messages.po +++ b/searx/translations/ko/LC_MESSAGES/messages.po @@ -17,7 +17,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: 2025-02-06 15:54+0000\n" "Last-Translator: curtwheeler " "\n" @@ -71,7 +71,7 @@ msgid "videos" msgstr "비디오" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "라디오" @@ -348,93 +348,93 @@ msgstr "닫힘" msgid "answered" msgstr "응답" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "검색 결과가 없습니다" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "소스" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "다음 페이지를 로드하는 동안 오류가 발생했습니다" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "잘못된 설정입니다, 설정을 수정하세요" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "잘못된 설정" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "검색 오류" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "대기 시간" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "구문 분석 오류" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "HTTP 프로토콜 오류" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "네트워크 오류" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "SSL 에러: 인증서 무효" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "예상치 못한 충돌" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "HTTP 오류" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "HTTP 연결 오류" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "프록시 오류" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "CAPTCHA" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "너무 많은 요청" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "액세스 거부" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "서버 API 오류" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "중단됨" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "{minutes}분 전" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "{hours}시간 {minutes}분 전" @@ -465,15 +465,15 @@ msgstr "이 항목은 다음으로 대체되었습니다" msgid "Channel" msgstr "채널" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "비트 레이트" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "표" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "클릭" @@ -482,7 +482,7 @@ msgstr "클릭" msgid "Language" msgstr "언어" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -702,10 +702,6 @@ msgstr "저자" msgid "cached" msgstr "캐시" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "프록시됨" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "GitHub 에서 새 이슈 시작하기" @@ -1898,3 +1894,6 @@ msgstr "비디오 숨기기" #~ "sync preferences across devices." #~ msgstr "특정 설정이 들어간 URL은 장치 간에 설정을 동기화 하는데 사용할 수 있습니다." +#~ msgid "proxied" +#~ msgstr "프록시됨" + diff --git a/searx/translations/lt/LC_MESSAGES/messages.mo b/searx/translations/lt/LC_MESSAGES/messages.mo index 115e461a4..7428b183d 100644 Binary files a/searx/translations/lt/LC_MESSAGES/messages.mo and b/searx/translations/lt/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/lt/LC_MESSAGES/messages.po b/searx/translations/lt/LC_MESSAGES/messages.po index 3c8f75b06..a22ff8dcc 100644 --- a/searx/translations/lt/LC_MESSAGES/messages.po +++ b/searx/translations/lt/LC_MESSAGES/messages.po @@ -16,21 +16,20 @@ # return42 , 2025. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: 2025-04-20 12:41+0000\n" "Last-Translator: return42 \n" -"Language-Team: Lithuanian \n" "Language: lt\n" +"Language-Team: Lithuanian " +"\n" +"Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100" +" < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < " +"11) ? 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" -"Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < " -"11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 :" -" n % 1 != 0 ? 2: 3);\n" -"X-Generator: Weblate 5.10.2\n" "Generated-By: Babel 2.17.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -74,7 +73,7 @@ msgid "videos" msgstr "vaizdo įrašai" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "radijas" @@ -351,93 +350,93 @@ msgstr "Uždaryta" msgid "answered" msgstr "atsakyta" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "Elementų nerasta" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "Šaltinis" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "Klaida keliant kitą puslapį" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "Neteisingi nustatymai, pakeiskite savo nuostatas" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "Neteisingi nustatymai" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "paieškos klaida" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "laikas baigėsi" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "parsavymo klaida" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "HTTP protokolo klaida" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "tinklo klaida" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "SSL klaida: liudijimo tikrinimas patyrė nesėkmę" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "netikėta klaida" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "HTTP klaida" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "HTTP ryšio klaida" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "persiuntimų serverio klaida" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "CAPTCHA" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "per daug užklausų" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "prieiga uždrausta" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "serverio API klaida" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "Sustabdytas" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "prieš {minutes} min" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "prieš {hours} val., {minutes} min" @@ -468,15 +467,15 @@ msgstr "Šį įrašą pakeitė" msgid "Channel" msgstr "Kanalas" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "pralaidumas" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "balsai" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "paspaudimai" @@ -485,7 +484,7 @@ msgstr "paspaudimai" msgid "Language" msgstr "Kalba" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -583,8 +582,8 @@ msgid "" "Displays your IP if the query is \"ip\" and your user agent if the query " "is \"user-agent\"." msgstr "" -"Rodo tavo IP jei užklausa yra „ip“ ir tavo naudotojo agentą jei užklausa yra " -"„user-agent“." +"Rodo tavo IP jei užklausa yra „ip“ ir tavo naudotojo agentą jei užklausa " +"yra „user-agent“." #: searx/plugins/self_info.py:52 msgid "Your IP is: " @@ -713,10 +712,6 @@ msgstr "Autorius" msgid "cached" msgstr "patalpinta" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "persiustas" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "Pateikite naują klaidą Github'e" @@ -2063,3 +2058,7 @@ msgstr "slėpti vaizdo įrašą" #~ "Nurodant tinkintus nustatymus nuostatų URL," #~ " jūs galite susinchronizuoti nuostatas tarp" #~ " prietaisų." + +#~ msgid "proxied" +#~ msgstr "persiustas" + diff --git a/searx/translations/lv/LC_MESSAGES/messages.mo b/searx/translations/lv/LC_MESSAGES/messages.mo index c4d89d7f9..4cbb498fb 100644 Binary files a/searx/translations/lv/LC_MESSAGES/messages.mo and b/searx/translations/lv/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/lv/LC_MESSAGES/messages.po b/searx/translations/lv/LC_MESSAGES/messages.po index 0f494180b..046615bd1 100644 --- a/searx/translations/lv/LC_MESSAGES/messages.po +++ b/searx/translations/lv/LC_MESSAGES/messages.po @@ -10,22 +10,23 @@ # Obligate , 2024. # Anonymous , 2025. # Obligate , 2025. +# sandijs , 2025. msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" -"PO-Revision-Date: 2025-01-06 15:53+0000\n" -"Last-Translator: return42 " -"\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" +"PO-Revision-Date: 2025-05-30 07:10+0000\n" +"Last-Translator: sandijs \n" +"Language-Team: Latvian \n" "Language: lv\n" -"Language-Team: Latvian " -"\n" -"Plural-Forms: nplurals=3; plural=(n % 10 == 0 || n % 100 >= 11 && n % 100" -" <= 19) ? 0 : ((n % 10 == 1 && n % 100 != 11) ? 1 : 2);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 0 || n % 100 >= 11 && n % 100 <= " +"19) ? 0 : ((n % 10 == 1 && n % 100 != 11) ? 1 : 2);\n" +"X-Generator: Weblate 5.11.4\n" "Generated-By: Babel 2.17.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -69,7 +70,7 @@ msgid "videos" msgstr "video" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "radio" @@ -166,7 +167,7 @@ msgstr "tumšs" #. STYLE_NAMES['BLACK'] #: searx/searxng.msg msgid "black" -msgstr "" +msgstr "melns" #. BRAND_CUSTOM_LINKS['UPTIME'] #: searx/searxng.msg @@ -293,7 +294,7 @@ msgstr "abonenti" #. SOCIAL_MEDIA_TERMS['POSTS'] #: searx/engines/lemmy.py:86 searx/searxng.msg msgid "posts" -msgstr "" +msgstr "ziņojumi" #. SOCIAL_MEDIA_TERMS['ACTIVE USERS'] #: searx/engines/lemmy.py:87 searx/searxng.msg @@ -334,105 +335,105 @@ msgstr "autors" #. SOCIAL_MEDIA_TERMS['THREAD OPEN'] #: searx/engines/discourse.py:149 searx/searxng.msg msgid "open" -msgstr "" +msgstr "atvērts" #. SOCIAL_MEDIA_TERMS['THREAD CLOSED'] #: searx/engines/discourse.py:149 searx/searxng.msg msgid "closed" -msgstr "" +msgstr "aizvērts" #. SOCIAL_MEDIA_TERMS['THREAD ANSWERED'] #: searx/engines/discourse.py:160 searx/searxng.msg msgid "answered" -msgstr "" +msgstr "atbildēja" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "Nav atrasts neviens vienums" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "Avots" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "Kļūda lādējot nākošo lapu" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "Nepareizi iestatījumi, lūdzu rediģējiet savas preferences" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "Nederīgi iestatījumi" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "meklēšanas kļūda" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "noildze" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "parsēšanas kļūda" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "HTTP protokola kļūda" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "tīkla kļūda" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "SSL kļūda: certifikāta validācija neizdevās" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "negaidīta avārija" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "HTTP kļūda" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "HTTP savienojuma kļūda" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "starpniekservera kļūda" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "CAPTCHA" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "pārāk daudz pieprasījumu" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "piekļuve aizliegta" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "servera API kļūda" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "Apturēts" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "pirms {minutes} minūtes(-ēm)" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "pirms {hours} stundas(-ām) un {minutes} minūtēm(-es)" @@ -448,7 +449,7 @@ msgstr "" #: searx/engines/openstreetmap.py:158 msgid "Show route in map .." -msgstr "" +msgstr "Rādīt maršrutu kartē .." #: searx/engines/pdbe.py:96 #, python-brace-format @@ -463,15 +464,15 @@ msgstr "Šis ieraksts ir ticis aizstāts ar" msgid "Channel" msgstr "Kanāls" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "bitu pārraide" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "balsis" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "klikšķi" @@ -480,7 +481,7 @@ msgstr "klikšķi" msgid "Language" msgstr "Valoda" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -521,23 +522,23 @@ msgstr "Failu kvalitāte" #: searx/plugins/ahmia_filter.py:32 msgid "Ahmia blacklist" -msgstr "" +msgstr "Ahmia melnais saraksts" #: searx/plugins/ahmia_filter.py:33 msgid "Filter out onion results that appear in Ahmia's blacklist." -msgstr "" +msgstr "Izfiltrēt \"sīpolu\" rezultātus, kas parādās Ahmia melnajā sarakstā." #: searx/plugins/calculator.py:38 msgid "Basic Calculator" -msgstr "" +msgstr "Parasts kalkulators" #: searx/plugins/calculator.py:39 msgid "Calculate mathematical expressions via the search bar" -msgstr "" +msgstr "Izrēķināt matemātiskas izteiksmes, izmantojot meklētāju" #: searx/plugins/hash_plugin.py:34 msgid "Hash plugin" -msgstr "" +msgstr "Jaucējvērtības spraudnis" #: searx/plugins/hash_plugin.py:35 msgid "Converts strings to different hash digests." @@ -549,11 +550,13 @@ msgstr "jaucējkoda sašķelšana" #: searx/plugins/hostnames.py:123 msgid "Hostnames plugin" -msgstr "" +msgstr "Saimniekvārdu spraudnis" #: searx/plugins/hostnames.py:124 msgid "Rewrite hostnames, remove results or prioritize them based on the hostname" msgstr "" +"Pārrakstīt saimniekvārdus, noņemt rezultātus vai prioritizēt tos, " +"pamatojoties uz saimniekvārdu" #: searx/plugins/oa_doi_rewrite.py:55 msgid "Open Access DOI rewrite" @@ -576,14 +579,16 @@ msgid "" "Displays your IP if the query is \"ip\" and your user agent if the query " "is \"user-agent\"." msgstr "" +"Tiek izvadīta Jūsu IP, ja pieprasījumā norādīts “ip”, un Jūsu " +"lietotājaģents, ja pieprasījumā norādīts “user-agent”." #: searx/plugins/self_info.py:52 msgid "Your IP is: " -msgstr "" +msgstr "Jūsu IP ir: " #: searx/plugins/self_info.py:55 msgid "Your user-agent is: " -msgstr "" +msgstr "Jūsu lietotājaģents ir: " #: searx/plugins/tor_check.py:42 msgid "Tor check plugin" @@ -594,18 +599,20 @@ msgid "" "This plugin checks if the address of the request is a Tor exit-node, and " "informs the user if it is; like check.torproject.org, but from SearXNG." msgstr "" +"Šis spraudnis pārbauda vai pieprasītā adrese ir Tor izejas mezgls un informē " +"lietotāju, ja tas tā ir; piemēram, check.torproject.org, bet no SearXNG." #: searx/plugins/tor_check.py:65 msgid "Could not download the list of Tor exit-nodes from" -msgstr "" +msgstr "Nevarēja lejupielādēt Tor izejas mezglu sarakstu no" #: searx/plugins/tor_check.py:72 msgid "You are using Tor and it looks like you have the external IP address" -msgstr "" +msgstr "Jūs lietojat Tor un izskatās, ka Jums ir ārējā IP adrese" #: searx/plugins/tor_check.py:76 msgid "You are not using Tor and you have the external IP address" -msgstr "" +msgstr "Jūs nelietojat Tor un Jums ir ārējā IP adrese" #: searx/plugins/tracker_url_remover.py:37 msgid "Tracker URL remover" @@ -613,15 +620,15 @@ msgstr "Izsekošanas URL noņemšanas līdzeklis" #: searx/plugins/tracker_url_remover.py:38 msgid "Remove trackers arguments from the returned URL" -msgstr "" +msgstr "Noņemt izsekotāju argumentus no atgrieztā URL" #: searx/plugins/unit_converter.py:49 msgid "Unit converter plugin" -msgstr "" +msgstr "Vienību pārveidotāja spraudnis" #: searx/plugins/unit_converter.py:50 msgid "Convert between units" -msgstr "" +msgstr "Konvertēt starp vienībām" #: searx/templates/simple/404.html:4 msgid "Page not found" @@ -634,7 +641,7 @@ msgstr "Doties uz %(search_page)s." #: searx/templates/simple/404.html:6 msgid "search page" -msgstr "" +msgstr "meklēšanas lapa" #: searx/templates/simple/base.html:53 msgid "Donate" @@ -647,11 +654,11 @@ msgstr "Opcijas" #: searx/templates/simple/base.html:67 msgid "Powered by" -msgstr "" +msgstr "Darbojas ar" #: searx/templates/simple/base.html:67 msgid "a privacy-respecting, open metasearch engine" -msgstr "" +msgstr "privātumu respektējoša, atvērta meta-meklētājprogramma" #: searx/templates/simple/base.html:68 #: searx/templates/simple/result_templates/packages.html:59 @@ -660,15 +667,15 @@ msgstr "Pirmkods" #: searx/templates/simple/base.html:69 msgid "Issue tracker" -msgstr "" +msgstr "Problēmu izsekotājs" #: searx/templates/simple/base.html:70 searx/templates/simple/stats.html:18 msgid "Engine stats" -msgstr "" +msgstr "Dzinēja statistika" #: searx/templates/simple/base.html:72 msgid "Public instances" -msgstr "" +msgstr "Publiskās instances" #: searx/templates/simple/base.html:75 msgid "Privacy policy" @@ -701,10 +708,6 @@ msgstr "Autors" msgid "cached" msgstr "" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "" @@ -1786,3 +1789,5 @@ msgstr "slēpt video" #~ "sync preferences across devices." #~ msgstr "" +#~ msgid "proxied" +#~ msgstr "" diff --git a/searx/translations/messages.pot b/searx/translations/messages.pot index 0fb7833ce..828a775cc 100644 --- a/searx/translations/messages.pot +++ b/searx/translations/messages.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -58,7 +58,7 @@ msgid "videos" msgstr "" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "" @@ -335,93 +335,93 @@ msgstr "" msgid "answered" msgstr "" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "" @@ -452,15 +452,15 @@ msgstr "" msgid "Channel" msgstr "" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "" @@ -469,7 +469,7 @@ msgstr "" msgid "Language" msgstr "" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -681,10 +681,6 @@ msgstr "" msgid "cached" msgstr "" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "" diff --git a/searx/translations/ms/LC_MESSAGES/messages.mo b/searx/translations/ms/LC_MESSAGES/messages.mo index 1f33cf4d6..4aa315811 100644 Binary files a/searx/translations/ms/LC_MESSAGES/messages.mo and b/searx/translations/ms/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/ms/LC_MESSAGES/messages.po b/searx/translations/ms/LC_MESSAGES/messages.po index ff4f274ef..6d544815f 100644 --- a/searx/translations/ms/LC_MESSAGES/messages.po +++ b/searx/translations/ms/LC_MESSAGES/messages.po @@ -19,17 +19,16 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: 2025-03-31 18:08+0000\n" "Last-Translator: return42 \n" -"Language-Team: Malay \n" "Language: ms\n" +"Language-Team: Malay " +"\n" +"Plural-Forms: nplurals=1; plural=0;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 5.10.2\n" "Generated-By: Babel 2.17.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -73,7 +72,7 @@ msgid "videos" msgstr "video" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "radio" @@ -350,93 +349,93 @@ msgstr "tutup" msgid "answered" msgstr "dijawab" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "barang tidak dijumpai" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "Punca" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "Gagal memuat turun muka seterusnya" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "Kesilapan tetapan, sila ubahsuai pilihan" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "Tetapan tidak sah" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "ralat pencarian" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "masa tamat" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "ralat huraian" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "kesilapan protokol HTTP" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "ralat rangkaian" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "RALAT ssl: pengesahan sijil gagal" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "kemalangan tidak dijangka" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "kesilapan HTTP" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "kesilapan sambungan HTTP" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "kesilapan proksi" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "CAPTCHA" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "terlalu banyak permintaan" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "akses dinafikan" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "ralat API pelayan" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "Digantung" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "{minutes} minit yang lalu" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "{hours} jam, {minutes} minit yang lalu" @@ -467,15 +466,15 @@ msgstr "Kemasukan ini telah diganti oleh" msgid "Channel" msgstr "Saluran" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "kadar bit" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "undi" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "klik" @@ -484,7 +483,7 @@ msgstr "klik" msgid "Language" msgstr "Bahasa" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -710,10 +709,6 @@ msgstr "Penulis" msgid "cached" msgstr "dicache" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "diproksi" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "Mula menghantar isu baru di Github" @@ -1797,3 +1792,7 @@ msgstr "sembunyikkan video" #~ "Menentukan tetapan khusus dalam URL " #~ "tetapan boleh digunakan untuk menyegerakkan" #~ " tetapan merentasi peranti." + +#~ msgid "proxied" +#~ msgstr "diproksi" + diff --git a/searx/translations/nb_NO/LC_MESSAGES/messages.mo b/searx/translations/nb_NO/LC_MESSAGES/messages.mo index 7d51980c0..466d646eb 100644 Binary files a/searx/translations/nb_NO/LC_MESSAGES/messages.mo and b/searx/translations/nb_NO/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/nb_NO/LC_MESSAGES/messages.po b/searx/translations/nb_NO/LC_MESSAGES/messages.po index 3e43ac2bf..1dc3d58cd 100644 --- a/searx/translations/nb_NO/LC_MESSAGES/messages.po +++ b/searx/translations/nb_NO/LC_MESSAGES/messages.po @@ -21,7 +21,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: 2025-03-25 23:21+0000\n" "Last-Translator: Haraldher \n" "Language: nb_NO\n" @@ -74,7 +74,7 @@ msgid "videos" msgstr "videoer" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "radio" @@ -351,93 +351,93 @@ msgstr "lukket" msgid "answered" msgstr "besvart" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "Fant ingen elementer" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "Kilde" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "Feil ved lasting av neste side" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "Ugyldige innstillinger, rediger dine preferanser" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "Ugyldige innstillinger" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "søkefeil" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "tidsavbrudd" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "tolkningsfeil" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "HTTP-protokollfeil" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "nettverksfeil" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "SSL-feil: sertifikat validering mislyktes" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "uventet krasj" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "HTTP-feil" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "HTTP-tilkoblingsfeil" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "mellomtjenerfeil" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "CAPTCHA" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "for mange forespørsler" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "tilgang nektet" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "server API feil" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "Suspendert" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "{minutes} minutt(er) siden" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "{hours} time(r), {minutes} minutt(er) siden" @@ -468,15 +468,15 @@ msgstr "Denne oppføringen har blitt erstattet av" msgid "Channel" msgstr "Kanal" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "overføringshastighet" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "stemmer" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "klikk" @@ -485,7 +485,7 @@ msgstr "klikk" msgid "Language" msgstr "Språk" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -713,10 +713,6 @@ msgstr "Forfatter" msgid "cached" msgstr "hurtiglagret" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "mellomtjent" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "Begynn opprettelse av en ny sak på GitHub" @@ -1996,3 +1992,6 @@ msgstr "skjul video" #~ " synkronisere preferanser på tvers av " #~ "enheter." +#~ msgid "proxied" +#~ msgstr "mellomtjent" + diff --git a/searx/translations/nl/LC_MESSAGES/messages.mo b/searx/translations/nl/LC_MESSAGES/messages.mo index 9633cd737..87997179e 100644 Binary files a/searx/translations/nl/LC_MESSAGES/messages.mo and b/searx/translations/nl/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/nl/LC_MESSAGES/messages.po b/searx/translations/nl/LC_MESSAGES/messages.po index db7a148c6..13caf0642 100644 --- a/searx/translations/nl/LC_MESSAGES/messages.po +++ b/searx/translations/nl/LC_MESSAGES/messages.po @@ -38,19 +38,18 @@ # artens , 2025. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: 2025-03-31 14:03+0000\n" "Last-Translator: artens \n" -"Language-Team: Dutch \n" "Language: nl\n" +"Language-Team: Dutch " +"\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" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.10.2\n" "Generated-By: Babel 2.17.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -94,7 +93,7 @@ msgid "videos" msgstr "video’s" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "radio" @@ -371,93 +370,93 @@ msgstr "gesloten" msgid "answered" msgstr "beantwoord" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "Geen resultaat gevonden" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "Bron" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "Fout bij het laden volgende pagina" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "Ongeldige instellingswaarde, controleer invoer" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "Ongeldige instellingen" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "zoekfout" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "verlopen" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "verwerkingsfout" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "HTTP-protocolfout" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "netwerkfout" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "SSL-fout: de certificaatvalidatie is mislukt" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "onverwachte crash" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "HTTP-fout" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "HTTP-verbindingsfout" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "proxyfout" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "CAPTCHA" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "teveel verzoeken" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "toegang geweigerd" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "server-api-fout" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "Geschorst" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "{minutes} minu(u)t(en) geleden" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "{hours} u(u)r(en), {minutes} minu(u)t(en) geleden" @@ -488,15 +487,15 @@ msgstr "Dit object is vervangen door" msgid "Channel" msgstr "Kanaal" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "bitrate" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "stemmen" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "klikken" @@ -505,7 +504,7 @@ msgstr "klikken" msgid "Language" msgstr "Taal" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -734,10 +733,6 @@ msgstr "Auteur" msgid "cached" msgstr "gecachet" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "geproxyt" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "Maak een nieuwe issue aan op Github" @@ -2129,3 +2124,7 @@ msgstr "verberg video" #~ "URL kunnen worden gebruikt om " #~ "instellingen te synchroniseren op " #~ "verschillende apparaten." + +#~ msgid "proxied" +#~ msgstr "geproxyt" + diff --git a/searx/translations/oc/LC_MESSAGES/messages.mo b/searx/translations/oc/LC_MESSAGES/messages.mo index 26b9d978b..09eec0247 100644 Binary files a/searx/translations/oc/LC_MESSAGES/messages.mo and b/searx/translations/oc/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/oc/LC_MESSAGES/messages.po b/searx/translations/oc/LC_MESSAGES/messages.po index dcd154f80..b4fc7484b 100644 --- a/searx/translations/oc/LC_MESSAGES/messages.po +++ b/searx/translations/oc/LC_MESSAGES/messages.po @@ -16,7 +16,7 @@ msgid "" msgstr "" "Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: 2025-03-27 13:44+0000\n" "Last-Translator: return42 \n" "Language: oc\n" @@ -69,7 +69,7 @@ msgid "videos" msgstr "vidèos" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "ràdio" @@ -346,93 +346,93 @@ msgstr "" msgid "answered" msgstr "" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "Cap d’element pas trobat" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "Font" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "Error en cargant la pagina seguenta" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "Paramètre pas valide, mercés de modificar vòstras preferéncias" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "Paramètres invalids" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "error de recèrca" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "expirat" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "error d’analisi" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "error de protocòl HTTP" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "Error de ret" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "Error SSL : la verificacion del certificat a fracassat" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "error inesperada" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "error HTTP" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "error de connexion HTTP" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "Error servidor mandatari" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "CAPTCHA" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "tròpas de requèstas" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "accès refusat" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "error de l’API del servidor" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "Suspendut" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "fa {minutes} minuta(s)" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "Fa {hours} ora(s), {minutes} minuta(s)" @@ -463,15 +463,15 @@ msgstr "Aqueste element es estat remplaçat per" msgid "Channel" msgstr "Canal" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "debit" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "vòtes" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "clics" @@ -480,7 +480,7 @@ msgstr "clics" msgid "Language" msgstr "Lenga" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -696,10 +696,6 @@ msgstr "Autor" msgid "cached" msgstr "en version locala" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "proxifiat" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "Senhalar un problèma sus GitHub" @@ -2032,3 +2028,6 @@ msgstr "escondre la vidèo" #~ "sync preferences across devices." #~ msgstr "" +#~ msgid "proxied" +#~ msgstr "proxifiat" + diff --git a/searx/translations/pl/LC_MESSAGES/messages.mo b/searx/translations/pl/LC_MESSAGES/messages.mo index 68409d61b..550e58c45 100644 Binary files a/searx/translations/pl/LC_MESSAGES/messages.mo and b/searx/translations/pl/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/pl/LC_MESSAGES/messages.po b/searx/translations/pl/LC_MESSAGES/messages.po index 12b082a50..d2c438c7f 100644 --- a/searx/translations/pl/LC_MESSAGES/messages.po +++ b/searx/translations/pl/LC_MESSAGES/messages.po @@ -31,21 +31,20 @@ # polskiecus , 2025. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: 2025-05-09 07:09+0000\n" "Last-Translator: polskiecus \n" -"Language-Team: Polish \n" "Language: pl\n" +"Language-Team: Polish " +"\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && " +"(n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && " +"n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (" -"n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && " -"n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -"X-Generator: Weblate 5.10.2\n" "Generated-By: Babel 2.17.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -89,7 +88,7 @@ msgid "videos" msgstr "filmy" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "radio" @@ -366,93 +365,93 @@ msgstr "Zamknięty" msgid "answered" msgstr "odebrany" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "Nie znaleziono elementu" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "Źródło" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "Błąd wczytywania następnej strony" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "Nieprawidłowe ustawienia, zmień swoje preferencje" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "Nieprawidłowe ustawienia" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "błąd wyszukiwania" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "przekroczenie czasu" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "błąd przetwarzania" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "błąd protokołu HTTP" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "błąd sieci" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "Błąd SSL: nie udało się zweryfikować certyfikatu" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "niespodziewana awaria" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "błąd HTTP" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "błąd połączenia HTTP" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "błąd serwera proxy" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "CAPTCHA" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "za dużo zapytań" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "odmowa dostępu" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "błąd serwera API" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "Zawieszone" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "{minutes} minut(y) temu" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "{hours} godzin(y), {minutes} minut(y) temu" @@ -483,15 +482,15 @@ msgstr "Ten wpis został zastąpiony przez" msgid "Channel" msgstr "Kanał" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "bitrate" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "głosy" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "kliknięcia" @@ -500,7 +499,7 @@ msgstr "kliknięcia" msgid "Language" msgstr "Język" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -730,10 +729,6 @@ msgstr "Autor" msgid "cached" msgstr "buforowane" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "przesłane poprzez proxy" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "Zgłoś nowy problem na GitHubie" @@ -1200,8 +1195,8 @@ msgid "" "A URL containing your preferences. This URL can be used to restore your " "settings on a different device." msgstr "" -"Adres URL zawierający twoje preferencje/ustawienia. Ten Adres URL pozwala na " -"odzyskanie/przeniesienie swoich ustawień na inne urządzenie" +"Adres URL zawierający twoje preferencje/ustawienia. Ten Adres URL pozwala" +" na odzyskanie/przeniesienie swoich ustawień na inne urządzenie" #: searx/templates/simple/preferences/cookies.html:46 msgid "Copy preferences hash" @@ -2109,3 +2104,7 @@ msgstr "ukryj wideo" #~ "Określanie własnych ustawień w adresie " #~ "URL preferencji może służyć do " #~ "synchronizowania preferencji między urządzeniami." + +#~ msgid "proxied" +#~ msgstr "przesłane poprzez proxy" + diff --git a/searx/translations/pt/LC_MESSAGES/messages.mo b/searx/translations/pt/LC_MESSAGES/messages.mo index 70229f9a5..e52a94ed4 100644 Binary files a/searx/translations/pt/LC_MESSAGES/messages.mo and b/searx/translations/pt/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/pt/LC_MESSAGES/messages.po b/searx/translations/pt/LC_MESSAGES/messages.po index 546e29438..c487d2f02 100644 --- a/searx/translations/pt/LC_MESSAGES/messages.po +++ b/searx/translations/pt/LC_MESSAGES/messages.po @@ -29,19 +29,18 @@ # pfaca , 2025. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: 2025-04-10 20:02+0000\n" "Last-Translator: pfaca \n" -"Language-Team: Portuguese \n" "Language: pt\n" +"Language-Team: Portuguese " +"\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" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Weblate 5.10.2\n" "Generated-By: Babel 2.17.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -85,7 +84,7 @@ msgid "videos" msgstr "vídeos" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "radio" @@ -362,93 +361,93 @@ msgstr "fechada" msgid "answered" msgstr "respondido" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "Nenhum item encontrado" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "Fonte" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "Erro ao carregar a próxima página" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "Definições inválidas, por favor edite as suas preferências" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "Configurações inválidas" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "erro de procura" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "tempo esgotado" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "erro de análise" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "Erro de protocolo HTTP" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "erro de rede" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "Erro SSL: falha na validação do certificado" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "falha inesperada" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "Erro HTTP" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "Erro de conexão HTTP" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "erro de proxy" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "CAPTCHA" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "demasiados pedidos" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "acesso negado" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "erro de API do servidor" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "Suspenso" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "{minutes} minuto(s) atrás" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "{hours} hora(s), {minutes} minuto(s) atrás" @@ -479,15 +478,15 @@ msgstr "Esta entrada foi substituída por" msgid "Channel" msgstr "Canal" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "bitrate" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "votos" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "clica" @@ -496,7 +495,7 @@ msgstr "clica" msgid "Language" msgstr "Idioma" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -722,10 +721,6 @@ msgstr "Autor" msgid "cached" msgstr "armazenados em cache" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "via proxy" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "Começa por submter um topico em GitHub" @@ -2113,3 +2108,7 @@ msgstr "esconder vídeo" #~ "Especificar configurações customizadas na URL" #~ " de preferências pode ser usado para" #~ " sincronizar preferências entre dispositivos." + +#~ msgid "proxied" +#~ msgstr "via proxy" + diff --git a/searx/translations/pt_BR/LC_MESSAGES/messages.mo b/searx/translations/pt_BR/LC_MESSAGES/messages.mo index e9081b737..dc46cc5ca 100644 Binary files a/searx/translations/pt_BR/LC_MESSAGES/messages.mo and b/searx/translations/pt_BR/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/pt_BR/LC_MESSAGES/messages.po b/searx/translations/pt_BR/LC_MESSAGES/messages.po index 8fbdc6864..4bf10a238 100644 --- a/searx/translations/pt_BR/LC_MESSAGES/messages.po +++ b/searx/translations/pt_BR/LC_MESSAGES/messages.po @@ -43,19 +43,18 @@ # Juno Takano , 2025. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: 2025-04-03 10:39+0000\n" "Last-Translator: Juno Takano \n" -"Language-Team: Portuguese (Brazil) \n" "Language: pt_BR\n" +"Language-Team: Portuguese (Brazil) " +"\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" -"Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 5.10.2\n" "Generated-By: Babel 2.17.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -99,7 +98,7 @@ msgid "videos" msgstr "vídeos" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "rádio" @@ -376,93 +375,93 @@ msgstr "Fechado" msgid "answered" msgstr "respondido" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "Nenhum item encontrado" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "Fonte" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "Erro ao carregar a próxima página" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "Configurações inválidas, por favor, edite suas preferências" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "Configurações inválidas" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "erro de busca" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "tempo esgotado" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "erro de leitura" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "erro de protocolo HTTP" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "erro de rede" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "Erro de SSL: validação de certificado falhou" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "falha inesperada" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "erro HTTP" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "erro de conexão HTTP" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "erro de proxy" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "CAPTCHA" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "muitas solicitações" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "acesso negado" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "erro de API do servidor" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "Suspenso" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "{minutes} minuto(s) atrás" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "{hours} hora(s), {minutes} minuto(s) atrás" @@ -493,15 +492,15 @@ msgstr "Esta entrada foi substituída por" msgid "Channel" msgstr "Canal" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "fluxo de transferência de bits" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "vótos" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "cliques" @@ -510,7 +509,7 @@ msgstr "cliques" msgid "Language" msgstr "Idioma" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -739,10 +738,6 @@ msgstr "Autor" msgid "cached" msgstr "em cache" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "por proxy" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "Submeta um novo problema no Github" @@ -1211,8 +1206,8 @@ msgid "" "A URL containing your preferences. This URL can be used to restore your " "settings on a different device." msgstr "" -"Uma URL contendo suas preferências. Esta URL pode ser usada para restaurar " -"suas configurações em outro dispositivo." +"Uma URL contendo suas preferências. Esta URL pode ser usada para " +"restaurar suas configurações em outro dispositivo." #: searx/templates/simple/preferences/cookies.html:46 msgid "Copy preferences hash" @@ -2134,3 +2129,7 @@ msgstr "ocultar vídeo" #~ "Especificar preferências customizadas na URL" #~ " pode ser usado para sincronizar " #~ "preferências em outros dispositivos." + +#~ msgid "proxied" +#~ msgstr "por proxy" + diff --git a/searx/translations/ro/LC_MESSAGES/messages.mo b/searx/translations/ro/LC_MESSAGES/messages.mo index 6d26189a1..338d4bf5c 100644 Binary files a/searx/translations/ro/LC_MESSAGES/messages.mo and b/searx/translations/ro/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/ro/LC_MESSAGES/messages.po b/searx/translations/ro/LC_MESSAGES/messages.po index 0176adc90..06a335c0b 100644 --- a/searx/translations/ro/LC_MESSAGES/messages.po +++ b/searx/translations/ro/LC_MESSAGES/messages.po @@ -27,20 +27,19 @@ # return42 , 2025. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: 2025-04-30 15:18+0000\n" "Last-Translator: return42 \n" -"Language-Team: Romanian \n" "Language: ro\n" +"Language-Team: Romanian " +"\n" +"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 " +"< 20)) ? 1 : 2;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " -"20)) ? 1 : 2;\n" -"X-Generator: Weblate 5.10.2\n" "Generated-By: Babel 2.17.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -84,7 +83,7 @@ msgid "videos" msgstr "videouri" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "radio" @@ -361,93 +360,93 @@ msgstr "închis" msgid "answered" msgstr "răspuns" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "Niciun element găsit" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "Sursă" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "Eroare la încărcarea paginii următoare" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "Configurări nevalide, modificați preferințele" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "Configurări nevalide" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "eroare de căutare" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "pauza" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "eroare de transpunere" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "eroare protocol HTTP" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "eroare rețea" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "Eroare SSL: validarea certificatului a esuat" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "inchidere fortata neasteptata" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "eroare HTTP" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "eroare conexiune HTTP" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "eroare proxy" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "CAPTCHA" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "Prea multe solicitări" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "Acces interzis" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "eroare la API pe Server" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "Întrerupt" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "{minutes} minut(e) în urmă" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "{hours} oră(e), {minutes} minut(e) în urmă" @@ -478,15 +477,15 @@ msgstr "Această intrare a fost inlocuită de" msgid "Channel" msgstr "Canal" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "rata de biți" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "voturi" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "click-uri" @@ -495,7 +494,7 @@ msgstr "click-uri" msgid "Language" msgstr "Limba" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -723,10 +722,6 @@ msgstr "Autor" msgid "cached" msgstr "stocat temporar" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "delegat" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "Începe prin a trimite o nouă problemă la GiHub" @@ -2112,3 +2107,7 @@ msgstr "ascunde video" #~ "de preferințe poate fi folosit pentru" #~ " sincronizarea preferințelor pe toate " #~ "aparatele." + +#~ msgid "proxied" +#~ msgstr "delegat" + diff --git a/searx/translations/ru/LC_MESSAGES/messages.mo b/searx/translations/ru/LC_MESSAGES/messages.mo index 663e2257b..a2f51244c 100644 Binary files a/searx/translations/ru/LC_MESSAGES/messages.mo and b/searx/translations/ru/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/ru/LC_MESSAGES/messages.po b/searx/translations/ru/LC_MESSAGES/messages.po index 0dd738267..655a8f6b3 100644 --- a/searx/translations/ru/LC_MESSAGES/messages.po +++ b/searx/translations/ru/LC_MESSAGES/messages.po @@ -30,21 +30,20 @@ # return42 , 2025. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: 2025-03-31 18:08+0000\n" "Last-Translator: return42 \n" -"Language-Team: Russian \n" "Language: ru\n" +"Language-Team: Russian " +"\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) " +"|| (n%100>=11 && n%100<=14)? 2 : 3);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (" -"n%100>=11 && n%100<=14)? 2 : 3);\n" -"X-Generator: Weblate 5.10.2\n" "Generated-By: Babel 2.17.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -88,7 +87,7 @@ msgid "videos" msgstr "видео" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "радио" @@ -365,93 +364,93 @@ msgstr "закрыт" msgid "answered" msgstr "ответил" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "Ничего не найдено" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "Источник" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "Не удалось загрузить следующую страницу" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "Неправильные параметры, пожалуйста измените ваши настройки" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "Неверные настройки" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "ошибка поиска" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "истекло время ожидания" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "ошибка разбора" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "Ошибка протокола HTTP" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "ошибка сети" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "ошибка SSL: проверка сертификата провалена" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "непредвиденная ошибка" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "ошибка HTTP" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "ошибка HTTP-соединения" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "ошибка прокси" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "КАПЧА" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "слишком много запросов" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "доступ запрещён" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "ошибка API сервера" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "Приостановлено" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "{minutes} минут(-у) назад" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "{hours} час(ов), {minutes} минут(а) назад" @@ -482,15 +481,15 @@ msgstr "Эта запись была заменена на" msgid "Channel" msgstr "Канал" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "битрейт" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "голоса" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "нажатия" @@ -499,7 +498,7 @@ msgstr "нажатия" msgid "Language" msgstr "Язык" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -727,10 +726,6 @@ msgstr "Автор" msgid "cached" msgstr "веб-архив" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "через прокси" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "Создайте задачу на GitHub" @@ -1196,8 +1191,8 @@ msgid "" "A URL containing your preferences. This URL can be used to restore your " "settings on a different device." msgstr "" -"URL-адрес, хранящий ваши настройки. Этот URL-адрес можно использовать для " -"восстановления настроек с другого устройства." +"URL-адрес, хранящий ваши настройки. Этот URL-адрес можно использовать для" +" восстановления настроек с другого устройства." #: searx/templates/simple/preferences/cookies.html:46 msgid "Copy preferences hash" @@ -2107,3 +2102,7 @@ msgstr "скрыть видео" #~ "URL-адреса с пользовательскими настройками " #~ "можно использовать для синхронизации настроек" #~ " между устройствами." + +#~ msgid "proxied" +#~ msgstr "через прокси" + diff --git a/searx/translations/si/LC_MESSAGES/messages.mo b/searx/translations/si/LC_MESSAGES/messages.mo index 4157c11f8..8bf589da8 100644 Binary files a/searx/translations/si/LC_MESSAGES/messages.mo and b/searx/translations/si/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/si/LC_MESSAGES/messages.po b/searx/translations/si/LC_MESSAGES/messages.po index 5b0a5143b..ad3be66d4 100644 --- a/searx/translations/si/LC_MESSAGES/messages.po +++ b/searx/translations/si/LC_MESSAGES/messages.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: 2025-01-15 06:48+0000\n" "Last-Translator: hirushaadi " "\n" @@ -67,7 +67,7 @@ msgid "videos" msgstr "වීඩියෝ" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "රේඩියෝව" @@ -344,93 +344,93 @@ msgstr "වසා ඇත" msgid "answered" msgstr "පිළිතුරු දී ඇත" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "අයිතමයක් හමු නොවීය" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "මූලාශ්‍රය" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "ඊළඟ පිටුව පූරණය කිරීමේ දෝෂයකි" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "වලංගු නොවන සැකසුම්, කරුණාකර ඔබගේ මනාප සංස්කරණය කරන්න" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "වලංගු නොවන සැකසුම්" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "සෙවුම් දෝෂයකි" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "වෙලාව අවසන්" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "විග්‍රහ කිරීමේ දෝෂයකි" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "HTTP ප්‍රොටෝකෝල දෝෂයකි" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "ජාල දෝෂයකි" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "SSL දෝෂය: සහතික වලංගු කිරීම අසාර්ථක විය" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "අනපේක්ෂිත බිද වැටීමකි" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "HTTP දෝශයකි" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "HTTP සම්බන්ධතා දෝෂයකි" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "proxy දෝෂයකි" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "CAPTCHA" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "බොහෝ ඉල්ලීම්" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "ප්‍රවේශය ප්‍රතික්ෂේප විය" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "සේවාදායකයේ API දෝෂයකි" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "අත්හිටුවා ඇත" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "මිනිත්තු(ව) {minutes}කට පෙර" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "පැය {hours}, මිනිත්තු(ව) {minutes}කට පෙර" @@ -461,15 +461,15 @@ msgstr "" msgid "Channel" msgstr "නාලිකාව" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "ඡන්ද" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "ක්ලික් කිරීම්" @@ -478,7 +478,7 @@ msgstr "ක්ලික් කිරීම්" msgid "Language" msgstr "භාෂාව" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -692,10 +692,6 @@ msgstr "කතුවරයා" msgid "cached" msgstr "" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "" @@ -1730,3 +1726,6 @@ msgstr "" #~ "sync preferences across devices." #~ msgstr "" +#~ msgid "proxied" +#~ msgstr "" + diff --git a/searx/translations/sk/LC_MESSAGES/messages.mo b/searx/translations/sk/LC_MESSAGES/messages.mo index 5d4e4ec62..17a377a97 100644 Binary files a/searx/translations/sk/LC_MESSAGES/messages.mo and b/searx/translations/sk/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/sk/LC_MESSAGES/messages.po b/searx/translations/sk/LC_MESSAGES/messages.po index a846c10c1..5e95e0dfe 100644 --- a/searx/translations/sk/LC_MESSAGES/messages.po +++ b/searx/translations/sk/LC_MESSAGES/messages.po @@ -17,20 +17,19 @@ # whytf , 2025. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: 2025-04-23 19:16+0000\n" "Last-Translator: whytf \n" -"Language-Team: Slovak \n" "Language: sk\n" +"Language-Team: Slovak " +"\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 " +"&& n >= 2 && n <= 4 ? 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" -"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n " -">= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);\n" -"X-Generator: Weblate 5.10.2\n" "Generated-By: Babel 2.17.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -74,7 +73,7 @@ msgid "videos" msgstr "videá" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "rádio" @@ -351,93 +350,93 @@ msgstr "Zatvoriť" msgid "answered" msgstr "Odpovedané" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "Nič sa nenašlo" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "Zdroj" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "Chyba pri načítaní ďalšej stránky" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "Nesprávne nastavenia, prosím upravte svoje predvoľby" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "Nesprávne nastavenia" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "chyba vyhľadávania" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "časový limit" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "chyba parsovania" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "chyba HTTP protokolu" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "chyba siete" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "SSL error: overenie certifikátu zlyhalo" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "neočakávaná chyba" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "HTTP chyba" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "chyba pripojenia cez HTTP" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "chyba proxy" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "CAPTCHA" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "priveľa žiadostí" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "prístup bol odmietnutý" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "API chyba servera" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "Pozastavené" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "pred {minutes} minútami" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "pred {hours} hodinami, {minutes} minútami" @@ -468,15 +467,15 @@ msgstr "Táto položka bola nahradená" msgid "Channel" msgstr "Kanál" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "bitrate" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "hlasy" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "kliknutia" @@ -485,7 +484,7 @@ msgstr "kliknutia" msgid "Language" msgstr "Jazyk" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -712,10 +711,6 @@ msgstr "Autor" msgid "cached" msgstr "z vyrovnávacej pamäte" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "cez proxy" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "Začnite s pridaním nového problému na Githube" @@ -2083,3 +2078,7 @@ msgstr "skryť video" #~ "Zadaním osobitých nastavení v adrese " #~ "(URL) nastavení je možné synchronizovať " #~ "nastavenia do iných zariadení." + +#~ msgid "proxied" +#~ msgstr "cez proxy" + diff --git a/searx/translations/sl/LC_MESSAGES/messages.mo b/searx/translations/sl/LC_MESSAGES/messages.mo index ac15dbb20..a79df016f 100644 Binary files a/searx/translations/sl/LC_MESSAGES/messages.mo and b/searx/translations/sl/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/sl/LC_MESSAGES/messages.po b/searx/translations/sl/LC_MESSAGES/messages.po index 3e0bdcf8d..7902558c5 100644 --- a/searx/translations/sl/LC_MESSAGES/messages.po +++ b/searx/translations/sl/LC_MESSAGES/messages.po @@ -18,7 +18,7 @@ msgid "" msgstr "" "Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: 2025-01-06 15:53+0000\n" "Last-Translator: cynedex \n" "Language: sl\n" @@ -72,7 +72,7 @@ msgid "videos" msgstr "videi" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "radio" @@ -349,93 +349,93 @@ msgstr "" msgid "answered" msgstr "" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "Ni zadetkov" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "Vir" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "Napaka pri nalaganju naslednje strani" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "Neveljavne nastavitve. Prosimo, preverite vašo konfiguracijo" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "Neveljavne nastavitve" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "napaka pri iskanju" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "odmor" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "napaka pri razčlenjevanju" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "napaka protokola HTTP" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "omrežna napaka" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "SSL-napaka: Preveritev certifikata je spodletela" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "nepričakovana zrušitev" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "napaka HTTP" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "napaka povezave HTTP" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "napaka proxyja" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "CAPTCHA" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "preveč prošenj" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "dostop zavrnjen" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "napaka API strežnika" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "Prekinjeno" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "{minutes} minut nazaj" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "pred {hours} urami in {minutes} minut" @@ -466,15 +466,15 @@ msgstr "Ta vnos je bil nadomeščen z" msgid "Channel" msgstr "Kanal" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "bitna hitrost" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "glasov" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "klikov" @@ -483,7 +483,7 @@ msgstr "klikov" msgid "Language" msgstr "Jezik" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -707,10 +707,6 @@ msgstr "Avtor" msgid "cached" msgstr "predpomnjeno" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "preko posredniškega strežnika" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "Začni oddajo novega hrošča na GitHub-u" @@ -2072,3 +2068,6 @@ msgstr "skrij video" #~ "ju z nastavitvami se lahko uporabi " #~ "za sinhronizacijo nastavitev med napravami." +#~ msgid "proxied" +#~ msgstr "preko posredniškega strežnika" + diff --git a/searx/translations/sr/LC_MESSAGES/messages.mo b/searx/translations/sr/LC_MESSAGES/messages.mo index efbe7946c..7acd62a08 100644 Binary files a/searx/translations/sr/LC_MESSAGES/messages.mo and b/searx/translations/sr/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/sr/LC_MESSAGES/messages.po b/searx/translations/sr/LC_MESSAGES/messages.po index d7f3a2a74..cb59308bd 100644 --- a/searx/translations/sr/LC_MESSAGES/messages.po +++ b/searx/translations/sr/LC_MESSAGES/messages.po @@ -17,20 +17,19 @@ # return42 , 2025. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: 2025-03-31 18:08+0000\n" "Last-Translator: return42 \n" -"Language-Team: Serbian \n" "Language: sr\n" +"Language-Team: Serbian " +"\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 5.10.2\n" "Generated-By: Babel 2.17.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -74,7 +73,7 @@ msgid "videos" msgstr "видео снимци" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "радио" @@ -351,93 +350,93 @@ msgstr "затворено" msgid "answered" msgstr "одговорено" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "Ставка није пронађена" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "Извор" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "Грешка приликом учитавања следеће странице" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "Неважеће поставке, молимо уредите свој избор" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "Неважећа подешавања" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "грешка у претрази" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "тајмаут" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "грешка при парсирању" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "грешка у HTTP протоколу" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "грешка на мрежи" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "SSL грешка: валидација сертификата није успела" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "неочекиван престанак рада" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "HTTP грешка" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "проблем при HTTPS конекцији" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "прокси грешка" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "CAPTCHA" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "превише захтева" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "није дозвољен приступ" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "серверска API грешка" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "Суспендован" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "пре {minutes} минут(у,е,а)" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "пре {hours} час(a) и {minutes} минут(у,е,а)" @@ -468,15 +467,15 @@ msgstr "Овај унос је заменио" msgid "Channel" msgstr "Канал" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "битрата" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "гласови" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "кликови" @@ -485,7 +484,7 @@ msgstr "кликови" msgid "Language" msgstr "Језик" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -708,10 +707,6 @@ msgstr "Аутор" msgid "cached" msgstr "кеширано" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "прокси" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "Почните да шаљете ново издање на ГитХуб-у" @@ -2074,3 +2069,7 @@ msgstr "сакриј видео" #~ "Одређивање прилагођених подешавања у УРЛ-у " #~ "може да се користи за синхронизацију " #~ "подешавања на свим уређајима." + +#~ msgid "proxied" +#~ msgstr "прокси" + diff --git a/searx/translations/sv/LC_MESSAGES/messages.mo b/searx/translations/sv/LC_MESSAGES/messages.mo index 41f735e29..4b2b5bdd0 100644 Binary files a/searx/translations/sv/LC_MESSAGES/messages.mo and b/searx/translations/sv/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/sv/LC_MESSAGES/messages.po b/searx/translations/sv/LC_MESSAGES/messages.po index 8cbdbb45a..458b72772 100644 --- a/searx/translations/sv/LC_MESSAGES/messages.po +++ b/searx/translations/sv/LC_MESSAGES/messages.po @@ -33,19 +33,18 @@ # AndersNordh , 2025. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: 2025-03-31 14:03+0000\n" "Last-Translator: AndersNordh \n" -"Language-Team: Swedish \n" "Language: sv\n" +"Language-Team: Swedish " +"\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" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.10.2\n" "Generated-By: Babel 2.17.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -89,7 +88,7 @@ msgid "videos" msgstr "videor" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "radio" @@ -366,93 +365,93 @@ msgstr "stängd" msgid "answered" msgstr "svarad" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "Inga artiklar hittade" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "Källa" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "Kunde inte ladda nästa sida" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "Ogiltiga inställningar, vänligen redigerar dina inställningar" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "Ogiltiga inställningar" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "sökfel" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "avbrott" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "tolkningsfel" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "HTTP-protokollfel" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "nätverksfel" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "SSL-fel: Valideringsfel av certifikatet" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "oförutsedd krasch" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "HTTP-fel" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "HTTP-uppkopplingsfel" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "proxyfel" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "CAPTCHA" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "för många förfrågningar" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "åtkomst nekad" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "server API-fel" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "Avstängd" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "{minutes} minut(er) sedan" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "{hours} timm(e/ar), {minutes} minut(er) sedan" @@ -483,15 +482,15 @@ msgstr "Detta inlägg har ersatts av" msgid "Channel" msgstr "Kanal" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "bithastighet" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "röster" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "klickar" @@ -500,7 +499,7 @@ msgstr "klickar" msgid "Language" msgstr "Språk" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -729,10 +728,6 @@ msgstr "Upphovsman" msgid "cached" msgstr "cachad" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "proxade" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "Börja rapportera ett problem på Github" @@ -2101,3 +2096,7 @@ msgstr "göm video" #~ "inställningarnas URL kan användas för " #~ "att synkronisera inställningar mellan olika" #~ " enheter." + +#~ msgid "proxied" +#~ msgstr "proxade" + diff --git a/searx/translations/szl/LC_MESSAGES/messages.mo b/searx/translations/szl/LC_MESSAGES/messages.mo index 9598d182b..c48900525 100644 Binary files a/searx/translations/szl/LC_MESSAGES/messages.mo and b/searx/translations/szl/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/szl/LC_MESSAGES/messages.po b/searx/translations/szl/LC_MESSAGES/messages.po index f582d44be..8216013f7 100644 --- a/searx/translations/szl/LC_MESSAGES/messages.po +++ b/searx/translations/szl/LC_MESSAGES/messages.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: 2025-03-16 13:04+0000\n" "Last-Translator: gkkulik \n" "Language: szl\n" @@ -64,7 +64,7 @@ msgid "videos" msgstr "wideo" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "radio" @@ -341,93 +341,93 @@ msgstr "zawarty" msgid "answered" msgstr "ôdpedziany" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "Żodyn elymynt niy znojdziōny" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "Zdrzōdło" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "Feler ladowanio nastympnyj strōny" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "Niynoleżne sztalōnki, zmiyń swoje preferyncyje" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "Niynoleżne sztalōnki" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "błōnd wyszukowanio" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "kōniec czasu" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "feler przetworzanio" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "Feler protokołu HTTP" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "feler necu" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "Feler SSL: niy podarziło sie poświadczynie certyfikatu" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "niyspodziano awaryjo" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "Feler HTTP" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "Feler połōnczynio HTTP" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "feler proxy" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "CAPTCHA" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "za moc żōndań" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "dostymp ôdkozany" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "feler serwera API" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "Strzimane" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "{minutes} minut(y) tymu" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "{hours} godzin(y), {minutes} minut(y) tymu" @@ -458,15 +458,15 @@ msgstr "Tyn wpis bōł zastōmpiōny ôd" msgid "Channel" msgstr "Kanał" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "cug bitōw" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "głosy" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "kliki" @@ -475,7 +475,7 @@ msgstr "kliki" msgid "Language" msgstr "Jynzyk" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -700,10 +700,6 @@ msgstr "Autōr" msgid "cached" msgstr "buforowane" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "ze proxy" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "Zacznij ôtwiyrać nowy problym na GitHubie" @@ -1822,3 +1818,6 @@ msgstr "skryj wideo" #~ "sztalōnkōw może być używane do " #~ "synchrōnizowanio sztalōnkōw miyndzy maszinami." +#~ msgid "proxied" +#~ msgstr "ze proxy" + diff --git a/searx/translations/ta/LC_MESSAGES/messages.mo b/searx/translations/ta/LC_MESSAGES/messages.mo index 499db4590..98f17f9e1 100644 Binary files a/searx/translations/ta/LC_MESSAGES/messages.mo and b/searx/translations/ta/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/ta/LC_MESSAGES/messages.po b/searx/translations/ta/LC_MESSAGES/messages.po index 38fee2c77..dc4c8d024 100644 --- a/searx/translations/ta/LC_MESSAGES/messages.po +++ b/searx/translations/ta/LC_MESSAGES/messages.po @@ -27,19 +27,18 @@ # prashere , 2025. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: 2025-04-22 10:45+0000\n" "Last-Translator: prashere \n" -"Language-Team: Tamil \n" "Language: ta\n" +"Language-Team: Tamil " +"\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" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.10.2\n" "Generated-By: Babel 2.17.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -83,7 +82,7 @@ msgid "videos" msgstr "காணொளிகள்" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "வானொலி" @@ -360,93 +359,93 @@ msgstr "மூடப்பட்டது" msgid "answered" msgstr "பதில் அளிக்கப்பட்டது" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "எதுவும் கிடைக்கவில்லை" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "ஆதாரம்" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "அடுத்த பக்கத்தை திறப்பதில் தவறு நிகழ்ந்துவிட்டது." -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "ஏற்க முடியாத அமைப்பு,உங்கள் விருப்பத்தை தொகுக்கவும்" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "ஏற்கமுடியாத அமைப்பு" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "தேடல் பிழை" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "நேரம் முடிந்தது" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "பாகுபடுத்தும் பிழை" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "HTTP நெறிமுறை பிழை" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "பிணைய பிழை" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "SSL பிழை: சான்றிதழ் சரிபார்ப்பு தோல்வியடைந்தது" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "எதிர்பாராத விபத்து" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "HTTP பிழை" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "HTTP இணைப்பு பிழை" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "ப்ராக்ஸி பிழை" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "கேப்ட்சா" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "பல கோரிக்கைகள்" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "அணுகல் மறுக்கப்பட்டது" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "சேவையக API பிழை" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "இடைநிறுத்தப்பட்டது" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "{minutes} நிமிடங்களுக்கு முன்னால்" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "{hours} மணிநேரம், {minutes} நிமிடங்களுக்கு முன்னால்" @@ -477,15 +476,15 @@ msgstr "இந்த நுழைவு மாற்றப்பட்டது" msgid "Channel" msgstr "சேனல்" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "தகவல் விகிதம்" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "வாக்குகள்" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "சொடுக்குகள்" @@ -494,7 +493,7 @@ msgstr "சொடுக்குகள்" msgid "Language" msgstr "மொழி" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -721,10 +720,6 @@ msgstr "நூலாசிரியர்" msgid "cached" msgstr "தற்காலிக சேமிப்பு" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "ப்ராக்ஸி" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "புதிய சிக்கலைச் GitHub இல் சமர்ப்பிக்கத் தொடங்குங்கள்" @@ -2065,3 +2060,7 @@ msgstr "காணொளிகளை மறை" #~ "preferences URL can be used to " #~ "sync preferences across devices." #~ msgstr "" + +#~ msgid "proxied" +#~ msgstr "ப்ராக்ஸி" + diff --git a/searx/translations/te/LC_MESSAGES/messages.mo b/searx/translations/te/LC_MESSAGES/messages.mo index 412d0edfd..178643f3a 100644 Binary files a/searx/translations/te/LC_MESSAGES/messages.mo and b/searx/translations/te/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/te/LC_MESSAGES/messages.po b/searx/translations/te/LC_MESSAGES/messages.po index 8747613f6..fa4036b90 100644 --- a/searx/translations/te/LC_MESSAGES/messages.po +++ b/searx/translations/te/LC_MESSAGES/messages.po @@ -15,7 +15,7 @@ msgid "" msgstr "" "Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: 2025-01-09 07:08+0000\n" "Last-Translator: Harshith-10 " "\n" @@ -69,7 +69,7 @@ msgid "videos" msgstr "వీడియోలు" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "రేడియో" @@ -346,93 +346,93 @@ msgstr "క్లోస్డ్" msgid "answered" msgstr "సమాధానమిచ్చారు" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "ఏమీ దొరకలేదు" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "మూలం" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "తదుపరి పేజీని లోడ్ చేయడంలో లోపం" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "చెల్లని సెట్టింగ్‌లు, దయచేసి మీ ప్రాధాన్యతలను సవరించండి" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "చెల్లని అమరికలు" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "శోధనలో లోపము" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "సమయం ముగిసినది" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "పార్సింగ్ లోపం" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "HTTP నియమాలలో లోపం" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "నెట్వర్క్ లోపం" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "SSL లోపం: సర్టిఫికేట్ ధ్రువీకరణ విఫలమైంది" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "ఊహించని లోపం" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "HTTP లోపం" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "HTTP కనెక్షన్ లోపం" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "ప్రాక్సీ లోపం" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "క్యాప్చా" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "చాలా అభ్యర్థనలు" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "అనుమతి లేదు" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "సర్వర్ API లోపం" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "రద్ధు చెయ్యబడింది" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "{minutes} నిమిషము(ల) క్రిందట" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "{hours} గంట(లు), {minutes} నిమిషం(లు) క్రితం" @@ -463,15 +463,15 @@ msgstr "దీని ద్వారా ఈ ఎంట్రీ భర్తీ msgid "Channel" msgstr "ఛానెల్" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "బిట్రేట్" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "ఓట్లు" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "క్లిక్‌లు" @@ -480,7 +480,7 @@ msgstr "క్లిక్‌లు" msgid "Language" msgstr "భాష" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -706,10 +706,6 @@ msgstr "రచయిత" msgid "cached" msgstr "కాష్ చేయబడింది" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "ప్రాక్సీడ్" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "GitHub లో కొత్త సంచికను సమర్పించడం ప్రారంభించండి" @@ -2064,3 +2060,6 @@ msgstr "వీడియోను దాచిపెట్టు" #~ "పేర్కొనడం ద్వారా పరికరాల్లో ప్రాధాన్యతలను " #~ "సమకాలీకరించడానికి ఉపయోగించవచ్చు." +#~ msgid "proxied" +#~ msgstr "ప్రాక్సీడ్" + diff --git a/searx/translations/th/LC_MESSAGES/messages.mo b/searx/translations/th/LC_MESSAGES/messages.mo index cc3456cc9..88eddc80c 100644 Binary files a/searx/translations/th/LC_MESSAGES/messages.mo and b/searx/translations/th/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/th/LC_MESSAGES/messages.po b/searx/translations/th/LC_MESSAGES/messages.po index 2be3b905f..7ed43cea6 100644 --- a/searx/translations/th/LC_MESSAGES/messages.po +++ b/searx/translations/th/LC_MESSAGES/messages.po @@ -13,13 +13,14 @@ # Anonymous , 2025. # yuttct , 2025. # return42 , 2025. +# wetinee , 2025. msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" -"PO-Revision-Date: 2025-04-15 10:37+0000\n" -"Last-Translator: return42 \n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" +"PO-Revision-Date: 2025-05-17 15:04+0000\n" +"Last-Translator: wetinee \n" "Language-Team: Thai \n" "Language: th\n" @@ -27,7 +28,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 5.10.2\n" +"X-Generator: Weblate 5.11.4\n" "Generated-By: Babel 2.17.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -71,7 +72,7 @@ msgid "videos" msgstr "วิดีโอ" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "วิทยุ" @@ -348,93 +349,93 @@ msgstr "ลบแล้ว" msgid "answered" msgstr "ตอบแล้ว" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "ไม่พบรายการ" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "แหล่งที่มา" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "เกิดข้อผิดพลาดขณะโหลดหน้าถัดไป" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "การตั้งค่าไม่ถูกต้อง โปรดแก้ไขการตั้งค่าของคุณ" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "การตั้งค่าไม่ถูกต้อง" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "ข้อผิดพลาดจากการค้นหา" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "หมดเวลา" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "ข้อผิดพลาดระหว่างแจงโครงสร้างไวยากรณ์" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "เกิดข้อผิดพลาดของโปรโตคอล HTTP" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "ข้อผิดพลาดทางเครือข่าย" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "ข้อผิดพลาดทาง SSL: การตรวจสอบใบรับรองล้มเหลว" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "ข้อผิดพลาดที่ไม่คาดคิด" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "ข้อผิดพลาดจาก HTTP" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "ข้อผิดพลาดจากการเชื่อมต่อ HTTP" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "ข้อผิดพลาดจากพร็อกซี" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "แคปต์ชา" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "คำขอมากเกินไป" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "การเข้าถึงถูกปฏิเสธ" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "ข้อผิดพลาดจาก API ของเซิร์ฟเวอร์" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "ถูกระงับ" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "{minutes} นาทีที่แล้ว" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "{hours} ชั่วโมง {minutes} นาทีที่แล้ว" @@ -446,11 +447,11 @@ msgstr "ทำการสุ่มค่าที่แตกต่างกั #: searx/answerers/statistics.py:36 #, python-brace-format msgid "Compute {func} of the arguments" -msgstr "" +msgstr "คำนวณ {func} ของอาร์กิวเมนต์" #: searx/engines/openstreetmap.py:158 msgid "Show route in map .." -msgstr "" +msgstr "แสดงเส้นทางบนแผนที่ .." #: searx/engines/pdbe.py:96 #, python-brace-format @@ -465,15 +466,15 @@ msgstr "รายการนี้ถูกแทนที่โดย" msgid "Channel" msgstr "ช่องทาง" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "บิตเรต" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "โหวต" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "คลิก" @@ -482,7 +483,7 @@ msgstr "คลิก" msgid "Language" msgstr "ภาษา" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -523,15 +524,15 @@ msgstr "คุณภาพไฟล์" #: searx/plugins/ahmia_filter.py:32 msgid "Ahmia blacklist" -msgstr "" +msgstr "แบล็กลิสต์ Ahmia" #: searx/plugins/ahmia_filter.py:33 msgid "Filter out onion results that appear in Ahmia's blacklist." -msgstr "" +msgstr "กรองผลการค้นหา onion ที่อยู่ในแบล็กลิสต์ Ahmia" #: searx/plugins/calculator.py:38 msgid "Basic Calculator" -msgstr "" +msgstr "เครื่องคิดเลขพื้นฐาน" #: searx/plugins/calculator.py:39 msgid "Calculate mathematical expressions via the search bar" @@ -539,7 +540,7 @@ msgstr "คำนวณนิพจน์คณิตศาสตร์ผ่า #: searx/plugins/hash_plugin.py:34 msgid "Hash plugin" -msgstr "" +msgstr "ปลั๊กอินแฮช" #: searx/plugins/hash_plugin.py:35 msgid "Converts strings to different hash digests." @@ -576,6 +577,8 @@ msgid "" "Displays your IP if the query is \"ip\" and your user agent if the query " "is \"user-agent\"." msgstr "" +"จะแสดง IP ของคุณหากคำค้นคือ 'ip' และแสดงข้อมูล User Agent ของคุณหากคำค้นคือ 'user-" +"agent'" #: searx/plugins/self_info.py:52 msgid "Your IP is: " @@ -600,15 +603,15 @@ msgstr "" #: searx/plugins/tor_check.py:65 msgid "Could not download the list of Tor exit-nodes from" -msgstr "" +msgstr "ไม่สามารถดาวน์โหลดรายการของโหนดทางออกของ Tor จาก" #: searx/plugins/tor_check.py:72 msgid "You are using Tor and it looks like you have the external IP address" -msgstr "" +msgstr "คุณกำลังใช้ Tor และดูเหมือนว่าคุณมีที่อยู่ IP ภายนอก" #: searx/plugins/tor_check.py:76 msgid "You are not using Tor and you have the external IP address" -msgstr "" +msgstr "คุณไม่ได้ใช้ Tor และคุณมีที่อยู่ IP ภายนอก" #: searx/plugins/tracker_url_remover.py:37 msgid "Tracker URL remover" @@ -620,7 +623,7 @@ msgstr "ลบอาร์กิวเมนต์ตัวติดตามอ #: searx/plugins/unit_converter.py:49 msgid "Unit converter plugin" -msgstr "" +msgstr "ปลั๊กอินแปลงหน่วย" #: searx/plugins/unit_converter.py:50 msgid "Convert between units" @@ -704,10 +707,6 @@ msgstr "ผู้เขียน" msgid "cached" msgstr "แคช" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "พร็อกซี่" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "เริ่มส่งฉบับใหม่บน GitHub" @@ -936,7 +935,7 @@ msgstr "ตัวอย่าง" #: searx/templates/simple/answer/translations.html:21 msgid "Definitions" -msgstr "" +msgstr "คำนิยาม" #: searx/templates/simple/answer/translations.html:30 msgid "Synonyms" @@ -1095,7 +1094,7 @@ msgstr "อนุญาต" #: searx/templates/simple/preferences/answerers.html:5 msgid "Keywords (first word in query)" -msgstr "" +msgstr "คำหลัก (คำแรกของคำค้นหา)" #: searx/templates/simple/preferences/answerers.html:6 #: searx/templates/simple/result_templates/packages.html:7 @@ -1169,6 +1168,7 @@ msgid "" "A URL containing your preferences. This URL can be used to restore your " "settings on a different device." msgstr "" +"ลิงก์ URL ที่บรรจุค่าการตั้งค่าของคุณ ซึ่งสามารถนำไปใช้กู้คืนการตั้งค่าเหล่านั้นบนอุปกรณ์อื่นได้" #: searx/templates/simple/preferences/cookies.html:46 msgid "Copy preferences hash" @@ -1184,7 +1184,7 @@ msgstr "การตั้งค่าแฮช" #: searx/templates/simple/preferences/doi_resolver.html:1 msgid "Digital Object Identifier (DOI)" -msgstr "" +msgstr "รหัส DOI" #: searx/templates/simple/preferences/doi_resolver.html:6 msgid "Open Access DOI resolver" @@ -1378,23 +1378,23 @@ msgstr "เปลี่ยนภาษาของเค้าโครง" #: searx/templates/simple/preferences/urlformatting.html:2 msgid "URL formatting" -msgstr "" +msgstr "การจัดรูปแบบ URL" #: searx/templates/simple/preferences/urlformatting.html:8 msgid "Pretty" -msgstr "" +msgstr "แบบสวยงาม" #: searx/templates/simple/preferences/urlformatting.html:13 msgid "Full" -msgstr "" +msgstr "แบบเต็ม" #: searx/templates/simple/preferences/urlformatting.html:18 msgid "Host" -msgstr "" +msgstr "โฮสต์" #: searx/templates/simple/preferences/urlformatting.html:23 msgid "Change result URL formatting" -msgstr "" +msgstr "เปลี่ยนรูปแบบ URL ผลการค้นหา" #: searx/templates/simple/result_templates/code.html:13 msgid "repo" @@ -1789,3 +1789,6 @@ msgstr "ซ่อนวิดีโอ" #~ msgstr "" #~ "การระบุการตั้งค่าแบบกำหนดเองใน URL " #~ "ค่ากำหนดสามารถใช้เพื่อซิงค์กับค่ากำหนดในอุปกรณ์ต่างๆได้" + +#~ msgid "proxied" +#~ msgstr "พร็อกซี่" diff --git a/searx/translations/tr/LC_MESSAGES/messages.mo b/searx/translations/tr/LC_MESSAGES/messages.mo index 06cdfe48b..ecf3f5427 100644 Binary files a/searx/translations/tr/LC_MESSAGES/messages.mo and b/searx/translations/tr/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/tr/LC_MESSAGES/messages.po b/searx/translations/tr/LC_MESSAGES/messages.po index 506e39269..65d433b67 100644 --- a/searx/translations/tr/LC_MESSAGES/messages.po +++ b/searx/translations/tr/LC_MESSAGES/messages.po @@ -29,19 +29,18 @@ # return42 , 2025. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: 2025-04-02 11:50+0000\n" "Last-Translator: return42 \n" -"Language-Team: Turkish \n" "Language: tr\n" +"Language-Team: Turkish " +"\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" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Weblate 5.10.2\n" "Generated-By: Babel 2.17.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -85,7 +84,7 @@ msgid "videos" msgstr "görüntüler" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "radyo" @@ -362,93 +361,93 @@ msgstr "kapalı" msgid "answered" msgstr "yanıtlandı" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "Öğe bulunamadı" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "Kaynak" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "Sonraki sayfa yüklenemedi" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "Geçersiz ayarlar, lütfen tercihlerinizi düzenleyin" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "Geçersiz ayarlar" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "arama hatası" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "zaman aşımı" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "ayrıştırma hatası" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "HTTP protokol hatası" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "bağlantı hatası" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "SSL Hatası: Sertifika doğrulaması başarısız oldu" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "beklenmeyen çökme" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "HTTP hatası" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "HTTP bağlantı hatası" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "proxy hatası" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "CAPTCHA" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "çok fazla istek" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "erişim engellendi" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "sunucu API hatası" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "Askıya alındı" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "{minutes} dakika önce" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "{hours} saat, {minutes} dakika önce" @@ -479,15 +478,15 @@ msgstr "Bu girişin yerini alan" msgid "Channel" msgstr "Kanal" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "bit hızı" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "oylar" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "tıklamalar" @@ -496,7 +495,7 @@ msgstr "tıklamalar" msgid "Language" msgstr "Dil" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -722,10 +721,6 @@ msgstr "Hazırlayan" msgid "cached" msgstr "önbellek" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "proxylendi" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "GitHub'a Yeni bir hata göndeymeye başlayin" @@ -1193,8 +1188,8 @@ msgid "" "A URL containing your preferences. This URL can be used to restore your " "settings on a different device." msgstr "" -"Tercihlerinizi içeren bir URL. Bu URL, ayarlarınızı farklı bir cihazda geri " -"yüklemek için kullanılabilir." +"Tercihlerinizi içeren bir URL. Bu URL, ayarlarınızı farklı bir cihazda " +"geri yüklemek için kullanılabilir." #: searx/templates/simple/preferences/cookies.html:46 msgid "Copy preferences hash" @@ -2099,3 +2094,7 @@ msgstr "görüntüyü gizle" #~ "Tercihler URL'sinde özel ayarları belirtmek," #~ " cihazlar arasında senkronize etmek için" #~ " kullanılabilir." + +#~ msgid "proxied" +#~ msgstr "proxylendi" + diff --git a/searx/translations/tt/LC_MESSAGES/messages.mo b/searx/translations/tt/LC_MESSAGES/messages.mo index d4f2856ad..9611dc868 100644 Binary files a/searx/translations/tt/LC_MESSAGES/messages.mo and b/searx/translations/tt/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/tt/LC_MESSAGES/messages.po b/searx/translations/tt/LC_MESSAGES/messages.po index 5eae2f062..e46d1c9db 100644 --- a/searx/translations/tt/LC_MESSAGES/messages.po +++ b/searx/translations/tt/LC_MESSAGES/messages.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: 2025-03-27 13:44+0000\n" "Last-Translator: return42 \n" "Language: tt\n" @@ -64,7 +64,7 @@ msgid "videos" msgstr "видео" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "радио" @@ -341,94 +341,94 @@ msgstr "ябык" msgid "answered" msgstr "" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "Нәтиҗә табылмады" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "Чыганак" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "Хаталы көйләүләр; сезнең көйләүләрне үзгәртегезче" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "Хаталы көйләүләр" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "эзләү хатасы" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "вакыт бетте" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "тану хатасы" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "HTTP протоколының хатасы" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "челтәр хатасы" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "SSL хатасы: сертификатны тикшереп булмады" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "көтмәгән сафтан чыгу" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "HTTP хатасы" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "HTTP тоташу хатасы" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "прокси хатасы" -#: searx/webutils.py:57 +#: searx/webutils.py:56 #, fuzzy msgid "CAPTCHA" msgstr "КАПЧА" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "артык күп сораулар" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "рөхсәт тыелган" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "сервер API'ының хатасы" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "Туктатылды" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "{minutes} минут элек" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "{hours} сәгать, {minutes} минут элек" @@ -459,15 +459,15 @@ msgstr "" msgid "Channel" msgstr "Канал" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "битрейт" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "тавыш" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "басу саны" @@ -476,7 +476,7 @@ msgstr "басу саны" msgid "Language" msgstr "Тел" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -688,10 +688,6 @@ msgstr "Автор" msgid "cached" msgstr "кәшләнгән" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "проксиләнгән" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "" @@ -1588,3 +1584,6 @@ msgstr "видеоны яшерү" #~ "sync preferences across devices." #~ msgstr "" +#~ msgid "proxied" +#~ msgstr "проксиләнгән" + diff --git a/searx/translations/uk/LC_MESSAGES/messages.mo b/searx/translations/uk/LC_MESSAGES/messages.mo index 67c11c07a..b6b047f38 100644 Binary files a/searx/translations/uk/LC_MESSAGES/messages.mo and b/searx/translations/uk/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/uk/LC_MESSAGES/messages.po b/searx/translations/uk/LC_MESSAGES/messages.po index 340c58796..ef2f13a6d 100644 --- a/searx/translations/uk/LC_MESSAGES/messages.po +++ b/searx/translations/uk/LC_MESSAGES/messages.po @@ -20,22 +20,21 @@ # SomeTr , 2025. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: 2025-05-03 15:52+0000\n" "Last-Translator: SomeTr \n" -"Language-Team: Ukrainian \n" "Language: uk\n" +"Language-Team: Ukrainian " +"\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 !=" +" 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n " +"% 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9)" +" || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 " -"? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > " -"14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % " -"100 >=11 && n % 100 <=14 )) ? 2: 3);\n" -"X-Generator: Weblate 5.10.2\n" "Generated-By: Babel 2.17.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -79,7 +78,7 @@ msgid "videos" msgstr "відео" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "радіо" @@ -356,93 +355,93 @@ msgstr "закрито" msgid "answered" msgstr "є відповідь" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "Нічого не знайдено" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "Джерело" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "Не вдалося завантажити наступну сторінку" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "Неправильні налаштування, будь ласка, зробіть зміни в налаштуваннях" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "Неправильні налаштування" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "помилка пошуку" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "тайм-аут" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "помилка парсингу" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "помилка протоколу HTTP" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "помилка мережі" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "Помилка SSL: не вдалося перевірити сертифікат" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "непередбачена помилка" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "помилка HTTP" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "помилка з'єднання HTTP" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "помилка проксі" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "CAPTCHA" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "забагато запитів" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "доступ заборонено" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "помилка API сервера" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "Призупинено" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "{minutes} хвилин тому" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "{hours} годин, {minutes} хвилин тому" @@ -473,15 +472,15 @@ msgstr "Цей запис було замінено на" msgid "Channel" msgstr "Канал" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "бітрейт" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "голоси" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "кліки" @@ -490,7 +489,7 @@ msgstr "кліки" msgid "Language" msgstr "Мова" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -717,10 +716,6 @@ msgstr "Автор" msgid "cached" msgstr "кеш" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "проксовано" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "Створення нового повідомлення про проблему на GitHub" @@ -1188,8 +1183,8 @@ msgid "" "A URL containing your preferences. This URL can be used to restore your " "settings on a different device." msgstr "" -"URL-адреса, що містить Ваші налаштування. Цю URL-адресу можна використати " -"для відновлення налаштувань на іншому пристрої." +"URL-адреса, що містить Ваші налаштування. Цю URL-адресу можна використати" +" для відновлення налаштувань на іншому пристрої." #: searx/templates/simple/preferences/cookies.html:46 msgid "Copy preferences hash" @@ -2068,3 +2063,7 @@ msgstr "приховати відео" #~ "Зазначення користувацьких налаштувань в " #~ "URL-адресі можна використовувати для " #~ "синхронізації налаштувань на різних пристроях." + +#~ msgid "proxied" +#~ msgstr "проксовано" + diff --git a/searx/translations/vi/LC_MESSAGES/messages.mo b/searx/translations/vi/LC_MESSAGES/messages.mo index 455498ead..db812b423 100644 Binary files a/searx/translations/vi/LC_MESSAGES/messages.mo and b/searx/translations/vi/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/vi/LC_MESSAGES/messages.po b/searx/translations/vi/LC_MESSAGES/messages.po index 05e5441ed..927cfb7b9 100644 --- a/searx/translations/vi/LC_MESSAGES/messages.po +++ b/searx/translations/vi/LC_MESSAGES/messages.po @@ -19,13 +19,14 @@ # KhietVo , 2025. # nam000 , 2025. # buiducnhat , 2025. +# cduon010 , 2025. msgid "" msgstr "" "Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" -"PO-Revision-Date: 2025-03-05 02:17+0000\n" -"Last-Translator: buiducnhat \n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" +"PO-Revision-Date: 2025-05-12 21:53+0000\n" +"Last-Translator: cduon010 \n" "Language: vi\n" "Language-Team: Vietnamese " "\n" @@ -73,13 +74,12 @@ msgstr "hình ảnh" #. CATEGORY_NAMES['VIDEOS'] #: searx/searxng.msg msgid "videos" -msgstr "phim" +msgstr "băng hình" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg -#, fuzzy +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" -msgstr "radio" +msgstr "máy radio" #. CATEGORY_NAMES['TV'] #: searx/searxng.msg @@ -104,7 +104,7 @@ msgstr "bản đồ" #. CATEGORY_NAMES['ONIONS'] #: searx/searxng.msg msgid "onions" -msgstr "hành tây" +msgstr "định tuyến onion" #. CATEGORY_NAMES['SCIENCE'] #: searx/searxng.msg @@ -354,93 +354,93 @@ msgstr "đóng" msgid "answered" msgstr "đã trả lời" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "Không tìm thấy gì" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "Nguồn" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "Không thể tải trang kế tiếp" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "Cài đặt không hợp lệ, xin xem lại tuỳ chỉnh" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "Cài đặt không hợp lệ" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "lỗi tìm kiếm" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "Hết thời gian" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "lỗi phân tích" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "Lỗi giao thức HTTP" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "Lỗi mạng" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "Lỗi SSL: xác thực chứng chỉ không thành công" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "sập đột ngột" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "Lỗi HTTP" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "Lỗi kết nối HTTP" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "Lỗi proxy" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "CAPTCHA" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "quá nhiều yêu cầu" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "Truy cập bị từ chối" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "Lỗi máy chủ API" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "Treo/gián đoạn/chặn" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "{minutes} phút() trước" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "{hours} giờ, {minutes} phút trước" @@ -471,15 +471,15 @@ msgstr "Mục này đã được thay thế bởi" msgid "Channel" msgstr "Kênh" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "tốc độ bit" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "bình chọn" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 #, fuzzy msgid "clicks" msgstr "nhấp chuột" @@ -489,7 +489,7 @@ msgstr "nhấp chuột" msgid "Language" msgstr "Ngôn ngữ" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -538,7 +538,7 @@ msgstr "" #: searx/plugins/calculator.py:38 msgid "Basic Calculator" -msgstr "" +msgstr "máy tính" #: searx/plugins/calculator.py:39 msgid "Calculate mathematical expressions via the search bar" @@ -715,10 +715,6 @@ msgstr "Tác giả" msgid "cached" msgstr "đã lưu cache" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "đã proxy" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "Bắt đầu đăng một vấn đề mới trên Github" @@ -2097,3 +2093,6 @@ msgstr "ẩn phim" #~ "để đồng bộ tùy chọn giữa nhiều " #~ "thiết bị." +#~ msgid "proxied" +#~ msgstr "đã proxy" + diff --git a/searx/translations/zh_Hans_CN/LC_MESSAGES/messages.mo b/searx/translations/zh_Hans_CN/LC_MESSAGES/messages.mo index a6446df8d..049d17aa9 100644 Binary files a/searx/translations/zh_Hans_CN/LC_MESSAGES/messages.mo and b/searx/translations/zh_Hans_CN/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/zh_Hans_CN/LC_MESSAGES/messages.po b/searx/translations/zh_Hans_CN/LC_MESSAGES/messages.po index e6f4d845a..5fed46c78 100644 --- a/searx/translations/zh_Hans_CN/LC_MESSAGES/messages.po +++ b/searx/translations/zh_Hans_CN/LC_MESSAGES/messages.po @@ -51,19 +51,18 @@ # Outbreak2096 , 2025. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: 2025-03-30 01:58+0000\n" "Last-Translator: Outbreak2096 \n" -"Language-Team: Chinese (Simplified Han script) \n" "Language: zh_Hans_CN\n" +"Language-Team: Chinese (Simplified Han script) " +"\n" +"Plural-Forms: nplurals=1; plural=0;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 5.10.2\n" "Generated-By: Babel 2.17.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -107,7 +106,7 @@ msgid "videos" msgstr "视频" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "电台" @@ -384,93 +383,93 @@ msgstr "已关闭" msgid "answered" msgstr "回答" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "未找到项目" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "来源" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "载入下个页面时发生错误" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "无效设置,请编辑您的首选项" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "无效设置" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "搜索错误" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "超时" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "解析错误" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "HTTP 协议错误" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "网络错误" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "SSL 错误:证书校验失败" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "意外崩溃" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "HTTP 错误" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "HTTP 连接错误" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "代理错误" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "验证码" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "请求过于频繁" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "拒绝访问" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "服务器 API 错误" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "暂停服务" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "{minutes} 分钟前" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "{hours} 小时 {minutes} 分钟前" @@ -501,15 +500,15 @@ msgstr "此条目已被以下内容取代" msgid "Channel" msgstr "频道" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "比特率" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "投票数" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "点击数" @@ -518,7 +517,7 @@ msgstr "点击数" msgid "Language" msgstr "语言" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -732,10 +731,6 @@ msgstr "作者" msgid "cached" msgstr "快照" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "已代理" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "在 GitHub 上开始提交新问题" @@ -2037,3 +2032,7 @@ msgstr "隐藏视频" #~ "preferences URL can be used to " #~ "sync preferences across devices." #~ msgstr "在首选项 URL 中指定可跨设备同步的偏好设置。" + +#~ msgid "proxied" +#~ msgstr "已代理" + diff --git a/searx/translations/zh_Hant_TW/LC_MESSAGES/messages.mo b/searx/translations/zh_Hant_TW/LC_MESSAGES/messages.mo index 54fd21419..73ac2bae8 100644 Binary files a/searx/translations/zh_Hant_TW/LC_MESSAGES/messages.mo and b/searx/translations/zh_Hant_TW/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/zh_Hant_TW/LC_MESSAGES/messages.po b/searx/translations/zh_Hant_TW/LC_MESSAGES/messages.po index 91c3197a4..11dc561e8 100644 --- a/searx/translations/zh_Hant_TW/LC_MESSAGES/messages.po +++ b/searx/translations/zh_Hant_TW/LC_MESSAGES/messages.po @@ -39,19 +39,18 @@ # ayame30 , 2025. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-03-29 09:21+0000\n" +"POT-Creation-Date: 2025-05-13 19:13+0000\n" "PO-Revision-Date: 2025-04-11 15:12+0000\n" "Last-Translator: ayame30 \n" -"Language-Team: Chinese (Traditional Han script) \n" "Language: zh_Hant_TW\n" +"Language-Team: Chinese (Traditional Han script) " +"\n" +"Plural-Forms: nplurals=1; plural=0;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 5.10.2\n" "Generated-By: Babel 2.17.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -95,7 +94,7 @@ msgid "videos" msgstr "影片" #. CATEGORY_NAMES['RADIO'] -#: searx/engines/radio_browser.py:103 searx/searxng.msg +#: searx/engines/radio_browser.py:151 searx/searxng.msg msgid "radio" msgstr "廣播電臺" @@ -372,93 +371,93 @@ msgstr "已關閉" msgid "answered" msgstr "已解答" -#: searx/webapp.py:312 +#: searx/webapp.py:291 msgid "No item found" msgstr "找不到項目" #: searx/engines/qwant.py:291 -#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:314 +#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:293 msgid "Source" msgstr "來源" -#: searx/webapp.py:316 +#: searx/webapp.py:295 msgid "Error loading the next page" msgstr "載入下個頁面時發生錯誤" -#: searx/webapp.py:469 searx/webapp.py:875 +#: searx/webapp.py:446 searx/webapp.py:844 msgid "Invalid settings, please edit your preferences" msgstr "無效的設定,請編輯您的偏好設定" -#: searx/webapp.py:485 +#: searx/webapp.py:462 msgid "Invalid settings" msgstr "無效的設定" -#: searx/webapp.py:562 searx/webapp.py:652 +#: searx/webapp.py:539 searx/webapp.py:629 msgid "search error" msgstr "搜尋錯誤" -#: searx/webutils.py:36 +#: searx/webutils.py:35 msgid "timeout" msgstr "逾時" -#: searx/webutils.py:37 +#: searx/webutils.py:36 msgid "parsing error" msgstr "解析錯誤" -#: searx/webutils.py:38 +#: searx/webutils.py:37 msgid "HTTP protocol error" msgstr "HTTP 協議錯誤" -#: searx/webutils.py:39 +#: searx/webutils.py:38 msgid "network error" msgstr "網路錯誤" -#: searx/webutils.py:40 +#: searx/webutils.py:39 msgid "SSL error: certificate validation has failed" msgstr "SSL錯誤:憑證驗證失敗" -#: searx/webutils.py:42 +#: searx/webutils.py:41 msgid "unexpected crash" msgstr "意外崩潰" -#: searx/webutils.py:49 +#: searx/webutils.py:48 msgid "HTTP error" msgstr "HTTP 錯誤" -#: searx/webutils.py:50 +#: searx/webutils.py:49 msgid "HTTP connection error" msgstr "HTTP 連接錯誤" -#: searx/webutils.py:56 +#: searx/webutils.py:55 msgid "proxy error" msgstr "代理錯誤" -#: searx/webutils.py:57 +#: searx/webutils.py:56 msgid "CAPTCHA" msgstr "驗證碼" -#: searx/webutils.py:58 +#: searx/webutils.py:57 msgid "too many requests" msgstr "請求過於頻繁" -#: searx/webutils.py:59 +#: searx/webutils.py:58 msgid "access denied" msgstr "拒絕存取" -#: searx/webutils.py:60 +#: searx/webutils.py:59 msgid "server API error" msgstr "伺服器 API 錯誤" -#: searx/webutils.py:79 +#: searx/webutils.py:78 msgid "Suspended" msgstr "暫停服務" -#: searx/webutils.py:314 +#: searx/webutils.py:313 #, python-brace-format msgid "{minutes} minute(s) ago" msgstr "{minutes} 分鐘前" -#: searx/webutils.py:315 +#: searx/webutils.py:314 #, python-brace-format msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "{hours} 小時 {minutes} 分鐘前" @@ -489,15 +488,15 @@ msgstr "此條目已被以下內容取代" msgid "Channel" msgstr "頻道" -#: searx/engines/radio_browser.py:105 +#: searx/engines/radio_browser.py:153 msgid "bitrate" msgstr "位元速率" -#: searx/engines/radio_browser.py:106 +#: searx/engines/radio_browser.py:154 msgid "votes" msgstr "投票數" -#: searx/engines/radio_browser.py:107 +#: searx/engines/radio_browser.py:155 msgid "clicks" msgstr "點擊數" @@ -506,7 +505,7 @@ msgstr "點擊數" msgid "Language" msgstr "語言" -#: searx/engines/semantic_scholar.py:79 +#: searx/engines/semantic_scholar.py:101 #, python-brace-format msgid "" "{numCitations} citations from the year {firstCitationVelocityYear} to " @@ -720,10 +719,6 @@ msgstr "作者" msgid "cached" msgstr "快照" -#: searx/templates/simple/macros.html:50 -msgid "proxied" -msgstr "已代理" - #: searx/templates/simple/new_issue.html:64 msgid "Start submitting a new issue on GitHub" msgstr "在 GitHub 上提交問題" @@ -2019,3 +2014,7 @@ msgstr "隱藏影片" #~ "preferences URL can be used to " #~ "sync preferences across devices." #~ msgstr "帶有偏好設定的 URL 可讓您將偏好設定同步至其他裝置。" + +#~ msgid "proxied" +#~ msgstr "已代理" + diff --git a/searx/utils.py b/searx/utils.py index a28171a32..3c60851fa 100644 --- a/searx/utils.py +++ b/searx/utils.py @@ -830,6 +830,11 @@ def js_variable_to_python(js_variable): s = _JS_DECIMAL_RE.sub(":0.", s) # replace the surogate character by colon s = s.replace(chr(1), ':') + # replace single-quote followed by comma with double-quote and comma + # {"a": "\"12\"',"b": "13"} + # becomes + # {"a": "\"12\"","b": "13"} + s = s.replace("',", "\",") # load the JSON and return the result return json.loads(s) diff --git a/searx/webapp.py b/searx/webapp.py index aaa2608c4..22e31fb5c 100755 --- a/searx/webapp.py +++ b/searx/webapp.py @@ -106,6 +106,7 @@ from searx.metrics import get_engines_stats, get_engine_errors, get_reliabilitie from searx.flaskfix import patch_application from searx.locales import ( + LOCALE_BEST_MATCH, LOCALE_NAMES, RTL_LOCALES, localeselector, @@ -1059,10 +1060,12 @@ def image_proxy(): @app.route('/engine_descriptions.json', methods=['GET']) def engine_descriptions(): - locale = get_locale().split('_')[0] + sxng_ui_lang_tag = get_locale().replace("_", "-") + sxng_ui_lang_tag = LOCALE_BEST_MATCH.get(sxng_ui_lang_tag, sxng_ui_lang_tag) + result = ENGINE_DESCRIPTIONS['en'].copy() - if locale != 'en': - for engine, description in ENGINE_DESCRIPTIONS.get(locale, {}).items(): + if sxng_ui_lang_tag != 'en': + for engine, description in ENGINE_DESCRIPTIONS.get(sxng_ui_lang_tag, {}).items(): result[engine] = description for engine, description in result.items(): if len(description) == 2 and description[1] == 'ref': diff --git a/searxng_extra/update/update_currencies.py b/searxng_extra/update/update_currencies.py index 903bdcb44..288f0994e 100755 --- a/searxng_extra/update/update_currencies.py +++ b/searxng_extra/update/update_currencies.py @@ -15,9 +15,7 @@ import json from searx.locales import LOCALE_NAMES, locales_initialize from searx.engines import wikidata, set_loggers -from searx.data import data_dir - -DATA_FILE = data_dir / 'currencies.json' +from searx.data.currencies import CurrenciesDB set_loggers(wikidata, 'wikidata') locales_initialize() @@ -149,7 +147,7 @@ def main(): if len(db['names'][name]) == 1: db['names'][name] = db['names'][name][0] - with DATA_FILE.open('w', encoding='utf8') as f: + with CurrenciesDB.json_file.open('w', encoding='utf8') as f: json.dump(db, f, indent=4, sort_keys=True, ensure_ascii=False) diff --git a/tests/robot/test_webapp.py b/tests/robot/test_webapp.py index bca071409..353fadaa4 100644 --- a/tests/robot/test_webapp.py +++ b/tests/robot/test_webapp.py @@ -9,7 +9,7 @@ url = "http://localhost:11111/" def test_index(browser): # Visit URL browser.visit(url) - assert browser.is_text_present('searxng') + assert browser.is_text_present('SearXNG') def test_404(browser): @@ -20,7 +20,7 @@ def test_404(browser): def test_about(browser): browser.visit(url) - browser.links.find_by_text('searxng').click() + browser.links.find_by_text('SearXNG').click() assert browser.is_text_present('Why use it?') diff --git a/utils/lib.sh b/utils/lib.sh index d3d515c0a..1ef273535 100755 --- a/utils/lib.sh +++ b/utils/lib.sh @@ -1276,7 +1276,7 @@ uWSGI_distro_setup() { # Fedora runs uWSGI in emperor-tyrant mode: in Tyrant mode the # Emperor will run the vassal using the UID/GID of the vassal # configuration file [1] (user and group of the app .ini file). - # There are some quirks abbout additional POSIX groups in uWSGI + # There are some quirks about additional POSIX groups in uWSGI # 2.0.x, read at least: https://github.com/unbit/uwsgi/issues/2099 uWSGI_APPS_AVAILABLE="${uWSGI_SETUP}/apps-available" uWSGI_APPS_ENABLED="${uWSGI_SETUP}.d" diff --git a/utils/lib_sxng_container.sh b/utils/lib_sxng_container.sh index 6e29a3809..fd0d072e2 100644 --- a/utils/lib_sxng_container.sh +++ b/utils/lib_sxng_container.sh @@ -114,7 +114,6 @@ container.build() { # shellcheck disable=SC2086 "$container_engine" $params_build_builder \ --build-arg="TIMESTAMP_SETTINGS=$(git log -1 --format="%cd" --date=unix -- ./searx/settings.yml)" \ - --build-arg="TIMESTAMP_UWSGI=$(git log -1 --format="%cd" --date=unix -- ./container/uwsgi.ini)" \ --tag="localhost/$CONTAINER_IMAGE_ORGANIZATION/$CONTAINER_IMAGE_NAME:builder" \ --file="./container/$dockerfile" \ . @@ -122,6 +121,8 @@ container.build() { # shellcheck disable=SC2086 "$container_engine" $params_build \ + --build-arg="TIMESTAMP_SETTINGS=$(git log -1 --format="%cd" --date=unix -- ./searx/settings.yml)" \ + --build-arg="TIMESTAMP_UWSGI=$(git log -1 --format="%cd" --date=unix -- ./container/config/uwsgi.ini)" \ --build-arg="GIT_URL=$GIT_URL" \ --build-arg="SEARXNG_GIT_VERSION=$VERSION_STRING" \ --build-arg="LABEL_DATE=$(date -u +%Y-%m-%dT%H:%M:%SZ)" \