Showing preview only (675K chars total). Download the full file or copy to clipboard to get everything.
Repository: nextcloud/fulltextsearch
Branch: master
Commit: b85957266c34
Files: 325
Total size: 595.6 KB
Directory structure:
gitextract_io1g15ui/
├── .github/
│ └── workflows/
│ ├── appstore-build-publish.yml
│ ├── pr-feedback.yml
│ └── reuse.yml
├── .gitignore
├── .scrutinizer.yml
├── .tx/
│ └── config
├── AUTHORS.md
├── CHANGELOG.md
├── LICENSE
├── LICENSES/
│ ├── AGPL-3.0-or-later.txt
│ ├── Apache-2.0.txt
│ ├── CC0-1.0.txt
│ └── MIT.txt
├── Makefile
├── README.md
├── REUSE.toml
├── appinfo/
│ ├── info.xml
│ └── routes.php
├── composer.json
├── css/
│ ├── admin.css
│ ├── fulltextsearch.css
│ └── navigate.css
├── docs/
│ ├── api/
│ │ └── collections.md
│ ├── commands.md
│ ├── configuration.md
│ ├── index.md
│ └── installation.md
├── js/
│ ├── admin.elements.js
│ ├── admin.js
│ ├── admin.settings.js
│ ├── fulltextsearch.v1.api.js
│ ├── fulltextsearch.v1.js
│ ├── fulltextsearch.v1.navigation.js
│ ├── fulltextsearch.v1.result.js
│ ├── fulltextsearch.v1.searchbox.js
│ ├── fulltextsearch.v1.settings.js
│ └── navigate.js
├── l10n/
│ ├── .gitkeep
│ ├── af.js
│ ├── af.json
│ ├── an.js
│ ├── an.json
│ ├── ar.js
│ ├── ar.json
│ ├── ast.js
│ ├── ast.json
│ ├── az.js
│ ├── az.json
│ ├── be.js
│ ├── be.json
│ ├── bg.js
│ ├── bg.json
│ ├── bn_BD.js
│ ├── bn_BD.json
│ ├── br.js
│ ├── br.json
│ ├── bs.js
│ ├── bs.json
│ ├── ca.js
│ ├── ca.json
│ ├── cs.js
│ ├── cs.json
│ ├── cy_GB.js
│ ├── cy_GB.json
│ ├── da.js
│ ├── da.json
│ ├── de.js
│ ├── de.json
│ ├── de_DE.js
│ ├── de_DE.json
│ ├── el.js
│ ├── el.json
│ ├── en_GB.js
│ ├── en_GB.json
│ ├── eo.js
│ ├── eo.json
│ ├── es.js
│ ├── es.json
│ ├── es_419.js
│ ├── es_419.json
│ ├── es_AR.js
│ ├── es_AR.json
│ ├── es_CL.js
│ ├── es_CL.json
│ ├── es_CO.js
│ ├── es_CO.json
│ ├── es_CR.js
│ ├── es_CR.json
│ ├── es_DO.js
│ ├── es_DO.json
│ ├── es_EC.js
│ ├── es_EC.json
│ ├── es_GT.js
│ ├── es_GT.json
│ ├── es_HN.js
│ ├── es_HN.json
│ ├── es_MX.js
│ ├── es_MX.json
│ ├── es_NI.js
│ ├── es_NI.json
│ ├── es_PA.js
│ ├── es_PA.json
│ ├── es_PE.js
│ ├── es_PE.json
│ ├── es_PR.js
│ ├── es_PR.json
│ ├── es_PY.js
│ ├── es_PY.json
│ ├── es_SV.js
│ ├── es_SV.json
│ ├── es_UY.js
│ ├── es_UY.json
│ ├── et_EE.js
│ ├── et_EE.json
│ ├── eu.js
│ ├── eu.json
│ ├── fa.js
│ ├── fa.json
│ ├── fi.js
│ ├── fi.json
│ ├── fr.js
│ ├── fr.json
│ ├── ga.js
│ ├── ga.json
│ ├── gd.js
│ ├── gd.json
│ ├── gl.js
│ ├── gl.json
│ ├── he.js
│ ├── he.json
│ ├── hr.js
│ ├── hr.json
│ ├── hu.js
│ ├── hu.json
│ ├── hy.js
│ ├── hy.json
│ ├── ia.js
│ ├── ia.json
│ ├── id.js
│ ├── id.json
│ ├── is.js
│ ├── is.json
│ ├── it.js
│ ├── it.json
│ ├── ja.js
│ ├── ja.json
│ ├── ka.js
│ ├── ka.json
│ ├── ka_GE.js
│ ├── ka_GE.json
│ ├── kab.js
│ ├── kab.json
│ ├── km.js
│ ├── km.json
│ ├── kn.js
│ ├── kn.json
│ ├── ko.js
│ ├── ko.json
│ ├── lb.js
│ ├── lb.json
│ ├── lo.js
│ ├── lo.json
│ ├── lt_LT.js
│ ├── lt_LT.json
│ ├── lv.js
│ ├── lv.json
│ ├── mk.js
│ ├── mk.json
│ ├── mn.js
│ ├── mn.json
│ ├── ms_MY.js
│ ├── ms_MY.json
│ ├── nb.js
│ ├── nb.json
│ ├── nl.js
│ ├── nl.json
│ ├── nn_NO.js
│ ├── nn_NO.json
│ ├── oc.js
│ ├── oc.json
│ ├── pl.js
│ ├── pl.json
│ ├── pt_BR.js
│ ├── pt_BR.json
│ ├── pt_PT.js
│ ├── pt_PT.json
│ ├── ro.js
│ ├── ro.json
│ ├── ru.js
│ ├── ru.json
│ ├── sc.js
│ ├── sc.json
│ ├── si.js
│ ├── si.json
│ ├── sk.js
│ ├── sk.json
│ ├── sl.js
│ ├── sl.json
│ ├── sq.js
│ ├── sq.json
│ ├── sr.js
│ ├── sr.json
│ ├── sr@latin.js
│ ├── sr@latin.json
│ ├── sv.js
│ ├── sv.json
│ ├── sw.js
│ ├── sw.json
│ ├── ta.js
│ ├── ta.json
│ ├── th.js
│ ├── th.json
│ ├── tk.js
│ ├── tk.json
│ ├── tr.js
│ ├── tr.json
│ ├── ug.js
│ ├── ug.json
│ ├── uk.js
│ ├── uk.json
│ ├── ur_PK.js
│ ├── ur_PK.json
│ ├── uz.js
│ ├── uz.json
│ ├── vi.js
│ ├── vi.json
│ ├── zh_CN.js
│ ├── zh_CN.json
│ ├── zh_HK.js
│ ├── zh_HK.json
│ ├── zh_TW.js
│ └── zh_TW.json
├── lib/
│ ├── ACommandBase.php
│ ├── AppInfo/
│ │ └── Application.php
│ ├── Capabilities.php
│ ├── Command/
│ │ ├── Check.php
│ │ ├── CollectionDelete.php
│ │ ├── CollectionInit.php
│ │ ├── CollectionLink.php
│ │ ├── CollectionList.php
│ │ ├── Configure.php
│ │ ├── DocumentIndex.php
│ │ ├── DocumentPlatform.php
│ │ ├── DocumentProvider.php
│ │ ├── DocumentStatus.php
│ │ ├── Index.php
│ │ ├── Live.php
│ │ ├── Reset.php
│ │ ├── Search.php
│ │ ├── Stop.php
│ │ └── Test.php
│ ├── ConfigLexicon.php
│ ├── Controller/
│ │ ├── ApiController.php
│ │ ├── CollectionController.php
│ │ ├── NavigationController.php
│ │ ├── SettingsController.php
│ │ └── TemplatesController.php
│ ├── Cron/
│ │ └── Index.php
│ ├── Db/
│ │ ├── CoreRequestBuilder.php
│ │ ├── IndexesRequest.php
│ │ ├── IndexesRequestBuilder.php
│ │ ├── TickRequest.php
│ │ └── TickRequestBuilder.php
│ ├── Exceptions/
│ │ ├── CollectionArgumentException.php
│ │ ├── DatabaseException.php
│ │ ├── EmptySearchException.php
│ │ ├── IndexDoesNotExistException.php
│ │ ├── InterruptException.php
│ │ ├── MissingDocumentException.php
│ │ ├── NoResultException.php
│ │ ├── NotIndexableDocumentException.php
│ │ ├── PlatformDoesNotExistException.php
│ │ ├── PlatformIsNotCompatibleException.php
│ │ ├── PlatformMustBeSingleException.php
│ │ ├── PlatformNotDefinedException.php
│ │ ├── PlatformNotSelectedException.php
│ │ ├── PlatformTemporaryException.php
│ │ ├── ProviderDoesNotExistException.php
│ │ ├── ProviderIsNotCompatibleException.php
│ │ ├── ProviderIsNotUniqueException.php
│ │ ├── ProviderOptionsDoesNotExistException.php
│ │ ├── RunnerAlreadyUpException.php
│ │ ├── TickDoesNotExistException.php
│ │ └── TickIsNotAliveException.php
│ ├── Migration/
│ │ ├── Version2000Date20201208130255.php
│ │ ├── Version23001Date20220408140253.php
│ │ ├── Version23001Date20220505144434.php
│ │ ├── Version2400Date202201301329.php
│ │ ├── Version2401Date202301170001.php
│ │ ├── Version2801Date202309200001.php
│ │ └── Version31001Date20250210105322.php
│ ├── Model/
│ │ ├── Index.php
│ │ ├── IndexOptions.php
│ │ ├── PlatformWrapper.php
│ │ ├── ProviderIndexes.php
│ │ ├── ProviderWrapper.php
│ │ ├── Runner.php
│ │ ├── SearchRequest.php
│ │ ├── SearchResult.php
│ │ └── Tick.php
│ ├── Provider/
│ │ └── TestProvider.php
│ ├── Search/
│ │ ├── UnifiedSearchProvider.php
│ │ └── UnifiedSearchResult.php
│ ├── Service/
│ │ ├── CliService.php
│ │ ├── CollectionService.php
│ │ ├── ConfigService.php
│ │ ├── IndexService.php
│ │ ├── PlatformService.php
│ │ ├── ProviderService.php
│ │ ├── RunningService.php
│ │ ├── SearchService.php
│ │ ├── SettingsService.php
│ │ └── TestService.php
│ ├── Settings/
│ │ ├── Admin.php
│ │ └── AdminSection.php
│ └── Tools/
│ ├── Exceptions/
│ │ ├── ArrayNotFoundException.php
│ │ ├── ItemNotFoundException.php
│ │ ├── MalformedArrayException.php
│ │ └── UnknownTypeException.php
│ └── Traits/
│ └── TArrayTools.php
├── mkdocs.yml
├── screenshots/
│ └── draw.io/
│ ├── Index.xml
│ └── Search.xml
└── templates/
├── navigate.php
└── settings.admin.php
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/workflows/appstore-build-publish.yml
================================================
# This workflow is provided via the organization template repository
#
# https://github.com/nextcloud/.github
# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization
#
# SPDX-FileCopyrightText: 2021-2024 Nextcloud GmbH and Nextcloud contributors
# SPDX-License-Identifier: MIT
name: Build and publish app release
on:
release:
types: [published]
jobs:
build_and_publish:
runs-on: ubuntu-latest
# Only allowed to be run on nextcloud-releases repositories
if: ${{ github.repository_owner == 'nextcloud-releases' }}
steps:
- name: Check actor permission
uses: skjnldsv/check-actor-permission@69e92a3c4711150929bca9fcf34448c5bf5526e7 # v3.0
with:
require: write
- name: Set app env
run: |
# Split and keep last
echo "APP_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV
echo "APP_VERSION=${GITHUB_REF##*/}" >> $GITHUB_ENV
- name: Checkout
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
with:
path: ${{ env.APP_NAME }}
- name: Get appinfo data
id: appinfo
uses: skjnldsv/xpath-action@7e6a7c379d0e9abc8acaef43df403ab4fc4f770c # master
with:
filename: ${{ env.APP_NAME }}/appinfo/info.xml
expression: "//info//dependencies//nextcloud/@min-version"
- name: Read package.json node and npm engines version
uses: skjnldsv/read-package-engines-version-actions@06d6baf7d8f41934ab630e97d9e6c0bc9c9ac5e4 # v3
id: versions
# Continue if no package.json
continue-on-error: true
with:
path: ${{ env.APP_NAME }}
fallbackNode: '^20'
fallbackNpm: '^10'
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
# Skip if no package.json
if: ${{ steps.versions.outputs.nodeVersion }}
uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
with:
node-version: ${{ steps.versions.outputs.nodeVersion }}
- name: Set up npm ${{ steps.versions.outputs.npmVersion }}
# Skip if no package.json
if: ${{ steps.versions.outputs.npmVersion }}
run: npm i -g 'npm@${{ steps.versions.outputs.npmVersion }}'
- name: Get php version
id: php-versions
uses: icewind1991/nextcloud-version-matrix@58becf3b4bb6dc6cef677b15e2fd8e7d48c0908f # v1.3.1
with:
filename: ${{ env.APP_NAME }}/appinfo/info.xml
- name: Set up php ${{ steps.php-versions.outputs.php-min }}
uses: shivammathur/setup-php@c541c155eee45413f5b09a52248675b1a2575231 # v2.31.1
with:
php-version: ${{ steps.php-versions.outputs.php-min }}
coverage: none
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Check composer.json
id: check_composer
uses: andstor/file-existence-action@076e0072799f4942c8bc574a82233e1e4d13e9d6 # v3.0.0
with:
files: "${{ env.APP_NAME }}/composer.json"
- name: Install composer dependencies
if: steps.check_composer.outputs.files_exists == 'true'
run: |
cd ${{ env.APP_NAME }}
composer install --no-dev
- name: Build ${{ env.APP_NAME }}
# Skip if no package.json
if: ${{ steps.versions.outputs.nodeVersion }}
env:
CYPRESS_INSTALL_BINARY: 0
run: |
cd ${{ env.APP_NAME }}
npm ci
npm run build --if-present
- name: Check Krankerl config
id: krankerl
uses: andstor/file-existence-action@076e0072799f4942c8bc574a82233e1e4d13e9d6 # v3.0.0
with:
files: ${{ env.APP_NAME }}/krankerl.toml
- name: Install Krankerl
if: steps.krankerl.outputs.files_exists == 'true'
run: |
wget https://github.com/ChristophWurst/krankerl/releases/download/v0.14.0/krankerl_0.14.0_amd64.deb
sudo dpkg -i krankerl_0.14.0_amd64.deb
- name: Package ${{ env.APP_NAME }} ${{ env.APP_VERSION }} with krankerl
if: steps.krankerl.outputs.files_exists == 'true'
run: |
cd ${{ env.APP_NAME }}
krankerl package
- name: Package ${{ env.APP_NAME }} ${{ env.APP_VERSION }} with makefile
if: steps.krankerl.outputs.files_exists != 'true'
run: |
cd ${{ env.APP_NAME }}
make appstore
- name: Checkout server ${{ fromJSON(steps.appinfo.outputs.result).nextcloud.min-version }}
continue-on-error: true
id: server-checkout
run: |
NCVERSION='${{ fromJSON(steps.appinfo.outputs.result).nextcloud.min-version }}'
wget --quiet https://download.nextcloud.com/server/releases/latest-$NCVERSION.zip
unzip latest-$NCVERSION.zip
- name: Checkout server master fallback
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
if: ${{ steps.server-checkout.outcome != 'success' }}
with:
submodules: true
repository: nextcloud/server
path: nextcloud
- name: Sign app
run: |
# Extracting release
cd ${{ env.APP_NAME }}/build/artifacts
tar -xvf ${{ env.APP_NAME }}.tar.gz
cd ../../../
# Setting up keys
echo '${{ secrets.APP_PRIVATE_KEY }}' > ${{ env.APP_NAME }}.key
wget --quiet "https://github.com/nextcloud/app-certificate-requests/raw/master/${{ env.APP_NAME }}/${{ env.APP_NAME }}.crt"
# Signing
php nextcloud/occ integrity:sign-app --privateKey=../${{ env.APP_NAME }}.key --certificate=../${{ env.APP_NAME }}.crt --path=../${{ env.APP_NAME }}/build/artifacts/${{ env.APP_NAME }}
# Rebuilding archive
cd ${{ env.APP_NAME }}/build/artifacts
tar -zcvf ${{ env.APP_NAME }}.tar.gz ${{ env.APP_NAME }}
- name: Attach tarball to github release
uses: svenstaro/upload-release-action@04733e069f2d7f7f0b4aebc4fbdbce8613b03ccd # v2
id: attach_to_release
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: ${{ env.APP_NAME }}/build/artifacts/${{ env.APP_NAME }}.tar.gz
asset_name: ${{ env.APP_NAME }}-${{ env.APP_VERSION }}.tar.gz
tag: ${{ github.ref }}
overwrite: true
- name: Upload app to Nextcloud appstore
uses: nextcloud-releases/nextcloud-appstore-push-action@a011fe619bcf6e77ddebc96f9908e1af4071b9c1 # v1
with:
app_name: ${{ env.APP_NAME }}
appstore_token: ${{ secrets.APPSTORE_TOKEN }}
download_url: ${{ steps.attach_to_release.outputs.browser_download_url }}
app_private_key: ${{ secrets.APP_PRIVATE_KEY }}
================================================
FILE: .github/workflows/pr-feedback.yml
================================================
# This workflow is provided via the organization template repository
#
# https://github.com/nextcloud/.github
# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization
# SPDX-FileCopyrightText: 2023-2024 Nextcloud GmbH and Nextcloud contributors
# SPDX-FileCopyrightText: 2023 Marcel Klehr <mklehr@gmx.net>
# SPDX-FileCopyrightText: 2023 Joas Schilling <213943+nickvergessen@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 Daniel Kesselberg <mail@danielkesselberg.de>
# SPDX-FileCopyrightText: 2023 Florian Steffens <florian.steffens@nextcloud.com>
# SPDX-License-Identifier: MIT
name: 'Ask for feedback on PRs'
on:
schedule:
- cron: '30 1 * * *'
permissions:
contents: read
pull-requests: write
jobs:
pr-feedback:
if: ${{ github.repository_owner == 'nextcloud' }}
runs-on: ubuntu-latest
steps:
- name: The get-github-handles-from-website action
uses: marcelklehr/get-github-handles-from-website-action@06b2239db0a48fe1484ba0bfd966a3ab81a08308 # v1.0.1
id: scrape
with:
website: 'https://nextcloud.com/team/'
- name: Get blocklist
id: blocklist
run: |
blocklist=$(curl https://raw.githubusercontent.com/nextcloud/.github/master/non-community-usernames.txt | paste -s -d, -)
echo "blocklist=$blocklist" >> "$GITHUB_OUTPUT"
- uses: marcelklehr/pr-feedback-action@1883b38a033fb16f576875e0cf45f98b857655c4
with:
feedback-message: |
Hello there,
Thank you so much for taking the time and effort to create a pull request to our Nextcloud project.
We hope that the review process is going smooth and is helpful for you. We want to ensure your pull request is reviewed to your satisfaction. If you have a moment, our community management team would very much appreciate your feedback on your experience with this PR review process.
Your feedback is valuable to us as we continuously strive to improve our community developer experience. Please take a moment to complete our short survey by clicking on the following link: https://cloud.nextcloud.com/apps/forms/s/i9Ago4EQRZ7TWxjfmeEpPkf6
Thank you for contributing to Nextcloud and we hope to hear from you soon!
(If you believe you should not receive this message, you can add yourself to the [blocklist](https://github.com/nextcloud/.github/blob/master/non-community-usernames.txt).)
days-before-feedback: 14
start-date: '2024-04-30'
exempt-authors: '${{ steps.blocklist.outputs.blocklist }},${{ steps.scrape.outputs.users }}'
exempt-bots: true
================================================
FILE: .github/workflows/reuse.yml
================================================
# This workflow is provided via the organization template repository
#
# https://github.com/nextcloud/.github
# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization
# SPDX-FileCopyrightText: 2022 Free Software Foundation Europe e.V. <https://fsfe.org>
#
# SPDX-License-Identifier: CC0-1.0
name: REUSE Compliance Check
on: [pull_request]
permissions:
contents: read
jobs:
reuse-compliance-check:
runs-on: ubuntu-latest-low
steps:
- name: Checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
- name: REUSE Compliance Check
uses: fsfe/reuse-action@bb774aa972c2a89ff34781233d275075cbddf542 # v5.0.0
================================================
FILE: .gitignore
================================================
# SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors
# SPDX-License-Identifier: AGPL-3.0-or-later
\.idea/
build/
vendor/
================================================
FILE: .scrutinizer.yml
================================================
# SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors
# SPDX-License-Identifier: AGPL-3.0-or-later
imports:
- php
- javascript
filter:
excluded_paths:
- 'appinfo/application.php'
- 'appinfo/info.xml'
- 'l10n/*'
- 'vendor/*'
- 'js/vendor/*'
- 'templates/*'
- 'css/*'
- 'img/*'
- 'tests/*'
- 'build/*'
- 'documentation/*'
tools:
sensiolabs_security_checker: true
php_sim: true
php_pdepend: true
php_analyzer: true
checks:
php:
line_length:
max_length: '100'
verify_access_scope_valid: true
require_scope_for_methods: true
no_underscore_prefix_in_methods: true
missing_arguments: true
method_calls_on_non_object: true
deprecated_code_usage: true
no_eval: true
parameter_doc_comments: true
return_doc_comments: true
fix_doc_comments: true
more_specific_types_in_doc_comments: true
code_rating: true
duplication: true
variable_existence: true
useless_calls: true
use_statement_alias_conflict: true
unused_variables: true
unused_properties: true
unused_parameters: true
unused_methods: true
unreachable_code: true
sql_injection_vulnerabilities: true
security_vulnerabilities: true
precedence_mistakes: true
precedence_in_conditions: true
parameter_non_unique: true
no_property_on_interface: true
no_non_implemented_abstract_methods: true
closure_use_not_conflicting: true
closure_use_modifiable: true
avoid_useless_overridden_methods: true
avoid_conflicting_incrementers: true
assignment_of_null_return: true
php5_style_constructor: true
one_class_per_file: true
require_php_tag_first: true
uppercase_constants: true
require_braces_around_control_structures: true
psr2_switch_declaration: true
psr2_control_structure_declaration: true
properties_in_camelcaps: true
parameters_in_camelcaps: true
optional_parameters_at_the_end: true
no_underscore_prefix_in_properties: true
no_space_inside_cast_operator: true
no_space_before_semicolon: true
no_short_open_tag: true
no_goto: true
lowercase_php_keywords: true
lowercase_basic_constants: true
function_in_camel_caps: true
classes_in_camel_caps: true
avoid_space_indentation: true
overriding_private_members: true
no_unnecessary_function_call_in_for_loop: true
simplify_boolean_return: true
javascript:
wrap_iife: true
no_process_exit: true
no_process_env: true
no_extra_semi: true
no_extra_bind: true
no_eval: true
no_else_return: true
dot_notation: true
camelcase: true
wrap_regex: true
valid_typeof: true
no_wrap_func: true
no_use_before_define: true
no_unreachable: true
no_undefined: true
no_trailing_spaces: true
no_reserved_keys: true
no_redeclare: true
no_obj_calls: true
no_loop_func: true
no_lonely_if: true
no_lone_blocks: true
no_inner_declarations: true
no_floating_decimal: true
no_extra_boolean_cast: true
no_empty: true
no_dupe_keys: true
coding_style:
php:
indentation:
general:
use_tabs: true
size: 4
spaces:
other:
after_type_cast: false
braces:
classes_functions:
class: end-of-line
================================================
FILE: .tx/config
================================================
[main]
host = https://www.transifex.com
lang_map = ja_JP: ja, bg_BG: bg, cs_CZ: cs, fi_FI: fi, hu_HU: hu, nb_NO: nb, sk_SK: sk, th_TH: th
[o:nextcloud:p:nextcloud:r:fulltextsearch]
file_filter = translationfiles/<lang>/fulltextsearch.po
source_file = translationfiles/templates/fulltextsearch.pot
source_lang = en
type = PO
================================================
FILE: AUTHORS.md
================================================
<!--
- SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
- SPDX-License-Identifier: AGPL-3.0-or-later
-->
# Authors
- Allan Nordhøy <epost@anotheragency.no>
- Andy Scherzinger <info@andy-scherzinger.de>
- aronovgj <aronovgj@gmx.net>
- Christian Ingenhaag <chrisingenhaag@users.noreply.github.com>
- comradekingu <epost@anotheragency.no>
- daita <maxence@pontapreta.net>
- Daniel Hansson <daniel@techandme.se>
- Ferdinand Thiessen <opensource@fthiessen.de>
- Jakub Onderka <j.onderka@nukib.cz>
- Jan Vonde <mail@jan-von.de>
- Joas Schilling <coding@schilljs.com>
- John Molakvoæ <skjnldsv@protonmail.com>
- Julius Knorr <jus@bitgrid.net>
- Jürgen Kellerer <juergen@k123.eu>
- Marius Blüm <marius@lineone.io>
- Maxence Lange <maxence@artificial-owl.com>
- Morris Jobke <hey@morrisjobke.de>
- Patrick Robertson <robertson.patrick@gmail.com>
- rakekniven <2069590+rakekniven@users.noreply.github.com>
- Robin Appelman <robin@icewind.nl>
- Robin Windey <ro.windey@gmail.com>
- SrzStephen <stephen@motts.id.au>
- Valdnet <47037905+Valdnet@users.noreply.github.com>
- Vincent Petry <vincent@nextcloud.com>
================================================
FILE: CHANGELOG.md
================================================
<!--
- SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
- SPDX-License-Identifier: AGPL-3.0-or-later
-->
# Changelog
### 32.0.0
- compat nc32
- manage 'since' search filter
- manage 'until' search filter
- search via occ returned as JSON
- migration to config lexicon
- cleaning some code
- reconnect to database on lost connection
### 31.0.0
- improved index on live index
- improved code logic on index update
- reset collection endpoint
- compat nc31
### 30.0.0
- compat nc30
### 29.0.0
- compat nc29
### 28.0.0
- compat nc28
### 27.0.1
- fix a database migration issue
### 27.0.0
- compat nc27
### 26.0.0
- compat nc26
### 25.0.0
- compat nc25
### 24.0.0
- collections
### 23.0.0
- better load of the libs
### 20.0.1
- compat nc21
### 20.0.0
- database migration
- upgrade deps
### 2.0.0
- compat nc20
### 1.4.2
- compat nc19
- error logs on missing Provider Options
### 1.4.1
- adding ./occ fulltextsearch:document:status
- ability to set the index status to IGNORE
### 1.4.0 (nc18)
- compat nc18
### 1.3.6
- some compat nc17
### 1.3.5
- ignore live index on cron
- live can be run as a service
- simple queries
### 1.3.4
- some improvement in the index comparison
### 1.3.2
- adding a key to the list of indexes for old version of NC
- no crash on missing provider
- --no-readline can be passed with empty options
### 1.3.1
- issue with some providers.
### 1.3.0
- Chunks (NC 16)
### 1.2.3
- fixing issue with tests.
- adding IndexService->createIndex() (NC 15.0.1)
### 1.2.2
- cleaning
### 1.2.1
- initiating some vars
- adding the and: option
### 1.2.0 (NC15)
- Compat NC15 + full php7.
- breaking index on Ctrl-C.
- non interactive mode available during :index and :live
### 1.0.3
- improvement: display process advancement during compareWithCurrentIndex
### 1.0.2
- improvement: long process while indexing should not timeout (Force Quit).
- misc: removing compat with NC12.
### 1.0.1
improvement: some rework on the process wrapper.
### 1.0.0
First stable release
### 0.99.1 Release Candidate 2
- bugfix: crashing issue during :live
- database: documentId is now a string
- improvement: tags/metatags/subtags
- improvement: no more chunks, documents are indexed one by one.
- improvement: the :index command allow a navigation between results.
### 0.99.0 Release Candidate
Command Line Interface:
- The indexing process is now embedded in a new graphical wrapper, including an interactive interface for both the fulltextsearch:index and fulltextsearch:live commands.
- Errors are now displayed during index/live execution with navigation. Errors can be managed and deleted while indexing.
- new command: ./occ fulltextsearch:test to test the indexing and search platform.
- new command: ./occ fulltextsearch:document:provider to get info about a document from a provider.
- new command: ./occ fulltextsearch:document:platform to get info about a document from the search platform.
- ./occ fulltextsearch:reset can now be done for a specific provider only.
- ./occ fulltextsearch:index now accept users, providers, errors, chunk and paused options.
- fixing some display glitch.
### 0.8.2
- debug, testing tools
- get document
- multi-host
### 0.7.0
- navigation app to search within all content from your providers
- better navigation
- content (index and search) can be splited in Parts
- rework on the exchange between platform and providers
- bugfixes
### 0.6.1
- bugfix: removing reset of the index on migration
- bugfix: do not retrieve access on ignored document
### 0.6.0
- Nextcloud integration
- Options panel
- bugfixes
### 0.5.1
- bugfixes
### 0.5.0
- managing errors from platform
- issues with JS
### v0.4.0
- fullnextsearch -> fulltextsearch
- Pagination
- settings panel
### v0.3.2
- UI: remove personal settings
- DB: fill err field on new indexes
### v0.3.1
- bugfixes.
### BETA v0.3.0
- First Beta
================================================
FILE: LICENSE
================================================
GNU AFFERO GENERAL PUBLIC LICENSE
Version 3, 19 November 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU Affero General Public License is a free, copyleft license for
software and other kinds of works, specifically designed to ensure
cooperation with the community in the case of network server software.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
our General Public Licenses are intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
Developers that use our General Public Licenses protect your rights
with two steps: (1) assert copyright on the software, and (2) offer
you this License which gives you legal permission to copy, distribute
and/or modify the software.
A secondary benefit of defending all users' freedom is that
improvements made in alternate versions of the program, if they
receive widespread use, become available for other developers to
incorporate. Many developers of free software are heartened and
encouraged by the resulting cooperation. However, in the case of
software used on network servers, this result may fail to come about.
The GNU General Public License permits making a modified version and
letting the public access it on a server without ever releasing its
source code to the public.
The GNU Affero General Public License is designed specifically to
ensure that, in such cases, the modified source code becomes available
to the community. It requires the operator of a network server to
provide the source code of the modified version running there to the
users of that server. Therefore, public use of a modified version, on
a publicly accessible server, gives the public access to the source
code of the modified version.
An older license, called the Affero General Public License and
published by Affero, was designed to accomplish similar goals. This is
a different license, not a version of the Affero GPL, but Affero has
released a new version of the Affero GPL which permits relicensing under
this license.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU Affero General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Remote Network Interaction; Use with the GNU General Public License.
Notwithstanding any other provision of this License, if you modify the
Program, your modified version must prominently offer all users
interacting with it remotely through a computer network (if your version
supports such interaction) an opportunity to receive the Corresponding
Source of your version by providing access to the Corresponding Source
from a network server at no charge, through some standard or customary
means of facilitating copying of software. This Corresponding Source
shall include the Corresponding Source for any work covered by version 3
of the GNU General Public License that is incorporated pursuant to the
following paragraph.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the work with which it is combined will remain governed by version
3 of the GNU General Public License.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU Affero General Public License from time to time. Such new versions
will be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU Affero General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU Affero General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU Affero General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
================================================
FILE: LICENSES/AGPL-3.0-or-later.txt
================================================
GNU AFFERO GENERAL PUBLIC LICENSE
Version 3, 19 November 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
Preamble
The GNU Affero General Public License is a free, copyleft license for software and other kinds of works, specifically designed to ensure cooperation with the community in the case of network server software.
The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, our General Public Licenses are intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users.
When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.
Developers that use our General Public Licenses protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License which gives you legal permission to copy, distribute and/or modify the software.
A secondary benefit of defending all users' freedom is that improvements made in alternate versions of the program, if they receive widespread use, become available for other developers to incorporate. Many developers of free software are heartened and encouraged by the resulting cooperation. However, in the case of software used on network servers, this result may fail to come about. The GNU General Public License permits making a modified version and letting the public access it on a server without ever releasing its source code to the public.
The GNU Affero General Public License is designed specifically to ensure that, in such cases, the modified source code becomes available to the community. It requires the operator of a network server to provide the source code of the modified version running there to the users of that server. Therefore, public use of a modified version, on a publicly accessible server, gives the public access to the source code of the modified version.
An older license, called the Affero General Public License and published by Affero, was designed to accomplish similar goals. This is a different license, not a version of the Affero GPL, but Affero has released a new version of the Affero GPL which permits relicensing under this license.
The precise terms and conditions for copying, distribution and modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU Affero General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based on the Program.
To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work.
A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.
The Corresponding Source for a work in source code form is that same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.
When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified it, and giving a relevant date.
b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices".
c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.
A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:
a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.
d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.
A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.
"Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.
If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).
The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or authors of the material; or
e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.
All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).
However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.
Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.
If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.
A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.
13. Remote Network Interaction; Use with the GNU General Public License.
Notwithstanding any other provision of this License, if you modify the Program, your modified version must prominently offer all users interacting with it remotely through a computer network (if your version supports such interaction) an opportunity to receive the Corresponding Source of your version by providing access to the Corresponding Source from a network server at no charge, through some standard or customary means of facilitating copying of software. This Corresponding Source shall include the Corresponding Source for any work covered by version 3 of the GNU General Public License that is incorporated pursuant to the following paragraph.
Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the work with which it is combined will remain governed by version 3 of the GNU General Public License.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of the GNU Affero General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU Affero General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU Affero General Public License, you may choose any version ever published by the Free Software Foundation.
If the Program specifies that a proxy can decide which future versions of the GNU Affero General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program.
Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If your software can interact with users remotely through a computer network, you should also make sure that it provides a way for users to get its source. For example, if your program is a web application, its interface could display a "Source" link that leads users to an archive of the code. There are many ways you could offer source, and different solutions will be better for different programs; see section 13 for the specific requirements.
You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU AGPL, see <http://www.gnu.org/licenses/>.
================================================
FILE: LICENSES/Apache-2.0.txt
================================================
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
(a) You must give any other recipients of the Work or Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
================================================
FILE: LICENSES/CC0-1.0.txt
================================================
Creative Commons Legal Code
CC0 1.0 Universal
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
HEREUNDER.
Statement of Purpose
The laws of most jurisdictions throughout the world automatically confer
exclusive Copyright and Related Rights (defined below) upon the creator
and subsequent owner(s) (each and all, an "owner") of an original work of
authorship and/or a database (each, a "Work").
Certain owners wish to permanently relinquish those rights to a Work for
the purpose of contributing to a commons of creative, cultural and
scientific works ("Commons") that the public can reliably and without fear
of later claims of infringement build upon, modify, incorporate in other
works, reuse and redistribute as freely as possible in any form whatsoever
and for any purposes, including without limitation commercial purposes.
These owners may contribute to the Commons to promote the ideal of a free
culture and the further production of creative, cultural and scientific
works, or to gain reputation or greater distribution for their Work in
part through the use and efforts of others.
For these and/or other purposes and motivations, and without any
expectation of additional consideration or compensation, the person
associating CC0 with a Work (the "Affirmer"), to the extent that he or she
is an owner of Copyright and Related Rights in the Work, voluntarily
elects to apply CC0 to the Work and publicly distribute the Work under its
terms, with knowledge of his or her Copyright and Related Rights in the
Work and the meaning and intended legal effect of CC0 on those rights.
1. Copyright and Related Rights. A Work made available under CC0 may be
protected by copyright and related or neighboring rights ("Copyright and
Related Rights"). Copyright and Related Rights include, but are not
limited to, the following:
i. the right to reproduce, adapt, distribute, perform, display,
communicate, and translate a Work;
ii. moral rights retained by the original author(s) and/or performer(s);
iii. publicity and privacy rights pertaining to a person's image or
likeness depicted in a Work;
iv. rights protecting against unfair competition in regards to a Work,
subject to the limitations in paragraph 4(a), below;
v. rights protecting the extraction, dissemination, use and reuse of data
in a Work;
vi. database rights (such as those arising under Directive 96/9/EC of the
European Parliament and of the Council of 11 March 1996 on the legal
protection of databases, and under any national implementation
thereof, including any amended or successor version of such
directive); and
vii. other similar, equivalent or corresponding rights throughout the
world based on applicable law or treaty, and any national
implementations thereof.
2. Waiver. To the greatest extent permitted by, but not in contravention
of, applicable law, Affirmer hereby overtly, fully, permanently,
irrevocably and unconditionally waives, abandons, and surrenders all of
Affirmer's Copyright and Related Rights and associated claims and causes
of action, whether now known or unknown (including existing as well as
future claims and causes of action), in the Work (i) in all territories
worldwide, (ii) for the maximum duration provided by applicable law or
treaty (including future time extensions), (iii) in any current or future
medium and for any number of copies, and (iv) for any purpose whatsoever,
including without limitation commercial, advertising or promotional
purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
member of the public at large and to the detriment of Affirmer's heirs and
successors, fully intending that such Waiver shall not be subject to
revocation, rescission, cancellation, termination, or any other legal or
equitable action to disrupt the quiet enjoyment of the Work by the public
as contemplated by Affirmer's express Statement of Purpose.
3. Public License Fallback. Should any part of the Waiver for any reason
be judged legally invalid or ineffective under applicable law, then the
Waiver shall be preserved to the maximum extent permitted taking into
account Affirmer's express Statement of Purpose. In addition, to the
extent the Waiver is so judged Affirmer hereby grants to each affected
person a royalty-free, non transferable, non sublicensable, non exclusive,
irrevocable and unconditional license to exercise Affirmer's Copyright and
Related Rights in the Work (i) in all territories worldwide, (ii) for the
maximum duration provided by applicable law or treaty (including future
time extensions), (iii) in any current or future medium and for any number
of copies, and (iv) for any purpose whatsoever, including without
limitation commercial, advertising or promotional purposes (the
"License"). The License shall be deemed effective as of the date CC0 was
applied by Affirmer to the Work. Should any part of the License for any
reason be judged legally invalid or ineffective under applicable law, such
partial invalidity or ineffectiveness shall not invalidate the remainder
of the License, and in such case Affirmer hereby affirms that he or she
will not (i) exercise any of his or her remaining Copyright and Related
Rights in the Work or (ii) assert any associated claims and causes of
action with respect to the Work, in either case contrary to Affirmer's
express Statement of Purpose.
4. Limitations and Disclaimers.
a. No trademark or patent rights held by Affirmer are waived, abandoned,
surrendered, licensed or otherwise affected by this document.
b. Affirmer offers the Work as-is and makes no representations or
warranties of any kind concerning the Work, express, implied,
statutory or otherwise, including without limitation warranties of
title, merchantability, fitness for a particular purpose, non
infringement, or the absence of latent or other defects, accuracy, or
the present or absence of errors, whether or not discoverable, all to
the greatest extent permissible under applicable law.
c. Affirmer disclaims responsibility for clearing rights of other persons
that may apply to the Work or any use thereof, including without
limitation any person's Copyright and Related Rights in the Work.
Further, Affirmer disclaims responsibility for obtaining any necessary
consents, permissions or other rights required for any use of the
Work.
d. Affirmer understands and acknowledges that Creative Commons is not a
party to this document and has no duty or obligation with respect to
this CC0 or use of the Work.
================================================
FILE: LICENSES/MIT.txt
================================================
MIT License
Copyright (c) <year> <copyright holders>
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
================================================
FILE: Makefile
================================================
# SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
# SPDX-License-Identifier: AGPL-3.0-or-later
app_name=FullTextSearch
build_dir=$(CURDIR)/build/artifacts
appstore_dir=$(build_dir)/appstore
source_dir=$(build_dir)/source
sign_dir=$(build_dir)/sign
package_name=$(shell echo $(app_name) | tr '[:upper:]' '[:lower:]')
cert_dir=$(HOME)/.nextcloud/certificates
github_account=nextcloud
release_account=nextcloud-releases
branch=stable29
version=29.0.0
since_tag=
all: appstore
release: appstore github-release github-upload
github-release:
if [ -z "$(release_account)" ]; then \
release_account=$(github_account); \
release_branch=$(branch); \
else \
release_account=$(release_account); \
release_branch=master; \
fi; \
if [ -z "$(since_tag)" ]; then \
latest_tag=$$(git describe --tags `git rev-list --tags --max-count=1`); \
else \
latest_tag=$(since_tag); \
fi; \
comparison="$$latest_tag..HEAD"; \
if [ -z "$$latest_tag" ]; then comparison=""; fi; \
changelog=$$(git log $$comparison --oneline --no-merges | sed -e 's/^/$(github_account)\/$(package_name)@/'); \
github-release release \
--user $$release_account \
--repo $(package_name) \
--target $$release_branch \
--tag $(version) \
--description "**Changelog**<br/>$$changelog" \
--name "$(app_name) v$(version)"; \
if [ $(github_account) != $$release_account ]; then \
link="https://github.com/$$release_account/$(package_name)/releases/download/$(version)/$(package_name)-$(version).tar.gz";\
github-release release \
--user $(github_account) \
--repo $(package_name) \
--target $(branch) \
--tag $(version) \
--description "**Download**<br />$$link<br /><br />**Changelog**<br/>$$changelog<br />" \
--name "$(app_name) v$(version)"; \
fi; \
github-upload:
if [ -z "$(release_account)" ]; then \
release_account=$(github_account); \
else \
release_account=$(release_account); \
fi; \
github-release upload \
--user $$release_account \
--repo $(package_name) \
--tag $(version) \
--name "$(package_name)-$(version).tar.gz" \
--file $(build_dir)/$(package_name).tar.gz
clean:
rm -rf $(build_dir)
rm -rf node_modules
# composer packages
composer:
composer install --prefer-dist
composer upgrade --prefer-dist
appstore: clean composer
mkdir -p $(sign_dir)
rsync -a \
--exclude=/build \
--exclude=/docs \
--exclude=/translationfiles \
--exclude=/.tx \
--exclude=/tests \
--exclude=.git \
--exclude=/.github \
--exclude=/l10n/l10n.pl \
--exclude=/CONTRIBUTING.md \
--exclude=/issue_template.md \
--exclude=/README.md \
--exclude=/composer.json \
--exclude=/testConfiguration.json \
--exclude=/composer.lock \
--exclude=/.gitattributes \
--exclude=/.gitignore \
--exclude=/.scrutinizer.yml \
--exclude=/.travis.yml \
--exclude=/Makefile \
./ $(sign_dir)/$(package_name)
tar -czf $(build_dir)/$(package_name).tar.gz \
-C $(sign_dir) $(package_name)
@if [ -f $(cert_dir)/$(package_name).key ]; then \
echo "Signing package…"; \
openssl dgst -sha512 -sign $(cert_dir)/$(package_name).key $(build_dir)/$(package_name).tar.gz | openssl base64; \
fi
================================================
FILE: README.md
================================================
<!--
- SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
- SPDX-License-Identifier: AGPL-3.0-or-later
-->
# Full text search
[](https://api.reuse.software/info/github.com/nextcloud/fulltextsearch)
[](https://scrutinizer-ci.com/g/nextcloud/fulltextsearch/?b=master)
_Full text search_ is the core app of a full-text search framework for your Nextcloud.
To have it operate, and get content indexed, some other apps are needed:
- Some **Providers Apps** to extract content from your Nextcloud.
- A **Platform App** that communicate with a search platform _(ie. Elastic Search, Solr, …)_ in order to index the content provided by the **Providers**.
_Note: There is no limit to the number of platform-apps that can be installed, however only one can be selected from the admin interface_
### Documentation
[Can be found on the wiki](https://github.com/nextcloud/fulltextsearch/wiki)
================================================
FILE: REUSE.toml
================================================
# SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
# SPDX-License-Identifier: AGPL-3.0-or-later
version = 1
SPDX-PackageName = "fulltextsearch"
SPDX-PackageSupplier = "Nextcloud <info@nextcloud.com>"
SPDX-PackageDownloadLocation = "https://github.com/nextcloud/fulltextsearch"
[[annotations]]
path = ["l10n/**.js", "l10n/**.json"]
precedence = "aggregate"
SPDX-FileCopyrightText = "2016 Nextcloud translators"
SPDX-License-Identifier = "AGPL-3.0-or-later"
[[annotations]]
path = ["composer.json", "composer.lock"]
precedence = "aggregate"
SPDX-FileCopyrightText = "2016 Nextcloud GmbH and Nextcloud contributors"
SPDX-License-Identifier = "AGPL-3.0-or-later"
[[annotations]]
path = ["screenshots/0.3.0.png", "screenshots/configuration.png"]
precedence = "aggregate"
SPDX-FileCopyrightText = "2017 Nextcloud GmbH and Nextcloud contributors"
SPDX-License-Identifier = "AGPL-3.0-or-later"
[[annotations]]
path = [".tx/config", "screenshots/draw.io/Index.xml", "screenshots/draw.io/Search.xml", "screenshots/OccFulltextsearchIndex.png", "screenshots/OccFulltextsearchTest.png", "screenshots/SchemaIndexCommand.jpg", "screenshots/SchemaIndexLive.jpg", "screenshots/SchemaSearch.jpg"]
precedence = "aggregate"
SPDX-FileCopyrightText = "2018 Nextcloud GmbH and Nextcloud contributors"
SPDX-License-Identifier = "AGPL-3.0-or-later"
[[annotations]]
path = ["img/fulltextsearch.svg", "img/fulltextsearch_black.svg", "img/options.svg", "img/options_black.svg", "img/page-next.svg", "img/page-prev.svg"]
precedence = "aggregate"
SPDX-FileCopyrightText = "2018-2024 Google LLC"
SPDX-License-Identifier = "Apache-2.0"
================================================
FILE: appinfo/info.xml
================================================
<?xml version="1.0"?>
<!--
- SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
- SPDX-License-Identifier: AGPL-3.0-or-later
-->
<info xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
<id>fulltextsearch</id>
<name>Full text search</name>
<summary>Core of the full-text search framework for Nextcloud</summary>
<description><![CDATA[
Core App of the full-text search framework for your Nextcloud.
]]>
</description>
<version>32.0.0</version>
<licence>agpl</licence>
<author>Maxence Lange</author>
<namespace>FullTextSearch</namespace>
<documentation>
<admin>https://github.com/nextcloud/fulltextsearch/wiki</admin>
</documentation>
<category>search</category>
<website>https://github.com/nextcloud/fulltextsearch</website>
<bugs>https://github.com/nextcloud/fulltextsearch/issues</bugs>
<repository>https://github.com/nextcloud/fulltextsearch.git</repository>
<screenshot>https://raw.githubusercontent.com/nextcloud/fulltextsearch/master/screenshots/0.3.0.png</screenshot>
<dependencies>
<nextcloud min-version="32" max-version="33"/>
</dependencies>
<background-jobs>
<job>OCA\FullTextSearch\Cron\Index</job>
</background-jobs>
<commands>
<command>OCA\FullTextSearch\Command\Check</command>
<command>OCA\FullTextSearch\Command\CollectionInit</command>
<command>OCA\FullTextSearch\Command\CollectionDelete</command>
<command>OCA\FullTextSearch\Command\CollectionLink</command>
<command>OCA\FullTextSearch\Command\CollectionList</command>
<command>OCA\FullTextSearch\Command\Configure</command>
<command>OCA\FullTextSearch\Command\DocumentIndex</command>
<command>OCA\FullTextSearch\Command\DocumentPlatform</command>
<command>OCA\FullTextSearch\Command\DocumentProvider</command>
<command>OCA\FullTextSearch\Command\DocumentStatus</command>
<command>OCA\FullTextSearch\Command\Index</command>
<command>OCA\FullTextSearch\Command\Live</command>
<command>OCA\FullTextSearch\Command\Reset</command>
<command>OCA\FullTextSearch\Command\Search</command>
<command>OCA\FullTextSearch\Command\Stop</command>
<command>OCA\FullTextSearch\Command\Test</command>
</commands>
<settings>
<admin>OCA\FullTextSearch\Settings\Admin</admin>
<admin-section>OCA\FullTextSearch\Settings\AdminSection</admin-section>
</settings>
</info>
================================================
FILE: appinfo/routes.php
================================================
<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
return [
'ocs' => [
/** @see OCA\FullTextSearch\Controller\CollectionController */
['name' => 'Collection#resetCollection', 'url' => '/collection/{collection}/index', 'verb' => 'DELETE'],
['name' => 'Collection#getQueue', 'url' => '/collection/{collection}/index', 'verb' => 'GET'],
[
'name' => 'Collection#indexDocument',
'url' => '/collection/{collection}/document/{providerId}/{documentId}',
'verb' => 'GET'
],
[
'name' => 'Collection#updateStatusDone',
'url' => '/collection/{collection}/document/{providerId}/{documentId}/done',
'verb' => 'POST'
]
],
'routes' => [
['name' => 'Navigation#navigate', 'url' => '/', 'verb' => 'GET'],
['name' => 'Settings#getSettingsAdmin', 'url' => '/admin/settings', 'verb' => 'GET'],
['name' => 'Settings#setSettingsAdmin', 'url' => '/admin/settings', 'verb' => 'POST'],
['name' => 'Api#search', 'url' => '/v1/search', 'verb' => 'GET'],
['name' => 'Api#searchFromRemote', 'url' => '/v1/remote', 'verb' => 'GET'],
['name' => 'Templates#getOptionsPanel', 'url' => '/options/{providerId}/', 'verb' => 'GET'],
['name' => 'Templates#getNavigationPanels', 'url' => '/navigation/panels', 'verb' => 'GET']
]
];
================================================
FILE: composer.json
================================================
{
"name": "nextcloud/fulltextsearch",
"description": "Full text search framework for Nextcloud",
"minimum-stability": "stable",
"license": "agpl",
"config": {
"optimize-autoloader": true,
"classmap-authoritative": true,
"autoloader-suffix": "FullTextSearch"
},
"authors": [
{
"name": "Maxence Lange",
"email": "maxence@artificial-owl.com"
}
],
"autoload": {
"psr-4": {
"OCA\\FullTextSearch\\": "lib/"
}
}
}
================================================
FILE: css/admin.css
================================================
/**
* SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
.fnshidden {
display: none;
}
EM {
font-size: 12px;
}
.div-table {
display: table;
width: auto;
border-spacing: 5px;
}
.div-table-row {
display: table-row;
width: auto;
height: 65px;
clear: both;
}
.div-table-col {
float: left;
display: table-column;
width: 300px;
}
.div-table-col-left {
width: 350px;
margin-right: 35px;
text-align: right;
}
.hsub {
margin-left: 20px;
}
SELECT, INPUT {
width: 350px;
}
INPUT.small {
width: 150px;
}
================================================
FILE: css/fulltextsearch.css
================================================
/**
* SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
#fts-icon {
background-size: 16px 16px;
padding: 14px;
cursor: pointer;
}
div.icon-fulltextsearch-white {
background-image: url('../img/fulltextsearch.svg');
}
div.icon-fulltextsearch {
background-image: url('../img/fulltextsearch_black.svg');
}
#fts-error {
color: #f00;
text-align: center;
margin: 20px;
}
#fts-popup {
width: 340px;
right: 42px;
max-width: 85%;
max-height: 500px !important;
}
#fts-popup::after {
right: 78px;
}
#fts-header {
width: 100%;
}
#fts-header div {
left: 0;
right: 0;
top: 0;
margin: 7px;
}
#fts-input {
width: 100%;
}
input.options_small {
width: 60px;
}
.fts_options_input {
margin-right: 10px !important;
opacity: 0.65;
}
.fts_options_input_small {
width: 70px;
}
/**
*/
.provider_result {
}
.provider_navigation_right {
position: absolute;
right: 0;
top: 0;
height: 15px;
margin: auto 25px auto 0;
bottom: 0;
}
.provider_navigation_close {
margin: 3px 20px 3px 3px;
opacity: 0.6;
}
.provider_navigation_prev, .provider_navigation_curr, .provider_navigation_next, .provider_navigation_close {
float: left;
}
.provider_navigation_curr {
font-weight: normal;
font-size: 15px;
letter-spacing: 6px;
margin: -3px 0 0 11px;
}
.provider_navigation_prev, .provider_navigation_next, .provider_navigation_close, .provider_navigation_page {
cursor: pointer;
}
.provider_navigation_page {
font-size: 11px;
white-space: nowrap;
margin: -3px 16px -3px 16px;
}
.result_entry_default {
height: 55px;
width: 100%;
border-bottom: solid 1px #d1d1d1;
}
.result_entry_left {
float: left;
position: relative;
top: 45%;
margin-left: 16px;
transform: perspective(1px) translateY(-50%);
}
.result_entry_right {
float: right;
margin-right: 10px;
position: relative;
top: 50%;
transform: perspective(1px) translateY(-50%);
}
.result_entry_default #title {
font-weight: bold;
height: 14px;
}
.result_entry_default #line1, .result_entry_default #line2 {
color: #717171;
font-size: 11px;
height: 12px;
}
.result_entry_default #score {
/*font-weight: bold;*/
}
/*.result_entry_default #info {*/
/*font-weight: bold;*/
/*}*/
.next_search_div {
position: relative;
width: 286px;
height: 36px;
margin-right: 20px;
}
.provider_navigation {
position: relative;
font-size: 13px;
color: #898989;
padding-top: 13px;
padding-left: 20px;
padding-bottom: 13px;
border-bottom: solid 1px #eaeaea;
}
.icon-page-prev {
background-image: url('../img/page-prev.svg');
background-position: left;
padding-left: 18px;
}
.icon-page-next {
background-image: url('../img/page-next.svg');
background-position: right;
padding-right: 18px;
}
.icon-page-next, .icon-page-prev {
background-repeat: no-repeat;
height: 16px;
font-size: 11px;
}
.result_entry {
height: 50px;
position: relative;
border-bottom: solid 1px #efefef;
}
.result_title {
color: #000;
}
.result_extract {
font-size: 11px;
color: #999;
margin-top: -5px;
margin-bottom: -5px;
margin-left: 5px;
}
.result_div_checkbox {
left: 0px;
width: 50px;
}
.result_div {
position: absolute;
top: 50%;
transform: translateY(-50%);
}
.result_div_checkbox {
left: 0px;
width: 50px;
}
.result_div_content {
left: 50px;
}
.result_div_right {
right: 20px;
color: #9a9a9a;
}
.icon-more-fulltextsearch {
position: absolute;
right: 40px;
top: 10px;
cursor: pointer;
}
#next_search_input {
background: #fffc;
width: 212px;
height: 30px;
margin: 2px !important;
}
.div-table {
display: table;
width: auto;
border-spacing: 5px;
}
.div-table-row {
display: table-row;
width: auto;
clear: both;
}
.div-table-col {
float: left;
display: table-column;
}
.div-table-col-left {
width: 170px;
margin-top: 8px;
color: #707070;
margin-right: 15px;
text-align: right;
}
================================================
FILE: css/navigate.css
================================================
/**
* SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
#search_header {
width: 100%;
position: absolute;
}
#search_header div {
left: 0;
right: 0;
top: 0;
margin: 5px;
}
#search_input {
width: 100%;
}
#search_error {
text-align: center;
color: #f00;
margin: 20px;
}
.search_checkbox {
margin-right: 10px !important;
opacity: 0.8;
}
.search_checkbox_sub {
margin-right: 10px !important;
opacity: 0.65;
}
.search_input_sub {
margin-right: 10px !important;
opacity: 0.65;
}
.search_tags_sub {
margin-right: 10px !important;
width: 200px;
opacity: 0.65;
}
.search_input_sub_small {
width: 70px;
}
.search_icon {
background-image: url('/apps/fulltextsearch/img/fulltextsearch_black.svg');
}
A.icon-fts {
text-indent: 25px;
}
a.ulsub {
padding: 0px 12px 0 12px !important;
}
/**
*/
#search_result {
}
.provider_header {
margin-bottom: 35px;
}
.provider_result {
}
#noresult {
font-style: italic;
position: absolute;
left: 100px;
}
================================================
FILE: docs/api/collections.md
================================================
<!--
- SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors
- SPDX-License-Identifier: AGPL-3.0-or-later
-->
# Collections
================================================
FILE: docs/commands.md
================================================
<!--
- SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors
- SPDX-License-Identifier: AGPL-3.0-or-later
-->
# Commands
================================================
FILE: docs/configuration.md
================================================
<!--
- SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors
- SPDX-License-Identifier: AGPL-3.0-or-later
-->
# Configuration
================================================
FILE: docs/index.md
================================================
<!--
- SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors
- SPDX-License-Identifier: AGPL-3.0-or-later
-->
# Nextcloud FullTextSearch
================================================
FILE: docs/installation.md
================================================
<!--
- SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors
- SPDX-License-Identifier: AGPL-3.0-or-later
-->
# Installation
================================================
FILE: js/admin.elements.js
================================================
/**
* SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
/** global: OCA */
/** global: fts_admin_settings */
var fts_admin_elements = {
fts_div: null,
fts_navigation: null,
fts_platforms: null,
fts_providers: null,
init: function () {
fts_admin_elements.fts_div = $('#fns');
fts_admin_elements.fts_navigation = $('#fts_navigation');
fts_admin_elements.fts_platforms = $('#fts_platforms');
fts_admin_elements.fts_navigation.on('change', fts_admin_settings.saveSettings);
fts_admin_elements.fts_platforms.on('change', function () {
fts_admin_settings.tagSettingsAsNotSaved($(this));
fts_admin_settings.saveSettings();
});
}
};
================================================
FILE: js/admin.js
================================================
/**
* SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
/** global: OCA */
/** global: fts_admin_settings */
/** global: fts_admin_elements */
$(document).ready(function () {
/**
* @constructs FullTextSearchAdmin
*/
var FullTextSearchAdmin = function () {
$.extend(FullTextSearchAdmin.prototype, fts_admin_elements);
$.extend(FullTextSearchAdmin.prototype, fts_admin_settings);
fts_admin_elements.init();
fts_admin_settings.refreshSettingPage();
};
OCA.FullTextSearchAdmin = FullTextSearchAdmin;
OCA.FullTextSearchAdmin.settings = new FullTextSearchAdmin();
});
================================================
FILE: js/admin.settings.js
================================================
/**
* SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
/** global: OC */
/** global: fts_admin_elements */
/** @namespace result.platforms_all */
/** @namespace result.search_platform */
/** @namespace result.providers_all */
var fts_admin_settings = {
config: null,
refreshSettingPage: function () {
$.ajax({
method: 'GET',
url: OC.generateUrl('/apps/fulltextsearch/admin/settings')
}).done(function (res) {
fts_admin_settings.updateSettingPage(res);
});
},
updateSettingPage: function (result) {
fts_admin_elements.fts_navigation.prop('checked', (result.app_navigation === true));
fts_admin_settings.updateSettingPagePlatforms(result);
fts_admin_settings.updateCurrentPlatform(result);
fts_admin_settings.updateEnabledProviders(result);
fts_admin_settings.tagSettingsAsSaved(fts_admin_elements.fts_div);
},
updateSettingPagePlatforms: function (result) {
fts_admin_elements.fts_platforms.empty();
fts_admin_elements.fts_platforms.append($('<option>', {
value: '',
text: ''
}));
var platforms = result.platforms_all;
var classes = Object.keys(platforms);
for (var i = 0; i < classes.length; i++) {
var platformClass = classes[i];
fts_admin_elements.fts_platforms.append($('<option>', {
value: platformClass,
selected: (result.search_platform === platformClass),
text: platforms[platformClass].name
}));
$('#' + platforms[platformClass].id).fadeTo(300, 0, function () {
$(this).hide();
});
}
fts_admin_elements.fts_platforms.fadeTo(300, 1);
},
updateCurrentPlatform: function (result) {
if (result.search_platform.length === 0) {
return;
}
$('#' + result.platforms_all[result.search_platform].id).stop().show().fadeTo(300, 1);
},
updateEnabledProviders: function (result) {
var providers = result.providers_all;
var providerIds = Object.keys(providers);
for (var i = 0; i < providerIds.length; i++) {
$('#' + providerIds[i]).stop().fadeTo(300, 0);
}
$('.subprovider').stop().fadeTo(300, 0);
// we only check that a search_platform is valid. we don't manage a list of enabled provider as
// of right now
if (result.search_platform.length === 0) {
return;
}
for (i = 0; i < providerIds.length; i++) {
$('#' + providerIds[i]).stop().fadeTo(300, 1);
}
},
updateEnabledSubProviders: function () {
$('body').find('.subprovider').each(function () {
var top = $(this).attr('id').split('-', 2);
if (top.length < 2) {
return;
}
var topOption = top[0];
if ($('#' + topOption).is(':checked')) {
$(this).stop().fadeTo(300, 1).slideDown();
} else {
$(this).stop().fadeTo(300, 0).slideUp();
}
});
},
tagSettingsAsNotSaved: function (div) {
div.animate({
'backgroundColor': 'rgba(255, 180, 0, 0.18)'
}, 300);
},
tagSettingsAsSaved: function (div) {
div.find('INPUT').animate({'backgroundColor': 'rgba(255, 255, 255, 0.18)'}, 300);
div.find('SELECT').animate({'backgroundColor': '#fff'}, 300);
fts_admin_settings.updateEnabledSubProviders();
},
saveSettings: function () {
var data = {
app_navigation: (fts_admin_elements.fts_navigation.is(':checked')) ? 1 : 0,
search_platform: fts_admin_elements.fts_platforms.val()
};
$.ajax({
method: 'POST',
url: OC.generateUrl('/apps/fulltextsearch/admin/settings'),
data: {
data: data
}
}).done(function (res) {
fts_admin_settings.updateSettingPage(res);
});
}
};
================================================
FILE: js/fulltextsearch.v1.api.js
================================================
/**
* SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
/** global: OC */
/** global: settings */
/** global: result */
/** global: search */
/** global: nav */
var api = {
search: function (request, callback, callbackError) {
var res = {
status: -1,
error: 'Failed to reach server. Try reloading the page'
};
nav.onSearchRequest(request);
$.ajax({
method: 'GET',
url: OC.generateUrl('/apps/fulltextsearch/v1/search'),
data: {
request: JSON.stringify(request)
}
}).done(function (res) {
if (res.status === -1) {
result.displayError(res);
nav.onError(res.message);
api.onCallback(callbackError, res);
return;
}
result.displayResult(res);
nav.onResultDisplayed(res);
api.onCallback(callback, res);
}).fail(function () {
if (!api.onCallback(callbackError, res)) {
nav.onError(res.message);
}
});
},
retrieveOptions: function (providerId, callback) {
var res = {status: -1};
$.ajax({
method: 'GET',
url: OC.generateUrl('/apps/fulltextsearch/options/' + providerId)
}).done(function (res) {
searchbox.onOptionsLoaded(res);
api.onCallback(callback, res);
}).fail(function () {
nav.failedToAjax();
api.onCallback(callback, res);
});
},
onCallback: function (callback, result) {
if (callback && (typeof callback === 'function')) {
if (typeof result === 'object') {
callback(result);
} else {
callback({status: -1});
}
return true;
}
return false;
}
};
================================================
FILE: js/fulltextsearch.v1.js
================================================
/**
* SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
/** global: OCA */
/** global: settings */
/** global: searchbar */
/** global: result */
/** global: nav */
/** global: api */
(function () {
/**
* @constructs FullTextSearch
*/
var FullTextSearch = function () {
$.extend(FullTextSearch.prototype, settings);
$.extend(FullTextSearch.prototype, result);
$.extend(FullTextSearch.prototype, searchbox);
$.extend(FullTextSearch.prototype, nav);
$.extend(FullTextSearch.prototype, api);
// settings.generateNoResultDiv();
};
OCA.FullTextSearch = FullTextSearch;
OCA.FullTextSearch.api = new FullTextSearch();
})();
================================================
FILE: js/fulltextsearch.v1.navigation.js
================================================
/**
* SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
/** global: OCA */
/** global: api */
/** global: search */
/** global: result */
/** global: settings */
var curr = {
providerResult: [],
page: 1,
lastRequest: '',
lastRequestTimer: null,
lastSearchTimer: null,
setProviderResult: function (id, value) {
curr.providerResult[id] = value;
},
getProviderResult: function (id) {
var current = curr.providerResult[id];
if (!current) {
current = [];
}
return current;
}
};
var nav = {
manageDivProviderNavigation: function (divProviderNavigation, request, meta) {
var maxPage = Math.ceil(meta.total / request.size);
divProviderNavigation.attr('data-time', meta.time);
divProviderNavigation.attr('data-page', request.page);
divProviderNavigation.attr('data-options', JSON.stringify(request.options));
divProviderNavigation.attr('data-search', request.search);
divProviderNavigation.attr('data-empty-search', request.empty_search);
divProviderNavigation.attr('data-max-page', maxPage);
divProviderNavigation.attr('data-size', request.size);
divProviderNavigation.attr('data-total', meta.total);
var providerTitle = divProviderNavigation.attr('data-provider-title');
var left = '';
var data =
{
title: providerTitle,
search: request.search,
total: meta.total,
time: meta.time
};
if (request.search === ':null' || request.search === '') {
left = t('fulltextsearch', 'the search returned {total} results in {time} ms', data);
} else {
left = t('fulltextsearch',
"the search in {title} for \"{search}\" returned {total} results in {time} ms", data);
}
divProviderNavigation.find('.provider_navigation_left').text(left);
if (maxPage > 1) {
divProviderNavigation.find('.provider_navigation_curr').text(request.page + ' / ' +
maxPage).stop().fadeTo(200, 1);
divProviderNavigation.find('.provider_navigation_prev').stop().fadeTo(200,
(request.page > 1) ? 1 : 0);
divProviderNavigation.find('.provider_navigation_next').stop().fadeTo(200,
(request.page < maxPage) ? 1 : 0);
} else {
divProviderNavigation.find('.provider_navigation_prev').stop().fadeTo(200, 0);
divProviderNavigation.find('.provider_navigation_curr').stop().fadeTo(200, 0);
divProviderNavigation.find('.provider_navigation_next').stop().fadeTo(200, 0);
}
},
manageDivProviderResult: function (divProviderResult, newResult, oldResult) {
//replaceWith();
nav.divProviderResultAddItems(divProviderResult, newResult, oldResult);
if (oldResult) {
nav.divProviderResultRemoveItems(divProviderResult, newResult, oldResult);
nav.divProviderResultMoveItems(divProviderResult, newResult, oldResult);
}
},
divProviderResultAddItems: function (divProviderResult, newResult, oldResult) {
var precItem = null;
for (var i = 0; i < newResult.length; i++) {
var entry = newResult[i];
if (result.getResultIndex(entry.id, oldResult) > -1) {
precItem = nav.getDivEntry(entry.id, divProviderResult);
nav.fillDivEntry(precItem, entry);
continue;
}
var divResult = nav.generateDivEntry(entry, nav.generateTemplateEntry(entry));
if (precItem === null) {
divProviderResult.prepend(divResult);
} else {
precItem.after(divResult);
}
divResult.slideDown(settings.delay_result, function () {
$(this).children('.result_template').fadeTo(settings.delay_result, 1);
});
precItem = divResult;
}
},
divProviderResultRemoveItems: function (divProviderResult, newResult, oldResult) {
for (var i = 0; i < oldResult.length; i++) {
var entry = oldResult[i];
if (result.getResultIndex(entry.id, newResult) === -1) {
var divResult = nav.getDivEntry(entry.id, divProviderResult);
divResult.fadeTo(settings.delay_result, 0, function () {
$(this).slideUp(settings.delay_result, function () {
$(this).remove();
});
});
}
}
},
divProviderResultMoveItems: function (divProviderResult, newResult, oldResult) {
var precId = '';
oldResult = result.recalibrateResult(oldResult, newResult);
newResult = result.recalibrateResult(newResult, oldResult);
for (var i = 0; i < newResult.length; i++) {
var entry = newResult[i];
var pos = result.getResultIndex(entry.id, oldResult);
if (pos > -1 && pos !== i) {
nav.animateMoveDivResult(entry.id, divProviderResult, precId);
}
precId = newResult[i].id;
}
},
animateMoveDivResult: function (entryId, divProviderResult, precId) {
var divResult = nav.getDivEntry(entryId, divProviderResult);
if (precId === '') {
divResult.fadeTo(settings.delay_result, 0.35, function () {
$(this).prependTo(divProviderResult).fadeTo(100, 1);
});
} else {
var precItem = nav.getDivEntry(precId, divProviderResult);
divResult.fadeTo(settings.delay_result, 0.35, function () {
$(this).insertAfter(precItem).fadeTo(100, 1);
});
}
},
getDivProvider: function (providerId, providerName) {
var ret = null;
settings.resultContainer.children('.provider_header').each(function () {
if ($(this).attr('data-id') === providerId) {
ret = $(this);
}
});
if (ret === null) {
ret = nav.generateDivProvider(providerId, providerName);
settings.resultContainer.append(ret);
}
return ret;
},
getDivEntry: function (resultId, divProviderResult) {
var ret = null;
divProviderResult.children('.result_entry').each(function () {
if ($(this).attr('data-id') === resultId) {
ret = $(this);
}
});
return ret;
},
fillDivEntry: function (divEntry, entry) {
divEntry.find('#title').text(entry.title);
divEntry.find('#info').text('');
if (settings.options.show_hash === '1') {
divEntry.find('#info').text(entry.hash);
}
nav.fillDivResultExcepts(divEntry, entry);
if (entry.link !== '') {
divEntry.off('click').on('click', function (event) {
if (nav.onEntrySelected($(this), event)) {
return;
}
window.open(entry.link);
});
divEntry.find('div').each(function () {
$(this).css('cursor', 'pointer');
});
}
nav.onEntryGenerated(divEntry, entry);
},
/**
* @namespace entry.excerpts
*/
fillDivResultExcepts: function (divResult, entry) {
if (entry.excerpts === null) {
return;
}
if (entry.excerpts.length > 0) {
divResult.find('#extract').text(entry.excerpts[0]['excerpt']);
} else {
divResult.find('#extract').text('');
}
},
onEntryGenerated: function (divEntry, entry) {
if (settings.parentHasMethod('onEntryGenerated', window)) {
settings.parent.onEntryGenerated(divEntry, entry);
}
},
onEntrySelected: function (divEntry, event) {
return !!(settings.parentHasMethod('onEntrySelected', window) &&
settings.parent.onEntrySelected(divEntry, event));
},
onSearchRequest: function (data) {
if (settings.parentHasMethod('onSearchRequest', window)) {
settings.parent.onSearchRequest(data);
}
},
onSearchReset: function () {
if (settings.parentHasMethod('onSearchReset', window)) {
settings.parent.onSearchReset();
}
},
onResultDisplayed: function (data) {
if (settings.parentHasMethod('onResultDisplayed', window)) {
settings.parent.onResultDisplayed(data);
}
},
onResultClose: function () {
if (settings.parentHasMethod('onResultClose', window)) {
settings.parent.onResultClose();
}
},
onError: function (data) {
if (settings.parentHasMethod('onError', window)) {
settings.parent.onError(data);
}
},
// deleteEmptyDiv: function (entry, divId) {
// var div = entry.find(divId);
// if (div.text() === '') {
// div.remove();
// }
// },
generateTemplateEntry: function () {
var divTemplate = settings.entryTemplate;
if (divTemplate === null) {
divTemplate = settings.generateDefaultTemplate();
}
if (!divTemplate.length) {
console.log('FullTextSearch Error: entryTemplate is not defined');
return;
}
var tmpl = divTemplate.html();
// var divNavToggle = $('<div>', {
// id: 'app-navigation-toggle',
// class: 'icon-menu'
// });
//
var div = $('<div>', {class: 'result_template'});
div.html(tmpl).fadeTo(0);
return div;
},
generateDivEntry: function (entry, divResultContent) {
var divEntry = $('<div>', {class: 'result_entry'});
divEntry.hide();
divEntry.attr('data-id', entry.id);
divEntry.attr('data-link', entry.link);
divEntry.attr('data-source', entry.source);
divEntry.attr('data-info', JSON.stringify(entry.info));
divEntry.attr('data-result', JSON.stringify(entry));
divEntry.append(divResultContent);
nav.fillDivEntry(divEntry, entry);
return divEntry;
},
generateDivProvider: function (providerId, providerName) {
var divProviderNavigation = $('<div>', {class: 'provider_navigation'});
divProviderNavigation.attr('data-provider-id', providerId);
divProviderNavigation.attr('data-provider-title', providerName);
var divProviderLeftNav = $('<div>', {class: 'provider_navigation_left'});
if (settings.searchProviderId !== '') {
var divProviderPaginationClose = $('<div>',
{class: 'icon-close provider_navigation_close'});
divProviderPaginationClose.on('click', function () {
nav.onResultClose();
});
divProviderNavigation.append(divProviderPaginationClose);
}
divProviderNavigation.append(divProviderLeftNav);
var divProviderPagination = $('<div>', {class: 'provider_navigation_right'});
var divProviderPaginationPrev = $('<div>', {class: 'provider_navigation_prev'}).append(
$('<div>', {class: 'provider_navigation_page'}).text('previous page'));
divProviderPaginationPrev.on('click', function () {
var prevPage = Number(divProviderNavigation.attr('data-page')) - 1;
if (prevPage < 1) {
return;
}
fullTextSearch.search({
providers: providerId,
options: JSON.parse(divProviderNavigation.attr('data-options')),
search: divProviderNavigation.attr('data-search'),
empty_search: divProviderNavigation.attr('data-empty-search'),
page: prevPage,
size: divProviderNavigation.attr('data-size')
});
});
divProviderPagination.append(divProviderPaginationPrev);
divProviderPagination.append($('<div>', {class: 'provider_navigation_curr'}));
var divProviderPaginationNext = $('<div>',
{class: 'provider_navigation_next'}).append(
$('<div>', {class: 'provider_navigation_page'}).text('next page'));
divProviderPaginationNext.on('click', function () {
var nextPage = Number(divProviderNavigation.attr('data-page')) + 1;
if (nextPage > Number(divProviderNavigation.attr('data-max-page'))) {
return;
}
fullTextSearch.search({
providers: providerId,
options: JSON.parse(divProviderNavigation.attr('data-options')),
search: divProviderNavigation.attr('data-search'),
empty_search: divProviderNavigation.attr('data-empty-search'),
page: nextPage,
size: divProviderNavigation.attr('data-size')
});
});
divProviderPagination.append(divProviderPaginationNext);
divProviderNavigation.append(divProviderPagination);
var divProviderResult = $('<div>', {class: 'provider_result'});
var divProvider = $('<div>', {class: 'provider_header'});
divProvider.hide();
divProvider.attr('data-id', providerId);
divProvider.append(divProviderNavigation);
if (settings.resultHeader !== null) {
divProvider.append(settings.resultHeader);
}
divProvider.append(divProviderResult);
if (settings.resultFooter !== null) {
divProvider.append(settings.resultFooter);
}
return divProvider;
}
}
;
================================================
FILE: js/fulltextsearch.v1.result.js
================================================
/**
* SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
/** global: OCA */
/** global: settings */
/** global: curr */
/** global: nav */
/** @namespace result.provider */
/** @namespace result.documents */
var result = {
displayResult: function (res) {
box_elements.searchError.hide();
if (settings.resultContainer === null) {
return;
}
var searchResult = res.result;
if (searchResult.length === 0) {
// result.displayNoResult();
return;
}
settings.options = res.request.options;
for (var i = 0; i < searchResult.length; i++) {
result.displayProviderResult(res.request, searchResult[i]);
}
},
displayError: function (res) {
box_elements.searchError.text(res.message).show();
},
displayProviderResult: function (request, result) {
// settings.divNoResult.fadeTo(settings.delay_result, 0);
var current = curr.getProviderResult(result.provider.id);
var divProvider = nav.getDivProvider(result.provider.id, result.provider.name);
nav.manageDivProviderNavigation(divProvider.children('.provider_navigation'), request,
result.meta);
nav.manageDivProviderResult(divProvider.find('.provider_result'), result.documents,
current.documents);
divProvider.slideDown(settings.delay_provider, function () {
$(this).fadeTo(settings.delay_provider, 1);
});
curr.setProviderResult(result.provider.id, result);
},
recalibrateResult: function (oldResult, newResult) {
var tmpResult = [];
for (var i = 0; i < oldResult.length; i++) {
if (result.getResultIndex(oldResult[i].id, newResult) > -1) {
tmpResult.push(oldResult[i]);
}
}
return tmpResult;
},
getResultIndex: function (id, result) {
if (!result) {
return -1;
}
for (var i = 0; i < result.length; i++) {
if (result[i].id === id) {
return i;
}
}
return -1;
}
};
================================================
FILE: js/fulltextsearch.v1.searchbox.js
================================================
/**
* SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
/** global: OCA */
/** global: nav */
/** global: _ */
/** global: api */
/** global: search */
/** global: result */
/** global: fullTextSearch */
/** global: settings */
var box_elements = {
searchInput: null,
searchOptions: null,
searchTemplate: null,
searchError: null,
divFullTextSearchIcon: null,
divFullTextSearchPopup: null
};
var searchbox = {
init: function () {
var self = this;
// we remove old search
var search_form = $('FORM.searchbox');
if (search_form.length > 0) {
search_form.remove();
}
var divHeaderRight = $('DIV.header-right');
var divFullTextSearch = $('<div>', {id: 'fulltextsearch'});
divHeaderRight.prepend(divFullTextSearch);
box_elements.divFullTextSearchIcon = searchbox.generateFullTextSearchIcon();
box_elements.divFullTextSearchPopup = searchbox.generateFullTextSearchPopup();
divFullTextSearch.append(box_elements.divFullTextSearchIcon);
divFullTextSearch.append(box_elements.divFullTextSearchPopup);
OC.registerMenu(box_elements.divFullTextSearchIcon, box_elements.divFullTextSearchPopup,
searchbox.displayedSearchPopup);
api.retrieveOptions(settings.searchProviderId);
$(window).bind('keydown', function (event) {
if (event.ctrlKey || event.metaKey) {
if (String.fromCharCode(event.which).toLowerCase() === 'f') {
event.preventDefault();
searchbox.displaySearchPopup(true);
}
return;
}
if (event.which === 27) {
searchbox.displaySearchPopup(false);
}
});
},
generateFullTextSearchIcon: function () {
var className = 'icon-fulltextsearch';
if (OCA.Theming === undefined || !OCA.Theming.inverted) {
className = 'icon-fulltextsearch-white';
}
var icon = $('<div>', {
id: 'fts-icon',
tabindex: 0,
role: 'link',
class: className + ' menutoggle'
});
icon.fadeTo(0, 0.6);
return icon;
},
generateFullTextSearchPopup: function () {
var popup = $('<div>', {
id: 'fts-popup'
});
box_elements.searchInput = $('<input>', {
id: 'fts-input',
placeholder: t('fulltextsearch', 'Search') + ' ' + settings.searchProviderName
}).on('keyup', searchbox.timedSearch);
box_elements.searchOptions = $('<div>', {id: 'fts-options'});
box_elements.searchTemplate = $('<div>', {id: 'fts-options-template'});
box_elements.searchError = $('<div>', {id: 'fts-error'});
var divHeader = $('<div>', {id: 'fts-header'});
divHeader.append($('<div>').append(box_elements.searchInput));
popup.append(divHeader);
popup.append(box_elements.searchOptions);
popup.append(box_elements.searchTemplate);
popup.append(box_elements.searchError.hide());
return popup;
},
displaySearchPopup: function (display) {
if (display) {
OC.showMenu(box_elements.divFullTextSearchIcon, box_elements.divFullTextSearchPopup,
searchbox.displayedSearchPopup);
} else {
OC.hideMenus(null);
}
},
displayedSearchPopup: function () {
box_elements.searchError.hide();
box_elements.searchInput.focus();
},
searching: function () {
if (curr.lastRequestTimer !== null) {
window.clearTimeout(curr.lastRequestTimer);
curr.lastRequestTimer = null;
}
if (curr.lastSearchTimer !== null) {
window.clearTimeout(curr.lastSearchTimer);
}
var search = box_elements.searchInput.val();
if (search.length < 1) {
return;
}
curr.lastRequest = search;
api.search({
providers: settings.searchProviderId,
search: search,
page: curr.page,
options: searchbox.getSearchOptions(),
size: 20
});
},
timedSearch: function () {
if (curr.lastSearchTimer !== null) {
window.clearTimeout(curr.lastSearchTimer);
}
curr.lastSearchTimer = window.setTimeout(function () {
searchbox.searching();
}, settings.searchEntryTimer);
if (curr.lastRequestTimer === null) {
curr.lastRequestTimer = window.setTimeout(function () {
searchbox.searching();
}, settings.searchRequestTimer);
}
},
onOptionsLoaded: function (result) {
if (!result[settings.searchProviderId]) {
return;
}
if (result[settings.searchProviderId]['options']) {
searchbox.generateOptionsHtml(result[settings.searchProviderId]['options']);
box_elements.searchOptions.find('INPUT').each(function () {
searchbox.eventOnOptionsLoadedInput($(this));
});
}
if (result[settings.searchProviderId]['template']) {
box_elements.searchTemplate.html(result[settings.searchProviderId]['template']);
box_elements.searchTemplate.find('INPUT').each(function () {
searchbox.eventOnOptionsLoadedInput($(this))
});
}
},
eventOnOptionsLoadedInput: function (div) {
div.on('change keyup', function () {
// console.log('eventOnOptionsLoadedInput');
searchbox.searching();
});
},
generateOptionsHtml: function (options) {
var div = $('<div>', {class: 'div-table'});
for (var j = 0; j < options.length; j++) {
var sub = options[j];
searchbox.displayPanelCheckbox(div, sub);
searchbox.displayPanelInput(div, sub);
}
box_elements.searchOptions.append(div);
},
displayPanelOptionTitle: function (sub) {
var subDiv = $('<div>', {
class: 'div-table-row'
});
subDiv.append($('<div>',
{
class: 'div-table-col div-table-col-left'
}).append($('<span>', {
class: 'leftcol',
text: sub.title
})));
subDiv.append($('<div>',
{class: 'div-table-col div-table-col-right'}));
return subDiv;
},
displayPanelCheckbox: function (div, sub) {
if (sub.type !== 'checkbox') {
return;
}
var subDiv = searchbox.displayPanelOptionTitle(sub);
var subDivInput = $('<input>', {
type: 'checkbox',
id: sub.name,
value: 1
});
subDiv.find('.div-table-col-right').append(subDivInput);
div.append(subDiv);
},
displayPanelInput: function (div, sub) {
if (sub.type !== 'input') {
return;
}
var subDiv = searchbox.displayPanelOptionTitle(sub);
var subDivInput = $('<input>', {
class: 'fts_options_input fts_options_input_' + sub.size,
type: 'text',
placeholder: sub.placeholder,
id: sub.name
});
subDiv.find('.div-table-col-right').append(subDivInput);
div.append(subDiv);
},
getSearchOptions: function () {
var options = {};
if (box_elements.searchTemplate === null) {
return options;
}
box_elements.searchOptions.find('INPUT').each(function () {
searchbox.getSearchOptionsFromInput($(this), options);
});
box_elements.searchTemplate.find('INPUT').each(function () {
searchbox.getSearchOptionsFromInput($(this), options);
});
return options;
},
getSearchOptionsFromInput: function (div, options) {
var value = div.val();
if (div.attr('type') === 'checkbox' && !div.is(':checked')) {
value = '';
}
options[div.attr('id')] = value;
}
};
================================================
FILE: js/fulltextsearch.v1.settings.js
================================================
/**
* SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
/** global: searchbar */
/** global: api */
var settings = {
delay_provider: 300,
delay_result: 150,
searchRequestTimer: 4000,
searchEntryTimer: 1500,
parent: null,
searchProviderId: '',
searchProviderName: '',
resultContainer: null,
resultHeader: null,
resultFooter: null,
entryTemplate: null,
entryTemplateDefault: null,
// divNoResult: null,
options: [],
/**
* generate the default template to display search result entries
*/
generateDefaultTemplate: function () {
var resultContent = $('<div>', {class: 'result_content'});
resultContent.append($('<div>', {
id: 'title',
class: 'result_title'
}));
resultContent.append($('<div>', {
id: 'extract',
class: 'result_extract'
}));
var resultEntry = $('<div>', {class: 'result_entry'});
resultEntry.append($('<div>', {class: 'result_div_checkbox'}));
resultEntry.append($('<div>', {class: 'result_div result_div_content'}).append(resultContent));
var resultRight = $('<div>', {class: 'result_div result_div_right'});
resultRight.append($('<div>', {id: 'source'}));
resultRight.append($('<div>', {id: 'info'}));
resultEntry.append(resultRight);
return $('<div>').append(resultEntry);
},
// var divLeft = $('<div>', {class: 'result_entry_left'});
// divLeft.append($('<div>', {id: 'title'}));
// divLeft.append($('<div>', {id: 'line1'}));
// divLeft.append($('<div>', {id: 'line2'}));
//
// var divRight = $('<div>', {class: 'result_entry_right'});
// //divRight.append($('<div>', {id: 'score'}));
//
// var div = $('<div>', {class: 'result_entry_default'});
// div.append(divLeft);
// div.append(divRight);
//
// return $('<div>').append(div);
// },
//
// /**
// * generate a no result display
// */
// generateNoResultDiv: function () {
// var div = $('<div>', {id: 'noresult'});
// div.html('no result');
// div.hide();
// settings.divNoResult = div;
// },
/**
* @param template
*/
setResultHeader: function (template) {
settings.resultHeader = template;
},
/**
* @param template
*/
setResultFooter: function (template) {
settings.resultFooter = template;
},
/**
* used to set the template to display search result entries
*
* @param template
*/
setEntryTemplate: function (template) {
settings.entryTemplate = template;
},
/**
* used to set the container for the search result entries
*
* @param container
*/
setResultContainer: function (container) {
settings.resultContainer = container;
// settings.resultContainer.prepend(settings.divNoResult);
},
/**
* initialize the full text search and assign a providerId
*
* @param providerId
* @param providerName
* @param parent
*/
initFullTextSearch: function (providerId, providerName, parent) {
settings.searchProviderId = providerId;
settings.searchProviderName = providerName;
settings.parent = parent;
searchbox.init();
},
/**
* check that the app that call the lib contains a specific method
*
* @param method
* @param context
* @returns {boolean}
*/
parentHasMethod: function (method, context) {
if (settings.parent === null) {
return false;
}
var functionName = 'settings.parent.' + method;
var args = Array.prototype.slice.call(arguments, 2);
var namespaces = functionName.split(".");
for (var i = 0; i < namespaces.length; i++) {
if (context[namespaces[i]] === undefined) {
return false;
}
context = context[namespaces[i]];
}
return true;
},
executeFunction: function (functionName, context) {
var args = Array.prototype.slice.call(arguments, 2);
var namespaces = functionName.split(".");
var func = namespaces.pop();
for (var i = 0; i < namespaces.length; i++) {
if (context[namespaces[i]] === undefined) {
// console.log('Unknown function \'' + functionName + '\'');
return false;
}
context = context[namespaces[i]];
}
return context[func].apply(context, args);
}
};
================================================
FILE: js/navigate.js
================================================
/**
* SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
/** global: OCA */
/** global: _ */
var fullTextSearch = OCA.FullTextSearch.api;
var elements = {
searchTimeout: null,
search_input: null,
search_submit: null,
search_result: null,
search_json: null
};
var Navigate = function () {
this.init();
};
Navigate.prototype = {
currentTagsResult: {},
selectedTags: {},
init: function () {
var self = this;
elements.search_input = $('#search_input');
elements.search_submit = $('#search_submit');
elements.search_result = $('#search_result');
elements.search_panels = $('#search_navigation');
// elements.search_json = $('#search_json');
elements.divHeader = $('#search_header');
box_elements.searchError = $('#search_error');
// fullTextSearch.setEntryTemplate($('#template_entry'), self);
fullTextSearch.setResultContainer(elements.search_result);
elements.search_input.on('input', this.navigateTimedSearch);
// function () {
// self.resetSearch();
// if (elements.searchTimeout === null && self.initSearch()) {
// elements.searchTimeout = _.delay(function () {
// self.initSearch();
// elements.searchTimeout = null;
// }, 3000);
// }
// });
//
// $(document).keypress(function (e) {
// if (e.which === 13) {
// self.initSearch(true);
// }
// });
self.initPanels();
},
navigateTimedSearch: function () {
if (curr.lastSearchTimer !== null) {
window.clearTimeout(curr.lastSearchTimer);
}
curr.lastSearchTimer = window.setTimeout(function () {
OCA.FullTextSearch.navigate.initSearch();
}, settings.searchEntryTimer);
if (curr.lastRequestTimer === null) {
curr.lastRequestTimer = window.setTimeout(function () {
OCA.FullTextSearch.navigate.initSearch();
}, settings.searchRequestTimer);
}
},
initPanels: function () {
var self = this;
$.ajax({
method: 'GET',
url: OC.generateUrl('/apps/fulltextsearch/navigation/panels')
}).done(function (res) {
self.displayPanels(res);
});
},
displayPanels: function (data) {
var self = this;
var ak = Object.keys(data);
for (var i = 0; i < ak.length; i++) {
var providerAppId = ak[i];
var title = data[ak[i]]['title'];
var options = data[ak[i]]['options'];
var css = data[ak[i]]['css'];
var icon = data[ak[i]]['icon'];
var providerId = data[ak[i]]['provider'];
if (css !== '') {
OC.addStyle(providerAppId, css);
}
var li = $('<li>', {class: (nav.options !== undefined) ? 'collapsible open' : ''});
var aIcon = $('<a>', {
href: '#',
class: (icon !== undefined) ? icon : 'search_icon'
});
aIcon.addClass('icon-fts').text(title);
var ul = $('<ul>');
// if (nav.options !== undefined) {
aIcon.on('click', function () {
var li = $(this).closest('li');
if (li.hasClass('open')) {
li.removeClass('open');
} else {
li.addClass('open');
}
});
for (var j = 0; j < options.length; j++) {
var sub = options[j];
self.displayPanelCheckbox(ul, sub);
self.displayPanelInput(ul, sub);
self.displayPanelTags(ul, sub);
self.displayPanelSearch(providerAppId, ul, sub);
//
// <p id="tag_filter" class="open">
// <input value="" style="display: none;" type="text">
// <ul class="tagit ui-widget ui-widget-content ui-corner-all">
// <li class="tagit-new">
// <input class="ui-widget-content ui-autocomplete-input"
// placeholder="Filter by tag" autocomplete="off" type="text"> <span role="status"
// aria-live="polite" class="ui-helper-hidden-accessible"> 1 result is available,
// use up and down arrow keys to navigate.</span></li> <li class="tagit-choice
// ui-widget-content ui-state-default ui-corner-all"> <span
// class="tagit-label">test</span><a class="close"><span class="text-icon">×</span>
// <span class="ui-icon ui-icon-close"></span></a></li> <li class="tagit-choice
// ui-widget-content ui-state-default ui-corner-all"> <span
// class="tagit-label">perdu</span><a class="close"><span class="text-icon">×</span>
// <span class="ui-icon ui-icon-close"></span></a></li></ul> </p>
}
// }
li.append(aIcon);
var aInput = $('<input>', {
class: 'search_checkbox',
type: 'checkbox',
'data-provider': ak[i],
'data-provider-id': providerId
});
aInput.change(function () {
self.initSearch();
});
li.append(aInput);
li.append(ul);
elements.search_panels.append(li);
}
},
displayPanelOptionTitle: function (sub) {
return $('<a>', {
href: '#',
class: 'ulsub',
text: sub.title
});
},
displayPanelCheckbox: function (ul, sub) {
if (sub.type !== 'checkbox') {
return;
}
var self = this;
var subA = this.displayPanelOptionTitle(sub);
var subAInput = $('<input>', {
class: 'search_checkbox_sub',
type: 'checkbox',
'data-option': sub.name
});
subAInput.change(function () {
self.initSearch();
});
ul.append($('<li>').append(subA).append(subAInput));
},
displayPanelInput: function (ul, sub) {
if (sub.type !== 'input') {
return;
}
var self = this;
var subA = this.displayPanelOptionTitle(sub);
var subAInput = $('<input>', {
class: 'search_input_sub search_input_sub_' + sub.size,
type: 'text',
placeholder: sub.placeholder,
'data-option': sub.name
});
subAInput.on('input', function () {
self.initSearch();
});
ul.append($('<li>').append(subA).append(subAInput));
},
displayPanelTags: function (ul, sub) {
if (sub.type !== 'tags') {
return;
}
var self = this;
var subAInput = $('<input>', {
id: sub.name,
class: 'search_tags_sub',
type: 'text',
placeholder: sub.title,
list: sub.name + '_datalist',
'data-option': sub.name
});
var subADataList = $('<datalist>', {
id: sub.name + '_datalist'
});
sub.list.forEach(function (item) {
subADataList.append($('<option>', {value: item}));
});
/**
* <div class="systemTagsInfoView">
* <div class="systemTagsInputFieldContainer">
* <div id="s2id_autogen15" class="select2-container select2-container-multi
* systemTagsInputField systemtags-select2-container">
* <ul class="select2-choices">
* <li class="select2-search-choice">
* <div>
* <span class="label">dsfsdfds</span>
* </div>
* <a href="#" class="select2-search-choice-close" tabindex="-1"></a>
* </li>
* </ul>
* </div>
* <input class="systemTagsInputField select2-offscreen" name="tags"
* value="5,4,3,1,2,6" tabindex="-1" type="hidden">
* </div>
* </div>
*/
// subAInput.on('change', function (e) {
// var div = $(this);
// if (e.which === 13 && div.val() !== '') {
// self.selectPanelTags($(this).attr('id'));
// }
//
//
// var url = '/apps/' + div.attr('data-provider');
// var route = JSON.parse(div.attr('data-route'));
//
// route.url = url + route.url;
// self.quickSearch(route, div.val(), function (res) {
// self.resultTagsSearch(div, res);
// });
// });
ul.append($('<li>').append(subAInput).append(subADataList));
},
displayPanelSearch: function (appId, ul, sub) {
var self = this;
if (sub.type !== 'search') {
return;
}
var subAInput = $('<input>', {
id: sub.name,
class: 'search_tags_sub',
type: 'text',
placeholder: sub.title,
list: sub.name + '_datalist',
'data-option': sub.name,
'data-provider': appId,
'data-route': JSON.stringify(sub.route)
});
var subADataList = $('<datalist>', {
id: sub.name + '_datalist'
});
subAInput.on('keypress', function (e) {
var div = $(this);
if (e.which === 13 && div.val() !== '') {
self.selectPanelTags($(this).attr('id'));
}
var url = '/apps/' + div.attr('data-provider');
var route = JSON.parse(div.attr('data-route'));
route.url = url + route.url;
self.quickSearch(route, div.val(), function (res) {
self.resultTagsSearch(div, res);
});
});
ul.append($('<li>').append(subAInput).append(subADataList));
},
// selectPanelTags: function (panelId) {
// if (this.currentTagsResult === undefined) {
// return;
// }
//
// var tags = this.currentTagsResult[panelId];
// if (tags.length === 0) {
// return;
// }
//
// if (this.selectedTags[panelId] === undefined)
// this.selectedTags[panelId] = [];
// this.selectedTags[panelId].push(tags[0]);
//
// console.log('etntree' + JSON.stringify(this.selectedTags[panelId]));
// },
//
//
// resultTagsSearch: function (div, res) {
// this.currentTagsResult[div.attr('id')] = res;
// var datalistId = div.attr('data-option') + '_datalist';
// var datalist = $('#' + datalistId);
//
// datalist.empty();
// res.forEach(function (item) {
// datalist.append($('<option>', {value: item}));
// });
// },
getProviders: function () {
var providers = [];
elements.search_panels.find('input').each(function () {
if ($(this).hasClass('search_checkbox') && $(this).is(":checked")) {
providers.push($(this).attr('data-provider-id'));
}
});
if (providers.length === 0) {
return 'all';
}
return providers;
},
getOptions: function () {
var options = {};
elements.search_panels.find('input').each(function () {
if ($(this).hasClass('search_checkbox_sub')) {
options[$(this).attr('data-option')] = (($(this).is(':checked')) ? '1' : '0');
}
if ($(this).hasClass('search_input_sub')) {
options[$(this).attr('data-option')] = $(this).val();
}
});
return options;
},
initSearch: function () {
var search = elements.search_input.val();
if (search.length < 1) {
return false;
}
var providers = this.getProviders();
var options = this.getOptions();
this.displayProviderResults(providers);
var request = {
providers: providers,
options: options,
search: search,
page: curr.page
};
fullTextSearch.search(request, this.searchResult);
return true;
},
quickSearch: function (route, search, callback) {
$.ajax({
method: route.verb,
url: OC.generateUrl(route.url),
data: {
search: search
}
}).done(function (res) {
if (_.has(res, 'error')) {
return;
}
callback(res);
});
},
displayProviderResults: function (providers) {
elements.search_result.children('DIV.provider_header').each(function () {
if (providers === 'all' || providers.indexOf($(this).attr('data-id')) > -1) {
$(this).stop().slideDown(100).fadeTo(settings.delay_provider, 1);
} else if ($(this).css('display') !== 'none') {
$(this).stop().fadeTo(settings.delay_provider, 0).slideUp(100);
}
});
},
resetSearch: function () {
// if (elements.search_input.val() !== '') {
// return;
// }
},
searchResult: function (result) {
if (elements.search_json !== null) {
elements.search_json.text(JSON.stringify(result));
}
// console.log(JSON.stringify(result));
// OCA.notification.onFail('Search returned no result');
// OCA.notification.onSuccess('Search returned ' + res.meta.size + ' result(s)');
},
onError: function (message) {
console.log('error while searching: ' + message);
},
// onEntryGenerated: function (entry) {
// this.deleteEmptyDiv(entry, '#line1');
// this.deleteEmptyDiv(entry, '#line2');
// },
deleteEmptyDiv: function (entry, divId) {
var div = entry.find(divId);
if (div.text() === '') {
div.remove();
}
}
};
OCA.FullTextSearch.Navigate = Navigate;
$(document).ready(function () {
OCA.FullTextSearch.navigate = new Navigate();
});
================================================
FILE: l10n/.gitkeep
================================================
================================================
FILE: l10n/af.js
================================================
OC.L10N.register(
"fulltextsearch",
{
"Search" : "Soek",
"Index not found" : "Indeks nie gevind nie",
"Search on %s" : "Soek op %s",
"General" : "Algemeen",
"Navigation Icon" : "Navigasie-ikoon"
},
"nplurals=2; plural=(n != 1);");
================================================
FILE: l10n/af.json
================================================
{ "translations": {
"Search" : "Soek",
"Index not found" : "Indeks nie gevind nie",
"Search on %s" : "Soek op %s",
"General" : "Algemeen",
"Navigation Icon" : "Navigasie-ikoon"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
================================================
FILE: l10n/an.js
================================================
OC.L10N.register(
"fulltextsearch",
{
"Search" : "Buscar"
},
"nplurals=2; plural=(n != 1);");
================================================
FILE: l10n/an.json
================================================
{ "translations": {
"Search" : "Buscar"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
================================================
FILE: l10n/ar.js
================================================
OC.L10N.register(
"fulltextsearch",
{
"the search returned {total} results in {time} ms" : "عاد البحث بـ {total} نتيجة؛ في {time} مللي ثانية",
"the search in {title} for \"{search}\" returned {total} results in {time} ms" : "البحث في {title} عن \"{search}\" عاد بـ {total} نتيجة؛ في {time} مللي ثانية",
"Search" : "بحث",
"Index not found" : "الفهرس غير موجود",
"Process timed out" : "إنتهي زمن الإجرائية",
"Full Text Search" : "بحث نصي شامل",
"Full text search" : "بحث نصي شامل",
"Core of the full-text search framework for Nextcloud" : "أساس core إطار عمل نكست كلاود للبحث النصي الشامل ",
"Core App of the full-text search framework for your Nextcloud." : "التطبيق الأساسي لإطار عمل نكست كلاود للبحث النصي الش",
"Search on %s" : "البحث في %s",
"Please check the wiki for documentation related to the installation and the configuration of the full text search within your Nextcloud" : "من فضلك، إبحث في الويكي عن وثائق متعلقة بالتنصيب و التهيئة للبحث النصي الشامل داخل خادومك لنكست كلاود",
"General" : "عام",
"Search Platform" : "منصة البحث",
"Select the app to index content and answer search queries." : "إختر التطبيق لفهرسة المحتويات و الاستجابة لاستعلامات البحث.",
"Navigation Icon" : "أيقونه التصفُّح",
"Enable global search within all your content." : "فعّل البحث الشامل داخل كل محتوياتك."
},
"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;");
================================================
FILE: l10n/ar.json
================================================
{ "translations": {
"the search returned {total} results in {time} ms" : "عاد البحث بـ {total} نتيجة؛ في {time} مللي ثانية",
"the search in {title} for \"{search}\" returned {total} results in {time} ms" : "البحث في {title} عن \"{search}\" عاد بـ {total} نتيجة؛ في {time} مللي ثانية",
"Search" : "بحث",
"Index not found" : "الفهرس غير موجود",
"Process timed out" : "إنتهي زمن الإجرائية",
"Full Text Search" : "بحث نصي شامل",
"Full text search" : "بحث نصي شامل",
"Core of the full-text search framework for Nextcloud" : "أساس core إطار عمل نكست كلاود للبحث النصي الشامل ",
"Core App of the full-text search framework for your Nextcloud." : "التطبيق الأساسي لإطار عمل نكست كلاود للبحث النصي الش",
"Search on %s" : "البحث في %s",
"Please check the wiki for documentation related to the installation and the configuration of the full text search within your Nextcloud" : "من فضلك، إبحث في الويكي عن وثائق متعلقة بالتنصيب و التهيئة للبحث النصي الشامل داخل خادومك لنكست كلاود",
"General" : "عام",
"Search Platform" : "منصة البحث",
"Select the app to index content and answer search queries." : "إختر التطبيق لفهرسة المحتويات و الاستجابة لاستعلامات البحث.",
"Navigation Icon" : "أيقونه التصفُّح",
"Enable global search within all your content." : "فعّل البحث الشامل داخل كل محتوياتك."
},"pluralForm" :"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;"
}
================================================
FILE: l10n/ast.js
================================================
OC.L10N.register(
"fulltextsearch",
{
"Search" : "Buscar",
"General" : "Xeneral"
},
"nplurals=2; plural=(n != 1);");
================================================
FILE: l10n/ast.json
================================================
{ "translations": {
"Search" : "Buscar",
"General" : "Xeneral"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
================================================
FILE: l10n/az.js
================================================
OC.L10N.register(
"fulltextsearch",
{
"Search" : "Axtarış",
"General" : "Ümumi"
},
"nplurals=2; plural=(n != 1);");
================================================
FILE: l10n/az.json
================================================
{ "translations": {
"Search" : "Axtarış",
"General" : "Ümumi"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
================================================
FILE: l10n/be.js
================================================
OC.L10N.register(
"fulltextsearch",
{
"Search" : "Пошук",
"General" : "Агульныя"
},
"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);");
================================================
FILE: l10n/be.json
================================================
{ "translations": {
"Search" : "Пошук",
"General" : "Агульныя"
},"pluralForm" :"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);"
}
================================================
FILE: l10n/bg.js
================================================
OC.L10N.register(
"fulltextsearch",
{
"the search returned {total} results in {time} ms" : "търсенето докладва {total} резултата за {time} мс",
"the search in {title} for \"{search}\" returned {total} results in {time} ms" : "търсенето в {title} за „{search}“ докладва {total} резултата за {time} мс",
"Search" : "Търси",
"Index not found" : "Няма открито съдържание",
"Process timed out" : "Времето за изчакване на процеса изтече",
"Full Text Search" : "Пълно текстово търсене",
"Full text search" : "Пълно текстово търсене",
"Core of the full-text search framework for Nextcloud" : "Основа на рамката за пълнотекстово търсене за Nextcloud",
"Core App of the full-text search framework for your Nextcloud." : "Основно приложение на рамката за пълнотекстово търсене за вашия Nextcloud.",
"Search on %s" : "Търси в %s",
"Please check the wiki for documentation related to the installation and the configuration of the full text search within your Nextcloud" : "Моля, проверете wiki за документация, свързана с инсталацията и конфигурацията на пълнотекстово търсене във вашият Nextcloud",
"General" : "Общи",
"Search Platform" : "Платформа за търсене",
"Select the app to index content and answer search queries." : "Изберете приложението, за да индексирате съдържание и да отговорите на заявки за търсене.",
"Navigation Icon" : "Икона за навигация",
"Enable global search within all your content." : "Активиране на глобално търсене в цялото ви съдържание."
},
"nplurals=2; plural=(n != 1);");
================================================
FILE: l10n/bg.json
================================================
{ "translations": {
"the search returned {total} results in {time} ms" : "търсенето докладва {total} резултата за {time} мс",
"the search in {title} for \"{search}\" returned {total} results in {time} ms" : "търсенето в {title} за „{search}“ докладва {total} резултата за {time} мс",
"Search" : "Търси",
"Index not found" : "Няма открито съдържание",
"Process timed out" : "Времето за изчакване на процеса изтече",
"Full Text Search" : "Пълно текстово търсене",
"Full text search" : "Пълно текстово търсене",
"Core of the full-text search framework for Nextcloud" : "Основа на рамката за пълнотекстово търсене за Nextcloud",
"Core App of the full-text search framework for your Nextcloud." : "Основно приложение на рамката за пълнотекстово търсене за вашия Nextcloud.",
"Search on %s" : "Търси в %s",
"Please check the wiki for documentation related to the installation and the configuration of the full text search within your Nextcloud" : "Моля, проверете wiki за документация, свързана с инсталацията и конфигурацията на пълнотекстово търсене във вашият Nextcloud",
"General" : "Общи",
"Search Platform" : "Платформа за търсене",
"Select the app to index content and answer search queries." : "Изберете приложението, за да индексирате съдържание и да отговорите на заявки за търсене.",
"Navigation Icon" : "Икона за навигация",
"Enable global search within all your content." : "Активиране на глобално търсене в цялото ви съдържание."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
================================================
FILE: l10n/bn_BD.js
================================================
OC.L10N.register(
"fulltextsearch",
{
"Search" : "Search",
"General" : "সাধারণ"
},
"nplurals=2; plural=(n != 1);");
================================================
FILE: l10n/bn_BD.json
================================================
{ "translations": {
"Search" : "Search",
"General" : "সাধারণ"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
================================================
FILE: l10n/br.js
================================================
OC.L10N.register(
"fulltextsearch",
{
"the search returned {total} results in {time} ms" : "an enklask en deus roet {total} disoc'h e {time} ms",
"Search" : "Klask",
"Index not found" : "Roll-gerioù kavet ebet",
"Process timed out" : "Poent termenn an argerzh",
"Full text search" : "Klask e tout an destenn",
"Core of the full-text search framework for Nextcloud" : "Kalon an enklask e tout an destenn er framm labour Nextcloud",
"Core App of the full-text search framework for your Nextcloud." : "Meziant Kalon an enklask e tout un destenn er fram labour evit ho Nextcloud",
"Search on %s" : "Klask war %s",
"Please check the wiki for documentation related to the installation and the configuration of the full text search within your Nextcloud" : "Gwiriit er wiki evit an dielvadur liammet d'ar staliadur hag an arventennañ eit ar c'hlasker e tout an destenn e barzh ho Nextcloud",
"General" : "Hollek",
"Search Platform" : "Klask pladenn",
"Select the app to index content and answer search queries." : "Choazit ur meziant da lakaat er roll-gerioù ha respontit d'ar goulennoù enklask",
"Navigation Icon" : "Skeudennig Merdeiñ",
"Enable global search within all your content." : "Aotreañ an enklask hollek e-barzh pep tra."
},
"nplurals=5; plural=((n%10 == 1) && (n%100 != 11) && (n%100 !=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && (n%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 > 19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != 0 && n % 1000000 == 0) ? 3 : 4);");
================================================
FILE: l10n/br.json
================================================
{ "translations": {
"the search returned {total} results in {time} ms" : "an enklask en deus roet {total} disoc'h e {time} ms",
"Search" : "Klask",
"Index not found" : "Roll-gerioù kavet ebet",
"Process timed out" : "Poent termenn an argerzh",
"Full text search" : "Klask e tout an destenn",
"Core of the full-text search framework for Nextcloud" : "Kalon an enklask e tout an destenn er framm labour Nextcloud",
"Core App of the full-text search framework for your Nextcloud." : "Meziant Kalon an enklask e tout un destenn er fram labour evit ho Nextcloud",
"Search on %s" : "Klask war %s",
"Please check the wiki for documentation related to the installation and the configuration of the full text search within your Nextcloud" : "Gwiriit er wiki evit an dielvadur liammet d'ar staliadur hag an arventennañ eit ar c'hlasker e tout an destenn e barzh ho Nextcloud",
"General" : "Hollek",
"Search Platform" : "Klask pladenn",
"Select the app to index content and answer search queries." : "Choazit ur meziant da lakaat er roll-gerioù ha respontit d'ar goulennoù enklask",
"Navigation Icon" : "Skeudennig Merdeiñ",
"Enable global search within all your content." : "Aotreañ an enklask hollek e-barzh pep tra."
},"pluralForm" :"nplurals=5; plural=((n%10 == 1) && (n%100 != 11) && (n%100 !=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && (n%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 > 19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != 0 && n % 1000000 == 0) ? 3 : 4);"
}
================================================
FILE: l10n/bs.js
================================================
OC.L10N.register(
"fulltextsearch",
{
"Search" : "Search"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
================================================
FILE: l10n/bs.json
================================================
{ "translations": {
"Search" : "Search"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
}
================================================
FILE: l10n/ca.js
================================================
OC.L10N.register(
"fulltextsearch",
{
"the search returned {total} results in {time} ms" : "la cerca ha retornat {total} resultats en {time} ms",
"the search in {title} for \"{search}\" returned {total} results in {time} ms" : "La cerca de {title} de \"{search}\" ha donat {total} resultats en {time} ms",
"Search" : "Cerca",
"Index not found" : "Índex no trobat",
"Process timed out" : "Temps d'espera exhaurit",
"Full Text Search" : "Cerca de text complet",
"Full text search" : "Cerca de text complet",
"Core of the full-text search framework for Nextcloud" : "Nucli de l'estructura de cerca de text complet per a Nextcloud",
"Core App of the full-text search framework for your Nextcloud." : "Aplicació nucli de l'estructura de recerca de text complet per al vostre Nextcloud.",
"Search on %s" : "Cerca a %s",
"Please check the wiki for documentation related to the installation and the configuration of the full text search within your Nextcloud" : "Si us plau reviseu el wiki de documentació relacionada amb la instal·lació i configuració de la cerca de text complet dins del vostre Nextcloud",
"General" : "General",
"Search Platform" : "Plataforma de cerca",
"Select the app to index content and answer search queries." : "Selecciona l'aplicació per indexar el contingut i respondre consultes de cerca.",
"Navigation Icon" : "Icona de navegació",
"Enable global search within all your content." : "Habiliteu la cerca global dins de tots els vostres continguts."
},
"nplurals=2; plural=(n != 1);");
================================================
FILE: l10n/ca.json
================================================
{ "translations": {
"the search returned {total} results in {time} ms" : "la cerca ha retornat {total} resultats en {time} ms",
"the search in {title} for \"{search}\" returned {total} results in {time} ms" : "La cerca de {title} de \"{search}\" ha donat {total} resultats en {time} ms",
"Search" : "Cerca",
"Index not found" : "Índex no trobat",
"Process timed out" : "Temps d'espera exhaurit",
"Full Text Search" : "Cerca de text complet",
"Full text search" : "Cerca de text complet",
"Core of the full-text search framework for Nextcloud" : "Nucli de l'estructura de cerca de text complet per a Nextcloud",
"Core App of the full-text search framework for your Nextcloud." : "Aplicació nucli de l'estructura de recerca de text complet per al vostre Nextcloud.",
"Search on %s" : "Cerca a %s",
"Please check the wiki for documentation related to the installation and the configuration of the full text search within your Nextcloud" : "Si us plau reviseu el wiki de documentació relacionada amb la instal·lació i configuració de la cerca de text complet dins del vostre Nextcloud",
"General" : "General",
"Search Platform" : "Plataforma de cerca",
"Select the app to index content and answer search queries." : "Selecciona l'aplicació per indexar el contingut i respondre consultes de cerca.",
"Navigation Icon" : "Icona de navegació",
"Enable global search within all your content." : "Habiliteu la cerca global dins de tots els vostres continguts."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
================================================
FILE: l10n/cs.js
================================================
OC.L10N.register(
"fulltextsearch",
{
"the search returned {total} results in {time} ms" : "vyhledávání nalezlo {total} výsledků v čase {time} ms",
"the search in {title} for \"{search}\" returned {total} results in {time} ms" : "vyhledávání v {title} pro výraz „{search}“ nalezlo {total} výsledků v čase {time} ms",
"Search" : "Hledat",
"Index not found" : "Nenalezen rejstřík",
"Process timed out" : "Překročen časový limit pro zpracování",
"Full Text Search" : "Plnotextové vyhledávání",
"Full text search" : "Plnotextové vyhledávání",
"Core of the full-text search framework for Nextcloud" : "Jádro aplikačního rámce pro plnotextové vyhledávání v Nextcloud",
"Core App of the full-text search framework for your Nextcloud." : "Hlavní aplikace aplikačního rámce pro plnotextové hledání pro váš Nextcloud.",
"Search on %s" : "Hledat v %s",
"Please check the wiki for documentation related to the installation and the configuration of the full text search within your Nextcloud" : "Ohledně instalace a nastavení plnotextového vyhledávání v Nextcloud nahlédněte do dokumentace (na wiki)",
"General" : "Obecné",
"Search Platform" : "Vyhledávací platforma",
"Select the app to index content and answer search queries." : "Vyberte aplikaci kterou indexovat obsah a zodpovídat dotazy vyhledávání.",
"Navigation Icon" : "Ikona navigace",
"Enable global search within all your content." : "Zapnout globální vyhledávání ve veškerém vašem obsahu."
},
"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;");
================================================
FILE: l10n/cs.json
================================================
{ "translations": {
"the search returned {total} results in {time} ms" : "vyhledávání nalezlo {total} výsledků v čase {time} ms",
"the search in {title} for \"{search}\" returned {total} results in {time} ms" : "vyhledávání v {title} pro výraz „{search}“ nalezlo {total} výsledků v čase {time} ms",
"Search" : "Hledat",
"Index not found" : "Nenalezen rejstřík",
"Process timed out" : "Překročen časový limit pro zpracování",
"Full Text Search" : "Plnotextové vyhledávání",
"Full text search" : "Plnotextové vyhledávání",
"Core of the full-text search framework for Nextcloud" : "Jádro aplikačního rámce pro plnotextové vyhledávání v Nextcloud",
"Core App of the full-text search framework for your Nextcloud." : "Hlavní aplikace aplikačního rámce pro plnotextové hledání pro váš Nextcloud.",
"Search on %s" : "Hledat v %s",
"Please check the wiki for documentation related to the installation and the configuration of the full text search within your Nextcloud" : "Ohledně instalace a nastavení plnotextového vyhledávání v Nextcloud nahlédněte do dokumentace (na wiki)",
"General" : "Obecné",
"Search Platform" : "Vyhledávací platforma",
"Select the app to index content and answer search queries." : "Vyberte aplikaci kterou indexovat obsah a zodpovídat dotazy vyhledávání.",
"Navigation Icon" : "Ikona navigace",
"Enable global search within all your content." : "Zapnout globální vyhledávání ve veškerém vašem obsahu."
},"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;"
}
================================================
FILE: l10n/cy_GB.js
================================================
OC.L10N.register(
"fulltextsearch",
{
"Search" : "Chwilio",
"General" : "Cyffredinol"
},
"nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;");
================================================
FILE: l10n/cy_GB.json
================================================
{ "translations": {
"Search" : "Chwilio",
"General" : "Cyffredinol"
},"pluralForm" :"nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;"
}
================================================
FILE: l10n/da.js
================================================
OC.L10N.register(
"fulltextsearch",
{
"the search returned {total} results in {time} ms" : "søgningen retunerede {total} resultater og det tog {time} ms",
"the search in {title} for \"{search}\" returned {total} results in {time} ms" : "søgningen i {title} efter \"{search}\" gav {total} resultater på {time} ms",
"Search" : "Søg",
"Index not found" : "Index ikke fundet",
"Process timed out" : "Processen tog for lang tid",
"Full Text Search" : "Fuld Tekstsøgning",
"Full text search" : "Fuld tekst søgning",
"Core of the full-text search framework for Nextcloud" : "Kernen af det fulde tekstsøgningsframework til Nextcloud",
"Core App of the full-text search framework for your Nextcloud." : "Kerne App i fuldtekstsøgningsframeworket til din Nextcloud.",
"Search on %s" : "Søg på %s",
"Please check the wiki for documentation related to the installation and the configuration of the full text search within your Nextcloud" : "Kontroller venligst Wikien for dokumentation relateret til installationen og konfigurationen af Fuld tekstsøgning i din Nextcloud",
"General" : "Generelt",
"Search Platform" : "Søgeplatform",
"Select the app to index content and answer search queries." : "Vælg app for at indeksere indhold og besvare søgeforespørgsler.",
"Navigation Icon" : "Navigationsikon",
"Enable global search within all your content." : "Aktiver globale søgninger i alt dit indhold."
},
"nplurals=2; plural=(n != 1);");
================================================
FILE: l10n/da.json
================================================
{ "translations": {
"the search returned {total} results in {time} ms" : "søgningen retunerede {total} resultater og det tog {time} ms",
"the search in {title} for \"{search}\" returned {total} results in {time} ms" : "søgningen i {title} efter \"{search}\" gav {total} resultater på {time} ms",
"Search" : "Søg",
"Index not found" : "Index ikke fundet",
"Process timed out" : "Processen tog for lang tid",
"Full Text Search" : "Fuld Tekstsøgning",
"Full text search" : "Fuld tekst søgning",
"Core of the full-text search framework for Nextcloud" : "Kernen af det fulde tekstsøgningsframework til Nextcloud",
"Core App of the full-text search framework for your Nextcloud." : "Kerne App i fuldtekstsøgningsframeworket til din Nextcloud.",
"Search on %s" : "Søg på %s",
"Please check the wiki for documentation related to the installation and the configuration of the full text search within your Nextcloud" : "Kontroller venligst Wikien for dokumentation relateret til installationen og konfigurationen af Fuld tekstsøgning i din Nextcloud",
"General" : "Generelt",
"Search Platform" : "Søgeplatform",
"Select the app to index content and answer search queries." : "Vælg app for at indeksere indhold og besvare søgeforespørgsler.",
"Navigation Icon" : "Navigationsikon",
"Enable global search within all your content." : "Aktiver globale søgninger i alt dit indhold."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
================================================
FILE: l10n/de.js
================================================
OC.L10N.register(
"fulltextsearch",
{
"the search returned {total} results in {time} ms" : "Die Suche ergab {total} Treffer in {time} ms",
"the search in {title} for \"{search}\" returned {total} results in {time} ms" : "Die Suche in {title} nach \"{search}\" ergab {total} Treffer in {time} ms",
"Search" : "Suchen",
"Index not found" : "Index nicht gefunden",
"Process timed out" : "Zeitüberschreitung bei der Verarbeitung",
"Full Text Search" : "Volltextsuche",
"Full text search" : "Volltextsuche",
"Core of the full-text search framework for Nextcloud" : "Kernstück des Volltextsuche-Frameworks für Nextcloud",
"Core App of the full-text search framework for your Nextcloud." : "Haupt-App des Volltextsuche-Frameworks für Nextcloud.",
"Search on %s" : "Suche in %s",
"Please check the wiki for documentation related to the installation and the configuration of the full text search within your Nextcloud" : "Informationen zur Installation und Konfiguration der Volltextsuche unter Nextcloud findest du im Wiki",
"General" : "Allgemein",
"Search Platform" : "Suchplattform",
"Select the app to index content and answer search queries." : "Wähle die App, die Inhalte indizieren und Such-Anfragen beantworten soll.",
"Navigation Icon" : "Navigations-Symbol",
"Enable global search within all your content." : "Globale Suche über alle Inhalte aktivieren."
},
"nplurals=2; plural=(n != 1);");
================================================
FILE: l10n/de.json
================================================
{ "translations": {
"the search returned {total} results in {time} ms" : "Die Suche ergab {total} Treffer in {time} ms",
"the search in {title} for \"{search}\" returned {total} results in {time} ms" : "Die Suche in {title} nach \"{search}\" ergab {total} Treffer in {time} ms",
"Search" : "Suchen",
"Index not found" : "Index nicht gefunden",
"Process timed out" : "Zeitüberschreitung bei der Verarbeitung",
"Full Text Search" : "Volltextsuche",
"Full text search" : "Volltextsuche",
"Core of the full-text search framework for Nextcloud" : "Kernstück des Volltextsuche-Frameworks für Nextcloud",
"Core App of the full-text search framework for your Nextcloud." : "Haupt-App des Volltextsuche-Frameworks für Nextcloud.",
"Search on %s" : "Suche in %s",
"Please check the wiki for documentation related to the installation and the configuration of the full text search within your Nextcloud" : "Informationen zur Installation und Konfiguration der Volltextsuche unter Nextcloud findest du im Wiki",
"General" : "Allgemein",
"Search Platform" : "Suchplattform",
"Select the app to index content and answer search queries." : "Wähle die App, die Inhalte indizieren und Such-Anfragen beantworten soll.",
"Navigation Icon" : "Navigations-Symbol",
"Enable global search within all your content." : "Globale Suche über alle Inhalte aktivieren."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
================================================
FILE: l10n/de_DE.js
================================================
OC.L10N.register(
"fulltextsearch",
{
"the search returned {total} results in {time} ms" : "Die Suche ergab {total} Treffer in {time} ms",
"the search in {title} for \"{search}\" returned {total} results in {time} ms" : "Die Suche in {title} nach \"{search}\" ergab {total} Treffer in {time} ms",
"Search" : "Suchen",
"Index not found" : "Index nicht gefunden",
"Process timed out" : "Zeitüberschreitung bei der Verarbeitung",
"Full Text Search" : "Volltextsuche",
"Full text search" : "Volltextsuche",
"Core of the full-text search framework for Nextcloud" : "Kern des Sytems für die Volltextsuche in Nextcloud",
"Core App of the full-text search framework for your Nextcloud." : "Haupt-App für die Volltextsuche in Nextcloud",
"Search on %s" : "Suche in %s",
"Please check the wiki for documentation related to the installation and the configuration of the full text search within your Nextcloud" : "Informationen zur Installation und Konfiguration der Volltextsuche unter Nextcloud finden Sie im Wiki",
"General" : "Allgemein",
"Search Platform" : "Suchplattform",
"Select the app to index content and answer search queries." : "Wählen Sie die App, die Inhalte indizieren und Suchanfragen beantworten soll.",
"Navigation Icon" : "Navigations-Symbol",
"Enable global search within all your content." : "Globale Suche für alle Inhalte aktivieren."
},
"nplurals=2; plural=(n != 1);");
================================================
FILE: l10n/de_DE.json
================================================
{ "translations": {
"the search returned {total} results in {time} ms" : "Die Suche ergab {total} Treffer in {time} ms",
"the search in {title} for \"{search}\" returned {total} results in {time} ms" : "Die Suche in {title} nach \"{search}\" ergab {total} Treffer in {time} ms",
"Search" : "Suchen",
"Index not found" : "Index nicht gefunden",
"Process timed out" : "Zeitüberschreitung bei der Verarbeitung",
"Full Text Search" : "Volltextsuche",
"Full text search" : "Volltextsuche",
"Core of the full-text search framework for Nextcloud" : "Kern des Sytems für die Volltextsuche in Nextcloud",
"Core App of the full-text search framework for your Nextcloud." : "Haupt-App für die Volltextsuche in Nextcloud",
"Search on %s" : "Suche in %s",
"Please check the wiki for documentation related to the installation and the configuration of the full text search within your Nextcloud" : "Informationen zur Installation und Konfiguration der Volltextsuche unter Nextcloud finden Sie im Wiki",
"General" : "Allgemein",
"Search Platform" : "Suchplattform",
"Select the app to index content and answer search queries." : "Wählen Sie die App, die Inhalte indizieren und
gitextract_io1g15ui/
├── .github/
│ └── workflows/
│ ├── appstore-build-publish.yml
│ ├── pr-feedback.yml
│ └── reuse.yml
├── .gitignore
├── .scrutinizer.yml
├── .tx/
│ └── config
├── AUTHORS.md
├── CHANGELOG.md
├── LICENSE
├── LICENSES/
│ ├── AGPL-3.0-or-later.txt
│ ├── Apache-2.0.txt
│ ├── CC0-1.0.txt
│ └── MIT.txt
├── Makefile
├── README.md
├── REUSE.toml
├── appinfo/
│ ├── info.xml
│ └── routes.php
├── composer.json
├── css/
│ ├── admin.css
│ ├── fulltextsearch.css
│ └── navigate.css
├── docs/
│ ├── api/
│ │ └── collections.md
│ ├── commands.md
│ ├── configuration.md
│ ├── index.md
│ └── installation.md
├── js/
│ ├── admin.elements.js
│ ├── admin.js
│ ├── admin.settings.js
│ ├── fulltextsearch.v1.api.js
│ ├── fulltextsearch.v1.js
│ ├── fulltextsearch.v1.navigation.js
│ ├── fulltextsearch.v1.result.js
│ ├── fulltextsearch.v1.searchbox.js
│ ├── fulltextsearch.v1.settings.js
│ └── navigate.js
├── l10n/
│ ├── .gitkeep
│ ├── af.js
│ ├── af.json
│ ├── an.js
│ ├── an.json
│ ├── ar.js
│ ├── ar.json
│ ├── ast.js
│ ├── ast.json
│ ├── az.js
│ ├── az.json
│ ├── be.js
│ ├── be.json
│ ├── bg.js
│ ├── bg.json
│ ├── bn_BD.js
│ ├── bn_BD.json
│ ├── br.js
│ ├── br.json
│ ├── bs.js
│ ├── bs.json
│ ├── ca.js
│ ├── ca.json
│ ├── cs.js
│ ├── cs.json
│ ├── cy_GB.js
│ ├── cy_GB.json
│ ├── da.js
│ ├── da.json
│ ├── de.js
│ ├── de.json
│ ├── de_DE.js
│ ├── de_DE.json
│ ├── el.js
│ ├── el.json
│ ├── en_GB.js
│ ├── en_GB.json
│ ├── eo.js
│ ├── eo.json
│ ├── es.js
│ ├── es.json
│ ├── es_419.js
│ ├── es_419.json
│ ├── es_AR.js
│ ├── es_AR.json
│ ├── es_CL.js
│ ├── es_CL.json
│ ├── es_CO.js
│ ├── es_CO.json
│ ├── es_CR.js
│ ├── es_CR.json
│ ├── es_DO.js
│ ├── es_DO.json
│ ├── es_EC.js
│ ├── es_EC.json
│ ├── es_GT.js
│ ├── es_GT.json
│ ├── es_HN.js
│ ├── es_HN.json
│ ├── es_MX.js
│ ├── es_MX.json
│ ├── es_NI.js
│ ├── es_NI.json
│ ├── es_PA.js
│ ├── es_PA.json
│ ├── es_PE.js
│ ├── es_PE.json
│ ├── es_PR.js
│ ├── es_PR.json
│ ├── es_PY.js
│ ├── es_PY.json
│ ├── es_SV.js
│ ├── es_SV.json
│ ├── es_UY.js
│ ├── es_UY.json
│ ├── et_EE.js
│ ├── et_EE.json
│ ├── eu.js
│ ├── eu.json
│ ├── fa.js
│ ├── fa.json
│ ├── fi.js
│ ├── fi.json
│ ├── fr.js
│ ├── fr.json
│ ├── ga.js
│ ├── ga.json
│ ├── gd.js
│ ├── gd.json
│ ├── gl.js
│ ├── gl.json
│ ├── he.js
│ ├── he.json
│ ├── hr.js
│ ├── hr.json
│ ├── hu.js
│ ├── hu.json
│ ├── hy.js
│ ├── hy.json
│ ├── ia.js
│ ├── ia.json
│ ├── id.js
│ ├── id.json
│ ├── is.js
│ ├── is.json
│ ├── it.js
│ ├── it.json
│ ├── ja.js
│ ├── ja.json
│ ├── ka.js
│ ├── ka.json
│ ├── ka_GE.js
│ ├── ka_GE.json
│ ├── kab.js
│ ├── kab.json
│ ├── km.js
│ ├── km.json
│ ├── kn.js
│ ├── kn.json
│ ├── ko.js
│ ├── ko.json
│ ├── lb.js
│ ├── lb.json
│ ├── lo.js
│ ├── lo.json
│ ├── lt_LT.js
│ ├── lt_LT.json
│ ├── lv.js
│ ├── lv.json
│ ├── mk.js
│ ├── mk.json
│ ├── mn.js
│ ├── mn.json
│ ├── ms_MY.js
│ ├── ms_MY.json
│ ├── nb.js
│ ├── nb.json
│ ├── nl.js
│ ├── nl.json
│ ├── nn_NO.js
│ ├── nn_NO.json
│ ├── oc.js
│ ├── oc.json
│ ├── pl.js
│ ├── pl.json
│ ├── pt_BR.js
│ ├── pt_BR.json
│ ├── pt_PT.js
│ ├── pt_PT.json
│ ├── ro.js
│ ├── ro.json
│ ├── ru.js
│ ├── ru.json
│ ├── sc.js
│ ├── sc.json
│ ├── si.js
│ ├── si.json
│ ├── sk.js
│ ├── sk.json
│ ├── sl.js
│ ├── sl.json
│ ├── sq.js
│ ├── sq.json
│ ├── sr.js
│ ├── sr.json
│ ├── sr@latin.js
│ ├── sr@latin.json
│ ├── sv.js
│ ├── sv.json
│ ├── sw.js
│ ├── sw.json
│ ├── ta.js
│ ├── ta.json
│ ├── th.js
│ ├── th.json
│ ├── tk.js
│ ├── tk.json
│ ├── tr.js
│ ├── tr.json
│ ├── ug.js
│ ├── ug.json
│ ├── uk.js
│ ├── uk.json
│ ├── ur_PK.js
│ ├── ur_PK.json
│ ├── uz.js
│ ├── uz.json
│ ├── vi.js
│ ├── vi.json
│ ├── zh_CN.js
│ ├── zh_CN.json
│ ├── zh_HK.js
│ ├── zh_HK.json
│ ├── zh_TW.js
│ └── zh_TW.json
├── lib/
│ ├── ACommandBase.php
│ ├── AppInfo/
│ │ └── Application.php
│ ├── Capabilities.php
│ ├── Command/
│ │ ├── Check.php
│ │ ├── CollectionDelete.php
│ │ ├── CollectionInit.php
│ │ ├── CollectionLink.php
│ │ ├── CollectionList.php
│ │ ├── Configure.php
│ │ ├── DocumentIndex.php
│ │ ├── DocumentPlatform.php
│ │ ├── DocumentProvider.php
│ │ ├── DocumentStatus.php
│ │ ├── Index.php
│ │ ├── Live.php
│ │ ├── Reset.php
│ │ ├── Search.php
│ │ ├── Stop.php
│ │ └── Test.php
│ ├── ConfigLexicon.php
│ ├── Controller/
│ │ ├── ApiController.php
│ │ ├── CollectionController.php
│ │ ├── NavigationController.php
│ │ ├── SettingsController.php
│ │ └── TemplatesController.php
│ ├── Cron/
│ │ └── Index.php
│ ├── Db/
│ │ ├── CoreRequestBuilder.php
│ │ ├── IndexesRequest.php
│ │ ├── IndexesRequestBuilder.php
│ │ ├── TickRequest.php
│ │ └── TickRequestBuilder.php
│ ├── Exceptions/
│ │ ├── CollectionArgumentException.php
│ │ ├── DatabaseException.php
│ │ ├── EmptySearchException.php
│ │ ├── IndexDoesNotExistException.php
│ │ ├── InterruptException.php
│ │ ├── MissingDocumentException.php
│ │ ├── NoResultException.php
│ │ ├── NotIndexableDocumentException.php
│ │ ├── PlatformDoesNotExistException.php
│ │ ├── PlatformIsNotCompatibleException.php
│ │ ├── PlatformMustBeSingleException.php
│ │ ├── PlatformNotDefinedException.php
│ │ ├── PlatformNotSelectedException.php
│ │ ├── PlatformTemporaryException.php
│ │ ├── ProviderDoesNotExistException.php
│ │ ├── ProviderIsNotCompatibleException.php
│ │ ├── ProviderIsNotUniqueException.php
│ │ ├── ProviderOptionsDoesNotExistException.php
│ │ ├── RunnerAlreadyUpException.php
│ │ ├── TickDoesNotExistException.php
│ │ └── TickIsNotAliveException.php
│ ├── Migration/
│ │ ├── Version2000Date20201208130255.php
│ │ ├── Version23001Date20220408140253.php
│ │ ├── Version23001Date20220505144434.php
│ │ ├── Version2400Date202201301329.php
│ │ ├── Version2401Date202301170001.php
│ │ ├── Version2801Date202309200001.php
│ │ └── Version31001Date20250210105322.php
│ ├── Model/
│ │ ├── Index.php
│ │ ├── IndexOptions.php
│ │ ├── PlatformWrapper.php
│ │ ├── ProviderIndexes.php
│ │ ├── ProviderWrapper.php
│ │ ├── Runner.php
│ │ ├── SearchRequest.php
│ │ ├── SearchResult.php
│ │ └── Tick.php
│ ├── Provider/
│ │ └── TestProvider.php
│ ├── Search/
│ │ ├── UnifiedSearchProvider.php
│ │ └── UnifiedSearchResult.php
│ ├── Service/
│ │ ├── CliService.php
│ │ ├── CollectionService.php
│ │ ├── ConfigService.php
│ │ ├── IndexService.php
│ │ ├── PlatformService.php
│ │ ├── ProviderService.php
│ │ ├── RunningService.php
│ │ ├── SearchService.php
│ │ ├── SettingsService.php
│ │ └── TestService.php
│ ├── Settings/
│ │ ├── Admin.php
│ │ └── AdminSection.php
│ └── Tools/
│ ├── Exceptions/
│ │ ├── ArrayNotFoundException.php
│ │ ├── ItemNotFoundException.php
│ │ ├── MalformedArrayException.php
│ │ └── UnknownTypeException.php
│ └── Traits/
│ └── TArrayTools.php
├── mkdocs.yml
├── screenshots/
│ └── draw.io/
│ ├── Index.xml
│ └── Search.xml
└── templates/
├── navigate.php
└── settings.admin.php
SYMBOL INDEX (648 symbols across 88 files)
FILE: lib/ACommandBase.php
class ACommandBase (line 18) | abstract class ACommandBase extends Base {
method abort (line 20) | abstract public function abort();
FILE: lib/AppInfo/Application.php
class Application (line 39) | class Application extends App implements IBootstrap {
method __construct (line 49) | public function __construct(array $params = []) {
method register (line 57) | public function register(IRegistrationContext $context): void {
method boot (line 69) | public function boot(IBootContext $context): void {
method registerServices (line 79) | protected function registerServices(ContainerInterface $container) {
method registerNavigation (line 98) | protected function registerNavigation(IServerContainer $container) {
method fullTextSearchNavigation (line 116) | private function fullTextSearchNavigation(): array {
FILE: lib/Capabilities.php
class Capabilities (line 23) | class Capabilities implements ICapability {
method __construct (line 35) | public function __construct(ProviderService $providerService) {
method getCapabilities (line 57) | public function getCapabilities(): array {
FILE: lib/Command/Check.php
class Check (line 23) | class Check extends Base {
method __construct (line 24) | public function __construct(
method configure (line 37) | protected function configure() {
method execute (line 52) | protected function execute(InputInterface $input, OutputInterface $out...
method displayAsJson (line 73) | private function displayAsJson(): array {
method displayPlatform (line 125) | private function displayPlatform(OutputInterface $output) {
method displayProviders (line 158) | private function displayProviders(OutputInterface $output) {
FILE: lib/Command/CollectionDelete.php
class CollectionDelete (line 20) | class CollectionDelete extends Base {
method __construct (line 30) | public function __construct(CollectionService $collectionService) {
method configure (line 40) | protected function configure() {
method execute (line 54) | protected function execute(InputInterface $input, OutputInterface $out...
FILE: lib/Command/CollectionInit.php
class CollectionInit (line 27) | class CollectionInit extends Base {
method __construct (line 53) | public function __construct(
method configure (line 73) | protected function configure() {
method execute (line 88) | protected function execute(InputInterface $input, OutputInterface $out...
method indexProvider (line 141) | private function indexProvider(
FILE: lib/Command/CollectionLink.php
class CollectionLink (line 23) | class CollectionLink extends Base {
method __construct (line 24) | public function __construct(
method configure (line 30) | protected function configure() {
method execute (line 46) | protected function execute(InputInterface $input, OutputInterface $out...
FILE: lib/Command/CollectionList.php
class CollectionList (line 18) | class CollectionList extends Base {
method __construct (line 19) | public function __construct(
method configure (line 30) | protected function configure() {
method execute (line 43) | protected function execute(InputInterface $input, OutputInterface $out...
FILE: lib/Command/Configure.php
class Configure (line 18) | class Configure extends Base {
method __construct (line 19) | public function __construct(
method configure (line 25) | protected function configure() {
method execute (line 32) | protected function execute(InputInterface $input, OutputInterface $out...
FILE: lib/Command/DocumentIndex.php
class DocumentIndex (line 21) | class DocumentIndex extends Base {
method __construct (line 22) | public function __construct(
method configure (line 33) | protected function configure() {
method execute (line 49) | protected function execute(InputInterface $input, OutputInterface $out...
FILE: lib/Command/DocumentPlatform.php
class DocumentPlatform (line 20) | class DocumentPlatform extends Base {
method __construct (line 21) | public function __construct(
method configure (line 31) | protected function configure() {
method execute (line 47) | protected function execute(InputInterface $input, OutputInterface $out...
FILE: lib/Command/DocumentProvider.php
class DocumentProvider (line 22) | class DocumentProvider extends Base {
method __construct (line 23) | public function __construct(
method configure (line 33) | protected function configure() {
method execute (line 50) | protected function execute(InputInterface $input, OutputInterface $out...
FILE: lib/Command/DocumentStatus.php
class DocumentStatus (line 22) | class DocumentStatus extends Base {
method __construct (line 31) | public function __construct(
method configure (line 41) | protected function configure() {
method execute (line 59) | protected function execute(InputInterface $input, OutputInterface $out...
method statusConvertToString (line 104) | private function statusConvertToString(int $status): string {
method statusConvertFromString (line 136) | private function statusConvertFromString(string $status): int {
FILE: lib/Command/Index.php
class Index (line 37) | class Index extends ACommandBase {
method __construct (line 108) | public function __construct(
method configure (line 124) | protected function configure() {
method execute (line 143) | protected function execute(InputInterface $input, OutputInterface $out...
method onKeyPressed (line 220) | public function onKeyPressed(string $key) {
method onNewIndexError (line 275) | public function onNewIndexError(array $error) {
method onNewIndexResult (line 284) | public function onNewIndexResult(array $result) {
method testPlatform (line 293) | private function testPlatform() {
method indexProvider (line 309) | private function indexProvider(IFullTextSearchProvider $provider, Inde...
method generateIndexOptions (line 340) | private function generateIndexOptions(InputInterface $input): IndexOpt...
method isIncludedProvider (line 366) | private function isIncludedProvider(IndexOptions $options, string $pro...
method generateUserList (line 385) | private function generateUserList(IndexOptions $options): array {
method generatePanels (line 401) | private function generatePanels(IndexOptions $options) {
method displayError (line 528) | private function displayError(int $pos = 0) {
method displayResult (line 580) | private function displayResult(int $pos = 0) {
method getNavigationError (line 642) | private function getNavigationError(int $pos, bool $isFirst, bool $isL...
method getNavigationResult (line 683) | private function getNavigationResult(int $pos, bool $isFirst, bool $is...
method generateIndexErrors (line 719) | private function generateIndexErrors() {
method deleteError (line 739) | private function deleteError() {
method abort (line 788) | public function abort() {
FILE: lib/Command/Live.php
class Live (line 36) | class Live extends ACommandBase {
method __construct (line 118) | public function __construct(
method configure (line 136) | protected function configure() {
method execute (line 158) | protected function execute(InputInterface $input, OutputInterface $out...
method liveCycle (line 229) | private function liveCycle() {
method onKeyPressed (line 275) | public function onKeyPressed(string $key) {
method onNewIndexError (line 330) | public function onNewIndexError(array $error) {
method onNewIndexResult (line 338) | public function onNewIndexResult(array $result) {
method generatePanels (line 347) | private function generatePanels(bool $commands) {
method generateIndexErrors (line 465) | private function generateIndexErrors() {
method displayResult (line 486) | private function displayResult(int $pos = 0) {
method displayError (line 544) | private function displayError(int $pos = 0) {
method getNavigationResult (line 601) | private function getNavigationResult(int $pos, bool $isFirst, bool $is...
method getNavigationError (line 641) | private function getNavigationError(int $pos, bool $isFirst, bool $isL...
method deleteError (line 677) | private function deleteError() {
method abort (line 726) | public function abort() {
FILE: lib/Command/Reset.php
class Reset (line 31) | class Reset extends ACommandBase {
method __construct (line 35) | public function __construct(
method configure (line 44) | protected function configure() {
method execute (line 59) | protected function execute(InputInterface $input, OutputInterface $out...
method abort (line 124) | public function abort() {
FILE: lib/Command/Search.php
class Search (line 20) | class Search extends Base {
method __construct (line 21) | public function __construct(
method configure (line 31) | protected function configure() {
method execute (line 49) | protected function execute(InputInterface $input, OutputInterface $out...
FILE: lib/Command/Stop.php
class Stop (line 17) | class Stop extends Base {
method __construct (line 18) | public function __construct(
method configure (line 28) | protected function configure() {
method execute (line 41) | protected function execute(InputInterface $input, OutputInterface $out...
FILE: lib/Command/Test.php
class Test (line 40) | class Test extends ACommandBase {
method __construct (line 48) | public function __construct(
method configure (line 62) | protected function configure() {
method execute (line 81) | protected function execute(InputInterface $input, OutputInterface $out...
method generateMockProvider (line 136) | private function generateMockProvider(): IFullTextSearchProvider {
method output (line 151) | private function output(OutputInterface $output, string $line, bool $i...
method outputResult (line 164) | private function outputResult(OutputInterface $output, bool $result) {
method convertBoolToLine (line 178) | private function convertBoolToLine(bool $result, bool &$isNewLine): st...
method testCreatingProvider (line 197) | private function testCreatingProvider(OutputInterface $output): IFullT...
method testMockedProvider (line 210) | private function testMockedProvider(
method testLoadingPlatform (line 228) | private function testLoadingPlatform(OutputInterface $output): IFullTe...
method testLockingProcess (line 253) | private function testLockingProcess(
method testResetTest (line 274) | private function testResetTest(OutputInterface $output, IFullTextSearc...
method testInitIndexing (line 286) | private function testInitIndexing(OutputInterface $output, IFullTextSe...
method testIndexingDocuments (line 301) | private function testIndexingDocuments(
method testContentLicense (line 324) | private function testContentLicense(
method testSearchSimple (line 361) | private function testSearchSimple(
method testUpdatingDocumentsAccess (line 430) | private function testUpdatingDocumentsAccess(
method testSearchAccess (line 456) | private function testSearchAccess(
method testSearchShare (line 488) | private function testSearchShare(
method testUnlockingProcess (line 507) | private function testUnlockingProcess(OutputInterface $output) {
method search (line 525) | private function search(
method searchGroups (line 563) | private function searchGroups(
method searchUsers (line 588) | private function searchUsers(
method compareSearchResult (line 607) | private function compareSearchResult(SearchResult $searchResult, array...
method pause (line 627) | private function pause(OutputInterface $output, int $s) {
method abort (line 645) | public function abort() {
FILE: lib/ConfigLexicon.php
class ConfigLexicon (line 21) | class ConfigLexicon implements ILexicon {
method getStrictness (line 30) | public function getStrictness(): Strictness {
method getAppConfigs (line 34) | public function getAppConfigs(): array {
method getUserConfigs (line 46) | public function getUserConfigs(): array {
FILE: lib/Controller/ApiController.php
class ApiController (line 23) | class ApiController extends Controller {
method __construct (line 25) | public function __construct(
method search (line 43) | public function search(string $request): DataResponse {
method searchFromRemote (line 57) | public function searchFromRemote(string $request): DataResponse {
method searchDocuments (line 67) | private function searchDocuments(SearchRequest $request): DataResponse {
FILE: lib/Controller/CollectionController.php
class CollectionController (line 24) | class CollectionController extends OCSController {
method __construct (line 25) | public function __construct(
method getQueue (line 43) | public function getQueue(string $collection, int $length = 0): DataRes...
method resetCollection (line 64) | public function resetCollection(string $collection): DataResponse {
method indexDocument (line 87) | public function indexDocument(string $collection, string $providerId, ...
method updateStatusDone (line 115) | public function updateStatusDone(
method confirmAccess (line 140) | private function confirmAccess(string $collection): void {
method displayDocument (line 161) | private function displayDocument(IIndexDocument $document): array {
FILE: lib/Controller/NavigationController.php
class NavigationController (line 20) | class NavigationController extends Controller {
method __construct (line 21) | public function __construct(
method navigate (line 37) | public function navigate(): TemplateResponse {
FILE: lib/Controller/SettingsController.php
class SettingsController (line 20) | class SettingsController extends Controller {
method __construct (line 21) | public function __construct(
method getSettingsAdmin (line 29) | public function getSettingsAdmin(): DataResponse {
method setSettingsAdmin (line 36) | public function setSettingsAdmin(array $data): DataResponse {
FILE: lib/Controller/TemplatesController.php
class TemplatesController (line 28) | class TemplatesController extends Controller {
method __construct (line 29) | public function __construct(
method getOptionsPanel (line 46) | public function getOptionsPanel(string $providerId): DataResponse {
method getNavigationPanels (line 78) | public function getNavigationPanels(): DataResponse {
FILE: lib/Cron/Index.php
class Index (line 30) | class Index extends TimedJob {
method __construct (line 35) | public function __construct(
method run (line 55) | protected function run($argument) {
method liveCycle (line 77) | private function liveCycle() {
method shouldWeGetAllIndex (line 113) | private function shouldWeGetAllIndex(): bool {
method setLastErrReset (line 133) | private function setLastErrReset() {
FILE: lib/Db/CoreRequestBuilder.php
class CoreRequestBuilder (line 23) | class CoreRequestBuilder {
method __construct (line 30) | public function __construct(
method reconnect (line 37) | protected function reconnect(Exception $ex): void {
method limitToId (line 68) | protected function limitToId(IQueryBuilder $qb, int $id) {
method limitToOwnerId (line 79) | protected function limitToOwnerId(IQueryBuilder $qb, string $userId) {
method limitToProviderId (line 90) | protected function limitToProviderId(IQueryBuilder $qb, string $provid...
method limitToDocumentId (line 101) | protected function limitToDocumentId(IQueryBuilder $qb, string $docume...
method limitToCollection (line 112) | protected function limitToCollection(IQueryBuilder $qb, string $collec...
method limitToErr (line 122) | protected function limitToErr(IQueryBuilder $qb) {
method limitToNoErr (line 133) | protected function limitToNoErr(IQueryBuilder $qb) {
method limitToDocumentIds (line 145) | protected function limitToDocumentIds(IQueryBuilder $qb, array $docume...
method limitToSource (line 156) | protected function limitToSource(IQueryBuilder $qb, string $source) {
method limitToStatus (line 167) | protected function limitToStatus(IQueryBuilder $qb, string $status) {
method limitToDBField (line 177) | private function limitToDBField(IQueryBuilder $qb, string $field, stri...
method limitToDBFieldInt (line 190) | private function limitToDBFieldInt(IQueryBuilder $qb, string $field, i...
method limitToDBFieldArray (line 204) | private function limitToDBFieldArray(IQueryBuilder $qb, string $field,...
method limitToQueuedIndexes (line 225) | protected function limitToQueuedIndexes(IQueryBuilder $qb) {
FILE: lib/Db/IndexesRequest.php
class IndexesRequest (line 24) | class IndexesRequest extends IndexesRequestBuilder {
method create (line 31) | public function create(Index $index): bool {
method resetError (line 67) | public function resetError(Index $index): bool {
method resetAllErrors (line 90) | public function resetAllErrors() {
method getErrorIndexes (line 102) | public function getErrorIndexes(): array {
method update (line 129) | public function update(Index $index, bool $statusOnly = false): void {
method updateStatus (line 172) | public function updateStatus(string $collection, string $providerId, s...
method updateStatuses (line 198) | public function updateStatuses(string $collection, string $providerId,...
method resetCollection (line 226) | public function resetCollection(string $collection) {
method deleteIndex (line 239) | public function deleteIndex(IIndex $index) {
method deleteCollection (line 260) | public function deleteCollection(string $collection): void {
method deleteFromProviderId (line 271) | public function deleteFromProviderId(string $providerId, string $colle...
method reset (line 282) | public function reset(string $collection = ''): void {
method getIndex (line 301) | public function getIndex(string $providerId, string $documentId, strin...
method getIndexes (line 338) | public function getIndexes(string $providerId, string $documentId): ar...
method getQueuedIndexes (line 368) | public function getQueuedIndexes(string $collection = '', bool $all = ...
method getIndexesFromProvider (line 409) | public function getIndexesFromProvider(string $providerId): array {
method getCollections (line 437) | public function getCollections(bool $local = true): array {
FILE: lib/Db/IndexesRequestBuilder.php
class IndexesRequestBuilder (line 22) | class IndexesRequestBuilder extends CoreRequestBuilder {
method getIndexesInsertSql (line 33) | protected function getIndexesInsertSql(): IQueryBuilder {
method getIndexesUpdateSql (line 46) | protected function getIndexesUpdateSql(): IQueryBuilder {
method getIndexesSelectSql (line 59) | protected function getIndexesSelectSql(): IQueryBuilder {
method getIndexesDeleteSql (line 80) | protected function getIndexesDeleteSql(): IQueryBuilder {
method parseIndexesSelectSql (line 93) | protected function parseIndexesSelectSql(array $data): Index {
FILE: lib/Db/TickRequest.php
class TickRequest (line 20) | class TickRequest extends TickRequestBuilder {
method create (line 28) | public function create(Tick $tick): int {
method update (line 59) | public function update(Tick $tick): bool {
method getTickById (line 95) | public function getTickById(int $id): Tick {
method getTicksByStatus (line 126) | public function getTicksByStatus(string $status): array {
FILE: lib/Db/TickRequestBuilder.php
class TickRequestBuilder (line 22) | class TickRequestBuilder extends CoreRequestBuilder {
method getTickInsertSql (line 33) | protected function getTickInsertSql(): IQueryBuilder {
method getTickUpdateSql (line 46) | protected function getTickUpdateSql(): IQueryBuilder {
method getTickSelectSql (line 59) | protected function getTickSelectSql(): IQueryBuilder {
method getTickDeleteSql (line 79) | protected function getTickDeleteSql(): IQueryBuilder {
method parseTickSelectSql (line 92) | protected function parseTickSelectSql(array $data): Tick {
FILE: lib/Exceptions/CollectionArgumentException.php
class CollectionArgumentException (line 15) | class CollectionArgumentException extends Exception {
FILE: lib/Exceptions/DatabaseException.php
class DatabaseException (line 15) | class DatabaseException extends Exception {
FILE: lib/Exceptions/EmptySearchException.php
class EmptySearchException (line 15) | class EmptySearchException extends Exception {
FILE: lib/Exceptions/IndexDoesNotExistException.php
class IndexDoesNotExistException (line 15) | class IndexDoesNotExistException extends Exception {
FILE: lib/Exceptions/InterruptException.php
class InterruptException (line 15) | class InterruptException extends Exception {
FILE: lib/Exceptions/MissingDocumentException.php
class MissingDocumentException (line 15) | class MissingDocumentException extends Exception {
FILE: lib/Exceptions/NoResultException.php
class NoResultException (line 15) | class NoResultException extends Exception {
FILE: lib/Exceptions/NotIndexableDocumentException.php
class NotIndexableDocumentException (line 15) | class NotIndexableDocumentException extends Exception {
FILE: lib/Exceptions/PlatformDoesNotExistException.php
class PlatformDoesNotExistException (line 15) | class PlatformDoesNotExistException extends Exception {
FILE: lib/Exceptions/PlatformIsNotCompatibleException.php
class PlatformIsNotCompatibleException (line 15) | class PlatformIsNotCompatibleException extends Exception {
FILE: lib/Exceptions/PlatformMustBeSingleException.php
class PlatformMustBeSingleException (line 15) | class PlatformMustBeSingleException extends Exception {
FILE: lib/Exceptions/PlatformNotDefinedException.php
class PlatformNotDefinedException (line 15) | class PlatformNotDefinedException extends Exception {
FILE: lib/Exceptions/PlatformNotSelectedException.php
class PlatformNotSelectedException (line 15) | class PlatformNotSelectedException extends Exception {
FILE: lib/Exceptions/PlatformTemporaryException.php
class PlatformTemporaryException (line 17) | class PlatformTemporaryException extends Exception {
FILE: lib/Exceptions/ProviderDoesNotExistException.php
class ProviderDoesNotExistException (line 15) | class ProviderDoesNotExistException extends Exception {
FILE: lib/Exceptions/ProviderIsNotCompatibleException.php
class ProviderIsNotCompatibleException (line 15) | class ProviderIsNotCompatibleException extends Exception {
FILE: lib/Exceptions/ProviderIsNotUniqueException.php
class ProviderIsNotUniqueException (line 15) | class ProviderIsNotUniqueException extends Exception {
FILE: lib/Exceptions/ProviderOptionsDoesNotExistException.php
class ProviderOptionsDoesNotExistException (line 15) | class ProviderOptionsDoesNotExistException extends Exception {
FILE: lib/Exceptions/RunnerAlreadyUpException.php
class RunnerAlreadyUpException (line 15) | class RunnerAlreadyUpException extends Exception {
FILE: lib/Exceptions/TickDoesNotExistException.php
class TickDoesNotExistException (line 15) | class TickDoesNotExistException extends Exception {
FILE: lib/Exceptions/TickIsNotAliveException.php
class TickIsNotAliveException (line 15) | class TickIsNotAliveException extends Exception {
FILE: lib/Migration/Version2000Date20201208130255.php
class Version2000Date20201208130255 (line 21) | class Version2000Date20201208130255 extends SimpleMigrationStep {
method preSchemaChange (line 28) | public function preSchemaChange(IOutput $output, Closure $schemaClosur...
method changeSchema (line 38) | public function changeSchema(IOutput $output, Closure $schemaClosure, ...
method postSchemaChange (line 84) | public function postSchemaChange(IOutput $output, Closure $schemaClosu...
FILE: lib/Migration/Version23001Date20220408140253.php
class Version23001Date20220408140253 (line 19) | class Version23001Date20220408140253 extends SimpleMigrationStep {
method changeSchema (line 27) | public function changeSchema(IOutput $output, Closure $schemaClosure, ...
FILE: lib/Migration/Version23001Date20220505144434.php
class Version23001Date20220505144434 (line 19) | class Version23001Date20220505144434 extends SimpleMigrationStep {
method changeSchema (line 27) | public function changeSchema(IOutput $output, Closure $schemaClosure, ...
FILE: lib/Migration/Version2400Date202201301329.php
class Version2400Date202201301329 (line 23) | class Version2400Date202201301329 extends SimpleMigrationStep {
method __construct (line 37) | public function __construct(IDBConnection $dbConnection, ConfigService...
method preSchemaChange (line 47) | public function preSchemaChange(IOutput $output, Closure $schemaClosur...
method changeSchema (line 57) | public function changeSchema(IOutput $output, Closure $schemaClosure, ...
FILE: lib/Migration/Version2401Date202301170001.php
class Version2401Date202301170001 (line 19) | class Version2401Date202301170001 extends SimpleMigrationStep {
method __construct (line 29) | public function __construct(IDBConnection $dbConnection) {
method postSchemaChange (line 40) | public function postSchemaChange(IOutput $output, Closure $schemaClosu...
FILE: lib/Migration/Version2801Date202309200001.php
class Version2801Date202309200001 (line 19) | class Version2801Date202309200001 extends SimpleMigrationStep {
method __construct (line 27) | public function __construct(IDBConnection $dbConnection) {
method postSchemaChange (line 38) | public function postSchemaChange(IOutput $output, Closure $schemaClosu...
FILE: lib/Migration/Version31001Date20250210105322.php
class Version31001Date20250210105322 (line 21) | #[AddIndex('fulltextsearch_index', IndexType::INDEX, 'fix live index sel...
method changeSchema (line 23) | public function changeSchema(IOutput $output, Closure $schemaClosure, ...
FILE: lib/Model/Index.php
class Index (line 24) | class Index implements IIndex, JsonSerializable {
method __construct (line 67) | public function __construct(string $providerId, string $documentId, st...
method getProviderId (line 77) | public function getProviderId(): string {
method getDocumentId (line 84) | public function getDocumentId(): string {
method setSource (line 94) | public function setSource(string $source): IIndex {
method getSource (line 103) | public function getSource(): string {
method setOwnerId (line 113) | public function setOwnerId(string $ownerId): IIndex {
method getOwnerId (line 122) | public function getOwnerId(): string {
method setCollection (line 132) | public function setCollection(string $collection): self {
method getCollection (line 141) | public function getCollection(): string {
method setStatus (line 152) | public function setStatus(int $status, bool $reset = false): IIndex {
method getStatus (line 165) | public function getStatus(): int {
method isStatus (line 174) | public function isStatus(int $status): bool {
method unsetStatus (line 183) | public function unsetStatus(int $status): IIndex {
method addOption (line 200) | public function addOption(string $option, string $value): IIndex {
method addOptionInt (line 212) | public function addOptionInt(string $option, int $value): IIndex {
method setOptions (line 224) | public function setOptions(array $options): IIndex {
method getOptions (line 233) | public function getOptions(): array {
method getOption (line 244) | public function getOption(string $option, string $default = ''): string {
method getOptionInt (line 255) | public function getOptionInt(string $option, int $default = 0): int {
method setErrorCount (line 265) | public function setErrorCount(int $err): IIndex {
method getErrorCount (line 274) | public function getErrorCount(): int {
method getLastError (line 281) | public function getLastError(): array {
method resetErrors (line 288) | public function resetErrors(): IIndex {
method getErrors (line 298) | public function getErrors(): array {
method setErrors (line 307) | public function setErrors(array $messages): IIndex {
method addError (line 321) | public function addError(string $message, string $exception = '', int ...
method setLastIndex (line 340) | public function setLastIndex(int $lastIndex = -1): IIndex {
method getLastIndex (line 353) | public function getLastIndex(): int {
method asSitemap (line 363) | public function asSitemap(IURLGenerator $urlGenerator): array {
method jsonSerialize (line 379) | public function jsonSerialize(): array {
method __destruct (line 398) | public function __destruct() {
FILE: lib/Model/IndexOptions.php
class IndexOptions (line 22) | class IndexOptions implements IIndexOptions, JsonSerializable {
method __construct (line 39) | public function __construct($options = []) {
method getOptions (line 47) | public function getOptions(): array {
method setOptions (line 56) | public function setOptions(array $options): IIndexOptions {
method addOption (line 68) | public function addOption(string $option, string $value): IIndexOptions {
method addOptionArray (line 80) | public function addOptionArray(string $option, array $value): IIndexOp...
method addOptionBool (line 92) | public function addOptionBool(string $option, bool $value): IIndexOpti...
method getOption (line 105) | public function getOption(string $option, string $default = ''): string {
method getOptionArray (line 115) | public function getOptionArray(string $option, array $default = []): a...
method getOptionBool (line 126) | public function getOptionBool(string $option, bool $default): bool {
method jsonSerialize (line 134) | public function jsonSerialize(): array {
FILE: lib/Model/PlatformWrapper.php
class PlatformWrapper (line 20) | class PlatformWrapper {
method __construct (line 42) | public function __construct(string $appId, string $class) {
method getAppId (line 50) | public function getAppId(): string {
method setAppId (line 59) | public function setAppId(string $appId): PlatformWrapper {
method getClass (line 69) | public function getClass(): string {
method setClass (line 78) | public function setClass(string $class): PlatformWrapper {
method getPlatform (line 88) | public function getPlatform(): IFullTextSearchPlatform {
method setPlatform (line 97) | public function setPlatform(IFullTextSearchPlatform $platform): Platfo...
method getVersion (line 107) | public function getVersion(): string {
method setVersion (line 116) | public function setVersion(string $version): PlatformWrapper {
FILE: lib/Model/ProviderIndexes.php
class ProviderIndexes (line 21) | class ProviderIndexes {
method __construct (line 28) | public function __construct(array $indexes) {
method getIndexes (line 36) | public function getIndexes(): array {
method getIndex (line 47) | public function getIndex(string $documentId): IIndex {
FILE: lib/Model/ProviderWrapper.php
class ProviderWrapper (line 20) | class ProviderWrapper {
method __construct (line 39) | public function __construct(string $appId, IFullTextSearchProvider $pr...
method getAppId (line 47) | public function getAppId(): string {
method setAppId (line 56) | public function setAppId(string $appId): ProviderWrapper {
method getProvider (line 66) | public function getProvider(): IFullTextSearchProvider {
method setProvider (line 75) | public function setProvider(IFullTextSearchProvider $provider): Provid...
method getVersion (line 85) | public function getVersion(): string {
method setVersion (line 94) | public function setVersion(string $version): ProviderWrapper {
FILE: lib/Model/Runner.php
class Runner (line 29) | class Runner implements IRunner {
method __construct (line 98) | public function __construct(RunningService $runningService, string $so...
method start (line 111) | public function start() {
method updateAction (line 123) | public function updateAction(string $action = '', bool $force = false)...
method setInfo (line 185) | public function setInfo(string $info, string $value, int $type = 0) {
method setInfoInt (line 195) | public function setInfoInt(string $info, int $value): void {
method setInfoArray (line 203) | public function setInfoArray(array $data) {
method setInfoColored (line 217) | public function setInfoColored(string $info, int $level) {
method getInfoAll (line 247) | public function getInfoAll(): array {
method getInfo (line 257) | public function getInfo(string $info): string {
method getInfoInt (line 266) | public function getInfoInt(string $info): int {
method onKeyPress (line 273) | public function onKeyPress(array $method) {
method keyPressed (line 280) | public function keyPressed(string $key) {
method onInfoUpdate (line 290) | public function onInfoUpdate(array $method) {
method infoUpdated (line 298) | public function infoUpdated() {
method onNewIndexError (line 308) | public function onNewIndexError(array $method) {
method newIndexError (line 318) | public function newIndexError(IIndex $index, string $message, string $...
method onNewIndexResult (line 336) | public function onNewIndexResult(array $method) {
method newIndexResult (line 347) | public function newIndexResult(IIndex $index, string $message, string ...
method updateTick (line 367) | private function updateTick(int $tick, string $action) {
method updateRamInfo (line 386) | private function updateRamInfo(int $tick) {
method exception (line 402) | public function exception(string $reason, bool $stop) {
method stop (line 420) | public function stop() {
method sourceIsCommandLine (line 429) | public function sourceIsCommandLine(ACommandBase $base, OutputInterfac...
method pause (line 438) | public function pause(bool $pause) {
method isPaused (line 446) | public function isPaused(): bool {
method pauseRunning (line 454) | public function pauseRunning(bool $running) {
method isPauseRunning (line 462) | public function isPauseRunning(): bool {
method output (line 470) | public function output(string $line) {
FILE: lib/Model/SearchRequest.php
class SearchRequest (line 23) | class SearchRequest implements ISearchRequest, JsonSerializable {
method __construct (line 87) | public function __construct() {
method getProviders (line 94) | public function getProviders(): array {
method setProviders (line 103) | public function setProviders(array $providers): ISearchRequest {
method getAuthor (line 113) | public function getAuthor(): string {
method setAuthor (line 122) | public function setAuthor(string $author): ISearchRequest {
method getSearch (line 132) | public function getSearch(): string {
method setSearch (line 141) | public function setSearch(string $search): ISearchRequest {
method addSearch (line 152) | public function addSearch(string $search): ISearchRequest {
method isEmptySearch (line 162) | public function isEmptySearch(): bool {
method setEmptySearch (line 171) | public function setEmptySearch(bool $emptySearch): ISearchRequest {
method cleanSearch (line 181) | public function cleanSearch(): ISearchRequest {
method searchQueryOptions (line 205) | private function searchQueryOptions(string $word): bool {
method getPage (line 241) | public function getPage(): int {
method setPage (line 250) | public function setPage(int $page): ISearchRequest {
method getSize (line 264) | public function getSize(): int {
method setSize (line 273) | public function setSize(int $size): ISearchRequest {
method getOptions (line 283) | public function getOptions(): array {
method setOptions (line 292) | public function setOptions(array $options): ISearchRequest {
method addOption (line 304) | public function addOption(string $option, string $value): ISearchReque...
method addOptionArray (line 316) | public function addOptionArray(string $option, array $value): ISearchR...
method addOptionBool (line 328) | public function addOptionBool(string $option, bool $value): ISearchReq...
method addMultipleOption (line 340) | public function addMultipleOption(string $option, string $value): ISea...
method getOption (line 356) | public function getOption(string $option, string $default = ''): string {
method getOptionArray (line 367) | public function getOptionArray(string $option, array $default = []): a...
method addPart (line 377) | public function addPart(string $part): ISearchRequest {
method getParts (line 386) | public function getParts(): array {
method setParts (line 398) | public function setParts(array $parts): ISearchRequest {
method getFields (line 408) | public function getFields(): array {
method setFields (line 417) | public function setFields(array $fields): ISearchRequest {
method addLimitField (line 429) | public function addLimitField(string $field): ISearchRequest {
method getLimitFields (line 438) | public function getLimitFields(): array {
method addField (line 448) | public function addField(string $field): ISearchRequest {
method addTag (line 460) | public function addTag(string $tag): ISearchRequest {
method getTags (line 469) | public function getTags(): array {
method setTags (line 478) | public function setTags(array $tags): ISearchRequest {
method setMetaTags (line 490) | public function setMetaTags(array $tags): ISearchRequest {
method getMetaTags (line 499) | public function getMetaTags(): array {
method addMetaTag (line 508) | public function addMetaTag(string $tag): ISearchRequest {
method setSubTags (line 520) | public function setSubTags(array $tags): ISearchRequest {
method getSubTags (line 531) | public function getSubTags(bool $formatted = false): array {
method addSubTag (line 554) | public function addSubTag(string $source, string $tag): ISearchRequest {
method addWildcardField (line 570) | public function addWildcardField(string $field): ISearchRequest {
method getWildcardFields (line 580) | public function getWildcardFields(): array {
method addWildcardFilter (line 620) | public function addWildcardFilter(array $filter): ISearchRequest {
method addWildcardFilters (line 631) | public function addWildcardFilters(array $filters): ISearchRequest {
method getWildcardFilters (line 640) | public function getWildcardFilters(): array {
method addRegexFilter (line 650) | public function addRegexFilter(string $filter): ISearchRequest {
method addRegexFilters (line 661) | public function addRegexFilters(array $filters): ISearchRequest {
method getRegexFilters (line 670) | public function getRegexFilters(): array {
method addSimpleQuery (line 680) | public function addSimpleQuery(ISearchRequestSimpleQuery $query): ISea...
method getSimpleQueries (line 690) | public function getSimpleQueries(): array {
method jsonSerialize (line 698) | public function jsonSerialize(): array {
method importFromArray (line 721) | public function importFromArray($arr): SearchRequest {
method fromJSON (line 757) | public static function fromJSON(string $json): SearchRequest {
FILE: lib/Model/SearchResult.php
class SearchResult (line 25) | class SearchResult implements ISearchResult, JsonSerializable {
method __construct (line 60) | public function __construct(SearchRequest $searchRequest) {
method setDocuments (line 70) | public function setDocuments(array $documents): ISearchResult {
method getDocuments (line 79) | public function getDocuments(): array {
method addDocument (line 88) | public function addDocument(IIndexDocument $document): ISearchResult {
method getCount (line 97) | public function getCount(): int {
method setRawResult (line 107) | public function setRawResult(string $result): ISearchResult {
method getRawResult (line 116) | public function getRawResult(): string {
method setProvider (line 126) | public function setProvider(IFullTextSearchProvider $provider): ISearc...
method getProvider (line 135) | public function getProvider(): IFullTextSearchProvider {
method getPlatform (line 143) | public function getPlatform(): IFullTextSearchPlatform {
method setPlatform (line 152) | public function setPlatform(IFullTextSearchPlatform $platform): ISearc...
method getTotal (line 162) | public function getTotal(): int {
method setTotal (line 171) | public function setTotal(int $total): ISearchResult {
method getMaxScore (line 181) | public function getMaxScore() {
method setMaxScore (line 190) | public function setMaxScore(int $maxScore): ISearchResult {
method getTime (line 200) | public function getTime(): int {
method setTime (line 209) | public function setTime(int $time): ISearchResult {
method isTimedOut (line 219) | public function isTimedOut(): bool {
method setTimedOut (line 228) | public function setTimedOut(bool $timedOut): ISearchResult {
method getRequest (line 238) | public function getRequest(): ISearchRequest {
method setRequest (line 247) | public function setRequest(ISearchRequest $request): ISearchResult {
method addAggregation (line 263) | public function addAggregation(string $category, string $value, int $c...
method getAggregations (line 276) | public function getAggregations(string $category): array {
method jsonSerialize (line 286) | public function jsonSerialize(): array {
method addInfo (line 322) | public function addInfo(string $k, string $value): ISearchResult {
method getInfo (line 326) | public function getInfo(string $k): string {
method getInfosAll (line 330) | public function getInfosAll(): array {
FILE: lib/Model/Tick.php
class Tick (line 19) | class Tick {
method __construct (line 53) | public function __construct(string $source, int $id = 0) {
method getId (line 62) | public function getId(): int {
method setId (line 71) | public function setId(int $id): Tick {
method getSource (line 81) | public function getSource(): string {
method getData (line 89) | public function getData(): array {
method setData (line 98) | public function setData(array $data): Tick {
method getTick (line 108) | public function getTick(): int {
method setTick (line 117) | public function setTick(int $tick = 0): Tick {
method getFirstTick (line 131) | public function getFirstTick(): int {
method setFirstTick (line 140) | public function setFirstTick(int $tick = 0): Tick {
method getStatus (line 154) | public function getStatus(): string {
method setStatus (line 163) | public function setStatus(string $status): Tick {
method getAction (line 173) | public function getAction(): string {
method setAction (line 182) | public function setAction(string $action): Tick {
method setInfo (line 195) | public function setInfo(string $info, string $value): Tick {
method setInfoInt (line 207) | public function setInfoInt(string $info, int $value): Tick {
method setInfoFloat (line 219) | public function setInfoFloat(string $info, float $value): Tick {
method unsetInfo (line 228) | public function unsetInfo(string $info) {
method getInfo (line 238) | public function getInfo(string $info, string $default = ''): string {
method getInfoInt (line 249) | public function getInfoInt(string $info, int $default = 0): int {
method getInfoFloat (line 259) | public function getInfoFloat(string $info, float $default = 0): float {
FILE: lib/Provider/TestProvider.php
class TestProvider (line 34) | class TestProvider implements IFullTextSearchProvider {
method __construct (line 47) | public function __construct(
method getId (line 57) | public function getId(): string {
method getName (line 65) | public function getName(): string {
method getConfiguration (line 73) | public function getConfiguration(): array {
method setRunner (line 78) | public function setRunner(IRunner $runner) {
method setIndexOptions (line 86) | public function setIndexOptions(IIndexOptions $options) {
method getSearchTemplate (line 94) | public function getSearchTemplate(): ISearchTemplate {
method loadProvider (line 104) | public function loadProvider() {
method generateChunks (line 108) | public function generateChunks(string $userId): array {
method generateIndexableDocuments (line 124) | public function generateIndexableDocuments(string $userId, string $chu...
method fillIndexDocument (line 139) | public function fillIndexDocument(IIndexDocument $document) {
method isDocumentUpToDate (line 148) | public function isDocumentUpToDate(IIndexDocument $document): bool {
method updateDocument (line 158) | public function updateDocument(IIndex $index): IIndexDocument {
method onInitializingIndex (line 166) | public function onInitializingIndex(IFullTextSearchPlatform $platform) {
method onResettingIndex (line 173) | public function onResettingIndex(IFullTextSearchPlatform $platform) {
method unloadProvider (line 180) | public function unloadProvider() {
method improveSearchRequest (line 189) | public function improveSearchRequest(ISearchRequest $request) {
method improveSearchResult (line 198) | public function improveSearchResult(ISearchResult $searchResult) {
FILE: lib/Search/UnifiedSearchProvider.php
class UnifiedSearchProvider (line 31) | class UnifiedSearchProvider implements IFilteringProvider {
method __construct (line 37) | public function __construct(
method getId (line 49) | public function getId(): string {
method getName (line 57) | public function getName(): string {
method getOrder (line 68) | public function getOrder(string $route, array $routeParameters): int {
method search (line 79) | public function search(IUser $user, ISearchQuery $query): SearchResult {
method generateSearchRequest (line 100) | private function generateSearchRequest(ISearchQuery $query): ISearchRe...
method convertSearchResult (line 130) | private function convertSearchResult(array $searchResult): array {
method getSupportedFilters (line 158) | public function getSupportedFilters(): array {
method getAlternateIds (line 166) | public function getAlternateIds(): array {
method getCustomFilters (line 170) | public function getCustomFilters(): array {
FILE: lib/Search/UnifiedSearchResult.php
class UnifiedSearchResult (line 20) | class UnifiedSearchResult extends SearchResultEntry {
method __construct (line 33) | public function __construct(
method getThumbnailUrl (line 45) | public function getThumbnailUrl(): string {
method setThumbnailUrl (line 54) | public function setThumbnailUrl(string $thumbnailUrl): self {
method getTitle (line 64) | public function getTitle(): string {
method setTitle (line 73) | public function setTitle(string $title): self {
method getSubline (line 83) | public function getSubline(): string {
method setSubline (line 92) | public function setSubline(string $subline): self {
method getResourceUrl (line 102) | public function getResourceUrl(): string {
method setResourceUrl (line 111) | public function setResourceUrl(string $resourceUrl): self {
method getIcon (line 121) | public function getIcon(): string {
method setIcon (line 130) | public function setIcon(string $icon): self {
method isRounded (line 140) | public function isRounded(): bool {
method setRounded (line 149) | public function setRounded(bool $rounded): self {
FILE: lib/Service/CliService.php
class CliService (line 22) | class CliService {
method __construct (line 38) | public function __construct() {
method setRunner (line 45) | public function setRunner(Runner $runner) {
method createPanel (line 56) | public function createPanel(string $panelId, array $lines) {
method initDisplay (line 68) | public function initDisplay() {
method displayPanel (line 77) | public function displayPanel(string $panelSlot, string $panelId) {
method currentPanel (line 90) | public function currentPanel(string $panelSlot): string {
method switchPanel (line 105) | public function switchPanel(string $panelSlot, string $panelId) {
method runDisplay (line 122) | public function runDisplay(OutputInterface $output) {
method refreshDisplay (line 151) | public function refreshDisplay() {
method refreshInfo (line 174) | public function refreshInfo() {
method onInfoUpdated (line 187) | public function onInfoUpdated(array $info) {
FILE: lib/Service/CollectionService.php
class CollectionService (line 27) | class CollectionService {
method __construct (line 56) | public function __construct(
method setRunner (line 72) | public function setRunner(Runner $runner): void {
method deleteCollection (line 80) | public function deleteCollection(string $collection): void {
method hasCollection (line 90) | public function hasCollection(string $collection): bool {
method getCollections (line 103) | public function getCollections(bool $local = true): array {
method getQueue (line 114) | public function getQueue(string $collection, int $length = 0): array {
method resetCollection (line 127) | public function resetCollection(string $collection): void {
method setAsDone (line 138) | public function setAsDone(string $collection, string $providerId, stri...
method initCollectionIndexes (line 151) | public function initCollectionIndexes(
method confirmCollectionString (line 206) | public function confirmCollectionString(string $collection): void {
method confirmCollection (line 217) | public function confirmCollection(string $collection): void {
method getDocument (line 235) | public function getDocument(string $collection, string $providerId, st...
method getLinks (line 248) | public function getLinks(): array {
method saveLinks (line 255) | public function saveLinks(array $links): void {
method addLink (line 263) | public function addLink(string $collection, string $userId): void {
method removeLink (line 272) | public function removeLink(string $collection): void {
method getLinkedAccount (line 284) | public function getLinkedAccount(string $collection): string {
method updateRunnerInfo (line 302) | private function updateRunnerInfo(string $info, string $value): void {
method updateRunnerInfoArray (line 314) | private function updateRunnerInfoArray(array $data): void {
FILE: lib/Service/ConfigService.php
class ConfigService (line 16) | class ConfigService {
method __construct (line 17) | public function __construct(
method getConfig (line 23) | public function getConfig(): array {
method setConfig (line 35) | public function setConfig(array $save): void {
method getAppValue (line 60) | public function getAppValue(string $key): string {
method getInternalCollection (line 66) | public function getInternalCollection(): string {
FILE: lib/Service/IndexService.php
class IndexService (line 35) | class IndexService implements IIndexService {
method __construct (line 65) | public function __construct(
method setRunner (line 79) | public function setRunner(Runner $runner) {
method updateRunnerAction (line 90) | private function updateRunnerAction(string $action, bool $force = fals...
method updateRunnerInfo (line 103) | private function updateRunnerInfo(
method updateRunnerInfoArray (line 116) | private function updateRunnerInfoArray(array $data) {
method indexProviderContentFromUser (line 133) | public function indexProviderContentFromUser(
method updateDocumentsWithCurrIndex (line 187) | public function updateDocumentsWithCurrIndex(
method isDocumentUpToDate (line 245) | private function isDocumentUpToDate(
method indexDocuments (line 270) | private function indexDocuments(
method filterDocumentBeforeIndex (line 321) | private function filterDocumentBeforeIndex(IIndexDocument $document) {
method indexDocument (line 341) | public function indexDocument(IFullTextSearchPlatform $platform, IInde...
method updateDocument (line 370) | public function updateDocument(
method updateIndexes (line 422) | public function updateIndexes(array $indexes) {
method updateIndex (line 433) | public function updateIndex(IIndex $index) {
method updateIndexError (line 465) | private function updateIndexError(IIndex $index) {
method updateIndexStatus (line 478) | public function updateIndexStatus(
method updateIndexesStatus (line 498) | public function updateIndexesStatus(
method resetErrorFromIndex (line 516) | public function resetErrorFromIndex(Index $index) {
method resetErrorFromQueue (line 526) | private function resetErrorFromQueue() {
method resetErrorsAll (line 535) | public function resetErrorsAll() {
method getErrorIndexes (line 543) | public function getErrorIndexes(): array {
method getIndexes (line 554) | public function getIndexes(string $providerId, string $documentId): ar...
method getQueuedIndexes (line 566) | public function getQueuedIndexes(string $collection = '', bool $all = ...
method resetIndex (line 577) | public function resetIndex(string $providerId = '', string $collection...
method getIndex (line 603) | public function getIndex(string $providerId, string $documentId, strin...
method createIndex (line 617) | public function createIndex(
FILE: lib/Service/PlatformService.php
class PlatformService (line 30) | class PlatformService {
method __construct (line 36) | public function __construct(
method getPlatform (line 50) | public function getPlatform(bool $silent = false): PlatformWrapper {
method getPlatforms (line 68) | public function getPlatforms(): array {
method loadPlatforms (line 97) | private function loadPlatforms() {
method loadPlatform (line 124) | private function loadPlatform() {
method getSelectedPlatform (line 151) | private function getSelectedPlatform(): PlatformWrapper {
method loadPlatformsFromApp (line 174) | private function loadPlatformsFromApp(string $appId) {
FILE: lib/Service/ProviderService.php
class ProviderService (line 28) | class ProviderService implements IProviderService {
method __construct (line 33) | public function __construct(
method loadProviders (line 47) | private function loadProviders() {
method loadProvider (line 73) | public function loadProvider(string $appId, string $providerId) {
method getProviders (line 93) | public function getProviders(): array {
method getConfiguredProviders (line 103) | public function getConfiguredProviders(): array {
method getFilteredProviders (line 122) | public function getFilteredProviders(array $providerList): array {
method getProvider (line 147) | public function getProvider(string $providerId): ProviderWrapper {
method isProviderIndexed (line 166) | public function isProviderIndexed(string $providerId): bool {
method loadProvidersFromApp (line 174) | private function loadProvidersFromApp(string $appId) {
method loadProvidersFromList (line 195) | private function loadProvidersFromList(string $appId, array $providers) {
method providerIdMustBeUnique (line 229) | private function providerIdMustBeUnique(IFullTextSearchProvider $provi...
method serialize (line 246) | public function serialize(array $providers): array {
method addJavascriptAPI (line 262) | public function addJavascriptAPI() {
FILE: lib/Service/RunningService.php
class RunningService (line 21) | class RunningService {
method __construct (line 22) | public function __construct(
method start (line 35) | public function start(string $source): int {
method update (line 58) | public function update(int $runId, string $action = '') {
method stop (line 78) | public function stop(int $runId, string $reason = '') {
method isAlive (line 100) | public function isAlive(int $runId): bool {
method isStillAlive (line 119) | public function isStillAlive(Tick $tick, bool $exception = false): bool {
method isAlreadyRunning (line 135) | public function isAlreadyRunning(): bool {
method forceStop (line 156) | public function forceStop() {
method assignActionToTick (line 170) | private function assignActionToTick(Tick $tick, string $action) {
FILE: lib/Service/SearchService.php
class SearchService (line 33) | class SearchService implements ISearchService {
method __construct (line 35) | public function __construct(
method generateSearchRequest (line 49) | public function generateSearchRequest(array $request): ISearchRequest {
method search (line 66) | public function search(string $userId, ISearchRequest $request): array {
method searchRequestCannotBeEmpty (line 93) | private function searchRequestCannotBeEmpty(ISearchRequest $request) {
method searchFromProviders (line 108) | private function searchFromProviders(
method getDocumentAccessFromUser (line 137) | private function getDocumentAccessFromUser(IUser $user): IDocumentAcce...
FILE: lib/Service/SettingsService.php
class SettingsService (line 15) | class SettingsService {
method __construct (line 16) | public function __construct(
method checkConfig (line 27) | public function checkConfig(array &$data): bool {
method completeSettings (line 42) | public function completeSettings(array &$data) {
method completeSettingsPlatforms (line 57) | private function completeSettingsPlatforms(): array {
method completeSettingsProviders (line 76) | private function completeSettingsProviders(): array {
FILE: lib/Service/TestService.php
class TestService (line 25) | class TestService {
method __construct (line 45) | public function __construct() {
method generateIndexDocumentContentLicense (line 53) | public function generateIndexDocumentContentLicense(IIndexOptions $opt...
method generateIndexDocumentSimple (line 80) | public function generateIndexDocumentSimple(IIndexOptions $options): I...
method compareIndexDocument (line 95) | public function compareIndexDocument(IIndexDocument $origIndex, IIndex...
method generateIndexDocument (line 124) | private function generateIndexDocument(string $documentType): IIndexDo...
FILE: lib/Settings/Admin.php
class Admin (line 25) | class Admin implements ISettings {
method __construct (line 26) | public function __construct(
method getForm (line 35) | public function getForm(): TemplateResponse {
method getSection (line 43) | public function getSection(): string {
method getPriority (line 55) | public function getPriority(): int {
FILE: lib/Settings/AdminSection.php
class AdminSection (line 23) | class AdminSection implements IIconSection {
method __construct (line 37) | public function __construct(IL10N $l10n, IURLGenerator $urlGenerator) {
method getID (line 45) | public function getID(): string {
method getName (line 52) | public function getName(): string {
method getPriority (line 59) | public function getPriority(): int {
method getIcon (line 66) | public function getIcon(): string {
FILE: lib/Tools/Exceptions/ArrayNotFoundException.php
class ArrayNotFoundException (line 14) | class ArrayNotFoundException extends Exception {
FILE: lib/Tools/Exceptions/ItemNotFoundException.php
class ItemNotFoundException (line 14) | class ItemNotFoundException extends Exception {
FILE: lib/Tools/Exceptions/MalformedArrayException.php
class MalformedArrayException (line 14) | class MalformedArrayException extends Exception {
FILE: lib/Tools/Exceptions/UnknownTypeException.php
class UnknownTypeException (line 14) | class UnknownTypeException extends Exception {
FILE: lib/Tools/Traits/TArrayTools.php
type TArrayTools (line 19) | trait TArrayTools {
method get (line 35) | protected function get(string $k, array $arr, string $default = ''): s...
method getInt (line 69) | protected function getInt(string $k, array $arr, int $default = 0): int {
method getFloat (line 103) | protected function getFloat(string $k, array $arr, float $default = 0)...
method getBool (line 137) | protected function getBool(string $k, array $arr, bool $default = fals...
method getObj (line 179) | protected function getObj(string $k, array $arr, ?JsonSerializable $de...
method getArray (line 204) | protected function getArray(string $k, array $arr, array $default = []...
method validKey (line 246) | public function validKey(string $k, array $arr): bool {
method getList (line 277) | protected function getList(string $k, array $arr, array $import, array...
method extractArray (line 304) | protected function extractArray(string $k, string $value, array $list) {
method typeOf (line 328) | public function typeOf(string $key, array $arr, bool $root = true): st...
method mustContains (line 381) | protected function mustContains(array $keys, array $arr) {
method cleanArray (line 395) | protected function cleanArray(array &$arr) {
Condensed preview — 325 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (689K chars).
[
{
"path": ".github/workflows/appstore-build-publish.yml",
"chars": 6789,
"preview": "# This workflow is provided via the organization template repository\n#\n# https://github.com/nextcloud/.github\n# https://"
},
{
"path": ".github/workflows/pr-feedback.yml",
"chars": 2691,
"preview": "# This workflow is provided via the organization template repository\n#\n# https://github.com/nextcloud/.github\n# https://"
},
{
"path": ".github/workflows/reuse.yml",
"chars": 765,
"preview": "# This workflow is provided via the organization template repository\n#\n# https://github.com/nextcloud/.github\n# https://"
},
{
"path": ".gitignore",
"chars": 141,
"preview": "# SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors\n# SPDX-License-Identifier: AGPL-3.0-or-later\n\\."
},
{
"path": ".scrutinizer.yml",
"chars": 3802,
"preview": "# SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors\n# SPDX-License-Identifier: AGPL-3.0-or-later\nim"
},
{
"path": ".tx/config",
"chars": 337,
"preview": "[main]\nhost = https://www.transifex.com\nlang_map = ja_JP: ja, bg_BG: bg, cs_CZ: cs, fi_FI: fi, hu_HU: hu, nb_NO: nb,"
},
{
"path": "AUTHORS.md",
"chars": 1125,
"preview": "<!--\n - SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or"
},
{
"path": "CHANGELOG.md",
"chars": 3987,
"preview": "<!--\n - SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or"
},
{
"path": "LICENSE",
"chars": 32386,
"preview": " GNU AFFERO GENERAL PUBLIC LICENSE\n Version 3, 19 November 2007\n\n Copyright (C)"
},
{
"path": "LICENSES/AGPL-3.0-or-later.txt",
"chars": 34020,
"preview": "GNU AFFERO GENERAL PUBLIC LICENSE\nVersion 3, 19 November 2007\n\nCopyright (C) 2007 Free Software Foundation, Inc. <http:/"
},
{
"path": "LICENSES/Apache-2.0.txt",
"chars": 10280,
"preview": "Apache License\nVersion 2.0, January 2004\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AN"
},
{
"path": "LICENSES/CC0-1.0.txt",
"chars": 7048,
"preview": "Creative Commons Legal Code\n\nCC0 1.0 Universal\n\n CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE\n"
},
{
"path": "LICENSES/MIT.txt",
"chars": 1078,
"preview": "MIT License\n\nCopyright (c) <year> <copyright holders>\n\nPermission is hereby granted, free of charge, to any person obtai"
},
{
"path": "Makefile",
"chars": 3144,
"preview": "# SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors\n# SPDX-License-Identifier: AGPL-3.0-or-later\nap"
},
{
"path": "README.md",
"chars": 1117,
"preview": "<!--\n - SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or"
},
{
"path": "REUSE.toml",
"chars": 1631,
"preview": "# SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors\n# SPDX-License-Identifier: AGPL-3.0-or-later\nve"
},
{
"path": "appinfo/info.xml",
"chars": 2399,
"preview": "<?xml version=\"1.0\"?>\n<!--\n - SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-I"
},
{
"path": "appinfo/routes.php",
"chars": 1356,
"preview": "<?php\n\ndeclare(strict_types=1);\n\n/**\n * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors\n * SPDX-L"
},
{
"path": "composer.json",
"chars": 473,
"preview": "{\n \"name\": \"nextcloud/fulltextsearch\",\n \"description\": \"Full text search framework for Nextcloud\",\n \"minimum-stabilit"
},
{
"path": "css/admin.css",
"chars": 590,
"preview": "/**\n * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-la"
},
{
"path": "css/fulltextsearch.css",
"chars": 3874,
"preview": "/**\n * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-la"
},
{
"path": "css/navigate.css",
"chars": 1044,
"preview": "/**\n * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-la"
},
{
"path": "docs/api/collections.md",
"chars": 146,
"preview": "<!--\n - SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or"
},
{
"path": "docs/commands.md",
"chars": 143,
"preview": "<!--\n - SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or"
},
{
"path": "docs/configuration.md",
"chars": 148,
"preview": "<!--\n - SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or"
},
{
"path": "docs/index.md",
"chars": 159,
"preview": "<!--\n - SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or"
},
{
"path": "docs/installation.md",
"chars": 147,
"preview": "<!--\n - SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or"
},
{
"path": "js/admin.elements.js",
"chars": 729,
"preview": "/**\n * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-la"
},
{
"path": "js/admin.js",
"chars": 660,
"preview": "/**\n * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-la"
},
{
"path": "js/admin.settings.js",
"chars": 3527,
"preview": "/**\n * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-la"
},
{
"path": "js/fulltextsearch.v1.api.js",
"chars": 1570,
"preview": "/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-la"
},
{
"path": "js/fulltextsearch.v1.js",
"chars": 716,
"preview": "/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-la"
},
{
"path": "js/fulltextsearch.v1.navigation.js",
"chars": 11867,
"preview": "/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-la"
},
{
"path": "js/fulltextsearch.v1.result.js",
"chars": 1901,
"preview": "/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-la"
},
{
"path": "js/fulltextsearch.v1.searchbox.js",
"chars": 6833,
"preview": "/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-la"
},
{
"path": "js/fulltextsearch.v1.settings.js",
"chars": 4080,
"preview": "/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-la"
},
{
"path": "js/navigate.js",
"chars": 11779,
"preview": "/**\n * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-la"
},
{
"path": "l10n/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "l10n/af.js",
"chars": 259,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"Search\" : \"Soek\",\n \"Index not found\" : \"Indeks nie gevind nie\",\n "
},
{
"path": "l10n/af.json",
"chars": 245,
"preview": "{ \"translations\": {\n \"Search\" : \"Soek\",\n \"Index not found\" : \"Indeks nie gevind nie\",\n \"Search on %s\" : \"Soek o"
},
{
"path": "l10n/an.js",
"chars": 106,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"Search\" : \"Buscar\"\n},\n\"nplurals=2; plural=(n != 1);\");\n"
},
{
"path": "l10n/an.json",
"chars": 92,
"preview": "{ \"translations\": {\n \"Search\" : \"Buscar\"\n},\"pluralForm\" :\"nplurals=2; plural=(n != 1);\"\n}"
},
{
"path": "l10n/ar.js",
"chars": 1487,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"the search returned {total} results in {time} ms\" : \"عاد البحث بـ {to"
},
{
"path": "l10n/ar.json",
"chars": 1473,
"preview": "{ \"translations\": {\n \"the search returned {total} results in {time} ms\" : \"عاد البحث بـ {total} نتيجة؛ في {time} مللي"
},
{
"path": "l10n/ast.js",
"chars": 133,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"Search\" : \"Buscar\",\n \"General\" : \"Xeneral\"\n},\n\"nplurals=2; plural="
},
{
"path": "l10n/ast.json",
"chars": 119,
"preview": "{ \"translations\": {\n \"Search\" : \"Buscar\",\n \"General\" : \"Xeneral\"\n},\"pluralForm\" :\"nplurals=2; plural=(n != 1);\"\n}"
},
{
"path": "l10n/az.js",
"chars": 132,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"Search\" : \"Axtarış\",\n \"General\" : \"Ümumi\"\n},\n\"nplurals=2; plural=("
},
{
"path": "l10n/az.json",
"chars": 118,
"preview": "{ \"translations\": {\n \"Search\" : \"Axtarış\",\n \"General\" : \"Ümumi\"\n},\"pluralForm\" :\"nplurals=2; plural=(n != 1);\"\n}"
},
{
"path": "l10n/be.js",
"chars": 271,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"Search\" : \"Пошук\",\n \"General\" : \"Агульныя\"\n},\n\"nplurals=4; plural="
},
{
"path": "l10n/be.json",
"chars": 257,
"preview": "{ \"translations\": {\n \"Search\" : \"Пошук\",\n \"General\" : \"Агульныя\"\n},\"pluralForm\" :\"nplurals=4; plural=(n%10==1 && n"
},
{
"path": "l10n/bg.js",
"chars": 1564,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"the search returned {total} results in {time} ms\" : \"търсенето доклад"
},
{
"path": "l10n/bg.json",
"chars": 1550,
"preview": "{ \"translations\": {\n \"the search returned {total} results in {time} ms\" : \"търсенето докладва {total} резултата за {t"
},
{
"path": "l10n/bn_BD.js",
"chars": 132,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"Search\" : \"Search\",\n \"General\" : \"সাধারণ\"\n},\n\"nplurals=2; plural=("
},
{
"path": "l10n/bn_BD.json",
"chars": 118,
"preview": "{ \"translations\": {\n \"Search\" : \"Search\",\n \"General\" : \"সাধারণ\"\n},\"pluralForm\" :\"nplurals=2; plural=(n != 1);\"\n}"
},
{
"path": "l10n/br.js",
"chars": 1619,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"the search returned {total} results in {time} ms\" : \"an enklask en de"
},
{
"path": "l10n/br.json",
"chars": 1605,
"preview": "{ \"translations\": {\n \"the search returned {total} results in {time} ms\" : \"an enklask en deus roet {total} disoc'h e "
},
{
"path": "l10n/bs.js",
"chars": 180,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"Search\" : \"Search\"\n},\n\"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 :"
},
{
"path": "l10n/bs.json",
"chars": 166,
"preview": "{ \"translations\": {\n \"Search\" : \"Search\"\n},\"pluralForm\" :\"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
},
{
"path": "l10n/ca.js",
"chars": 1578,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"the search returned {total} results in {time} ms\" : \"la cerca ha reto"
},
{
"path": "l10n/ca.json",
"chars": 1564,
"preview": "{ \"translations\": {\n \"the search returned {total} results in {time} ms\" : \"la cerca ha retornat {total} resultats en "
},
{
"path": "l10n/cs.js",
"chars": 1628,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"the search returned {total} results in {time} ms\" : \"vyhledávání nale"
},
{
"path": "l10n/cs.json",
"chars": 1614,
"preview": "{ \"translations\": {\n \"the search returned {total} results in {time} ms\" : \"vyhledávání nalezlo {total} výsledků v čas"
},
{
"path": "l10n/cy_GB.js",
"chars": 183,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"Search\" : \"Chwilio\",\n \"General\" : \"Cyffredinol\"\n},\n\"nplurals=4; pl"
},
{
"path": "l10n/cy_GB.json",
"chars": 169,
"preview": "{ \"translations\": {\n \"Search\" : \"Chwilio\",\n \"General\" : \"Cyffredinol\"\n},\"pluralForm\" :\"nplurals=4; plural=(n==1) ?"
},
{
"path": "l10n/da.js",
"chars": 1494,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"the search returned {total} results in {time} ms\" : \"søgningen retune"
},
{
"path": "l10n/da.json",
"chars": 1480,
"preview": "{ \"translations\": {\n \"the search returned {total} results in {time} ms\" : \"søgningen retunerede {total} resultater og"
},
{
"path": "l10n/de.js",
"chars": 1465,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"the search returned {total} results in {time} ms\" : \"Die Suche ergab "
},
{
"path": "l10n/de.json",
"chars": 1451,
"preview": "{ \"translations\": {\n \"the search returned {total} results in {time} ms\" : \"Die Suche ergab {total} Treffer in {time} "
},
{
"path": "l10n/de_DE.js",
"chars": 1457,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"the search returned {total} results in {time} ms\" : \"Die Suche ergab "
},
{
"path": "l10n/de_DE.json",
"chars": 1443,
"preview": "{ \"translations\": {\n \"the search returned {total} results in {time} ms\" : \"Die Suche ergab {total} Treffer in {time} "
},
{
"path": "l10n/el.js",
"chars": 1608,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"the search returned {total} results in {time} ms\" : \"η αναζήτηση επέσ"
},
{
"path": "l10n/el.json",
"chars": 1594,
"preview": "{ \"translations\": {\n \"the search returned {total} results in {time} ms\" : \"η αναζήτηση επέστρεψε {total} αποτελέσματα"
},
{
"path": "l10n/en_GB.js",
"chars": 1479,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"the search returned {total} results in {time} ms\" : \"the search retur"
},
{
"path": "l10n/en_GB.json",
"chars": 1465,
"preview": "{ \"translations\": {\n \"the search returned {total} results in {time} ms\" : \"the search returned {total} results in {ti"
},
{
"path": "l10n/eo.js",
"chars": 1238,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"the search returned {total} results in {time} ms\" : \"la serĉo liveris"
},
{
"path": "l10n/eo.json",
"chars": 1224,
"preview": "{ \"translations\": {\n \"the search returned {total} results in {time} ms\" : \"la serĉo liveris {total} rezultojn en {tim"
},
{
"path": "l10n/es.js",
"chars": 1649,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"the search returned {total} results in {time} ms\" : \"la búsqueda enco"
},
{
"path": "l10n/es.json",
"chars": 1635,
"preview": "{ \"translations\": {\n \"the search returned {total} results in {time} ms\" : \"la búsqueda encontró {total} resultados en"
},
{
"path": "l10n/es_419.js",
"chars": 172,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"Search\" : \"Buscar\",\n \"General\" : \"General\"\n},\n\"nplurals=3; plural="
},
{
"path": "l10n/es_419.json",
"chars": 158,
"preview": "{ \"translations\": {\n \"Search\" : \"Buscar\",\n \"General\" : \"General\"\n},\"pluralForm\" :\"nplurals=3; plural=n == 1 ? 0 : "
},
{
"path": "l10n/es_AR.js",
"chars": 1240,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"Search\" : \"Buscar\",\n \"Index not found\" : \"Índice no encontrado\",\n "
},
{
"path": "l10n/es_AR.json",
"chars": 1226,
"preview": "{ \"translations\": {\n \"Search\" : \"Buscar\",\n \"Index not found\" : \"Índice no encontrado\",\n \"Full text search\" : \"B"
},
{
"path": "l10n/es_CL.js",
"chars": 315,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"Search\" : \"Buscar\",\n \"Index not found\" : \"No se encontró el índice"
},
{
"path": "l10n/es_CL.json",
"chars": 301,
"preview": "{ \"translations\": {\n \"Search\" : \"Buscar\",\n \"Index not found\" : \"No se encontró el índice\",\n \"Full text search\" "
},
{
"path": "l10n/es_CO.js",
"chars": 315,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"Search\" : \"Buscar\",\n \"Index not found\" : \"No se encontró el índice"
},
{
"path": "l10n/es_CO.json",
"chars": 301,
"preview": "{ \"translations\": {\n \"Search\" : \"Buscar\",\n \"Index not found\" : \"No se encontró el índice\",\n \"Full text search\" "
},
{
"path": "l10n/es_CR.js",
"chars": 315,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"Search\" : \"Buscar\",\n \"Index not found\" : \"No se encontró el índice"
},
{
"path": "l10n/es_CR.json",
"chars": 301,
"preview": "{ \"translations\": {\n \"Search\" : \"Buscar\",\n \"Index not found\" : \"No se encontró el índice\",\n \"Full text search\" "
},
{
"path": "l10n/es_DO.js",
"chars": 315,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"Search\" : \"Buscar\",\n \"Index not found\" : \"No se encontró el índice"
},
{
"path": "l10n/es_DO.json",
"chars": 301,
"preview": "{ \"translations\": {\n \"Search\" : \"Buscar\",\n \"Index not found\" : \"No se encontró el índice\",\n \"Full text search\" "
},
{
"path": "l10n/es_EC.js",
"chars": 1648,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"the search returned {total} results in {time} ms\" : \"la búsqueda arro"
},
{
"path": "l10n/es_EC.json",
"chars": 1634,
"preview": "{ \"translations\": {\n \"the search returned {total} results in {time} ms\" : \"la búsqueda arrojó {total} resultados en {"
},
{
"path": "l10n/es_GT.js",
"chars": 315,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"Search\" : \"Buscar\",\n \"Index not found\" : \"No se encontró el índice"
},
{
"path": "l10n/es_GT.json",
"chars": 301,
"preview": "{ \"translations\": {\n \"Search\" : \"Buscar\",\n \"Index not found\" : \"No se encontró el índice\",\n \"Full text search\" "
},
{
"path": "l10n/es_HN.js",
"chars": 315,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"Search\" : \"Buscar\",\n \"Index not found\" : \"No se encontró el índice"
},
{
"path": "l10n/es_HN.json",
"chars": 301,
"preview": "{ \"translations\": {\n \"Search\" : \"Buscar\",\n \"Index not found\" : \"No se encontró el índice\",\n \"Full text search\" "
},
{
"path": "l10n/es_MX.js",
"chars": 618,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"Search\" : \"Buscar\",\n \"Index not found\" : \"No se encontró el índice"
},
{
"path": "l10n/es_MX.json",
"chars": 604,
"preview": "{ \"translations\": {\n \"Search\" : \"Buscar\",\n \"Index not found\" : \"No se encontró el índice\",\n \"Full text search\" "
},
{
"path": "l10n/es_NI.js",
"chars": 172,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"Search\" : \"Buscar\",\n \"General\" : \"General\"\n},\n\"nplurals=3; plural="
},
{
"path": "l10n/es_NI.json",
"chars": 158,
"preview": "{ \"translations\": {\n \"Search\" : \"Buscar\",\n \"General\" : \"General\"\n},\"pluralForm\" :\"nplurals=3; plural=n == 1 ? 0 : "
},
{
"path": "l10n/es_PA.js",
"chars": 172,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"Search\" : \"Buscar\",\n \"General\" : \"General\"\n},\n\"nplurals=3; plural="
},
{
"path": "l10n/es_PA.json",
"chars": 158,
"preview": "{ \"translations\": {\n \"Search\" : \"Buscar\",\n \"General\" : \"General\"\n},\"pluralForm\" :\"nplurals=3; plural=n == 1 ? 0 : "
},
{
"path": "l10n/es_PE.js",
"chars": 172,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"Search\" : \"Buscar\",\n \"General\" : \"General\"\n},\n\"nplurals=3; plural="
},
{
"path": "l10n/es_PE.json",
"chars": 158,
"preview": "{ \"translations\": {\n \"Search\" : \"Buscar\",\n \"General\" : \"General\"\n},\"pluralForm\" :\"nplurals=3; plural=n == 1 ? 0 : "
},
{
"path": "l10n/es_PR.js",
"chars": 172,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"Search\" : \"Buscar\",\n \"General\" : \"General\"\n},\n\"nplurals=3; plural="
},
{
"path": "l10n/es_PR.json",
"chars": 158,
"preview": "{ \"translations\": {\n \"Search\" : \"Buscar\",\n \"General\" : \"General\"\n},\"pluralForm\" :\"nplurals=3; plural=n == 1 ? 0 : "
},
{
"path": "l10n/es_PY.js",
"chars": 172,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"Search\" : \"Buscar\",\n \"General\" : \"General\"\n},\n\"nplurals=3; plural="
},
{
"path": "l10n/es_PY.json",
"chars": 158,
"preview": "{ \"translations\": {\n \"Search\" : \"Buscar\",\n \"General\" : \"General\"\n},\"pluralForm\" :\"nplurals=3; plural=n == 1 ? 0 : "
},
{
"path": "l10n/es_SV.js",
"chars": 315,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"Search\" : \"Buscar\",\n \"Index not found\" : \"No se encontró el índice"
},
{
"path": "l10n/es_SV.json",
"chars": 301,
"preview": "{ \"translations\": {\n \"Search\" : \"Buscar\",\n \"Index not found\" : \"No se encontró el índice\",\n \"Full text search\" "
},
{
"path": "l10n/es_UY.js",
"chars": 172,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"Search\" : \"Buscar\",\n \"General\" : \"General\"\n},\n\"nplurals=3; plural="
},
{
"path": "l10n/es_UY.json",
"chars": 158,
"preview": "{ \"translations\": {\n \"Search\" : \"Buscar\",\n \"General\" : \"General\"\n},\"pluralForm\" :\"nplurals=3; plural=n == 1 ? 0 : "
},
{
"path": "l10n/et_EE.js",
"chars": 1449,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"the search returned {total} results in {time} ms\" : \"Otsing kestusega"
},
{
"path": "l10n/et_EE.json",
"chars": 1435,
"preview": "{ \"translations\": {\n \"the search returned {total} results in {time} ms\" : \"Otsing kestusega {time} ms andis {total} v"
},
{
"path": "l10n/eu.js",
"chars": 1490,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"the search returned {total} results in {time} ms\" : \"bilaketak {total"
},
{
"path": "l10n/eu.json",
"chars": 1476,
"preview": "{ \"translations\": {\n \"the search returned {total} results in {time} ms\" : \"bilaketak {total} emaitza itzuli ditu {tim"
},
{
"path": "l10n/fa.js",
"chars": 1425,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"the search returned {total} results in {time} ms\" : \"بازگشت جستوجو"
},
{
"path": "l10n/fa.json",
"chars": 1411,
"preview": "{ \"translations\": {\n \"the search returned {total} results in {time} ms\" : \"بازگشت جستوجو {کل} نتایج در {زمان}\",\n "
},
{
"path": "l10n/fi.js",
"chars": 801,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"the search returned {total} results in {time} ms\" : \"haku palautti {t"
},
{
"path": "l10n/fi.json",
"chars": 787,
"preview": "{ \"translations\": {\n \"the search returned {total} results in {time} ms\" : \"haku palautti {total} tulosta ajassa {time"
},
{
"path": "l10n/fr.js",
"chars": 1667,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"the search returned {total} results in {time} ms\" : \"la recherche a r"
},
{
"path": "l10n/fr.json",
"chars": 1653,
"preview": "{ \"translations\": {\n \"the search returned {total} results in {time} ms\" : \"la recherche a retourné {total} résultat(s"
},
{
"path": "l10n/ga.js",
"chars": 1605,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"the search returned {total} results in {time} ms\" : \"fuair an cuardac"
},
{
"path": "l10n/ga.json",
"chars": 1591,
"preview": "{ \"translations\": {\n \"the search returned {total} results in {time} ms\" : \"fuair an cuardach {total} torthaí in {time"
},
{
"path": "l10n/gd.js",
"chars": 195,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"Search\" : \"Lorg\",\n \"General\" : \"Coitcheann\"\n},\n\"nplurals=4; plural"
},
{
"path": "l10n/gd.json",
"chars": 181,
"preview": "{ \"translations\": {\n \"Search\" : \"Lorg\",\n \"General\" : \"Coitcheann\"\n},\"pluralForm\" :\"nplurals=4; plural=(n==1 || n=="
},
{
"path": "l10n/gl.js",
"chars": 1574,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"the search returned {total} results in {time} ms\" : \"a busca devolveu"
},
{
"path": "l10n/gl.json",
"chars": 1560,
"preview": "{ \"translations\": {\n \"the search returned {total} results in {time} ms\" : \"a busca devolveu {total} resultados en {ti"
},
{
"path": "l10n/he.js",
"chars": 1302,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"the search returned {total} results in {time} ms\" : \"החיפוש החזיר {to"
},
{
"path": "l10n/he.json",
"chars": 1288,
"preview": "{ \"translations\": {\n \"the search returned {total} results in {time} ms\" : \"החיפוש החזיר {total} תוצאות תוך {time} מיל"
},
{
"path": "l10n/hr.js",
"chars": 1646,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"the search returned {total} results in {time} ms\" : \"pretraživanjem j"
},
{
"path": "l10n/hr.json",
"chars": 1632,
"preview": "{ \"translations\": {\n \"the search returned {total} results in {time} ms\" : \"pretraživanjem je pronađeno {total} rezult"
},
{
"path": "l10n/hu.js",
"chars": 1586,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"the search returned {total} results in {time} ms\" : \"a keresés {total"
},
{
"path": "l10n/hu.json",
"chars": 1572,
"preview": "{ \"translations\": {\n \"the search returned {total} results in {time} ms\" : \"a keresés {total} találatot adott vissza {"
},
{
"path": "l10n/hy.js",
"chars": 135,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"Search\" : \"Search\",\n \"General\" : \"Ընդհանուր\"\n},\n\"nplurals=2; plura"
},
{
"path": "l10n/hy.json",
"chars": 121,
"preview": "{ \"translations\": {\n \"Search\" : \"Search\",\n \"General\" : \"Ընդհանուր\"\n},\"pluralForm\" :\"nplurals=2; plural=(n != 1);\"\n"
},
{
"path": "l10n/ia.js",
"chars": 133,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"Search\" : \"Cercar\",\n \"General\" : \"General\"\n},\n\"nplurals=2; plural="
},
{
"path": "l10n/ia.json",
"chars": 119,
"preview": "{ \"translations\": {\n \"Search\" : \"Cercar\",\n \"General\" : \"General\"\n},\"pluralForm\" :\"nplurals=2; plural=(n != 1);\"\n}"
},
{
"path": "l10n/id.js",
"chars": 1511,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"the search returned {total} results in {time} ms\" : \"pencarian mengem"
},
{
"path": "l10n/id.json",
"chars": 1497,
"preview": "{ \"translations\": {\n \"the search returned {total} results in {time} ms\" : \"pencarian mengembalikan {total} hasil dala"
},
{
"path": "l10n/is.js",
"chars": 1522,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"the search returned {total} results in {time} ms\" : \"leitin skilaði {"
},
{
"path": "l10n/is.json",
"chars": 1508,
"preview": "{ \"translations\": {\n \"the search returned {total} results in {time} ms\" : \"leitin skilaði {total} niðurstöðum á {time"
},
{
"path": "l10n/it.js",
"chars": 1660,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"the search returned {total} results in {time} ms\" : \"la ricerca ha re"
},
{
"path": "l10n/it.json",
"chars": 1646,
"preview": "{ \"translations\": {\n \"the search returned {total} results in {time} ms\" : \"la ricerca ha restituito {total} risultati"
},
{
"path": "l10n/ja.js",
"chars": 1195,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"the search returned {total} results in {time} ms\" : \"検索結果{total}件{tim"
},
{
"path": "l10n/ja.json",
"chars": 1181,
"preview": "{ \"translations\": {\n \"the search returned {total} results in {time} ms\" : \"検索結果{total}件{time} ms\",\n \"the search in"
},
{
"path": "l10n/ka.js",
"chars": 131,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"Search\" : \"Search\",\n \"General\" : \"General\"\n},\n\"nplurals=2; plural="
},
{
"path": "l10n/ka.json",
"chars": 117,
"preview": "{ \"translations\": {\n \"Search\" : \"Search\",\n \"General\" : \"General\"\n},\"pluralForm\" :\"nplurals=2; plural=(n!=1);\"\n}"
},
{
"path": "l10n/ka_GE.js",
"chars": 265,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"Search\" : \"ძიება\",\n \"Index not found\" : \"ინდექსი ვერ იქნა ნაპოვნი\""
},
{
"path": "l10n/ka_GE.json",
"chars": 251,
"preview": "{ \"translations\": {\n \"Search\" : \"ძიება\",\n \"Index not found\" : \"ინდექსი ვერ იქნა ნაპოვნი\",\n \"Full text search\" :"
},
{
"path": "l10n/kab.js",
"chars": 129,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"Search\" : \"Nadi\",\n \"General\" : \"Amatu\"\n},\n\"nplurals=2; plural=(n !"
},
{
"path": "l10n/kab.json",
"chars": 115,
"preview": "{ \"translations\": {\n \"Search\" : \"Nadi\",\n \"General\" : \"Amatu\"\n},\"pluralForm\" :\"nplurals=2; plural=(n != 1);\"\n}"
},
{
"path": "l10n/km.js",
"chars": 123,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"Search\" : \"Search\",\n \"General\" : \"ទូទៅ\"\n},\n\"nplurals=1; plural=0;\""
},
{
"path": "l10n/km.json",
"chars": 109,
"preview": "{ \"translations\": {\n \"Search\" : \"Search\",\n \"General\" : \"ទូទៅ\"\n},\"pluralForm\" :\"nplurals=1; plural=0;\"\n}"
},
{
"path": "l10n/kn.js",
"chars": 105,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"Search\" : \"Search\"\n},\n\"nplurals=2; plural=(n > 1);\");\n"
},
{
"path": "l10n/kn.json",
"chars": 91,
"preview": "{ \"translations\": {\n \"Search\" : \"Search\"\n},\"pluralForm\" :\"nplurals=2; plural=(n > 1);\"\n}"
},
{
"path": "l10n/ko.js",
"chars": 903,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"Search\" : \"검색\",\n \"Index not found\" : \"색인을 찾을 수 없음\",\n \"Process t"
},
{
"path": "l10n/ko.json",
"chars": 889,
"preview": "{ \"translations\": {\n \"Search\" : \"검색\",\n \"Index not found\" : \"색인을 찾을 수 없음\",\n \"Process timed out\" : \"처리 시간 초과됨\",\n "
},
{
"path": "l10n/lb.js",
"chars": 135,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"Search\" : \"Search\",\n \"General\" : \"Allgemeng\"\n},\n\"nplurals=2; plura"
},
{
"path": "l10n/lb.json",
"chars": 121,
"preview": "{ \"translations\": {\n \"Search\" : \"Search\",\n \"General\" : \"Allgemeng\"\n},\"pluralForm\" :\"nplurals=2; plural=(n != 1);\"\n"
},
{
"path": "l10n/lo.js",
"chars": 1471,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"the search returned {total} results in {time} ms\" : \"the search retur"
},
{
"path": "l10n/lo.json",
"chars": 1457,
"preview": "{ \"translations\": {\n \"the search returned {total} results in {time} ms\" : \"the search returned {total} results in {ti"
},
{
"path": "l10n/lt_LT.js",
"chars": 1428,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"the search returned {total} results in {time} ms\" : \"paieška pateikė "
},
{
"path": "l10n/lt_LT.json",
"chars": 1414,
"preview": "{ \"translations\": {\n \"the search returned {total} results in {time} ms\" : \"paieška pateikė {total} rezultatus per {ti"
},
{
"path": "l10n/lv.js",
"chars": 557,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"Search\" : \"Meklēt\",\n \"Index not found\" : \"Indekss netika atrasts\","
},
{
"path": "l10n/lv.json",
"chars": 543,
"preview": "{ \"translations\": {\n \"Search\" : \"Meklēt\",\n \"Index not found\" : \"Indekss netika atrasts\",\n \"Full text search\" : "
},
{
"path": "l10n/mk.js",
"chars": 602,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"the search returned {total} results in {time} ms\" : \"Пронајдени се {t"
},
{
"path": "l10n/mk.json",
"chars": 588,
"preview": "{ \"translations\": {\n \"the search returned {total} results in {time} ms\" : \"Пронајдени се {total} резултати за време о"
},
{
"path": "l10n/mn.js",
"chars": 131,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"Search\" : \"Хайх\",\n \"General\" : \"Ерөнхий\"\n},\n\"nplurals=2; plural=(n"
},
{
"path": "l10n/mn.json",
"chars": 117,
"preview": "{ \"translations\": {\n \"Search\" : \"Хайх\",\n \"General\" : \"Ерөнхий\"\n},\"pluralForm\" :\"nplurals=2; plural=(n != 1);\"\n}"
},
{
"path": "l10n/ms_MY.js",
"chars": 123,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"Search\" : \"Search\",\n \"General\" : \"Umum\"\n},\n\"nplurals=1; plural=0;\""
},
{
"path": "l10n/ms_MY.json",
"chars": 109,
"preview": "{ \"translations\": {\n \"Search\" : \"Search\",\n \"General\" : \"Umum\"\n},\"pluralForm\" :\"nplurals=1; plural=0;\"\n}"
},
{
"path": "l10n/nb.js",
"chars": 1437,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"the search returned {total} results in {time} ms\" : \"søket ga {total}"
},
{
"path": "l10n/nb.json",
"chars": 1423,
"preview": "{ \"translations\": {\n \"the search returned {total} results in {time} ms\" : \"søket ga {total} resultater på {time} ms\","
},
{
"path": "l10n/nl.js",
"chars": 1536,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"the search returned {total} results in {time} ms\" : \"de zoekopdracht "
},
{
"path": "l10n/nl.json",
"chars": 1522,
"preview": "{ \"translations\": {\n \"the search returned {total} results in {time} ms\" : \"de zoekopdracht leverde {total} resultaten"
},
{
"path": "l10n/nn_NO.js",
"chars": 134,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"Search\" : \"Search\",\n \"General\" : \"Generelt\"\n},\n\"nplurals=2; plural"
},
{
"path": "l10n/nn_NO.json",
"chars": 120,
"preview": "{ \"translations\": {\n \"Search\" : \"Search\",\n \"General\" : \"Generelt\"\n},\"pluralForm\" :\"nplurals=2; plural=(n != 1);\"\n}"
},
{
"path": "l10n/oc.js",
"chars": 181,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"Search\" : \"Recercar\",\n \"Full text search\" : \"Recèrca tèxt brut\",\n "
},
{
"path": "l10n/oc.json",
"chars": 167,
"preview": "{ \"translations\": {\n \"Search\" : \"Recercar\",\n \"Full text search\" : \"Recèrca tèxt brut\",\n \"General\" : \"Generals\"\n"
},
{
"path": "l10n/pl.js",
"chars": 1698,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"the search returned {total} results in {time} ms\" : \"wyszukiwanie zwr"
},
{
"path": "l10n/pl.json",
"chars": 1684,
"preview": "{ \"translations\": {\n \"the search returned {total} results in {time} ms\" : \"wyszukiwanie zwróciło {total} wyników w {t"
},
{
"path": "l10n/pt_BR.js",
"chars": 1628,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"the search returned {total} results in {time} ms\" : \"a procura encont"
},
{
"path": "l10n/pt_BR.json",
"chars": 1614,
"preview": "{ \"translations\": {\n \"the search returned {total} results in {time} ms\" : \"a procura encontrou {total} resultados em "
},
{
"path": "l10n/pt_PT.js",
"chars": 330,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"Search\" : \"Pesquisar\",\n \"Index not found\" : \"Índice não encontrado"
},
{
"path": "l10n/pt_PT.json",
"chars": 316,
"preview": "{ \"translations\": {\n \"Search\" : \"Pesquisar\",\n \"Index not found\" : \"Índice não encontrado\",\n \"Full text search\" "
},
{
"path": "l10n/ro.js",
"chars": 173,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"Search\" : \"Caută\",\n \"General\" : \"General\"\n},\n\"nplurals=3; plural=("
},
{
"path": "l10n/ro.json",
"chars": 159,
"preview": "{ \"translations\": {\n \"Search\" : \"Caută\",\n \"General\" : \"General\"\n},\"pluralForm\" :\"nplurals=3; plural=(n==1?0:(((n%1"
},
{
"path": "l10n/ru.js",
"chars": 1637,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"the search returned {total} results in {time} ms\" : \"поиск вернул {to"
},
{
"path": "l10n/ru.json",
"chars": 1623,
"preview": "{ \"translations\": {\n \"the search returned {total} results in {time} ms\" : \"поиск вернул {total} результатов за {time}"
},
{
"path": "l10n/sc.js",
"chars": 1619,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"the search returned {total} results in {time} ms\" : \"sa chirca at tor"
},
{
"path": "l10n/sc.json",
"chars": 1605,
"preview": "{ \"translations\": {\n \"the search returned {total} results in {time} ms\" : \"sa chirca at torradu {total} resurtados in"
},
{
"path": "l10n/si.js",
"chars": 134,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"Search\" : \"සොයන්න\",\n \"General\" : \"සමාන්යය\"\n},\n\"nplurals=2; plural"
},
{
"path": "l10n/si.json",
"chars": 120,
"preview": "{ \"translations\": {\n \"Search\" : \"සොයන්න\",\n \"General\" : \"සමාන්යය\"\n},\"pluralForm\" :\"nplurals=2; plural=(n != 1);\"\n}"
},
{
"path": "l10n/sk.js",
"chars": 1537,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"the search returned {total} results in {time} ms\" : \"Vyhľadávanie naš"
},
{
"path": "l10n/sk.json",
"chars": 1523,
"preview": "{ \"translations\": {\n \"the search returned {total} results in {time} ms\" : \"Vyhľadávanie našlo {total} výsledkov za {t"
},
{
"path": "l10n/sl.js",
"chars": 1541,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"the search returned {total} results in {time} ms\" : \"iskanje je vrnil"
},
{
"path": "l10n/sl.json",
"chars": 1527,
"preview": "{ \"translations\": {\n \"the search returned {total} results in {time} ms\" : \"iskanje je vrnilo skupno {total} zadetkov "
},
{
"path": "l10n/sq.js",
"chars": 178,
"preview": "OC.L10N.register(\n \"fulltextsearch\",\n {\n \"Search\" : \"Kërko\",\n \"Search on %s\" : \"Kërkoni në %s\",\n \"General"
},
{
"path": "l10n/sq.json",
"chars": 164,
"preview": "{ \"translations\": {\n \"Search\" : \"Kërko\",\n \"Search on %s\" : \"Kërkoni në %s\",\n \"General\" : \"Të përgjithshme\"\n},\"p"
}
]
// ... and 125 more files (download for full content)
About this extraction
This page contains the full source code of the nextcloud/fulltextsearch GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 325 files (595.6 KB), approximately 176.6k tokens, and a symbol index with 648 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.