From 39414a3b8c251c6944b52d7915f4883583da8d65 Mon Sep 17 00:00:00 2001 From: whatisgalen Date: Fri, 8 Dec 2023 00:48:41 -0800 Subject: [PATCH 001/242] creates new setting for celery threshold of file size re #10381 --- arches/settings.py | 1 + 1 file changed, 1 insertion(+) diff --git a/arches/settings.py b/arches/settings.py index c795de38ce3..b8479cd3051 100644 --- a/arches/settings.py +++ b/arches/settings.py @@ -663,6 +663,7 @@ CELERY_TASK_SERIALIZER = "json" CELERY_SEARCH_EXPORT_EXPIRES = 24 * 3600 # seconds CELERY_SEARCH_EXPORT_CHECK = 3600 # seconds +CELERY_FILE_SIZE_THRESHOLD = 500 # bytes CELERY_BEAT_SCHEDULE = { "delete-expired-search-export": {"task": "arches.app.tasks.delete_file", "schedule": CELERY_SEARCH_EXPORT_CHECK}, From c3d5380d6d58f1a43cd636ff3a76a0497f967067 Mon Sep 17 00:00:00 2001 From: whatisgalen Date: Fri, 8 Dec 2023 00:50:20 -0800 Subject: [PATCH 002/242] imports named Celery filesize threshold setting in etl module for relevant logic, re #10381 --- arches/app/etl_modules/import_single_csv.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arches/app/etl_modules/import_single_csv.py b/arches/app/etl_modules/import_single_csv.py index efb5e1b82f9..80372ffb772 100644 --- a/arches/app/etl_modules/import_single_csv.py +++ b/arches/app/etl_modules/import_single_csv.py @@ -150,7 +150,7 @@ def write(self, request): temp_dir = os.path.join(settings.UPLOADED_FILES_DIR, "tmp", self.loadid) csv_file_path = os.path.join(temp_dir, csv_file_name) csv_size = default_storage.size(csv_file_path) # file size in byte - use_celery_threshold = 500 # 500 bytes + use_celery_threshold = settings.CELERY_FILE_SIZE_THRESHOLD if csv_size > use_celery_threshold: response = self.run_load_task_async(request, self.loadid) From 6edfe5c1f98a0b4da6e7934eece194042f1daa4a Mon Sep 17 00:00:00 2001 From: Galen Date: Thu, 7 Mar 2024 15:16:56 -0800 Subject: [PATCH 003/242] adds gear icon to rr dt config in node graph mgr context re #10666 --- .../templates/views/components/datatypes/resource-instance.htm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arches/app/templates/views/components/datatypes/resource-instance.htm b/arches/app/templates/views/components/datatypes/resource-instance.htm index bb7f542802f..23534724630 100644 --- a/arches/app/templates/views/components/datatypes/resource-instance.htm +++ b/arches/app/templates/views/components/datatypes/resource-instance.htm @@ -41,7 +41,7 @@ clickBubble: false, onEnterkeyClick, onSpaceClick," style="cursor: pointer;"> -
+
From 5d6c162cfeaa6a7f03fbf070c9705d83d3ca6c59 Mon Sep 17 00:00:00 2001 From: Galen Date: Thu, 7 Mar 2024 16:19:04 -0800 Subject: [PATCH 004/242] delegates relationship type ux to own icon button in rr-mgr re #10666 --- .../related-resources/related-resources-manager.htm | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/arches/app/templates/views/resource/related-resources/related-resources-manager.htm b/arches/app/templates/views/resource/related-resources/related-resources-manager.htm index 88413eae6e0..2582fe8df54 100644 --- a/arches/app/templates/views/resource/related-resources/related-resources-manager.htm +++ b/arches/app/templates/views/resource/related-resources/related-resources-manager.htm @@ -138,7 +138,12 @@

-
+
+ +
+
From 34ed3ea3d6ed45dda8a6193250aae3e4688e654b Mon Sep 17 00:00:00 2001 From: Galen Date: Thu, 7 Mar 2024 16:20:12 -0800 Subject: [PATCH 005/242] delegates relationship type ux to own icon button in rr dt widget re #10666 --- .../widgets/resource-instance-select.htm | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/arches/app/templates/views/components/widgets/resource-instance-select.htm b/arches/app/templates/views/components/widgets/resource-instance-select.htm index 8453d97a4ea..c19deb98ada 100644 --- a/arches/app/templates/views/components/widgets/resource-instance-select.htm +++ b/arches/app/templates/views/components/widgets/resource-instance-select.htm @@ -84,10 +84,14 @@ -
+ + +
+
@@ -321,10 +325,14 @@
-
+ + +
+
From 42f28bc713c6c4f7c0ed425e62bf1ef46cd52790 Mon Sep 17 00:00:00 2001 From: Galen Date: Thu, 7 Mar 2024 16:21:33 -0800 Subject: [PATCH 006/242] delegates relationship type ux to own icon button in rr datatype re #10666 --- .../components/datatypes/resource-instance.htm | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/arches/app/templates/views/components/datatypes/resource-instance.htm b/arches/app/templates/views/components/datatypes/resource-instance.htm index 23534724630..198d31c44d6 100644 --- a/arches/app/templates/views/components/datatypes/resource-instance.htm +++ b/arches/app/templates/views/components/datatypes/resource-instance.htm @@ -35,13 +35,19 @@ -
-
+ style="cursor: pointer;"> + + +
+
+
+
From 562c19c8978ba5afe98eb4001b4dc267bb3d740f Mon Sep 17 00:00:00 2001 From: Galen Date: Thu, 7 Mar 2024 16:22:01 -0800 Subject: [PATCH 007/242] rm unneeded styling re #10666 --- .../templates/views/components/datatypes/resource-instance.htm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arches/app/templates/views/components/datatypes/resource-instance.htm b/arches/app/templates/views/components/datatypes/resource-instance.htm index 198d31c44d6..04176fc7b49 100644 --- a/arches/app/templates/views/components/datatypes/resource-instance.htm +++ b/arches/app/templates/views/components/datatypes/resource-instance.htm @@ -45,7 +45,7 @@
-
+
From 85efa8a6610eb62984ce4a46939cc8576218dcc1 Mon Sep 17 00:00:00 2001 From: Galen Date: Sat, 16 Mar 2024 16:04:57 -0700 Subject: [PATCH 008/242] creates transln var for configure btn re #10666 --- arches/app/templates/javascript.htm | 1 + .../templates/views/components/datatypes/resource-instance.htm | 1 + 2 files changed, 2 insertions(+) diff --git a/arches/app/templates/javascript.htm b/arches/app/templates/javascript.htm index cee2cc812bb..8d20864c62b 100644 --- a/arches/app/templates/javascript.htm +++ b/arches/app/templates/javascript.htm @@ -189,6 +189,7 @@ select-a-nodegroup='{% trans "Select a nodegroup" as selectANodegroup %} "{{ selectANodegroup|escapejs }}"' no-relationships-added='{% trans "No Relationships Added" as noRelationshipsAdded %} "{{ noRelationshipsAdded|escapejs }}"' relate-resource='{% trans "Relate Resource" as relateResource %} "{{ relateResource|escapejs }}"' + configure-related-resource-relationship='{% trans "Configure Related Resource Relationship" as configureRelateResourceRelationship %} "{{ configureRelateResourceRelationship|escapejs }}"' cannot-be-related='{% trans "Cannot Be Related" as cannotBeRelated %} "{{ cannotBeRelated|escapejs }}"' related-resources='{% trans "Related Resources" as relatedResources %} "{{ relatedResources|escapejs }}"' view-related-resources='(resource) => {return {% trans "View resources related to ${resource}" as viewRelatedResources %} `{{ viewRelatedResources|escapejs }}` }' diff --git a/arches/app/templates/views/components/datatypes/resource-instance.htm b/arches/app/templates/views/components/datatypes/resource-instance.htm index 04176fc7b49..1418de91757 100644 --- a/arches/app/templates/views/components/datatypes/resource-instance.htm +++ b/arches/app/templates/views/components/datatypes/resource-instance.htm @@ -39,6 +39,7 @@
-
+
From 650eb41f5aa1b0148f1e831d63d2bd895af81aec Mon Sep 17 00:00:00 2001 From: Christopher Byrd Date: Tue, 7 May 2024 13:35:48 -0700 Subject: [PATCH 137/242] nit #10774 --- releases/7.6.0.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/releases/7.6.0.md b/releases/7.6.0.md index bae045d9f21..1e0dea028ce 100644 --- a/releases/7.6.0.md +++ b/releases/7.6.0.md @@ -13,7 +13,7 @@ Arches 7.6.0 Release Notes - 10453 Reduce queries for related objects when indexing resources ### Additional improvements and bug fixes -- 10774 adds Vue component testing +- 10774 adds Vue testing framework - 10757 moves `node_modules` and `webpack` directories to root - 10558 Combine templates for Arches project and applications and move several dotfiles to root - 10490 Fixes an issue where webpack receives multiple build calls when running in a container @@ -36,12 +36,12 @@ System: GNU gettext == 0.22.4 Upgraded: - NodeJS 16.x > 20.12.2 + NodeJS == 20.12.2 Python: Upgraded: - Django 4.2.8 > 4.2.9 - openpyxl 3.0.7 > 3.0.10 + Django == 4.2.9 + openpyxl == 3.0.10 Added: @@ -53,18 +53,18 @@ Python: JavaScript: Upgraded: vue == 3.4.21 - datatables.net-bs ~1.13.11 - datatables.net-buttons ~2.4.3 - datatables.net-buttons-bs ~2.4.3 - datatables.net-responsive ~2.5.1 - datatables.net-responsive-bs ~2.5.1 + datatables.net-bs == 1.13.11 + datatables.net-buttons == 2.4.3 + datatables.net-buttons-bs == 2.4.3 + datatables.net-responsive == 2.5.1 + datatables.net-responsive-bs == 2.5.1 Added: @babel/plugin-transform-class-properties == 7.23.3 @typescript-eslint/eslint-plugin == 6.18.1 @typescript-eslint/parser == 6.18.1 eslint-plugin-vue == 9.20.0 - primevue == 3.50.0 + primevue == 3.51.0 nodemon == 3.0.2 sass == 1.70.0 ts-loader == 9.5.1 From 3bfb5f9d3381bf1dee369b0d6a838fe6c92b6e1c Mon Sep 17 00:00:00 2001 From: Christopher Byrd Date: Tue, 7 May 2024 13:41:34 -0700 Subject: [PATCH 138/242] nit #10774 --- .gitignore | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index c5a08d06b2b..3c95bc55e37 100644 --- a/.gitignore +++ b/.gitignore @@ -12,8 +12,7 @@ arches/uploadedfiles arches/settings_local.py tests/settings_local.py arches/logs/authority_file_errors.txt -.coverage -coverage.* +coverage/ arches.log .atom-build.json .atom-build.yml From c875d96e500320885f4a3f441def1496453c0205 Mon Sep 17 00:00:00 2001 From: Christopher Byrd Date: Tue, 7 May 2024 14:20:31 -0700 Subject: [PATCH 139/242] nit #10774 --- .github/workflows/main.yml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 997e5903ef1..fd51ddeaf9b 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -86,7 +86,7 @@ jobs: run: | coverage report coverage json - mv coverage.json feature_branch_coverage.json + mv coverage/python/coverage.json feature_branch_coverage.json - name: Upload coverage report as artifact uses: actions/upload-artifact@v4 @@ -178,7 +178,13 @@ jobs: run: | coverage report coverage json - mv coverage.json target_branch_coverage.json + + # handles older target branch + if [ -f coverage/python/coverage.json ]; then + mv coverage/python/coverage.json target_branch_coverage.json + else + mv coverage.json target_branch_coverage.json + fi - name: Upload coverage report as artifact uses: actions/upload-artifact@v4 From abf427c008f796df0b193e0e4214ecfd3fceddfa Mon Sep 17 00:00:00 2001 From: Christopher Byrd Date: Tue, 7 May 2024 14:21:17 -0700 Subject: [PATCH 140/242] nit #10774 --- .../arches-templates/.github/workflows/main.yml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/arches/install/arches-templates/.github/workflows/main.yml b/arches/install/arches-templates/.github/workflows/main.yml index 997e5903ef1..fd51ddeaf9b 100644 --- a/arches/install/arches-templates/.github/workflows/main.yml +++ b/arches/install/arches-templates/.github/workflows/main.yml @@ -86,7 +86,7 @@ jobs: run: | coverage report coverage json - mv coverage.json feature_branch_coverage.json + mv coverage/python/coverage.json feature_branch_coverage.json - name: Upload coverage report as artifact uses: actions/upload-artifact@v4 @@ -178,7 +178,13 @@ jobs: run: | coverage report coverage json - mv coverage.json target_branch_coverage.json + + # handles older target branch + if [ -f coverage/python/coverage.json ]; then + mv coverage/python/coverage.json target_branch_coverage.json + else + mv coverage.json target_branch_coverage.json + fi - name: Upload coverage report as artifact uses: actions/upload-artifact@v4 From 6b4521b6c1911ef193bbaad077307e0bee5fbc5d Mon Sep 17 00:00:00 2001 From: Christopher Byrd Date: Tue, 7 May 2024 15:03:02 -0700 Subject: [PATCH 141/242] nit #10774 --- .github/workflows/main.yml | 84 +++++++++++++------ arches/app/src/ExampleComponent.spec.ts | 25 ------ arches/app/src/ExampleComponent.vue | 20 ----- .../.github/workflows/main.yml | 84 +++++++++++++------ .../arches-templates/vitest.config.mts | 19 ++++- releases/7.6.0.md | 2 +- vitest.config.mts | 3 +- 7 files changed, 135 insertions(+), 102 deletions(-) delete mode 100644 arches/app/src/ExampleComponent.spec.ts delete mode 100644 arches/app/src/ExampleComponent.vue diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index fd51ddeaf9b..3ef2e973f4c 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -39,7 +39,7 @@ jobs: sudo apt-get install libxml2-dev libpq-dev openjdk-8-jdk libgdal-dev libxslt-dev echo Postgres and ES dependencies installed - - name: Install python packages + - name: Install Python packages run: | python -m pip install --upgrade pip pip install . @@ -70,29 +70,44 @@ jobs: echo "package.json not found, skipping yarn commands." fi + - name: Run frontend tests + run: | + yarn vitest + + - name: Generate frontend report coverage + run: | + mv coverage/frontend/coverage.xml feature_branch_frontend_coverage.xml + - name: Check for missing migrations run: | python manage.py makemigrations --check - - name: Ensure previous coverage data is erased + - name: Ensure previous Python coverage data is erased run: | coverage erase - - name: Run unit tests + - name: Run Python unit tests run: | python -W default::DeprecationWarning -m coverage run manage.py test tests --settings="tests.test_settings" - - name: Generate report coverage + - name: Generate Python report coverage run: | coverage report coverage json - mv coverage/python/coverage.json feature_branch_coverage.json + mv coverage/python/coverage.json feature_branch_python_coverage.json + + - name: Upload frontend coverage report as artifact + uses: actions/upload-artifact@v4 + with: + name: feature-branch-frontend-coverage-report + path: feature_branch_frontend_coverage.xml + overwrite: true - - name: Upload coverage report as artifact + - name: Upload Python coverage report as artifact uses: actions/upload-artifact@v4 with: - name: feature-branch-coverage-report - path: feature_branch_coverage.json + name: feature-branch-python-coverage-report + path: feature_branch_python_coverage.json overwrite: true build_target_branch: @@ -131,7 +146,7 @@ jobs: sudo apt-get install libxml2-dev libpq-dev openjdk-8-jdk libgdal-dev libxslt-dev echo Postgres and ES dependencies installed - - name: Install python packages + - name: Install Python packages run: | python -m pip install --upgrade pip pip install . @@ -162,35 +177,50 @@ jobs: echo "package.json not found, skipping yarn commands." fi + - name: Run frontend tests + run: | + yarn vitest + + - name: Generate frontend report coverage + run: | + mv coverage/frontend/coverage.xml target_branch_frontend_coverage.xml + - name: Check for missing migrations run: | python manage.py makemigrations --check - - name: Ensure previous coverage data is erased + - name: Ensure previous Python coverage data is erased run: | coverage erase - - name: Run unit tests + - name: Run Python unit tests run: | python -W default::DeprecationWarning -m coverage run manage.py test tests --settings="tests.test_settings" - - name: Generate report coverage + - name: Generate Python report coverage run: | coverage report coverage json # handles older target branch if [ -f coverage/python/coverage.json ]; then - mv coverage/python/coverage.json target_branch_coverage.json + mv coverage/python/coverage.json target_branch_python_coverage.json else - mv coverage.json target_branch_coverage.json + mv coverage.json target_branch_python_coverage.json fi - - name: Upload coverage report as artifact + - name: Upload frontend coverage report as artifact + uses: actions/upload-artifact@v4 + with: + name: target-branch-frontend-coverage-report + path: target_branch_frontend_coverage.xml + overwrite: true + + - name: Upload Python coverage report as artifact uses: actions/upload-artifact@v4 with: - name: target-branch-coverage-report - path: target_branch_coverage.json + name: target-branch-python-coverage-report + path: target_branch_python_coverage.json overwrite: true check_coverage: @@ -205,28 +235,28 @@ jobs: python-version: '3.x' # Use the latest available version check-latest: true - - name: Download feature branch coverage report artifact + - name: Download feature branch Python coverage report artifact uses: actions/download-artifact@v4 with: - name: feature-branch-coverage-report + name: feature-branch-python-coverage-report path: . - - name: Download target branch coverage report artifact + - name: Download target branch Python coverage report artifact uses: actions/download-artifact@v4 with: - name: target-branch-coverage-report + name: target-branch-python-coverage-report path: . - - name: Compare coverage with baseline + - name: Compare Python target coverage with baseline if: github.event_name == 'pull_request' run: | - feature_branch_coverage=$(cat feature_branch_coverage.json | grep -o '"totals": {[^}]*' | grep -o '"percent_covered": [0-9.]*' | awk -F ': ' '{print $2}') - target_branch_coverage=$(cat target_branch_coverage.json | grep -o '"totals": {[^}]*' | grep -o '"percent_covered": [0-9.]*' | awk -F ': ' '{print $2}') + feature_branch_python_coverage=$(cat feature_branch_python_coverage.json | grep -o '"totals": {[^}]*' | grep -o '"percent_covered": [0-9.]*' | awk -F ': ' '{print $2}') + target_branch_python_coverage=$(cat target_branch_python_coverage.json | grep -o '"totals": {[^}]*' | grep -o '"percent_covered": [0-9.]*' | awk -F ': ' '{print $2}') # Compare current coverage with baseline coverage using floating-point comparison - if awk -v feature="$feature_branch_coverage" -v target="$target_branch_coverage" 'BEGIN { exit (feature < target) ? 0 : 1 }'; then - echo "Coverage decreased from $target_branch_coverage% to $feature_branch_coverage%" + if awk -v feature="$feature_branch_python_coverage" -v target="$target_branch_python_coverage" 'BEGIN { exit (feature < target) ? 0 : 1 }'; then + echo "Coverage decreased from $target_branch_python_coverage% to $feature_branch_python_coverage%. Please add or update tests to this branch to increase coverage." exit 1 else - echo "Feature branch coverage ($feature_branch_coverage%) >= Target branch coverage ($target_branch_coverage%)." + echo "Feature branch coverage ($feature_branch_python_coverage%) >= Target branch coverage ($target_branch_python_coverage%)." fi diff --git a/arches/app/src/ExampleComponent.spec.ts b/arches/app/src/ExampleComponent.spec.ts deleted file mode 100644 index f64f546e7be..00000000000 --- a/arches/app/src/ExampleComponent.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { describe, it, expect } from 'vitest'; -import { mount } from '@vue/test-utils'; - -import ExampleComponent from '@/ExampleComponent.vue'; - - -describe('ExampleComponent', () => { - it('renders correctly', () => { - const wrapper = mount(ExampleComponent); - expect(wrapper.exists()).toBeTruthy(); - }); - - - it('renders h1 element with correct text', () => { - const wrapper = mount(ExampleComponent); - expect(wrapper.find('h1').text()).toBe('Hello from the template!'); - }); - - - it('applies scoped styles to h1 element', () => { - const wrapper = mount(ExampleComponent); - const h1 = wrapper.find('h1'); - expect(h1.classes()).toContain('header'); - }); -}); diff --git a/arches/app/src/ExampleComponent.vue b/arches/app/src/ExampleComponent.vue deleted file mode 100644 index 86931a1d171..00000000000 --- a/arches/app/src/ExampleComponent.vue +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/arches/install/arches-templates/.github/workflows/main.yml b/arches/install/arches-templates/.github/workflows/main.yml index fd51ddeaf9b..3ef2e973f4c 100644 --- a/arches/install/arches-templates/.github/workflows/main.yml +++ b/arches/install/arches-templates/.github/workflows/main.yml @@ -39,7 +39,7 @@ jobs: sudo apt-get install libxml2-dev libpq-dev openjdk-8-jdk libgdal-dev libxslt-dev echo Postgres and ES dependencies installed - - name: Install python packages + - name: Install Python packages run: | python -m pip install --upgrade pip pip install . @@ -70,29 +70,44 @@ jobs: echo "package.json not found, skipping yarn commands." fi + - name: Run frontend tests + run: | + yarn vitest + + - name: Generate frontend report coverage + run: | + mv coverage/frontend/coverage.xml feature_branch_frontend_coverage.xml + - name: Check for missing migrations run: | python manage.py makemigrations --check - - name: Ensure previous coverage data is erased + - name: Ensure previous Python coverage data is erased run: | coverage erase - - name: Run unit tests + - name: Run Python unit tests run: | python -W default::DeprecationWarning -m coverage run manage.py test tests --settings="tests.test_settings" - - name: Generate report coverage + - name: Generate Python report coverage run: | coverage report coverage json - mv coverage/python/coverage.json feature_branch_coverage.json + mv coverage/python/coverage.json feature_branch_python_coverage.json + + - name: Upload frontend coverage report as artifact + uses: actions/upload-artifact@v4 + with: + name: feature-branch-frontend-coverage-report + path: feature_branch_frontend_coverage.xml + overwrite: true - - name: Upload coverage report as artifact + - name: Upload Python coverage report as artifact uses: actions/upload-artifact@v4 with: - name: feature-branch-coverage-report - path: feature_branch_coverage.json + name: feature-branch-python-coverage-report + path: feature_branch_python_coverage.json overwrite: true build_target_branch: @@ -131,7 +146,7 @@ jobs: sudo apt-get install libxml2-dev libpq-dev openjdk-8-jdk libgdal-dev libxslt-dev echo Postgres and ES dependencies installed - - name: Install python packages + - name: Install Python packages run: | python -m pip install --upgrade pip pip install . @@ -162,35 +177,50 @@ jobs: echo "package.json not found, skipping yarn commands." fi + - name: Run frontend tests + run: | + yarn vitest + + - name: Generate frontend report coverage + run: | + mv coverage/frontend/coverage.xml target_branch_frontend_coverage.xml + - name: Check for missing migrations run: | python manage.py makemigrations --check - - name: Ensure previous coverage data is erased + - name: Ensure previous Python coverage data is erased run: | coverage erase - - name: Run unit tests + - name: Run Python unit tests run: | python -W default::DeprecationWarning -m coverage run manage.py test tests --settings="tests.test_settings" - - name: Generate report coverage + - name: Generate Python report coverage run: | coverage report coverage json # handles older target branch if [ -f coverage/python/coverage.json ]; then - mv coverage/python/coverage.json target_branch_coverage.json + mv coverage/python/coverage.json target_branch_python_coverage.json else - mv coverage.json target_branch_coverage.json + mv coverage.json target_branch_python_coverage.json fi - - name: Upload coverage report as artifact + - name: Upload frontend coverage report as artifact + uses: actions/upload-artifact@v4 + with: + name: target-branch-frontend-coverage-report + path: target_branch_frontend_coverage.xml + overwrite: true + + - name: Upload Python coverage report as artifact uses: actions/upload-artifact@v4 with: - name: target-branch-coverage-report - path: target_branch_coverage.json + name: target-branch-python-coverage-report + path: target_branch_python_coverage.json overwrite: true check_coverage: @@ -205,28 +235,28 @@ jobs: python-version: '3.x' # Use the latest available version check-latest: true - - name: Download feature branch coverage report artifact + - name: Download feature branch Python coverage report artifact uses: actions/download-artifact@v4 with: - name: feature-branch-coverage-report + name: feature-branch-python-coverage-report path: . - - name: Download target branch coverage report artifact + - name: Download target branch Python coverage report artifact uses: actions/download-artifact@v4 with: - name: target-branch-coverage-report + name: target-branch-python-coverage-report path: . - - name: Compare coverage with baseline + - name: Compare Python target coverage with baseline if: github.event_name == 'pull_request' run: | - feature_branch_coverage=$(cat feature_branch_coverage.json | grep -o '"totals": {[^}]*' | grep -o '"percent_covered": [0-9.]*' | awk -F ': ' '{print $2}') - target_branch_coverage=$(cat target_branch_coverage.json | grep -o '"totals": {[^}]*' | grep -o '"percent_covered": [0-9.]*' | awk -F ': ' '{print $2}') + feature_branch_python_coverage=$(cat feature_branch_python_coverage.json | grep -o '"totals": {[^}]*' | grep -o '"percent_covered": [0-9.]*' | awk -F ': ' '{print $2}') + target_branch_python_coverage=$(cat target_branch_python_coverage.json | grep -o '"totals": {[^}]*' | grep -o '"percent_covered": [0-9.]*' | awk -F ': ' '{print $2}') # Compare current coverage with baseline coverage using floating-point comparison - if awk -v feature="$feature_branch_coverage" -v target="$target_branch_coverage" 'BEGIN { exit (feature < target) ? 0 : 1 }'; then - echo "Coverage decreased from $target_branch_coverage% to $feature_branch_coverage%" + if awk -v feature="$feature_branch_python_coverage" -v target="$target_branch_python_coverage" 'BEGIN { exit (feature < target) ? 0 : 1 }'; then + echo "Coverage decreased from $target_branch_python_coverage% to $feature_branch_python_coverage%. Please add or update tests to this branch to increase coverage." exit 1 else - echo "Feature branch coverage ($feature_branch_coverage%) >= Target branch coverage ($target_branch_coverage%)." + echo "Feature branch coverage ($feature_branch_python_coverage%) >= Target branch coverage ($target_branch_python_coverage%)." fi diff --git a/arches/install/arches-templates/vitest.config.mts b/arches/install/arches-templates/vitest.config.mts index b9471c2b7c9..cc3142064d1 100644 --- a/arches/install/arches-templates/vitest.config.mts +++ b/arches/install/arches-templates/vitest.config.mts @@ -11,14 +11,31 @@ export default defineConfig({ }, coverage: { include: [path.join(path.basename(__dirname), 'src', '/')], + exclude: [ + '**/node_modules/**', + '**/dist/**', + '**/cypress/**', + '**/.{idea,git,cache,output,temp}/**', + '**/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build}.config.*', + path.join(path.basename(__dirname), 'install', '**') + ], reporter: [ ['clover', { 'file': 'coverage.xml' }], 'text', ], - reportsDirectory: path.join(__dirname, 'coverage', 'vue'), + reportsDirectory: path.join(__dirname, 'coverage', 'frontend'), }, environment: "jsdom", globals: true, + exclude: [ + '**/node_modules/**', + '**/dist/**', + '**/cypress/**', + '**/.{idea,git,cache,output,temp}/**', + '**/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build}.config.*', + path.join(path.basename(__dirname), 'install', '**') + ], + passWithNoTests: true, setupFiles: ['vitest.setup.mts'], }, }); diff --git a/releases/7.6.0.md b/releases/7.6.0.md index 1e0dea028ce..e118ea73326 100644 --- a/releases/7.6.0.md +++ b/releases/7.6.0.md @@ -13,7 +13,7 @@ Arches 7.6.0 Release Notes - 10453 Reduce queries for related objects when indexing resources ### Additional improvements and bug fixes -- 10774 adds Vue testing framework +- 10774 adds frontend testing framework - 10757 moves `node_modules` and `webpack` directories to root - 10558 Combine templates for Arches project and applications and move several dotfiles to root - 10490 Fixes an issue where webpack receives multiple build calls when running in a container diff --git a/vitest.config.mts b/vitest.config.mts index edc9d5e5551..4c083d52446 100644 --- a/vitest.config.mts +++ b/vitest.config.mts @@ -23,7 +23,7 @@ export default defineConfig({ ['clover', { 'file': 'coverage.xml' }], 'text', ], - reportsDirectory: path.join(__dirname, 'coverage', 'vue'), + reportsDirectory: path.join(__dirname, 'coverage', 'frontend'), }, environment: "jsdom", globals: true, @@ -35,6 +35,7 @@ export default defineConfig({ '**/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build}.config.*', path.join(path.basename(__dirname), 'install', '**') ], + passWithNoTests: true, setupFiles: ['vitest.setup.mts'], }, }); From 7f7da711cbf4127c9ba35409b1a53ce58ce2913a Mon Sep 17 00:00:00 2001 From: Christopher Byrd Date: Tue, 7 May 2024 15:17:32 -0700 Subject: [PATCH 142/242] nit #10774 --- .github/workflows/main.yml | 14 +++++------ .../project_name/src/ExampleComponent.spec.ts | 25 ------------------- .../project_name/src/ExampleComponent.vue | 20 --------------- 3 files changed, 6 insertions(+), 53 deletions(-) delete mode 100644 arches/install/arches-templates/project_name/src/ExampleComponent.spec.ts delete mode 100644 arches/install/arches-templates/project_name/src/ExampleComponent.vue diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 3ef2e973f4c..7f7cc2b581c 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -73,9 +73,6 @@ jobs: - name: Run frontend tests run: | yarn vitest - - - name: Generate frontend report coverage - run: | mv coverage/frontend/coverage.xml feature_branch_frontend_coverage.xml - name: Check for missing migrations @@ -179,11 +176,12 @@ jobs: - name: Run frontend tests run: | - yarn vitest - - - name: Generate frontend report coverage - run: | - mv coverage/frontend/coverage.xml target_branch_frontend_coverage.xml + if [ -f vitest.config.json ]; then + yarn vitest + mv coverage/frontend/coverage.xml target_branch_frontend_coverage.xml + else + echo "Unable to find vitest config. Skipping frontend tests." + fi - name: Check for missing migrations run: | diff --git a/arches/install/arches-templates/project_name/src/ExampleComponent.spec.ts b/arches/install/arches-templates/project_name/src/ExampleComponent.spec.ts deleted file mode 100644 index f64f546e7be..00000000000 --- a/arches/install/arches-templates/project_name/src/ExampleComponent.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { describe, it, expect } from 'vitest'; -import { mount } from '@vue/test-utils'; - -import ExampleComponent from '@/ExampleComponent.vue'; - - -describe('ExampleComponent', () => { - it('renders correctly', () => { - const wrapper = mount(ExampleComponent); - expect(wrapper.exists()).toBeTruthy(); - }); - - - it('renders h1 element with correct text', () => { - const wrapper = mount(ExampleComponent); - expect(wrapper.find('h1').text()).toBe('Hello from the template!'); - }); - - - it('applies scoped styles to h1 element', () => { - const wrapper = mount(ExampleComponent); - const h1 = wrapper.find('h1'); - expect(h1.classes()).toContain('header'); - }); -}); diff --git a/arches/install/arches-templates/project_name/src/ExampleComponent.vue b/arches/install/arches-templates/project_name/src/ExampleComponent.vue deleted file mode 100644 index 86931a1d171..00000000000 --- a/arches/install/arches-templates/project_name/src/ExampleComponent.vue +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - \ No newline at end of file From 805b08f2220bb2a822762407985bae3a73e8cf45 Mon Sep 17 00:00:00 2001 From: Christopher Byrd Date: Tue, 7 May 2024 15:59:42 -0700 Subject: [PATCH 143/242] nit #10774 --- .github/workflows/main.yml | 39 +++++++++++++++++++++++++ arches/app/src/ExampleComponent.spec.ts | 25 ++++++++++++++++ arches/app/src/ExampleComponent.vue | 20 +++++++++++++ 3 files changed, 84 insertions(+) create mode 100644 arches/app/src/ExampleComponent.spec.ts create mode 100644 arches/app/src/ExampleComponent.vue diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 7f7cc2b581c..10ef5c906e5 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -233,6 +233,45 @@ jobs: python-version: '3.x' # Use the latest available version check-latest: true + - name: Download feature branch frontend coverage report artifact + uses: actions/download-artifact@v4 + with: + name: feature-branch-frontend-coverage-report + path: . + + - name: Extract feature branch frontend coverage data + id: coverage + run: | + statements=$(xmllint --xpath "string(/coverage/project/metrics/@statements)" feature_branch_frontend_coverage.xml) + coveredstatements=$(xmllint --xpath "string(/coverage/project/metrics/@coveredstatements)" feature_branch_frontend_coverage.xml) + conditionals=$(xmllint --xpath "string(/coverage/project/metrics/@conditionals)" feature_branch_frontend_coverage.xml) + coveredconditionals=$(xmllint --xpath "string(/coverage/project/metrics/@coveredconditionals)" feature_branch_frontend_coverage.xml) + methods=$(xmllint --xpath "string(/coverage/project/metrics/@methods)" feature_branch_frontend_coverage.xml) + coveredmethods=$(xmllint --xpath "string(/coverage/project/metrics/@coveredmethods)" feature_branch_frontend_coverage.xml) + elements=$(xmllint --xpath "string(/coverage/project/metrics/@elements)" feature_branch_frontend_coverage.xml) + coveredelements=$(xmllint --xpath "string(/coverage/project/metrics/@coveredelements)" feature_branch_frontend_coverage.xml) + + statement_coverage=$(echo "scale=2; ${{ coveredstatements }} / ${{ statements }} * 100" | bc) + conditional_coverage=$(echo "scale=2; ${{ coveredconditionals }} / ${{ conditionals }} * 100" | bc) + method_coverage=$(echo "scale=2; ${{ coveredmethods }} / ${{ methods }} * 100" | bc) + element_coverage=$(echo "scale=2; ${{ coveredelements }} / ${{ elements }} * 100" | bc) + + feature_branch_frontend_coverage=$(echo "scale=2; (${{ statement_coverage }} + ${{ conditional_coverage }} + ${{ method_coverage }} + ${{ element_coverage }}) / 4" | bc) + + echo "feature_branch_frontend_coverage=$feature_branch_frontend_coverage" >> $GITHUB_ENV + echo "Coverage: $feature_branch_frontend_coverage%" + + - name: Download target branch frontend coverage report artifact + uses: actions/download-artifact@v4 + with: + name: target-branch-frontend-coverage-report + path: . + + - name: Compare Python target coverage with baseline + if: github.event_name == 'pull_request' + run: | + + - name: Download feature branch Python coverage report artifact uses: actions/download-artifact@v4 with: diff --git a/arches/app/src/ExampleComponent.spec.ts b/arches/app/src/ExampleComponent.spec.ts new file mode 100644 index 00000000000..f64f546e7be --- /dev/null +++ b/arches/app/src/ExampleComponent.spec.ts @@ -0,0 +1,25 @@ +import { describe, it, expect } from 'vitest'; +import { mount } from '@vue/test-utils'; + +import ExampleComponent from '@/ExampleComponent.vue'; + + +describe('ExampleComponent', () => { + it('renders correctly', () => { + const wrapper = mount(ExampleComponent); + expect(wrapper.exists()).toBeTruthy(); + }); + + + it('renders h1 element with correct text', () => { + const wrapper = mount(ExampleComponent); + expect(wrapper.find('h1').text()).toBe('Hello from the template!'); + }); + + + it('applies scoped styles to h1 element', () => { + const wrapper = mount(ExampleComponent); + const h1 = wrapper.find('h1'); + expect(h1.classes()).toContain('header'); + }); +}); diff --git a/arches/app/src/ExampleComponent.vue b/arches/app/src/ExampleComponent.vue new file mode 100644 index 00000000000..86931a1d171 --- /dev/null +++ b/arches/app/src/ExampleComponent.vue @@ -0,0 +1,20 @@ + + + + + + + \ No newline at end of file From e32c2f3d85933cc15b341411e7c6b7852137515c Mon Sep 17 00:00:00 2001 From: Christopher Byrd Date: Tue, 7 May 2024 16:04:39 -0700 Subject: [PATCH 144/242] nit #10774 --- .github/workflows/main.yml | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 10ef5c906e5..f24e74b4db5 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -240,7 +240,6 @@ jobs: path: . - name: Extract feature branch frontend coverage data - id: coverage run: | statements=$(xmllint --xpath "string(/coverage/project/metrics/@statements)" feature_branch_frontend_coverage.xml) coveredstatements=$(xmllint --xpath "string(/coverage/project/metrics/@coveredstatements)" feature_branch_frontend_coverage.xml) @@ -251,12 +250,12 @@ jobs: elements=$(xmllint --xpath "string(/coverage/project/metrics/@elements)" feature_branch_frontend_coverage.xml) coveredelements=$(xmllint --xpath "string(/coverage/project/metrics/@coveredelements)" feature_branch_frontend_coverage.xml) - statement_coverage=$(echo "scale=2; ${{ coveredstatements }} / ${{ statements }} * 100" | bc) - conditional_coverage=$(echo "scale=2; ${{ coveredconditionals }} / ${{ conditionals }} * 100" | bc) - method_coverage=$(echo "scale=2; ${{ coveredmethods }} / ${{ methods }} * 100" | bc) - element_coverage=$(echo "scale=2; ${{ coveredelements }} / ${{ elements }} * 100" | bc) + statement_coverage=$(echo "scale=2; $coveredstatements / $statements * 100" | bc) + conditional_coverage=$(echo "scale=2; $coveredconditionals / $conditionals * 100" | bc) + method_coverage=$(echo "scale=2; $coveredmethods / $methods * 100" | bc) + element_coverage=$(echo "scale=2; $coveredelements / $elements * 100" | bc) - feature_branch_frontend_coverage=$(echo "scale=2; (${{ statement_coverage }} + ${{ conditional_coverage }} + ${{ method_coverage }} + ${{ element_coverage }}) / 4" | bc) + feature_branch_frontend_coverage=$(echo "scale=2; ($statement_coverage + $conditional_coverage + $method_coverage + $element_coverage) / 4" | bc) echo "feature_branch_frontend_coverage=$feature_branch_frontend_coverage" >> $GITHUB_ENV echo "Coverage: $feature_branch_frontend_coverage%" From e5737e8f851b4c92f158cdda62f77d13d4b86af9 Mon Sep 17 00:00:00 2001 From: Jacob Walls Date: Tue, 7 May 2024 19:33:13 -0400 Subject: [PATCH 145/242] Remove workaround in optimize_resource_iteration() that caused N+1 queries (#10881) Follow-up to f2861f22a34e7bb096bbc95bfcf9188d70611ccf. --- arches/app/utils/index_database.py | 3 +-- tests/models/resource_test.py | 3 ++- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/arches/app/utils/index_database.py b/arches/app/utils/index_database.py index ab68a3757a2..9653a875dd7 100644 --- a/arches/app/utils/index_database.py +++ b/arches/app/utils/index_database.py @@ -218,8 +218,7 @@ def optimize_resource_iteration(resources: Iterable[Resource], chunk_size: int): ) else: # public API that arches itself does not currently use for r in resources: - # retrieve graph -- better for this to have been selected already - r.graph + r.clean_fields() # ensure strings become UUIDs prefetch_related_objects(resources, tiles_prefetch, descriptor_prefetch) return resources diff --git a/tests/models/resource_test.py b/tests/models/resource_test.py index 9bd047f2c42..5fa03e1f9d4 100644 --- a/tests/models/resource_test.py +++ b/tests/models/resource_test.py @@ -19,6 +19,7 @@ import json import os import time +import uuid from django.contrib.auth.models import User, Group from django.db import connection @@ -58,7 +59,7 @@ def setUpClass(cls): archesfile = JSONDeserializer().deserialize(f) resource_graph_importer(archesfile["graph"]) - cls.search_model_graphid = "c9b37a14-17b3-11eb-a708-acde48001122" + cls.search_model_graphid = uuid.UUID("c9b37a14-17b3-11eb-a708-acde48001122") cls.search_model_cultural_period_nodeid = "c9b3882e-17b3-11eb-a708-acde48001122" cls.search_model_creation_date_nodeid = "c9b38568-17b3-11eb-a708-acde48001122" cls.search_model_destruction_date_nodeid = "c9b3828e-17b3-11eb-a708-acde48001122" From e21b3e8c9a10a23f4fa35e4c2b63b9687f1508a2 Mon Sep 17 00:00:00 2001 From: Galen Date: Tue, 7 May 2024 17:40:12 -0700 Subject: [PATCH 146/242] fixes spaceclick not working on rr-rel config btn, re #10666 --- .../templates/views/components/datatypes/resource-instance.htm | 3 +-- .../views/components/widgets/resource-instance-select.htm | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/arches/app/templates/views/components/datatypes/resource-instance.htm b/arches/app/templates/views/components/datatypes/resource-instance.htm index ad4252dfa47..719b4f48674 100644 --- a/arches/app/templates/views/components/datatypes/resource-instance.htm +++ b/arches/app/templates/views/components/datatypes/resource-instance.htm @@ -41,8 +41,7 @@ data-bind=" click: function() { if($parent.isEditable !== false){self.toggleSelectedResource($data)}; }, attr: {'aria-label': $root.translations.configureRelatedResourceRelationship, 'disabled': $parent.isEditable === false,}, - clickBubble: false, - onEnterkeyClick, onSpaceClick," + clickBubble: false," style="cursor: pointer;"> diff --git a/arches/app/templates/views/components/widgets/resource-instance-select.htm b/arches/app/templates/views/components/widgets/resource-instance-select.htm index 1672e5928f9..e04167a4e03 100644 --- a/arches/app/templates/views/components/widgets/resource-instance-select.htm +++ b/arches/app/templates/views/components/widgets/resource-instance-select.htm @@ -85,7 +85,7 @@
-
-
+
From baf74ac4dace65f7bad704b421d0d8a1c7a9251b Mon Sep 17 00:00:00 2001 From: Christopher Byrd Date: Tue, 7 May 2024 17:57:36 -0700 Subject: [PATCH 149/242] nit #10774 --- .github/workflows/main.yml | 40 +++++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index f24e74b4db5..aa152384414 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -240,25 +240,29 @@ jobs: path: . - name: Extract feature branch frontend coverage data + shell: pwsh run: | - statements=$(xmllint --xpath "string(/coverage/project/metrics/@statements)" feature_branch_frontend_coverage.xml) - coveredstatements=$(xmllint --xpath "string(/coverage/project/metrics/@coveredstatements)" feature_branch_frontend_coverage.xml) - conditionals=$(xmllint --xpath "string(/coverage/project/metrics/@conditionals)" feature_branch_frontend_coverage.xml) - coveredconditionals=$(xmllint --xpath "string(/coverage/project/metrics/@coveredconditionals)" feature_branch_frontend_coverage.xml) - methods=$(xmllint --xpath "string(/coverage/project/metrics/@methods)" feature_branch_frontend_coverage.xml) - coveredmethods=$(xmllint --xpath "string(/coverage/project/metrics/@coveredmethods)" feature_branch_frontend_coverage.xml) - elements=$(xmllint --xpath "string(/coverage/project/metrics/@elements)" feature_branch_frontend_coverage.xml) - coveredelements=$(xmllint --xpath "string(/coverage/project/metrics/@coveredelements)" feature_branch_frontend_coverage.xml) - - statement_coverage=$(echo "scale=2; $coveredstatements / $statements * 100" | bc) - conditional_coverage=$(echo "scale=2; $coveredconditionals / $conditionals * 100" | bc) - method_coverage=$(echo "scale=2; $coveredmethods / $methods * 100" | bc) - element_coverage=$(echo "scale=2; $coveredelements / $elements * 100" | bc) - - feature_branch_frontend_coverage=$(echo "scale=2; ($statement_coverage + $conditional_coverage + $method_coverage + $element_coverage) / 4" | bc) - - echo "feature_branch_frontend_coverage=$feature_branch_frontend_coverage" >> $GITHUB_ENV - echo "Coverage: $feature_branch_frontend_coverage%" + [xml]$xml = Get-Content feature_branch_frontend_coverage.xml + $metrics = $xml.coverage.project.metrics + + $statements = [int]$metrics.statements + $coveredstatements = [int]$metrics.coveredstatements + $conditionals = [int]$metrics.conditionals + $coveredconditionals = [int]$metrics.coveredconditionals + $methods = [int]$metrics.methods + $coveredmethods = [int]$metrics.coveredmethods + $elements = [int]$metrics.elements + $coveredelements = [int]$metrics.coveredelements + + $statement_coverage = ($coveredstatements / $statements) * 100 + $conditional_coverage = ($coveredconditionals / $conditionals) * 100 + $method_coverage = ($coveredmethods / $methods) * 100 + $element_coverage = ($coveredelements / $elements) * 100 + + $feature_branch_frontend_coverage = ($statement_coverage + $conditional_coverage + $method_coverage + $element_coverage) / 4 + + Write-Output "feature_branch_frontend_coverage=$feature_branch_frontend_coverage" | Out-File -Append $env:GITHUB_ENV + Write-Output "Coverage: $feature_branch_frontend_coverage%" - name: Download target branch frontend coverage report artifact uses: actions/download-artifact@v4 From 9f76f9fd41307630a84277340887ccfe2e131f32 Mon Sep 17 00:00:00 2001 From: Christopher Byrd Date: Tue, 7 May 2024 18:36:11 -0700 Subject: [PATCH 150/242] nit #10774 --- .github/workflows/main.yml | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index aa152384414..70b8b44c963 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -254,10 +254,23 @@ jobs: $elements = [int]$metrics.elements $coveredelements = [int]$metrics.coveredelements - $statement_coverage = ($coveredstatements / $statements) * 100 - $conditional_coverage = ($coveredconditionals / $conditionals) * 100 - $method_coverage = ($coveredmethods / $methods) * 100 - $element_coverage = ($coveredelements / $elements) * 100 + $statement_coverage = 0 + $conditional_coverage = 0 + $method_coverage = 0 + $element_coverage = 0 + + if ($statements -gt 0) { + $statement_coverage = ($coveredstatements / $statements) * 100 + } + if ($conditionals -gt 0) { + $conditional_coverage = ($coveredconditionals / $conditionals) * 100 + } + if ($methods -gt 0) { + $method_coverage = ($coveredmethods / $methods) * 100 + } + if ($elements -gt 0) { + $element_coverage = ($coveredelements / $elements) * 100 + } $feature_branch_frontend_coverage = ($statement_coverage + $conditional_coverage + $method_coverage + $element_coverage) / 4 From 6b10bac01fb27434d93b04c519fb3ae65f5aa459 Mon Sep 17 00:00:00 2001 From: Christopher Byrd Date: Tue, 7 May 2024 19:35:37 -0700 Subject: [PATCH 151/242] nit #10774 --- .github/workflows/main.yml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 70b8b44c963..0c353f1bd55 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -272,7 +272,18 @@ jobs: $element_coverage = ($coveredelements / $elements) * 100 } - $feature_branch_frontend_coverage = ($statement_coverage + $conditional_coverage + $method_coverage + $element_coverage) / 4 + $nonZeroCount = 0 + $totalCoverage = 0 + + if ($statements -gt 0) { $nonZeroCount++; $totalCoverage += $statement_coverage } + if ($conditionals -gt 0) { $nonZeroCount++; $totalCoverage += $conditional_coverage } + if ($methods -gt 0) { $nonZeroCount++; $totalCoverage += $method_coverage } + if ($elements -gt 0) { $nonZeroCount++; $totalCoverage += $element_coverage } + + $feature_branch_frontend_coverage = 0 + if ($nonZeroCount -gt 0) { + $feature_branch_frontend_coverage = $totalCoverage / $nonZeroCount + } Write-Output "feature_branch_frontend_coverage=$feature_branch_frontend_coverage" | Out-File -Append $env:GITHUB_ENV Write-Output "Coverage: $feature_branch_frontend_coverage%" From ac849ef883b68827f677407dd555ace0acb6b404 Mon Sep 17 00:00:00 2001 From: Galen Date: Fri, 3 May 2024 13:15:54 +0900 Subject: [PATCH 152/242] strips leading, trailing whitespace from concept labels in transform_value_for_tile, re #10868 --- arches/app/datatypes/concept_types.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/arches/app/datatypes/concept_types.py b/arches/app/datatypes/concept_types.py index e92b7173faa..87034c60214 100644 --- a/arches/app/datatypes/concept_types.py +++ b/arches/app/datatypes/concept_types.py @@ -209,6 +209,7 @@ def transform_value_for_tile(self, value, **kwargs): if value == "": value = None else: + value = value.strip() try: value = self.lookup_labelid_from_label(value, kwargs) except: @@ -352,6 +353,7 @@ def transform_value_for_tile(self, value, **kwargs): if v == "": continue else: + v = v.strip() try: ret.append(self.lookup_labelid_from_label(v, kwargs)) except: From c90fe201f0220791d7e9cef2bff15c816315a732 Mon Sep 17 00:00:00 2001 From: Galen Date: Sat, 4 May 2024 09:08:19 +0900 Subject: [PATCH 153/242] Revert "strips leading, trailing whitespace from concept labels in transform_value_for_tile, re #10868" This reverts commit 7adafaf6781d08c7f6d2d7674676b3a185f35959. reverting commit to pursue alt approach --- arches/app/datatypes/concept_types.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/arches/app/datatypes/concept_types.py b/arches/app/datatypes/concept_types.py index 87034c60214..e92b7173faa 100644 --- a/arches/app/datatypes/concept_types.py +++ b/arches/app/datatypes/concept_types.py @@ -209,7 +209,6 @@ def transform_value_for_tile(self, value, **kwargs): if value == "": value = None else: - value = value.strip() try: value = self.lookup_labelid_from_label(value, kwargs) except: @@ -353,7 +352,6 @@ def transform_value_for_tile(self, value, **kwargs): if v == "": continue else: - v = v.strip() try: ret.append(self.lookup_labelid_from_label(v, kwargs)) except: From 64842b234b34b00224dfe2096cc9c55b3d9387f9 Mon Sep 17 00:00:00 2001 From: Galen Date: Sat, 4 May 2024 09:09:27 +0900 Subject: [PATCH 154/242] only calls strip on concept value for lookup in scope of lookup_label(), re #10868 --- arches/app/datatypes/concept_types.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arches/app/datatypes/concept_types.py b/arches/app/datatypes/concept_types.py index e92b7173faa..ad08c2a6e9b 100644 --- a/arches/app/datatypes/concept_types.py +++ b/arches/app/datatypes/concept_types.py @@ -37,7 +37,7 @@ def lookup_label(self, label, collectionid): ret = label collection_values = self.collection_lookup[collectionid] for concept in collection_values: - if label == concept[1]: + if concept[1] in (label, label.strip()): ret = concept[2] return ret From f90561c4cc778d5c96fb0fc9896ecfc091b88e11 Mon Sep 17 00:00:00 2001 From: Christopher Byrd Date: Wed, 8 May 2024 08:45:26 -0700 Subject: [PATCH 155/242] nit #10774 --- .github/workflows/main.yml | 72 ++++++++++++++++++++++++++++++++++---- 1 file changed, 66 insertions(+), 6 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 0c353f1bd55..d26c446b523 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -286,18 +286,78 @@ jobs: } Write-Output "feature_branch_frontend_coverage=$feature_branch_frontend_coverage" | Out-File -Append $env:GITHUB_ENV - Write-Output "Coverage: $feature_branch_frontend_coverage%" - name: Download target branch frontend coverage report artifact uses: actions/download-artifact@v4 with: name: target-branch-frontend-coverage-report path: . + if-no-files-found: 'warn' - - name: Compare Python target coverage with baseline - if: github.event_name == 'pull_request' + - name: Check if target branch frontend coverage report artifact exists + id: check-file + run: | + if [ -f target_branch_frontend_coverage.xml ]; then + echo "##[set-output name=exists;]true" + else + echo "Target branch coverage not found. Defaulting to 0% coverage." + echo "##[set-output name=exists;]false" + fi + + - name: Extract target branch frontend coverage data + if: steps.check-file.outputs.exists == 'true' + shell: pwsh run: | + [xml]$xml = Get-Content target_branch_frontend_coverage.xml + $metrics = $xml.coverage.project.metrics + + $statements = [int]$metrics.statements + $coveredstatements = [int]$metrics.coveredstatements + $conditionals = [int]$metrics.conditionals + $coveredconditionals = [int]$metrics.coveredconditionals + $methods = [int]$metrics.methods + $coveredmethods = [int]$metrics.coveredmethods + $elements = [int]$metrics.elements + $coveredelements = [int]$metrics.coveredelements + + $statement_coverage = 0 + $conditional_coverage = 0 + $method_coverage = 0 + $element_coverage = 0 + + if ($statements -gt 0) { + $statement_coverage = ($coveredstatements / $statements) * 100 + } + if ($conditionals -gt 0) { + $conditional_coverage = ($coveredconditionals / $conditionals) * 100 + } + if ($methods -gt 0) { + $method_coverage = ($coveredmethods / $methods) * 100 + } + if ($elements -gt 0) { + $element_coverage = ($coveredelements / $elements) * 100 + } + + $nonZeroCount = 0 + $totalCoverage = 0 + + if ($statements -gt 0) { $nonZeroCount++; $totalCoverage += $statement_coverage } + if ($conditionals -gt 0) { $nonZeroCount++; $totalCoverage += $conditional_coverage } + if ($methods -gt 0) { $nonZeroCount++; $totalCoverage += $method_coverage } + if ($elements -gt 0) { $nonZeroCount++; $totalCoverage += $element_coverage } + $target_branch_frontend_coverage = 0 + if ($nonZeroCount -gt 0) { + $target_branch_frontend_coverage = $totalCoverage / $nonZeroCount + } + + Write-Output "target_branch_frontend_coverage=$target_branch_frontend_coverage" | Out-File -Append $env:GITHUB_ENV + + - name: Compare frontent feature coverage with target coverage + if: github.event_name == 'pull_request' + run: | + echo "feature: ${{ env.feature_branch_frontend_coverage }}" + echo "target: ${{ env.target_branch_frontend_coverage || '0' }}" - name: Download feature branch Python coverage report artifact uses: actions/download-artifact@v4 @@ -311,15 +371,15 @@ jobs: name: target-branch-python-coverage-report path: . - - name: Compare Python target coverage with baseline + - name: Compare Python feature coverage with target coverage if: github.event_name == 'pull_request' run: | feature_branch_python_coverage=$(cat feature_branch_python_coverage.json | grep -o '"totals": {[^}]*' | grep -o '"percent_covered": [0-9.]*' | awk -F ': ' '{print $2}') target_branch_python_coverage=$(cat target_branch_python_coverage.json | grep -o '"totals": {[^}]*' | grep -o '"percent_covered": [0-9.]*' | awk -F ': ' '{print $2}') - # Compare current coverage with baseline coverage using floating-point comparison + # Compare feature coverage with target coverage using floating-point comparison if awk -v feature="$feature_branch_python_coverage" -v target="$target_branch_python_coverage" 'BEGIN { exit (feature < target) ? 0 : 1 }'; then - echo "Coverage decreased from $target_branch_python_coverage% to $feature_branch_python_coverage%. Please add or update tests to this branch to increase coverage." + echo "Coverage decreased from $target_branch_python_coverage% to $feature_branch_python_coverage%. Please add or update tests to increase coverage." exit 1 else echo "Feature branch coverage ($feature_branch_python_coverage%) >= Target branch coverage ($target_branch_python_coverage%)." From 2d1eabf7236b64e8e3d8ee6d62ddb0fd405539b0 Mon Sep 17 00:00:00 2001 From: Christopher Byrd Date: Wed, 8 May 2024 09:01:39 -0700 Subject: [PATCH 156/242] nit #10774 --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index d26c446b523..5eda85cba46 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -288,11 +288,11 @@ jobs: Write-Output "feature_branch_frontend_coverage=$feature_branch_frontend_coverage" | Out-File -Append $env:GITHUB_ENV - name: Download target branch frontend coverage report artifact + continue-on-error: true uses: actions/download-artifact@v4 with: name: target-branch-frontend-coverage-report path: . - if-no-files-found: 'warn' - name: Check if target branch frontend coverage report artifact exists id: check-file From d6567d36e42960ca7b2a4d4f0f4ef19b9a1e8617 Mon Sep 17 00:00:00 2001 From: Christopher Byrd Date: Wed, 8 May 2024 09:29:34 -0700 Subject: [PATCH 157/242] nit #10774 --- .github/workflows/main.yml | 83 +++++++++++++++++++++----------------- 1 file changed, 45 insertions(+), 38 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 5eda85cba46..33b8571790e 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -245,19 +245,19 @@ jobs: [xml]$xml = Get-Content feature_branch_frontend_coverage.xml $metrics = $xml.coverage.project.metrics - $statements = [int]$metrics.statements - $coveredstatements = [int]$metrics.coveredstatements - $conditionals = [int]$metrics.conditionals - $coveredconditionals = [int]$metrics.coveredconditionals - $methods = [int]$metrics.methods - $coveredmethods = [int]$metrics.coveredmethods - $elements = [int]$metrics.elements - $coveredelements = [int]$metrics.coveredelements - - $statement_coverage = 0 - $conditional_coverage = 0 - $method_coverage = 0 - $element_coverage = 0 + $statements = [double]$metrics.statements + $coveredstatements = [double]$metrics.coveredstatements + $conditionals = [double]$metrics.conditionals + $coveredconditionals = [double]$metrics.coveredconditionals + $methods = [double]$metrics.methods + $coveredmethods = [double]$metrics.coveredmethods + $elements = [double]$metrics.elements + $coveredelements = [double]$metrics.coveredelements + + $statement_coverage = 0.0 + $conditional_coverage = 0.0 + $method_coverage = 0.0 + $element_coverage = 0.0 if ($statements -gt 0) { $statement_coverage = ($coveredstatements / $statements) * 100 @@ -273,19 +273,19 @@ jobs: } $nonZeroCount = 0 - $totalCoverage = 0 + $totalCoverage = 0.0 if ($statements -gt 0) { $nonZeroCount++; $totalCoverage += $statement_coverage } if ($conditionals -gt 0) { $nonZeroCount++; $totalCoverage += $conditional_coverage } if ($methods -gt 0) { $nonZeroCount++; $totalCoverage += $method_coverage } if ($elements -gt 0) { $nonZeroCount++; $totalCoverage += $element_coverage } - $feature_branch_frontend_coverage = 0 + $feature_branch_frontend_coverage = 0.0 if ($nonZeroCount -gt 0) { $feature_branch_frontend_coverage = $totalCoverage / $nonZeroCount } - Write-Output "feature_branch_frontend_coverage=$feature_branch_frontend_coverage" | Out-File -Append $env:GITHUB_ENV + echo "feature_branch_frontend_coverage=$feature_branch_frontend_coverage" >> $GITHUB_ENV - name: Download target branch frontend coverage report artifact continue-on-error: true @@ -295,35 +295,34 @@ jobs: path: . - name: Check if target branch frontend coverage report artifact exists - id: check-file run: | if [ -f target_branch_frontend_coverage.xml ]; then - echo "##[set-output name=exists;]true" + echo "target_branch_frontend_coverage_artifact_exists=true" >> $GITHUB_ENV else echo "Target branch coverage not found. Defaulting to 0% coverage." - echo "##[set-output name=exists;]false" + echo "target_branch_frontend_coverage_artifact_exists=false" >> $GITHUB_ENV fi - name: Extract target branch frontend coverage data - if: steps.check-file.outputs.exists == 'true' + if: ${{ env.target_branch_frontend_coverage_artifact_exists == 'true' }} shell: pwsh run: | [xml]$xml = Get-Content target_branch_frontend_coverage.xml $metrics = $xml.coverage.project.metrics - $statements = [int]$metrics.statements - $coveredstatements = [int]$metrics.coveredstatements - $conditionals = [int]$metrics.conditionals - $coveredconditionals = [int]$metrics.coveredconditionals - $methods = [int]$metrics.methods - $coveredmethods = [int]$metrics.coveredmethods - $elements = [int]$metrics.elements - $coveredelements = [int]$metrics.coveredelements + $statements = [double]$metrics.statements + $coveredstatements = [double]$metrics.coveredstatements + $conditionals = [double]$metrics.conditionals + $coveredconditionals = [double]$metrics.coveredconditionals + $methods = [double]$metrics.methods + $coveredmethods = [double]$metrics.coveredmethods + $elements = [double]$metrics.elements + $coveredelements = [double]$metrics.coveredelements - $statement_coverage = 0 - $conditional_coverage = 0 - $method_coverage = 0 - $element_coverage = 0 + $statement_coverage = 0.0 + $conditional_coverage = 0.0 + $method_coverage = 0.0 + $element_coverage = 0.0 if ($statements -gt 0) { $statement_coverage = ($coveredstatements / $statements) * 100 @@ -339,25 +338,33 @@ jobs: } $nonZeroCount = 0 - $totalCoverage = 0 + $totalCoverage = 0.0 if ($statements -gt 0) { $nonZeroCount++; $totalCoverage += $statement_coverage } if ($conditionals -gt 0) { $nonZeroCount++; $totalCoverage += $conditional_coverage } if ($methods -gt 0) { $nonZeroCount++; $totalCoverage += $method_coverage } if ($elements -gt 0) { $nonZeroCount++; $totalCoverage += $element_coverage } - $target_branch_frontend_coverage = 0 + $target_branch_frontend_coverage = 0.0 if ($nonZeroCount -gt 0) { $target_branch_frontend_coverage = $totalCoverage / $nonZeroCount } - Write-Output "target_branch_frontend_coverage=$target_branch_frontend_coverage" | Out-File -Append $env:GITHUB_ENV + echo "target_branch_frontend_coverage=$target_branch_frontend_coverage" >> $GITHUB_ENV - - name: Compare frontent feature coverage with target coverage + - name: Compare frontend feature coverage with target coverage if: github.event_name == 'pull_request' run: | - echo "feature: ${{ env.feature_branch_frontend_coverage }}" - echo "target: ${{ env.target_branch_frontend_coverage || '0' }}" + feature_branch_frontend_coverage="${{ env.feature_branch_frontend_coverage }}" + target_branch_frontend_coverage="${{ env.target_branch_frontend_coverage || '0.0' }}" + + # Compare feature coverage with target coverage using floating-point comparison + if awk -v feature="$feature_branch_frontend_coverage" -v target="$target_branch_frontend_coverage" 'BEGIN { exit (feature < target) ? 0 : 1 }'; then + echo "Coverage decreased from $target_branch_frontend_coverage% to $feature_branch_frontend_coverage%. Please add or update tests to increase coverage." + exit 1 + else + echo "Feature branch coverage ($feature_branch_frontend_coverage%) >= Target branch coverage ($target_branch_frontend_coverage%)." + fi - name: Download feature branch Python coverage report artifact uses: actions/download-artifact@v4 From 59cf220a7941a3bdcd7acba0c9e220782f38f394 Mon Sep 17 00:00:00 2001 From: Christopher Byrd Date: Wed, 8 May 2024 09:54:04 -0700 Subject: [PATCH 158/242] nit #10774 --- .github/workflows/main.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 33b8571790e..e4c94fe28e3 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -355,8 +355,8 @@ jobs: - name: Compare frontend feature coverage with target coverage if: github.event_name == 'pull_request' run: | - feature_branch_frontend_coverage="${{ env.feature_branch_frontend_coverage }}" - target_branch_frontend_coverage="${{ env.target_branch_frontend_coverage || '0.0' }}" + feature_branch_frontend_coverage="${feature_branch_frontend_coverage:-0.0}" + target_branch_frontend_coverage="${target_branch_frontend_coverage:-0.0}" # Compare feature coverage with target coverage using floating-point comparison if awk -v feature="$feature_branch_frontend_coverage" -v target="$target_branch_frontend_coverage" 'BEGIN { exit (feature < target) ? 0 : 1 }'; then From 7997dbdebff17ada89d6966e362261abf055335b Mon Sep 17 00:00:00 2001 From: Christopher Byrd Date: Wed, 8 May 2024 10:24:13 -0700 Subject: [PATCH 159/242] nit #10774 --- .github/workflows/main.yml | 169 ++++++++++++++++++++----------------- 1 file changed, 93 insertions(+), 76 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index e4c94fe28e3..a47246e0d87 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -79,19 +79,19 @@ jobs: run: | python manage.py makemigrations --check - - name: Ensure previous Python coverage data is erased - run: | - coverage erase + # - name: Ensure previous Python coverage data is erased + # run: | + # coverage erase - - name: Run Python unit tests - run: | - python -W default::DeprecationWarning -m coverage run manage.py test tests --settings="tests.test_settings" + # - name: Run Python unit tests + # run: | + # python -W default::DeprecationWarning -m coverage run manage.py test tests --settings="tests.test_settings" - - name: Generate Python report coverage - run: | - coverage report - coverage json - mv coverage/python/coverage.json feature_branch_python_coverage.json + # - name: Generate Python report coverage + # run: | + # coverage report + # coverage json + # mv coverage/python/coverage.json feature_branch_python_coverage.json - name: Upload frontend coverage report as artifact uses: actions/upload-artifact@v4 @@ -100,12 +100,12 @@ jobs: path: feature_branch_frontend_coverage.xml overwrite: true - - name: Upload Python coverage report as artifact - uses: actions/upload-artifact@v4 - with: - name: feature-branch-python-coverage-report - path: feature_branch_python_coverage.json - overwrite: true + # - name: Upload Python coverage report as artifact + # uses: actions/upload-artifact@v4 + # with: + # name: feature-branch-python-coverage-report + # path: feature_branch_python_coverage.json + # overwrite: true build_target_branch: runs-on: ubuntu-latest @@ -187,25 +187,25 @@ jobs: run: | python manage.py makemigrations --check - - name: Ensure previous Python coverage data is erased - run: | - coverage erase + # - name: Ensure previous Python coverage data is erased + # run: | + # coverage erase - - name: Run Python unit tests - run: | - python -W default::DeprecationWarning -m coverage run manage.py test tests --settings="tests.test_settings" + # - name: Run Python unit tests + # run: | + # python -W default::DeprecationWarning -m coverage run manage.py test tests --settings="tests.test_settings" - - name: Generate Python report coverage - run: | - coverage report - coverage json + # - name: Generate Python report coverage + # run: | + # coverage report + # coverage json - # handles older target branch - if [ -f coverage/python/coverage.json ]; then - mv coverage/python/coverage.json target_branch_python_coverage.json - else - mv coverage.json target_branch_python_coverage.json - fi + # # handles older target branch + # if [ -f coverage/python/coverage.json ]; then + # mv coverage/python/coverage.json target_branch_python_coverage.json + # else + # mv coverage.json target_branch_python_coverage.json + # fi - name: Upload frontend coverage report as artifact uses: actions/upload-artifact@v4 @@ -214,14 +214,14 @@ jobs: path: target_branch_frontend_coverage.xml overwrite: true - - name: Upload Python coverage report as artifact - uses: actions/upload-artifact@v4 - with: - name: target-branch-python-coverage-report - path: target_branch_python_coverage.json - overwrite: true + # - name: Upload Python coverage report as artifact + # uses: actions/upload-artifact@v4 + # with: + # name: target-branch-python-coverage-report + # path: target_branch_python_coverage.json + # overwrite: true - check_coverage: + check_frontend_coverage: runs-on: ubuntu-latest needs: [build_feature_branch, build_target_branch] steps: @@ -285,6 +285,8 @@ jobs: $feature_branch_frontend_coverage = $totalCoverage / $nonZeroCount } + echo "FOO: $feature_branch_frontend_coverage" + echo "feature_branch_frontend_coverage=$feature_branch_frontend_coverage" >> $GITHUB_ENV - name: Download target branch frontend coverage report artifact @@ -355,39 +357,54 @@ jobs: - name: Compare frontend feature coverage with target coverage if: github.event_name == 'pull_request' run: | - feature_branch_frontend_coverage="${feature_branch_frontend_coverage:-0.0}" - target_branch_frontend_coverage="${target_branch_frontend_coverage:-0.0}" - - # Compare feature coverage with target coverage using floating-point comparison - if awk -v feature="$feature_branch_frontend_coverage" -v target="$target_branch_frontend_coverage" 'BEGIN { exit (feature < target) ? 0 : 1 }'; then - echo "Coverage decreased from $target_branch_frontend_coverage% to $feature_branch_frontend_coverage%. Please add or update tests to increase coverage." - exit 1 - else - echo "Feature branch coverage ($feature_branch_frontend_coverage%) >= Target branch coverage ($target_branch_frontend_coverage%)." - fi - - - name: Download feature branch Python coverage report artifact - uses: actions/download-artifact@v4 - with: - name: feature-branch-python-coverage-report - path: . - - - name: Download target branch Python coverage report artifact - uses: actions/download-artifact@v4 - with: - name: target-branch-python-coverage-report - path: . - - - name: Compare Python feature coverage with target coverage - if: github.event_name == 'pull_request' - run: | - feature_branch_python_coverage=$(cat feature_branch_python_coverage.json | grep -o '"totals": {[^}]*' | grep -o '"percent_covered": [0-9.]*' | awk -F ': ' '{print $2}') - target_branch_python_coverage=$(cat target_branch_python_coverage.json | grep -o '"totals": {[^}]*' | grep -o '"percent_covered": [0-9.]*' | awk -F ': ' '{print $2}') - - # Compare feature coverage with target coverage using floating-point comparison - if awk -v feature="$feature_branch_python_coverage" -v target="$target_branch_python_coverage" 'BEGIN { exit (feature < target) ? 0 : 1 }'; then - echo "Coverage decreased from $target_branch_python_coverage% to $feature_branch_python_coverage%. Please add or update tests to increase coverage." - exit 1 - else - echo "Feature branch coverage ($feature_branch_python_coverage%) >= Target branch coverage ($target_branch_python_coverage%)." - fi + feature_branch_frontend_coverage=${{ env.feature_branch_frontend_coverage }} + + echo "Feature branch coverage: $feature_branch_frontend_coverage" + + # target_branch_frontend_coverage=$(echo "${{env.target_branch_frontend_coverage:-0.0}}" ) + + # # Compare feature coverage with target coverage using floating-point comparison + # if awk -v feature="$feature_branch_frontend_coverage" -v target="$target_branch_frontend_coverage" 'BEGIN { exit (feature < target) ? 0 : 1 }'; then + # echo "Coverage decreased from $target_branch_frontend_coverage% to $feature_branch_frontend_coverage%. Please add or update tests to increase coverage." + # exit 1 + # else + # echo "Feature branch coverage ($feature_branch_frontend_coverage%) >= Target branch coverage ($target_branch_frontend_coverage%)." + # fi + + # check_python_coverage: + # runs-on: ubuntu-latest + # needs: [build_feature_branch, build_target_branch] + # steps: + # - uses: actions/checkout@v4 + + # - name: Set up Python + # uses: actions/setup-python@v5 + # with: + # python-version: '3.x' # Use the latest available version + # check-latest: true + + # - name: Download feature branch Python coverage report artifact + # uses: actions/download-artifact@v4 + # with: + # name: feature-branch-python-coverage-report + # path: . + + # - name: Download target branch Python coverage report artifact + # uses: actions/download-artifact@v4 + # with: + # name: target-branch-python-coverage-report + # path: . + + # - name: Compare Python feature coverage with target coverage + # if: github.event_name == 'pull_request' + # run: | + # feature_branch_python_coverage=$(cat feature_branch_python_coverage.json | grep -o '"totals": {[^}]*' | grep -o '"percent_covered": [0-9.]*' | awk -F ': ' '{print $2}') + # target_branch_python_coverage=$(cat target_branch_python_coverage.json | grep -o '"totals": {[^}]*' | grep -o '"percent_covered": [0-9.]*' | awk -F ': ' '{print $2}') + + # # Compare feature coverage with target coverage using floating-point comparison + # if awk -v feature="$feature_branch_python_coverage" -v target="$target_branch_python_coverage" 'BEGIN { exit (feature < target) ? 0 : 1 }'; then + # echo "Coverage decreased from $target_branch_python_coverage% to $feature_branch_python_coverage%. Please add or update tests to increase coverage." + # exit 1 + # else + # echo "Feature branch coverage ($feature_branch_python_coverage%) >= Target branch coverage ($target_branch_python_coverage%)." + # fi From 8d85b06a168f76b6f73cfc46273aea56db6153fe Mon Sep 17 00:00:00 2001 From: Christopher Byrd Date: Wed, 8 May 2024 10:25:10 -0700 Subject: [PATCH 160/242] nit #10774 --- .github/workflows/main.yml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index a47246e0d87..5f7a411d2cd 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -361,15 +361,6 @@ jobs: echo "Feature branch coverage: $feature_branch_frontend_coverage" - # target_branch_frontend_coverage=$(echo "${{env.target_branch_frontend_coverage:-0.0}}" ) - - # # Compare feature coverage with target coverage using floating-point comparison - # if awk -v feature="$feature_branch_frontend_coverage" -v target="$target_branch_frontend_coverage" 'BEGIN { exit (feature < target) ? 0 : 1 }'; then - # echo "Coverage decreased from $target_branch_frontend_coverage% to $feature_branch_frontend_coverage%. Please add or update tests to increase coverage." - # exit 1 - # else - # echo "Feature branch coverage ($feature_branch_frontend_coverage%) >= Target branch coverage ($target_branch_frontend_coverage%)." - # fi # check_python_coverage: # runs-on: ubuntu-latest From 165c9ab52ccb30243a94b1d3fbf735f9ddc7cd15 Mon Sep 17 00:00:00 2001 From: Christopher Byrd Date: Wed, 8 May 2024 10:38:35 -0700 Subject: [PATCH 161/242] nit #10774 --- .github/workflows/main.yml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 5f7a411d2cd..b38072759c5 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -357,8 +357,19 @@ jobs: - name: Compare frontend feature coverage with target coverage if: github.event_name == 'pull_request' run: | - feature_branch_frontend_coverage=${{ env.feature_branch_frontend_coverage }} + echo "BAR: ${{ env.feature_branch_frontend_coverage }}" + echo "BAZ: $feature_branch_frontend_coverage" + + qux=$FEATURE_BRANCH_FRONTEND_COVERAGE + echo "QUX: $qux" + quux=$feature_branch_frontend_coverage + echo "QUUX: $quux" + + corge=$(echo "${{ env.feature_branch_frontend_coverage }}") + echo "CORGE: $corge" + + feature_branch_frontend_coverage=${{ env.feature_branch_frontend_coverage }} echo "Feature branch coverage: $feature_branch_frontend_coverage" From 6a3d12942a2660686e210b5c3424d19e928cdc78 Mon Sep 17 00:00:00 2001 From: Christopher Byrd Date: Wed, 8 May 2024 10:55:39 -0700 Subject: [PATCH 162/242] nit #10774 --- .github/workflows/main.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b38072759c5..73ff818e733 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -22,7 +22,8 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.10", "3.11", "3.12"] + python-version: ["3.12"] + # python-version: ["3.10", "3.11", "3.12"] steps: - uses: actions/checkout@v4 @@ -357,6 +358,9 @@ jobs: - name: Compare frontend feature coverage with target coverage if: github.event_name == 'pull_request' run: | + echo "FOOBAR: $FEATURE_BRANCH_FRONTEND_COVERAGE" + echo "FOO: ${feature_branch_frontend_coverage}" + echo "BAR: ${{ env.feature_branch_frontend_coverage }}" echo "BAZ: $feature_branch_frontend_coverage" From e546b90ba954b1ad15f96268ab88565f679c3c6e Mon Sep 17 00:00:00 2001 From: Christopher Byrd Date: Wed, 8 May 2024 11:01:38 -0700 Subject: [PATCH 163/242] nit #10774 --- .github/workflows/main.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 73ff818e733..66774321324 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -355,6 +355,9 @@ jobs: echo "target_branch_frontend_coverage=$target_branch_frontend_coverage" >> $GITHUB_ENV + - name: Print all environment variables + run: printenv + - name: Compare frontend feature coverage with target coverage if: github.event_name == 'pull_request' run: | From 7d3e89ce1cabddda325d660e33b4477056b04c95 Mon Sep 17 00:00:00 2001 From: Christopher Byrd Date: Wed, 8 May 2024 11:12:24 -0700 Subject: [PATCH 164/242] nit #10774 --- .github/workflows/main.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 66774321324..9398a98c9a8 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -288,7 +288,7 @@ jobs: echo "FOO: $feature_branch_frontend_coverage" - echo "feature_branch_frontend_coverage=$feature_branch_frontend_coverage" >> $GITHUB_ENV + Write-Output "feature_branch_frontend_coverage=$feature_branch_frontend_coverage" | Out-File -Append $env:GITHUB_ENV - name: Download target branch frontend coverage report artifact continue-on-error: true @@ -353,7 +353,7 @@ jobs: $target_branch_frontend_coverage = $totalCoverage / $nonZeroCount } - echo "target_branch_frontend_coverage=$target_branch_frontend_coverage" >> $GITHUB_ENV + Write-Output "target_branch_frontend_coverage=$target_branch_frontend_coverage" | Out-File -Append $env:GITHUB_ENV - name: Print all environment variables run: printenv From 87a6dcb347bd37b3a686f6eba7335d1eee780efc Mon Sep 17 00:00:00 2001 From: Christopher Byrd Date: Wed, 8 May 2024 11:23:47 -0700 Subject: [PATCH 165/242] nit #10774 --- .github/workflows/main.yml | 28 +++++++++------------------- 1 file changed, 9 insertions(+), 19 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 9398a98c9a8..89dc9e00437 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -355,29 +355,19 @@ jobs: Write-Output "target_branch_frontend_coverage=$target_branch_frontend_coverage" | Out-File -Append $env:GITHUB_ENV - - name: Print all environment variables - run: printenv - - name: Compare frontend feature coverage with target coverage if: github.event_name == 'pull_request' run: | - echo "FOOBAR: $FEATURE_BRANCH_FRONTEND_COVERAGE" - echo "FOO: ${feature_branch_frontend_coverage}" + feature_branch_frontend_coverage=${feature_branch_frontend_coverage} + target_branch_frontend_coverage=${target_branch_frontend_coverage:-0.0} - echo "BAR: ${{ env.feature_branch_frontend_coverage }}" - echo "BAZ: $feature_branch_frontend_coverage" - - qux=$FEATURE_BRANCH_FRONTEND_COVERAGE - echo "QUX: $qux" - - quux=$feature_branch_frontend_coverage - echo "QUUX: $quux" - - corge=$(echo "${{ env.feature_branch_frontend_coverage }}") - echo "CORGE: $corge" - - feature_branch_frontend_coverage=${{ env.feature_branch_frontend_coverage }} - echo "Feature branch coverage: $feature_branch_frontend_coverage" + # Compare feature coverage with target coverage using floating-point comparison + if awk -v feature="$feature_branch_frontend_coverage" -v target="$target_branch_frontend_coverage" 'BEGIN { exit (feature < target) ? 0 : 1 }'; then + echo "Coverage decreased from $target_branch_frontend_coverage% to $feature_branch_frontend_coverage%. Please add or update tests to increase coverage." + exit 1 + else + echo "Feature branch coverage ($feature_branch_frontend_coverage%) >= Target branch coverage ($target_branch_frontend_coverage%)." + fi # check_python_coverage: From 225c7ef41cd6da2902fb9454d60218d4fd0fe8b4 Mon Sep 17 00:00:00 2001 From: Christopher Byrd Date: Wed, 8 May 2024 11:31:56 -0700 Subject: [PATCH 166/242] nit #10774 --- .github/workflows/main.yml | 155 ++++++++-------- .../.github/workflows/main.yml | 170 ++++++++++++++++-- 2 files changed, 233 insertions(+), 92 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 89dc9e00437..52f74ede311 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -22,8 +22,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.12"] - # python-version: ["3.10", "3.11", "3.12"] + python-version: ["3.10", "3.11", "3.12"] steps: - uses: actions/checkout@v4 @@ -80,19 +79,19 @@ jobs: run: | python manage.py makemigrations --check - # - name: Ensure previous Python coverage data is erased - # run: | - # coverage erase + - name: Ensure previous Python coverage data is erased + run: | + coverage erase - # - name: Run Python unit tests - # run: | - # python -W default::DeprecationWarning -m coverage run manage.py test tests --settings="tests.test_settings" + - name: Run Python unit tests + run: | + python -W default::DeprecationWarning -m coverage run manage.py test tests --settings="tests.test_settings" - # - name: Generate Python report coverage - # run: | - # coverage report - # coverage json - # mv coverage/python/coverage.json feature_branch_python_coverage.json + - name: Generate Python report coverage + run: | + coverage report + coverage json + mv coverage/python/coverage.json feature_branch_python_coverage.json - name: Upload frontend coverage report as artifact uses: actions/upload-artifact@v4 @@ -101,12 +100,12 @@ jobs: path: feature_branch_frontend_coverage.xml overwrite: true - # - name: Upload Python coverage report as artifact - # uses: actions/upload-artifact@v4 - # with: - # name: feature-branch-python-coverage-report - # path: feature_branch_python_coverage.json - # overwrite: true + - name: Upload Python coverage report as artifact + uses: actions/upload-artifact@v4 + with: + name: feature-branch-python-coverage-report + path: feature_branch_python_coverage.json + overwrite: true build_target_branch: runs-on: ubuntu-latest @@ -124,7 +123,6 @@ jobs: strategy: fail-fast: false matrix: - # python-version: ["3.10", "3.11", "3.12"] python-version: ["3.12"] steps: @@ -188,25 +186,25 @@ jobs: run: | python manage.py makemigrations --check - # - name: Ensure previous Python coverage data is erased - # run: | - # coverage erase + - name: Ensure previous Python coverage data is erased + run: | + coverage erase - # - name: Run Python unit tests - # run: | - # python -W default::DeprecationWarning -m coverage run manage.py test tests --settings="tests.test_settings" + - name: Run Python unit tests + run: | + python -W default::DeprecationWarning -m coverage run manage.py test tests --settings="tests.test_settings" - # - name: Generate Python report coverage - # run: | - # coverage report - # coverage json + - name: Generate Python report coverage + run: | + coverage report + coverage json - # # handles older target branch - # if [ -f coverage/python/coverage.json ]; then - # mv coverage/python/coverage.json target_branch_python_coverage.json - # else - # mv coverage.json target_branch_python_coverage.json - # fi + # handles older target branch + if [ -f coverage/python/coverage.json ]; then + mv coverage/python/coverage.json target_branch_python_coverage.json + else + mv coverage.json target_branch_python_coverage.json + fi - name: Upload frontend coverage report as artifact uses: actions/upload-artifact@v4 @@ -215,12 +213,12 @@ jobs: path: target_branch_frontend_coverage.xml overwrite: true - # - name: Upload Python coverage report as artifact - # uses: actions/upload-artifact@v4 - # with: - # name: target-branch-python-coverage-report - # path: target_branch_python_coverage.json - # overwrite: true + - name: Upload Python coverage report as artifact + uses: actions/upload-artifact@v4 + with: + name: target-branch-python-coverage-report + path: target_branch_python_coverage.json + overwrite: true check_frontend_coverage: runs-on: ubuntu-latest @@ -369,41 +367,40 @@ jobs: echo "Feature branch coverage ($feature_branch_frontend_coverage%) >= Target branch coverage ($target_branch_frontend_coverage%)." fi + check_python_coverage: + runs-on: ubuntu-latest + needs: [build_feature_branch, build_target_branch] + steps: + - uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.x' # Use the latest available version + check-latest: true + + - name: Download feature branch Python coverage report artifact + uses: actions/download-artifact@v4 + with: + name: feature-branch-python-coverage-report + path: . + + - name: Download target branch Python coverage report artifact + uses: actions/download-artifact@v4 + with: + name: target-branch-python-coverage-report + path: . + + - name: Compare Python feature coverage with target coverage + if: github.event_name == 'pull_request' + run: | + feature_branch_python_coverage=$(cat feature_branch_python_coverage.json | grep -o '"totals": {[^}]*' | grep -o '"percent_covered": [0-9.]*' | awk -F ': ' '{print $2}') + target_branch_python_coverage=$(cat target_branch_python_coverage.json | grep -o '"totals": {[^}]*' | grep -o '"percent_covered": [0-9.]*' | awk -F ': ' '{print $2}') - # check_python_coverage: - # runs-on: ubuntu-latest - # needs: [build_feature_branch, build_target_branch] - # steps: - # - uses: actions/checkout@v4 - - # - name: Set up Python - # uses: actions/setup-python@v5 - # with: - # python-version: '3.x' # Use the latest available version - # check-latest: true - - # - name: Download feature branch Python coverage report artifact - # uses: actions/download-artifact@v4 - # with: - # name: feature-branch-python-coverage-report - # path: . - - # - name: Download target branch Python coverage report artifact - # uses: actions/download-artifact@v4 - # with: - # name: target-branch-python-coverage-report - # path: . - - # - name: Compare Python feature coverage with target coverage - # if: github.event_name == 'pull_request' - # run: | - # feature_branch_python_coverage=$(cat feature_branch_python_coverage.json | grep -o '"totals": {[^}]*' | grep -o '"percent_covered": [0-9.]*' | awk -F ': ' '{print $2}') - # target_branch_python_coverage=$(cat target_branch_python_coverage.json | grep -o '"totals": {[^}]*' | grep -o '"percent_covered": [0-9.]*' | awk -F ': ' '{print $2}') - - # # Compare feature coverage with target coverage using floating-point comparison - # if awk -v feature="$feature_branch_python_coverage" -v target="$target_branch_python_coverage" 'BEGIN { exit (feature < target) ? 0 : 1 }'; then - # echo "Coverage decreased from $target_branch_python_coverage% to $feature_branch_python_coverage%. Please add or update tests to increase coverage." - # exit 1 - # else - # echo "Feature branch coverage ($feature_branch_python_coverage%) >= Target branch coverage ($target_branch_python_coverage%)." - # fi + # Compare feature coverage with target coverage using floating-point comparison + if awk -v feature="$feature_branch_python_coverage" -v target="$target_branch_python_coverage" 'BEGIN { exit (feature < target) ? 0 : 1 }'; then + echo "Coverage decreased from $target_branch_python_coverage% to $feature_branch_python_coverage%. Please add or update tests to increase coverage." + exit 1 + else + echo "Feature branch coverage ($feature_branch_python_coverage%) >= Target branch coverage ($target_branch_python_coverage%)." + fi diff --git a/arches/install/arches-templates/.github/workflows/main.yml b/arches/install/arches-templates/.github/workflows/main.yml index 3ef2e973f4c..52f74ede311 100644 --- a/arches/install/arches-templates/.github/workflows/main.yml +++ b/arches/install/arches-templates/.github/workflows/main.yml @@ -73,9 +73,6 @@ jobs: - name: Run frontend tests run: | yarn vitest - - - name: Generate frontend report coverage - run: | mv coverage/frontend/coverage.xml feature_branch_frontend_coverage.xml - name: Check for missing migrations @@ -126,7 +123,6 @@ jobs: strategy: fail-fast: false matrix: - # python-version: ["3.10", "3.11", "3.12"] python-version: ["3.12"] steps: @@ -179,11 +175,12 @@ jobs: - name: Run frontend tests run: | - yarn vitest - - - name: Generate frontend report coverage - run: | - mv coverage/frontend/coverage.xml target_branch_frontend_coverage.xml + if [ -f vitest.config.json ]; then + yarn vitest + mv coverage/frontend/coverage.xml target_branch_frontend_coverage.xml + else + echo "Unable to find vitest config. Skipping frontend tests." + fi - name: Check for missing migrations run: | @@ -223,7 +220,154 @@ jobs: path: target_branch_python_coverage.json overwrite: true - check_coverage: + check_frontend_coverage: + runs-on: ubuntu-latest + needs: [build_feature_branch, build_target_branch] + steps: + - uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.x' # Use the latest available version + check-latest: true + + - name: Download feature branch frontend coverage report artifact + uses: actions/download-artifact@v4 + with: + name: feature-branch-frontend-coverage-report + path: . + + - name: Extract feature branch frontend coverage data + shell: pwsh + run: | + [xml]$xml = Get-Content feature_branch_frontend_coverage.xml + $metrics = $xml.coverage.project.metrics + + $statements = [double]$metrics.statements + $coveredstatements = [double]$metrics.coveredstatements + $conditionals = [double]$metrics.conditionals + $coveredconditionals = [double]$metrics.coveredconditionals + $methods = [double]$metrics.methods + $coveredmethods = [double]$metrics.coveredmethods + $elements = [double]$metrics.elements + $coveredelements = [double]$metrics.coveredelements + + $statement_coverage = 0.0 + $conditional_coverage = 0.0 + $method_coverage = 0.0 + $element_coverage = 0.0 + + if ($statements -gt 0) { + $statement_coverage = ($coveredstatements / $statements) * 100 + } + if ($conditionals -gt 0) { + $conditional_coverage = ($coveredconditionals / $conditionals) * 100 + } + if ($methods -gt 0) { + $method_coverage = ($coveredmethods / $methods) * 100 + } + if ($elements -gt 0) { + $element_coverage = ($coveredelements / $elements) * 100 + } + + $nonZeroCount = 0 + $totalCoverage = 0.0 + + if ($statements -gt 0) { $nonZeroCount++; $totalCoverage += $statement_coverage } + if ($conditionals -gt 0) { $nonZeroCount++; $totalCoverage += $conditional_coverage } + if ($methods -gt 0) { $nonZeroCount++; $totalCoverage += $method_coverage } + if ($elements -gt 0) { $nonZeroCount++; $totalCoverage += $element_coverage } + + $feature_branch_frontend_coverage = 0.0 + if ($nonZeroCount -gt 0) { + $feature_branch_frontend_coverage = $totalCoverage / $nonZeroCount + } + + echo "FOO: $feature_branch_frontend_coverage" + + Write-Output "feature_branch_frontend_coverage=$feature_branch_frontend_coverage" | Out-File -Append $env:GITHUB_ENV + + - name: Download target branch frontend coverage report artifact + continue-on-error: true + uses: actions/download-artifact@v4 + with: + name: target-branch-frontend-coverage-report + path: . + + - name: Check if target branch frontend coverage report artifact exists + run: | + if [ -f target_branch_frontend_coverage.xml ]; then + echo "target_branch_frontend_coverage_artifact_exists=true" >> $GITHUB_ENV + else + echo "Target branch coverage not found. Defaulting to 0% coverage." + echo "target_branch_frontend_coverage_artifact_exists=false" >> $GITHUB_ENV + fi + + - name: Extract target branch frontend coverage data + if: ${{ env.target_branch_frontend_coverage_artifact_exists == 'true' }} + shell: pwsh + run: | + [xml]$xml = Get-Content target_branch_frontend_coverage.xml + $metrics = $xml.coverage.project.metrics + + $statements = [double]$metrics.statements + $coveredstatements = [double]$metrics.coveredstatements + $conditionals = [double]$metrics.conditionals + $coveredconditionals = [double]$metrics.coveredconditionals + $methods = [double]$metrics.methods + $coveredmethods = [double]$metrics.coveredmethods + $elements = [double]$metrics.elements + $coveredelements = [double]$metrics.coveredelements + + $statement_coverage = 0.0 + $conditional_coverage = 0.0 + $method_coverage = 0.0 + $element_coverage = 0.0 + + if ($statements -gt 0) { + $statement_coverage = ($coveredstatements / $statements) * 100 + } + if ($conditionals -gt 0) { + $conditional_coverage = ($coveredconditionals / $conditionals) * 100 + } + if ($methods -gt 0) { + $method_coverage = ($coveredmethods / $methods) * 100 + } + if ($elements -gt 0) { + $element_coverage = ($coveredelements / $elements) * 100 + } + + $nonZeroCount = 0 + $totalCoverage = 0.0 + + if ($statements -gt 0) { $nonZeroCount++; $totalCoverage += $statement_coverage } + if ($conditionals -gt 0) { $nonZeroCount++; $totalCoverage += $conditional_coverage } + if ($methods -gt 0) { $nonZeroCount++; $totalCoverage += $method_coverage } + if ($elements -gt 0) { $nonZeroCount++; $totalCoverage += $element_coverage } + + $target_branch_frontend_coverage = 0.0 + if ($nonZeroCount -gt 0) { + $target_branch_frontend_coverage = $totalCoverage / $nonZeroCount + } + + Write-Output "target_branch_frontend_coverage=$target_branch_frontend_coverage" | Out-File -Append $env:GITHUB_ENV + + - name: Compare frontend feature coverage with target coverage + if: github.event_name == 'pull_request' + run: | + feature_branch_frontend_coverage=${feature_branch_frontend_coverage} + target_branch_frontend_coverage=${target_branch_frontend_coverage:-0.0} + + # Compare feature coverage with target coverage using floating-point comparison + if awk -v feature="$feature_branch_frontend_coverage" -v target="$target_branch_frontend_coverage" 'BEGIN { exit (feature < target) ? 0 : 1 }'; then + echo "Coverage decreased from $target_branch_frontend_coverage% to $feature_branch_frontend_coverage%. Please add or update tests to increase coverage." + exit 1 + else + echo "Feature branch coverage ($feature_branch_frontend_coverage%) >= Target branch coverage ($target_branch_frontend_coverage%)." + fi + + check_python_coverage: runs-on: ubuntu-latest needs: [build_feature_branch, build_target_branch] steps: @@ -247,15 +391,15 @@ jobs: name: target-branch-python-coverage-report path: . - - name: Compare Python target coverage with baseline + - name: Compare Python feature coverage with target coverage if: github.event_name == 'pull_request' run: | feature_branch_python_coverage=$(cat feature_branch_python_coverage.json | grep -o '"totals": {[^}]*' | grep -o '"percent_covered": [0-9.]*' | awk -F ': ' '{print $2}') target_branch_python_coverage=$(cat target_branch_python_coverage.json | grep -o '"totals": {[^}]*' | grep -o '"percent_covered": [0-9.]*' | awk -F ': ' '{print $2}') - # Compare current coverage with baseline coverage using floating-point comparison + # Compare feature coverage with target coverage using floating-point comparison if awk -v feature="$feature_branch_python_coverage" -v target="$target_branch_python_coverage" 'BEGIN { exit (feature < target) ? 0 : 1 }'; then - echo "Coverage decreased from $target_branch_python_coverage% to $feature_branch_python_coverage%. Please add or update tests to this branch to increase coverage." + echo "Coverage decreased from $target_branch_python_coverage% to $feature_branch_python_coverage%. Please add or update tests to increase coverage." exit 1 else echo "Feature branch coverage ($feature_branch_python_coverage%) >= Target branch coverage ($target_branch_python_coverage%)." From fa57864ceec7bdfb5e11637c7f2a9f55562f0c5b Mon Sep 17 00:00:00 2001 From: Christopher Byrd Date: Wed, 8 May 2024 13:14:03 -0700 Subject: [PATCH 167/242] nit #10774 --- .github/workflows/main.yml | 2 -- arches/install/arches-templates/.github/workflows/main.yml | 2 -- arches/management/commands/updateproject.py | 2 +- 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 52f74ede311..aa77801b40c 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -284,8 +284,6 @@ jobs: $feature_branch_frontend_coverage = $totalCoverage / $nonZeroCount } - echo "FOO: $feature_branch_frontend_coverage" - Write-Output "feature_branch_frontend_coverage=$feature_branch_frontend_coverage" | Out-File -Append $env:GITHUB_ENV - name: Download target branch frontend coverage report artifact diff --git a/arches/install/arches-templates/.github/workflows/main.yml b/arches/install/arches-templates/.github/workflows/main.yml index 52f74ede311..aa77801b40c 100644 --- a/arches/install/arches-templates/.github/workflows/main.yml +++ b/arches/install/arches-templates/.github/workflows/main.yml @@ -284,8 +284,6 @@ jobs: $feature_branch_frontend_coverage = $totalCoverage / $nonZeroCount } - echo "FOO: $feature_branch_frontend_coverage" - Write-Output "feature_branch_frontend_coverage=$feature_branch_frontend_coverage" | Out-File -Append $env:GITHUB_ENV - name: Download target branch frontend coverage report artifact diff --git a/arches/management/commands/updateproject.py b/arches/management/commands/updateproject.py index ec3a041427a..62e92b4de28 100644 --- a/arches/management/commands/updateproject.py +++ b/arches/management/commands/updateproject.py @@ -166,7 +166,7 @@ def update_to_v7_6(self): path_to_project = os.path.join(settings.APP_ROOT, "..") for relative_file_path in [ - 'gettext.config.js', '.coveragerc', '.gitignore', "tsconfig.json", "tests/test_settings.py", "tests/search_indexes/sample_index_tests.py", "pyproject.toml" + 'gettext.config.js', '.coveragerc', '.gitignore', "tests/test_settings.py", "tests/search_indexes/sample_index_tests.py", "pyproject.toml" ]: # relative to app root directory try: file = open(os.path.join(path_to_project, relative_file_path),'r') From 7f522aba28f66e8706a42c8709f5a4f003f6e9e4 Mon Sep 17 00:00:00 2001 From: Christopher Byrd Date: Wed, 8 May 2024 13:39:40 -0700 Subject: [PATCH 168/242] updates updateproject.py #10774 --- arches/management/commands/updateproject.py | 29 +++++++-------------- 1 file changed, 10 insertions(+), 19 deletions(-) diff --git a/arches/management/commands/updateproject.py b/arches/management/commands/updateproject.py index 62e92b4de28..f88fb960b5b 100644 --- a/arches/management/commands/updateproject.py +++ b/arches/management/commands/updateproject.py @@ -82,22 +82,13 @@ def update_to_v7_5(self): self.stdout.write("Publishing finished! \n\n") def update_to_v7_6(self): - for dotfile in [".eslintrc.js", ".eslintignore", ".babelrc", ".browserslistrc", ".stylelintrc.json", ".yarnrc"]: - previous_dotfile_path = os.path.join(settings.APP_ROOT, dotfile) - if os.path.exists(previous_dotfile_path): - self.stdout.write("Deleting {} from project root directory".format(dotfile)) - os.remove(previous_dotfile_path) - - if dotfile != ".yarnrc": # `.yarnrc` is removed entirely in this version - self.stdout.write("Copying {} to project directory".format(dotfile)) - shutil.copy2(os.path.join(settings.ROOT_DIR, "install", "arches-templates", dotfile), os.path.join(settings.APP_ROOT, "..")) - - if os.path.exists(os.path.join(settings.APP_ROOT, "yarn.lock")): - self.stdout.write("Deleting yarn.lock from project".format(dotfile)) - os.remove(os.path.join(settings.APP_ROOT, "yarn.lock")) + for file_to_delete in [".eslintrc.js", ".eslintignore", ".yarnrc", "yarn.lock"]: + if os.path.exists(os.path.join(settings.APP_ROOT, file_to_delete)): + self.stdout.write("Deleting {} from project root directory".format(file_to_delete)) + os.remove(os.path.join(settings.APP_ROOT, file_to_delete)) if os.path.exists(os.path.join(settings.APP_ROOT, "media", "node_modules")): - self.stdout.write("Deleting node_modules folder from media directory".format(dotfile)) + self.stdout.write("Deleting node_modules folder from media directory") shutil.rmtree(os.path.join(settings.APP_ROOT, "media", "node_modules")) for project_metadata_file in ["LICENSE", "MANIFEST.in", "pyproject.toml"]: @@ -105,7 +96,11 @@ def update_to_v7_6(self): self.stdout.write("Copying {} to project directory".format(project_metadata_file)) shutil.copy2(os.path.join(settings.ROOT_DIR, "install", "arches-templates", project_metadata_file), os.path.join(settings.APP_ROOT, "..")) - for config_file in ["nodemon.json", "tsconfig.json", ".coveragerc", ".gitignore"]: + for config_file in ["nodemon.json", "tsconfig.json", ".coveragerc", ".gitignore", ".babelrc", ".browserslistrc", ".stylelintrc.json", "gettext.config.js"]: + if os.path.exists(os.path.join(settings.APP_ROOT, config_file)): + self.stdout.write("Deleting {} from project root directory".format(config_file)) + os.remove(os.path.join(settings.APP_ROOT, config_file)) + self.stdout.write("Copying {} to project directory".format(config_file)) shutil.copy2(os.path.join(settings.ROOT_DIR, "install", "arches-templates", config_file), os.path.join(settings.APP_ROOT, "..")) @@ -145,10 +140,6 @@ def update_to_v7_6(self): open(os.path.join(settings.APP_ROOT, "locale", "messages.pot"), 'w').close() - if not os.path.isfile(os.path.join(settings.APP_ROOT, "gettext.config.js")): - self.stdout.write("Copying gettext config to project root directory") - shutil.copy2(os.path.join(settings.ROOT_DIR, "install", "arches-templates", "gettext.config.js"), os.path.join(settings.APP_ROOT, '..')) - if os.path.isdir(os.path.join(settings.APP_ROOT, 'webpack')): self.stdout.write("Non-root-level webpack directory detected! Removing...") shutil.rmtree(os.path.join(settings.APP_ROOT, 'webpack'), ignore_errors=True) From 2898fa1a4ed01ade9182dbc79ef94366d3530b43 Mon Sep 17 00:00:00 2001 From: Christopher Byrd Date: Wed, 8 May 2024 14:19:16 -0700 Subject: [PATCH 169/242] nit #10774 --- .../arches-templates/vitest.config.mts | 28 ++++++++----------- arches/management/commands/updateproject.py | 14 +++++++++- vitest.config.mts | 28 ++++++++----------- 3 files changed, 37 insertions(+), 33 deletions(-) diff --git a/arches/install/arches-templates/vitest.config.mts b/arches/install/arches-templates/vitest.config.mts index cc3142064d1..63a041c8b7c 100644 --- a/arches/install/arches-templates/vitest.config.mts +++ b/arches/install/arches-templates/vitest.config.mts @@ -3,6 +3,16 @@ import vue from "@vitejs/plugin-vue"; import { defineConfig } from "vitest/config"; +const exclude = [ + '**/node_modules/**', + '**/dist/**', + '**/cypress/**', + '**/.{idea,git,cache,output,temp}/**', + '**/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build}.config.*', + '**/src/declarations.d.ts', + path.join(path.basename(__dirname), 'install', '**') +]; + export default defineConfig({ plugins: [vue()], test: { @@ -11,14 +21,7 @@ export default defineConfig({ }, coverage: { include: [path.join(path.basename(__dirname), 'src', '/')], - exclude: [ - '**/node_modules/**', - '**/dist/**', - '**/cypress/**', - '**/.{idea,git,cache,output,temp}/**', - '**/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build}.config.*', - path.join(path.basename(__dirname), 'install', '**') - ], + exclude: exclude, reporter: [ ['clover', { 'file': 'coverage.xml' }], 'text', @@ -27,14 +30,7 @@ export default defineConfig({ }, environment: "jsdom", globals: true, - exclude: [ - '**/node_modules/**', - '**/dist/**', - '**/cypress/**', - '**/.{idea,git,cache,output,temp}/**', - '**/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build}.config.*', - path.join(path.basename(__dirname), 'install', '**') - ], + exclude: exclude, passWithNoTests: true, setupFiles: ['vitest.setup.mts'], }, diff --git a/arches/management/commands/updateproject.py b/arches/management/commands/updateproject.py index f88fb960b5b..8b3e5d7eb0e 100644 --- a/arches/management/commands/updateproject.py +++ b/arches/management/commands/updateproject.py @@ -96,7 +96,19 @@ def update_to_v7_6(self): self.stdout.write("Copying {} to project directory".format(project_metadata_file)) shutil.copy2(os.path.join(settings.ROOT_DIR, "install", "arches-templates", project_metadata_file), os.path.join(settings.APP_ROOT, "..")) - for config_file in ["nodemon.json", "tsconfig.json", ".coveragerc", ".gitignore", ".babelrc", ".browserslistrc", ".stylelintrc.json", "gettext.config.js"]: + for config_file in [ + "nodemon.json", + "tsconfig.json", + ".coveragerc", + ".gitignore", + ".babelrc", + ".browserslistrc", + ".stylelintrc.json", + "gettext.config.js", + "vitest.config.mts", + "vitest.setup.mts", + "eslint.config.mjs", + ]: if os.path.exists(os.path.join(settings.APP_ROOT, config_file)): self.stdout.write("Deleting {} from project root directory".format(config_file)) os.remove(os.path.join(settings.APP_ROOT, config_file)) diff --git a/vitest.config.mts b/vitest.config.mts index 4c083d52446..07794064031 100644 --- a/vitest.config.mts +++ b/vitest.config.mts @@ -3,6 +3,16 @@ import vue from "@vitejs/plugin-vue"; import { defineConfig } from "vitest/config"; +const exclude = [ + '**/node_modules/**', + '**/dist/**', + '**/cypress/**', + '**/.{idea,git,cache,output,temp}/**', + '**/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build}.config.*', + '**/src/declarations.d.ts', + path.join(path.basename(__dirname), 'install', '**') +]; + export default defineConfig({ plugins: [vue()], test: { @@ -11,14 +21,7 @@ export default defineConfig({ }, coverage: { include: [path.join(path.basename(__dirname), 'app', 'src', '/')], - exclude: [ - '**/node_modules/**', - '**/dist/**', - '**/cypress/**', - '**/.{idea,git,cache,output,temp}/**', - '**/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build}.config.*', - path.join(path.basename(__dirname), 'install', '**') - ], + exclude: exclude, reporter: [ ['clover', { 'file': 'coverage.xml' }], 'text', @@ -27,14 +30,7 @@ export default defineConfig({ }, environment: "jsdom", globals: true, - exclude: [ - '**/node_modules/**', - '**/dist/**', - '**/cypress/**', - '**/.{idea,git,cache,output,temp}/**', - '**/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build}.config.*', - path.join(path.basename(__dirname), 'install', '**') - ], + exclude: exclude, passWithNoTests: true, setupFiles: ['vitest.setup.mts'], }, From 3250bb7dc524af4d6d98c0bfa9578503425d9ec7 Mon Sep 17 00:00:00 2001 From: Christopher Byrd Date: Wed, 8 May 2024 14:51:55 -0700 Subject: [PATCH 170/242] updates 7.6.0.md #10774 --- releases/7.6.0.md | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/releases/7.6.0.md b/releases/7.6.0.md index e118ea73326..4e88bc44139 100644 --- a/releases/7.6.0.md +++ b/releases/7.6.0.md @@ -52,12 +52,28 @@ Python: JavaScript: Upgraded: - vue == 3.4.21 + babel-loader == 9.1.3 + copy-webpack-plugin == 12.0.2 + cross-fetch == 4.0.0 + css-loader == 7.1.1 datatables.net-bs == 1.13.11 datatables.net-buttons == 2.4.3 datatables.net-buttons-bs == 2.4.3 datatables.net-responsive == 2.5.1 datatables.net-responsive-bs == 2.5.1 + eslint == 9.0.0 + html-loader == 5.0.0 + postcss-loader == 8.1.1 + postcss-preset-env == 9.5.5 + sass-loader == 14.2.0 + style-loader == 4.0.0 + stylelint == 16.3.1 + stylelint-config-standard == 36.0.0 + stylelint-webpack-plugin == 5.0.0 + vue == 3.4.21 + webpack-bundle-tracker == 3.1.0 + webpack-cli == 5.1.4 + webpack-dev-server == 5.0.4 Added: @babel/plugin-transform-class-properties == 7.23.3 @@ -68,8 +84,11 @@ JavaScript: nodemon == 3.0.2 sass == 1.70.0 ts-loader == 9.5.1 + typescript == 5.4.5 + typescript-eslint == 7.7.0 + vitest == 1.5.0 vue3-gettext == 3.0.0-beta.4 - vue-tsc == 2.0.6 + vue-tsc == 2.0.13 Removed: @babel/plugin-proposal-class-properties From 484a99ef1b32da096165d3b388d770bf276a8e6a Mon Sep 17 00:00:00 2001 From: Christopher Byrd Date: Wed, 8 May 2024 14:52:37 -0700 Subject: [PATCH 171/242] nit #10774 --- arches/app/src/ExampleComponent.spec.ts | 25 ------------------------- arches/app/src/ExampleComponent.vue | 20 -------------------- 2 files changed, 45 deletions(-) delete mode 100644 arches/app/src/ExampleComponent.spec.ts delete mode 100644 arches/app/src/ExampleComponent.vue diff --git a/arches/app/src/ExampleComponent.spec.ts b/arches/app/src/ExampleComponent.spec.ts deleted file mode 100644 index f64f546e7be..00000000000 --- a/arches/app/src/ExampleComponent.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { describe, it, expect } from 'vitest'; -import { mount } from '@vue/test-utils'; - -import ExampleComponent from '@/ExampleComponent.vue'; - - -describe('ExampleComponent', () => { - it('renders correctly', () => { - const wrapper = mount(ExampleComponent); - expect(wrapper.exists()).toBeTruthy(); - }); - - - it('renders h1 element with correct text', () => { - const wrapper = mount(ExampleComponent); - expect(wrapper.find('h1').text()).toBe('Hello from the template!'); - }); - - - it('applies scoped styles to h1 element', () => { - const wrapper = mount(ExampleComponent); - const h1 = wrapper.find('h1'); - expect(h1.classes()).toContain('header'); - }); -}); diff --git a/arches/app/src/ExampleComponent.vue b/arches/app/src/ExampleComponent.vue deleted file mode 100644 index 86931a1d171..00000000000 --- a/arches/app/src/ExampleComponent.vue +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - \ No newline at end of file From dcd01e9452fb4ff7a2ae58764661a0229fc60f89 Mon Sep 17 00:00:00 2001 From: Alexei Peters Date: Wed, 8 May 2024 10:02:58 -0700 Subject: [PATCH 172/242] remove unused i18n folders, re #10888 --- arches/locale/de/LC_MESSAGES/django.mo | Bin 421 -> 0 bytes arches/locale/de/LC_MESSAGES/django.po | 7309 --------------------- arches/locale/en_GB/LC_MESSAGES/django.mo | Bin 421 -> 0 bytes arches/locale/en_GB/LC_MESSAGES/django.po | 7309 --------------------- arches/locale/es/LC_MESSAGES/django.mo | Bin 421 -> 0 bytes arches/locale/es/LC_MESSAGES/django.po | 7309 --------------------- 6 files changed, 21927 deletions(-) delete mode 100644 arches/locale/de/LC_MESSAGES/django.mo delete mode 100644 arches/locale/de/LC_MESSAGES/django.po delete mode 100644 arches/locale/en_GB/LC_MESSAGES/django.mo delete mode 100644 arches/locale/en_GB/LC_MESSAGES/django.po delete mode 100644 arches/locale/es/LC_MESSAGES/django.mo delete mode 100644 arches/locale/es/LC_MESSAGES/django.po diff --git a/arches/locale/de/LC_MESSAGES/django.mo b/arches/locale/de/LC_MESSAGES/django.mo deleted file mode 100644 index ee56c394f4d5cb2407ca9208aba766e0037699df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 421 zcmYL^Pfx-y9ELG^+R?Lznt0IY563((3NuVraB=@K28rG()HxmP(iWp1#INUPu~Q>& z@}zD0w0-+^c<|XV*)tp&P7M2o3qu>%@M<;(W^A4RWKz7am4, YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-08-30 19:07-0700\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: app/datatypes/base.py:39 -#, python-brace-format -msgid "{0} error, {1} {2} - {3}. Unable to save." -msgstr "" - -#: app/datatypes/base.py:199 -msgid "Multiple provisional edits. Returning first edit" -msgstr "" - -#: app/datatypes/base.py:203 -msgid "Tile has no authoritative or provisional data" -msgstr "" - -#: app/datatypes/concept_types.py:140 -msgid "" -"The widget used to save this data appears to be incorrect for this datatype. " -"Contact system admin to resolve" -msgstr "" - -#: app/datatypes/concept_types.py:148 -msgid "This is an invalid concept prefLabel, or an incomplete UUID" -msgstr "" - -#: app/datatypes/concept_types.py:156 -msgid "This UUID is not an available concept value" -msgstr "" - -#: app/datatypes/datatypes.py:104 -msgid "This is not a string" -msgstr "" - -#: app/datatypes/datatypes.py:328 -msgid "Not a properly formatted number" -msgstr "" - -#: app/datatypes/datatypes.py:419 -msgid "Not of type boolean" -msgstr "" - -#: app/datatypes/datatypes.py:500 -msgid "" -"Incorrect format. Confirm format is in settings.DATE_FORMATS or set the " -"format in settings.DATE_IMPORT_EXPORT_FORMAT." -msgstr "" - -#: app/datatypes/datatypes.py:564 -#, python-brace-format -msgid "{value} is an invalid date format" -msgstr "" - -#: app/datatypes/datatypes.py:665 -msgid "" -"Incorrect Extended Date Time Format. See http://www.loc.gov/standards/" -"datetime/ for supported formats" -msgstr "" - -#: app/datatypes/datatypes.py:718 -msgid "" -"Only dates that specify an exact year, month, and day can be used with the " -"\"=\" operator" -msgstr "" - -#: app/datatypes/datatypes.py:727 -msgid "" -"Only dates that specify an exact year, " -"month, and day can be used with the \">" -"\", \"<\", \">=\", and \"<=\" operators" -msgstr "" - -#: app/datatypes/datatypes.py:739 -msgid "Invalid date specified." -msgstr "" - -#: app/datatypes/datatypes.py:806 -msgid "Unable to serialize some geometry features" -msgstr "" - -#: app/datatypes/datatypes.py:1398 -msgid "File type not permitted" -msgstr "" - -#: app/datatypes/datatypes.py:1424 -#, python-brace-format -msgid "This node has a limit of {0} files. Please reduce files." -msgstr "" - -#: app/datatypes/datatypes.py:1432 -#, python-brace-format -msgid "" -"This node has a file-size limit of {0}. Please reduce file size or contact " -"your sysadmin." -msgstr "" - -#: app/datatypes/datatypes.py:1440 -#, python-brace-format -msgid "The file \"{0}\" does not exist in \"{1}\"" -msgstr "" - -#: app/datatypes/datatypes.py:1444 -#, python-brace-format -msgid "datatype: {0}, value: {1} - {2} ." -msgstr "" - -#: app/datatypes/datatypes.py:1503 app/datatypes/datatypes.py:1590 -msgid "File does not exist" -msgstr "" - -#: app/datatypes/datatypes.py:1622 -msgid "The file url is invalid" -msgstr "" - -#: app/datatypes/datatypes.py:1624 -msgid "A file is not available for this tile" -msgstr "" - -#: app/datatypes/datatypes.py:1626 -msgid "This file's fileid is not a valid UUID" -msgstr "" - -#: app/datatypes/datatypes.py:1757 -#, python-brace-format -msgid "No domain option found for option id {0}, in node conifg: {1}" -msgstr "" - -#: app/datatypes/datatypes.py:1806 -msgid "" -"Invalid domain id. Please check the node this value is mapped to for a list " -"of valid domain ids." -msgstr "" - -#: app/datatypes/datatypes.py:2122 -#, python-brace-format -msgid "The related resource with id '{0}' is not in the system." -msgstr "" - -#: app/etl_modules/base_import_module.py:33 -msgid "Delegating load reversal to Celery task" -msgstr "" - -#: app/etl_modules/branch_csv_importer.py:218 -msgid "Legacy id(s) already exist. Legacy ids must be unique" -msgstr "" - -#: app/etl_modules/branch_csv_importer.py:243 -#: app/etl_modules/import_single_csv.py:208 -msgid "Failed to complete load" -msgstr "" - -#: app/etl_modules/branch_csv_importer.py:244 -#: app/etl_modules/import_single_csv.py:209 -msgid "Unable to insert record into staging table" -msgstr "" - -#: app/etl_modules/branch_csv_importer.py:279 -msgid "Invalid excel file/zip specified" -msgstr "" - -#: app/etl_modules/branch_csv_importer.py:280 -msgid "Upload a valid excel file" -msgstr "" - -#: app/etl_modules/branch_csv_importer.py:307 -msgid "Unable to initialize load" -msgstr "" - -#: app/etl_modules/branch_csv_importer.py:322 -#: app/etl_modules/import_single_csv.py:161 -msgid "Delegating load to Celery task" -msgstr "" - -#: app/etl_modules/branch_csv_importer.py:326 -#: app/etl_modules/import_single_csv.py:165 -msgid "delegated_to_celery" -msgstr "" - -#: app/etl_modules/branch_csv_importer.py:329 -#: app/etl_modules/import_single_csv.py:168 -msgid "" -"Cannot start process. Unable to run process as a background task at this " -"time." -msgstr "" - -#: app/etl_modules/branch_csv_importer.py:335 -#: app/etl_modules/import_single_csv.py:174 -#: app/templates/views/rdm/modals/import-concept-form.htm:40 -msgid "Error" -msgstr "" - -#: app/etl_modules/import_single_csv.py:104 -msgid "No csv file found" -msgstr "" - -#: app/etl_modules/import_single_csv.py:105 -msgid "Upload a valid csv file" -msgstr "" - -#: app/etl_modules/import_single_csv.py:143 -msgid "No valid node is selected" -msgstr "" - -#: app/etl_modules/import_single_csv.py:145 -msgid "Only one column should be selected for id" -msgstr "" - -#: app/functions/primary_descriptors.py:67 -#, python-brace-format -msgid "Invalid nodegroupid, {0}, participating in descriptor function." -msgstr "" - -#: app/functions/primary_descriptors.py:69 app/views/resource.py:745 -#: app/views/search.py:387 -msgid "Undefined" -msgstr "" - -#: app/models/concept.py:153 -msgid "Only include values for include or exclude, but not both" -msgstr "" - -#: app/models/concept.py:844 -#, python-format -msgid "Invalid subconcept definition: %s" -msgstr "" - -#: app/models/concept.py:852 -#, python-format -msgid "Invalid related concept definition: %s" -msgstr "" - -#: app/models/concept.py:863 -#, python-format -msgid "Invalid value definition: %s" -msgstr "" - -#: app/models/concept.py:1267 -msgid "Need to include values when creating a collection" -msgstr "" - -#: app/models/concept.py:1375 -msgid "" -"Index of label failed. Index type (scheme id) could not be derived from the " -"label." -msgstr "" - -#: app/models/fields/i18n.py:166 -msgid "A I18n_TextField object" -msgstr "" - -#: app/models/fields/i18n.py:357 -msgid "A I18n_JSONField object" -msgstr "" - -#: app/models/graph.py:77 -msgid "New Node" -msgstr "" - -#: app/models/graph.py:267 -msgid "Top Node" -msgstr "" - -#: app/models/graph.py:491 -#, python-brace-format -msgid "" -"Duplicate node alias: \"{0}\". All aliases must be unique in a resource " -"model." -msgstr "" - -#: app/models/graph.py:495 -#, python-brace-format -msgid "Fail to save node \"{0}\"." -msgstr "" - -#: app/models/graph.py:554 -#, python-brace-format -msgid "" -"Your resource model: {0}, already has instances saved. You cannot delete a " -"Resource Model with instances." -msgstr "" - -#: app/models/graph.py:703 -#, python-brace-format -msgid "" -"Your resource model: {0}, already has instances saved. You cannot modify a " -"Resource Model with instances." -msgstr "" - -#: app/models/graph.py:735 -msgid "Ontology rules don't allow this node to be appended" -msgstr "" - -#: app/models/graph.py:1002 -#, python-brace-format -msgid "" -"Your resource model: {self.name}, already has instances " -"saved. You cannot delete nodes from a Resource " -"Model with instances." -msgstr "" - -#: app/models/graph.py:1037 -msgid "The graph you wish to append needs to define an ontology" -msgstr "" - -#: app/models/graph.py:1050 -msgid "Ontology rules don't allow this graph to be appended" -msgstr "" - -#: app/models/graph.py:1522 -#, python-brace-format -msgid "" -"Your resource model: {self.name}, already has instances " -"saved. You cannot modify a Resource Model " -"with instances." -msgstr "" - -#: app/models/graph.py:1541 -#, python-brace-format -msgid "Duplicate node name: \"{0}\". All node names in a card must be unique." -msgstr "" - -#: app/models/graph.py:1550 -#, python-brace-format -msgid "Duplicate node name: \"{0}\". All sibling node names must be unique." -msgstr "" - -#: app/models/graph.py:1586 -msgid "" -"The top node of your resource graph: {self.root.name} needs to be a " -"collector. Hint: check that nodegroup_id of your " -"resource node(s) are not null." -msgstr "" - -#: app/models/graph.py:1592 -msgid "The top node of your resource graph must have a datatype of 'semantic'." -msgstr "" - -#: app/models/graph.py:1597 -msgid "" -"If your graph contains more than one node and is not a resource the root " -"must be a collector." -msgstr "" - -#: app/models/graph.py:1602 -msgid "Field name must not be blank." -msgstr "" - -#: app/models/graph.py:1604 -msgid "Field name must contain only alpha-numeric characters or underscores." -msgstr "" - -#: app/models/graph.py:1606 -msgid "Field name cannot begin with an underscore or number" -msgstr "" - -#: app/models/graph.py:1612 -#, python-brace-format -msgid "Field name must be unique to the graph; '{fieldname}' already exists." -msgstr "" - -#: app/models/graph.py:1634 -#, python-brace-format -msgid "A valid {0} ontology class must be selected" -msgstr "" - -#: app/models/graph.py:1637 -#, python-brace-format -msgid "'{0}' is not a valid {1} ontology class" -msgstr "" - -#: app/models/graph.py:1645 -msgid "" -"You must specify an ontology property. Your graph isn't semantically " -"valid. Entity domain '{edge.domainnode." -"ontologyclass}' and Entity range '{edge." -"rangenode.ontologyclass}' can not be related via Property '{edge." -"ontologyproperty}'." -msgstr "" - -#: app/models/graph.py:1664 -msgid "" -"Your graph isn't semantically valid. Entity domain '{edge.domainnode." -"ontologyclass}' and Entity range '{edge." -"rangenode.ontologyclass}' cannot be related " -"via Property '{edge.ontologyproperty}'." -msgstr "" - -#: app/models/graph.py:1672 -#, python-brace-format -msgid "" -"'{0}' is not found in the {1} ontology or is not a valid ontology property " -"for Entity domain '{2}'." -msgstr "" - -#: app/models/graph.py:1681 -msgid "" -"You have assigned ontology classes to your graph nodes but not assigned an " -"ontology to your graph." -msgstr "" - -#: app/models/graph.py:1702 -msgid "The json-ld context you supplied wasn't formatted correctly." -msgstr "" - -#: app/models/graph.py:1707 -#, python-brace-format -msgid "Another resource model already uses the slug '{self.slug}'" -msgstr "" - -#: app/models/graph.py:1753 -msgid "Graph Validation Error" -msgstr "" - -#: app/models/models.py:435 -msgid "Only resource models may be edited - branches are not editable" -msgstr "" - -#: app/models/models.py:437 -msgid "" -"This Model is currently unpublished and not available for instance creation." -msgstr "" - -#: app/models/resource.py:785 -msgid "Published Model Error" -msgstr "" - -#: app/models/resource.py:795 -msgid "Unpublished Model Error" -msgstr "" - -#: app/models/tile.py:276 -msgid "" -"This card violates a unique constraint. The " -"following value is already saved: " -msgstr "" - -#: app/models/tile.py:297 -#, python-brace-format -msgid "" -"Error checking for missing node. Nodeid: {nodeid} with value: {value}, not " -"in nodes. You may have a node in your business data that " -"no longer exists in any graphs." -msgstr "" - -#: app/models/tile.py:302 -msgid "This card requires values for the following: " -msgstr "" - -#: app/models/tile.py:325 -#, python-brace-format -msgid "{0}" -msgstr "" - -#: app/models/tile.py:645 app/models/tile.py:656 app/models/tile.py:673 -msgid "No associated functions or other TypeError raised by a function" -msgstr "" - -#: app/models/tile.py:711 -msgid "Tile Validation Error" -msgstr "" - -#: app/models/tile.py:722 -msgid "Tile Cardinaltiy Error" -msgstr "" - -#: app/search/base_index.py:182 -msgid "Search Index Error:" -msgstr "" - -#: app/search/base_index.py:192 -msgid "Search Index Not Defined Error:" -msgstr "" - -#: app/search/base_index.py:193 -#, python-format -msgid "" -"The index \"%s\" is not defined in settings.ELASTICSEARCH_CUSTOM_INDEXES" -msgstr "" - -#: app/search/components/map_filter.py:75 -msgid "Feature geometry is not defined" -msgstr "" - -#: app/search/elasticsearch_dsl_builder.py:289 -msgid "" -"You need at least one of the following operators in a Range expression: gte, " -"gt, lte, or lt" -msgstr "" - -#: app/search/elasticsearch_dsl_builder.py:291 -msgid "You can only use one of either: gte or gt" -msgstr "" - -#: app/search/elasticsearch_dsl_builder.py:293 -msgid "You can only use one of either: lte or lt" -msgstr "" - -#: app/search/elasticsearch_dsl_builder.py:377 -msgid "You need to specify either a \"field\" or a \"script\"" -msgstr "" - -#: app/search/elasticsearch_dsl_builder.py:379 -msgid "You need to specify a name for your aggregation" -msgstr "" - -#: app/search/elasticsearch_dsl_builder.py:381 -msgid "You need to specify an aggregation type" -msgstr "" - -#: app/search/elasticsearch_dsl_builder.py:570 -msgid "You need to specify a path for your nested aggregation" -msgstr "" - -#: app/search/search_export.py:212 -#, python-brace-format -msgid "Shapefile are fieldnames required for the following nodes: {0}" -msgstr "" - -#: app/tasks.py:31 -msgid "files_deleted" -msgstr "" - -#: app/tasks.py:84 -msgid "" -"Your search {} is ready for download. You have 24 hours to access this file, " -"after which we'll automatically remove it." -msgstr "" - -#: app/tasks.py:88 -msgid "" -"Hello,\n" -"Your request to download a set of search results is now ready." -msgstr "" - -#: app/tasks.py:90 -msgid "Download Now" -msgstr "" - -#: app/tasks.py:91 app/tasks.py:148 -msgid "Thank you" -msgstr "" - -#: app/tasks.py:140 -msgid "Resources have completed loading." -msgstr "" - -#: app/tasks.py:144 -msgid "" -"Hello,\n" -"Your package has successfully loaded into your Arches project." -msgstr "" - -#: app/tasks.py:147 -msgid "Log me in" -msgstr "" - -#: app/tasks.py:213 app/tasks.py:235 -msgid "Completed" -msgstr "" - -#: app/tasks.py:213 app/tasks.py:220 app/tasks.py:235 app/tasks.py:242 -msgid "Failed" -msgstr "" - -#: app/tasks.py:214 -msgid "Branch Excel Import: {} [{}]" -msgstr "" - -#: app/tasks.py:236 -msgid "Single CSV Import: {} [{}]" -msgstr "" - -#: app/templates/base-manager.htm:42 app/templates/change_password.htm:46 -#: app/templates/javascript.htm:404 -#: app/templates/views/rdm/modals/import-concept-form.htm:52 -#: app/templates/views/rdm/modals/import-scheme-form.htm:53 -#: app/templates/views/rdm/modals/manage-parent-form.htm:57 -#: app/templates/views/rdm/modals/related-concept-form.htm:67 -#: app/templates/views/rdm/modals/related-member-form.htm:66 -#: app/templates/views/rdm/modals/value-form.htm:63 -#: app/templates/views/rdm/modals/value-form.htm:142 -#: app/templates/views/rdm/modals/value-form.htm:220 -#: app/templates/views/user-profile-manager.htm:156 -msgid "Cancel" -msgstr "" - -#: app/templates/base-manager.htm:45 -msgid "OK" -msgstr "" - -#: app/templates/base-manager.htm:72 app/templates/rdm.htm:64 -msgid "Tools" -msgstr "" - -#: app/templates/base-manager.htm:80 -msgid "Manage System Settings" -msgstr "" - -#: app/templates/base-manager.htm:86 -#: app/templates/help/system-settings-help.htm:11 app/views/api.py:799 -#: app/views/resource.py:239 -msgid "System Settings" -msgstr "" - -#: app/templates/base-manager.htm:90 -msgid "System Settings Graph" -msgstr "" - -#: app/templates/base-manager.htm:101 app/templates/base-manager.htm:363 -#: app/templates/javascript.htm:386 app/templates/views/search.htm:23 -#: app/views/search.py:105 -msgid "Search" -msgstr "" - -#: app/templates/base-manager.htm:116 -msgid "Add New Resource" -msgstr "" - -#: app/templates/base-manager.htm:149 app/views/graph.py:151 -msgid "Arches Designer" -msgstr "" - -#: app/templates/base-manager.htm:155 app/templates/index.htm:399 -#: app/templates/views/graph.htm:64 -msgid "Resource Models" -msgstr "" - -#: app/templates/base-manager.htm:159 app/templates/views/graph.htm:65 -msgid "Branches" -msgstr "" - -#: app/templates/base-manager.htm:171 -#: app/templates/views/map-layer-manager.htm:26 app/views/map.py:96 -#: app/views/map.py:98 -msgid "Map Layer Manager" -msgstr "" - -#: app/templates/base-manager.htm:177 -#: app/templates/help/map-manager-help.htm:11 -#: app/templates/views/map-layer-manager.htm:88 -msgid "Resource Layers" -msgstr "" - -#: app/templates/base-manager.htm:182 -#: app/templates/help/map-manager-help.htm:31 app/templates/javascript.htm:439 -#: app/templates/views/map-layer-manager.htm:89 -msgid "Basemaps" -msgstr "" - -#: app/templates/base-manager.htm:187 -#: app/templates/help/map-manager-help.htm:46 app/templates/javascript.htm:440 -#: app/templates/javascript.htm:482 -#: app/templates/views/map-layer-manager.htm:90 -msgid "Overlays" -msgstr "" - -#: app/templates/base-manager.htm:201 app/templates/views/edit-history.htm:5 -#: app/views/resource.py:572 -msgid "Recent Edits" -msgstr "" - -#: app/templates/base-manager.htm:214 app/views/user.py:107 -#: app/views/user.py:142 -msgid "Profile Manager" -msgstr "" - -#: app/templates/base-manager.htm:223 -msgid "Modules" -msgstr "" - -#: app/templates/base-manager.htm:232 app/templates/rdm.htm:9 -#: app/views/concept.py:67 -msgid "Reference Data Manager" -msgstr "" - -#: app/templates/base-manager.htm:274 -msgid "DEBUG" -msgstr "" - -#: app/templates/base-manager.htm:289 app/templates/index.htm:87 -#: app/templates/javascript.htm:735 app/templates/views/graph.htm:109 -#: app/templates/views/rdm/concept-report.htm:26 -#: app/templates/views/rdm/concept-report.htm:50 -msgid "Manage" -msgstr "" - -#: app/templates/base-manager.htm:323 -msgid "Profile" -msgstr "" - -#: app/templates/base-manager.htm:323 app/templates/base-manager.htm:326 -msgid "Login" -msgstr "" - -#: app/templates/base-manager.htm:328 -msgid "Welcome" -msgstr "" - -#: app/templates/base-manager.htm:349 app/templates/base-manager.htm:422 -msgid "Notifications" -msgstr "" - -#: app/templates/base-manager.htm:374 -msgid "My Recent Edits" -msgstr "" - -#: app/templates/base-manager.htm:383 -msgid "Edit Resource" -msgstr "" - -#: app/templates/base-manager.htm:391 -msgid "Print" -msgstr "" - -#: app/templates/base-manager.htm:400 app/templates/javascript.htm:340 -#: app/templates/views/graph/card-configuration/card-form-preview.htm:54 -#: app/templates/views/graph/card-configuration/card-form-preview.htm:110 -msgid "Help" -msgstr "" - -#: app/templates/base-manager.htm:411 -msgid "Logout" -msgstr "" - -#: app/templates/base-manager.htm:426 app/templates/base-manager.htm:448 -#: app/templates/login.htm:73 app/templates/rdm.htm:78 -#: app/templates/views/rdm/concept-report.htm:42 -#: app/templates/views/rdm/concept-report.htm:59 -#: app/templates/views/rdm/modals/add-child-form.htm:49 -#: app/templates/views/rdm/modals/add-collection-form.htm:31 -#: app/templates/views/rdm/modals/add-scheme-form.htm:37 -#: app/templates/views/rdm/modals/delete-collection-form.htm:43 -#: app/templates/views/rdm/modals/delete-scheme-form.htm:43 -#: app/templates/views/rdm/modals/export-scheme-form.htm:26 -msgid "Close" -msgstr "" - -#: app/templates/base-manager.htm:444 -msgid "My Edit History" -msgstr "" - -#: app/templates/base-manager.htm:471 -msgid "Close Help" -msgstr "" - -#: app/templates/base-manager.htm:482 -msgid "for more documentation, visit" -msgstr "" - -#: app/templates/change_password.htm:23 -msgid "Change your password" -msgstr "" - -#: app/templates/change_password.htm:47 -msgid "Change Password" -msgstr "" - -#: app/templates/change_password.htm:50 app/templates/signup.htm:133 -msgid "Your password must:" -msgstr "" - -#: app/templates/errors/404.htm:11 app/templates/errors/500.htm:11 -#: app/templates/javascript.htm:206 -msgid "Arches" -msgstr "" - -#: app/templates/errors/404.htm:19 app/templates/errors/500.htm:19 -msgid "Oops!" -msgstr "" - -#: app/templates/errors/404.htm:20 -msgid "Page Not Found!" -msgstr "" - -#: app/templates/errors/404.htm:22 -msgid "" -"Sorry, but the page you are looking for has not been found on our server." -msgstr "" - -#: app/templates/errors/404.htm:26 app/templates/errors/500.htm:26 -msgid "Back to Homepage" -msgstr "" - -#: app/templates/errors/500.htm:20 -msgid "Internal Server Error!" -msgstr "" - -#: app/templates/errors/500.htm:22 -msgid "Something went wrong and we couldn't process your request." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:6 -msgid "Cards Tab" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:10 -#: app/templates/help/function-help.htm:7 -#: app/templates/help/graph-tab-help.htm:10 -#: app/templates/help/permissions-tab-help.htm:10 -msgid "Overview" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:14 -msgid "" -"In this tab you will configure the user-facing aspects of your graph. There " -"are multiple levels to doing so, which are reflected in the levels of the " -"graph tree. Report Configuration where you choose the " -"template for the resource report, Card Configuration where " -"you'll specify card-related settings, and the Widget Manager where you will choose and configure the data entry widget for each " -"node in the graph." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:19 -#: app/templates/views/graph-designer.htm:307 -msgid "Report Configuration" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:23 -msgid "" -"Each Resource Model must be configured with a report template. Reports show " -"data for all nodes in a resource instance for which the user has Read " -"permissions." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:24 -msgid "No Header Template" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:25 -msgid "Lists all node data, no special header at the top of the page." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:26 -msgid "Image Header Template" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:27 -msgid "" -"Use this template for Resource Models that will be be primarily used to " -"record images." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:30 app/templates/javascript.htm:535 -msgid "Included Image Nodes" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:31 -msgid "" -"Choose one or more nodes that hold images in this Resource Model. These " -"images will be presented as a slideshow in the report header." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:34 -msgid "Map Header Template" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:35 -msgid "" -"Use this template for Resource Models that will be be primarily used to " -"record resources that have a geo-location. There are number of settings you " -"should fill out to control the appearance of the map in the header." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:38 -msgid "Map Controls" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:39 -msgid "Choose whether or not the user has access to the Map Tools." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:42 -msgid "Position" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:43 -msgid "" -"You can set the position by panning the map. On report load, the map will " -"automatically pan and zoom to the resource geo-location if there is one " -"(also see Default Value below). Pitch values are 0-60 " -"(higher = more oblique), Bearing values can be positive or " -"negative (270 faces west; -180 faces south). Use ctrl + click " -"then pan the map to change Pitch and Bearing." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:46 -msgid "Zoom" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:47 -msgid "" -"Zoom levels go from 0 (zoomed out) to 20 (zoomed in). On report load, the " -"map will automatically pan and zoom to the resource geo-location if there is " -"one." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:50 -msgid "Geocoder" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:51 -msgid "" -"Configure which geocoding service the address search bar will use, and " -"whether or not to show the bar at all." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:54 -msgid "Resource Properties" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:55 -msgid "Configure some styling options for how the resource appears on the map." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:58 -#: app/templates/help/cards-tab-help.htm:127 app/templates/javascript.htm:236 -#: app/templates/javascript.htm:313 -msgid "Default Value" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:59 -msgid "" -"Choose whether the map should zoom to the resource geo-location if available " -"or the geo-location of the user." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:67 -#: app/templates/views/graph/graph-designer/card-configuration.htm:7 -msgid "Card Configuration" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:71 -msgid "" -"The settings for Cards are mostly related yo how you want a user to see the " -"card, but some have a more direct bearing on data structure as well. The " -"preview shows what the card will look like to users." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:74 -#: app/templates/views/graph/graph-designer/card-configuration.htm:18 -msgid "Card Type" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:75 -msgid "" -"Choose the Card Component to use. Only the Default Card is available " -"initially, but custom Card Components are a way for developers to enhance " -"the user experience." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:78 -#: app/templates/views/graph/graph-designer/card-configuration.htm:28 -msgid "Card Title" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:79 -msgid "Users will see this title when performing data entry." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:82 -#: app/templates/help/graph-tab-help.htm:32 app/templates/javascript.htm:228 -#: app/templates/views/graph/graph-designer/card-configuration.htm:37 -#: app/templates/views/graph/graph-designer/graph-settings.htm:44 -#: app/templates/views/graph/graph-designer/graph-settings.htm:48 -msgid "Subtitle" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:83 -msgid "Users will see this subtitle when performing data entry." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:86 -msgid "CSS Classes" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:87 -msgid "" -"You can add your own CSS classes to this Card to customize its look and " -"feel. Define these classes in your project's \"package.css\" file." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:90 -msgid "Make Card Visible" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:91 -msgid "" -"Show this Card by default. Developers could hide a card initially, and show " -"it based other variables." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:94 -msgid "Allow Multiple Values" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:95 -msgid "" -"While certain node data types allow the storage of multiple values in a " -"single node, \"concept-list\" for example, this setting is how you control " -"cardinality at a higher level. When determining whether or not to use this " -"setting, we recommend testing out the resource editor interface directly." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:98 -msgid "Enable Card-level Help" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:99 -msgid "" -"To aid data entry users when using this Card, you may want to add some extra " -"guidance. Enable setting to do so, and design the content of this guidance " -"with the Card-Level Help menu." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:106 -msgid "Widget Management" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:110 -msgid "" -"Widgets are data entry helpers for each node that collects information; it's " -"often easier to pick a date from a calendar than to type it in, for example. " -"Generally, the data type of the node will determine which Widget template is " -"used. However, in some cases you will have a choice: For example, in the " -"case of a concept node, you can choose a dropdown menu or a set " -"of radio buttons. Similarly, for a string node you can choose a " -"basic text box or a rich text editor." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:111 -msgid "" -"Depending on the Widget, there are more settings you can configure, most of " -"which are optional and all come with acceptable defaults." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:112 -msgid "Common Settings" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:115 -#: app/templates/views/graph/graph-designer/widget-configuration.htm:18 -#: app/templates/views/graph/graph-designer/widget-configuration.htm:21 -msgid "Widget Label" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:116 -msgid "" -"This will be used in the user interface. The default label comes from the " -"node name." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:119 -#: app/templates/views/graph-designer.htm:312 -#: app/templates/views/graph/graph-designer/widget-configuration.htm:27 -msgid "Template" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:120 -msgid "" -"The list of available Widgets is determined by the node's data type, though " -"developers can create new Widgets." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:123 app/templates/javascript.htm:199 -msgid "Placeholder" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:124 -msgid "Shown in the input area before the user has entered anything." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:128 -msgid "If desired, you can define a default value." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:131 -msgid "Other Settings by Widget" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:134 -msgid "map-widget" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:135 -msgid "" -"The map widget allows for a good deal of customization, from the default " -"center and zoom level to default layers." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:138 -msgid "datepicker-widget" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:139 -msgid "" -"This widget is used for the normal date data type, not the extended date/" -"time format data type. You can set minumum or maximum dates, change how " -"specific the calendar is when user first opens it, or set the display of the " -"date. However, note that real YYYY-MM-DD dates are stored in the database " -"whether no matter what display format you have chosed for this widget. So if " -"you have set YYYY for the Date Format and a user enters " -"\"2005\", then \"2005-01-01\" will be saved in the database." -msgstr "" - -#: app/templates/help/function-help.htm:11 -msgid "" -"\n" -"

Functions are discrete operations that can be associated with " -"a Resource Model and are run on specific nodes or cards whenever a user " -"clicks creates or modify's a Resource. Here in the Function Manager you will " -"associate Functions with this Resource Model and configure them " -"appropriately.

\n" -"

To add a Function to this Resource Model, click on it in " -"Function Library, and notice that it is added to the list of Selected " -"Functions. To delete a Function, use the symbol in the upper right corner.\n" -" " -msgstr "" - -#: app/templates/help/function-help.htm:16 -msgid "adding a function - click to view" -msgstr "" - -#: app/templates/help/function-help.htm:16 -#: app/templates/help/graph-tab-help.htm:112 -#: app/templates/help/permissions-tab-help.htm:47 -#: app/templates/help/rdm-help.htm:33 app/templates/help/rdm-help.htm:47 -#: app/templates/help/rdm-help.htm:61 app/templates/help/rdm-help.htm:75 -#: app/templates/help/rdm-help.htm:89 -#: app/templates/help/resource-editor-help.htm:18 -#: app/templates/help/resource-editor-help.htm:31 -#: app/templates/help/resource-editor-help.htm:53 -#: app/templates/help/search-help.htm:8 app/templates/help/search-help.htm:30 -#: app/templates/help/search-help.htm:39 app/templates/help/search-help.htm:49 -#: app/templates/help/search-help.htm:65 app/templates/help/search-help.htm:88 -msgid "open in new tab" -msgstr "" - -#: app/templates/help/function-help.htm:19 -#, python-format -msgid "" -"\n" -"

Arches comes with three default functions (see below). " -"However, functions are envisioned as the hook through which developers can " -"easily customize Arches capabilities, because new Functions can be added to " -"your individual Arches installation. Learn more here.

\n" -" " -msgstr "" - -#: app/templates/help/function-help.htm:26 -msgid "Define Resource Descriptors" -msgstr "" - -#: app/templates/help/function-help.htm:31 -msgid "" -"This function will generate one or more descriptors for Resources that are " -"created with this Resource Model. These descriptors are used throughout the " -"database interface, but are not saved as part of the resource. This gives " -"you control over the way Resources are identified and described in search " -"results and elsewhere." -msgstr "" - -#: app/templates/help/function-help.htm:32 -msgid "" -"Once added to the Resource Model, use the appropriate tab to configure a " -"descriptor template. Choose a card, and variables corresponding to each node " -"in that card will be added to the template, demarcated with < >. You can rearrange these variables and add text to customize the " -"descriptor. When you have set the descriptors, click Re-Index to update any existing resources in your database." -msgstr "" - -#: app/templates/help/function-help.htm:33 -msgid "" -"If there are multiple instances of a given card in a Resource, the first one " -"added will be used to create these descriptors. To manually change this, " -"edit the Resource in question and drag the desired tile to the top of the " -"list." -msgstr "" - -#: app/templates/help/function-help.htm:34 -msgid "" -"Any user with read access permission to a resource will be seeing these " -"resource descriptors wherever it shows up in search results or on the map. " -"If a card is intended to be hidden from any group of users, it " -"should not be used in this function." -msgstr "" - -#: app/templates/help/function-help.htm:36 -msgid "" -"\n" -"
Example
\n" -"

Consider a Resource where the Name node " -"value is Folsom School and Name Type node value is " -"Primary.

\n" -"

Selecting the Name card will populate the " -"template with <Name Type>, <Name>. The resulting " -"descriptor would read Primary, Folsom School. Changing the template " -"to Building Name: <Name> would yield Building Name: " -"Folsom School.

\n" -" " -msgstr "" - -#: app/templates/help/graph-tab-help.htm:6 -msgid "Graph Tab" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:14 -msgid "" -"In this tab you will design the graph—the core of a Resource Model or " -"Branch. In fact, sometimes Resource Models and Branches are generically " -"referred to as \"graphs\"." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:15 -msgid "" -"For the first step in building a graph, you should fill out the top-" -"level settings. Some of these may be changed later while others " -"can't, so make sure to do a lot of testing while developing a graph. With " -"the top-level settings in place, it's time to construct the graph by adding nodes (or full Branches) to the graph tree. Along the way, " -"you'll need to set the node-level settings for each node " -"you create." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:16 -msgid "" -"Once you've finished creating this Resource Model or Branch make sure to set " -"its status to \"active\"." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:21 -msgid "Top-Level Settings" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:25 -#: app/templates/views/rdm/concept-report.htm:269 -#: app/templates/views/rdm/entitytype-report.htm:160 -msgid "Identifiers" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:28 app/templates/javascript.htm:339 -#: app/templates/views/graph/graph-designer/graph-settings.htm:31 -#: app/templates/views/graph/graph-designer/graph-settings.htm:36 -msgid "Name" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:29 -msgid "" -"Used to identify this Resource Model throughout the app interface. Default " -"is New Resource Model." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:33 -msgid "Optional subtitle, displayed on the Arches Designer home page." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:36 -#: app/templates/views/graph/graph-designer/graph-settings.htm:56 -msgid "Ontology" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:37 -msgid "" -"Decide whether an ontology will be enforced in this graph. To learn more " -"about what this means, read Ontologies in Arches. By " -"default, you are allowed to choose between using the CIDOC CRM v6.2, or " -"using no ontology. Once a node or branch has been added to this graph the " -"Ontology setting cannot be modified." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:40 -#: app/templates/views/graph/graph-designer/graph-settings.htm:68 -msgid "Root Class" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:41 -msgid "" -"This setting is only necessary if an \"Ontology\" has been chosen. Define " -"the ontology class of the root node for this graph." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:44 -#: app/templates/views/graph/graph-designer/graph-settings.htm:80 -msgid "Configuration" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:47 -msgid "Status" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:48 -msgid "" -"Set to \"inactive\" to disallow use of this graph during development. " -"Inactive Resource Models cannot be used to create new resources, and " -"inactive Branches can not be added to a Resource Model." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:52 -msgid "Resource models that may be related" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:53 -msgid "" -"Choose which Resource Models can be related to this one with resource-to-" -"resource relationships." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:58 -#: app/templates/views/graph/graph-designer/graph-settings.htm:89 -msgid "Root Node Data Type" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:59 -msgid "Choose what data type to use for the root node of this Branch." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:63 app/templates/javascript.htm:636 -#: app/templates/javascript.htm:644 -#: app/templates/views/graph/graph-designer/graph-settings.htm:158 -#: app/templates/views/graph/graph-designer/node-form.htm:123 -msgid "Description" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:66 -#: app/templates/views/graph/graph-designer/graph-settings.htm:165 -msgid "Author" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:67 -msgid "" -"You can optionally add an Author to this graph. Only " -"administrators will see this information." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:70 -#: app/templates/views/graph/graph-designer/graph-settings.htm:177 -msgid "Abstract" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:71 -msgid "You can optionally add an Abstract to this graph." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:71 -msgid "" -"Users will see this abstract when they are presented with a choice of what " -"Resource Model to use to create a new resource." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:71 -msgid "" -"This abstract will be shown in the Branch Library which is used during graph " -"construction." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:75 -#: app/templates/views/graph/graph-designer/graph-settings.htm:189 -msgid "JSON-LD Context" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:76 -msgid "" -"Add a JSON-LD Context for " -"this Resource Model. This allows you to namespace common URI endpoints that " -"are used within a JSON-LD output of the resource. You can enter a plain URL " -"(\"http://www.cidoc-crm.org/cidoc-crm/\"), or JSON that defines " -"multiple keys ({\"crm\":\"http://www.cidoc-crm.org/cidoc-crm/\",\"rdf" -"\":\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"})." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:80 -#: app/templates/views/graph/graph-designer/graph-settings.htm:212 -msgid "Appearance" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:84 app/templates/javascript.htm:599 -#: app/templates/views/graph/graph-designer/graph-settings.htm:221 -msgid "Color" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:85 -msgid "" -"Choose a color for this Resource Model to be used in the related resources " -"force directed graph." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:89 -msgid "Icon" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:90 -msgid "" -"Choose an icon to identify this graph throughout the app interface. You can " -"browse the icons to select one, or type in the search bar to filter them. " -"Arches uses the Font " -"Awesome icon library; custom icons are not supported." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:98 -msgid "Construct the Graph" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:102 -msgid "" -"Use the graph tree on the left side of the page to construct the graph. " -"Every new graph starts with a Top Node, which will take the " -"name of the new Resource Model or Branch. From this node, you can either " -"Add Child Node to add a single node, or Add Branch to add an entire existing Branch." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:103 -msgid "" -"At any point during construction you can switch from Design " -"mode to Preview to see the full shape of your graph." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:104 -msgid "" -"If you have created a branch structure in a Resource Model that you would " -"like to use in a different Resource Model, you can export it from the graph " -"tree." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:110 -#: app/templates/help/permissions-tab-help.htm:45 -msgid "add a node and branch to new graph - click to view" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:122 -msgid "Node-Level Settings" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:126 -#: app/templates/views/graph/graph-designer/node-form.htm:28 -msgid "Node Identifiers" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:129 -#: app/templates/views/graph/graph-designer/node-form.htm:40 -msgid "Node Name" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:130 -msgid "" -"Set the name for this node. This will be used by default in the user " -"interface, but a different name for display can be configured at the widget " -"level." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:133 -#: app/templates/views/graph/graph-designer/node-form.htm:85 -msgid "Ontology Class" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:134 -msgid "only present if this graph uses an ontology" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:134 -msgid "" -"This setting assigns an ontological class to this node. To learn more, read " -"Ontologies in Arches" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:137 -msgid "Relationship to..." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:138 -msgid "" -"Define what relationship this node has with its parent node (the one " -"directly above it in the graph tree). A verbalization of your choice is " -"shown in the Semantics section below this setting." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:141 -msgid "Node Data Type and Settings" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:142 -msgid "" -"Depending on which data type you choose, you may have many more settings to " -"fill out. Those listed below will be present for every node no matter the " -"data type." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:145 -#: app/templates/views/graph/graph-designer/node-form.htm:144 -msgid "Data type" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:146 -msgid "" -"Choose the data type for this node. Please see the Default Data " -"Types section below. Once data is collected for this node, this " -"setting cannot be changed." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:149 -#: app/templates/views/graph/graph-designer/node-form.htm:183 -msgid "Expose to Advanced Search" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:150 -msgid "" -"If true users will be able to add this node to an Advanced Search query." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:153 -#: app/templates/views/graph/graph-designer/node-form.htm:203 -#: app/templates/views/graph/graph-designer/widget-configuration.htm:63 -msgid "Required" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:154 -msgid "" -"If true a value must be entered for this node in order to save it. Once data " -"is collected for this node, this setting cannot be changed." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:157 -msgid "Place node(s) in a separate card" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:158 -msgid "only present if this node is not already the top node for a card" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:158 -msgid "" -"If true this node will be set in a different card from its parent. This " -"affects data entry, and you are encouraged to test both states of this " -"setting while building you graph. Once data is collected for this node, this " -"setting cannot be changed." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:165 -msgid "Default Data Types" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:169 -msgid "" -"The data type of a node determines what kind of data that node will store. " -"Once chosen, some data types will require further configuration." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:170 -msgid "" -"Developers can create new datatypes." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:173 -msgid "boolean" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:174 -msgid "Use this to store a \"yes\"/\"no\" or \"true\"/\"false\" value." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:177 -msgid "concept" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:178 -msgid "" -"Stores one of a series of concepts from the Reference Data Manager. Users " -"will choose a concept in a dropdown list or set of radio buttons. You'll " -"further be prompted to choose a Concept Collection—" -"this controls which concepts the user is able to choose from." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:181 -msgid "concept-list" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:182 -msgid "Stores multiple concepts in a single node." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:185 -msgid "date" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:186 -msgid "Stores a CE calendar date. See etdf for BCE and fuzzy date handling." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:189 -msgid "edtf" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:190 -msgid "" -"Stores an Extended Date/Time Format value. Use this data type for " -"BCE dates or dates with uncertainty. This datatype requires extra " -"configuration to inform the database search methods how to interpret EDTF " -"values. Data entry users can enter edtf dates using formats listed in the EDTF draft specification." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:193 -msgid "file-list" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:194 -msgid "Stores one or mores files. Use this to upload images, documents, etc." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:197 -msgid "iiif-drawing" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:198 -msgid "" -"Used to store an IIIF compliant image." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:201 -msgid "geojson-feature-collection" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:202 -msgid "" -"Stores geographic coordinates, and is used to show a resource on the map." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:205 -msgid "domain-value" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:206 -msgid "" -"Similar to \"concept\", choose this to present the user with a dropdown list " -"or set of radio buttons. Unlike \"concept\" this dropdown menu will not come " -"from your system-wide controlled vocubulary, but from a list of values that " -"you must define here." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:209 -msgid "domain-value-list" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:210 -msgid "Stores multiple domain-values in a single node." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:213 -msgid "csv-chart-json" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:214 -msgid "Stores a csv chart formatted as JSON." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:217 -msgid "node-value" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:218 -msgid "" -"Stores a reference to a different node in this graph. This would allow you " -"to store duplicate data in more than one branch." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:221 -msgid "number" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:222 -msgid "Stores a number." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:225 -msgid "resource-instance" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:226 -msgid "" -"Embeds a separate resource instance into this node. For example, you could " -"add a node called \"Assessed By\" to a condition assessment branch, and use " -"this data type. This would allow you to associate an individual stored in " -"your database as an Actor resource with a specific condition assessment. " -"Note that this construction is different from making a \"resource-to-" -"resource relationship\". " -msgstr "" - -#: app/templates/help/graph-tab-help.htm:229 -msgid "resource-instance-list" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:230 -msgid "Stores a list of resource instances in a single node." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:233 -msgid "semantic" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:234 -msgid "" -"A semantic node does not store data. Semantic nodes are used where " -"necessary to make symbolic connections between other nodes, generally in " -"order to follow ontological rules. The top node of every graph is a semantic " -"node." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:237 -msgid "string" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:238 -msgid "" -"Stores a string of text. This could be something simple like a name, or more " -"something elaborate like a descriptive paragraph with formatting and " -"hyperlinks." -msgstr "" - -#: app/templates/help/map-manager-help.htm:6 -msgid "" -"\n" -"

Three categories of Map Layers will appear on your map: " -"Resource Layers (the contents of your database), " -"Basemaps (static background layers), and Overlays (custom data layers from outside your database). To configure a " -"layer, first select its category in the top bar, and then choose it from the " -"list at left.

\n" -" " -msgstr "" - -#: app/templates/help/map-manager-help.htm:13 -msgid "" -"Resource Layers display the resource layers in your database. One Resource " -"Layer is created for each node with a geospatial datatype (for example, " -"geojson-feature-collection). You are able to customize the " -"appearance and visibility of each Resource Layer in the following ways." -msgstr "" - -#: app/templates/help/map-manager-help.htm:14 -#: app/templates/help/map-manager-help.htm:34 -#: app/templates/help/map-manager-help.htm:49 app/templates/javascript.htm:588 -#: app/templates/views/map-layer-manager.htm:186 -msgid "Service Styling" -msgstr "" - -#: app/templates/help/map-manager-help.htm:15 -msgid "" -"Define the way features will look on the map. The example map has " -"demonstration features that give you a preview of the changes you make. You " -"can choose to use Advanced Editing to create a more nuanced " -"style. Note that changes made in Advanced Editing will not be reflected if " -"you switch back to basic editing. For styling reference, checkout the
MapBox Style Specification." -msgstr "" - -#: app/templates/help/map-manager-help.htm:16 -#: app/templates/help/map-manager-help.htm:36 -#: app/templates/help/map-manager-help.htm:51 app/templates/javascript.htm:395 -#: app/templates/views/graph/graph-designer/card-configuration.htm:70 -#: app/templates/views/map-layer-manager.htm:183 -msgid "Settings" -msgstr "" - -#: app/templates/help/map-manager-help.htm:17 -msgid "" -"You can change the name of this overlay if desired; by default it will use " -"the name of its Resource Model. You make also set the layer to be added to " -"the search map by default, or choose a custom icon for it." -msgstr "" - -#: app/templates/help/map-manager-help.htm:18 app/templates/javascript.htm:590 -msgid "Clustering" -msgstr "" - -#: app/templates/help/map-manager-help.htm:19 -msgid "" -"Arches uses 'clustering' to better display resources at low zoom levels " -"(zoomed out). You are able to control the clustering settings for each layer " -"individually." -msgstr "" - -#: app/templates/help/map-manager-help.htm:21 -msgid "" -"Cluster Distance - distance (in pixels) within which " -"resources will be clustered" -msgstr "" - -#: app/templates/help/map-manager-help.htm:22 -msgid "" -"Cluster Max Zoom - zoom level after which clustering will " -"stop being used" -msgstr "" - -#: app/templates/help/map-manager-help.htm:23 -msgid "" -"Cluster Min Points - minimum number of points needed to " -"create a cluster" -msgstr "" - -#: app/templates/help/map-manager-help.htm:25 app/templates/javascript.htm:207 -#: app/templates/javascript.htm:589 app/templates/views/graph-designer.htm:212 -#: app/templates/views/graph/graph-designer/permission-settings-form.htm:10 -#: app/templates/views/graph/graph-designer/permission-settings-form.htm:57 -msgid "Permissions" -msgstr "" - -#: app/templates/help/map-manager-help.htm:26 -msgid "" -"This tab shows the permissions for the nodegroup whose geometry is displayed " -"in this Resource Layer. Permissions are defined in the Graph Designer." -msgstr "" - -#: app/templates/help/map-manager-help.htm:33 -msgid "" -"A Basemap will always be present in your map. Arches comes with a few " -"default basemaps, but advanced users are able to add more. Once added, there " -"are few ways to configure each basemap." -msgstr "" - -#: app/templates/help/map-manager-help.htm:35 -msgid "" -"Define a style for this basemap. Note that depending on the type of layer, " -"there are different styling options. For styling reference, checkout the MapBox Style Specification." -msgstr "" - -#: app/templates/help/map-manager-help.htm:38 -msgid "Layer name - enter a name to identify this basemap" -msgstr "" - -#: app/templates/help/map-manager-help.htm:39 -msgid "" -"Default search map - choose this layer to be the default " -"basemap" -msgstr "" - -#: app/templates/help/map-manager-help.htm:40 -#: app/templates/help/map-manager-help.htm:55 -msgid "Layer icon - associate an icon with this layer" -msgstr "" - -#: app/templates/help/map-manager-help.htm:48 -msgid "" -"Overlays allow you to incorporate map layers from external sources. Note " -"that Search Results and Search Markets are treated as overlays, and can be " -"customize separately. New overlays can be added with a little behind-the-" -"scenes work. Once added, there are few ways to configure each overlay." -msgstr "" - -#: app/templates/help/map-manager-help.htm:50 -msgid "" -"Define a style for this overlay. Note that depending on the type of layer, " -"there are different styling options. For styling reference, checkout the MapBox Style Specification." -msgstr "" - -#: app/templates/help/map-manager-help.htm:53 -msgid "Layer name - enter a name to identify this overlay" -msgstr "" - -#: app/templates/help/map-manager-help.htm:54 -msgid "" -"Default search map - choose whether this overlay should be " -"shown in the search map by default. Note that in the search map itself you " -"can change the order of the layers." -msgstr "" - -#: app/templates/help/permissions-tab-help.htm:6 -msgid "Permissions Tab" -msgstr "" - -#: app/templates/help/permissions-tab-help.htm:14 -msgid "" -"Arches allows you to define user and user group permissions on a per-" -"nodegroup basis. For example, you may want to hide the coordinates of a " -"Resource from the public, or allow a certain group of users to only update " -"the condition assessment section of a Resource Model. Rules like these are " -"all enforced using permissions." -msgstr "" - -#: app/templates/help/permissions-tab-help.htm:15 -msgid "Permissions Levels" -msgstr "" - -#: app/templates/help/permissions-tab-help.htm:18 -#: app/templates/javascript.htm:648 app/templates/javascript.htm:756 -#: app/templates/views/components/plugins/workflow.htm:34 -#: app/templates/views/graph/function-manager.htm:121 -#: app/templates/views/rdm/modals/delete-collection-form.htm:44 -#: app/templates/views/rdm/modals/delete-scheme-form.htm:44 -msgid "Delete" -msgstr "" - -#: app/templates/help/permissions-tab-help.htm:19 -msgid "" -"Allows users to delete instances of this nodegroup. Note, this is not the " -"same as being allowed to delete an entire resource, permissions for which " -"are not handled here." -msgstr "" - -#: app/templates/help/permissions-tab-help.htm:22 -msgid "No Access" -msgstr "" - -#: app/templates/help/permissions-tab-help.htm:23 -msgid "" -"Disallows users from seeing or editing instances of this nodegroup. Use this " -"permission level to hide sensitive data from non-authenticated users (the " -"public)." -msgstr "" - -#: app/templates/help/permissions-tab-help.htm:26 -msgid "Read" -msgstr "" - -#: app/templates/help/permissions-tab-help.htm:27 -msgid "" -"Allows users to see this nodegroup's card. If disallowed, the card/nodegroup " -"will be hidden from the map and resource reports." -msgstr "" - -#: app/templates/help/permissions-tab-help.htm:30 -msgid "Create/Update" -msgstr "" - -#: app/templates/help/permissions-tab-help.htm:31 -msgid "" -"Allows users to create or edit instances of this nodegroup. This provides " -"the ability to let users edit some information about a resource, while be " -"restricted from editing other information." -msgstr "" - -#: app/templates/help/permissions-tab-help.htm:34 -msgid "Non-Authenticated Users" -msgstr "" - -#: app/templates/help/permissions-tab-help.htm:35 -msgid "" -"You may notice that by default Arches comes with a \"Guest\" group, as well " -"as user named \"anonymous\" who is a member of that group. Any non-" -"authenticated user is treated as the \"anonymous\" user. This means " -"that all permissions applied to the Guest group will be given to anyone who " -"views the website without logging in." -msgstr "" - -#: app/templates/help/profile-manager-help.htm:7 -msgid "" -"The profile manager allows you to update your account information, such as " -"your password, at any time." -msgstr "" - -#: app/templates/help/rdm-help.htm:6 -msgid "" -"The Reference Data Management (RDM) enables the creation and maintenance of " -"controlled vocabularies that are used throughout your database. In Arches, " -"controlled vocabularies consist of Concepts, and these Concepts are managed " -"in Thesauri and Collections. In the RDM you can create new Thesauri, create " -"new Concepts, import Concepts from external an endpoint (like the Getty " -"AAT), and -- the ultimate goal -- create Collections, which will be used in " -"your database as data input dropdown lists." -msgstr "" - -#: app/templates/help/rdm-help.htm:8 app/templates/javascript.htm:574 -#: app/templates/views/rdm/concept-report.htm:356 -msgid "Concepts" -msgstr "" - -#: app/templates/help/rdm-help.htm:10 -msgid "" -"A Concept is a qualitative property that can be attached to a resource, " -"something like \"Stone\" (which may describe a building material) or \"House" -"\" (which may describe a past use for a structure). The advantage of storing " -"these properties as Concepts is that a Concept may have attributes of its " -"own. In the case of \"House\", we could add an alternate label, \"Dwelling\" " -"to that Concept. Then, if a user searches for \"dwelling\", any resource " -"with the \"House\" Concept attached to it will be found." -msgstr "" - -#: app/templates/help/rdm-help.htm:11 -msgid "" -"Concepts can also be nested, to allow more complex and meaningful " -"relationships between them. For example, \"House\" may appear next to " -"\"School\" within a parent Concept called \"Building Use\"." -msgstr "" - -#: app/templates/help/rdm-help.htm:15 app/templates/rdm.htm:57 -msgid "Thesauri" -msgstr "" - -#: app/templates/help/rdm-help.htm:17 -msgid "" -"A Thesaurus is an entire set of Concepts which can be imported and exported " -"as a whole. You can create as many new Thesauri as you need, or just add new " -"Concepts to the default \"Arches\" Thesaurus. The organization of your " -"Thesauri has no impact on the way Concepts will be exposed to the public or " -"used throughout the app." -msgstr "" - -#: app/templates/help/rdm-help.htm:21 app/templates/rdm.htm:60 -#: app/templates/views/rdm/concept-report.htm:344 -msgid "Collections" -msgstr "" - -#: app/templates/help/rdm-help.htm:23 -msgid "" -"Collections, or Concept Collections as they are sometimes called, are custom " -"aggregations of Concepts that will be used in your app as dropdown lists " -"during the data entry process. Collections allow you to reorganize your " -"Concepts for the specific purpose of data entry, so your dropdown lists do " -"not have to look anything like your Thesaurus. You can create as many " -"Collections as you want, or add new Concepts to existing Collections." -msgstr "" - -#: app/templates/help/rdm-help.htm:27 -msgid "Example - Create a New Thesaurus" -msgstr "" - -#: app/templates/help/rdm-help.htm:29 -msgid "" -"In the video below, a new Thesaurus is created. Once you have made a " -"Thesaurus, you can begin creating a hierarchy of Concepts within it. " -"Remember, the final step will be to make a new Collection and add Concepts " -"to it (from any of your Thesauri)." -msgstr "" - -#: app/templates/help/rdm-help.htm:31 app/templates/help/rdm-help.htm:45 -#: app/templates/help/rdm-help.htm:59 app/templates/help/rdm-help.htm:73 -#: app/templates/help/rdm-help.htm:87 -msgid "click to view demonstration" -msgstr "" - -#: app/templates/help/rdm-help.htm:41 -msgid "Example - Create a Top Concept" -msgstr "" - -#: app/templates/help/rdm-help.htm:43 -msgid "" -"The first level of organization within a Thesaurus is a set of Top Concepts. " -"A Top Concept may be something like \"Architectural Styles\" and its " -"children Concepts will be the actual styles themselves. Below, a new, empty " -"Top Concept is added to an empty Thesaurus." -msgstr "" - -#: app/templates/help/rdm-help.htm:55 -msgid "Example - Create New Concepts" -msgstr "" - -#: app/templates/help/rdm-help.htm:57 -msgid "" -"To create a new Concept, begin by selecting the Top Concept under which it " -"should be placed. This will bring the details about the Top Concept into the " -"main panel. Use the Manage dropdown to \"Add Child\", type in a label, and " -"select the correct language for the label." -msgstr "" - -#: app/templates/help/rdm-help.htm:69 -msgid "Example - Add an Alternate Label to a Concept" -msgstr "" - -#: app/templates/help/rdm-help.htm:71 -msgid "" -"To improve the searchability of your Concepts, you can add as many alternate " -"labels to each one as you want Below, the label \"Dwelling\" is added to the " -"Concept \"House\". The result is that anyone using \"Dwelling\" as a search " -"term will be shown Resources that have the \"House\" Concept." -msgstr "" - -#: app/templates/help/rdm-help.htm:83 -msgid "Example - Create a Collection" -msgstr "" - -#: app/templates/help/rdm-help.htm:85 -msgid "" -"Creating a Collection is very similar to creating a Thesaurus. However, you " -"will be adding existing Concepts to a Collection (potentially from more than " -"one Thesaurus) instead of creating new ones. Below, a new Collection is " -"created. To go further, select the Collection, and use the \"Add dropdown " -"entry\" link to add existing Concepts to this Collection. When configuring " -"the Graph for a Branch or Resource Model, you will now be able to add this " -"Concept Collection to a node." -msgstr "" - -#: app/templates/help/resource-editor-help.htm:7 -msgid "Creating Resource Data" -msgstr "" - -#: app/templates/help/resource-editor-help.htm:11 -msgid "" -"The Resource Editor is used to create new or edit existing Resources. What " -"you see on the left-hand side of the page is this Resource's \"card tree\", " -"which shows all of the data entry cards that you can edit. Think of " -"\"creating data\" as \"adding cards\"." -msgstr "" - -#: app/templates/help/resource-editor-help.htm:12 -msgid "" -"To begin, select a card, enter data, and click Add. Some " -"cards may allow multiple instances, in which case you will be able to add as " -"many of the same type as you want." -msgstr "" - -#: app/templates/help/resource-editor-help.htm:13 -msgid "" -"Note that in the demonstration below, the \"Define Resource Descriptors\" " -"function has already been configured to set the Name card value as the " -"resource display name." -msgstr "" - -#: app/templates/help/resource-editor-help.htm:16 -msgid "basic card data enty - click to view" -msgstr "" - -#: app/templates/help/resource-editor-help.htm:24 -msgid "" -"Once you have saved data for a resource, you can see a full summary by " -"selecting the top card. This is the resource report." -msgstr "" - -#: app/templates/help/resource-editor-help.htm:25 -msgid "" -"In some cases, cards will be nested within other cards, as in the example of " -"adding a geo-location below." -msgstr "" - -#: app/templates/help/resource-editor-help.htm:29 -msgid "nested card data enty - click to view" -msgstr "" - -#: app/templates/help/resource-editor-help.htm:42 -msgid "Creating Resources Relations" -msgstr "" - -#: app/templates/help/resource-editor-help.htm:47 -msgid "" -"In the Resource Editor you can also access the Related Resources " -"Editor . To create a relationship between this resource and another " -"in your database, open the editor, find the resource, and click Add." -msgstr "" - -#: app/templates/help/resource-editor-help.htm:48 -msgid "" -"Your Resource Model will need to be configured to allow relations with the " -"target Resource Model. If relations are not allowed, resources in the " -"dropdown menu will not be selectable." -msgstr "" - -#: app/templates/help/resource-editor-help.htm:51 -msgid "create resource relation - click to view" -msgstr "" - -#: app/templates/help/resource-editor-landing-help.htm:7 -msgid "" -"Choose a Resource Model to begin creating a new Resource in your database." -msgstr "" - -#: app/templates/help/search-help.htm:6 -msgid "Introduction to Search" -msgstr "" - -#: app/templates/help/search-help.htm:11 -msgid "" -"Search Bar The quickest way to search the database is to " -"begin typing in the search bar. You'll be presented with database " -"terminology which you can use to create one or more simple filters. The " -"search bar also acts as an aggregator of all currently enabled " -"filters." -msgstr "" - -#: app/templates/help/search-help.htm:12 -msgid "" -"Search Tools There are a number tools you can use to " -"explore the database, which are described in detail below." -msgstr "" - -#: app/templates/help/search-help.htm:13 -msgid "" -"Search Results Whenever you change any search filters, the " -"updated search results will be listed here. You can link to a resource's " -"report, zoom to it on the map, or view its related resources." -msgstr "" - -#: app/templates/help/search-help.htm:14 -msgid "" -"Search Panel The contents of this panel will change " -"depending on what search tool you are using. Typically, the map will be " -"activated by default." -msgstr "" - -#: app/templates/help/search-help.htm:19 app/templates/index.htm:148 -msgid "Search Tools" -msgstr "" - -#: app/templates/help/search-help.htm:22 app/templates/javascript.htm:399 -msgid "Map" -msgstr "" - -#: app/templates/help/search-help.htm:24 -msgid "" -"Search results can be represented on the map in two ways: markers show the first set of resources in the search results, and " -"cells are used to give a general spatial representation of " -"all resources in the search results." -msgstr "" - -#: app/templates/help/search-help.htm:25 -msgid "" -"In addition to displaying search results, the map can show resource layers " -"(showing all resources), or custom overlays, if any have been added. You " -"control the visibility of all layers and basemaps with the tool panel on the " -"right." -msgstr "" - -#: app/templates/help/search-help.htm:26 -msgid "" -"Finally, you can add a spatial filter to your query by using the map drawing " -"tools to draw a shape and apply a buffer distance if desired." -msgstr "" - -#: app/templates/help/search-help.htm:28 -msgid "change basemap - click to view" -msgstr "" - -#: app/templates/help/search-help.htm:37 -msgid "toggle search results layer - click to view" -msgstr "" - -#: app/templates/help/search-help.htm:47 -msgid "search with spatial query - click to view" -msgstr "" - -#: app/templates/help/search-help.htm:58 -msgid "Time" -msgstr "" - -#: app/templates/help/search-help.htm:60 -msgid "" -"You can apply a temporal criterion to your query by using the Time Filter. " -"You have the option of creating the filter by hand, or you can use the time " -"wheel. The time wheel is a graphic representation of all the resources in " -"the database, organized chronologically." -msgstr "" - -#: app/templates/help/search-help.htm:63 -msgid "apply time filter with time wheel - click to view" -msgstr "" - -#: app/templates/help/search-help.htm:74 -#: app/templates/views/graph/card-configuration/card-form-preview.htm:93 -#: app/templates/views/graph/card-configuration/card-form-preview.htm:135 -msgid "Saved" -msgstr "" - -#: app/templates/help/search-help.htm:76 -msgid "" -"Saved searches allow you to view pre-made queries. Saved searches are " -"created by database administrators, so the number of saved searches shown " -"here will vary from one database to the next." -msgstr "" - -#: app/templates/help/search-help.htm:80 app/templates/javascript.htm:594 -msgid "Advanced" -msgstr "" - -#: app/templates/help/search-help.htm:82 -msgid "" -"You can use the advanced search to make more complex queries based on data " -"attributes, or \"facets\". While the basic search filter allows you to " -"combine multiple filters, advanced search is the only way to combine filters " -"with an or operator, and also gives you access to more " -"comparison operators." -msgstr "" - -#: app/templates/help/search-help.htm:83 -msgid "" -"In the example below, a search is made within a single resource type for any " -"name like \"church\" or any name " -"like \"gate\"." -msgstr "" - -#: app/templates/help/search-help.htm:86 -msgid "search for multiple words in names - click to view" -msgstr "" - -#: app/templates/help/search-help.htm:97 -msgid "Related" -msgstr "" - -#: app/templates/help/search-help.htm:99 -msgid "" -"For each resource listed in the search results you can view its related " -"resources with the \"Related Resources\" link under the description. By " -"viewing Related Resources, you get a new view of the database: not how " -"resources are related geographically nor chronologically, but qualitatively." -msgstr "" - -#: app/templates/help/search-help.htm:100 -msgid "" -"There two methods for viewing Related Resources: in a table where each " -"related resource is a row, or in a graph where resources are shown as nodes " -"in a graph, with relationships connecting them." -msgstr "" - -#: app/templates/help/system-settings-help.htm:6 -msgid "" -"\n" -"

A number of global settings can be defined or altered here.

\n" -" " -msgstr "" - -#: app/templates/help/system-settings-help.htm:13 -msgid "Default Application Settings" -msgstr "" - -#: app/templates/help/system-settings-help.htm:15 -msgid "" -"\n" -" Application Name - Name of your Arches app, " -"to be displayed in the browser title bar and elsewhere.
\n" -" Default Data Import/Export User - Name to " -"associate with data that is imported into the system.
\n" -" " -msgstr "" - -#: app/templates/help/system-settings-help.htm:20 -msgid "Web Analytics" -msgstr "" - -#: app/templates/help/system-settings-help.htm:22 -msgid "" -"\n" -" Google Analytics Key - If you have made a " -"Google Analytics Key to track your app's traffic, enter it here.
\n" -" " -msgstr "" - -#: app/templates/help/system-settings-help.htm:26 -msgid "Thesaurus Service Providers" -msgstr "" - -#: app/templates/help/system-settings-help.htm:28 -msgid "" -"\n" -" Thesaurus SPARQL Endpoint - Advanced users " -"may create more SPARQL endpoints and register them here. These endpoints " -"will be available in the RDM and allow you to import thesaurus entries from " -"external sources.
\n" -" " -msgstr "" - -#: app/templates/help/system-settings-help.htm:35 -msgid "Map Settings" -msgstr "" - -#: app/templates/help/system-settings-help.htm:37 -msgid "Mapbox API" -msgstr "" - -#: app/templates/help/system-settings-help.htm:38 -msgid "" -"Arches uses the Mapbox mapping library for map display and data creation. " -"Arches also supports Mapbox basemaps and other services." -msgstr "" - -#: app/templates/help/system-settings-help.htm:40 -msgid "" -"Mapbox API Key (Optional) - By default, Arches uses some " -"basemap web services from Mapbox. You will need to create a free " -"API key (or \"access token\") for these services to be activated. " -"Alternatively, you could remove all of the default basemaps and add your " -"own, non-Mapbox layers." -msgstr "" - -#: app/templates/help/system-settings-help.htm:41 -msgid "Mapbox Sprites - Path to Mapbox sprites (use default)." -msgstr "" - -#: app/templates/help/system-settings-help.htm:42 -msgid "Mapbox Glyphs - Path to Mapbox glyphs (use default)." -msgstr "" - -#: app/templates/help/system-settings-help.htm:44 -msgid "Project Extent" -msgstr "" - -#: app/templates/help/system-settings-help.htm:45 -msgid "" -"Draw a polygon representing your project's extent. These bounds will serve " -"as the default for the search result grid bounds, and map bounds in search, " -"cards, and reports." -msgstr "" - -#: app/templates/help/system-settings-help.htm:46 -msgid "Map Zoom" -msgstr "" - -#: app/templates/help/system-settings-help.htm:47 -msgid "" -"You can define the zoom behavior of your map. Zoom level 0 shows the whole " -"world (and is the absolute minimum zoom level) and zoom level 20 is the " -"maximum level that most map services support." -msgstr "" - -#: app/templates/help/system-settings-help.htm:49 -msgid "" -"Default Zoom - Set the zoom level that the map will be " -"shown at by default." -msgstr "" - -#: app/templates/help/system-settings-help.htm:50 -msgid "" -"Min Zoom - Minimum zoom level defines how far the user can " -"zoom out when viewing the map." -msgstr "" - -#: app/templates/help/system-settings-help.htm:51 -msgid "" -"Max Zoom - Maximum zoom level defines how far the user can " -"zoom in when viewing the map." -msgstr "" - -#: app/templates/help/system-settings-help.htm:53 -msgid "Search Results Grid" -msgstr "" - -#: app/templates/help/system-settings-help.htm:54 -msgid "" -"Arches aggregates search results and displays them as hexagons. You will " -"need to set default parameters for the hexagon size and precision." -msgstr "" - -#: app/templates/help/system-settings-help.htm:56 -msgid "" -"Hexagon Size (in km) - Set the actual size of the hex bins " -"that will be shown on the map." -msgstr "" - -#: app/templates/help/system-settings-help.htm:57 -msgid "" -"Hexagon Grid Precision - Set the precision with which the " -"contents of the hex bins will be calculated." -msgstr "" - -#: app/templates/help/system-settings-help.htm:59 -msgid "" -"Warning: A large project area combined with a small hexagon " -"size and/or high precision will take a very long time to load, and can crash " -"your browser. We suggest changing these settings in small increments to find " -"the best combination for your project." -msgstr "" - -#: app/templates/help/system-settings-help.htm:63 -msgid "Basic Search Settings" -msgstr "" - -#: app/templates/help/system-settings-help.htm:65 -msgid "Set the default search results behavior." -msgstr "" - -#: app/templates/help/system-settings-help.htm:66 -msgid "" -"\n" -"

\n" -" Number of search results per page - Set the " -"number of search results shown per page. Note this also defines the number " -"of search result markers that are shown on the map.
\n" -" Number of search hints per dropdown - Set " -"the number of search hints that will appear under the search bar as you type " -"in search terms.
\n" -" Max number of search results to export - " -"Set the maximum number of resources to be exported from the search results. " -"This value should generally be evenly divible by the SEARCH_RESULT_LIMIT " -"setting in Arches (10,000 by default).\n" -"

\n" -" " -msgstr "" - -#: app/templates/help/system-settings-help.htm:76 -msgid "Temporal Search Settings" -msgstr "" - -#: app/templates/help/system-settings-help.htm:78 -msgid "" -"Arches creates a Time Wheel based on the resources in your database, to " -"allow for quick temporal visualization and queries. A few aspects of this " -"temporal search are defined here." -msgstr "" - -#: app/templates/help/system-settings-help.htm:80 -msgid "" -"Color Ramp - not currently implemented The color " -"ramp for the time wheel. For further reference, check out the d3 API reference." -msgstr "" - -#: app/templates/help/system-settings-help.htm:81 -msgid "" -"Time wheel configuration - not currently implemented" -msgstr "" - -#: app/templates/help/system-settings-help.htm:86 -msgid "Saved Searches" -msgstr "" - -#: app/templates/help/system-settings-help.htm:88 -msgid "" -"Arches allows you save a search and present it as convenience for your " -"users. Saved Searches appear as search options in the main Search page. " -"Creating a Saved Search is a three-step process." -msgstr "" - -#: app/templates/help/system-settings-help.htm:90 -msgid "" -"\n" -" 1. Specify Search Criteria - Go to the " -"Search page and enter all the criteria you would like to use to configure " -"your Saved Search. You may notice that with the addition of each new search " -"filter (either by using the term filter, map filtering tools, or temporal " -"filters) the URL for the page will change.
\n" -" 2. Copy the URL - In your browser address " -"bar, copy the entire URL. This will be a long string that defines " -"each of the search filters created in step 1.
\n" -" 3. Create the Saved Search - Finally, head " -"back to this page and fill out the settings that you see at left. You can " -"also upload an image that will be shown along with your Search Search.\n" -" " -msgstr "" - -#: app/templates/index.htm:72 -#, python-format -msgid "Arches | %(version)s" -msgstr "" - -#: app/templates/index.htm:80 -msgid "Arches Features" -msgstr "" - -#: app/templates/index.htm:83 -msgid "Search Arches" -msgstr "" - -#: app/templates/index.htm:92 -msgid "Sign in" -msgstr "" - -#: app/templates/index.htm:97 -msgid "Welcome, " -msgstr "" - -#: app/templates/index.htm:101 -msgid "Log off" -msgstr "" - -#: app/templates/index.htm:133 -msgid "Home" -msgstr "" - -#: app/templates/index.htm:138 app/templates/index.htm:215 -msgid "Fast" -msgstr "" - -#: app/templates/index.htm:143 app/templates/index.htm:269 -msgid "Workflows" -msgstr "" - -#: app/templates/index.htm:183 -#, python-format -msgid "Arches %(version)s" -msgstr "" - -#: app/templates/index.htm:184 -msgid "A web and mobile platform for" -msgstr "" - -#: app/templates/index.htm:185 -msgid "managing your most important resource information" -msgstr "" - -#: app/templates/index.htm:193 -msgid "" -"Glarus thrust, Tectonic Area Sardona, Switzerland | Jonas Wagner https://www." -"flickr.com/photos/80225884@N06/ | Attribution 2.0 Generic (CC BY 2.0)" -msgstr "" - -#: app/templates/index.htm:216 -msgid "Deploy Applications Rapidly" -msgstr "" - -#: app/templates/index.htm:218 -msgid "" -"Design custom information management applications in hours. Build your " -"databases with Arches Designer, then configure your interface all without " -"having to write any code." -msgstr "" - -#: app/templates/index.htm:235 -msgid "Interface Manager" -msgstr "" - -#: app/templates/index.htm:237 -msgid "" -"Arches automatically creates data entry forms based on your data models. " -"Use Arches' Card Manager to configure the look and feel of your data entry " -"UI." -msgstr "" - -#: app/templates/index.htm:246 -msgid "Data Security" -msgstr "" - -#: app/templates/index.htm:248 -msgid "" -"Use Arches' Permissions Manager to set up data access rules for all your " -"user groups and individual accounts. You can define read/write/delete and " -"no-access permissions." -msgstr "" - -#: app/templates/index.htm:270 -msgid "Orchestrate your data entry" -msgstr "" - -#: app/templates/index.htm:272 -msgid "" -"Design step-wise data management interfaces that simplify complex editing " -"tasks. Ensure that everyone enters data completely and consistently" -msgstr "" - -#: app/templates/index.htm:295 -msgid "Arches Search Tools" -msgstr "" - -#: app/templates/index.htm:296 -msgid "Find what you're looking for" -msgstr "" - -#: app/templates/index.htm:298 -msgid "" -"Arches comes with powerful built-in search tools. Quickly filter large " -"databases with term, geospatial, and time-based search components" -msgstr "" - -#: app/templates/index.htm:311 -msgid "Search Options" -msgstr "" - -#: app/templates/index.htm:313 -msgid "" -"Arches gives you many ways to find precisely the information you need, even " -"if your Arches application contains 10's of millions of records. In " -"addition to term, thesaurus, geospatial, and temporal filters, Arches " -"provides you with advanced filtering options that support boolean logic, " -"inverses, and many other filtering options." -msgstr "" - -#: app/templates/index.htm:317 -msgid "" -"Arches' search capabilities also provide for sophisticated data " -"visualizations, including interactive displays of the connections between " -"your data objects using a Force Directed Graph." -msgstr "" - -#: app/templates/index.htm:321 -msgid "" -"If you're a software developer, you can build on Arches modular search " -"services and create your own filters, reports, and visualizations to best " -"show off your particular dataset." -msgstr "" - -#: app/templates/index.htm:343 -msgid "Sample Institution Name" -msgstr "" - -#: app/templates/index.htm:346 -msgid "Sample Address" -msgstr "" - -#: app/templates/index.htm:347 -msgid "Getty Conservation Institute" -msgstr "" - -#: app/templates/index.htm:348 -msgid "1200 Getty Center Drive" -msgstr "" - -#: app/templates/index.htm:349 -msgid "Los Angeles, CA 90049" -msgstr "" - -#: app/templates/index.htm:355 -msgid "Guides and Documentation" -msgstr "" - -#: app/templates/index.htm:363 -msgid "What is Arches" -msgstr "" - -#: app/templates/index.htm:366 -msgid "Implementation Considerations" -msgstr "" - -#: app/templates/index.htm:369 -msgid "Information For Developers" -msgstr "" - -#: app/templates/index.htm:379 -msgid "FAQ" -msgstr "" - -#: app/templates/index.htm:382 -msgid "Standards and Interoperability" -msgstr "" - -#: app/templates/index.htm:385 -msgid "Installation Guide" -msgstr "" - -#: app/templates/index.htm:393 -msgid "Arches Project Background" -msgstr "" - -#: app/templates/index.htm:396 -msgid "Arches Webinars/Presentations" -msgstr "" - -#: app/templates/index.htm:415 -msgid "Terms & Conditions" -msgstr "" - -#: app/templates/index.htm:416 -msgid "Privacy Policy" -msgstr "" - -#: app/templates/index.htm:419 -msgid "Powered by Arches" -msgstr "" - -#: app/templates/javascript.htm:114 -msgid "Delete All Resources Associated with this Graph?" -msgstr "" - -#: app/templates/javascript.htm:115 -msgid "" -"Deleting All Resources removes all associated data with this graph " -"entirely. Are you sure you would like to proceed?" -msgstr "" - -#: app/templates/javascript.htm:118 -msgid "Delete Branch/Resource Model?" -msgstr "" - -#: app/templates/javascript.htm:119 -msgid "" -"Deleting this branch/resource model will remove it (and all associated data) " -"entirely. Are you sure you would like to proceed?" -msgstr "" - -#: app/templates/javascript.htm:159 -msgid "Please contact your system administrator for more details." -msgstr "" - -#: app/templates/javascript.htm:160 -msgid "Hide Null Values" -msgstr "" - -#: app/templates/javascript.htm:161 app/templates/javascript.htm:509 -msgid "Load More" -msgstr "" - -#: app/templates/javascript.htm:162 -msgid "Load All" -msgstr "" - -#: app/templates/javascript.htm:163 -msgid "Display Name" -msgstr "" - -#: app/templates/javascript.htm:164 -msgid "Display Description" -msgstr "" - -#: app/templates/javascript.htm:165 -msgid "Map Popup" -msgstr "" - -#: app/templates/javascript.htm:166 -msgid "Map Popup Template" -msgstr "" - -#: app/templates/javascript.htm:167 -msgid "ID:" -msgstr "" - -#: app/templates/javascript.htm:168 -msgid "Add Buffer" -msgstr "" - -#: app/templates/javascript.htm:169 -msgid "Buffer Intersecting Feature" -msgstr "" - -#: app/templates/javascript.htm:170 -msgid "Add buffer to features" -msgstr "" - -#: app/templates/javascript.htm:171 -msgid "Add Buffer Feature" -msgstr "" - -#: app/templates/javascript.htm:172 -msgid "Select a feature to perform intersection" -msgstr "" - -#: app/templates/javascript.htm:173 -msgid "Intersect" -msgstr "" - -#: app/templates/javascript.htm:174 -msgid "Re-index" -msgstr "" - -#: app/templates/javascript.htm:175 -msgid "Re-indexing" -msgstr "" - -#: app/templates/javascript.htm:176 -msgid "Re-index Resources Now" -msgstr "" - -#: app/templates/javascript.htm:177 -msgid "" -"If you've made any changes to this function and there are resources already " -"in the system, then you will need to reindex the resources to reflect your " -"changes. This process can take some time (potentially several minuetes or " -"more). Please be patient." -msgstr "" - -#: app/templates/javascript.htm:178 -msgid "Use bracketed node names like this: " -msgstr "" - -#: app/templates/javascript.htm:179 -msgid "Primary Name Template" -msgstr "" - -#: app/templates/javascript.htm:180 -msgid "Primary Description Template" -msgstr "" - -#: app/templates/javascript.htm:181 -msgid "" -"Select a card from which to choose nodes to power your primary name " -"identifier." -msgstr "" - -#: app/templates/javascript.htm:182 -msgid "" -"Select a card from which to choose nodes to power your primary description " -"identifier." -msgstr "" - -#: app/templates/javascript.htm:183 -msgid "Add as new" -msgstr "" - -#: app/templates/javascript.htm:184 -msgid "Add Feature" -msgstr "" - -#: app/templates/javascript.htm:185 -msgid "Distance:" -msgstr "" - -#: app/templates/javascript.htm:186 -msgid "Units:" -msgstr "" - -#: app/templates/javascript.htm:187 -msgid "meters:" -msgstr "" - -#: app/templates/javascript.htm:188 -msgid "feet:" -msgstr "" - -#: app/templates/javascript.htm:189 -msgid "Download" -msgstr "" - -#: app/templates/javascript.htm:190 -msgid "Download File" -msgstr "" - -#: app/templates/javascript.htm:191 -msgid "Triggering Nodegroups" -msgstr "" - -#: app/templates/javascript.htm:192 app/templates/javascript.htm:540 -msgid "Select a Nodegroup" -msgstr "" - -#: app/templates/javascript.htm:193 -msgid "No Relationships Added" -msgstr "" - -#: app/templates/javascript.htm:194 -msgid "Relate Resource" -msgstr "" - -#: app/templates/javascript.htm:195 -msgid "Cannot Be Related" -msgstr "" - -#: app/templates/javascript.htm:196 app/templates/views/resource/editor.htm:92 -msgid "Related Resources" -msgstr "" - -#: app/templates/javascript.htm:197 -msgid "" -"Arches keeps track of how resources are related. Click the 'related " -"resources' link on a search result from the list on the left to see its " -"relatives displayed in an interactive graph" -msgstr "" - -#: app/templates/javascript.htm:198 -msgid "Report Date:" -msgstr "" - -#: app/templates/javascript.htm:200 -msgid "X Coordinate Placeholder" -msgstr "" - -#: app/templates/javascript.htm:201 -msgid "Y Coordinate Placeholder" -msgstr "" - -#: app/templates/javascript.htm:202 -msgid "Display as Greyscale" -msgstr "" - -#: app/templates/javascript.htm:203 -msgid "Annotation Overlays" -msgstr "" - -#: app/templates/javascript.htm:204 -msgid "Reset to defaults" -msgstr "" - -#: app/templates/javascript.htm:205 -msgid "Data Themes" -msgstr "" - -#: app/templates/javascript.htm:208 -msgid "Allow Normal Access" -msgstr "" - -#: app/templates/javascript.htm:209 -msgid "Person/Group" -msgstr "" - -#: app/templates/javascript.htm:210 -msgid "Set Permissions for this instance" -msgstr "" - -#: app/templates/javascript.htm:211 -msgid "" -"By default only you have access to this record. You can set permissions for " -"specific people or groups by selecting to whom you will grant access" -msgstr "" - -#: app/templates/javascript.htm:212 -msgid "" -"Define access privileges for this instance. You may limit access to " -"yourself, or select which user accounts and groups have permission to this " -"resource." -msgstr "" - -#: app/templates/javascript.htm:213 -msgid "Configure Access to this Instance" -msgstr "" - -#: app/templates/javascript.htm:214 -msgid "Resource Instance Permissions" -msgstr "" - -#: app/templates/javascript.htm:215 -msgid "Unsorted" -msgstr "" - -#: app/templates/javascript.htm:216 -msgid "Ascending" -msgstr "" - -#: app/templates/javascript.htm:217 -msgid "Descending" -msgstr "" - -#: app/templates/javascript.htm:218 -msgid "Fuzzy Year Padding" -msgstr "" - -#: app/templates/javascript.htm:219 -msgid "Fuzzy Month Padding" -msgstr "" - -#: app/templates/javascript.htm:220 -msgid "Fuzzy Day Padding" -msgstr "" - -#: app/templates/javascript.htm:221 -msgid "Fuzzy Season Padding (weeks)" -msgstr "" - -#: app/templates/javascript.htm:222 -msgid "Multiplier if Date is Uncertain (?)" -msgstr "" - -#: app/templates/javascript.htm:223 -msgid "Multiplier if Date is Approximate (~)" -msgstr "" - -#: app/templates/javascript.htm:224 -msgid "Multiplier if Both (? and ~)" -msgstr "" - -#: app/templates/javascript.htm:225 -msgid "Maximum Number of Files" -msgstr "" - -#: app/templates/javascript.htm:226 -msgid "Related Node" -msgstr "" - -#: app/templates/javascript.htm:227 -msgid "Relationship to Node" -msgstr "" - -#: app/templates/javascript.htm:229 -msgid "Continue" -msgstr "" - -#: app/templates/javascript.htm:230 -#: app/templates/views/components/datatypes/number.htm:27 -msgid "Value" -msgstr "" - -#: app/templates/javascript.htm:231 -msgid "Disabled" -msgstr "" - -#: app/templates/javascript.htm:232 app/templates/javascript.htm:269 -msgid "Disable Editing" -msgstr "" - -#: app/templates/javascript.htm:233 app/templates/javascript.htm:270 -msgid "Prevent users from editing value" -msgstr "" - -#: app/templates/javascript.htm:234 -msgid "Domain options" -msgstr "" - -#: app/templates/javascript.htm:235 -msgid "Add new option" -msgstr "" - -#: app/templates/javascript.htm:237 -msgid "Add GNU" -msgstr "" - -#: app/templates/javascript.htm:238 app/templates/javascript.htm:543 -msgid "Showing edits by" -msgstr "" - -#: app/templates/javascript.htm:239 app/templates/javascript.htm:541 -msgid "Return to approved edits" -msgstr "" - -#: app/templates/javascript.htm:240 app/templates/javascript.htm:545 -msgid "This is a new contribution by a provisional editor." -msgstr "" - -#: app/templates/javascript.htm:241 app/templates/javascript.htm:544 -msgid "Currently showing the most recent approved edits" -msgstr "" - -#: app/templates/javascript.htm:242 -#: app/templates/views/resource/editor/provisional-tile-manager.htm:8 -msgid "Provisional Edits" -msgstr "" - -#: app/templates/javascript.htm:243 -msgid "QA Type" -msgstr "" - -#: app/templates/javascript.htm:244 -msgid "All Resources" -msgstr "" - -#: app/templates/javascript.htm:245 -msgid "All Edits" -msgstr "" - -#: app/templates/javascript.htm:246 -msgid "Delete all edits" -msgstr "" - -#: app/templates/javascript.htm:247 -msgid "Delete this record" -msgstr "" - -#: app/templates/javascript.htm:248 -msgid "Cancel edit" -msgstr "" - -#: app/templates/javascript.htm:249 -msgid "Save edit" -msgstr "" - -#: app/templates/javascript.htm:250 -msgid "Sorry, you do not have access to this information" -msgstr "" - -#: app/templates/javascript.htm:251 -msgid "No data added yet for" -msgstr "" - -#: app/templates/javascript.htm:252 -msgid "These data are provisional and pending review" -msgstr "" - -#: app/templates/javascript.htm:253 -msgid "Label 'True'" -msgstr "" - -#: app/templates/javascript.htm:254 -msgid "Label 'False'" -msgstr "" - -#: app/templates/javascript.htm:255 -msgid "Select an Option" -msgstr "" - -#: app/templates/javascript.htm:256 -msgid "Concept Collection" -msgstr "" - -#: app/templates/javascript.htm:257 -msgid "Select a concept collection" -msgstr "" - -#: app/templates/javascript.htm:258 -msgid "Select a Node" -msgstr "" - -#: app/templates/javascript.htm:259 -msgid "Select a Property" -msgstr "" - -#: app/templates/javascript.htm:260 -msgid "No Date Entered" -msgstr "" - -#: app/templates/javascript.htm:261 -msgid "Use date of data entry" -msgstr "" - -#: app/templates/javascript.htm:262 -msgid "Check this to use the date of data entry as the default value." -msgstr "" - -#: app/templates/javascript.htm:263 -msgid "Date" -msgstr "" - -#: app/templates/javascript.htm:264 -msgid "rich text" -msgstr "" - -#: app/templates/javascript.htm:265 -msgid "Direction" -msgstr "" - -#: app/templates/javascript.htm:266 -msgid "Left-to-Right" -msgstr "" - -#: app/templates/javascript.htm:267 -msgid "Right-to-Left" -msgstr "" - -#: app/templates/javascript.htm:268 -msgid "Max Length" -msgstr "" - -#: app/templates/javascript.htm:271 -#: app/templates/views/rdm/modals/add-child-form.htm:25 -#: app/templates/views/rdm/modals/add-collection-form.htm:19 -#: app/templates/views/rdm/modals/add-scheme-form.htm:25 -#: app/templates/views/rdm/modals/value-form.htm:45 -#: app/templates/views/rdm/modals/value-form.htm:46 -#: app/templates/views/rdm/modals/value-form.htm:124 -#: app/templates/views/rdm/modals/value-form.htm:202 -#: app/templates/views/rdm/modals/value-form.htm:203 -msgid "Language" -msgstr "" - -#: app/templates/javascript.htm:272 -msgid "Languages" -msgstr "" - -#: app/templates/javascript.htm:273 -#: app/templates/views/rdm/modals/value-form.htm:34 -#: app/templates/views/rdm/modals/value-form.htm:113 -#: app/templates/views/rdm/modals/value-form.htm:191 -msgid "Type" -msgstr "" - -#: app/templates/javascript.htm:274 -msgid "not a valid EDTF format" -msgstr "" - -#: app/templates/javascript.htm:275 -msgid "Year-month approximate" -msgstr "" - -#: app/templates/javascript.htm:276 -msgid "Entire date (year-month-day) uncertain and approximate" -msgstr "" - -#: app/templates/javascript.htm:277 -msgid "Year uncertain (possibly the year 1984, but not definitely)" -msgstr "" - -#: app/templates/javascript.htm:278 -msgid "" -"Spring, 2001. The values 21, 22, 23, 24 may be used used to signify ' " -"Spring', 'Summer', 'Autumn', 'Winter', respectively, in place of a month " -"value (01 through 12) for a year-and-month format string" -msgstr "" - -#: app/templates/javascript.htm:279 -msgid "" -"The year -100000. 'Y' may be used at the beginning of the date string to " -"signify that the date is a year, when (and only when) the year exceeds four " -"digits, i.e. for years later than 9999 or earlier than -9999." -msgstr "" - -#: app/templates/javascript.htm:280 -msgid "" -"A time interval with calendar year precision, beginning sometime in 1964 and " -"ending sometime in 2008" -msgstr "" - -#: app/templates/javascript.htm:281 -msgid "" -"A time interval with calendar month precision, beginning sometime in June " -"2004 and ending sometime in August of 2006" -msgstr "" - -#: app/templates/javascript.htm:282 -msgid "" -"A time interval beginning sometime on February 1, 2004 and ending sometime " -"in 2005. The start endpoint has calendar day precision and the end endpoint " -"has calendar year precision" -msgstr "" - -#: app/templates/javascript.htm:283 -msgid "[year][“-”][month][“-”][day]" -msgstr "" - -#: app/templates/javascript.htm:284 -msgid "Refers to the calendar date 2021 April 12th with day precision" -msgstr "" - -#: app/templates/javascript.htm:285 -msgid "[year][“-”][month]" -msgstr "" - -#: app/templates/javascript.htm:286 -msgid "Refers to the calendar month April 2021 with month precision" -msgstr "" - -#: app/templates/javascript.htm:287 -msgid " [year]" -msgstr "" - -#: app/templates/javascript.htm:288 -msgid "Refers to the year 2021 with year precision" -msgstr "" - -#: app/templates/javascript.htm:289 -msgid "Some common encodings:" -msgstr "" - -#: app/templates/javascript.htm:290 -msgid "EDTF Date Specfication (Library of Congress)" -msgstr "" - -#: app/templates/javascript.htm:291 -msgid "" -"The EDTF datatype allows you to describe dates (even uncertain dates). You " -"can find a summary of the standard here:" -msgstr "" - -#: app/templates/javascript.htm:292 -msgid "Extended Date/Time Formats (EDTF)" -msgstr "" - -#: app/templates/javascript.htm:293 -msgid "EDTF Formats" -msgstr "" - -#: app/templates/javascript.htm:294 -msgid "Loading Time Wheel" -msgstr "" - -#: app/templates/javascript.htm:295 -msgid "Time Wheel" -msgstr "" - -#: app/templates/javascript.htm:296 -msgid "" -"Click on a block to set a filter, double-click to zoom in, double-click " -"center to zoom out" -msgstr "" - -#: app/templates/javascript.htm:297 -msgid "Last 7 Days" -msgstr "" - -#: app/templates/javascript.htm:298 -msgid "Last 30 Days" -msgstr "" - -#: app/templates/javascript.htm:299 -#: app/templates/views/provisional-history-list.htm:19 -msgid "This week" -msgstr "" - -#: app/templates/javascript.htm:300 -#: app/templates/views/provisional-history-list.htm:20 -msgid "This month" -msgstr "" - -#: app/templates/javascript.htm:301 -#: app/templates/views/provisional-history-list.htm:21 -msgid "This quarter" -msgstr "" - -#: app/templates/javascript.htm:302 -#: app/templates/views/provisional-history-list.htm:22 -msgid "This year" -msgstr "" - -#: app/templates/javascript.htm:303 -#: app/templates/views/provisional-history-list.htm:16 -msgid "Today" -msgstr "" - -#: app/templates/javascript.htm:304 -#: app/templates/views/provisional-history-list.htm:15 -msgid "Custom date range" -msgstr "" - -#: app/templates/javascript.htm:305 -msgid "Search all dates" -msgstr "" - -#: app/templates/javascript.htm:306 -msgid "Date Type" -msgstr "" - -#: app/templates/javascript.htm:307 -msgid "Date Interval" -msgstr "" - -#: app/templates/javascript.htm:308 -msgid "Minimum Date" -msgstr "" - -#: app/templates/javascript.htm:309 -msgid "Maximum Date" -msgstr "" - -#: app/templates/javascript.htm:310 -msgid "Date Format" -msgstr "" - -#: app/templates/javascript.htm:311 -msgid "Has no value" -msgstr "" - -#: app/templates/javascript.htm:312 -msgid "Has any value" -msgstr "" - -#: app/templates/javascript.htm:314 -msgid "Format" -msgstr "" - -#: app/templates/javascript.htm:315 -msgid "view valid formats" -msgstr "" - -#: app/templates/javascript.htm:316 -msgid "Max" -msgstr "" - -#: app/templates/javascript.htm:317 -msgid "Min" -msgstr "" - -#: app/templates/javascript.htm:318 -msgid "Increment" -msgstr "" - -#: app/templates/javascript.htm:319 -msgid "Increment Size" -msgstr "" - -#: app/templates/javascript.htm:320 -msgid "Decimal Places" -msgstr "" - -#: app/templates/javascript.htm:321 -msgid "Number of decimal places" -msgstr "" - -#: app/templates/javascript.htm:322 -msgid "Prefix" -msgstr "" - -#: app/templates/javascript.htm:323 -msgid "Field Prefix" -msgstr "" - -#: app/templates/javascript.htm:324 -msgid "suffix" -msgstr "" - -#: app/templates/javascript.htm:325 -msgid "Field Suffix" -msgstr "" - -#: app/templates/javascript.htm:326 -msgid "From" -msgstr "" - -#: app/templates/javascript.htm:327 -msgid "To" -msgstr "" - -#: app/templates/javascript.htm:328 -msgid "Select" -msgstr "" - -#: app/templates/javascript.htm:329 -msgid "Within" -msgstr "" - -#: app/templates/javascript.htm:330 -msgid "overlaps" -msgstr "" - -#: app/templates/javascript.htm:331 -msgid "equals" -msgstr "" - -#: app/templates/javascript.htm:332 -msgid "is not" -msgstr "" - -#: app/templates/javascript.htm:333 -msgid "not" -msgstr "" - -#: app/templates/javascript.htm:334 -msgid "like" -msgstr "" - -#: app/templates/javascript.htm:335 -msgid "not like" -msgstr "" - -#: app/templates/javascript.htm:336 -msgid "and" -msgstr "" - -#: app/templates/javascript.htm:337 -msgid "or" -msgstr "" - -#: app/templates/javascript.htm:338 -msgid "of" -msgstr "" - -#: app/templates/javascript.htm:341 -#: app/templates/views/user-profile-manager.htm:111 -msgid "None" -msgstr "" - -#: app/templates/javascript.htm:342 app/templates/views/graph.htm:71 -#: app/templates/views/graph/card-configuration/card-form-preview.htm:83 -msgid "Add" -msgstr "" - -#: app/templates/javascript.htm:343 -msgid "Remove" -msgstr "" - -#: app/templates/javascript.htm:344 app/templates/views/graph.htm:41 -#: app/templates/views/graph/function-manager.htm:81 -#: app/templates/views/resource.htm:41 -msgid "Find" -msgstr "" - -#: app/templates/javascript.htm:345 -msgid "Filter" -msgstr "" - -#: app/templates/javascript.htm:346 app/templates/views/list.htm:20 -msgid "Clear" -msgstr "" - -#: app/templates/javascript.htm:347 -msgid "Clear Filter" -msgstr "" - -#: app/templates/javascript.htm:348 -msgid "Buffer" -msgstr "" - -#: app/templates/javascript.htm:349 -msgid "Distance" -msgstr "" - -#: app/templates/javascript.htm:350 -#: app/templates/views/resource/editor.htm:235 -msgid "New" -msgstr "" - -#: app/templates/javascript.htm:351 -#: app/templates/views/resource/editor.htm:262 -msgid "Add New" -msgstr "" - -#: app/templates/javascript.htm:352 -msgid "Return" -msgstr "" - -#: app/templates/javascript.htm:353 -msgid "csv" -msgstr "" - -#: app/templates/javascript.htm:354 -msgid "html" -msgstr "" - -#: app/templates/javascript.htm:355 -msgid "shapefile" -msgstr "" - -#: app/templates/javascript.htm:356 -msgid "geojson url" -msgstr "" - -#: app/templates/javascript.htm:357 -msgid "tile excel" -msgstr "" - -#: app/templates/javascript.htm:358 -msgid "Copy to clipboard" -msgstr "" - -#: app/templates/javascript.htm:359 -msgid "Info" -msgstr "" - -#: app/templates/javascript.htm:360 -msgid "Arches Export" -msgstr "" - -#: app/templates/javascript.htm:361 -msgid "Include the report link in the export?" -msgstr "" - -#: app/templates/javascript.htm:362 -msgid "1. Format" -msgstr "" - -#: app/templates/javascript.htm:363 -msgid "" -"Select the format you'd like for your export data. (tile excel and geojson " -"formats require a resource type filter)" -msgstr "" - -#: app/templates/javascript.htm:364 -msgid "2. Coordinate Precision" -msgstr "" - -#: app/templates/javascript.htm:365 -msgid "" -"Tell us how many decimal places of precision you'd like for geo-data results" -msgstr "" - -#: app/templates/javascript.htm:366 -msgid "3. Report Link" -msgstr "" - -#: app/templates/javascript.htm:367 -msgid "Only applicable to CSV and shapefile exports" -msgstr "" - -#: app/templates/javascript.htm:368 -msgid "4. Name this export" -msgstr "" - -#: app/templates/javascript.htm:369 -msgid "5. Email Address" -msgstr "" - -#: app/templates/javascript.htm:370 -msgid "" -"This download may take some time. Tell us where to email a download link to " -"your results" -msgstr "" - -#: app/templates/javascript.htm:371 -msgid "Export Search Results" -msgstr "" - -#: app/templates/javascript.htm:372 -msgid "Advanced Search" -msgstr "" - -#: app/templates/javascript.htm:373 -msgid "" -"With Advanced Search you can build more sophisticated search queries. Select " -"the search facets you wish to query from the list on the right. Then enter " -"your criteria to customize your search filters" -msgstr "" - -#: app/templates/javascript.htm:374 -msgid "Map Search" -msgstr "" - -#: app/templates/javascript.htm:375 -msgid "Accept GeoJSON" -msgstr "" - -#: app/templates/javascript.htm:376 -msgid "GeoJSON has the following errors that must be resolved:" -msgstr "" - -#: app/templates/javascript.htm:377 -msgid "Edit GeoJSON" -msgstr "" - -#: app/templates/javascript.htm:378 -msgid "Edit Coordinates" -msgstr "" - -#: app/templates/javascript.htm:379 -msgid "Show Feature" -msgstr "" - -#: app/templates/javascript.htm:380 -msgid "Coordinate Reference:" -msgstr "" - -#: app/templates/javascript.htm:381 -msgid "Zoom to all" -msgstr "" - -#: app/templates/javascript.htm:382 -msgid "Zoom to all features" -msgstr "" - -#: app/templates/javascript.htm:383 -msgid "No Email saved for User" -msgstr "" - -#: app/templates/javascript.htm:384 -msgid "Drag GeoJSON or KML files here to add" -msgstr "" - -#: app/templates/javascript.htm:385 -msgid "The following errors occurred:" -msgstr "" - -#: app/templates/javascript.htm:387 -msgid "Enter Search String here" -msgstr "" - -#: app/templates/javascript.htm:388 -msgid "View search string" -msgstr "" - -#: app/templates/javascript.htm:389 -msgid "Search String - use to filter resources displayed" -msgstr "" - -#: app/templates/javascript.htm:390 -msgid "Saved Search" -msgstr "" - -#: app/templates/javascript.htm:391 -msgid "The Arches site administrator hasn't saved any searches yet." -msgstr "" - -#: app/templates/javascript.htm:392 -msgid "searching" -msgstr "" - -#: app/templates/javascript.htm:393 -msgid "Search Facets" -msgstr "" - -#: app/templates/javascript.htm:394 -msgid "Analyze" -msgstr "" - -#: app/templates/javascript.htm:396 app/templates/javascript.htm:521 -msgid "Legend" -msgstr "" - -#: app/templates/javascript.htm:397 -msgid "close" -msgstr "" - -#: app/templates/javascript.htm:398 -#: app/templates/views/resource/edit-log.htm:93 -#: app/templates/views/resource/edit-log.htm:96 -#: app/templates/views/user-profile-manager.htm:91 -msgid "Edit" -msgstr "" - -#: app/templates/javascript.htm:400 -msgid "Details" -msgstr "" - -#: app/templates/javascript.htm:401 -msgid "Report" -msgstr "" - -#: app/templates/javascript.htm:402 -#: app/templates/views/graph/graph-base.htm:48 -#: app/templates/views/rdm/modals/add-image-form.htm:21 -msgid "Done" -msgstr "" - -#: app/templates/javascript.htm:403 -msgid "Apply" -msgstr "" - -#: app/templates/javascript.htm:405 -msgid "Panels" -msgstr "" - -#: app/templates/javascript.htm:406 -msgid "Single Panel" -msgstr "" - -#: app/templates/javascript.htm:407 -msgid "Double Panel" -msgstr "" - -#: app/templates/javascript.htm:408 -msgid "Panel 1" -msgstr "" - -#: app/templates/javascript.htm:409 -msgid "Panel 2" -msgstr "" - -#: app/templates/javascript.htm:410 -msgid "Panel Layout" -msgstr "" - -#: app/templates/javascript.htm:411 -msgid "Selected Panel Layout" -msgstr "" - -#: app/templates/javascript.htm:412 -msgid "Annotation(s)" -msgstr "" - -#: app/templates/javascript.htm:413 -msgid "Brightness" -msgstr "" - -#: app/templates/javascript.htm:414 -msgid "Contrast" -msgstr "" - -#: app/templates/javascript.htm:415 -msgid "Saturation" -msgstr "" - -#: app/templates/javascript.htm:416 -msgid "Greyscale" -msgstr "" - -#: app/templates/javascript.htm:417 app/templates/javascript.htm:420 -msgid "Default Color" -msgstr "" - -#: app/templates/javascript.htm:418 -msgid "Selected Feature Color" -msgstr "" - -#: app/templates/javascript.htm:419 -msgid "Hovered Feature Color" -msgstr "" - -#: app/templates/javascript.htm:421 -msgid "Layer Color Palette" -msgstr "" - -#: app/templates/javascript.htm:422 -msgid "Fill Opacity" -msgstr "" - -#: app/templates/javascript.htm:423 -msgid "Fill Color" -msgstr "" - -#: app/templates/javascript.htm:424 -msgid "Overview Zoom" -msgstr "" - -#: app/templates/javascript.htm:425 -msgid "Min Zoom" -msgstr "" - -#: app/templates/javascript.htm:426 -msgid "Point Radius" -msgstr "" - -#: app/templates/javascript.htm:427 -msgid "Line Opacity" -msgstr "" - -#: app/templates/javascript.htm:428 -msgid "Line Width" -msgstr "" - -#: app/templates/javascript.htm:429 -msgid "Line Color" -msgstr "" - -#: app/templates/javascript.htm:430 -msgid "Stroke Color" -msgstr "" - -#: app/templates/javascript.htm:431 -msgid "Stroke Width" -msgstr "" - -#: app/templates/javascript.htm:432 -msgid "Point Stroke Width" -msgstr "" - -#: app/templates/javascript.htm:433 -msgid "Point Stroke Opacity" -msgstr "" - -#: app/templates/javascript.htm:434 -msgid "Show Style Tools" -msgstr "" - -#: app/templates/javascript.htm:435 -msgid "Hide Style Tools" -msgstr "" - -#: app/templates/javascript.htm:436 -msgid "dismiss" -msgstr "" - -#: app/templates/javascript.htm:437 -msgid "Preview" -msgstr "" - -#: app/templates/javascript.htm:438 -#: app/templates/views/map-layer-manager.htm:72 -msgid "Basemap" -msgstr "" - -#: app/templates/javascript.htm:441 -msgid "Participating Layers" -msgstr "" - -#: app/templates/javascript.htm:442 -msgid "Add a new feature" -msgstr "" - -#: app/templates/javascript.htm:443 -msgid "files uploaded" -msgstr "" - -#: app/templates/javascript.htm:444 -msgid "Max File Size (mb)" -msgstr "" - -#: app/templates/javascript.htm:445 -msgid "example: .jpg, .png, .txt" -msgstr "" - -#: app/templates/javascript.htm:446 -msgid "" -"Images formatted as .jpg, .png, .tiff files may be uploaded. Other formats " -"will be ignored" -msgstr "" - -#: app/templates/javascript.htm:447 -msgid "Accepted formats: .jpg, .png, .tiff" -msgstr "" - -#: app/templates/javascript.htm:448 -msgid "Accepted File Types" -msgstr "" - -#: app/templates/javascript.htm:449 -msgid "Show all files" -msgstr "" - -#: app/templates/javascript.htm:450 -msgid "Show first 5 files" -msgstr "" - -#: app/templates/javascript.htm:451 -msgid "Show first 10 files" -msgstr "" - -#: app/templates/javascript.htm:452 -msgid "Show first 25 files" -msgstr "" - -#: app/templates/javascript.htm:453 -msgid "error" -msgstr "" - -#: app/templates/javascript.htm:454 -msgid "Unsaved" -msgstr "" - -#: app/templates/javascript.htm:455 -msgid "delete all files" -msgstr "" - -#: app/templates/javascript.htm:456 -msgid "add more files" -msgstr "" - -#: app/templates/javascript.htm:457 -msgid "file(s) uploaded" -msgstr "" - -#: app/templates/javascript.htm:458 -msgid "find a file" -msgstr "" - -#: app/templates/javascript.htm:459 -msgid "Uploaded Files" -msgstr "" - -#: app/templates/javascript.htm:460 -msgid "Allowed document formats:" -msgstr "" - -#: app/templates/javascript.htm:461 -msgid "" -"You may upload as many documents as you wish, but the maximum size of any " -"single file is" -msgstr "" - -#: app/templates/javascript.htm:462 -msgid "" -"You may upload as many photos as you wish, but the maximum size of any " -"single file is 8MB." -msgstr "" - -#: app/templates/javascript.htm:463 -msgid "Adding documents to this record is optional." -msgstr "" - -#: app/templates/javascript.htm:464 -msgid "Adding photos to this record is optional." -msgstr "" - -#: app/templates/javascript.htm:465 -msgid "Select Files" -msgstr "" - -#: app/templates/javascript.htm:466 -msgid "Select Photographs" -msgstr "" - -#: app/templates/javascript.htm:467 -msgid "Drag & Drop your files onto this panel" -msgstr "" - -#: app/templates/javascript.htm:468 -msgid "Drag & Drop your photos onto this panel" -msgstr "" - -#: app/templates/javascript.htm:469 -msgid "Upload Photographs" -msgstr "" - -#: app/templates/javascript.htm:470 -msgid "Upload Documents" -msgstr "" - -#: app/templates/javascript.htm:471 -msgid "Show Gallery" -msgstr "" - -#: app/templates/javascript.htm:472 -msgid "Hide Gallery" -msgstr "" - -#: app/templates/javascript.htm:473 -msgid "Select default value" -msgstr "" - -#: app/templates/javascript.htm:474 -msgid "Select a filter" -msgstr "" - -#: app/templates/javascript.htm:475 -msgid "Default Manifest URL" -msgstr "" - -#: app/templates/javascript.htm:476 -msgid "Enter Manifest URL" -msgstr "" - -#: app/templates/javascript.htm:477 -msgid "Select a manifest" -msgstr "" - -#: app/templates/javascript.htm:478 app/templates/javascript.htm:669 -msgid "No manifest selected" -msgstr "" - -#: app/templates/javascript.htm:479 -msgid "Load manifest" -msgstr "" - -#: app/templates/javascript.htm:480 -msgid "Loading manifest" -msgstr "" - -#: app/templates/javascript.htm:481 -msgid "Error loading manifest" -msgstr "" - -#: app/templates/javascript.htm:483 -msgid "Filter images" -msgstr "" - -#: app/templates/javascript.htm:484 -msgid "Draw a" -msgstr "" - -#: app/templates/javascript.htm:485 -msgid "View Gallery" -msgstr "" - -#: app/templates/javascript.htm:486 -msgid "Image" -msgstr "" - -#: app/templates/javascript.htm:487 -msgid "Image List" -msgstr "" - -#: app/templates/javascript.htm:488 -msgid "Image Tools" -msgstr "" - -#: app/templates/javascript.htm:489 app/templates/javascript.htm:667 -msgid "Switch Image Service" -msgstr "" - -#: app/templates/javascript.htm:490 -msgid "Resource Instance Name" -msgstr "" - -#: app/templates/javascript.htm:491 app/templates/javascript.htm:620 -msgid "Related Resource Summary" -msgstr "" - -#: app/templates/javascript.htm:492 app/templates/views/graph-designer.htm:34 -msgid "Resource Model" -msgstr "" - -#: app/templates/javascript.htm:493 app/templates/views/edit-history.htm:18 -msgid "Resource Type" -msgstr "" - -#: app/templates/javascript.htm:494 -msgid "Resource Details" -msgstr "" - -#: app/templates/javascript.htm:495 -msgid "" -"Click the 'Details' link on a search result from the list on the left to " -"view more information about a resource." -msgstr "" - -#: app/templates/javascript.htm:496 -msgid "Resource Information" -msgstr "" - -#: app/templates/javascript.htm:497 -msgid "Has Relationship" -msgstr "" - -#: app/templates/javascript.htm:498 -msgid "Resource's relationship to" -msgstr "" - -#: app/templates/javascript.htm:499 -msgid "Related to" -msgstr "" - -#: app/templates/javascript.htm:500 -msgid "'s relationship to Resource" -msgstr "" - -#: app/templates/javascript.htm:501 -msgid "Relationships" -msgstr "" - -#: app/templates/javascript.htm:502 -msgid "relationships shown" -msgstr "" - -#: app/templates/javascript.htm:503 -msgid "Search Network" -msgstr "" - -#: app/templates/javascript.htm:504 -msgid "Analyze Network" -msgstr "" - -#: app/templates/javascript.htm:505 -msgid "Click a node/edge for info" -msgstr "" - -#: app/templates/javascript.htm:506 -msgid "Click a node to show more relationships" -msgstr "" - -#: app/templates/javascript.htm:507 -msgid "Click a node refocus" -msgstr "" - -#: app/templates/javascript.htm:508 -msgid "Click a node/edge to remove" -msgstr "" - -#: app/templates/javascript.htm:510 -msgid "Workflow Complete" -msgstr "" - -#: app/templates/javascript.htm:511 -msgid "with" -msgstr "" - -#: app/templates/javascript.htm:512 -msgid "Link Text (Optional)" -msgstr "" - -#: app/templates/javascript.htm:513 -msgid "URL for link" -msgstr "" - -#: app/templates/javascript.htm:514 -msgid "URL Link Color" -msgstr "" - -#: app/templates/javascript.htm:515 -msgid "URL Placeholder" -msgstr "" - -#: app/templates/javascript.htm:516 -msgid "URL Label Placeholder" -msgstr "" - -#: app/templates/javascript.htm:517 -msgid "Default relationship to" -msgstr "" - -#: app/templates/javascript.htm:518 -msgid "Default inverse relationship to" -msgstr "" - -#: app/templates/javascript.htm:519 -msgid "References" -msgstr "" - -#: app/templates/javascript.htm:520 -msgid "Does not reference" -msgstr "" - -#: app/templates/javascript.htm:522 -msgid "" -"Check to limit the dropdown to only this widget's node rather than all nodes " -"in the tile." -msgstr "" - -#: app/templates/javascript.htm:523 -msgid "Show only the value of the selected node in the dropdown options" -msgstr "" - -#: app/templates/javascript.htm:524 -msgid "Dropdown Format" -msgstr "" - -#: app/templates/javascript.htm:525 -msgid "Provisional" -msgstr "" - -#: app/templates/javascript.htm:526 -msgid "Card Name" -msgstr "" - -#: app/templates/javascript.htm:527 -msgid "Add Tab" -msgstr "" - -#: app/templates/javascript.htm:528 -msgid "Tab Name" -msgstr "" - -#: app/templates/javascript.htm:529 -msgid "Find a resource..." -msgstr "" - -#: app/templates/javascript.htm:530 -msgid "Find an icon" -msgstr "" - -#: app/templates/javascript.htm:531 -msgid "Select Tab icon" -msgstr "" - -#: app/templates/javascript.htm:532 -msgid "Select cards in this tab" -msgstr "" - -#: app/templates/javascript.htm:533 -msgid "Enter manifest URL" -msgstr "" - -#: app/templates/javascript.htm:534 -msgid "Default Image Service URL" -msgstr "" - -#: app/templates/javascript.htm:536 -msgid "Select image nodes to include" -msgstr "" - -#: app/templates/javascript.htm:537 -msgid "Select an Ontology Property" -msgstr "" - -#: app/templates/javascript.htm:538 -msgid "Select a resource" -msgstr "" - -#: app/templates/javascript.htm:539 -msgid "Select a resource model" -msgstr "" - -#: app/templates/javascript.htm:542 -msgid "Choose a sibling card" -msgstr "" - -#: app/templates/javascript.htm:546 -msgid "This resource has provisional edits that are pending review" -msgstr "" - -#: app/templates/javascript.htm:547 -msgid "" -"This resource has provisional edits (not displayed in this report) that are " -"pending review" -msgstr "" - -#: app/templates/javascript.htm:548 -msgid "Find an address" -msgstr "" - -#: app/templates/javascript.htm:549 -msgid "Select drawings text (optional)" -msgstr "" - -#: app/templates/javascript.htm:550 -msgid "Select drawings map source (optional)" -msgstr "" - -#: app/templates/javascript.htm:551 -msgid "Select drawings map source layer (optional)" -msgstr "" - -#: app/templates/javascript.htm:552 -msgid "Map Center Longitude" -msgstr "" - -#: app/templates/javascript.htm:553 -msgid "Map Center Latitude" -msgstr "" - -#: app/templates/javascript.htm:554 -msgid "Longitude (x coordinate)" -msgstr "" - -#: app/templates/javascript.htm:555 -msgid "Latitude (y coordinate)" -msgstr "" - -#: app/templates/javascript.htm:556 -msgid "Available Geometry Types" -msgstr "" - -#: app/templates/javascript.htm:557 -msgid "Zoom Level" -msgstr "" - -#: app/templates/javascript.htm:558 -msgid "Default Zoom" -msgstr "" - -#: app/templates/javascript.htm:559 -msgid "Update Features" -msgstr "" - -#: app/templates/javascript.htm:560 -msgid "feature(s)" -msgstr "" - -#: app/templates/javascript.htm:561 -msgid "Point" -msgstr "" - -#: app/templates/javascript.htm:562 -msgid "Line" -msgstr "" - -#: app/templates/javascript.htm:563 -msgid "Polygon" -msgstr "" - -#: app/templates/javascript.htm:564 -msgid "Add point" -msgstr "" - -#: app/templates/javascript.htm:565 -msgid "Add line" -msgstr "" - -#: app/templates/javascript.htm:566 -msgid "Add polygon" -msgstr "" - -#: app/templates/javascript.htm:567 -msgid "Select drawing" -msgstr "" - -#: app/templates/javascript.htm:568 -msgid "Related instance map sources" -msgstr "" - -#: app/templates/javascript.htm:569 -msgid "Related instance map source layers (optional)" -msgstr "" - -#: app/templates/javascript.htm:570 -msgid "Intersection layer configuration" -msgstr "" - -#: app/templates/javascript.htm:571 -#, python-brace-format -msgid "Create a new ${graphName}" -msgstr "" - -#: app/templates/javascript.htm:572 -msgid "Add new Relationship" -msgstr "" - -#: app/templates/javascript.htm:573 -msgid "Network response was not ok" -msgstr "" - -#: app/templates/javascript.htm:575 -msgid "Term Matches" -msgstr "" - -#: app/templates/javascript.htm:576 -#, python-brace-format -msgid "${total} date values" -msgstr "" - -#: app/templates/javascript.htm:577 -msgid "Select Widgets" -msgstr "" - -#: app/templates/javascript.htm:578 -msgid "(This card data will define the resource description.)" -msgstr "" - -#: app/templates/javascript.htm:579 -msgid "(This card data will define the resource name.)" -msgstr "" - -#: app/templates/javascript.htm:580 -msgid "Settings Conflict: Remove this card from grouped card?" -msgstr "" - -#: app/templates/javascript.htm:581 -#, python-brace-format -msgid "" -"The cardinality of this card cannot be changed until you remove it from " -"being grouped with the ${cardName} card. Do you want to remove this card " -"from being grouped with the ${cardName} card" -msgstr "" - -#: app/templates/javascript.htm:582 -msgid "!! Referenced model does not exist -- Delete and select a new model !!" -msgstr "" - -#: app/templates/javascript.htm:583 -#: app/templates/views/map-layer-manager.htm:132 -msgid "Layer Preview" -msgstr "" - -#: app/templates/javascript.htm:584 -msgid "Layer Icon" -msgstr "" - -#: app/templates/javascript.htm:585 app/templates/views/graph-designer.htm:127 -#: app/templates/views/graph-designer.htm:136 -#: app/templates/views/graph/function-manager.htm:29 -#: app/templates/views/map-layer-manager.htm:123 -msgid "Save Edits" -msgstr "" - -#: app/templates/javascript.htm:586 app/templates/views/graph-designer.htm:125 -#: app/templates/views/graph-designer.htm:134 -#: app/templates/views/graph/function-manager.htm:28 -#: app/templates/views/map-layer-manager.htm:124 -msgid "Discard Edits" -msgstr "" - -#: app/templates/javascript.htm:587 -msgid "Activated" -msgstr "" - -#: app/templates/javascript.htm:591 -msgid "Layer Name" -msgstr "" - -#: app/templates/javascript.htm:592 -msgid "Add to search map by default:" -msgstr "" - -#: app/templates/javascript.htm:593 -msgid "Legend content" -msgstr "" - -#: app/templates/javascript.htm:595 -msgid "" -"Layer has no data - data on map is for preview purposes. This layer will " -"not show up in map overlays until data is added." -msgstr "" - -#: app/templates/javascript.htm:596 -msgid "Point Style" -msgstr "" - -#: app/templates/javascript.htm:597 -msgid "Line Style" -msgstr "" - -#: app/templates/javascript.htm:598 -msgid "Polygon Style" -msgstr "" - -#: app/templates/javascript.htm:600 -msgid "Halo color" -msgstr "" - -#: app/templates/javascript.htm:601 -msgid "Fill color" -msgstr "" - -#: app/templates/javascript.htm:602 -msgid "Radius" -msgstr "" - -#: app/templates/javascript.htm:603 -msgid "Halo radius" -msgstr "" - -#: app/templates/javascript.htm:604 -msgid "Weight" -msgstr "" - -#: app/templates/javascript.htm:605 -msgid "Halo weight" -msgstr "" - -#: app/templates/javascript.htm:606 -msgid "Outline color" -msgstr "" - -#: app/templates/javascript.htm:607 -msgid "Outline weight" -msgstr "" - -#: app/templates/javascript.htm:608 -msgid "Cluster Distance" -msgstr "" - -#: app/templates/javascript.htm:609 -msgid "Cluster Max Zoom" -msgstr "" - -#: app/templates/javascript.htm:610 -msgid "Cluster Min Points" -msgstr "" - -#: app/templates/javascript.htm:611 -msgid "Vector Simplification" -msgstr "" - -#: app/templates/javascript.htm:612 -msgid "Changes to cluster settings will only be reflected after saving." -msgstr "" - -#: app/templates/javascript.htm:613 -msgid "" -"Preview map data do not use clustering algorithm. Add data for this " -"resource model to see real clustered data." -msgstr "" - -#: app/templates/javascript.htm:614 -msgid "" -"The following users and groups can view this layer. If you wish to change " -"who can access this layer, please update the permissions on the layer node." -msgstr "" - -#: app/templates/javascript.htm:615 -msgid "Users" -msgstr "" - -#: app/templates/javascript.htm:616 -msgid "Groups" -msgstr "" - -#: app/templates/javascript.htm:617 -msgid "Related Resources Editor" -msgstr "" - -#: app/templates/javascript.htm:618 -msgid "Add Related Resources" -msgstr "" - -#: app/templates/javascript.htm:619 -msgid "" -"Arches allows you to define relationships between resources so you can " -"better understand the context and interplay between physical objects, " -"events, activities, people and documents. Relating resources lets you build " -"a network of relationships for your data objects." -msgstr "" - -#: app/templates/javascript.htm:621 -msgid "Table" -msgstr "" - -#: app/templates/javascript.htm:622 -msgid "Visualization" -msgstr "" - -#: app/templates/javascript.htm:623 -msgid "Show Me How" -msgstr "" - -#: app/templates/javascript.htm:624 -msgid "Select resources and relate it to this one" -msgstr "" - -#: app/templates/javascript.htm:625 -msgid "e.g.: .txt" -msgstr "" - -#: app/templates/javascript.htm:626 -msgid "resource relations" -msgstr "" - -#: app/templates/javascript.htm:627 -msgid "'Select an Ontology Property'" -msgstr "" - -#: app/templates/javascript.htm:628 -msgid "This is a Node to Resource Instance relationship" -msgstr "" - -#: app/templates/javascript.htm:629 -msgid "'s relationship to " -msgstr "" - -#: app/templates/javascript.htm:630 -#: app/templates/views/graph/graph-designer/node-form.htm:71 -msgid "Relationship to" -msgstr "" - -#: app/templates/javascript.htm:631 -msgid "Inverse Relationship to" -msgstr "" - -#: app/templates/javascript.htm:632 -msgid "This is a Resource Instance to Resource Instance relationship" -msgstr "" - -#: app/templates/javascript.htm:633 -msgid "Relationship" -msgstr "" - -#: app/templates/javascript.htm:634 -msgid "From Date" -msgstr "" - -#: app/templates/javascript.htm:635 -msgid "To Date" -msgstr "" - -#: app/templates/javascript.htm:637 -msgid "Delete this entry" -msgstr "" - -#: app/templates/javascript.htm:638 app/templates/javascript.htm:757 -#: app/templates/views/components/plugins/workflow.htm:180 -#: app/templates/views/components/plugins/workflow.htm:183 -#: app/templates/views/graph/card-configuration/card-form-preview.htm:126 -#: app/templates/views/rdm/modals/manage-parent-form.htm:58 -#: app/templates/views/rdm/modals/related-concept-form.htm:68 -#: app/templates/views/rdm/modals/related-member-form.htm:67 -#: app/templates/views/rdm/modals/value-form.htm:64 -#: app/templates/views/rdm/modals/value-form.htm:143 -#: app/templates/views/rdm/modals/value-form.htm:221 -#: app/templates/views/user-profile-manager.htm:155 -msgid "Save" -msgstr "" - -#: app/templates/javascript.htm:639 -msgid "This resource is not related to any other resources" -msgstr "" - -#: app/templates/javascript.htm:640 -msgid "Service" -msgstr "" - -#: app/templates/javascript.htm:641 -msgid "Canvas" -msgstr "" - -#: app/templates/javascript.htm:642 -msgid "Manage Image Service" -msgstr "" - -#: app/templates/javascript.htm:643 -msgid "Title" -msgstr "" - -#: app/templates/javascript.htm:645 -msgid "Attribution" -msgstr "" - -#: app/templates/javascript.htm:646 -msgid "Attribution Logo" -msgstr "" - -#: app/templates/javascript.htm:647 -msgid "Metadata" -msgstr "" - -#: app/templates/javascript.htm:649 -msgid "Manage Image Canvases" -msgstr "" - -#: app/templates/javascript.htm:650 -#: app/templates/views/rdm/concept-report.htm:229 -msgid "Images" -msgstr "" - -#: app/templates/javascript.htm:651 -msgid "Select image to delete from the image service" -msgstr "" - -#: app/templates/javascript.htm:652 app/templates/javascript.htm:750 -msgid "Select All" -msgstr "" - -#: app/templates/javascript.htm:653 app/templates/javascript.htm:751 -msgid "Clear All" -msgstr "" - -#: app/templates/javascript.htm:654 app/templates/javascript.htm:752 -msgid "Delete Selected" -msgstr "" - -#: app/templates/javascript.htm:655 -msgid "Drag or " -msgstr "" - -#: app/templates/javascript.htm:656 -msgid "click here " -msgstr "" - -#: app/templates/javascript.htm:657 -msgid "to upload photos" -msgstr "" - -#: app/templates/javascript.htm:658 -msgid "Selected Image Name" -msgstr "" - -#: app/templates/javascript.htm:659 -msgid "Create New Service" -msgstr "" - -#: app/templates/javascript.htm:660 -msgid "Edit a service" -msgstr "" - -#: app/templates/javascript.htm:661 -msgid "Drag & Drop Your Images Here" -msgstr "" - -#: app/templates/javascript.htm:662 -msgid "Import digital images and create a new image service" -msgstr "" - -#: app/templates/javascript.htm:663 -msgid "Select Images" -msgstr "" - -#: app/templates/javascript.htm:664 -msgid "" -"Create a new service by uploading one or more images. Images will be " -"uploaded and processes so that you can view, annotate, and share them with " -"others" -msgstr "" - -#: app/templates/javascript.htm:665 -msgid "Edit an existing Image Service" -msgstr "" - -#: app/templates/javascript.htm:666 -msgid "" -"Update the information and images related to an existing Image Service. Or " -"copy and paste in the URL of a IIIF Manifest to add a service from an " -"external service" -msgstr "" - -#: app/templates/javascript.htm:668 -msgid "Create Image Service" -msgstr "" - -#: app/templates/javascript.htm:670 -msgid "Service Title" -msgstr "" - -#: app/templates/javascript.htm:671 -msgid "Service Description" -msgstr "" - -#: app/templates/javascript.htm:672 -msgid "Metadata Label" -msgstr "" - -#: app/templates/javascript.htm:673 -msgid "Metadata Value" -msgstr "" - -#: app/templates/javascript.htm:674 -msgid "Image Caption" -msgstr "" - -#: app/templates/javascript.htm:675 -msgid "Upload .csv or .zip File" -msgstr "" - -#: app/templates/javascript.htm:676 -msgid "Drag & Drop your file onto this area to upload" -msgstr "" - -#: app/templates/javascript.htm:677 -msgid "Select File" -msgstr "" - -#: app/templates/javascript.htm:678 app/templates/javascript.htm:693 -msgid "Cancel File Import" -msgstr "" - -#: app/templates/javascript.htm:679 -msgid "" -"Use this workflow to upload a file with data that you want to use to create " -"new data instances of a model." -msgstr "" - -#: app/templates/javascript.htm:680 -msgid "Import Format: Single .csv file" -msgstr "" - -#: app/templates/javascript.htm:681 -msgid "File Summary" -msgstr "" - -#: app/templates/javascript.htm:682 -msgid "File name" -msgstr "" - -#: app/templates/javascript.htm:683 -msgid "File size" -msgstr "" - -#: app/templates/javascript.htm:684 -msgid "Number of rows" -msgstr "" - -#: app/templates/javascript.htm:685 -msgid "Target Model" -msgstr "" - -#: app/templates/javascript.htm:686 -msgid "Import Details" -msgstr "" - -#: app/templates/javascript.htm:687 -msgid "Column names in the first row" -msgstr "" - -#: app/templates/javascript.htm:688 app/templates/javascript.htm:762 -msgid "Use as an id" -msgstr "" - -#: app/templates/javascript.htm:689 -msgid "Showing First" -msgstr "" - -#: app/templates/javascript.htm:690 -msgid "Showing All" -msgstr "" - -#: app/templates/javascript.htm:691 -msgid "Rows" -msgstr "" - -#: app/templates/javascript.htm:692 -msgid "Import data" -msgstr "" - -#: app/templates/javascript.htm:694 -msgid "Import Single CSV" -msgstr "" - -#: app/templates/javascript.htm:695 -msgid "Target Resource" -msgstr "" - -#: app/templates/javascript.htm:696 -msgid "Target Fields" -msgstr "" - -#: app/templates/javascript.htm:697 -msgid "Download Templates" -msgstr "" - -#: app/templates/javascript.htm:698 -msgid "Select Template" -msgstr "" - -#: app/templates/javascript.htm:699 -msgid "Upload .zip File" -msgstr "" - -#: app/templates/javascript.htm:700 -msgid "Upload Your .zip File" -msgstr "" - -#: app/templates/javascript.htm:701 -msgid "Branch Excel" -msgstr "" - -#: app/templates/javascript.htm:702 -msgid "File Upload Summary" -msgstr "" - -#: app/templates/javascript.htm:703 -msgid "File" -msgstr "" - -#: app/templates/javascript.htm:704 -msgid "Size" -msgstr "" - -#: app/templates/javascript.htm:705 -#: app/templates/two_factor_authentication_reset.htm:42 -msgid "Submit" -msgstr "" - -#: app/templates/javascript.htm:706 -msgid "File contents" -msgstr "" - -#: app/templates/javascript.htm:707 -msgid "Import Branch Excel Summary" -msgstr "" - -#: app/templates/javascript.htm:708 -msgid "Excel File" -msgstr "" - -#: app/templates/javascript.htm:709 -msgid "Worksheets" -msgstr "" - -#: app/templates/javascript.htm:710 -msgid "Tiles" -msgstr "" - -#: app/templates/javascript.htm:711 -#: app/templates/views/rdm/modals/import-concept-form.htm:53 -msgid "Import" -msgstr "" - -#: app/templates/javascript.htm:712 -#: app/templates/views/rdm/modals/export-scheme-form.htm:27 -msgid "Export" -msgstr "" - -#: app/templates/javascript.htm:713 -msgid "Filter Tasks" -msgstr "" - -#: app/templates/javascript.htm:714 -msgid "Filter Modules" -msgstr "" - -#: app/templates/javascript.htm:715 -msgid "Start" -msgstr "" - -#: app/templates/javascript.htm:716 -msgid "Warning" -msgstr "" - -#: app/templates/javascript.htm:717 -msgid "Are you sure you want to delete this load?" -msgstr "" - -#: app/templates/javascript.htm:718 -msgid "undo import" -msgstr "" - -#: app/templates/javascript.htm:719 -msgid "remove from history" -msgstr "" - -#: app/templates/javascript.htm:720 -msgid "indexing" -msgstr "" - -#: app/templates/javascript.htm:721 -msgid "completed" -msgstr "" - -#: app/templates/javascript.htm:722 -msgid "failed" -msgstr "" - -#: app/templates/javascript.htm:723 -msgid "running" -msgstr "" - -#: app/templates/javascript.htm:724 -msgid "unloading" -msgstr "" - -#: app/templates/javascript.htm:725 -msgid "unloaded" -msgstr "" - -#: app/templates/javascript.htm:726 -msgid "Validation Errors" -msgstr "" - -#: app/templates/javascript.htm:727 -msgid "No Error Found" -msgstr "" - -#: app/templates/javascript.htm:728 -msgid "Loading data" -msgstr "" - -#: app/templates/javascript.htm:729 -msgid "Loading status" -msgstr "" - -#: app/templates/javascript.htm:730 -msgid "Loading started" -msgstr "" - -#: app/templates/javascript.htm:731 -msgid "Loading ended" -msgstr "" - -#: app/templates/javascript.htm:732 -msgid "Load duration" -msgstr "" - -#: app/templates/javascript.htm:733 -msgid "Indexing ended" -msgstr "" - -#: app/templates/javascript.htm:734 -msgid "Indexing duration" -msgstr "" - -#: app/templates/javascript.htm:736 -msgid "Unable to display the selected file" -msgstr "" - -#: app/templates/javascript.htm:737 -msgid "This file can't be displayed." -msgstr "" - -#: app/templates/javascript.htm:738 -msgid "It may be a proprietary format or there isn't a loader available yet" -msgstr "" - -#: app/templates/javascript.htm:739 -msgid "to present it in this webpage." -msgstr "" - -#: app/templates/javascript.htm:740 -msgid "Unable to parse your file with the " -msgstr "" - -#: app/templates/javascript.htm:741 -msgid "loader" -msgstr "" - -#: app/templates/javascript.htm:742 -msgid "Select File Loader" -msgstr "" - -#: app/templates/javascript.htm:743 -msgid "" -"Select the loader best suited for processing and visualizing the selected " -"file" -msgstr "" - -#: app/templates/javascript.htm:744 -msgid "Upload Files" -msgstr "" - -#: app/templates/javascript.htm:745 -msgid "" -"You may upload as many files as you wish; check with the site admin on the " -"maximum file size." -msgstr "" - -#: app/templates/javascript.htm:746 -msgid "optional" -msgstr "" - -#: app/templates/javascript.htm:747 -msgid "Adding files to this record is" -msgstr "" - -#: app/templates/javascript.htm:748 -msgid "" -"Images formatted as .jpg, .png files may be uploaded. Other formats may " -"require a loader to view." -msgstr "" - -#: app/templates/javascript.htm:749 -msgid "File Filter" -msgstr "" - -#: app/templates/javascript.htm:753 -msgid "Download Selected" -msgstr "" - -#: app/templates/javascript.htm:754 -msgid "Loader" -msgstr "" - -#: app/templates/javascript.htm:755 -msgid "File Renderer" -msgstr "" - -#: app/templates/javascript.htm:758 -msgid "files selected" -msgstr "" - -#: app/templates/javascript.htm:759 -msgid "add files" -msgstr "" - -#: app/templates/javascript.htm:760 -msgid "Apply to Selected Files" -msgstr "" - -#: app/templates/javascript.htm:761 -msgid "Apply the same loader to all selected files in the dataset" -msgstr "" - -#: app/templates/login.htm:38 app/templates/login.htm:68 -msgid "Sign In" -msgstr "" - -#: app/templates/login.htm:40 -msgid "" -"Sign in to Arches to access your data modeling, editing, and discovery tools." -msgstr "" - -#: app/templates/login.htm:46 -msgid "Your account has been created. Please sign in." -msgstr "" - -#: app/templates/login.htm:74 -msgid "Login failed" -msgstr "" - -#: app/templates/login.htm:75 -msgid "Invalid username and/or password." -msgstr "" - -#: app/templates/login.htm:80 app/templates/signup.htm:159 -msgid "Forgot password ?" -msgstr "" - -#: app/templates/login.htm:81 -msgid "Forgot password?" -msgstr "" - -#: app/templates/login.htm:84 app/templates/signup.htm:160 -msgid "Create a new account" -msgstr "" - -#: app/templates/login.htm:90 app/templates/signup.htm:153 -msgid "Learn more about Arches" -msgstr "" - -#: app/templates/navbar/function-manage-menu.htm:11 -msgid "Select a graph..." -msgstr "" - -#: app/templates/navbar/function-manage-menu.htm:18 -msgid "Graphs/Semantics" -msgstr "" - -#: app/templates/navbar/function-manage-menu.htm:19 -msgid "Define graph" -msgstr "" - -#: app/templates/navbar/function-manage-menu.htm:28 -#: app/templates/navbar/graph-designer-menu.htm:102 -msgid "Return to Arches Designer" -msgstr "" - -#: app/templates/navbar/function-manage-menu.htm:29 -#: app/templates/navbar/graph-designer-menu.htm:103 -msgid "Create Arches Resource Models and Branches" -msgstr "" - -#: app/templates/navbar/function-manage-menu.htm:37 -#: app/templates/navbar/graph-designer-menu.htm:111 -msgid "footer" -msgstr "" - -#: app/templates/navbar/graph-designer-menu.htm:15 -msgid "New Model" -msgstr "" - -#: app/templates/navbar/graph-designer-menu.htm:16 -msgid "Create new Resource Model" -msgstr "" - -#: app/templates/navbar/graph-designer-menu.htm:24 -#: app/templates/views/graph.htm:75 app/views/graph.py:346 -msgid "New Branch" -msgstr "" - -#: app/templates/navbar/graph-designer-menu.htm:25 -msgid "Create new Branch" -msgstr "" - -#: app/templates/navbar/graph-designer-menu.htm:36 -msgid "Import Model" -msgstr "" - -#: app/templates/navbar/graph-designer-menu.htm:37 -msgid "Import Model by uploading a json file" -msgstr "" - -#: app/templates/navbar/graph-designer-menu.htm:63 -msgid "Functions" -msgstr "" - -#: app/templates/navbar/graph-designer-menu.htm:64 -msgid "Configure functions attached to this Resource Model" -msgstr "" - -#: app/templates/navbar/graph-designer-menu.htm:72 -msgid "Export Mapping File" -msgstr "" - -#: app/templates/navbar/graph-designer-menu.htm:74 -msgid "Use a mapping file with import/export of business data" -msgstr "" - -#: app/templates/navbar/graph-designer-menu.htm:83 -msgid "Delete Associated Instances" -msgstr "" - -#: app/templates/navbar/graph-designer-menu.htm:84 -msgid "Delete All Associated Instances with this Model" -msgstr "" - -#: app/templates/navbar/resource-manage-menu.htm:17 -msgid "Copy Resource" -msgstr "" - -#: app/templates/navbar/resource-manage-menu.htm:18 -msgid "Make a copy and start editing" -msgstr "" - -#: app/templates/navbar/resource-manage-menu.htm:28 -msgid "Delete Resource" -msgstr "" - -#: app/templates/navbar/resource-manage-menu.htm:29 -msgid "Permanently delete this resource" -msgstr "" - -#: app/templates/navbar/resource-manage-menu.htm:39 -msgid "Review Edit History" -msgstr "" - -#: app/templates/navbar/resource-manage-menu.htm:40 -msgid "View changes to this resource record" -msgstr "" - -#: app/templates/navbar/resource-manage-menu.htm:49 -msgid "Jump to Report" -msgstr "" - -#: app/templates/navbar/resource-manage-menu.htm:50 -msgid "View the full resource report" -msgstr "" - -#: app/templates/navbar/resource-manage-menu.htm:58 -msgid "Print Report" -msgstr "" - -#: app/templates/navbar/resource-manage-menu.htm:59 -msgid "Print the full resource report" -msgstr "" - -#: app/templates/rdm.htm:66 app/templates/views/rdm/concept-report.htm:28 -#: app/templates/views/rdm/concept-report.htm:52 -msgid "Toggle Dropdown" -msgstr "" - -#: app/templates/rdm.htm:69 -msgid "Add Thesauri" -msgstr "" - -#: app/templates/rdm.htm:70 -msgid "Import Thesauri" -msgstr "" - -#: app/templates/rdm.htm:71 -msgid "Export Thesauri" -msgstr "" - -#: app/templates/rdm.htm:72 -msgid "Delete Thesauri" -msgstr "" - -#: app/templates/rdm.htm:74 -#: app/templates/views/rdm/modals/add-collection-form.htm:7 -msgid "Add Collection" -msgstr "" - -#: app/templates/rdm.htm:75 -#: app/templates/views/rdm/modals/delete-collection-form.htm:7 -msgid "Delete Collection" -msgstr "" - -#: app/templates/rdm.htm:76 -msgid "Export All Collections" -msgstr "" - -#: app/templates/rdm.htm:120 app/templates/views/rdm/concept-report.htm:3 -#: app/templates/views/rdm/entitytype-report.htm:3 -msgid "Loading..." -msgstr "" - -#: app/templates/signup.htm:31 -msgid "Create Account" -msgstr "" - -#: app/templates/signup.htm:33 -msgid "Register to access data modeling, editing, and discovery tools." -msgstr "" - -#: app/templates/signup.htm:40 -msgid "Please correct the error below." -msgstr "" - -#: app/templates/signup.htm:40 -msgid "Please correct the errors below." -msgstr "" - -#: app/templates/signup.htm:127 -msgid "Signup" -msgstr "" - -#: app/templates/two_factor_authentication_login.htm:19 -#: app/templates/views/user-profile-manager.htm:127 -#: app/templates/views/user-profile-manager.htm:238 -msgid "Two-Factor Authentication" -msgstr "" - -#: app/templates/two_factor_authentication_login.htm:24 -msgid "" -"Please enter the code from your external authentication application below." -msgstr "" - -#: app/templates/two_factor_authentication_login.htm:63 -msgid "Authentication failed. Please try again." -msgstr "" - -#: app/templates/two_factor_authentication_login.htm:71 -msgid "Need to reset two-factor authentication?" -msgstr "" - -#: app/templates/two_factor_authentication_login.htm:81 -msgid "" -"The administrator has required that all users enable two-factor " -"authentication." -msgstr "" - -#: app/templates/two_factor_authentication_login.htm:82 -msgid "Enable two-factor authentication via email" -msgstr "" - -#: app/templates/two_factor_authentication_reset.htm:19 -msgid "Update Two-Factor Authentication" -msgstr "" - -#: app/templates/two_factor_authentication_reset.htm:24 -msgid "Please enter an email address below." -msgstr "" - -#: app/templates/two_factor_authentication_reset.htm:25 -msgid "" -"If it is registered in our system it will receive instructions to update two-" -"factor authentication." -msgstr "" - -#: app/templates/two_factor_authentication_reset.htm:53 -msgid "Success!" -msgstr "" - -#: app/templates/two_factor_authentication_reset.htm:57 -msgid "Email address:" -msgstr "" - -#: app/templates/two_factor_authentication_reset.htm:65 -msgid "" -"If this email address is registered, an email has been sent to it containing " -"instructions to enable two-factor authentication." -msgstr "" - -#: app/templates/two_factor_authentication_reset.htm:72 -#: app/templates/two_factor_authentication_settings.htm:161 -msgid "Click here to return to login page" -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:22 -msgid "Two-Factor Authentication Settings" -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:33 -msgid "This page will expire in 5 minutes." -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:46 -msgid "Two-Factor Authentication:" -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:49 -msgid "ENABLED" -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:51 -msgid "DISABLED" -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:71 -msgid "Generate a new shared secret key" -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:73 -msgid "Enable two-factor authentication" -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:80 -msgid "Scan the QR code below with your external authentication application." -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:91 -msgid "Click here to generate data for manual entry." -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:97 -msgid "Enter the data below into your external authentication application." -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:105 -msgid "Issuer Name:" -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:111 -msgid "Account Name:" -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:117 -msgid "Secret Key:" -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:123 -msgid "Algorithm Type:" -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:126 -msgid "Time based" -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:138 -msgid "Click here to generate QR code." -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:152 -msgid "" -"To disable two-factor authentication, please contact your administrator." -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:156 -msgid "Disable two-factor authentication" -msgstr "" - -#: app/templates/views/components/plugins/workflow.htm:10 -msgid "Insert Workflow Name" -msgstr "" - -#: app/templates/views/components/plugins/workflow.htm:21 -msgid "Save and Complete Workflow" -msgstr "" - -#: app/templates/views/components/plugins/workflow.htm:24 -msgid "Complete" -msgstr "" - -#: app/templates/views/components/plugins/workflow.htm:146 -msgid "Previous Step" -msgstr "" - -#: app/templates/views/components/plugins/workflow.htm:149 -msgid "Previous" -msgstr "" - -#: app/templates/views/components/plugins/workflow.htm:166 -msgid "Undo" -msgstr "" - -#: app/templates/views/components/plugins/workflow.htm:196 -msgid "Save and Continue" -msgstr "" - -#: app/templates/views/components/plugins/workflow.htm:199 -#: app/templates/views/components/plugins/workflow.htm:220 -#: app/templates/views/components/plugins/workflow.htm:242 -msgid "Next" -msgstr "" - -#: app/templates/views/components/plugins/workflow.htm:217 -#: app/templates/views/components/plugins/workflow.htm:239 -msgid "Next Step" -msgstr "" - -#: app/templates/views/concept-graph.htm:14 -msgid "Concept" -msgstr "" - -#: app/templates/views/concept-graph.htm:19 -msgid "Delete this concept" -msgstr "" - -#: app/templates/views/concept-graph.htm:19 -msgid "Delete this concept and all of it's sub concepts." -msgstr "" - -#: app/templates/views/concept-graph.htm:20 -#: app/templates/views/rdm/concept-report.htm:138 -#: app/templates/views/rdm/concept-report.htm:147 -#: app/templates/views/rdm/concept-report.htm:187 -msgid "Jump to this concept" -msgstr "" - -#: app/templates/views/concept-graph.htm:20 -msgid "More Child Concept" -msgstr "" - -#: app/templates/views/concept-search.htm:2 -#: app/templates/views/rdm/modals/import-concept-form.htm:21 -msgid "Search for a concept..." -msgstr "" - -#: app/templates/views/edit-history.htm:11 -msgid "Recently Added Resources" -msgstr "" - -#: app/templates/views/edit-history.htm:16 -msgid "Resource Id" -msgstr "" - -#: app/templates/views/edit-history.htm:17 -msgid "Resource Name" -msgstr "" - -#: app/templates/views/edit-history.htm:19 -msgid "Edited" -msgstr "" - -#: app/templates/views/edit-history.htm:20 -msgid "Edit Type" -msgstr "" - -#: app/templates/views/edit-history.htm:21 -msgid "Editor" -msgstr "" - -#: app/templates/views/edit-history.htm:30 -msgid " (Resource Deleted)" -msgstr "" - -#: app/templates/views/edit-history.htm:45 -#: app/templates/views/edit-history.htm:47 -msgid "View Report" -msgstr "" - -#: app/templates/views/graph-designer.htm:26 -msgid "Graph Designer" -msgstr "" - -#: app/templates/views/graph-designer.htm:34 -msgid "Branch" -msgstr "" - -#: app/templates/views/graph-designer.htm:55 -msgid "Resource:" -msgstr "" - -#: app/templates/views/graph-designer.htm:63 -msgid "" -"Warning! This will save the graph in its current state and make the Resource " -"accessible to permissioned users." -msgstr "" - -#: app/templates/views/graph-designer.htm:76 -msgid "Notes:" -msgstr "" - -#: app/templates/views/graph-designer.htm:93 -msgid "Publish" -msgstr "" - -#: app/templates/views/graph-designer.htm:112 app/templates/views/graph.htm:51 -msgid "Find a Resource Model/Branch..." -msgstr "" - -#: app/templates/views/graph-designer.htm:145 -#: app/templates/views/graph-designer.htm:157 -msgid "Discard Card Edits" -msgstr "" - -#: app/templates/views/graph-designer.htm:147 -#: app/templates/views/graph-designer.htm:159 -msgid "Save Card Edits" -msgstr "" - -#: app/templates/views/graph-designer.htm:167 -msgid "Unpublish Graph" -msgstr "" - -#: app/templates/views/graph-designer.htm:173 -msgid "Publish Graph" -msgstr "" - -#: app/templates/views/graph-designer.htm:185 -msgid "Quit Designer" -msgstr "" - -#: app/templates/views/graph-designer.htm:201 -msgid "Graph" -msgstr "" - -#: app/templates/views/graph-designer.htm:206 -msgid "Cards" -msgstr "" - -#: app/templates/views/graph-designer.htm:253 -msgid "Add a branch to your model from the library" -msgstr "" - -#: app/templates/views/graph-designer.htm:280 -msgid "Card Designer" -msgstr "" - -#: app/templates/views/graph.htm:25 -msgid "Graphs" -msgstr "" - -#: app/templates/views/graph.htm:74 app/views/graph.py:346 -msgid "New Resource Model" -msgstr "" - -#: app/templates/views/graph.htm:80 -msgid "Import Branch/Resource Model" -msgstr "" - -#: app/templates/views/graph.htm:112 -msgid "Manage Graph" -msgstr "" - -#: app/templates/views/graph.htm:116 -msgid "Manage Functions" -msgstr "" - -#: app/templates/views/graph.htm:119 -msgid "Create Mapping File" -msgstr "" - -#: app/templates/views/graph.htm:122 -msgid "Delete Instances" -msgstr "" - -#: app/templates/views/graph.htm:126 -msgid "Export Model" -msgstr "" - -#: app/templates/views/graph.htm:128 -msgid "Clone Model" -msgstr "" - -#: app/templates/views/graph.htm:130 -msgid "Delete Model" -msgstr "" - -#: app/templates/views/graph/card-configuration/card-components-tree.htm:58 -msgid "Widget" -msgstr "" - -#: app/templates/views/graph/card-configuration/card-form-preview.htm:125 -msgid "Discard" -msgstr "" - -#: app/templates/views/graph/function-manager.htm:23 -msgid "Function Manager" -msgstr "" - -#: app/templates/views/graph/function-manager.htm:41 -msgid "Selected Functions" -msgstr "" - -#: app/templates/views/graph/function-manager.htm:47 -msgid "You haven't added any functions yet." -msgstr "" - -#: app/templates/views/graph/function-manager.htm:49 -msgid "" -"Select functions from the library to add new capabilities to your resource." -msgstr "" - -#: app/templates/views/graph/function-manager.htm:56 -msgid "Close Function Library" -msgstr "" - -#: app/templates/views/graph/function-manager.htm:57 -msgid "Show Function Library" -msgstr "" - -#: app/templates/views/graph/function-manager.htm:88 -msgid "Library filter goes here" -msgstr "" - -#: app/templates/views/graph/function-manager.htm:96 -msgid "Function Library" -msgstr "" - -#: app/templates/views/graph/function-manager.htm:119 -#: app/templates/views/graph/function-manager/function-list.htm:21 -msgid "Function Name" -msgstr "" - -#: app/templates/views/graph/function-manager.htm:137 -msgid "This Function doesn't require any configuration." -msgstr "" - -#: app/templates/views/graph/function-manager/function-list.htm:26 -msgid "Function Description" -msgstr "" - -#: app/templates/views/graph/function-manager/function-list.htm:37 -msgid "Select Function" -msgstr "" - -#: app/templates/views/graph/graph-base.htm:24 -msgid "Graph Manager" -msgstr "" - -#: app/templates/views/graph/graph-designer/branch-list.htm:17 -msgid "Because of ontology rules, there are no branches that can be appended." -msgstr "" - -#: app/templates/views/graph/graph-designer/card-configuration.htm:31 -msgid "Card name" -msgstr "" - -#: app/templates/views/graph/graph-designer/card-configuration.htm:40 -#: app/templates/views/graph/graph-designer/card-configuration.htm:49 -msgid " " -msgstr "" - -#: app/templates/views/graph/graph-designer/card-configuration.htm:46 -msgid "CSS Classes (Optional)" -msgstr "" - -#: app/templates/views/graph/graph-designer/card-configuration.htm:95 -msgid "Help Panel Title" -msgstr "" - -#: app/templates/views/graph/graph-designer/card-configuration.htm:98 -msgid "Help title" -msgstr "" - -#: app/templates/views/graph/graph-designer/card-configuration.htm:105 -msgid "Content" -msgstr "" - -#: app/templates/views/graph/graph-designer/card-configuration.htm:118 -msgid "Unique Values" -msgstr "" - -#: app/templates/views/graph/graph-designer/card-tree-permissions.htm:9 -#: app/templates/views/graph/graph-designer/card-tree.htm:9 -#: app/templates/views/resource/editor.htm:46 -msgid "Find a card..." -msgstr "" - -#: app/templates/views/graph/graph-designer/card-tree-permissions.htm:15 -#: app/templates/views/graph/graph-designer/card-tree.htm:15 -#: app/templates/views/graph/graph-designer/graph-tree.htm:18 -#: app/templates/views/resource/editor.htm:52 -msgid " Expand" -msgstr "" - -#: app/templates/views/graph/graph-designer/card-tree-permissions.htm:16 -#: app/templates/views/graph/graph-designer/card-tree.htm:16 -#: app/templates/views/graph/graph-designer/graph-tree.htm:19 -#: app/templates/views/resource/editor.htm:53 -msgid " Collapse" -msgstr "" - -#: app/templates/views/graph/graph-designer/card-tree-permissions.htm:17 -#: app/templates/views/graph/graph-designer/card-tree.htm:17 -#: app/templates/views/graph/graph-designer/graph-tree.htm:20 -#: app/templates/views/resource/editor.htm:54 -msgid " Grid" -msgstr "" - -#: app/templates/views/graph/graph-designer/card-tree-permissions.htm:18 -msgid " Select All" -msgstr "" - -#: app/templates/views/graph/graph-designer/card-tree-permissions.htm:19 -msgid " Clear All" -msgstr "" - -#: app/templates/views/graph/graph-designer/card-tree.htm:19 -#: app/templates/views/graph/graph-designer/graph-tree.htm:22 -msgid " Show IDs" -msgstr "" - -#: app/templates/views/graph/graph-designer/card-tree.htm:22 -#: app/templates/views/graph/graph-designer/graph-tree.htm:25 -msgid " Hide IDs" -msgstr "" - -#: app/templates/views/graph/graph-designer/card-tree.htm:40 -msgid "(edit report)" -msgstr "" - -#: app/templates/views/graph/graph-designer/graph-settings.htm:121 -msgid "Make card" -msgstr "" - -#: app/templates/views/graph/graph-designer/graph-settings.htm:124 -#: app/templates/views/graph/graph-designer/node-form.htm:252 -msgid "" -"Data from nodes not collected in other cards will be collected in the root " -"card's form section" -msgstr "" - -#: app/templates/views/graph/graph-designer/graph-settings.htm:134 -msgid "Resource models that may be related:" -msgstr "" - -#: app/templates/views/graph/graph-designer/graph-settings.htm:169 -msgid "Author name" -msgstr "" - -#: app/templates/views/graph/graph-designer/graph-settings.htm:181 -msgid "Abstract/description" -msgstr "" - -#: app/templates/views/graph/graph-designer/graph-settings.htm:193 -msgid "" -"URI to a JSON-LD Context Object or a Raw Context Object or Array of Context " -"Objects" -msgstr "" - -#: app/templates/views/graph/graph-designer/graph-settings.htm:200 -msgid "URI Slug for API Access" -msgstr "" - -#: app/templates/views/graph/graph-designer/graph-settings.htm:204 -msgid "Slug" -msgstr "" - -#: app/templates/views/graph/graph-designer/graph-settings.htm:225 -msgid " Map Feature Color " -msgstr "" - -#: app/templates/views/graph/graph-designer/graph-tree.htm:12 -msgid "Find a node, datatype, card..." -msgstr "" - -#: app/templates/views/graph/graph-designer/graph-tree.htm:49 -msgid "Node is exportable in search" -msgstr "" - -#: app/templates/views/graph/graph-designer/graph-tree.htm:57 -msgid "Add Child Node" -msgstr "" - -#: app/templates/views/graph/graph-designer/graph-tree.htm:58 -msgid "Add Branch" -msgstr "" - -#: app/templates/views/graph/graph-designer/graph-tree.htm:61 -msgid "Export Branch" -msgstr "" - -#: app/templates/views/graph/graph-designer/graph-tree.htm:64 -msgid "Delete Node" -msgstr "" - -#: app/templates/views/graph/graph-designer/identity-list.htm:5 -msgid "Groups/Accounts" -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:45 -msgid "Enter node name here..." -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:45 -msgid "node name" -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:54 -msgid "Node Name Alias" -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:59 -msgid "Unique alias generated from this node\\" -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:60 -msgid "Use a custom node alias" -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:71 -msgid "parent" -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:100 -msgid "Semantics" -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:129 -msgid "description" -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:137 -msgid "Node Data Type and Configuration" -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:169 -msgid "Node Settings" -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:186 -msgid "Activate to use this node in Advanced Search." -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:206 -#: app/templates/views/graph/graph-designer/widget-configuration.htm:66 -msgid "" -"Activate to require that data be collected for this node when a card value " -"is edited" -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:224 -msgid "Export via Search Results" -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:227 -msgid "Provide a field name for shapefiles. " -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:227 -msgid "Limited to 10 characters to meet shapefile requirements." -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:230 -msgid "shapefile fieldname" -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:255 -msgid "" -"Data from this node and downstream nodes will be collected in a single form " -"section" -msgstr "" - -#: app/templates/views/graph/graph-designer/permission-settings-form.htm:21 -msgid "To set permissions: " -msgstr "" - -#: app/templates/views/graph/graph-designer/permission-settings-form.htm:23 -msgid " 1. Select one or more cards from the card tree." -msgstr "" - -#: app/templates/views/graph/graph-designer/permission-settings-form.htm:26 -msgid "" -" 2. Select a Group or User Account from the dropdown below." -msgstr "" - -#: app/templates/views/graph/graph-designer/permission-settings-form.htm:29 -msgid "" -" 3. Apply Permissions to set your changes. You'll see your " -"selections reflected by the icons in the card tree." -msgstr "" - -#: app/templates/views/graph/graph-designer/permission-settings-form.htm:36 -msgid "Set permissions for:" -msgstr "" - -#: app/templates/views/graph/graph-designer/permission-settings-form.htm:43 -msgid "Select a Group/Account..." -msgstr "" - -#: app/templates/views/graph/graph-designer/permission-settings-form.htm:77 -msgid "Revert Permissions" -msgstr "" - -#: app/templates/views/graph/graph-designer/permission-settings-form.htm:79 -msgid "Apply Permissions" -msgstr "" - -#: app/templates/views/graph/graph-designer/permission-settings-form.htm:88 -msgid "Selected Cards" -msgstr "" - -#: app/templates/views/graph/graph-designer/permission-settings-form.htm:91 -msgid "No cards selected" -msgstr "" - -#: app/templates/views/graph/graph-designer/widget-configuration.htm:7 -msgid "Widget Manager" -msgstr "" - -#: app/templates/views/graph/graph-designer/widget-configuration.htm:36 -msgid "Visibility" -msgstr "" - -#: app/templates/views/map-layer-manager.htm:72 -msgid "Overlay" -msgstr "" - -#: app/templates/views/map-layer-manager.htm:97 -msgid "No overlays available" -msgstr "" - -#: app/templates/views/map-layer-manager.htm:120 -msgid "Delete Layer" -msgstr "" - -#: app/templates/views/map-layer-manager.htm:136 -msgid "Activated:" -msgstr "" - -#: app/templates/views/map-layer-manager.htm:197 -msgid "Layer Name:" -msgstr "" - -#: app/templates/views/map-layer-manager.htm:218 -msgid "Only show on search map:" -msgstr "" - -#: app/templates/views/map-layer-manager.htm:249 -msgid "Legend content:" -msgstr "" - -#: app/templates/views/notifications-list.htm:10 -msgid "Dismiss All" -msgstr "" - -#: app/templates/views/notifications-list.htm:26 -msgid "" -"You're up-to-date and do not have any notifications. When you trigger a " -"notification (for example, when you request a large download) it will " -"display here." -msgstr "" - -#: app/templates/views/provisional-history-list.htm:17 -msgid "Last 7 days" -msgstr "" - -#: app/templates/views/provisional-history-list.htm:18 -msgid "Last 30 days" -msgstr "" - -#: app/templates/views/provisional-history-list.htm:49 -msgid "" -"You have not yet edited any data within the specified time period. Once you " -"edit a resource, your edit history will display here." -msgstr "" - -#: app/templates/views/provisional-history-list.htm:71 -msgid "Card: " -msgstr "" - -#: app/templates/views/provisional-history-list.htm:76 -msgid "Edited: " -msgstr "" - -#: app/templates/views/provisional-history-list.htm:82 -msgid "pending review" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:32 -msgid "Add Top Concept" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:33 -msgid "Import Top Concept from SPARQL" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:36 -#: app/templates/views/rdm/concept-report.htm:55 -msgid "Add Child" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:37 -msgid "Import Child from SPARQL" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:39 -#: app/templates/views/rdm/concept-report.htm:57 -msgid "Manage Parents" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:40 -msgid "Make Collection" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:56 -msgid "Import Child from AAT" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:70 -#: app/templates/views/rdm/entitytype-report.htm:78 -msgid "Labels" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:72 -#: app/templates/views/rdm/entitytype-report.htm:81 -msgid "Add label" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:78 -#: app/templates/views/rdm/entitytype-report.htm:87 -msgid "Delete this label?" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:81 -msgid "preferred" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:81 -msgid "alternate" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:81 -msgid "hidden" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:94 -#: app/templates/views/rdm/entitytype-report.htm:103 -msgid "Notes" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:96 -#: app/templates/views/rdm/entitytype-report.htm:106 -msgid "Add note" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:102 -#: app/templates/views/rdm/entitytype-report.htm:112 -msgid "Delete this note?" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:123 -msgid "Broader/Narrower Concepts" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:146 -msgid "Delete this concept?" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:146 -msgid "" -"By deleting this concept, you will also be deleting the following concepts " -"as well. This operation cannot be undone." -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:178 -msgid "Related Concepts" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:180 -msgid "Add related concept" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:186 -msgid "Remove the relationship to this concept?" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:203 -#: app/templates/views/rdm/entitytype-report.htm:132 -msgid "Values" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:205 -#: app/templates/views/rdm/entitytype-report.htm:135 -msgid "Add value" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:211 -#: app/templates/views/rdm/entitytype-report.htm:141 -msgid "Delete this value?" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:212 -#: app/templates/views/rdm/entitytype-report.htm:142 -msgid "Edit this value" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:231 -msgid "Add images" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:246 -msgid "Delete Image" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:274 -#: app/templates/views/rdm/entitytype-report.htm:165 -msgid "Arches ID:" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:294 -#: app/templates/views/rdm/entitytype-report.htm:179 -msgid "Are you ready to delete this item?" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:304 -#: app/templates/views/rdm/entitytype-report.htm:189 -msgid "No" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:305 -#: app/templates/views/rdm/entitytype-report.htm:190 -msgid "Yes" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:339 -msgid "Arches Reference Data Manager" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:348 -msgid "Schemes" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:352 -msgid "Entity Types" -msgstr "" - -#: app/templates/views/rdm/entitytype-report.htm:29 -msgid "Member Hierarchy" -msgstr "" - -#: app/templates/views/rdm/entitytype-report.htm:32 -msgid "Add dropdown entry" -msgstr "" - -#: app/templates/views/rdm/entitytype-report.htm:46 -#: app/templates/views/rdm/entitytype-report.htm:55 -msgid "Expand this entry" -msgstr "" - -#: app/templates/views/rdm/entitytype-report.htm:54 -msgid "Remove this entry from the dropdown" -msgstr "" - -#: app/templates/views/rdm/entitytype-report.htm:89 -msgid "Edit this label" -msgstr "" - -#: app/templates/views/rdm/entitytype-report.htm:113 -msgid "Edit this note" -msgstr "" - -#: app/templates/views/rdm/modals/add-child-form.htm:7 -msgid "Add Concept" -msgstr "" - -#: app/templates/views/rdm/modals/add-child-form.htm:13 -msgid "Label" -msgstr "" - -#: app/templates/views/rdm/modals/add-child-form.htm:19 -msgid "Note" -msgstr "" - -#: app/templates/views/rdm/modals/add-child-form.htm:36 -msgid "Relation from Parent" -msgstr "" - -#: app/templates/views/rdm/modals/add-child-form.htm:50 -#: app/templates/views/rdm/modals/add-collection-form.htm:32 -#: app/templates/views/rdm/modals/add-scheme-form.htm:38 -msgid "Save changes" -msgstr "" - -#: app/templates/views/rdm/modals/add-collection-form.htm:13 -#: app/templates/views/rdm/modals/add-scheme-form.htm:13 -msgid "ConceptScheme Name" -msgstr "" - -#: app/templates/views/rdm/modals/add-image-form.htm:9 -msgid "Import Images" -msgstr "" - -#: app/templates/views/rdm/modals/add-image-form.htm:9 -msgid "(Click on panel or drag and drop files onto panel to upload)" -msgstr "" - -#: app/templates/views/rdm/modals/add-scheme-form.htm:7 -msgid "Add Concept Scheme" -msgstr "" - -#: app/templates/views/rdm/modals/add-scheme-form.htm:19 -msgid "Scope Note" -msgstr "" - -#: app/templates/views/rdm/modals/delete-collection-form.htm:13 -msgid "Select collection to delete" -msgstr "" - -#: app/templates/views/rdm/modals/delete-collection-form.htm:33 -msgid "" -"You won't be able to undo this operation!  Are you sure you want to " -"permanently delete this entire collection from Arches?" -msgstr "" - -#: app/templates/views/rdm/modals/delete-scheme-form.htm:7 -msgid "Delete Scheme" -msgstr "" - -#: app/templates/views/rdm/modals/delete-scheme-form.htm:13 -msgid "Select scheme to delete" -msgstr "" - -#: app/templates/views/rdm/modals/delete-scheme-form.htm:33 -msgid "" -"You won't be able to undo this operation!  Are you sure you want to " -"permanently delete this entire scheme from Arches?" -msgstr "" - -#: app/templates/views/rdm/modals/export-scheme-form.htm:7 -msgid "Export Scheme" -msgstr "" - -#: app/templates/views/rdm/modals/export-scheme-form.htm:13 -msgid "Select scheme to export" -msgstr "" - -#: app/templates/views/rdm/modals/import-concept-form.htm:9 -msgid "Import Concept" -msgstr "" - -#: app/templates/views/rdm/modals/import-concept-form.htm:24 -msgid "Organization" -msgstr "" - -#: app/templates/views/rdm/modals/import-concept-form.htm:33 -msgid "Concept Indentifiers" -msgstr "" - -#: app/templates/views/rdm/modals/import-scheme-form.htm:9 -msgid "Import New Concept Scheme" -msgstr "" - -#: app/templates/views/rdm/modals/import-scheme-form.htm:20 -msgid "SKOS File" -msgstr "" - -#: app/templates/views/rdm/modals/import-scheme-form.htm:30 -msgid "When concept ids match" -msgstr "" - -#: app/templates/views/rdm/modals/import-scheme-form.htm:32 -msgid "overwrite system concept" -msgstr "" - -#: app/templates/views/rdm/modals/import-scheme-form.htm:33 -msgid "use system concept" -msgstr "" - -#: app/templates/views/rdm/modals/import-scheme-form.htm:41 -msgid "When inserting new concepts" -msgstr "" - -#: app/templates/views/rdm/modals/import-scheme-form.htm:43 -msgid "keep within scheme" -msgstr "" - -#: app/templates/views/rdm/modals/import-scheme-form.htm:44 -msgid "stage in candidates" -msgstr "" - -#: app/templates/views/rdm/modals/import-scheme-form.htm:54 -msgid "Upload File" -msgstr "" - -#: app/templates/views/rdm/modals/manage-parent-form.htm:9 -msgid "New Parent Concept" -msgstr "" - -#: app/templates/views/rdm/modals/manage-parent-form.htm:24 -msgid "Relation to Parent" -msgstr "" - -#: app/templates/views/rdm/modals/manage-parent-form.htm:31 -msgid "Current Parents" -msgstr "" - -#: app/templates/views/rdm/modals/manage-parent-form.htm:37 -msgid "Remove the relationship to this parent concept" -msgstr "" - -#: app/templates/views/rdm/modals/manage-parent-form.htm:37 -msgid "Remove the relationship to this parent concept." -msgstr "" - -#: app/templates/views/rdm/modals/manage-parent-form.htm:53 -msgid "Deleting reference to parent:" -msgstr "" - -#: app/templates/views/rdm/modals/related-concept-form.htm:9 -msgid "Manage Related Concepts" -msgstr "" - -#: app/templates/views/rdm/modals/related-concept-form.htm:27 -#: app/templates/views/rdm/modals/related-member-form.htm:27 -msgid "Select a concept" -msgstr "" - -#: app/templates/views/rdm/modals/related-concept-form.htm:34 -#: app/templates/views/rdm/modals/related-member-form.htm:34 -msgid "Relation type" -msgstr "" - -#: app/templates/views/rdm/modals/related-concept-form.htm:35 -#: app/templates/views/rdm/modals/related-member-form.htm:35 -msgid "Relation to Concept" -msgstr "" - -#: app/templates/views/rdm/modals/related-concept-form.htm:52 -msgid "Use the search tool to select the concept that you want to relate." -msgstr "" - -#: app/templates/views/rdm/modals/related-member-form.htm:9 -msgid "Select Concept Values for Dropdowns" -msgstr "" - -#: app/templates/views/rdm/modals/related-member-form.htm:51 -msgid "Selecting a concept will select that concept and all it's children." -msgstr "" - -#: app/templates/views/rdm/modals/value-form.htm:9 -msgid "Edit Concept Label" -msgstr "" - -#: app/templates/views/rdm/modals/value-form.htm:9 -msgid "Add Concept Label" -msgstr "" - -#: app/templates/views/rdm/modals/value-form.htm:9 -msgid "Manage Concept Label" -msgstr "" - -#: app/templates/views/rdm/modals/value-form.htm:24 -msgid "Label Information" -msgstr "" - -#: app/templates/views/rdm/modals/value-form.htm:35 -msgid "Label type" -msgstr "" - -#: app/templates/views/rdm/modals/value-form.htm:70 -msgid "Only one preferred label may exist for each language." -msgstr "" - -#: app/templates/views/rdm/modals/value-form.htm:83 -msgid "Add Concept Note" -msgstr "" - -#: app/templates/views/rdm/modals/value-form.htm:83 -msgid "Manage Concept Note" -msgstr "" - -#: app/templates/views/rdm/modals/value-form.htm:98 -msgid "Note Editor" -msgstr "" - -#: app/templates/views/rdm/modals/value-form.htm:151 -msgid "Only one note of each type may exist for each language." -msgstr "" - -#: app/templates/views/rdm/modals/value-form.htm:164 -msgid "Add Concept Value" -msgstr "" - -#: app/templates/views/rdm/modals/value-form.htm:164 -msgid "Manage Concept Values" -msgstr "" - -#: app/templates/views/rdm/modals/value-form.htm:179 -msgid "Define a value" -msgstr "" - -#: app/templates/views/rdm/modals/value-form.htm:192 -msgid "Value type" -msgstr "" - -#: app/templates/views/rdm/modals/value-form.htm:230 -msgid "Only one sort order value can be assigned to a concept." -msgstr "" - -#: app/templates/views/resource.htm:25 -#: app/templates/views/resource/resource-base.htm:24 app/views/resource.py:90 -msgid "Resource Manager" -msgstr "" - -#: app/templates/views/resource.htm:53 -msgid "Resources" -msgstr "" - -#: app/templates/views/resource.htm:93 -msgid "Create Resource" -msgstr "" - -#: app/templates/views/resource/edit-log.htm:7 -msgid "Resource History" -msgstr "" - -#: app/templates/views/resource/edit-log.htm:30 -msgid "Now" -msgstr "" - -#: app/templates/views/resource/edit-log.htm:34 -msgid "Most recent" -msgstr "" - -#: app/templates/views/resource/edit-log.htm:35 -msgid "Oldest" -msgstr "" - -#: app/templates/views/resource/edit-log.htm:36 -msgid "By editor" -msgstr "" - -#: app/templates/views/resource/edit-log.htm:37 -msgid "By edit type" -msgstr "" - -#: app/templates/views/resource/edit-log.htm:50 -msgid "Resource Record Created" -msgstr "" - -#: app/templates/views/resource/edit-log.htm:52 -msgid "Record created by Arches with unique identifer" -msgstr "" - -#: app/templates/views/resource/edit-log.htm:57 -#: app/templates/views/resource/edit-log.htm:60 -msgid "Created" -msgstr "" - -#: app/templates/views/resource/edit-log.htm:66 -#: app/templates/views/resource/edit-log.htm:169 -msgid "Tile Data" -msgstr "" - -#: app/templates/views/resource/edit-log.htm:78 -#: app/templates/views/resource/edit-log.htm:114 -msgid "Provisional Tile Data" -msgstr "" - -#: app/templates/views/resource/edit-log.htm:102 -msgid "New Tile Data" -msgstr "" - -#: app/templates/views/resource/edit-log.htm:132 -msgid "Previous Tile Data" -msgstr "" - -#: app/templates/views/resource/edit-log.htm:146 -msgid "Previous Provisional Tile Data" -msgstr "" - -#: app/templates/views/resource/edit-log.htm:162 -#: app/templates/views/resource/edit-log.htm:165 -msgid "Deleted" -msgstr "" - -#: app/templates/views/resource/edit-log.htm:184 -msgid "edited by" -msgstr "" - -#: app/templates/views/resource/editor.htm:25 -msgid "Resource Editor" -msgstr "" - -#: app/templates/views/resource/editor.htm:102 -msgid "Manage Permissions" -msgstr "" - -#: app/templates/views/resource/editor.htm:166 -msgid "Welcome to Arches' Resource Editor" -msgstr "" - -#: app/templates/views/resource/editor.htm:169 -msgid "" -"You are about to create a new resource record. Select any data card from " -"the list on the left and start entering information." -msgstr "" - -#: app/templates/views/resource/editor.htm:170 -msgid "Don't worry if you decide not to enter any data just yet." -msgstr "" - -#: app/templates/views/resource/editor.htm:171 -msgid "" -"Arches will create your new resource record once you've saved a data entry " -"card." -msgstr "" - -#: app/templates/views/resource/editor.htm:177 -msgid "No cards are available for this model." -msgstr "" - -#: app/templates/views/resource/editor.htm:243 -msgid "Add new" -msgstr "" - -#: app/templates/views/resource/editor.htm:270 -msgid "You do not have permission to edit this card." -msgstr "" - -#: app/templates/views/resource/editor/provisional-tile-manager.htm:15 -msgid "User: " -msgstr "" - -#: app/templates/views/resource/editor/provisional-tile-manager.htm:18 -msgid "Created: " -msgstr "" - -#: app/templates/views/resource/editor/provisional-tile-manager.htm:37 -msgid "Accept" -msgstr "" - -#: app/templates/views/resource/editor/provisional-tile-manager.htm:40 -msgid "Decline" -msgstr "" - -#: app/templates/views/resource/report.htm:24 -msgid "Resource Report" -msgstr "" - -#: app/templates/views/search.htm:60 -msgid "Clear Filters" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:25 -msgid "Account Settings" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:48 -msgid "User name:" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:64 -msgid "Account" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:74 -msgid "User name" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:81 -msgid "Change password" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:100 -msgid "Contact email" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:113 -msgid "Phone" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:141 -msgid "Arches user name" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:149 -msgid "This is the unique email or name that you use to log on to Arches." -msgstr "" - -#: app/templates/views/user-profile-manager.htm:165 -#: app/templates/views/user-profile-manager.htm:166 -msgid "First name" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:176 -msgid "" -"Arches uses your name and phone number to make it easier for other users to " -"find and work with you." -msgstr "" - -#: app/templates/views/user-profile-manager.htm:186 -#: app/templates/views/user-profile-manager.htm:187 -msgid "Last name" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:202 -msgid "Phone Number (optional)" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:215 -msgid "Contact Email" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:226 -msgid "" -"Arches uses your e-maill to alert you to projects and tasks assigned to you." -msgstr "" - -#: app/templates/views/user-profile-manager.htm:256 -msgid "Click here to update Two-Factor Authentication settings via email" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:346 -msgid "Notification Settings" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:354 -msgid "Trigger" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:355 -msgid "Email Notification" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:356 -msgid "Web Notification" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:365 -#: app/templates/views/user-profile-manager.htm:370 -msgid "Enable" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:375 -msgid "Exporting Search Results" -msgstr "" - -#: app/utils/data_management/resources/formats/csvfile.py:825 -#, python-brace-format -msgid "No datatype detected for {0}" -msgstr "" - -#: app/utils/data_management/resources/formats/csvfile.py:1132 -#, python-brace-format -msgid "Total resources saved: {save_count}" -msgstr "" - -#: app/utils/data_management/resources/formats/format.py:47 -#, python-brace-format -msgid "{0} of {1} resources saved" -msgstr "" - -#: app/utils/data_management/resources/formats/format.py:57 -#, python-brace-format -msgid "{0} of {1} relations saved" -msgstr "" - -#: app/utils/data_management/resources/formats/format.py:182 -msgid "No import errors" -msgstr "" - -#: app/utils/data_management/resources/formats/format.py:186 -msgid "" -"***** Errors occured during import. Some data may not have been imported. " -"For more information, check resource import error log: " -msgstr "" - -#: app/utils/data_management/resources/formats/format.py:217 -#, python-brace-format -msgid " {0}: {1}\n" -msgstr "" - -#: app/utils/data_management/resources/formats/format.py:269 -msgid "" -"Must supply either a graph id or a list of resource instance ids to export" -msgstr "" - -#: app/utils/data_management/sparql_providers/aat_provider.py:34 -msgid "Getty AAT" -msgstr "" - -#: app/utils/data_management/sparql_providers/aat_provider.py:90 -#, python-format -msgid "" -"Error in SPARQL query:
Test this query directly by " -"pasting the query below into the Getty's own SPARQL " -"endpoint at http://" -"vocab.getty.edu/sparql
%s
Query " -"returned 0 results, please check the query for " -"errors. You may need to add the appropriate " -"languages into the database for this query to work

" -msgstr "" - -#: app/utils/forms.py:64 -msgid "" -"This email address has already been registered with the " -"system. If you forgot your password, click the " -"'exit' link below and go to the login page to reset your password." -msgstr "" - -#: app/utils/forms.py:109 -msgid "Email" -msgstr "" - -#: app/utils/forms.py:113 -msgid "New password" -msgstr "" - -#: app/utils/forms.py:115 -msgid "Re-enter new password" -msgstr "" - -#: app/utils/password_validation.py:12 -#, python-brace-format -msgid "Be longer than {0} characters" -msgstr "" - -#: app/utils/password_validation.py:20 -msgid "Have at least 1 letter" -msgstr "" - -#: app/utils/password_validation.py:37 -msgid "Your password must contain at least one special character" -msgstr "" - -#: app/utils/password_validation.py:43 -msgid "Have at least 1 special character" -msgstr "" - -#: app/utils/password_validation.py:56 -msgid "Your password must contain at least one number" -msgstr "" - -#: app/utils/password_validation.py:60 -msgid "Have at least 1 number" -msgstr "" - -#: app/utils/password_validation.py:74 -msgid "Your password must contain both upper and lower case letters" -msgstr "" - -#: app/utils/password_validation.py:78 -msgid "Have least 1 upper and lower case character" -msgstr "" - -#: app/utils/response.py:56 -msgid "Could not return JSON Response" -msgstr "" - -#: app/utils/task_management.py:28 -msgid "Celery worker connection failed. Reattempting" -msgstr "" - -#: app/utils/task_management.py:30 -msgid "" -"Failed to connect to celery due to a BrokenPipeError/ConnectionResetError" -msgstr "" - -#: app/utils/task_management.py:33 -msgid "A celery broker is running, but a celery worker is not available" -msgstr "" - -#: app/utils/task_management.py:37 -msgid "Unable to connect to a celery broker" -msgstr "" - -#: app/views/api.py:79 -msgid "Failed to dispatch Kibana proxy" -msgstr "" - -#: app/views/api.py:81 -msgid "KibanaProxy failed" -msgstr "" - -#: app/views/api.py:105 -msgid "Failed to create API request" -msgstr "" - -#: app/views/api.py:121 app/views/api.py:797 app/views/resource.py:236 -#: app/views/resource.py:603 -msgid "Unnamed Resource" -msgstr "" - -#: app/views/api.py:483 -#, python-brace-format -msgid "The specified resource '{0}' does not exist. JSON-LD export failed." -msgstr "" - -#: app/views/api.py:793 app/views/resource.py:232 -msgid "New Resource" -msgstr "" - -#: app/views/api.py:1275 -msgid "Tile not found." -msgstr "" - -#: app/views/api.py:1307 -msgid "No nodegroup matching query parameters found." -msgstr "" - -#: app/views/api.py:1356 -msgid "No nodes matching query parameters found." -msgstr "" - -#: app/views/api.py:1364 -#, python-format -msgid "No graph found for graphid %s" -msgstr "" - -#: app/views/api.py:1424 -msgid "User does not have permission to edit this node." -msgstr "" - -#: app/views/auth.py:132 app/views/auth.py:155 app/views/auth.py:212 -msgid "User signup has been disabled. Please contact your administrator." -msgstr "" - -#: app/views/auth.py:169 -msgid "Signup for Arches" -msgstr "" - -#: app/views/auth.py:172 -msgid "" -"Thanks for your interest in Arches. Click on link below " -"to confirm your email address! Use your email address to login." -msgstr "" - -#: app/views/auth.py:176 -msgid "" -"This link expires in 24 hours. If you can't get to it before " -"then, don't worry, you can always try again with the " -"same email address." -msgstr "" - -#: app/views/auth.py:185 -msgid "Welcome to Arches!" -msgstr "" - -#: app/views/auth.py:190 -#, python-format -msgid "" -"An email has been sent to
%s
with a link to " -"activate your account" -msgstr "" - -#: app/views/auth.py:232 -msgid "The signup link has expired, please try signing up again. Thanks!" -msgstr "" - -#: app/views/auth.py:255 -msgid "Invalid password" -msgstr "" - -#: app/views/auth.py:257 -msgid "New password and confirmation must match" -msgstr "" - -#: app/views/auth.py:268 -msgid "Password successfully updated" -msgstr "" - -#: app/views/auth.py:308 app/views/auth.py:326 -msgid "Make sure to set your OAUTH_CLIENT_ID in settings.py" -msgstr "" - -#: app/views/auth.py:372 -msgid "Update Two-Factor Authentication Settings" -msgstr "" - -#: app/views/auth.py:374 -msgid "Click on link below to update your two-factor authentication settings." -msgstr "" - -#: app/views/auth.py:376 -msgid "" -"This link expires in 15 minutes. If you did not request this " -"change, contact your Administrator immediately." -msgstr "" - -#: app/views/auth.py:385 -msgid "Arches Two-Factor Authentication" -msgstr "" - -#: app/views/auth.py:390 -msgid "" -"There has been error sending an email to this address. Please contact your " -"system administrator." -msgstr "" - -#: app/views/concept.py:68 -msgid "Using the RDM" -msgstr "" - -#: app/views/concept.py:238 -msgid "Unable to Load SKOS File" -msgstr "" - -#: app/views/concept.py:238 -msgid "There was an issue saving the contents of the file to Arches. " -msgstr "" - -#: app/views/concept.py:274 -msgid "Unable to Delete" -msgstr "" - -#: app/views/concept.py:274 -msgid "" -"This concept or one of it's subconcepts is already in use by an existing " -"resource." -msgstr "" - -#: app/views/concept.py:327 -msgid "Success" -msgstr "" - -#: app/views/concept.py:327 -msgid "Collection successfully created from the selected concept" -msgstr "" - -#: app/views/concept.py:329 -msgid "Unable to Make Collection" -msgstr "" - -#: app/views/concept.py:329 -msgid "Unable to make a collection from the selected concept." -msgstr "" - -#: app/views/graph.py:154 -msgid "Using the Arches Designer" -msgstr "" - -#: app/views/graph.py:171 -#, python-brace-format -msgid "" -"No namespaces appear to be associated with {ontology.ontologyid} in the " -"ontologies table. This is not a problem as long as all necessary namespaces " -"are included in the ONTOLOGY_NAMESPACES setting." -msgstr "" - -#: app/views/graph.py:215 -msgid "Branch Library" -msgstr "" - -#: app/views/graph.py:215 -msgid "Find a graph branch" -msgstr "" - -#: app/views/graph.py:261 -msgid "Designing a Resource Model" -msgstr "" - -#: app/views/graph.py:263 -msgid "Designing a Branch" -msgstr "" - -#: app/views/graph.py:425 -msgid "Elasticsearch indexing error" -msgstr "" - -#: app/views/graph.py:427 -msgid "" -"If you want to change the datatype of an existing node.\n" -" Delete and then re-create the node, or export the branch " -"then edit the datatype and re-import the branch." -msgstr "" - -#: app/views/graph.py:546 -msgid "Managing Functions" -msgstr "" - -#: app/views/manifest_manager.py:300 -msgid "IIIF server proxy not configured" -msgstr "" - -#: app/views/manifest_manager.py:306 -msgid "Manifest Validation Error" -msgstr "" - -#: app/views/map.py:134 -msgid "Tileserver proxy not configured" -msgstr "" - -#: app/views/resource.py:92 -msgid "Creating Resources" -msgstr "" - -#: app/views/resource.py:350 -msgid "Managing System Settings" -msgstr "" - -#: app/views/resource.py:352 -msgid "Using the Resource Editor" -msgstr "" - -#: app/views/resource.py:357 -msgid "Unable to Delete Resource" -msgstr "" - -#: app/views/resource.py:358 -msgid "" -"User does not have permissions to delete this instance because the instance " -"or its data is restricted" -msgstr "" - -#: app/views/resource.py:367 -msgid "Unable to delete. Please verify the model is not currently published." -msgstr "" - -#: app/views/resource.py:547 app/views/resource.py:553 -msgid "Resource Created" -msgstr "" - -#: app/views/resource.py:548 -msgid "Resource Deleted" -msgstr "" - -#: app/views/resource.py:549 -msgid "Tile Deleted" -msgstr "" - -#: app/views/resource.py:550 -msgid "Tile Created" -msgstr "" - -#: app/views/resource.py:551 -msgid "Tile Updated" -msgstr "" - -#: app/views/resource.py:552 -msgid "Edit Deleted" -msgstr "" - -#: app/views/resource.py:771 -msgid "Failed to fetch resource instance descriptors" -msgstr "" - -#: app/views/resource.py:788 -msgid "No active report template is available for this resource." -msgstr "" - -#: app/views/resource.py:903 -msgid "Unable to delete. Relationship does not exist" -msgstr "" - -#: app/views/resource.py:966 app/views/resource.py:980 app/views/tile.py:151 -msgid "Unable to save. Please verify the model is not currently published." -msgstr "" - -#: app/views/search.py:109 -msgid "Searching the Database" -msgstr "" - -#: app/views/search.py:228 -#, python-brace-format -msgid "" -"Your search exceeds the {download_limit} instance download " -"limit. Anonymous users cannot run an export exceeding this " -"limit. Please sign in with your {app_name} account or " -"refine your search" -msgstr "" - -#: app/views/search.py:244 -#, python-brace-format -msgid "" -"{total} instances have been submitted for export. Click " -"the Bell icon to check for a link to download your data" -msgstr "" - -#: app/views/search.py:249 -#, python-brace-format -msgid "" -"Your search exceeds the {download_limit} instance download limit. Please " -"refine your search" -msgstr "" - -#: app/views/search.py:270 -msgid "" -"Either no instances were identified for export or no resources have " -"exportable geometry nodes Please confirm that the models of " -"instances you would like to export have geometry nodes and " -"that those nodes are set as exportable" -msgstr "" - -#: app/views/search.py:401 -msgid "There was an error retrieving the search results" -msgstr "" - -#: app/views/search.py:500 -msgid "Downloading" -msgstr "" - -#: app/views/search.py:502 -msgid "The requested file is no longer available" -msgstr "" - -#: app/views/tile.py:72 -msgid "Saving tile failed" -msgstr "" - -#: app/views/tile.py:124 -msgid "Unable to save. Please verify the model is currently unpublished." -msgstr "" - -#: app/views/tile.py:133 app/views/tile.py:235 -msgid "This tile is no longer available" -msgstr "" - -#: app/views/tile.py:133 -msgid "It was likely deleted by another user" -msgstr "" - -#: app/views/tile.py:148 -msgid "Unable to save. Please verify your input is valid" -msgstr "" - -#: app/views/tile.py:154 -msgid "Unable to save." -msgstr "" - -#: app/views/tile.py:181 app/views/tile.py:184 app/views/tile.py:259 -#: app/views/tile.py:261 app/views/tile.py:265 app/views/tile.py:286 -msgid "Request Failed" -msgstr "" - -#: app/views/tile.py:181 -msgid "Unable to Save. Verify model status is active" -msgstr "" - -#: app/views/tile.py:184 app/views/tile.py:259 -msgid "Permission Denied" -msgstr "" - -#: app/views/tile.py:235 -msgid "It was likely already deleted by another user" -msgstr "" - -#: app/views/tile.py:261 -msgid "Unable to delete. Verify model status is active" -msgstr "" - -#: app/views/tile.py:265 -msgid "You do not have permissions to delete a tile with authoritative data." -msgstr "" - -#: app/views/user.py:47 -msgid "Not yet logged in" -msgstr "" - -#: app/views/user.py:110 app/views/user.py:145 -msgid "Profile Editing" -msgstr "" - -#: app/views/user.py:167 -msgid "Your " -msgstr "" - -#: management/commands/load_ontology.py:84 -msgid "" -"You must supply an ontology_config.json within your ontology source " -"directory." -msgstr "" - -#: management/commands/load_ontology.py:85 -#, python-brace-format -msgid "'{config_file}' was not found." -msgstr "" - -#: management/commands/load_ontology.py:89 -msgid "You must supply a version number using the -vn/--version argument." -msgstr "" diff --git a/arches/locale/en_GB/LC_MESSAGES/django.mo b/arches/locale/en_GB/LC_MESSAGES/django.mo deleted file mode 100644 index ee56c394f4d5cb2407ca9208aba766e0037699df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 421 zcmYL^Pfx-y9ELG^+R?Lznt0IY563((3NuVraB=@K28rG()HxmP(iWp1#INUPu~Q>& z@}zD0w0-+^c<|XV*)tp&P7M2o3qu>%@M<;(W^A4RWKz7am4, YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-08-30 19:07-0700\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: app/datatypes/base.py:39 -#, python-brace-format -msgid "{0} error, {1} {2} - {3}. Unable to save." -msgstr "" - -#: app/datatypes/base.py:199 -msgid "Multiple provisional edits. Returning first edit" -msgstr "" - -#: app/datatypes/base.py:203 -msgid "Tile has no authoritative or provisional data" -msgstr "" - -#: app/datatypes/concept_types.py:140 -msgid "" -"The widget used to save this data appears to be incorrect for this datatype. " -"Contact system admin to resolve" -msgstr "" - -#: app/datatypes/concept_types.py:148 -msgid "This is an invalid concept prefLabel, or an incomplete UUID" -msgstr "" - -#: app/datatypes/concept_types.py:156 -msgid "This UUID is not an available concept value" -msgstr "" - -#: app/datatypes/datatypes.py:104 -msgid "This is not a string" -msgstr "" - -#: app/datatypes/datatypes.py:328 -msgid "Not a properly formatted number" -msgstr "" - -#: app/datatypes/datatypes.py:419 -msgid "Not of type boolean" -msgstr "" - -#: app/datatypes/datatypes.py:500 -msgid "" -"Incorrect format. Confirm format is in settings.DATE_FORMATS or set the " -"format in settings.DATE_IMPORT_EXPORT_FORMAT." -msgstr "" - -#: app/datatypes/datatypes.py:564 -#, python-brace-format -msgid "{value} is an invalid date format" -msgstr "" - -#: app/datatypes/datatypes.py:665 -msgid "" -"Incorrect Extended Date Time Format. See http://www.loc.gov/standards/" -"datetime/ for supported formats" -msgstr "" - -#: app/datatypes/datatypes.py:718 -msgid "" -"Only dates that specify an exact year, month, and day can be used with the " -"\"=\" operator" -msgstr "" - -#: app/datatypes/datatypes.py:727 -msgid "" -"Only dates that specify an exact year, " -"month, and day can be used with the \">" -"\", \"<\", \">=\", and \"<=\" operators" -msgstr "" - -#: app/datatypes/datatypes.py:739 -msgid "Invalid date specified." -msgstr "" - -#: app/datatypes/datatypes.py:806 -msgid "Unable to serialize some geometry features" -msgstr "" - -#: app/datatypes/datatypes.py:1398 -msgid "File type not permitted" -msgstr "" - -#: app/datatypes/datatypes.py:1424 -#, python-brace-format -msgid "This node has a limit of {0} files. Please reduce files." -msgstr "" - -#: app/datatypes/datatypes.py:1432 -#, python-brace-format -msgid "" -"This node has a file-size limit of {0}. Please reduce file size or contact " -"your sysadmin." -msgstr "" - -#: app/datatypes/datatypes.py:1440 -#, python-brace-format -msgid "The file \"{0}\" does not exist in \"{1}\"" -msgstr "" - -#: app/datatypes/datatypes.py:1444 -#, python-brace-format -msgid "datatype: {0}, value: {1} - {2} ." -msgstr "" - -#: app/datatypes/datatypes.py:1503 app/datatypes/datatypes.py:1590 -msgid "File does not exist" -msgstr "" - -#: app/datatypes/datatypes.py:1622 -msgid "The file url is invalid" -msgstr "" - -#: app/datatypes/datatypes.py:1624 -msgid "A file is not available for this tile" -msgstr "" - -#: app/datatypes/datatypes.py:1626 -msgid "This file's fileid is not a valid UUID" -msgstr "" - -#: app/datatypes/datatypes.py:1757 -#, python-brace-format -msgid "No domain option found for option id {0}, in node conifg: {1}" -msgstr "" - -#: app/datatypes/datatypes.py:1806 -msgid "" -"Invalid domain id. Please check the node this value is mapped to for a list " -"of valid domain ids." -msgstr "" - -#: app/datatypes/datatypes.py:2122 -#, python-brace-format -msgid "The related resource with id '{0}' is not in the system." -msgstr "" - -#: app/etl_modules/base_import_module.py:33 -msgid "Delegating load reversal to Celery task" -msgstr "" - -#: app/etl_modules/branch_csv_importer.py:218 -msgid "Legacy id(s) already exist. Legacy ids must be unique" -msgstr "" - -#: app/etl_modules/branch_csv_importer.py:243 -#: app/etl_modules/import_single_csv.py:208 -msgid "Failed to complete load" -msgstr "" - -#: app/etl_modules/branch_csv_importer.py:244 -#: app/etl_modules/import_single_csv.py:209 -msgid "Unable to insert record into staging table" -msgstr "" - -#: app/etl_modules/branch_csv_importer.py:279 -msgid "Invalid excel file/zip specified" -msgstr "" - -#: app/etl_modules/branch_csv_importer.py:280 -msgid "Upload a valid excel file" -msgstr "" - -#: app/etl_modules/branch_csv_importer.py:307 -msgid "Unable to initialize load" -msgstr "" - -#: app/etl_modules/branch_csv_importer.py:322 -#: app/etl_modules/import_single_csv.py:161 -msgid "Delegating load to Celery task" -msgstr "" - -#: app/etl_modules/branch_csv_importer.py:326 -#: app/etl_modules/import_single_csv.py:165 -msgid "delegated_to_celery" -msgstr "" - -#: app/etl_modules/branch_csv_importer.py:329 -#: app/etl_modules/import_single_csv.py:168 -msgid "" -"Cannot start process. Unable to run process as a background task at this " -"time." -msgstr "" - -#: app/etl_modules/branch_csv_importer.py:335 -#: app/etl_modules/import_single_csv.py:174 -#: app/templates/views/rdm/modals/import-concept-form.htm:40 -msgid "Error" -msgstr "" - -#: app/etl_modules/import_single_csv.py:104 -msgid "No csv file found" -msgstr "" - -#: app/etl_modules/import_single_csv.py:105 -msgid "Upload a valid csv file" -msgstr "" - -#: app/etl_modules/import_single_csv.py:143 -msgid "No valid node is selected" -msgstr "" - -#: app/etl_modules/import_single_csv.py:145 -msgid "Only one column should be selected for id" -msgstr "" - -#: app/functions/primary_descriptors.py:67 -#, python-brace-format -msgid "Invalid nodegroupid, {0}, participating in descriptor function." -msgstr "" - -#: app/functions/primary_descriptors.py:69 app/views/resource.py:745 -#: app/views/search.py:387 -msgid "Undefined" -msgstr "" - -#: app/models/concept.py:153 -msgid "Only include values for include or exclude, but not both" -msgstr "" - -#: app/models/concept.py:844 -#, python-format -msgid "Invalid subconcept definition: %s" -msgstr "" - -#: app/models/concept.py:852 -#, python-format -msgid "Invalid related concept definition: %s" -msgstr "" - -#: app/models/concept.py:863 -#, python-format -msgid "Invalid value definition: %s" -msgstr "" - -#: app/models/concept.py:1267 -msgid "Need to include values when creating a collection" -msgstr "" - -#: app/models/concept.py:1375 -msgid "" -"Index of label failed. Index type (scheme id) could not be derived from the " -"label." -msgstr "" - -#: app/models/fields/i18n.py:166 -msgid "A I18n_TextField object" -msgstr "" - -#: app/models/fields/i18n.py:357 -msgid "A I18n_JSONField object" -msgstr "" - -#: app/models/graph.py:77 -msgid "New Node" -msgstr "" - -#: app/models/graph.py:267 -msgid "Top Node" -msgstr "" - -#: app/models/graph.py:491 -#, python-brace-format -msgid "" -"Duplicate node alias: \"{0}\". All aliases must be unique in a resource " -"model." -msgstr "" - -#: app/models/graph.py:495 -#, python-brace-format -msgid "Fail to save node \"{0}\"." -msgstr "" - -#: app/models/graph.py:554 -#, python-brace-format -msgid "" -"Your resource model: {0}, already has instances saved. You cannot delete a " -"Resource Model with instances." -msgstr "" - -#: app/models/graph.py:703 -#, python-brace-format -msgid "" -"Your resource model: {0}, already has instances saved. You cannot modify a " -"Resource Model with instances." -msgstr "" - -#: app/models/graph.py:735 -msgid "Ontology rules don't allow this node to be appended" -msgstr "" - -#: app/models/graph.py:1002 -#, python-brace-format -msgid "" -"Your resource model: {self.name}, already has instances " -"saved. You cannot delete nodes from a Resource " -"Model with instances." -msgstr "" - -#: app/models/graph.py:1037 -msgid "The graph you wish to append needs to define an ontology" -msgstr "" - -#: app/models/graph.py:1050 -msgid "Ontology rules don't allow this graph to be appended" -msgstr "" - -#: app/models/graph.py:1522 -#, python-brace-format -msgid "" -"Your resource model: {self.name}, already has instances " -"saved. You cannot modify a Resource Model " -"with instances." -msgstr "" - -#: app/models/graph.py:1541 -#, python-brace-format -msgid "Duplicate node name: \"{0}\". All node names in a card must be unique." -msgstr "" - -#: app/models/graph.py:1550 -#, python-brace-format -msgid "Duplicate node name: \"{0}\". All sibling node names must be unique." -msgstr "" - -#: app/models/graph.py:1586 -msgid "" -"The top node of your resource graph: {self.root.name} needs to be a " -"collector. Hint: check that nodegroup_id of your " -"resource node(s) are not null." -msgstr "" - -#: app/models/graph.py:1592 -msgid "The top node of your resource graph must have a datatype of 'semantic'." -msgstr "" - -#: app/models/graph.py:1597 -msgid "" -"If your graph contains more than one node and is not a resource the root " -"must be a collector." -msgstr "" - -#: app/models/graph.py:1602 -msgid "Field name must not be blank." -msgstr "" - -#: app/models/graph.py:1604 -msgid "Field name must contain only alpha-numeric characters or underscores." -msgstr "" - -#: app/models/graph.py:1606 -msgid "Field name cannot begin with an underscore or number" -msgstr "" - -#: app/models/graph.py:1612 -#, python-brace-format -msgid "Field name must be unique to the graph; '{fieldname}' already exists." -msgstr "" - -#: app/models/graph.py:1634 -#, python-brace-format -msgid "A valid {0} ontology class must be selected" -msgstr "" - -#: app/models/graph.py:1637 -#, python-brace-format -msgid "'{0}' is not a valid {1} ontology class" -msgstr "" - -#: app/models/graph.py:1645 -msgid "" -"You must specify an ontology property. Your graph isn't semantically " -"valid. Entity domain '{edge.domainnode." -"ontologyclass}' and Entity range '{edge." -"rangenode.ontologyclass}' can not be related via Property '{edge." -"ontologyproperty}'." -msgstr "" - -#: app/models/graph.py:1664 -msgid "" -"Your graph isn't semantically valid. Entity domain '{edge.domainnode." -"ontologyclass}' and Entity range '{edge." -"rangenode.ontologyclass}' cannot be related " -"via Property '{edge.ontologyproperty}'." -msgstr "" - -#: app/models/graph.py:1672 -#, python-brace-format -msgid "" -"'{0}' is not found in the {1} ontology or is not a valid ontology property " -"for Entity domain '{2}'." -msgstr "" - -#: app/models/graph.py:1681 -msgid "" -"You have assigned ontology classes to your graph nodes but not assigned an " -"ontology to your graph." -msgstr "" - -#: app/models/graph.py:1702 -msgid "The json-ld context you supplied wasn't formatted correctly." -msgstr "" - -#: app/models/graph.py:1707 -#, python-brace-format -msgid "Another resource model already uses the slug '{self.slug}'" -msgstr "" - -#: app/models/graph.py:1753 -msgid "Graph Validation Error" -msgstr "" - -#: app/models/models.py:435 -msgid "Only resource models may be edited - branches are not editable" -msgstr "" - -#: app/models/models.py:437 -msgid "" -"This Model is currently unpublished and not available for instance creation." -msgstr "" - -#: app/models/resource.py:785 -msgid "Published Model Error" -msgstr "" - -#: app/models/resource.py:795 -msgid "Unpublished Model Error" -msgstr "" - -#: app/models/tile.py:276 -msgid "" -"This card violates a unique constraint. The " -"following value is already saved: " -msgstr "" - -#: app/models/tile.py:297 -#, python-brace-format -msgid "" -"Error checking for missing node. Nodeid: {nodeid} with value: {value}, not " -"in nodes. You may have a node in your business data that " -"no longer exists in any graphs." -msgstr "" - -#: app/models/tile.py:302 -msgid "This card requires values for the following: " -msgstr "" - -#: app/models/tile.py:325 -#, python-brace-format -msgid "{0}" -msgstr "" - -#: app/models/tile.py:645 app/models/tile.py:656 app/models/tile.py:673 -msgid "No associated functions or other TypeError raised by a function" -msgstr "" - -#: app/models/tile.py:711 -msgid "Tile Validation Error" -msgstr "" - -#: app/models/tile.py:722 -msgid "Tile Cardinaltiy Error" -msgstr "" - -#: app/search/base_index.py:182 -msgid "Search Index Error:" -msgstr "" - -#: app/search/base_index.py:192 -msgid "Search Index Not Defined Error:" -msgstr "" - -#: app/search/base_index.py:193 -#, python-format -msgid "" -"The index \"%s\" is not defined in settings.ELASTICSEARCH_CUSTOM_INDEXES" -msgstr "" - -#: app/search/components/map_filter.py:75 -msgid "Feature geometry is not defined" -msgstr "" - -#: app/search/elasticsearch_dsl_builder.py:289 -msgid "" -"You need at least one of the following operators in a Range expression: gte, " -"gt, lte, or lt" -msgstr "" - -#: app/search/elasticsearch_dsl_builder.py:291 -msgid "You can only use one of either: gte or gt" -msgstr "" - -#: app/search/elasticsearch_dsl_builder.py:293 -msgid "You can only use one of either: lte or lt" -msgstr "" - -#: app/search/elasticsearch_dsl_builder.py:377 -msgid "You need to specify either a \"field\" or a \"script\"" -msgstr "" - -#: app/search/elasticsearch_dsl_builder.py:379 -msgid "You need to specify a name for your aggregation" -msgstr "" - -#: app/search/elasticsearch_dsl_builder.py:381 -msgid "You need to specify an aggregation type" -msgstr "" - -#: app/search/elasticsearch_dsl_builder.py:570 -msgid "You need to specify a path for your nested aggregation" -msgstr "" - -#: app/search/search_export.py:212 -#, python-brace-format -msgid "Shapefile are fieldnames required for the following nodes: {0}" -msgstr "" - -#: app/tasks.py:31 -msgid "files_deleted" -msgstr "" - -#: app/tasks.py:84 -msgid "" -"Your search {} is ready for download. You have 24 hours to access this file, " -"after which we'll automatically remove it." -msgstr "" - -#: app/tasks.py:88 -msgid "" -"Hello,\n" -"Your request to download a set of search results is now ready." -msgstr "" - -#: app/tasks.py:90 -msgid "Download Now" -msgstr "" - -#: app/tasks.py:91 app/tasks.py:148 -msgid "Thank you" -msgstr "" - -#: app/tasks.py:140 -msgid "Resources have completed loading." -msgstr "" - -#: app/tasks.py:144 -msgid "" -"Hello,\n" -"Your package has successfully loaded into your Arches project." -msgstr "" - -#: app/tasks.py:147 -msgid "Log me in" -msgstr "" - -#: app/tasks.py:213 app/tasks.py:235 -msgid "Completed" -msgstr "" - -#: app/tasks.py:213 app/tasks.py:220 app/tasks.py:235 app/tasks.py:242 -msgid "Failed" -msgstr "" - -#: app/tasks.py:214 -msgid "Branch Excel Import: {} [{}]" -msgstr "" - -#: app/tasks.py:236 -msgid "Single CSV Import: {} [{}]" -msgstr "" - -#: app/templates/base-manager.htm:42 app/templates/change_password.htm:46 -#: app/templates/javascript.htm:404 -#: app/templates/views/rdm/modals/import-concept-form.htm:52 -#: app/templates/views/rdm/modals/import-scheme-form.htm:53 -#: app/templates/views/rdm/modals/manage-parent-form.htm:57 -#: app/templates/views/rdm/modals/related-concept-form.htm:67 -#: app/templates/views/rdm/modals/related-member-form.htm:66 -#: app/templates/views/rdm/modals/value-form.htm:63 -#: app/templates/views/rdm/modals/value-form.htm:142 -#: app/templates/views/rdm/modals/value-form.htm:220 -#: app/templates/views/user-profile-manager.htm:156 -msgid "Cancel" -msgstr "" - -#: app/templates/base-manager.htm:45 -msgid "OK" -msgstr "" - -#: app/templates/base-manager.htm:72 app/templates/rdm.htm:64 -msgid "Tools" -msgstr "" - -#: app/templates/base-manager.htm:80 -msgid "Manage System Settings" -msgstr "" - -#: app/templates/base-manager.htm:86 -#: app/templates/help/system-settings-help.htm:11 app/views/api.py:799 -#: app/views/resource.py:239 -msgid "System Settings" -msgstr "" - -#: app/templates/base-manager.htm:90 -msgid "System Settings Graph" -msgstr "" - -#: app/templates/base-manager.htm:101 app/templates/base-manager.htm:363 -#: app/templates/javascript.htm:386 app/templates/views/search.htm:23 -#: app/views/search.py:105 -msgid "Search" -msgstr "" - -#: app/templates/base-manager.htm:116 -msgid "Add New Resource" -msgstr "" - -#: app/templates/base-manager.htm:149 app/views/graph.py:151 -msgid "Arches Designer" -msgstr "" - -#: app/templates/base-manager.htm:155 app/templates/index.htm:399 -#: app/templates/views/graph.htm:64 -msgid "Resource Models" -msgstr "" - -#: app/templates/base-manager.htm:159 app/templates/views/graph.htm:65 -msgid "Branches" -msgstr "" - -#: app/templates/base-manager.htm:171 -#: app/templates/views/map-layer-manager.htm:26 app/views/map.py:96 -#: app/views/map.py:98 -msgid "Map Layer Manager" -msgstr "" - -#: app/templates/base-manager.htm:177 -#: app/templates/help/map-manager-help.htm:11 -#: app/templates/views/map-layer-manager.htm:88 -msgid "Resource Layers" -msgstr "" - -#: app/templates/base-manager.htm:182 -#: app/templates/help/map-manager-help.htm:31 app/templates/javascript.htm:439 -#: app/templates/views/map-layer-manager.htm:89 -msgid "Basemaps" -msgstr "" - -#: app/templates/base-manager.htm:187 -#: app/templates/help/map-manager-help.htm:46 app/templates/javascript.htm:440 -#: app/templates/javascript.htm:482 -#: app/templates/views/map-layer-manager.htm:90 -msgid "Overlays" -msgstr "" - -#: app/templates/base-manager.htm:201 app/templates/views/edit-history.htm:5 -#: app/views/resource.py:572 -msgid "Recent Edits" -msgstr "" - -#: app/templates/base-manager.htm:214 app/views/user.py:107 -#: app/views/user.py:142 -msgid "Profile Manager" -msgstr "" - -#: app/templates/base-manager.htm:223 -msgid "Modules" -msgstr "" - -#: app/templates/base-manager.htm:232 app/templates/rdm.htm:9 -#: app/views/concept.py:67 -msgid "Reference Data Manager" -msgstr "" - -#: app/templates/base-manager.htm:274 -msgid "DEBUG" -msgstr "" - -#: app/templates/base-manager.htm:289 app/templates/index.htm:87 -#: app/templates/javascript.htm:735 app/templates/views/graph.htm:109 -#: app/templates/views/rdm/concept-report.htm:26 -#: app/templates/views/rdm/concept-report.htm:50 -msgid "Manage" -msgstr "" - -#: app/templates/base-manager.htm:323 -msgid "Profile" -msgstr "" - -#: app/templates/base-manager.htm:323 app/templates/base-manager.htm:326 -msgid "Login" -msgstr "" - -#: app/templates/base-manager.htm:328 -msgid "Welcome" -msgstr "" - -#: app/templates/base-manager.htm:349 app/templates/base-manager.htm:422 -msgid "Notifications" -msgstr "" - -#: app/templates/base-manager.htm:374 -msgid "My Recent Edits" -msgstr "" - -#: app/templates/base-manager.htm:383 -msgid "Edit Resource" -msgstr "" - -#: app/templates/base-manager.htm:391 -msgid "Print" -msgstr "" - -#: app/templates/base-manager.htm:400 app/templates/javascript.htm:340 -#: app/templates/views/graph/card-configuration/card-form-preview.htm:54 -#: app/templates/views/graph/card-configuration/card-form-preview.htm:110 -msgid "Help" -msgstr "" - -#: app/templates/base-manager.htm:411 -msgid "Logout" -msgstr "" - -#: app/templates/base-manager.htm:426 app/templates/base-manager.htm:448 -#: app/templates/login.htm:73 app/templates/rdm.htm:78 -#: app/templates/views/rdm/concept-report.htm:42 -#: app/templates/views/rdm/concept-report.htm:59 -#: app/templates/views/rdm/modals/add-child-form.htm:49 -#: app/templates/views/rdm/modals/add-collection-form.htm:31 -#: app/templates/views/rdm/modals/add-scheme-form.htm:37 -#: app/templates/views/rdm/modals/delete-collection-form.htm:43 -#: app/templates/views/rdm/modals/delete-scheme-form.htm:43 -#: app/templates/views/rdm/modals/export-scheme-form.htm:26 -msgid "Close" -msgstr "" - -#: app/templates/base-manager.htm:444 -msgid "My Edit History" -msgstr "" - -#: app/templates/base-manager.htm:471 -msgid "Close Help" -msgstr "" - -#: app/templates/base-manager.htm:482 -msgid "for more documentation, visit" -msgstr "" - -#: app/templates/change_password.htm:23 -msgid "Change your password" -msgstr "" - -#: app/templates/change_password.htm:47 -msgid "Change Password" -msgstr "" - -#: app/templates/change_password.htm:50 app/templates/signup.htm:133 -msgid "Your password must:" -msgstr "" - -#: app/templates/errors/404.htm:11 app/templates/errors/500.htm:11 -#: app/templates/javascript.htm:206 -msgid "Arches" -msgstr "" - -#: app/templates/errors/404.htm:19 app/templates/errors/500.htm:19 -msgid "Oops!" -msgstr "" - -#: app/templates/errors/404.htm:20 -msgid "Page Not Found!" -msgstr "" - -#: app/templates/errors/404.htm:22 -msgid "" -"Sorry, but the page you are looking for has not been found on our server." -msgstr "" - -#: app/templates/errors/404.htm:26 app/templates/errors/500.htm:26 -msgid "Back to Homepage" -msgstr "" - -#: app/templates/errors/500.htm:20 -msgid "Internal Server Error!" -msgstr "" - -#: app/templates/errors/500.htm:22 -msgid "Something went wrong and we couldn't process your request." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:6 -msgid "Cards Tab" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:10 -#: app/templates/help/function-help.htm:7 -#: app/templates/help/graph-tab-help.htm:10 -#: app/templates/help/permissions-tab-help.htm:10 -msgid "Overview" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:14 -msgid "" -"In this tab you will configure the user-facing aspects of your graph. There " -"are multiple levels to doing so, which are reflected in the levels of the " -"graph tree. Report Configuration where you choose the " -"template for the resource report, Card Configuration where " -"you'll specify card-related settings, and the Widget Manager where you will choose and configure the data entry widget for each " -"node in the graph." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:19 -#: app/templates/views/graph-designer.htm:307 -msgid "Report Configuration" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:23 -msgid "" -"Each Resource Model must be configured with a report template. Reports show " -"data for all nodes in a resource instance for which the user has Read " -"permissions." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:24 -msgid "No Header Template" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:25 -msgid "Lists all node data, no special header at the top of the page." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:26 -msgid "Image Header Template" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:27 -msgid "" -"Use this template for Resource Models that will be be primarily used to " -"record images." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:30 app/templates/javascript.htm:535 -msgid "Included Image Nodes" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:31 -msgid "" -"Choose one or more nodes that hold images in this Resource Model. These " -"images will be presented as a slideshow in the report header." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:34 -msgid "Map Header Template" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:35 -msgid "" -"Use this template for Resource Models that will be be primarily used to " -"record resources that have a geo-location. There are number of settings you " -"should fill out to control the appearance of the map in the header." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:38 -msgid "Map Controls" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:39 -msgid "Choose whether or not the user has access to the Map Tools." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:42 -msgid "Position" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:43 -msgid "" -"You can set the position by panning the map. On report load, the map will " -"automatically pan and zoom to the resource geo-location if there is one " -"(also see Default Value below). Pitch values are 0-60 " -"(higher = more oblique), Bearing values can be positive or " -"negative (270 faces west; -180 faces south). Use ctrl + click " -"then pan the map to change Pitch and Bearing." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:46 -msgid "Zoom" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:47 -msgid "" -"Zoom levels go from 0 (zoomed out) to 20 (zoomed in). On report load, the " -"map will automatically pan and zoom to the resource geo-location if there is " -"one." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:50 -msgid "Geocoder" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:51 -msgid "" -"Configure which geocoding service the address search bar will use, and " -"whether or not to show the bar at all." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:54 -msgid "Resource Properties" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:55 -msgid "Configure some styling options for how the resource appears on the map." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:58 -#: app/templates/help/cards-tab-help.htm:127 app/templates/javascript.htm:236 -#: app/templates/javascript.htm:313 -msgid "Default Value" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:59 -msgid "" -"Choose whether the map should zoom to the resource geo-location if available " -"or the geo-location of the user." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:67 -#: app/templates/views/graph/graph-designer/card-configuration.htm:7 -msgid "Card Configuration" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:71 -msgid "" -"The settings for Cards are mostly related yo how you want a user to see the " -"card, but some have a more direct bearing on data structure as well. The " -"preview shows what the card will look like to users." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:74 -#: app/templates/views/graph/graph-designer/card-configuration.htm:18 -msgid "Card Type" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:75 -msgid "" -"Choose the Card Component to use. Only the Default Card is available " -"initially, but custom Card Components are a way for developers to enhance " -"the user experience." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:78 -#: app/templates/views/graph/graph-designer/card-configuration.htm:28 -msgid "Card Title" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:79 -msgid "Users will see this title when performing data entry." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:82 -#: app/templates/help/graph-tab-help.htm:32 app/templates/javascript.htm:228 -#: app/templates/views/graph/graph-designer/card-configuration.htm:37 -#: app/templates/views/graph/graph-designer/graph-settings.htm:44 -#: app/templates/views/graph/graph-designer/graph-settings.htm:48 -msgid "Subtitle" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:83 -msgid "Users will see this subtitle when performing data entry." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:86 -msgid "CSS Classes" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:87 -msgid "" -"You can add your own CSS classes to this Card to customize its look and " -"feel. Define these classes in your project's \"package.css\" file." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:90 -msgid "Make Card Visible" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:91 -msgid "" -"Show this Card by default. Developers could hide a card initially, and show " -"it based other variables." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:94 -msgid "Allow Multiple Values" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:95 -msgid "" -"While certain node data types allow the storage of multiple values in a " -"single node, \"concept-list\" for example, this setting is how you control " -"cardinality at a higher level. When determining whether or not to use this " -"setting, we recommend testing out the resource editor interface directly." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:98 -msgid "Enable Card-level Help" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:99 -msgid "" -"To aid data entry users when using this Card, you may want to add some extra " -"guidance. Enable setting to do so, and design the content of this guidance " -"with the Card-Level Help menu." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:106 -msgid "Widget Management" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:110 -msgid "" -"Widgets are data entry helpers for each node that collects information; it's " -"often easier to pick a date from a calendar than to type it in, for example. " -"Generally, the data type of the node will determine which Widget template is " -"used. However, in some cases you will have a choice: For example, in the " -"case of a concept node, you can choose a dropdown menu or a set " -"of radio buttons. Similarly, for a string node you can choose a " -"basic text box or a rich text editor." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:111 -msgid "" -"Depending on the Widget, there are more settings you can configure, most of " -"which are optional and all come with acceptable defaults." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:112 -msgid "Common Settings" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:115 -#: app/templates/views/graph/graph-designer/widget-configuration.htm:18 -#: app/templates/views/graph/graph-designer/widget-configuration.htm:21 -msgid "Widget Label" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:116 -msgid "" -"This will be used in the user interface. The default label comes from the " -"node name." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:119 -#: app/templates/views/graph-designer.htm:312 -#: app/templates/views/graph/graph-designer/widget-configuration.htm:27 -msgid "Template" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:120 -msgid "" -"The list of available Widgets is determined by the node's data type, though " -"developers can create new Widgets." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:123 app/templates/javascript.htm:199 -msgid "Placeholder" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:124 -msgid "Shown in the input area before the user has entered anything." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:128 -msgid "If desired, you can define a default value." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:131 -msgid "Other Settings by Widget" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:134 -msgid "map-widget" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:135 -msgid "" -"The map widget allows for a good deal of customization, from the default " -"center and zoom level to default layers." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:138 -msgid "datepicker-widget" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:139 -msgid "" -"This widget is used for the normal date data type, not the extended date/" -"time format data type. You can set minumum or maximum dates, change how " -"specific the calendar is when user first opens it, or set the display of the " -"date. However, note that real YYYY-MM-DD dates are stored in the database " -"whether no matter what display format you have chosed for this widget. So if " -"you have set YYYY for the Date Format and a user enters " -"\"2005\", then \"2005-01-01\" will be saved in the database." -msgstr "" - -#: app/templates/help/function-help.htm:11 -msgid "" -"\n" -"

Functions are discrete operations that can be associated with " -"a Resource Model and are run on specific nodes or cards whenever a user " -"clicks creates or modify's a Resource. Here in the Function Manager you will " -"associate Functions with this Resource Model and configure them " -"appropriately.

\n" -"

To add a Function to this Resource Model, click on it in " -"Function Library, and notice that it is added to the list of Selected " -"Functions. To delete a Function, use the symbol in the upper right corner.\n" -" " -msgstr "" - -#: app/templates/help/function-help.htm:16 -msgid "adding a function - click to view" -msgstr "" - -#: app/templates/help/function-help.htm:16 -#: app/templates/help/graph-tab-help.htm:112 -#: app/templates/help/permissions-tab-help.htm:47 -#: app/templates/help/rdm-help.htm:33 app/templates/help/rdm-help.htm:47 -#: app/templates/help/rdm-help.htm:61 app/templates/help/rdm-help.htm:75 -#: app/templates/help/rdm-help.htm:89 -#: app/templates/help/resource-editor-help.htm:18 -#: app/templates/help/resource-editor-help.htm:31 -#: app/templates/help/resource-editor-help.htm:53 -#: app/templates/help/search-help.htm:8 app/templates/help/search-help.htm:30 -#: app/templates/help/search-help.htm:39 app/templates/help/search-help.htm:49 -#: app/templates/help/search-help.htm:65 app/templates/help/search-help.htm:88 -msgid "open in new tab" -msgstr "" - -#: app/templates/help/function-help.htm:19 -#, python-format -msgid "" -"\n" -"

Arches comes with three default functions (see below). " -"However, functions are envisioned as the hook through which developers can " -"easily customize Arches capabilities, because new Functions can be added to " -"your individual Arches installation. Learn more here.

\n" -" " -msgstr "" - -#: app/templates/help/function-help.htm:26 -msgid "Define Resource Descriptors" -msgstr "" - -#: app/templates/help/function-help.htm:31 -msgid "" -"This function will generate one or more descriptors for Resources that are " -"created with this Resource Model. These descriptors are used throughout the " -"database interface, but are not saved as part of the resource. This gives " -"you control over the way Resources are identified and described in search " -"results and elsewhere." -msgstr "" - -#: app/templates/help/function-help.htm:32 -msgid "" -"Once added to the Resource Model, use the appropriate tab to configure a " -"descriptor template. Choose a card, and variables corresponding to each node " -"in that card will be added to the template, demarcated with < >. You can rearrange these variables and add text to customize the " -"descriptor. When you have set the descriptors, click Re-Index to update any existing resources in your database." -msgstr "" - -#: app/templates/help/function-help.htm:33 -msgid "" -"If there are multiple instances of a given card in a Resource, the first one " -"added will be used to create these descriptors. To manually change this, " -"edit the Resource in question and drag the desired tile to the top of the " -"list." -msgstr "" - -#: app/templates/help/function-help.htm:34 -msgid "" -"Any user with read access permission to a resource will be seeing these " -"resource descriptors wherever it shows up in search results or on the map. " -"If a card is intended to be hidden from any group of users, it " -"should not be used in this function." -msgstr "" - -#: app/templates/help/function-help.htm:36 -msgid "" -"\n" -"
Example
\n" -"

Consider a Resource where the Name node " -"value is Folsom School and Name Type node value is " -"Primary.

\n" -"

Selecting the Name card will populate the " -"template with <Name Type>, <Name>. The resulting " -"descriptor would read Primary, Folsom School. Changing the template " -"to Building Name: <Name> would yield Building Name: " -"Folsom School.

\n" -" " -msgstr "" - -#: app/templates/help/graph-tab-help.htm:6 -msgid "Graph Tab" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:14 -msgid "" -"In this tab you will design the graph—the core of a Resource Model or " -"Branch. In fact, sometimes Resource Models and Branches are generically " -"referred to as \"graphs\"." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:15 -msgid "" -"For the first step in building a graph, you should fill out the top-" -"level settings. Some of these may be changed later while others " -"can't, so make sure to do a lot of testing while developing a graph. With " -"the top-level settings in place, it's time to construct the graph by adding nodes (or full Branches) to the graph tree. Along the way, " -"you'll need to set the node-level settings for each node " -"you create." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:16 -msgid "" -"Once you've finished creating this Resource Model or Branch make sure to set " -"its status to \"active\"." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:21 -msgid "Top-Level Settings" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:25 -#: app/templates/views/rdm/concept-report.htm:269 -#: app/templates/views/rdm/entitytype-report.htm:160 -msgid "Identifiers" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:28 app/templates/javascript.htm:339 -#: app/templates/views/graph/graph-designer/graph-settings.htm:31 -#: app/templates/views/graph/graph-designer/graph-settings.htm:36 -msgid "Name" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:29 -msgid "" -"Used to identify this Resource Model throughout the app interface. Default " -"is New Resource Model." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:33 -msgid "Optional subtitle, displayed on the Arches Designer home page." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:36 -#: app/templates/views/graph/graph-designer/graph-settings.htm:56 -msgid "Ontology" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:37 -msgid "" -"Decide whether an ontology will be enforced in this graph. To learn more " -"about what this means, read Ontologies in Arches. By " -"default, you are allowed to choose between using the CIDOC CRM v6.2, or " -"using no ontology. Once a node or branch has been added to this graph the " -"Ontology setting cannot be modified." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:40 -#: app/templates/views/graph/graph-designer/graph-settings.htm:68 -msgid "Root Class" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:41 -msgid "" -"This setting is only necessary if an \"Ontology\" has been chosen. Define " -"the ontology class of the root node for this graph." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:44 -#: app/templates/views/graph/graph-designer/graph-settings.htm:80 -msgid "Configuration" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:47 -msgid "Status" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:48 -msgid "" -"Set to \"inactive\" to disallow use of this graph during development. " -"Inactive Resource Models cannot be used to create new resources, and " -"inactive Branches can not be added to a Resource Model." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:52 -msgid "Resource models that may be related" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:53 -msgid "" -"Choose which Resource Models can be related to this one with resource-to-" -"resource relationships." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:58 -#: app/templates/views/graph/graph-designer/graph-settings.htm:89 -msgid "Root Node Data Type" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:59 -msgid "Choose what data type to use for the root node of this Branch." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:63 app/templates/javascript.htm:636 -#: app/templates/javascript.htm:644 -#: app/templates/views/graph/graph-designer/graph-settings.htm:158 -#: app/templates/views/graph/graph-designer/node-form.htm:123 -msgid "Description" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:66 -#: app/templates/views/graph/graph-designer/graph-settings.htm:165 -msgid "Author" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:67 -msgid "" -"You can optionally add an Author to this graph. Only " -"administrators will see this information." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:70 -#: app/templates/views/graph/graph-designer/graph-settings.htm:177 -msgid "Abstract" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:71 -msgid "You can optionally add an Abstract to this graph." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:71 -msgid "" -"Users will see this abstract when they are presented with a choice of what " -"Resource Model to use to create a new resource." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:71 -msgid "" -"This abstract will be shown in the Branch Library which is used during graph " -"construction." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:75 -#: app/templates/views/graph/graph-designer/graph-settings.htm:189 -msgid "JSON-LD Context" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:76 -msgid "" -"Add a JSON-LD Context for " -"this Resource Model. This allows you to namespace common URI endpoints that " -"are used within a JSON-LD output of the resource. You can enter a plain URL " -"(\"http://www.cidoc-crm.org/cidoc-crm/\"), or JSON that defines " -"multiple keys ({\"crm\":\"http://www.cidoc-crm.org/cidoc-crm/\",\"rdf" -"\":\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"})." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:80 -#: app/templates/views/graph/graph-designer/graph-settings.htm:212 -msgid "Appearance" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:84 app/templates/javascript.htm:599 -#: app/templates/views/graph/graph-designer/graph-settings.htm:221 -msgid "Color" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:85 -msgid "" -"Choose a color for this Resource Model to be used in the related resources " -"force directed graph." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:89 -msgid "Icon" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:90 -msgid "" -"Choose an icon to identify this graph throughout the app interface. You can " -"browse the icons to select one, or type in the search bar to filter them. " -"Arches uses the Font " -"Awesome icon library; custom icons are not supported." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:98 -msgid "Construct the Graph" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:102 -msgid "" -"Use the graph tree on the left side of the page to construct the graph. " -"Every new graph starts with a Top Node, which will take the " -"name of the new Resource Model or Branch. From this node, you can either " -"Add Child Node to add a single node, or Add Branch to add an entire existing Branch." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:103 -msgid "" -"At any point during construction you can switch from Design " -"mode to Preview to see the full shape of your graph." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:104 -msgid "" -"If you have created a branch structure in a Resource Model that you would " -"like to use in a different Resource Model, you can export it from the graph " -"tree." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:110 -#: app/templates/help/permissions-tab-help.htm:45 -msgid "add a node and branch to new graph - click to view" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:122 -msgid "Node-Level Settings" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:126 -#: app/templates/views/graph/graph-designer/node-form.htm:28 -msgid "Node Identifiers" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:129 -#: app/templates/views/graph/graph-designer/node-form.htm:40 -msgid "Node Name" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:130 -msgid "" -"Set the name for this node. This will be used by default in the user " -"interface, but a different name for display can be configured at the widget " -"level." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:133 -#: app/templates/views/graph/graph-designer/node-form.htm:85 -msgid "Ontology Class" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:134 -msgid "only present if this graph uses an ontology" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:134 -msgid "" -"This setting assigns an ontological class to this node. To learn more, read " -"Ontologies in Arches" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:137 -msgid "Relationship to..." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:138 -msgid "" -"Define what relationship this node has with its parent node (the one " -"directly above it in the graph tree). A verbalization of your choice is " -"shown in the Semantics section below this setting." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:141 -msgid "Node Data Type and Settings" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:142 -msgid "" -"Depending on which data type you choose, you may have many more settings to " -"fill out. Those listed below will be present for every node no matter the " -"data type." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:145 -#: app/templates/views/graph/graph-designer/node-form.htm:144 -msgid "Data type" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:146 -msgid "" -"Choose the data type for this node. Please see the Default Data " -"Types section below. Once data is collected for this node, this " -"setting cannot be changed." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:149 -#: app/templates/views/graph/graph-designer/node-form.htm:183 -msgid "Expose to Advanced Search" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:150 -msgid "" -"If true users will be able to add this node to an Advanced Search query." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:153 -#: app/templates/views/graph/graph-designer/node-form.htm:203 -#: app/templates/views/graph/graph-designer/widget-configuration.htm:63 -msgid "Required" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:154 -msgid "" -"If true a value must be entered for this node in order to save it. Once data " -"is collected for this node, this setting cannot be changed." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:157 -msgid "Place node(s) in a separate card" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:158 -msgid "only present if this node is not already the top node for a card" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:158 -msgid "" -"If true this node will be set in a different card from its parent. This " -"affects data entry, and you are encouraged to test both states of this " -"setting while building you graph. Once data is collected for this node, this " -"setting cannot be changed." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:165 -msgid "Default Data Types" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:169 -msgid "" -"The data type of a node determines what kind of data that node will store. " -"Once chosen, some data types will require further configuration." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:170 -msgid "" -"Developers can create new datatypes." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:173 -msgid "boolean" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:174 -msgid "Use this to store a \"yes\"/\"no\" or \"true\"/\"false\" value." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:177 -msgid "concept" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:178 -msgid "" -"Stores one of a series of concepts from the Reference Data Manager. Users " -"will choose a concept in a dropdown list or set of radio buttons. You'll " -"further be prompted to choose a Concept Collection—" -"this controls which concepts the user is able to choose from." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:181 -msgid "concept-list" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:182 -msgid "Stores multiple concepts in a single node." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:185 -msgid "date" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:186 -msgid "Stores a CE calendar date. See etdf for BCE and fuzzy date handling." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:189 -msgid "edtf" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:190 -msgid "" -"Stores an Extended Date/Time Format value. Use this data type for " -"BCE dates or dates with uncertainty. This datatype requires extra " -"configuration to inform the database search methods how to interpret EDTF " -"values. Data entry users can enter edtf dates using formats listed in the EDTF draft specification." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:193 -msgid "file-list" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:194 -msgid "Stores one or mores files. Use this to upload images, documents, etc." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:197 -msgid "iiif-drawing" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:198 -msgid "" -"Used to store an IIIF compliant image." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:201 -msgid "geojson-feature-collection" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:202 -msgid "" -"Stores geographic coordinates, and is used to show a resource on the map." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:205 -msgid "domain-value" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:206 -msgid "" -"Similar to \"concept\", choose this to present the user with a dropdown list " -"or set of radio buttons. Unlike \"concept\" this dropdown menu will not come " -"from your system-wide controlled vocubulary, but from a list of values that " -"you must define here." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:209 -msgid "domain-value-list" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:210 -msgid "Stores multiple domain-values in a single node." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:213 -msgid "csv-chart-json" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:214 -msgid "Stores a csv chart formatted as JSON." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:217 -msgid "node-value" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:218 -msgid "" -"Stores a reference to a different node in this graph. This would allow you " -"to store duplicate data in more than one branch." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:221 -msgid "number" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:222 -msgid "Stores a number." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:225 -msgid "resource-instance" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:226 -msgid "" -"Embeds a separate resource instance into this node. For example, you could " -"add a node called \"Assessed By\" to a condition assessment branch, and use " -"this data type. This would allow you to associate an individual stored in " -"your database as an Actor resource with a specific condition assessment. " -"Note that this construction is different from making a \"resource-to-" -"resource relationship\". " -msgstr "" - -#: app/templates/help/graph-tab-help.htm:229 -msgid "resource-instance-list" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:230 -msgid "Stores a list of resource instances in a single node." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:233 -msgid "semantic" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:234 -msgid "" -"A semantic node does not store data. Semantic nodes are used where " -"necessary to make symbolic connections between other nodes, generally in " -"order to follow ontological rules. The top node of every graph is a semantic " -"node." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:237 -msgid "string" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:238 -msgid "" -"Stores a string of text. This could be something simple like a name, or more " -"something elaborate like a descriptive paragraph with formatting and " -"hyperlinks." -msgstr "" - -#: app/templates/help/map-manager-help.htm:6 -msgid "" -"\n" -"

Three categories of Map Layers will appear on your map: " -"Resource Layers (the contents of your database), " -"Basemaps (static background layers), and Overlays (custom data layers from outside your database). To configure a " -"layer, first select its category in the top bar, and then choose it from the " -"list at left.

\n" -" " -msgstr "" - -#: app/templates/help/map-manager-help.htm:13 -msgid "" -"Resource Layers display the resource layers in your database. One Resource " -"Layer is created for each node with a geospatial datatype (for example, " -"geojson-feature-collection). You are able to customize the " -"appearance and visibility of each Resource Layer in the following ways." -msgstr "" - -#: app/templates/help/map-manager-help.htm:14 -#: app/templates/help/map-manager-help.htm:34 -#: app/templates/help/map-manager-help.htm:49 app/templates/javascript.htm:588 -#: app/templates/views/map-layer-manager.htm:186 -msgid "Service Styling" -msgstr "" - -#: app/templates/help/map-manager-help.htm:15 -msgid "" -"Define the way features will look on the map. The example map has " -"demonstration features that give you a preview of the changes you make. You " -"can choose to use Advanced Editing to create a more nuanced " -"style. Note that changes made in Advanced Editing will not be reflected if " -"you switch back to basic editing. For styling reference, checkout the
MapBox Style Specification." -msgstr "" - -#: app/templates/help/map-manager-help.htm:16 -#: app/templates/help/map-manager-help.htm:36 -#: app/templates/help/map-manager-help.htm:51 app/templates/javascript.htm:395 -#: app/templates/views/graph/graph-designer/card-configuration.htm:70 -#: app/templates/views/map-layer-manager.htm:183 -msgid "Settings" -msgstr "" - -#: app/templates/help/map-manager-help.htm:17 -msgid "" -"You can change the name of this overlay if desired; by default it will use " -"the name of its Resource Model. You make also set the layer to be added to " -"the search map by default, or choose a custom icon for it." -msgstr "" - -#: app/templates/help/map-manager-help.htm:18 app/templates/javascript.htm:590 -msgid "Clustering" -msgstr "" - -#: app/templates/help/map-manager-help.htm:19 -msgid "" -"Arches uses 'clustering' to better display resources at low zoom levels " -"(zoomed out). You are able to control the clustering settings for each layer " -"individually." -msgstr "" - -#: app/templates/help/map-manager-help.htm:21 -msgid "" -"Cluster Distance - distance (in pixels) within which " -"resources will be clustered" -msgstr "" - -#: app/templates/help/map-manager-help.htm:22 -msgid "" -"Cluster Max Zoom - zoom level after which clustering will " -"stop being used" -msgstr "" - -#: app/templates/help/map-manager-help.htm:23 -msgid "" -"Cluster Min Points - minimum number of points needed to " -"create a cluster" -msgstr "" - -#: app/templates/help/map-manager-help.htm:25 app/templates/javascript.htm:207 -#: app/templates/javascript.htm:589 app/templates/views/graph-designer.htm:212 -#: app/templates/views/graph/graph-designer/permission-settings-form.htm:10 -#: app/templates/views/graph/graph-designer/permission-settings-form.htm:57 -msgid "Permissions" -msgstr "" - -#: app/templates/help/map-manager-help.htm:26 -msgid "" -"This tab shows the permissions for the nodegroup whose geometry is displayed " -"in this Resource Layer. Permissions are defined in the Graph Designer." -msgstr "" - -#: app/templates/help/map-manager-help.htm:33 -msgid "" -"A Basemap will always be present in your map. Arches comes with a few " -"default basemaps, but advanced users are able to add more. Once added, there " -"are few ways to configure each basemap." -msgstr "" - -#: app/templates/help/map-manager-help.htm:35 -msgid "" -"Define a style for this basemap. Note that depending on the type of layer, " -"there are different styling options. For styling reference, checkout the MapBox Style Specification." -msgstr "" - -#: app/templates/help/map-manager-help.htm:38 -msgid "Layer name - enter a name to identify this basemap" -msgstr "" - -#: app/templates/help/map-manager-help.htm:39 -msgid "" -"Default search map - choose this layer to be the default " -"basemap" -msgstr "" - -#: app/templates/help/map-manager-help.htm:40 -#: app/templates/help/map-manager-help.htm:55 -msgid "Layer icon - associate an icon with this layer" -msgstr "" - -#: app/templates/help/map-manager-help.htm:48 -msgid "" -"Overlays allow you to incorporate map layers from external sources. Note " -"that Search Results and Search Markets are treated as overlays, and can be " -"customize separately. New overlays can be added with a little behind-the-" -"scenes work. Once added, there are few ways to configure each overlay." -msgstr "" - -#: app/templates/help/map-manager-help.htm:50 -msgid "" -"Define a style for this overlay. Note that depending on the type of layer, " -"there are different styling options. For styling reference, checkout the MapBox Style Specification." -msgstr "" - -#: app/templates/help/map-manager-help.htm:53 -msgid "Layer name - enter a name to identify this overlay" -msgstr "" - -#: app/templates/help/map-manager-help.htm:54 -msgid "" -"Default search map - choose whether this overlay should be " -"shown in the search map by default. Note that in the search map itself you " -"can change the order of the layers." -msgstr "" - -#: app/templates/help/permissions-tab-help.htm:6 -msgid "Permissions Tab" -msgstr "" - -#: app/templates/help/permissions-tab-help.htm:14 -msgid "" -"Arches allows you to define user and user group permissions on a per-" -"nodegroup basis. For example, you may want to hide the coordinates of a " -"Resource from the public, or allow a certain group of users to only update " -"the condition assessment section of a Resource Model. Rules like these are " -"all enforced using permissions." -msgstr "" - -#: app/templates/help/permissions-tab-help.htm:15 -msgid "Permissions Levels" -msgstr "" - -#: app/templates/help/permissions-tab-help.htm:18 -#: app/templates/javascript.htm:648 app/templates/javascript.htm:756 -#: app/templates/views/components/plugins/workflow.htm:34 -#: app/templates/views/graph/function-manager.htm:121 -#: app/templates/views/rdm/modals/delete-collection-form.htm:44 -#: app/templates/views/rdm/modals/delete-scheme-form.htm:44 -msgid "Delete" -msgstr "" - -#: app/templates/help/permissions-tab-help.htm:19 -msgid "" -"Allows users to delete instances of this nodegroup. Note, this is not the " -"same as being allowed to delete an entire resource, permissions for which " -"are not handled here." -msgstr "" - -#: app/templates/help/permissions-tab-help.htm:22 -msgid "No Access" -msgstr "" - -#: app/templates/help/permissions-tab-help.htm:23 -msgid "" -"Disallows users from seeing or editing instances of this nodegroup. Use this " -"permission level to hide sensitive data from non-authenticated users (the " -"public)." -msgstr "" - -#: app/templates/help/permissions-tab-help.htm:26 -msgid "Read" -msgstr "" - -#: app/templates/help/permissions-tab-help.htm:27 -msgid "" -"Allows users to see this nodegroup's card. If disallowed, the card/nodegroup " -"will be hidden from the map and resource reports." -msgstr "" - -#: app/templates/help/permissions-tab-help.htm:30 -msgid "Create/Update" -msgstr "" - -#: app/templates/help/permissions-tab-help.htm:31 -msgid "" -"Allows users to create or edit instances of this nodegroup. This provides " -"the ability to let users edit some information about a resource, while be " -"restricted from editing other information." -msgstr "" - -#: app/templates/help/permissions-tab-help.htm:34 -msgid "Non-Authenticated Users" -msgstr "" - -#: app/templates/help/permissions-tab-help.htm:35 -msgid "" -"You may notice that by default Arches comes with a \"Guest\" group, as well " -"as user named \"anonymous\" who is a member of that group. Any non-" -"authenticated user is treated as the \"anonymous\" user. This means " -"that all permissions applied to the Guest group will be given to anyone who " -"views the website without logging in." -msgstr "" - -#: app/templates/help/profile-manager-help.htm:7 -msgid "" -"The profile manager allows you to update your account information, such as " -"your password, at any time." -msgstr "" - -#: app/templates/help/rdm-help.htm:6 -msgid "" -"The Reference Data Management (RDM) enables the creation and maintenance of " -"controlled vocabularies that are used throughout your database. In Arches, " -"controlled vocabularies consist of Concepts, and these Concepts are managed " -"in Thesauri and Collections. In the RDM you can create new Thesauri, create " -"new Concepts, import Concepts from external an endpoint (like the Getty " -"AAT), and -- the ultimate goal -- create Collections, which will be used in " -"your database as data input dropdown lists." -msgstr "" - -#: app/templates/help/rdm-help.htm:8 app/templates/javascript.htm:574 -#: app/templates/views/rdm/concept-report.htm:356 -msgid "Concepts" -msgstr "" - -#: app/templates/help/rdm-help.htm:10 -msgid "" -"A Concept is a qualitative property that can be attached to a resource, " -"something like \"Stone\" (which may describe a building material) or \"House" -"\" (which may describe a past use for a structure). The advantage of storing " -"these properties as Concepts is that a Concept may have attributes of its " -"own. In the case of \"House\", we could add an alternate label, \"Dwelling\" " -"to that Concept. Then, if a user searches for \"dwelling\", any resource " -"with the \"House\" Concept attached to it will be found." -msgstr "" - -#: app/templates/help/rdm-help.htm:11 -msgid "" -"Concepts can also be nested, to allow more complex and meaningful " -"relationships between them. For example, \"House\" may appear next to " -"\"School\" within a parent Concept called \"Building Use\"." -msgstr "" - -#: app/templates/help/rdm-help.htm:15 app/templates/rdm.htm:57 -msgid "Thesauri" -msgstr "" - -#: app/templates/help/rdm-help.htm:17 -msgid "" -"A Thesaurus is an entire set of Concepts which can be imported and exported " -"as a whole. You can create as many new Thesauri as you need, or just add new " -"Concepts to the default \"Arches\" Thesaurus. The organization of your " -"Thesauri has no impact on the way Concepts will be exposed to the public or " -"used throughout the app." -msgstr "" - -#: app/templates/help/rdm-help.htm:21 app/templates/rdm.htm:60 -#: app/templates/views/rdm/concept-report.htm:344 -msgid "Collections" -msgstr "" - -#: app/templates/help/rdm-help.htm:23 -msgid "" -"Collections, or Concept Collections as they are sometimes called, are custom " -"aggregations of Concepts that will be used in your app as dropdown lists " -"during the data entry process. Collections allow you to reorganize your " -"Concepts for the specific purpose of data entry, so your dropdown lists do " -"not have to look anything like your Thesaurus. You can create as many " -"Collections as you want, or add new Concepts to existing Collections." -msgstr "" - -#: app/templates/help/rdm-help.htm:27 -msgid "Example - Create a New Thesaurus" -msgstr "" - -#: app/templates/help/rdm-help.htm:29 -msgid "" -"In the video below, a new Thesaurus is created. Once you have made a " -"Thesaurus, you can begin creating a hierarchy of Concepts within it. " -"Remember, the final step will be to make a new Collection and add Concepts " -"to it (from any of your Thesauri)." -msgstr "" - -#: app/templates/help/rdm-help.htm:31 app/templates/help/rdm-help.htm:45 -#: app/templates/help/rdm-help.htm:59 app/templates/help/rdm-help.htm:73 -#: app/templates/help/rdm-help.htm:87 -msgid "click to view demonstration" -msgstr "" - -#: app/templates/help/rdm-help.htm:41 -msgid "Example - Create a Top Concept" -msgstr "" - -#: app/templates/help/rdm-help.htm:43 -msgid "" -"The first level of organization within a Thesaurus is a set of Top Concepts. " -"A Top Concept may be something like \"Architectural Styles\" and its " -"children Concepts will be the actual styles themselves. Below, a new, empty " -"Top Concept is added to an empty Thesaurus." -msgstr "" - -#: app/templates/help/rdm-help.htm:55 -msgid "Example - Create New Concepts" -msgstr "" - -#: app/templates/help/rdm-help.htm:57 -msgid "" -"To create a new Concept, begin by selecting the Top Concept under which it " -"should be placed. This will bring the details about the Top Concept into the " -"main panel. Use the Manage dropdown to \"Add Child\", type in a label, and " -"select the correct language for the label." -msgstr "" - -#: app/templates/help/rdm-help.htm:69 -msgid "Example - Add an Alternate Label to a Concept" -msgstr "" - -#: app/templates/help/rdm-help.htm:71 -msgid "" -"To improve the searchability of your Concepts, you can add as many alternate " -"labels to each one as you want Below, the label \"Dwelling\" is added to the " -"Concept \"House\". The result is that anyone using \"Dwelling\" as a search " -"term will be shown Resources that have the \"House\" Concept." -msgstr "" - -#: app/templates/help/rdm-help.htm:83 -msgid "Example - Create a Collection" -msgstr "" - -#: app/templates/help/rdm-help.htm:85 -msgid "" -"Creating a Collection is very similar to creating a Thesaurus. However, you " -"will be adding existing Concepts to a Collection (potentially from more than " -"one Thesaurus) instead of creating new ones. Below, a new Collection is " -"created. To go further, select the Collection, and use the \"Add dropdown " -"entry\" link to add existing Concepts to this Collection. When configuring " -"the Graph for a Branch or Resource Model, you will now be able to add this " -"Concept Collection to a node." -msgstr "" - -#: app/templates/help/resource-editor-help.htm:7 -msgid "Creating Resource Data" -msgstr "" - -#: app/templates/help/resource-editor-help.htm:11 -msgid "" -"The Resource Editor is used to create new or edit existing Resources. What " -"you see on the left-hand side of the page is this Resource's \"card tree\", " -"which shows all of the data entry cards that you can edit. Think of " -"\"creating data\" as \"adding cards\"." -msgstr "" - -#: app/templates/help/resource-editor-help.htm:12 -msgid "" -"To begin, select a card, enter data, and click Add. Some " -"cards may allow multiple instances, in which case you will be able to add as " -"many of the same type as you want." -msgstr "" - -#: app/templates/help/resource-editor-help.htm:13 -msgid "" -"Note that in the demonstration below, the \"Define Resource Descriptors\" " -"function has already been configured to set the Name card value as the " -"resource display name." -msgstr "" - -#: app/templates/help/resource-editor-help.htm:16 -msgid "basic card data enty - click to view" -msgstr "" - -#: app/templates/help/resource-editor-help.htm:24 -msgid "" -"Once you have saved data for a resource, you can see a full summary by " -"selecting the top card. This is the resource report." -msgstr "" - -#: app/templates/help/resource-editor-help.htm:25 -msgid "" -"In some cases, cards will be nested within other cards, as in the example of " -"adding a geo-location below." -msgstr "" - -#: app/templates/help/resource-editor-help.htm:29 -msgid "nested card data enty - click to view" -msgstr "" - -#: app/templates/help/resource-editor-help.htm:42 -msgid "Creating Resources Relations" -msgstr "" - -#: app/templates/help/resource-editor-help.htm:47 -msgid "" -"In the Resource Editor you can also access the Related Resources " -"Editor . To create a relationship between this resource and another " -"in your database, open the editor, find the resource, and click Add." -msgstr "" - -#: app/templates/help/resource-editor-help.htm:48 -msgid "" -"Your Resource Model will need to be configured to allow relations with the " -"target Resource Model. If relations are not allowed, resources in the " -"dropdown menu will not be selectable." -msgstr "" - -#: app/templates/help/resource-editor-help.htm:51 -msgid "create resource relation - click to view" -msgstr "" - -#: app/templates/help/resource-editor-landing-help.htm:7 -msgid "" -"Choose a Resource Model to begin creating a new Resource in your database." -msgstr "" - -#: app/templates/help/search-help.htm:6 -msgid "Introduction to Search" -msgstr "" - -#: app/templates/help/search-help.htm:11 -msgid "" -"Search Bar The quickest way to search the database is to " -"begin typing in the search bar. You'll be presented with database " -"terminology which you can use to create one or more simple filters. The " -"search bar also acts as an aggregator of all currently enabled " -"filters." -msgstr "" - -#: app/templates/help/search-help.htm:12 -msgid "" -"Search Tools There are a number tools you can use to " -"explore the database, which are described in detail below." -msgstr "" - -#: app/templates/help/search-help.htm:13 -msgid "" -"Search Results Whenever you change any search filters, the " -"updated search results will be listed here. You can link to a resource's " -"report, zoom to it on the map, or view its related resources." -msgstr "" - -#: app/templates/help/search-help.htm:14 -msgid "" -"Search Panel The contents of this panel will change " -"depending on what search tool you are using. Typically, the map will be " -"activated by default." -msgstr "" - -#: app/templates/help/search-help.htm:19 app/templates/index.htm:148 -msgid "Search Tools" -msgstr "" - -#: app/templates/help/search-help.htm:22 app/templates/javascript.htm:399 -msgid "Map" -msgstr "" - -#: app/templates/help/search-help.htm:24 -msgid "" -"Search results can be represented on the map in two ways: markers show the first set of resources in the search results, and " -"cells are used to give a general spatial representation of " -"all resources in the search results." -msgstr "" - -#: app/templates/help/search-help.htm:25 -msgid "" -"In addition to displaying search results, the map can show resource layers " -"(showing all resources), or custom overlays, if any have been added. You " -"control the visibility of all layers and basemaps with the tool panel on the " -"right." -msgstr "" - -#: app/templates/help/search-help.htm:26 -msgid "" -"Finally, you can add a spatial filter to your query by using the map drawing " -"tools to draw a shape and apply a buffer distance if desired." -msgstr "" - -#: app/templates/help/search-help.htm:28 -msgid "change basemap - click to view" -msgstr "" - -#: app/templates/help/search-help.htm:37 -msgid "toggle search results layer - click to view" -msgstr "" - -#: app/templates/help/search-help.htm:47 -msgid "search with spatial query - click to view" -msgstr "" - -#: app/templates/help/search-help.htm:58 -msgid "Time" -msgstr "" - -#: app/templates/help/search-help.htm:60 -msgid "" -"You can apply a temporal criterion to your query by using the Time Filter. " -"You have the option of creating the filter by hand, or you can use the time " -"wheel. The time wheel is a graphic representation of all the resources in " -"the database, organized chronologically." -msgstr "" - -#: app/templates/help/search-help.htm:63 -msgid "apply time filter with time wheel - click to view" -msgstr "" - -#: app/templates/help/search-help.htm:74 -#: app/templates/views/graph/card-configuration/card-form-preview.htm:93 -#: app/templates/views/graph/card-configuration/card-form-preview.htm:135 -msgid "Saved" -msgstr "" - -#: app/templates/help/search-help.htm:76 -msgid "" -"Saved searches allow you to view pre-made queries. Saved searches are " -"created by database administrators, so the number of saved searches shown " -"here will vary from one database to the next." -msgstr "" - -#: app/templates/help/search-help.htm:80 app/templates/javascript.htm:594 -msgid "Advanced" -msgstr "" - -#: app/templates/help/search-help.htm:82 -msgid "" -"You can use the advanced search to make more complex queries based on data " -"attributes, or \"facets\". While the basic search filter allows you to " -"combine multiple filters, advanced search is the only way to combine filters " -"with an or operator, and also gives you access to more " -"comparison operators." -msgstr "" - -#: app/templates/help/search-help.htm:83 -msgid "" -"In the example below, a search is made within a single resource type for any " -"name like \"church\" or any name " -"like \"gate\"." -msgstr "" - -#: app/templates/help/search-help.htm:86 -msgid "search for multiple words in names - click to view" -msgstr "" - -#: app/templates/help/search-help.htm:97 -msgid "Related" -msgstr "" - -#: app/templates/help/search-help.htm:99 -msgid "" -"For each resource listed in the search results you can view its related " -"resources with the \"Related Resources\" link under the description. By " -"viewing Related Resources, you get a new view of the database: not how " -"resources are related geographically nor chronologically, but qualitatively." -msgstr "" - -#: app/templates/help/search-help.htm:100 -msgid "" -"There two methods for viewing Related Resources: in a table where each " -"related resource is a row, or in a graph where resources are shown as nodes " -"in a graph, with relationships connecting them." -msgstr "" - -#: app/templates/help/system-settings-help.htm:6 -msgid "" -"\n" -"

A number of global settings can be defined or altered here.

\n" -" " -msgstr "" - -#: app/templates/help/system-settings-help.htm:13 -msgid "Default Application Settings" -msgstr "" - -#: app/templates/help/system-settings-help.htm:15 -msgid "" -"\n" -" Application Name - Name of your Arches app, " -"to be displayed in the browser title bar and elsewhere.
\n" -" Default Data Import/Export User - Name to " -"associate with data that is imported into the system.
\n" -" " -msgstr "" - -#: app/templates/help/system-settings-help.htm:20 -msgid "Web Analytics" -msgstr "" - -#: app/templates/help/system-settings-help.htm:22 -msgid "" -"\n" -" Google Analytics Key - If you have made a " -"Google Analytics Key to track your app's traffic, enter it here.
\n" -" " -msgstr "" - -#: app/templates/help/system-settings-help.htm:26 -msgid "Thesaurus Service Providers" -msgstr "" - -#: app/templates/help/system-settings-help.htm:28 -msgid "" -"\n" -" Thesaurus SPARQL Endpoint - Advanced users " -"may create more SPARQL endpoints and register them here. These endpoints " -"will be available in the RDM and allow you to import thesaurus entries from " -"external sources.
\n" -" " -msgstr "" - -#: app/templates/help/system-settings-help.htm:35 -msgid "Map Settings" -msgstr "" - -#: app/templates/help/system-settings-help.htm:37 -msgid "Mapbox API" -msgstr "" - -#: app/templates/help/system-settings-help.htm:38 -msgid "" -"Arches uses the Mapbox mapping library for map display and data creation. " -"Arches also supports Mapbox basemaps and other services." -msgstr "" - -#: app/templates/help/system-settings-help.htm:40 -msgid "" -"Mapbox API Key (Optional) - By default, Arches uses some " -"basemap web services from Mapbox. You will need to create a free " -"API key (or \"access token\") for these services to be activated. " -"Alternatively, you could remove all of the default basemaps and add your " -"own, non-Mapbox layers." -msgstr "" - -#: app/templates/help/system-settings-help.htm:41 -msgid "Mapbox Sprites - Path to Mapbox sprites (use default)." -msgstr "" - -#: app/templates/help/system-settings-help.htm:42 -msgid "Mapbox Glyphs - Path to Mapbox glyphs (use default)." -msgstr "" - -#: app/templates/help/system-settings-help.htm:44 -msgid "Project Extent" -msgstr "" - -#: app/templates/help/system-settings-help.htm:45 -msgid "" -"Draw a polygon representing your project's extent. These bounds will serve " -"as the default for the search result grid bounds, and map bounds in search, " -"cards, and reports." -msgstr "" - -#: app/templates/help/system-settings-help.htm:46 -msgid "Map Zoom" -msgstr "" - -#: app/templates/help/system-settings-help.htm:47 -msgid "" -"You can define the zoom behavior of your map. Zoom level 0 shows the whole " -"world (and is the absolute minimum zoom level) and zoom level 20 is the " -"maximum level that most map services support." -msgstr "" - -#: app/templates/help/system-settings-help.htm:49 -msgid "" -"Default Zoom - Set the zoom level that the map will be " -"shown at by default." -msgstr "" - -#: app/templates/help/system-settings-help.htm:50 -msgid "" -"Min Zoom - Minimum zoom level defines how far the user can " -"zoom out when viewing the map." -msgstr "" - -#: app/templates/help/system-settings-help.htm:51 -msgid "" -"Max Zoom - Maximum zoom level defines how far the user can " -"zoom in when viewing the map." -msgstr "" - -#: app/templates/help/system-settings-help.htm:53 -msgid "Search Results Grid" -msgstr "" - -#: app/templates/help/system-settings-help.htm:54 -msgid "" -"Arches aggregates search results and displays them as hexagons. You will " -"need to set default parameters for the hexagon size and precision." -msgstr "" - -#: app/templates/help/system-settings-help.htm:56 -msgid "" -"Hexagon Size (in km) - Set the actual size of the hex bins " -"that will be shown on the map." -msgstr "" - -#: app/templates/help/system-settings-help.htm:57 -msgid "" -"Hexagon Grid Precision - Set the precision with which the " -"contents of the hex bins will be calculated." -msgstr "" - -#: app/templates/help/system-settings-help.htm:59 -msgid "" -"Warning: A large project area combined with a small hexagon " -"size and/or high precision will take a very long time to load, and can crash " -"your browser. We suggest changing these settings in small increments to find " -"the best combination for your project." -msgstr "" - -#: app/templates/help/system-settings-help.htm:63 -msgid "Basic Search Settings" -msgstr "" - -#: app/templates/help/system-settings-help.htm:65 -msgid "Set the default search results behavior." -msgstr "" - -#: app/templates/help/system-settings-help.htm:66 -msgid "" -"\n" -"

\n" -" Number of search results per page - Set the " -"number of search results shown per page. Note this also defines the number " -"of search result markers that are shown on the map.
\n" -" Number of search hints per dropdown - Set " -"the number of search hints that will appear under the search bar as you type " -"in search terms.
\n" -" Max number of search results to export - " -"Set the maximum number of resources to be exported from the search results. " -"This value should generally be evenly divible by the SEARCH_RESULT_LIMIT " -"setting in Arches (10,000 by default).\n" -"

\n" -" " -msgstr "" - -#: app/templates/help/system-settings-help.htm:76 -msgid "Temporal Search Settings" -msgstr "" - -#: app/templates/help/system-settings-help.htm:78 -msgid "" -"Arches creates a Time Wheel based on the resources in your database, to " -"allow for quick temporal visualization and queries. A few aspects of this " -"temporal search are defined here." -msgstr "" - -#: app/templates/help/system-settings-help.htm:80 -msgid "" -"Color Ramp - not currently implemented The color " -"ramp for the time wheel. For further reference, check out the d3 API reference." -msgstr "" - -#: app/templates/help/system-settings-help.htm:81 -msgid "" -"Time wheel configuration - not currently implemented" -msgstr "" - -#: app/templates/help/system-settings-help.htm:86 -msgid "Saved Searches" -msgstr "" - -#: app/templates/help/system-settings-help.htm:88 -msgid "" -"Arches allows you save a search and present it as convenience for your " -"users. Saved Searches appear as search options in the main Search page. " -"Creating a Saved Search is a three-step process." -msgstr "" - -#: app/templates/help/system-settings-help.htm:90 -msgid "" -"\n" -" 1. Specify Search Criteria - Go to the " -"Search page and enter all the criteria you would like to use to configure " -"your Saved Search. You may notice that with the addition of each new search " -"filter (either by using the term filter, map filtering tools, or temporal " -"filters) the URL for the page will change.
\n" -" 2. Copy the URL - In your browser address " -"bar, copy the entire URL. This will be a long string that defines " -"each of the search filters created in step 1.
\n" -" 3. Create the Saved Search - Finally, head " -"back to this page and fill out the settings that you see at left. You can " -"also upload an image that will be shown along with your Search Search.\n" -" " -msgstr "" - -#: app/templates/index.htm:72 -#, python-format -msgid "Arches | %(version)s" -msgstr "" - -#: app/templates/index.htm:80 -msgid "Arches Features" -msgstr "" - -#: app/templates/index.htm:83 -msgid "Search Arches" -msgstr "" - -#: app/templates/index.htm:92 -msgid "Sign in" -msgstr "" - -#: app/templates/index.htm:97 -msgid "Welcome, " -msgstr "" - -#: app/templates/index.htm:101 -msgid "Log off" -msgstr "" - -#: app/templates/index.htm:133 -msgid "Home" -msgstr "" - -#: app/templates/index.htm:138 app/templates/index.htm:215 -msgid "Fast" -msgstr "" - -#: app/templates/index.htm:143 app/templates/index.htm:269 -msgid "Workflows" -msgstr "" - -#: app/templates/index.htm:183 -#, python-format -msgid "Arches %(version)s" -msgstr "" - -#: app/templates/index.htm:184 -msgid "A web and mobile platform for" -msgstr "" - -#: app/templates/index.htm:185 -msgid "managing your most important resource information" -msgstr "" - -#: app/templates/index.htm:193 -msgid "" -"Glarus thrust, Tectonic Area Sardona, Switzerland | Jonas Wagner https://www." -"flickr.com/photos/80225884@N06/ | Attribution 2.0 Generic (CC BY 2.0)" -msgstr "" - -#: app/templates/index.htm:216 -msgid "Deploy Applications Rapidly" -msgstr "" - -#: app/templates/index.htm:218 -msgid "" -"Design custom information management applications in hours. Build your " -"databases with Arches Designer, then configure your interface all without " -"having to write any code." -msgstr "" - -#: app/templates/index.htm:235 -msgid "Interface Manager" -msgstr "" - -#: app/templates/index.htm:237 -msgid "" -"Arches automatically creates data entry forms based on your data models. " -"Use Arches' Card Manager to configure the look and feel of your data entry " -"UI." -msgstr "" - -#: app/templates/index.htm:246 -msgid "Data Security" -msgstr "" - -#: app/templates/index.htm:248 -msgid "" -"Use Arches' Permissions Manager to set up data access rules for all your " -"user groups and individual accounts. You can define read/write/delete and " -"no-access permissions." -msgstr "" - -#: app/templates/index.htm:270 -msgid "Orchestrate your data entry" -msgstr "" - -#: app/templates/index.htm:272 -msgid "" -"Design step-wise data management interfaces that simplify complex editing " -"tasks. Ensure that everyone enters data completely and consistently" -msgstr "" - -#: app/templates/index.htm:295 -msgid "Arches Search Tools" -msgstr "" - -#: app/templates/index.htm:296 -msgid "Find what you're looking for" -msgstr "" - -#: app/templates/index.htm:298 -msgid "" -"Arches comes with powerful built-in search tools. Quickly filter large " -"databases with term, geospatial, and time-based search components" -msgstr "" - -#: app/templates/index.htm:311 -msgid "Search Options" -msgstr "" - -#: app/templates/index.htm:313 -msgid "" -"Arches gives you many ways to find precisely the information you need, even " -"if your Arches application contains 10's of millions of records. In " -"addition to term, thesaurus, geospatial, and temporal filters, Arches " -"provides you with advanced filtering options that support boolean logic, " -"inverses, and many other filtering options." -msgstr "" - -#: app/templates/index.htm:317 -msgid "" -"Arches' search capabilities also provide for sophisticated data " -"visualizations, including interactive displays of the connections between " -"your data objects using a Force Directed Graph." -msgstr "" - -#: app/templates/index.htm:321 -msgid "" -"If you're a software developer, you can build on Arches modular search " -"services and create your own filters, reports, and visualizations to best " -"show off your particular dataset." -msgstr "" - -#: app/templates/index.htm:343 -msgid "Sample Institution Name" -msgstr "" - -#: app/templates/index.htm:346 -msgid "Sample Address" -msgstr "" - -#: app/templates/index.htm:347 -msgid "Getty Conservation Institute" -msgstr "" - -#: app/templates/index.htm:348 -msgid "1200 Getty Center Drive" -msgstr "" - -#: app/templates/index.htm:349 -msgid "Los Angeles, CA 90049" -msgstr "" - -#: app/templates/index.htm:355 -msgid "Guides and Documentation" -msgstr "" - -#: app/templates/index.htm:363 -msgid "What is Arches" -msgstr "" - -#: app/templates/index.htm:366 -msgid "Implementation Considerations" -msgstr "" - -#: app/templates/index.htm:369 -msgid "Information For Developers" -msgstr "" - -#: app/templates/index.htm:379 -msgid "FAQ" -msgstr "" - -#: app/templates/index.htm:382 -msgid "Standards and Interoperability" -msgstr "" - -#: app/templates/index.htm:385 -msgid "Installation Guide" -msgstr "" - -#: app/templates/index.htm:393 -msgid "Arches Project Background" -msgstr "" - -#: app/templates/index.htm:396 -msgid "Arches Webinars/Presentations" -msgstr "" - -#: app/templates/index.htm:415 -msgid "Terms & Conditions" -msgstr "" - -#: app/templates/index.htm:416 -msgid "Privacy Policy" -msgstr "" - -#: app/templates/index.htm:419 -msgid "Powered by Arches" -msgstr "" - -#: app/templates/javascript.htm:114 -msgid "Delete All Resources Associated with this Graph?" -msgstr "" - -#: app/templates/javascript.htm:115 -msgid "" -"Deleting All Resources removes all associated data with this graph " -"entirely. Are you sure you would like to proceed?" -msgstr "" - -#: app/templates/javascript.htm:118 -msgid "Delete Branch/Resource Model?" -msgstr "" - -#: app/templates/javascript.htm:119 -msgid "" -"Deleting this branch/resource model will remove it (and all associated data) " -"entirely. Are you sure you would like to proceed?" -msgstr "" - -#: app/templates/javascript.htm:159 -msgid "Please contact your system administrator for more details." -msgstr "" - -#: app/templates/javascript.htm:160 -msgid "Hide Null Values" -msgstr "" - -#: app/templates/javascript.htm:161 app/templates/javascript.htm:509 -msgid "Load More" -msgstr "" - -#: app/templates/javascript.htm:162 -msgid "Load All" -msgstr "" - -#: app/templates/javascript.htm:163 -msgid "Display Name" -msgstr "" - -#: app/templates/javascript.htm:164 -msgid "Display Description" -msgstr "" - -#: app/templates/javascript.htm:165 -msgid "Map Popup" -msgstr "" - -#: app/templates/javascript.htm:166 -msgid "Map Popup Template" -msgstr "" - -#: app/templates/javascript.htm:167 -msgid "ID:" -msgstr "" - -#: app/templates/javascript.htm:168 -msgid "Add Buffer" -msgstr "" - -#: app/templates/javascript.htm:169 -msgid "Buffer Intersecting Feature" -msgstr "" - -#: app/templates/javascript.htm:170 -msgid "Add buffer to features" -msgstr "" - -#: app/templates/javascript.htm:171 -msgid "Add Buffer Feature" -msgstr "" - -#: app/templates/javascript.htm:172 -msgid "Select a feature to perform intersection" -msgstr "" - -#: app/templates/javascript.htm:173 -msgid "Intersect" -msgstr "" - -#: app/templates/javascript.htm:174 -msgid "Re-index" -msgstr "" - -#: app/templates/javascript.htm:175 -msgid "Re-indexing" -msgstr "" - -#: app/templates/javascript.htm:176 -msgid "Re-index Resources Now" -msgstr "" - -#: app/templates/javascript.htm:177 -msgid "" -"If you've made any changes to this function and there are resources already " -"in the system, then you will need to reindex the resources to reflect your " -"changes. This process can take some time (potentially several minuetes or " -"more). Please be patient." -msgstr "" - -#: app/templates/javascript.htm:178 -msgid "Use bracketed node names like this: " -msgstr "" - -#: app/templates/javascript.htm:179 -msgid "Primary Name Template" -msgstr "" - -#: app/templates/javascript.htm:180 -msgid "Primary Description Template" -msgstr "" - -#: app/templates/javascript.htm:181 -msgid "" -"Select a card from which to choose nodes to power your primary name " -"identifier." -msgstr "" - -#: app/templates/javascript.htm:182 -msgid "" -"Select a card from which to choose nodes to power your primary description " -"identifier." -msgstr "" - -#: app/templates/javascript.htm:183 -msgid "Add as new" -msgstr "" - -#: app/templates/javascript.htm:184 -msgid "Add Feature" -msgstr "" - -#: app/templates/javascript.htm:185 -msgid "Distance:" -msgstr "" - -#: app/templates/javascript.htm:186 -msgid "Units:" -msgstr "" - -#: app/templates/javascript.htm:187 -msgid "meters:" -msgstr "" - -#: app/templates/javascript.htm:188 -msgid "feet:" -msgstr "" - -#: app/templates/javascript.htm:189 -msgid "Download" -msgstr "" - -#: app/templates/javascript.htm:190 -msgid "Download File" -msgstr "" - -#: app/templates/javascript.htm:191 -msgid "Triggering Nodegroups" -msgstr "" - -#: app/templates/javascript.htm:192 app/templates/javascript.htm:540 -msgid "Select a Nodegroup" -msgstr "" - -#: app/templates/javascript.htm:193 -msgid "No Relationships Added" -msgstr "" - -#: app/templates/javascript.htm:194 -msgid "Relate Resource" -msgstr "" - -#: app/templates/javascript.htm:195 -msgid "Cannot Be Related" -msgstr "" - -#: app/templates/javascript.htm:196 app/templates/views/resource/editor.htm:92 -msgid "Related Resources" -msgstr "" - -#: app/templates/javascript.htm:197 -msgid "" -"Arches keeps track of how resources are related. Click the 'related " -"resources' link on a search result from the list on the left to see its " -"relatives displayed in an interactive graph" -msgstr "" - -#: app/templates/javascript.htm:198 -msgid "Report Date:" -msgstr "" - -#: app/templates/javascript.htm:200 -msgid "X Coordinate Placeholder" -msgstr "" - -#: app/templates/javascript.htm:201 -msgid "Y Coordinate Placeholder" -msgstr "" - -#: app/templates/javascript.htm:202 -msgid "Display as Greyscale" -msgstr "" - -#: app/templates/javascript.htm:203 -msgid "Annotation Overlays" -msgstr "" - -#: app/templates/javascript.htm:204 -msgid "Reset to defaults" -msgstr "" - -#: app/templates/javascript.htm:205 -msgid "Data Themes" -msgstr "" - -#: app/templates/javascript.htm:208 -msgid "Allow Normal Access" -msgstr "" - -#: app/templates/javascript.htm:209 -msgid "Person/Group" -msgstr "" - -#: app/templates/javascript.htm:210 -msgid "Set Permissions for this instance" -msgstr "" - -#: app/templates/javascript.htm:211 -msgid "" -"By default only you have access to this record. You can set permissions for " -"specific people or groups by selecting to whom you will grant access" -msgstr "" - -#: app/templates/javascript.htm:212 -msgid "" -"Define access privileges for this instance. You may limit access to " -"yourself, or select which user accounts and groups have permission to this " -"resource." -msgstr "" - -#: app/templates/javascript.htm:213 -msgid "Configure Access to this Instance" -msgstr "" - -#: app/templates/javascript.htm:214 -msgid "Resource Instance Permissions" -msgstr "" - -#: app/templates/javascript.htm:215 -msgid "Unsorted" -msgstr "" - -#: app/templates/javascript.htm:216 -msgid "Ascending" -msgstr "" - -#: app/templates/javascript.htm:217 -msgid "Descending" -msgstr "" - -#: app/templates/javascript.htm:218 -msgid "Fuzzy Year Padding" -msgstr "" - -#: app/templates/javascript.htm:219 -msgid "Fuzzy Month Padding" -msgstr "" - -#: app/templates/javascript.htm:220 -msgid "Fuzzy Day Padding" -msgstr "" - -#: app/templates/javascript.htm:221 -msgid "Fuzzy Season Padding (weeks)" -msgstr "" - -#: app/templates/javascript.htm:222 -msgid "Multiplier if Date is Uncertain (?)" -msgstr "" - -#: app/templates/javascript.htm:223 -msgid "Multiplier if Date is Approximate (~)" -msgstr "" - -#: app/templates/javascript.htm:224 -msgid "Multiplier if Both (? and ~)" -msgstr "" - -#: app/templates/javascript.htm:225 -msgid "Maximum Number of Files" -msgstr "" - -#: app/templates/javascript.htm:226 -msgid "Related Node" -msgstr "" - -#: app/templates/javascript.htm:227 -msgid "Relationship to Node" -msgstr "" - -#: app/templates/javascript.htm:229 -msgid "Continue" -msgstr "" - -#: app/templates/javascript.htm:230 -#: app/templates/views/components/datatypes/number.htm:27 -msgid "Value" -msgstr "" - -#: app/templates/javascript.htm:231 -msgid "Disabled" -msgstr "" - -#: app/templates/javascript.htm:232 app/templates/javascript.htm:269 -msgid "Disable Editing" -msgstr "" - -#: app/templates/javascript.htm:233 app/templates/javascript.htm:270 -msgid "Prevent users from editing value" -msgstr "" - -#: app/templates/javascript.htm:234 -msgid "Domain options" -msgstr "" - -#: app/templates/javascript.htm:235 -msgid "Add new option" -msgstr "" - -#: app/templates/javascript.htm:237 -msgid "Add GNU" -msgstr "" - -#: app/templates/javascript.htm:238 app/templates/javascript.htm:543 -msgid "Showing edits by" -msgstr "" - -#: app/templates/javascript.htm:239 app/templates/javascript.htm:541 -msgid "Return to approved edits" -msgstr "" - -#: app/templates/javascript.htm:240 app/templates/javascript.htm:545 -msgid "This is a new contribution by a provisional editor." -msgstr "" - -#: app/templates/javascript.htm:241 app/templates/javascript.htm:544 -msgid "Currently showing the most recent approved edits" -msgstr "" - -#: app/templates/javascript.htm:242 -#: app/templates/views/resource/editor/provisional-tile-manager.htm:8 -msgid "Provisional Edits" -msgstr "" - -#: app/templates/javascript.htm:243 -msgid "QA Type" -msgstr "" - -#: app/templates/javascript.htm:244 -msgid "All Resources" -msgstr "" - -#: app/templates/javascript.htm:245 -msgid "All Edits" -msgstr "" - -#: app/templates/javascript.htm:246 -msgid "Delete all edits" -msgstr "" - -#: app/templates/javascript.htm:247 -msgid "Delete this record" -msgstr "" - -#: app/templates/javascript.htm:248 -msgid "Cancel edit" -msgstr "" - -#: app/templates/javascript.htm:249 -msgid "Save edit" -msgstr "" - -#: app/templates/javascript.htm:250 -msgid "Sorry, you do not have access to this information" -msgstr "" - -#: app/templates/javascript.htm:251 -msgid "No data added yet for" -msgstr "" - -#: app/templates/javascript.htm:252 -msgid "These data are provisional and pending review" -msgstr "" - -#: app/templates/javascript.htm:253 -msgid "Label 'True'" -msgstr "" - -#: app/templates/javascript.htm:254 -msgid "Label 'False'" -msgstr "" - -#: app/templates/javascript.htm:255 -msgid "Select an Option" -msgstr "" - -#: app/templates/javascript.htm:256 -msgid "Concept Collection" -msgstr "" - -#: app/templates/javascript.htm:257 -msgid "Select a concept collection" -msgstr "" - -#: app/templates/javascript.htm:258 -msgid "Select a Node" -msgstr "" - -#: app/templates/javascript.htm:259 -msgid "Select a Property" -msgstr "" - -#: app/templates/javascript.htm:260 -msgid "No Date Entered" -msgstr "" - -#: app/templates/javascript.htm:261 -msgid "Use date of data entry" -msgstr "" - -#: app/templates/javascript.htm:262 -msgid "Check this to use the date of data entry as the default value." -msgstr "" - -#: app/templates/javascript.htm:263 -msgid "Date" -msgstr "" - -#: app/templates/javascript.htm:264 -msgid "rich text" -msgstr "" - -#: app/templates/javascript.htm:265 -msgid "Direction" -msgstr "" - -#: app/templates/javascript.htm:266 -msgid "Left-to-Right" -msgstr "" - -#: app/templates/javascript.htm:267 -msgid "Right-to-Left" -msgstr "" - -#: app/templates/javascript.htm:268 -msgid "Max Length" -msgstr "" - -#: app/templates/javascript.htm:271 -#: app/templates/views/rdm/modals/add-child-form.htm:25 -#: app/templates/views/rdm/modals/add-collection-form.htm:19 -#: app/templates/views/rdm/modals/add-scheme-form.htm:25 -#: app/templates/views/rdm/modals/value-form.htm:45 -#: app/templates/views/rdm/modals/value-form.htm:46 -#: app/templates/views/rdm/modals/value-form.htm:124 -#: app/templates/views/rdm/modals/value-form.htm:202 -#: app/templates/views/rdm/modals/value-form.htm:203 -msgid "Language" -msgstr "" - -#: app/templates/javascript.htm:272 -msgid "Languages" -msgstr "" - -#: app/templates/javascript.htm:273 -#: app/templates/views/rdm/modals/value-form.htm:34 -#: app/templates/views/rdm/modals/value-form.htm:113 -#: app/templates/views/rdm/modals/value-form.htm:191 -msgid "Type" -msgstr "" - -#: app/templates/javascript.htm:274 -msgid "not a valid EDTF format" -msgstr "" - -#: app/templates/javascript.htm:275 -msgid "Year-month approximate" -msgstr "" - -#: app/templates/javascript.htm:276 -msgid "Entire date (year-month-day) uncertain and approximate" -msgstr "" - -#: app/templates/javascript.htm:277 -msgid "Year uncertain (possibly the year 1984, but not definitely)" -msgstr "" - -#: app/templates/javascript.htm:278 -msgid "" -"Spring, 2001. The values 21, 22, 23, 24 may be used used to signify ' " -"Spring', 'Summer', 'Autumn', 'Winter', respectively, in place of a month " -"value (01 through 12) for a year-and-month format string" -msgstr "" - -#: app/templates/javascript.htm:279 -msgid "" -"The year -100000. 'Y' may be used at the beginning of the date string to " -"signify that the date is a year, when (and only when) the year exceeds four " -"digits, i.e. for years later than 9999 or earlier than -9999." -msgstr "" - -#: app/templates/javascript.htm:280 -msgid "" -"A time interval with calendar year precision, beginning sometime in 1964 and " -"ending sometime in 2008" -msgstr "" - -#: app/templates/javascript.htm:281 -msgid "" -"A time interval with calendar month precision, beginning sometime in June " -"2004 and ending sometime in August of 2006" -msgstr "" - -#: app/templates/javascript.htm:282 -msgid "" -"A time interval beginning sometime on February 1, 2004 and ending sometime " -"in 2005. The start endpoint has calendar day precision and the end endpoint " -"has calendar year precision" -msgstr "" - -#: app/templates/javascript.htm:283 -msgid "[year][“-”][month][“-”][day]" -msgstr "" - -#: app/templates/javascript.htm:284 -msgid "Refers to the calendar date 2021 April 12th with day precision" -msgstr "" - -#: app/templates/javascript.htm:285 -msgid "[year][“-”][month]" -msgstr "" - -#: app/templates/javascript.htm:286 -msgid "Refers to the calendar month April 2021 with month precision" -msgstr "" - -#: app/templates/javascript.htm:287 -msgid " [year]" -msgstr "" - -#: app/templates/javascript.htm:288 -msgid "Refers to the year 2021 with year precision" -msgstr "" - -#: app/templates/javascript.htm:289 -msgid "Some common encodings:" -msgstr "" - -#: app/templates/javascript.htm:290 -msgid "EDTF Date Specfication (Library of Congress)" -msgstr "" - -#: app/templates/javascript.htm:291 -msgid "" -"The EDTF datatype allows you to describe dates (even uncertain dates). You " -"can find a summary of the standard here:" -msgstr "" - -#: app/templates/javascript.htm:292 -msgid "Extended Date/Time Formats (EDTF)" -msgstr "" - -#: app/templates/javascript.htm:293 -msgid "EDTF Formats" -msgstr "" - -#: app/templates/javascript.htm:294 -msgid "Loading Time Wheel" -msgstr "" - -#: app/templates/javascript.htm:295 -msgid "Time Wheel" -msgstr "" - -#: app/templates/javascript.htm:296 -msgid "" -"Click on a block to set a filter, double-click to zoom in, double-click " -"center to zoom out" -msgstr "" - -#: app/templates/javascript.htm:297 -msgid "Last 7 Days" -msgstr "" - -#: app/templates/javascript.htm:298 -msgid "Last 30 Days" -msgstr "" - -#: app/templates/javascript.htm:299 -#: app/templates/views/provisional-history-list.htm:19 -msgid "This week" -msgstr "" - -#: app/templates/javascript.htm:300 -#: app/templates/views/provisional-history-list.htm:20 -msgid "This month" -msgstr "" - -#: app/templates/javascript.htm:301 -#: app/templates/views/provisional-history-list.htm:21 -msgid "This quarter" -msgstr "" - -#: app/templates/javascript.htm:302 -#: app/templates/views/provisional-history-list.htm:22 -msgid "This year" -msgstr "" - -#: app/templates/javascript.htm:303 -#: app/templates/views/provisional-history-list.htm:16 -msgid "Today" -msgstr "" - -#: app/templates/javascript.htm:304 -#: app/templates/views/provisional-history-list.htm:15 -msgid "Custom date range" -msgstr "" - -#: app/templates/javascript.htm:305 -msgid "Search all dates" -msgstr "" - -#: app/templates/javascript.htm:306 -msgid "Date Type" -msgstr "" - -#: app/templates/javascript.htm:307 -msgid "Date Interval" -msgstr "" - -#: app/templates/javascript.htm:308 -msgid "Minimum Date" -msgstr "" - -#: app/templates/javascript.htm:309 -msgid "Maximum Date" -msgstr "" - -#: app/templates/javascript.htm:310 -msgid "Date Format" -msgstr "" - -#: app/templates/javascript.htm:311 -msgid "Has no value" -msgstr "" - -#: app/templates/javascript.htm:312 -msgid "Has any value" -msgstr "" - -#: app/templates/javascript.htm:314 -msgid "Format" -msgstr "" - -#: app/templates/javascript.htm:315 -msgid "view valid formats" -msgstr "" - -#: app/templates/javascript.htm:316 -msgid "Max" -msgstr "" - -#: app/templates/javascript.htm:317 -msgid "Min" -msgstr "" - -#: app/templates/javascript.htm:318 -msgid "Increment" -msgstr "" - -#: app/templates/javascript.htm:319 -msgid "Increment Size" -msgstr "" - -#: app/templates/javascript.htm:320 -msgid "Decimal Places" -msgstr "" - -#: app/templates/javascript.htm:321 -msgid "Number of decimal places" -msgstr "" - -#: app/templates/javascript.htm:322 -msgid "Prefix" -msgstr "" - -#: app/templates/javascript.htm:323 -msgid "Field Prefix" -msgstr "" - -#: app/templates/javascript.htm:324 -msgid "suffix" -msgstr "" - -#: app/templates/javascript.htm:325 -msgid "Field Suffix" -msgstr "" - -#: app/templates/javascript.htm:326 -msgid "From" -msgstr "" - -#: app/templates/javascript.htm:327 -msgid "To" -msgstr "" - -#: app/templates/javascript.htm:328 -msgid "Select" -msgstr "" - -#: app/templates/javascript.htm:329 -msgid "Within" -msgstr "" - -#: app/templates/javascript.htm:330 -msgid "overlaps" -msgstr "" - -#: app/templates/javascript.htm:331 -msgid "equals" -msgstr "" - -#: app/templates/javascript.htm:332 -msgid "is not" -msgstr "" - -#: app/templates/javascript.htm:333 -msgid "not" -msgstr "" - -#: app/templates/javascript.htm:334 -msgid "like" -msgstr "" - -#: app/templates/javascript.htm:335 -msgid "not like" -msgstr "" - -#: app/templates/javascript.htm:336 -msgid "and" -msgstr "" - -#: app/templates/javascript.htm:337 -msgid "or" -msgstr "" - -#: app/templates/javascript.htm:338 -msgid "of" -msgstr "" - -#: app/templates/javascript.htm:341 -#: app/templates/views/user-profile-manager.htm:111 -msgid "None" -msgstr "" - -#: app/templates/javascript.htm:342 app/templates/views/graph.htm:71 -#: app/templates/views/graph/card-configuration/card-form-preview.htm:83 -msgid "Add" -msgstr "" - -#: app/templates/javascript.htm:343 -msgid "Remove" -msgstr "" - -#: app/templates/javascript.htm:344 app/templates/views/graph.htm:41 -#: app/templates/views/graph/function-manager.htm:81 -#: app/templates/views/resource.htm:41 -msgid "Find" -msgstr "" - -#: app/templates/javascript.htm:345 -msgid "Filter" -msgstr "" - -#: app/templates/javascript.htm:346 app/templates/views/list.htm:20 -msgid "Clear" -msgstr "" - -#: app/templates/javascript.htm:347 -msgid "Clear Filter" -msgstr "" - -#: app/templates/javascript.htm:348 -msgid "Buffer" -msgstr "" - -#: app/templates/javascript.htm:349 -msgid "Distance" -msgstr "" - -#: app/templates/javascript.htm:350 -#: app/templates/views/resource/editor.htm:235 -msgid "New" -msgstr "" - -#: app/templates/javascript.htm:351 -#: app/templates/views/resource/editor.htm:262 -msgid "Add New" -msgstr "" - -#: app/templates/javascript.htm:352 -msgid "Return" -msgstr "" - -#: app/templates/javascript.htm:353 -msgid "csv" -msgstr "" - -#: app/templates/javascript.htm:354 -msgid "html" -msgstr "" - -#: app/templates/javascript.htm:355 -msgid "shapefile" -msgstr "" - -#: app/templates/javascript.htm:356 -msgid "geojson url" -msgstr "" - -#: app/templates/javascript.htm:357 -msgid "tile excel" -msgstr "" - -#: app/templates/javascript.htm:358 -msgid "Copy to clipboard" -msgstr "" - -#: app/templates/javascript.htm:359 -msgid "Info" -msgstr "" - -#: app/templates/javascript.htm:360 -msgid "Arches Export" -msgstr "" - -#: app/templates/javascript.htm:361 -msgid "Include the report link in the export?" -msgstr "" - -#: app/templates/javascript.htm:362 -msgid "1. Format" -msgstr "" - -#: app/templates/javascript.htm:363 -msgid "" -"Select the format you'd like for your export data. (tile excel and geojson " -"formats require a resource type filter)" -msgstr "" - -#: app/templates/javascript.htm:364 -msgid "2. Coordinate Precision" -msgstr "" - -#: app/templates/javascript.htm:365 -msgid "" -"Tell us how many decimal places of precision you'd like for geo-data results" -msgstr "" - -#: app/templates/javascript.htm:366 -msgid "3. Report Link" -msgstr "" - -#: app/templates/javascript.htm:367 -msgid "Only applicable to CSV and shapefile exports" -msgstr "" - -#: app/templates/javascript.htm:368 -msgid "4. Name this export" -msgstr "" - -#: app/templates/javascript.htm:369 -msgid "5. Email Address" -msgstr "" - -#: app/templates/javascript.htm:370 -msgid "" -"This download may take some time. Tell us where to email a download link to " -"your results" -msgstr "" - -#: app/templates/javascript.htm:371 -msgid "Export Search Results" -msgstr "" - -#: app/templates/javascript.htm:372 -msgid "Advanced Search" -msgstr "" - -#: app/templates/javascript.htm:373 -msgid "" -"With Advanced Search you can build more sophisticated search queries. Select " -"the search facets you wish to query from the list on the right. Then enter " -"your criteria to customize your search filters" -msgstr "" - -#: app/templates/javascript.htm:374 -msgid "Map Search" -msgstr "" - -#: app/templates/javascript.htm:375 -msgid "Accept GeoJSON" -msgstr "" - -#: app/templates/javascript.htm:376 -msgid "GeoJSON has the following errors that must be resolved:" -msgstr "" - -#: app/templates/javascript.htm:377 -msgid "Edit GeoJSON" -msgstr "" - -#: app/templates/javascript.htm:378 -msgid "Edit Coordinates" -msgstr "" - -#: app/templates/javascript.htm:379 -msgid "Show Feature" -msgstr "" - -#: app/templates/javascript.htm:380 -msgid "Coordinate Reference:" -msgstr "" - -#: app/templates/javascript.htm:381 -msgid "Zoom to all" -msgstr "" - -#: app/templates/javascript.htm:382 -msgid "Zoom to all features" -msgstr "" - -#: app/templates/javascript.htm:383 -msgid "No Email saved for User" -msgstr "" - -#: app/templates/javascript.htm:384 -msgid "Drag GeoJSON or KML files here to add" -msgstr "" - -#: app/templates/javascript.htm:385 -msgid "The following errors occurred:" -msgstr "" - -#: app/templates/javascript.htm:387 -msgid "Enter Search String here" -msgstr "" - -#: app/templates/javascript.htm:388 -msgid "View search string" -msgstr "" - -#: app/templates/javascript.htm:389 -msgid "Search String - use to filter resources displayed" -msgstr "" - -#: app/templates/javascript.htm:390 -msgid "Saved Search" -msgstr "" - -#: app/templates/javascript.htm:391 -msgid "The Arches site administrator hasn't saved any searches yet." -msgstr "" - -#: app/templates/javascript.htm:392 -msgid "searching" -msgstr "" - -#: app/templates/javascript.htm:393 -msgid "Search Facets" -msgstr "" - -#: app/templates/javascript.htm:394 -msgid "Analyze" -msgstr "" - -#: app/templates/javascript.htm:396 app/templates/javascript.htm:521 -msgid "Legend" -msgstr "" - -#: app/templates/javascript.htm:397 -msgid "close" -msgstr "" - -#: app/templates/javascript.htm:398 -#: app/templates/views/resource/edit-log.htm:93 -#: app/templates/views/resource/edit-log.htm:96 -#: app/templates/views/user-profile-manager.htm:91 -msgid "Edit" -msgstr "" - -#: app/templates/javascript.htm:400 -msgid "Details" -msgstr "" - -#: app/templates/javascript.htm:401 -msgid "Report" -msgstr "" - -#: app/templates/javascript.htm:402 -#: app/templates/views/graph/graph-base.htm:48 -#: app/templates/views/rdm/modals/add-image-form.htm:21 -msgid "Done" -msgstr "" - -#: app/templates/javascript.htm:403 -msgid "Apply" -msgstr "" - -#: app/templates/javascript.htm:405 -msgid "Panels" -msgstr "" - -#: app/templates/javascript.htm:406 -msgid "Single Panel" -msgstr "" - -#: app/templates/javascript.htm:407 -msgid "Double Panel" -msgstr "" - -#: app/templates/javascript.htm:408 -msgid "Panel 1" -msgstr "" - -#: app/templates/javascript.htm:409 -msgid "Panel 2" -msgstr "" - -#: app/templates/javascript.htm:410 -msgid "Panel Layout" -msgstr "" - -#: app/templates/javascript.htm:411 -msgid "Selected Panel Layout" -msgstr "" - -#: app/templates/javascript.htm:412 -msgid "Annotation(s)" -msgstr "" - -#: app/templates/javascript.htm:413 -msgid "Brightness" -msgstr "" - -#: app/templates/javascript.htm:414 -msgid "Contrast" -msgstr "" - -#: app/templates/javascript.htm:415 -msgid "Saturation" -msgstr "" - -#: app/templates/javascript.htm:416 -msgid "Greyscale" -msgstr "" - -#: app/templates/javascript.htm:417 app/templates/javascript.htm:420 -msgid "Default Color" -msgstr "" - -#: app/templates/javascript.htm:418 -msgid "Selected Feature Color" -msgstr "" - -#: app/templates/javascript.htm:419 -msgid "Hovered Feature Color" -msgstr "" - -#: app/templates/javascript.htm:421 -msgid "Layer Color Palette" -msgstr "" - -#: app/templates/javascript.htm:422 -msgid "Fill Opacity" -msgstr "" - -#: app/templates/javascript.htm:423 -msgid "Fill Color" -msgstr "" - -#: app/templates/javascript.htm:424 -msgid "Overview Zoom" -msgstr "" - -#: app/templates/javascript.htm:425 -msgid "Min Zoom" -msgstr "" - -#: app/templates/javascript.htm:426 -msgid "Point Radius" -msgstr "" - -#: app/templates/javascript.htm:427 -msgid "Line Opacity" -msgstr "" - -#: app/templates/javascript.htm:428 -msgid "Line Width" -msgstr "" - -#: app/templates/javascript.htm:429 -msgid "Line Color" -msgstr "" - -#: app/templates/javascript.htm:430 -msgid "Stroke Color" -msgstr "" - -#: app/templates/javascript.htm:431 -msgid "Stroke Width" -msgstr "" - -#: app/templates/javascript.htm:432 -msgid "Point Stroke Width" -msgstr "" - -#: app/templates/javascript.htm:433 -msgid "Point Stroke Opacity" -msgstr "" - -#: app/templates/javascript.htm:434 -msgid "Show Style Tools" -msgstr "" - -#: app/templates/javascript.htm:435 -msgid "Hide Style Tools" -msgstr "" - -#: app/templates/javascript.htm:436 -msgid "dismiss" -msgstr "" - -#: app/templates/javascript.htm:437 -msgid "Preview" -msgstr "" - -#: app/templates/javascript.htm:438 -#: app/templates/views/map-layer-manager.htm:72 -msgid "Basemap" -msgstr "" - -#: app/templates/javascript.htm:441 -msgid "Participating Layers" -msgstr "" - -#: app/templates/javascript.htm:442 -msgid "Add a new feature" -msgstr "" - -#: app/templates/javascript.htm:443 -msgid "files uploaded" -msgstr "" - -#: app/templates/javascript.htm:444 -msgid "Max File Size (mb)" -msgstr "" - -#: app/templates/javascript.htm:445 -msgid "example: .jpg, .png, .txt" -msgstr "" - -#: app/templates/javascript.htm:446 -msgid "" -"Images formatted as .jpg, .png, .tiff files may be uploaded. Other formats " -"will be ignored" -msgstr "" - -#: app/templates/javascript.htm:447 -msgid "Accepted formats: .jpg, .png, .tiff" -msgstr "" - -#: app/templates/javascript.htm:448 -msgid "Accepted File Types" -msgstr "" - -#: app/templates/javascript.htm:449 -msgid "Show all files" -msgstr "" - -#: app/templates/javascript.htm:450 -msgid "Show first 5 files" -msgstr "" - -#: app/templates/javascript.htm:451 -msgid "Show first 10 files" -msgstr "" - -#: app/templates/javascript.htm:452 -msgid "Show first 25 files" -msgstr "" - -#: app/templates/javascript.htm:453 -msgid "error" -msgstr "" - -#: app/templates/javascript.htm:454 -msgid "Unsaved" -msgstr "" - -#: app/templates/javascript.htm:455 -msgid "delete all files" -msgstr "" - -#: app/templates/javascript.htm:456 -msgid "add more files" -msgstr "" - -#: app/templates/javascript.htm:457 -msgid "file(s) uploaded" -msgstr "" - -#: app/templates/javascript.htm:458 -msgid "find a file" -msgstr "" - -#: app/templates/javascript.htm:459 -msgid "Uploaded Files" -msgstr "" - -#: app/templates/javascript.htm:460 -msgid "Allowed document formats:" -msgstr "" - -#: app/templates/javascript.htm:461 -msgid "" -"You may upload as many documents as you wish, but the maximum size of any " -"single file is" -msgstr "" - -#: app/templates/javascript.htm:462 -msgid "" -"You may upload as many photos as you wish, but the maximum size of any " -"single file is 8MB." -msgstr "" - -#: app/templates/javascript.htm:463 -msgid "Adding documents to this record is optional." -msgstr "" - -#: app/templates/javascript.htm:464 -msgid "Adding photos to this record is optional." -msgstr "" - -#: app/templates/javascript.htm:465 -msgid "Select Files" -msgstr "" - -#: app/templates/javascript.htm:466 -msgid "Select Photographs" -msgstr "" - -#: app/templates/javascript.htm:467 -msgid "Drag & Drop your files onto this panel" -msgstr "" - -#: app/templates/javascript.htm:468 -msgid "Drag & Drop your photos onto this panel" -msgstr "" - -#: app/templates/javascript.htm:469 -msgid "Upload Photographs" -msgstr "" - -#: app/templates/javascript.htm:470 -msgid "Upload Documents" -msgstr "" - -#: app/templates/javascript.htm:471 -msgid "Show Gallery" -msgstr "" - -#: app/templates/javascript.htm:472 -msgid "Hide Gallery" -msgstr "" - -#: app/templates/javascript.htm:473 -msgid "Select default value" -msgstr "" - -#: app/templates/javascript.htm:474 -msgid "Select a filter" -msgstr "" - -#: app/templates/javascript.htm:475 -msgid "Default Manifest URL" -msgstr "" - -#: app/templates/javascript.htm:476 -msgid "Enter Manifest URL" -msgstr "" - -#: app/templates/javascript.htm:477 -msgid "Select a manifest" -msgstr "" - -#: app/templates/javascript.htm:478 app/templates/javascript.htm:669 -msgid "No manifest selected" -msgstr "" - -#: app/templates/javascript.htm:479 -msgid "Load manifest" -msgstr "" - -#: app/templates/javascript.htm:480 -msgid "Loading manifest" -msgstr "" - -#: app/templates/javascript.htm:481 -msgid "Error loading manifest" -msgstr "" - -#: app/templates/javascript.htm:483 -msgid "Filter images" -msgstr "" - -#: app/templates/javascript.htm:484 -msgid "Draw a" -msgstr "" - -#: app/templates/javascript.htm:485 -msgid "View Gallery" -msgstr "" - -#: app/templates/javascript.htm:486 -msgid "Image" -msgstr "" - -#: app/templates/javascript.htm:487 -msgid "Image List" -msgstr "" - -#: app/templates/javascript.htm:488 -msgid "Image Tools" -msgstr "" - -#: app/templates/javascript.htm:489 app/templates/javascript.htm:667 -msgid "Switch Image Service" -msgstr "" - -#: app/templates/javascript.htm:490 -msgid "Resource Instance Name" -msgstr "" - -#: app/templates/javascript.htm:491 app/templates/javascript.htm:620 -msgid "Related Resource Summary" -msgstr "" - -#: app/templates/javascript.htm:492 app/templates/views/graph-designer.htm:34 -msgid "Resource Model" -msgstr "" - -#: app/templates/javascript.htm:493 app/templates/views/edit-history.htm:18 -msgid "Resource Type" -msgstr "" - -#: app/templates/javascript.htm:494 -msgid "Resource Details" -msgstr "" - -#: app/templates/javascript.htm:495 -msgid "" -"Click the 'Details' link on a search result from the list on the left to " -"view more information about a resource." -msgstr "" - -#: app/templates/javascript.htm:496 -msgid "Resource Information" -msgstr "" - -#: app/templates/javascript.htm:497 -msgid "Has Relationship" -msgstr "" - -#: app/templates/javascript.htm:498 -msgid "Resource's relationship to" -msgstr "" - -#: app/templates/javascript.htm:499 -msgid "Related to" -msgstr "" - -#: app/templates/javascript.htm:500 -msgid "'s relationship to Resource" -msgstr "" - -#: app/templates/javascript.htm:501 -msgid "Relationships" -msgstr "" - -#: app/templates/javascript.htm:502 -msgid "relationships shown" -msgstr "" - -#: app/templates/javascript.htm:503 -msgid "Search Network" -msgstr "" - -#: app/templates/javascript.htm:504 -msgid "Analyze Network" -msgstr "" - -#: app/templates/javascript.htm:505 -msgid "Click a node/edge for info" -msgstr "" - -#: app/templates/javascript.htm:506 -msgid "Click a node to show more relationships" -msgstr "" - -#: app/templates/javascript.htm:507 -msgid "Click a node refocus" -msgstr "" - -#: app/templates/javascript.htm:508 -msgid "Click a node/edge to remove" -msgstr "" - -#: app/templates/javascript.htm:510 -msgid "Workflow Complete" -msgstr "" - -#: app/templates/javascript.htm:511 -msgid "with" -msgstr "" - -#: app/templates/javascript.htm:512 -msgid "Link Text (Optional)" -msgstr "" - -#: app/templates/javascript.htm:513 -msgid "URL for link" -msgstr "" - -#: app/templates/javascript.htm:514 -msgid "URL Link Color" -msgstr "" - -#: app/templates/javascript.htm:515 -msgid "URL Placeholder" -msgstr "" - -#: app/templates/javascript.htm:516 -msgid "URL Label Placeholder" -msgstr "" - -#: app/templates/javascript.htm:517 -msgid "Default relationship to" -msgstr "" - -#: app/templates/javascript.htm:518 -msgid "Default inverse relationship to" -msgstr "" - -#: app/templates/javascript.htm:519 -msgid "References" -msgstr "" - -#: app/templates/javascript.htm:520 -msgid "Does not reference" -msgstr "" - -#: app/templates/javascript.htm:522 -msgid "" -"Check to limit the dropdown to only this widget's node rather than all nodes " -"in the tile." -msgstr "" - -#: app/templates/javascript.htm:523 -msgid "Show only the value of the selected node in the dropdown options" -msgstr "" - -#: app/templates/javascript.htm:524 -msgid "Dropdown Format" -msgstr "" - -#: app/templates/javascript.htm:525 -msgid "Provisional" -msgstr "" - -#: app/templates/javascript.htm:526 -msgid "Card Name" -msgstr "" - -#: app/templates/javascript.htm:527 -msgid "Add Tab" -msgstr "" - -#: app/templates/javascript.htm:528 -msgid "Tab Name" -msgstr "" - -#: app/templates/javascript.htm:529 -msgid "Find a resource..." -msgstr "" - -#: app/templates/javascript.htm:530 -msgid "Find an icon" -msgstr "" - -#: app/templates/javascript.htm:531 -msgid "Select Tab icon" -msgstr "" - -#: app/templates/javascript.htm:532 -msgid "Select cards in this tab" -msgstr "" - -#: app/templates/javascript.htm:533 -msgid "Enter manifest URL" -msgstr "" - -#: app/templates/javascript.htm:534 -msgid "Default Image Service URL" -msgstr "" - -#: app/templates/javascript.htm:536 -msgid "Select image nodes to include" -msgstr "" - -#: app/templates/javascript.htm:537 -msgid "Select an Ontology Property" -msgstr "" - -#: app/templates/javascript.htm:538 -msgid "Select a resource" -msgstr "" - -#: app/templates/javascript.htm:539 -msgid "Select a resource model" -msgstr "" - -#: app/templates/javascript.htm:542 -msgid "Choose a sibling card" -msgstr "" - -#: app/templates/javascript.htm:546 -msgid "This resource has provisional edits that are pending review" -msgstr "" - -#: app/templates/javascript.htm:547 -msgid "" -"This resource has provisional edits (not displayed in this report) that are " -"pending review" -msgstr "" - -#: app/templates/javascript.htm:548 -msgid "Find an address" -msgstr "" - -#: app/templates/javascript.htm:549 -msgid "Select drawings text (optional)" -msgstr "" - -#: app/templates/javascript.htm:550 -msgid "Select drawings map source (optional)" -msgstr "" - -#: app/templates/javascript.htm:551 -msgid "Select drawings map source layer (optional)" -msgstr "" - -#: app/templates/javascript.htm:552 -msgid "Map Center Longitude" -msgstr "" - -#: app/templates/javascript.htm:553 -msgid "Map Center Latitude" -msgstr "" - -#: app/templates/javascript.htm:554 -msgid "Longitude (x coordinate)" -msgstr "" - -#: app/templates/javascript.htm:555 -msgid "Latitude (y coordinate)" -msgstr "" - -#: app/templates/javascript.htm:556 -msgid "Available Geometry Types" -msgstr "" - -#: app/templates/javascript.htm:557 -msgid "Zoom Level" -msgstr "" - -#: app/templates/javascript.htm:558 -msgid "Default Zoom" -msgstr "" - -#: app/templates/javascript.htm:559 -msgid "Update Features" -msgstr "" - -#: app/templates/javascript.htm:560 -msgid "feature(s)" -msgstr "" - -#: app/templates/javascript.htm:561 -msgid "Point" -msgstr "" - -#: app/templates/javascript.htm:562 -msgid "Line" -msgstr "" - -#: app/templates/javascript.htm:563 -msgid "Polygon" -msgstr "" - -#: app/templates/javascript.htm:564 -msgid "Add point" -msgstr "" - -#: app/templates/javascript.htm:565 -msgid "Add line" -msgstr "" - -#: app/templates/javascript.htm:566 -msgid "Add polygon" -msgstr "" - -#: app/templates/javascript.htm:567 -msgid "Select drawing" -msgstr "" - -#: app/templates/javascript.htm:568 -msgid "Related instance map sources" -msgstr "" - -#: app/templates/javascript.htm:569 -msgid "Related instance map source layers (optional)" -msgstr "" - -#: app/templates/javascript.htm:570 -msgid "Intersection layer configuration" -msgstr "" - -#: app/templates/javascript.htm:571 -#, python-brace-format -msgid "Create a new ${graphName}" -msgstr "" - -#: app/templates/javascript.htm:572 -msgid "Add new Relationship" -msgstr "" - -#: app/templates/javascript.htm:573 -msgid "Network response was not ok" -msgstr "" - -#: app/templates/javascript.htm:575 -msgid "Term Matches" -msgstr "" - -#: app/templates/javascript.htm:576 -#, python-brace-format -msgid "${total} date values" -msgstr "" - -#: app/templates/javascript.htm:577 -msgid "Select Widgets" -msgstr "" - -#: app/templates/javascript.htm:578 -msgid "(This card data will define the resource description.)" -msgstr "" - -#: app/templates/javascript.htm:579 -msgid "(This card data will define the resource name.)" -msgstr "" - -#: app/templates/javascript.htm:580 -msgid "Settings Conflict: Remove this card from grouped card?" -msgstr "" - -#: app/templates/javascript.htm:581 -#, python-brace-format -msgid "" -"The cardinality of this card cannot be changed until you remove it from " -"being grouped with the ${cardName} card. Do you want to remove this card " -"from being grouped with the ${cardName} card" -msgstr "" - -#: app/templates/javascript.htm:582 -msgid "!! Referenced model does not exist -- Delete and select a new model !!" -msgstr "" - -#: app/templates/javascript.htm:583 -#: app/templates/views/map-layer-manager.htm:132 -msgid "Layer Preview" -msgstr "" - -#: app/templates/javascript.htm:584 -msgid "Layer Icon" -msgstr "" - -#: app/templates/javascript.htm:585 app/templates/views/graph-designer.htm:127 -#: app/templates/views/graph-designer.htm:136 -#: app/templates/views/graph/function-manager.htm:29 -#: app/templates/views/map-layer-manager.htm:123 -msgid "Save Edits" -msgstr "" - -#: app/templates/javascript.htm:586 app/templates/views/graph-designer.htm:125 -#: app/templates/views/graph-designer.htm:134 -#: app/templates/views/graph/function-manager.htm:28 -#: app/templates/views/map-layer-manager.htm:124 -msgid "Discard Edits" -msgstr "" - -#: app/templates/javascript.htm:587 -msgid "Activated" -msgstr "" - -#: app/templates/javascript.htm:591 -msgid "Layer Name" -msgstr "" - -#: app/templates/javascript.htm:592 -msgid "Add to search map by default:" -msgstr "" - -#: app/templates/javascript.htm:593 -msgid "Legend content" -msgstr "" - -#: app/templates/javascript.htm:595 -msgid "" -"Layer has no data - data on map is for preview purposes. This layer will " -"not show up in map overlays until data is added." -msgstr "" - -#: app/templates/javascript.htm:596 -msgid "Point Style" -msgstr "" - -#: app/templates/javascript.htm:597 -msgid "Line Style" -msgstr "" - -#: app/templates/javascript.htm:598 -msgid "Polygon Style" -msgstr "" - -#: app/templates/javascript.htm:600 -msgid "Halo color" -msgstr "" - -#: app/templates/javascript.htm:601 -msgid "Fill color" -msgstr "" - -#: app/templates/javascript.htm:602 -msgid "Radius" -msgstr "" - -#: app/templates/javascript.htm:603 -msgid "Halo radius" -msgstr "" - -#: app/templates/javascript.htm:604 -msgid "Weight" -msgstr "" - -#: app/templates/javascript.htm:605 -msgid "Halo weight" -msgstr "" - -#: app/templates/javascript.htm:606 -msgid "Outline color" -msgstr "" - -#: app/templates/javascript.htm:607 -msgid "Outline weight" -msgstr "" - -#: app/templates/javascript.htm:608 -msgid "Cluster Distance" -msgstr "" - -#: app/templates/javascript.htm:609 -msgid "Cluster Max Zoom" -msgstr "" - -#: app/templates/javascript.htm:610 -msgid "Cluster Min Points" -msgstr "" - -#: app/templates/javascript.htm:611 -msgid "Vector Simplification" -msgstr "" - -#: app/templates/javascript.htm:612 -msgid "Changes to cluster settings will only be reflected after saving." -msgstr "" - -#: app/templates/javascript.htm:613 -msgid "" -"Preview map data do not use clustering algorithm. Add data for this " -"resource model to see real clustered data." -msgstr "" - -#: app/templates/javascript.htm:614 -msgid "" -"The following users and groups can view this layer. If you wish to change " -"who can access this layer, please update the permissions on the layer node." -msgstr "" - -#: app/templates/javascript.htm:615 -msgid "Users" -msgstr "" - -#: app/templates/javascript.htm:616 -msgid "Groups" -msgstr "" - -#: app/templates/javascript.htm:617 -msgid "Related Resources Editor" -msgstr "" - -#: app/templates/javascript.htm:618 -msgid "Add Related Resources" -msgstr "" - -#: app/templates/javascript.htm:619 -msgid "" -"Arches allows you to define relationships between resources so you can " -"better understand the context and interplay between physical objects, " -"events, activities, people and documents. Relating resources lets you build " -"a network of relationships for your data objects." -msgstr "" - -#: app/templates/javascript.htm:621 -msgid "Table" -msgstr "" - -#: app/templates/javascript.htm:622 -msgid "Visualization" -msgstr "" - -#: app/templates/javascript.htm:623 -msgid "Show Me How" -msgstr "" - -#: app/templates/javascript.htm:624 -msgid "Select resources and relate it to this one" -msgstr "" - -#: app/templates/javascript.htm:625 -msgid "e.g.: .txt" -msgstr "" - -#: app/templates/javascript.htm:626 -msgid "resource relations" -msgstr "" - -#: app/templates/javascript.htm:627 -msgid "'Select an Ontology Property'" -msgstr "" - -#: app/templates/javascript.htm:628 -msgid "This is a Node to Resource Instance relationship" -msgstr "" - -#: app/templates/javascript.htm:629 -msgid "'s relationship to " -msgstr "" - -#: app/templates/javascript.htm:630 -#: app/templates/views/graph/graph-designer/node-form.htm:71 -msgid "Relationship to" -msgstr "" - -#: app/templates/javascript.htm:631 -msgid "Inverse Relationship to" -msgstr "" - -#: app/templates/javascript.htm:632 -msgid "This is a Resource Instance to Resource Instance relationship" -msgstr "" - -#: app/templates/javascript.htm:633 -msgid "Relationship" -msgstr "" - -#: app/templates/javascript.htm:634 -msgid "From Date" -msgstr "" - -#: app/templates/javascript.htm:635 -msgid "To Date" -msgstr "" - -#: app/templates/javascript.htm:637 -msgid "Delete this entry" -msgstr "" - -#: app/templates/javascript.htm:638 app/templates/javascript.htm:757 -#: app/templates/views/components/plugins/workflow.htm:180 -#: app/templates/views/components/plugins/workflow.htm:183 -#: app/templates/views/graph/card-configuration/card-form-preview.htm:126 -#: app/templates/views/rdm/modals/manage-parent-form.htm:58 -#: app/templates/views/rdm/modals/related-concept-form.htm:68 -#: app/templates/views/rdm/modals/related-member-form.htm:67 -#: app/templates/views/rdm/modals/value-form.htm:64 -#: app/templates/views/rdm/modals/value-form.htm:143 -#: app/templates/views/rdm/modals/value-form.htm:221 -#: app/templates/views/user-profile-manager.htm:155 -msgid "Save" -msgstr "" - -#: app/templates/javascript.htm:639 -msgid "This resource is not related to any other resources" -msgstr "" - -#: app/templates/javascript.htm:640 -msgid "Service" -msgstr "" - -#: app/templates/javascript.htm:641 -msgid "Canvas" -msgstr "" - -#: app/templates/javascript.htm:642 -msgid "Manage Image Service" -msgstr "" - -#: app/templates/javascript.htm:643 -msgid "Title" -msgstr "" - -#: app/templates/javascript.htm:645 -msgid "Attribution" -msgstr "" - -#: app/templates/javascript.htm:646 -msgid "Attribution Logo" -msgstr "" - -#: app/templates/javascript.htm:647 -msgid "Metadata" -msgstr "" - -#: app/templates/javascript.htm:649 -msgid "Manage Image Canvases" -msgstr "" - -#: app/templates/javascript.htm:650 -#: app/templates/views/rdm/concept-report.htm:229 -msgid "Images" -msgstr "" - -#: app/templates/javascript.htm:651 -msgid "Select image to delete from the image service" -msgstr "" - -#: app/templates/javascript.htm:652 app/templates/javascript.htm:750 -msgid "Select All" -msgstr "" - -#: app/templates/javascript.htm:653 app/templates/javascript.htm:751 -msgid "Clear All" -msgstr "" - -#: app/templates/javascript.htm:654 app/templates/javascript.htm:752 -msgid "Delete Selected" -msgstr "" - -#: app/templates/javascript.htm:655 -msgid "Drag or " -msgstr "" - -#: app/templates/javascript.htm:656 -msgid "click here " -msgstr "" - -#: app/templates/javascript.htm:657 -msgid "to upload photos" -msgstr "" - -#: app/templates/javascript.htm:658 -msgid "Selected Image Name" -msgstr "" - -#: app/templates/javascript.htm:659 -msgid "Create New Service" -msgstr "" - -#: app/templates/javascript.htm:660 -msgid "Edit a service" -msgstr "" - -#: app/templates/javascript.htm:661 -msgid "Drag & Drop Your Images Here" -msgstr "" - -#: app/templates/javascript.htm:662 -msgid "Import digital images and create a new image service" -msgstr "" - -#: app/templates/javascript.htm:663 -msgid "Select Images" -msgstr "" - -#: app/templates/javascript.htm:664 -msgid "" -"Create a new service by uploading one or more images. Images will be " -"uploaded and processes so that you can view, annotate, and share them with " -"others" -msgstr "" - -#: app/templates/javascript.htm:665 -msgid "Edit an existing Image Service" -msgstr "" - -#: app/templates/javascript.htm:666 -msgid "" -"Update the information and images related to an existing Image Service. Or " -"copy and paste in the URL of a IIIF Manifest to add a service from an " -"external service" -msgstr "" - -#: app/templates/javascript.htm:668 -msgid "Create Image Service" -msgstr "" - -#: app/templates/javascript.htm:670 -msgid "Service Title" -msgstr "" - -#: app/templates/javascript.htm:671 -msgid "Service Description" -msgstr "" - -#: app/templates/javascript.htm:672 -msgid "Metadata Label" -msgstr "" - -#: app/templates/javascript.htm:673 -msgid "Metadata Value" -msgstr "" - -#: app/templates/javascript.htm:674 -msgid "Image Caption" -msgstr "" - -#: app/templates/javascript.htm:675 -msgid "Upload .csv or .zip File" -msgstr "" - -#: app/templates/javascript.htm:676 -msgid "Drag & Drop your file onto this area to upload" -msgstr "" - -#: app/templates/javascript.htm:677 -msgid "Select File" -msgstr "" - -#: app/templates/javascript.htm:678 app/templates/javascript.htm:693 -msgid "Cancel File Import" -msgstr "" - -#: app/templates/javascript.htm:679 -msgid "" -"Use this workflow to upload a file with data that you want to use to create " -"new data instances of a model." -msgstr "" - -#: app/templates/javascript.htm:680 -msgid "Import Format: Single .csv file" -msgstr "" - -#: app/templates/javascript.htm:681 -msgid "File Summary" -msgstr "" - -#: app/templates/javascript.htm:682 -msgid "File name" -msgstr "" - -#: app/templates/javascript.htm:683 -msgid "File size" -msgstr "" - -#: app/templates/javascript.htm:684 -msgid "Number of rows" -msgstr "" - -#: app/templates/javascript.htm:685 -msgid "Target Model" -msgstr "" - -#: app/templates/javascript.htm:686 -msgid "Import Details" -msgstr "" - -#: app/templates/javascript.htm:687 -msgid "Column names in the first row" -msgstr "" - -#: app/templates/javascript.htm:688 app/templates/javascript.htm:762 -msgid "Use as an id" -msgstr "" - -#: app/templates/javascript.htm:689 -msgid "Showing First" -msgstr "" - -#: app/templates/javascript.htm:690 -msgid "Showing All" -msgstr "" - -#: app/templates/javascript.htm:691 -msgid "Rows" -msgstr "" - -#: app/templates/javascript.htm:692 -msgid "Import data" -msgstr "" - -#: app/templates/javascript.htm:694 -msgid "Import Single CSV" -msgstr "" - -#: app/templates/javascript.htm:695 -msgid "Target Resource" -msgstr "" - -#: app/templates/javascript.htm:696 -msgid "Target Fields" -msgstr "" - -#: app/templates/javascript.htm:697 -msgid "Download Templates" -msgstr "" - -#: app/templates/javascript.htm:698 -msgid "Select Template" -msgstr "" - -#: app/templates/javascript.htm:699 -msgid "Upload .zip File" -msgstr "" - -#: app/templates/javascript.htm:700 -msgid "Upload Your .zip File" -msgstr "" - -#: app/templates/javascript.htm:701 -msgid "Branch Excel" -msgstr "" - -#: app/templates/javascript.htm:702 -msgid "File Upload Summary" -msgstr "" - -#: app/templates/javascript.htm:703 -msgid "File" -msgstr "" - -#: app/templates/javascript.htm:704 -msgid "Size" -msgstr "" - -#: app/templates/javascript.htm:705 -#: app/templates/two_factor_authentication_reset.htm:42 -msgid "Submit" -msgstr "" - -#: app/templates/javascript.htm:706 -msgid "File contents" -msgstr "" - -#: app/templates/javascript.htm:707 -msgid "Import Branch Excel Summary" -msgstr "" - -#: app/templates/javascript.htm:708 -msgid "Excel File" -msgstr "" - -#: app/templates/javascript.htm:709 -msgid "Worksheets" -msgstr "" - -#: app/templates/javascript.htm:710 -msgid "Tiles" -msgstr "" - -#: app/templates/javascript.htm:711 -#: app/templates/views/rdm/modals/import-concept-form.htm:53 -msgid "Import" -msgstr "" - -#: app/templates/javascript.htm:712 -#: app/templates/views/rdm/modals/export-scheme-form.htm:27 -msgid "Export" -msgstr "" - -#: app/templates/javascript.htm:713 -msgid "Filter Tasks" -msgstr "" - -#: app/templates/javascript.htm:714 -msgid "Filter Modules" -msgstr "" - -#: app/templates/javascript.htm:715 -msgid "Start" -msgstr "" - -#: app/templates/javascript.htm:716 -msgid "Warning" -msgstr "" - -#: app/templates/javascript.htm:717 -msgid "Are you sure you want to delete this load?" -msgstr "" - -#: app/templates/javascript.htm:718 -msgid "undo import" -msgstr "" - -#: app/templates/javascript.htm:719 -msgid "remove from history" -msgstr "" - -#: app/templates/javascript.htm:720 -msgid "indexing" -msgstr "" - -#: app/templates/javascript.htm:721 -msgid "completed" -msgstr "" - -#: app/templates/javascript.htm:722 -msgid "failed" -msgstr "" - -#: app/templates/javascript.htm:723 -msgid "running" -msgstr "" - -#: app/templates/javascript.htm:724 -msgid "unloading" -msgstr "" - -#: app/templates/javascript.htm:725 -msgid "unloaded" -msgstr "" - -#: app/templates/javascript.htm:726 -msgid "Validation Errors" -msgstr "" - -#: app/templates/javascript.htm:727 -msgid "No Error Found" -msgstr "" - -#: app/templates/javascript.htm:728 -msgid "Loading data" -msgstr "" - -#: app/templates/javascript.htm:729 -msgid "Loading status" -msgstr "" - -#: app/templates/javascript.htm:730 -msgid "Loading started" -msgstr "" - -#: app/templates/javascript.htm:731 -msgid "Loading ended" -msgstr "" - -#: app/templates/javascript.htm:732 -msgid "Load duration" -msgstr "" - -#: app/templates/javascript.htm:733 -msgid "Indexing ended" -msgstr "" - -#: app/templates/javascript.htm:734 -msgid "Indexing duration" -msgstr "" - -#: app/templates/javascript.htm:736 -msgid "Unable to display the selected file" -msgstr "" - -#: app/templates/javascript.htm:737 -msgid "This file can't be displayed." -msgstr "" - -#: app/templates/javascript.htm:738 -msgid "It may be a proprietary format or there isn't a loader available yet" -msgstr "" - -#: app/templates/javascript.htm:739 -msgid "to present it in this webpage." -msgstr "" - -#: app/templates/javascript.htm:740 -msgid "Unable to parse your file with the " -msgstr "" - -#: app/templates/javascript.htm:741 -msgid "loader" -msgstr "" - -#: app/templates/javascript.htm:742 -msgid "Select File Loader" -msgstr "" - -#: app/templates/javascript.htm:743 -msgid "" -"Select the loader best suited for processing and visualizing the selected " -"file" -msgstr "" - -#: app/templates/javascript.htm:744 -msgid "Upload Files" -msgstr "" - -#: app/templates/javascript.htm:745 -msgid "" -"You may upload as many files as you wish; check with the site admin on the " -"maximum file size." -msgstr "" - -#: app/templates/javascript.htm:746 -msgid "optional" -msgstr "" - -#: app/templates/javascript.htm:747 -msgid "Adding files to this record is" -msgstr "" - -#: app/templates/javascript.htm:748 -msgid "" -"Images formatted as .jpg, .png files may be uploaded. Other formats may " -"require a loader to view." -msgstr "" - -#: app/templates/javascript.htm:749 -msgid "File Filter" -msgstr "" - -#: app/templates/javascript.htm:753 -msgid "Download Selected" -msgstr "" - -#: app/templates/javascript.htm:754 -msgid "Loader" -msgstr "" - -#: app/templates/javascript.htm:755 -msgid "File Renderer" -msgstr "" - -#: app/templates/javascript.htm:758 -msgid "files selected" -msgstr "" - -#: app/templates/javascript.htm:759 -msgid "add files" -msgstr "" - -#: app/templates/javascript.htm:760 -msgid "Apply to Selected Files" -msgstr "" - -#: app/templates/javascript.htm:761 -msgid "Apply the same loader to all selected files in the dataset" -msgstr "" - -#: app/templates/login.htm:38 app/templates/login.htm:68 -msgid "Sign In" -msgstr "" - -#: app/templates/login.htm:40 -msgid "" -"Sign in to Arches to access your data modeling, editing, and discovery tools." -msgstr "" - -#: app/templates/login.htm:46 -msgid "Your account has been created. Please sign in." -msgstr "" - -#: app/templates/login.htm:74 -msgid "Login failed" -msgstr "" - -#: app/templates/login.htm:75 -msgid "Invalid username and/or password." -msgstr "" - -#: app/templates/login.htm:80 app/templates/signup.htm:159 -msgid "Forgot password ?" -msgstr "" - -#: app/templates/login.htm:81 -msgid "Forgot password?" -msgstr "" - -#: app/templates/login.htm:84 app/templates/signup.htm:160 -msgid "Create a new account" -msgstr "" - -#: app/templates/login.htm:90 app/templates/signup.htm:153 -msgid "Learn more about Arches" -msgstr "" - -#: app/templates/navbar/function-manage-menu.htm:11 -msgid "Select a graph..." -msgstr "" - -#: app/templates/navbar/function-manage-menu.htm:18 -msgid "Graphs/Semantics" -msgstr "" - -#: app/templates/navbar/function-manage-menu.htm:19 -msgid "Define graph" -msgstr "" - -#: app/templates/navbar/function-manage-menu.htm:28 -#: app/templates/navbar/graph-designer-menu.htm:102 -msgid "Return to Arches Designer" -msgstr "" - -#: app/templates/navbar/function-manage-menu.htm:29 -#: app/templates/navbar/graph-designer-menu.htm:103 -msgid "Create Arches Resource Models and Branches" -msgstr "" - -#: app/templates/navbar/function-manage-menu.htm:37 -#: app/templates/navbar/graph-designer-menu.htm:111 -msgid "footer" -msgstr "" - -#: app/templates/navbar/graph-designer-menu.htm:15 -msgid "New Model" -msgstr "" - -#: app/templates/navbar/graph-designer-menu.htm:16 -msgid "Create new Resource Model" -msgstr "" - -#: app/templates/navbar/graph-designer-menu.htm:24 -#: app/templates/views/graph.htm:75 app/views/graph.py:346 -msgid "New Branch" -msgstr "" - -#: app/templates/navbar/graph-designer-menu.htm:25 -msgid "Create new Branch" -msgstr "" - -#: app/templates/navbar/graph-designer-menu.htm:36 -msgid "Import Model" -msgstr "" - -#: app/templates/navbar/graph-designer-menu.htm:37 -msgid "Import Model by uploading a json file" -msgstr "" - -#: app/templates/navbar/graph-designer-menu.htm:63 -msgid "Functions" -msgstr "" - -#: app/templates/navbar/graph-designer-menu.htm:64 -msgid "Configure functions attached to this Resource Model" -msgstr "" - -#: app/templates/navbar/graph-designer-menu.htm:72 -msgid "Export Mapping File" -msgstr "" - -#: app/templates/navbar/graph-designer-menu.htm:74 -msgid "Use a mapping file with import/export of business data" -msgstr "" - -#: app/templates/navbar/graph-designer-menu.htm:83 -msgid "Delete Associated Instances" -msgstr "" - -#: app/templates/navbar/graph-designer-menu.htm:84 -msgid "Delete All Associated Instances with this Model" -msgstr "" - -#: app/templates/navbar/resource-manage-menu.htm:17 -msgid "Copy Resource" -msgstr "" - -#: app/templates/navbar/resource-manage-menu.htm:18 -msgid "Make a copy and start editing" -msgstr "" - -#: app/templates/navbar/resource-manage-menu.htm:28 -msgid "Delete Resource" -msgstr "" - -#: app/templates/navbar/resource-manage-menu.htm:29 -msgid "Permanently delete this resource" -msgstr "" - -#: app/templates/navbar/resource-manage-menu.htm:39 -msgid "Review Edit History" -msgstr "" - -#: app/templates/navbar/resource-manage-menu.htm:40 -msgid "View changes to this resource record" -msgstr "" - -#: app/templates/navbar/resource-manage-menu.htm:49 -msgid "Jump to Report" -msgstr "" - -#: app/templates/navbar/resource-manage-menu.htm:50 -msgid "View the full resource report" -msgstr "" - -#: app/templates/navbar/resource-manage-menu.htm:58 -msgid "Print Report" -msgstr "" - -#: app/templates/navbar/resource-manage-menu.htm:59 -msgid "Print the full resource report" -msgstr "" - -#: app/templates/rdm.htm:66 app/templates/views/rdm/concept-report.htm:28 -#: app/templates/views/rdm/concept-report.htm:52 -msgid "Toggle Dropdown" -msgstr "" - -#: app/templates/rdm.htm:69 -msgid "Add Thesauri" -msgstr "" - -#: app/templates/rdm.htm:70 -msgid "Import Thesauri" -msgstr "" - -#: app/templates/rdm.htm:71 -msgid "Export Thesauri" -msgstr "" - -#: app/templates/rdm.htm:72 -msgid "Delete Thesauri" -msgstr "" - -#: app/templates/rdm.htm:74 -#: app/templates/views/rdm/modals/add-collection-form.htm:7 -msgid "Add Collection" -msgstr "" - -#: app/templates/rdm.htm:75 -#: app/templates/views/rdm/modals/delete-collection-form.htm:7 -msgid "Delete Collection" -msgstr "" - -#: app/templates/rdm.htm:76 -msgid "Export All Collections" -msgstr "" - -#: app/templates/rdm.htm:120 app/templates/views/rdm/concept-report.htm:3 -#: app/templates/views/rdm/entitytype-report.htm:3 -msgid "Loading..." -msgstr "" - -#: app/templates/signup.htm:31 -msgid "Create Account" -msgstr "" - -#: app/templates/signup.htm:33 -msgid "Register to access data modeling, editing, and discovery tools." -msgstr "" - -#: app/templates/signup.htm:40 -msgid "Please correct the error below." -msgstr "" - -#: app/templates/signup.htm:40 -msgid "Please correct the errors below." -msgstr "" - -#: app/templates/signup.htm:127 -msgid "Signup" -msgstr "" - -#: app/templates/two_factor_authentication_login.htm:19 -#: app/templates/views/user-profile-manager.htm:127 -#: app/templates/views/user-profile-manager.htm:238 -msgid "Two-Factor Authentication" -msgstr "" - -#: app/templates/two_factor_authentication_login.htm:24 -msgid "" -"Please enter the code from your external authentication application below." -msgstr "" - -#: app/templates/two_factor_authentication_login.htm:63 -msgid "Authentication failed. Please try again." -msgstr "" - -#: app/templates/two_factor_authentication_login.htm:71 -msgid "Need to reset two-factor authentication?" -msgstr "" - -#: app/templates/two_factor_authentication_login.htm:81 -msgid "" -"The administrator has required that all users enable two-factor " -"authentication." -msgstr "" - -#: app/templates/two_factor_authentication_login.htm:82 -msgid "Enable two-factor authentication via email" -msgstr "" - -#: app/templates/two_factor_authentication_reset.htm:19 -msgid "Update Two-Factor Authentication" -msgstr "" - -#: app/templates/two_factor_authentication_reset.htm:24 -msgid "Please enter an email address below." -msgstr "" - -#: app/templates/two_factor_authentication_reset.htm:25 -msgid "" -"If it is registered in our system it will receive instructions to update two-" -"factor authentication." -msgstr "" - -#: app/templates/two_factor_authentication_reset.htm:53 -msgid "Success!" -msgstr "" - -#: app/templates/two_factor_authentication_reset.htm:57 -msgid "Email address:" -msgstr "" - -#: app/templates/two_factor_authentication_reset.htm:65 -msgid "" -"If this email address is registered, an email has been sent to it containing " -"instructions to enable two-factor authentication." -msgstr "" - -#: app/templates/two_factor_authentication_reset.htm:72 -#: app/templates/two_factor_authentication_settings.htm:161 -msgid "Click here to return to login page" -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:22 -msgid "Two-Factor Authentication Settings" -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:33 -msgid "This page will expire in 5 minutes." -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:46 -msgid "Two-Factor Authentication:" -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:49 -msgid "ENABLED" -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:51 -msgid "DISABLED" -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:71 -msgid "Generate a new shared secret key" -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:73 -msgid "Enable two-factor authentication" -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:80 -msgid "Scan the QR code below with your external authentication application." -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:91 -msgid "Click here to generate data for manual entry." -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:97 -msgid "Enter the data below into your external authentication application." -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:105 -msgid "Issuer Name:" -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:111 -msgid "Account Name:" -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:117 -msgid "Secret Key:" -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:123 -msgid "Algorithm Type:" -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:126 -msgid "Time based" -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:138 -msgid "Click here to generate QR code." -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:152 -msgid "" -"To disable two-factor authentication, please contact your administrator." -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:156 -msgid "Disable two-factor authentication" -msgstr "" - -#: app/templates/views/components/plugins/workflow.htm:10 -msgid "Insert Workflow Name" -msgstr "" - -#: app/templates/views/components/plugins/workflow.htm:21 -msgid "Save and Complete Workflow" -msgstr "" - -#: app/templates/views/components/plugins/workflow.htm:24 -msgid "Complete" -msgstr "" - -#: app/templates/views/components/plugins/workflow.htm:146 -msgid "Previous Step" -msgstr "" - -#: app/templates/views/components/plugins/workflow.htm:149 -msgid "Previous" -msgstr "" - -#: app/templates/views/components/plugins/workflow.htm:166 -msgid "Undo" -msgstr "" - -#: app/templates/views/components/plugins/workflow.htm:196 -msgid "Save and Continue" -msgstr "" - -#: app/templates/views/components/plugins/workflow.htm:199 -#: app/templates/views/components/plugins/workflow.htm:220 -#: app/templates/views/components/plugins/workflow.htm:242 -msgid "Next" -msgstr "" - -#: app/templates/views/components/plugins/workflow.htm:217 -#: app/templates/views/components/plugins/workflow.htm:239 -msgid "Next Step" -msgstr "" - -#: app/templates/views/concept-graph.htm:14 -msgid "Concept" -msgstr "" - -#: app/templates/views/concept-graph.htm:19 -msgid "Delete this concept" -msgstr "" - -#: app/templates/views/concept-graph.htm:19 -msgid "Delete this concept and all of it's sub concepts." -msgstr "" - -#: app/templates/views/concept-graph.htm:20 -#: app/templates/views/rdm/concept-report.htm:138 -#: app/templates/views/rdm/concept-report.htm:147 -#: app/templates/views/rdm/concept-report.htm:187 -msgid "Jump to this concept" -msgstr "" - -#: app/templates/views/concept-graph.htm:20 -msgid "More Child Concept" -msgstr "" - -#: app/templates/views/concept-search.htm:2 -#: app/templates/views/rdm/modals/import-concept-form.htm:21 -msgid "Search for a concept..." -msgstr "" - -#: app/templates/views/edit-history.htm:11 -msgid "Recently Added Resources" -msgstr "" - -#: app/templates/views/edit-history.htm:16 -msgid "Resource Id" -msgstr "" - -#: app/templates/views/edit-history.htm:17 -msgid "Resource Name" -msgstr "" - -#: app/templates/views/edit-history.htm:19 -msgid "Edited" -msgstr "" - -#: app/templates/views/edit-history.htm:20 -msgid "Edit Type" -msgstr "" - -#: app/templates/views/edit-history.htm:21 -msgid "Editor" -msgstr "" - -#: app/templates/views/edit-history.htm:30 -msgid " (Resource Deleted)" -msgstr "" - -#: app/templates/views/edit-history.htm:45 -#: app/templates/views/edit-history.htm:47 -msgid "View Report" -msgstr "" - -#: app/templates/views/graph-designer.htm:26 -msgid "Graph Designer" -msgstr "" - -#: app/templates/views/graph-designer.htm:34 -msgid "Branch" -msgstr "" - -#: app/templates/views/graph-designer.htm:55 -msgid "Resource:" -msgstr "" - -#: app/templates/views/graph-designer.htm:63 -msgid "" -"Warning! This will save the graph in its current state and make the Resource " -"accessible to permissioned users." -msgstr "" - -#: app/templates/views/graph-designer.htm:76 -msgid "Notes:" -msgstr "" - -#: app/templates/views/graph-designer.htm:93 -msgid "Publish" -msgstr "" - -#: app/templates/views/graph-designer.htm:112 app/templates/views/graph.htm:51 -msgid "Find a Resource Model/Branch..." -msgstr "" - -#: app/templates/views/graph-designer.htm:145 -#: app/templates/views/graph-designer.htm:157 -msgid "Discard Card Edits" -msgstr "" - -#: app/templates/views/graph-designer.htm:147 -#: app/templates/views/graph-designer.htm:159 -msgid "Save Card Edits" -msgstr "" - -#: app/templates/views/graph-designer.htm:167 -msgid "Unpublish Graph" -msgstr "" - -#: app/templates/views/graph-designer.htm:173 -msgid "Publish Graph" -msgstr "" - -#: app/templates/views/graph-designer.htm:185 -msgid "Quit Designer" -msgstr "" - -#: app/templates/views/graph-designer.htm:201 -msgid "Graph" -msgstr "" - -#: app/templates/views/graph-designer.htm:206 -msgid "Cards" -msgstr "" - -#: app/templates/views/graph-designer.htm:253 -msgid "Add a branch to your model from the library" -msgstr "" - -#: app/templates/views/graph-designer.htm:280 -msgid "Card Designer" -msgstr "" - -#: app/templates/views/graph.htm:25 -msgid "Graphs" -msgstr "" - -#: app/templates/views/graph.htm:74 app/views/graph.py:346 -msgid "New Resource Model" -msgstr "" - -#: app/templates/views/graph.htm:80 -msgid "Import Branch/Resource Model" -msgstr "" - -#: app/templates/views/graph.htm:112 -msgid "Manage Graph" -msgstr "" - -#: app/templates/views/graph.htm:116 -msgid "Manage Functions" -msgstr "" - -#: app/templates/views/graph.htm:119 -msgid "Create Mapping File" -msgstr "" - -#: app/templates/views/graph.htm:122 -msgid "Delete Instances" -msgstr "" - -#: app/templates/views/graph.htm:126 -msgid "Export Model" -msgstr "" - -#: app/templates/views/graph.htm:128 -msgid "Clone Model" -msgstr "" - -#: app/templates/views/graph.htm:130 -msgid "Delete Model" -msgstr "" - -#: app/templates/views/graph/card-configuration/card-components-tree.htm:58 -msgid "Widget" -msgstr "" - -#: app/templates/views/graph/card-configuration/card-form-preview.htm:125 -msgid "Discard" -msgstr "" - -#: app/templates/views/graph/function-manager.htm:23 -msgid "Function Manager" -msgstr "" - -#: app/templates/views/graph/function-manager.htm:41 -msgid "Selected Functions" -msgstr "" - -#: app/templates/views/graph/function-manager.htm:47 -msgid "You haven't added any functions yet." -msgstr "" - -#: app/templates/views/graph/function-manager.htm:49 -msgid "" -"Select functions from the library to add new capabilities to your resource." -msgstr "" - -#: app/templates/views/graph/function-manager.htm:56 -msgid "Close Function Library" -msgstr "" - -#: app/templates/views/graph/function-manager.htm:57 -msgid "Show Function Library" -msgstr "" - -#: app/templates/views/graph/function-manager.htm:88 -msgid "Library filter goes here" -msgstr "" - -#: app/templates/views/graph/function-manager.htm:96 -msgid "Function Library" -msgstr "" - -#: app/templates/views/graph/function-manager.htm:119 -#: app/templates/views/graph/function-manager/function-list.htm:21 -msgid "Function Name" -msgstr "" - -#: app/templates/views/graph/function-manager.htm:137 -msgid "This Function doesn't require any configuration." -msgstr "" - -#: app/templates/views/graph/function-manager/function-list.htm:26 -msgid "Function Description" -msgstr "" - -#: app/templates/views/graph/function-manager/function-list.htm:37 -msgid "Select Function" -msgstr "" - -#: app/templates/views/graph/graph-base.htm:24 -msgid "Graph Manager" -msgstr "" - -#: app/templates/views/graph/graph-designer/branch-list.htm:17 -msgid "Because of ontology rules, there are no branches that can be appended." -msgstr "" - -#: app/templates/views/graph/graph-designer/card-configuration.htm:31 -msgid "Card name" -msgstr "" - -#: app/templates/views/graph/graph-designer/card-configuration.htm:40 -#: app/templates/views/graph/graph-designer/card-configuration.htm:49 -msgid " " -msgstr "" - -#: app/templates/views/graph/graph-designer/card-configuration.htm:46 -msgid "CSS Classes (Optional)" -msgstr "" - -#: app/templates/views/graph/graph-designer/card-configuration.htm:95 -msgid "Help Panel Title" -msgstr "" - -#: app/templates/views/graph/graph-designer/card-configuration.htm:98 -msgid "Help title" -msgstr "" - -#: app/templates/views/graph/graph-designer/card-configuration.htm:105 -msgid "Content" -msgstr "" - -#: app/templates/views/graph/graph-designer/card-configuration.htm:118 -msgid "Unique Values" -msgstr "" - -#: app/templates/views/graph/graph-designer/card-tree-permissions.htm:9 -#: app/templates/views/graph/graph-designer/card-tree.htm:9 -#: app/templates/views/resource/editor.htm:46 -msgid "Find a card..." -msgstr "" - -#: app/templates/views/graph/graph-designer/card-tree-permissions.htm:15 -#: app/templates/views/graph/graph-designer/card-tree.htm:15 -#: app/templates/views/graph/graph-designer/graph-tree.htm:18 -#: app/templates/views/resource/editor.htm:52 -msgid " Expand" -msgstr "" - -#: app/templates/views/graph/graph-designer/card-tree-permissions.htm:16 -#: app/templates/views/graph/graph-designer/card-tree.htm:16 -#: app/templates/views/graph/graph-designer/graph-tree.htm:19 -#: app/templates/views/resource/editor.htm:53 -msgid " Collapse" -msgstr "" - -#: app/templates/views/graph/graph-designer/card-tree-permissions.htm:17 -#: app/templates/views/graph/graph-designer/card-tree.htm:17 -#: app/templates/views/graph/graph-designer/graph-tree.htm:20 -#: app/templates/views/resource/editor.htm:54 -msgid " Grid" -msgstr "" - -#: app/templates/views/graph/graph-designer/card-tree-permissions.htm:18 -msgid " Select All" -msgstr "" - -#: app/templates/views/graph/graph-designer/card-tree-permissions.htm:19 -msgid " Clear All" -msgstr "" - -#: app/templates/views/graph/graph-designer/card-tree.htm:19 -#: app/templates/views/graph/graph-designer/graph-tree.htm:22 -msgid " Show IDs" -msgstr "" - -#: app/templates/views/graph/graph-designer/card-tree.htm:22 -#: app/templates/views/graph/graph-designer/graph-tree.htm:25 -msgid " Hide IDs" -msgstr "" - -#: app/templates/views/graph/graph-designer/card-tree.htm:40 -msgid "(edit report)" -msgstr "" - -#: app/templates/views/graph/graph-designer/graph-settings.htm:121 -msgid "Make card" -msgstr "" - -#: app/templates/views/graph/graph-designer/graph-settings.htm:124 -#: app/templates/views/graph/graph-designer/node-form.htm:252 -msgid "" -"Data from nodes not collected in other cards will be collected in the root " -"card's form section" -msgstr "" - -#: app/templates/views/graph/graph-designer/graph-settings.htm:134 -msgid "Resource models that may be related:" -msgstr "" - -#: app/templates/views/graph/graph-designer/graph-settings.htm:169 -msgid "Author name" -msgstr "" - -#: app/templates/views/graph/graph-designer/graph-settings.htm:181 -msgid "Abstract/description" -msgstr "" - -#: app/templates/views/graph/graph-designer/graph-settings.htm:193 -msgid "" -"URI to a JSON-LD Context Object or a Raw Context Object or Array of Context " -"Objects" -msgstr "" - -#: app/templates/views/graph/graph-designer/graph-settings.htm:200 -msgid "URI Slug for API Access" -msgstr "" - -#: app/templates/views/graph/graph-designer/graph-settings.htm:204 -msgid "Slug" -msgstr "" - -#: app/templates/views/graph/graph-designer/graph-settings.htm:225 -msgid " Map Feature Color " -msgstr "" - -#: app/templates/views/graph/graph-designer/graph-tree.htm:12 -msgid "Find a node, datatype, card..." -msgstr "" - -#: app/templates/views/graph/graph-designer/graph-tree.htm:49 -msgid "Node is exportable in search" -msgstr "" - -#: app/templates/views/graph/graph-designer/graph-tree.htm:57 -msgid "Add Child Node" -msgstr "" - -#: app/templates/views/graph/graph-designer/graph-tree.htm:58 -msgid "Add Branch" -msgstr "" - -#: app/templates/views/graph/graph-designer/graph-tree.htm:61 -msgid "Export Branch" -msgstr "" - -#: app/templates/views/graph/graph-designer/graph-tree.htm:64 -msgid "Delete Node" -msgstr "" - -#: app/templates/views/graph/graph-designer/identity-list.htm:5 -msgid "Groups/Accounts" -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:45 -msgid "Enter node name here..." -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:45 -msgid "node name" -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:54 -msgid "Node Name Alias" -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:59 -msgid "Unique alias generated from this node\\" -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:60 -msgid "Use a custom node alias" -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:71 -msgid "parent" -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:100 -msgid "Semantics" -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:129 -msgid "description" -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:137 -msgid "Node Data Type and Configuration" -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:169 -msgid "Node Settings" -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:186 -msgid "Activate to use this node in Advanced Search." -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:206 -#: app/templates/views/graph/graph-designer/widget-configuration.htm:66 -msgid "" -"Activate to require that data be collected for this node when a card value " -"is edited" -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:224 -msgid "Export via Search Results" -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:227 -msgid "Provide a field name for shapefiles. " -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:227 -msgid "Limited to 10 characters to meet shapefile requirements." -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:230 -msgid "shapefile fieldname" -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:255 -msgid "" -"Data from this node and downstream nodes will be collected in a single form " -"section" -msgstr "" - -#: app/templates/views/graph/graph-designer/permission-settings-form.htm:21 -msgid "To set permissions: " -msgstr "" - -#: app/templates/views/graph/graph-designer/permission-settings-form.htm:23 -msgid " 1. Select one or more cards from the card tree." -msgstr "" - -#: app/templates/views/graph/graph-designer/permission-settings-form.htm:26 -msgid "" -" 2. Select a Group or User Account from the dropdown below." -msgstr "" - -#: app/templates/views/graph/graph-designer/permission-settings-form.htm:29 -msgid "" -" 3. Apply Permissions to set your changes. You'll see your " -"selections reflected by the icons in the card tree." -msgstr "" - -#: app/templates/views/graph/graph-designer/permission-settings-form.htm:36 -msgid "Set permissions for:" -msgstr "" - -#: app/templates/views/graph/graph-designer/permission-settings-form.htm:43 -msgid "Select a Group/Account..." -msgstr "" - -#: app/templates/views/graph/graph-designer/permission-settings-form.htm:77 -msgid "Revert Permissions" -msgstr "" - -#: app/templates/views/graph/graph-designer/permission-settings-form.htm:79 -msgid "Apply Permissions" -msgstr "" - -#: app/templates/views/graph/graph-designer/permission-settings-form.htm:88 -msgid "Selected Cards" -msgstr "" - -#: app/templates/views/graph/graph-designer/permission-settings-form.htm:91 -msgid "No cards selected" -msgstr "" - -#: app/templates/views/graph/graph-designer/widget-configuration.htm:7 -msgid "Widget Manager" -msgstr "" - -#: app/templates/views/graph/graph-designer/widget-configuration.htm:36 -msgid "Visibility" -msgstr "" - -#: app/templates/views/map-layer-manager.htm:72 -msgid "Overlay" -msgstr "" - -#: app/templates/views/map-layer-manager.htm:97 -msgid "No overlays available" -msgstr "" - -#: app/templates/views/map-layer-manager.htm:120 -msgid "Delete Layer" -msgstr "" - -#: app/templates/views/map-layer-manager.htm:136 -msgid "Activated:" -msgstr "" - -#: app/templates/views/map-layer-manager.htm:197 -msgid "Layer Name:" -msgstr "" - -#: app/templates/views/map-layer-manager.htm:218 -msgid "Only show on search map:" -msgstr "" - -#: app/templates/views/map-layer-manager.htm:249 -msgid "Legend content:" -msgstr "" - -#: app/templates/views/notifications-list.htm:10 -msgid "Dismiss All" -msgstr "" - -#: app/templates/views/notifications-list.htm:26 -msgid "" -"You're up-to-date and do not have any notifications. When you trigger a " -"notification (for example, when you request a large download) it will " -"display here." -msgstr "" - -#: app/templates/views/provisional-history-list.htm:17 -msgid "Last 7 days" -msgstr "" - -#: app/templates/views/provisional-history-list.htm:18 -msgid "Last 30 days" -msgstr "" - -#: app/templates/views/provisional-history-list.htm:49 -msgid "" -"You have not yet edited any data within the specified time period. Once you " -"edit a resource, your edit history will display here." -msgstr "" - -#: app/templates/views/provisional-history-list.htm:71 -msgid "Card: " -msgstr "" - -#: app/templates/views/provisional-history-list.htm:76 -msgid "Edited: " -msgstr "" - -#: app/templates/views/provisional-history-list.htm:82 -msgid "pending review" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:32 -msgid "Add Top Concept" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:33 -msgid "Import Top Concept from SPARQL" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:36 -#: app/templates/views/rdm/concept-report.htm:55 -msgid "Add Child" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:37 -msgid "Import Child from SPARQL" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:39 -#: app/templates/views/rdm/concept-report.htm:57 -msgid "Manage Parents" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:40 -msgid "Make Collection" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:56 -msgid "Import Child from AAT" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:70 -#: app/templates/views/rdm/entitytype-report.htm:78 -msgid "Labels" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:72 -#: app/templates/views/rdm/entitytype-report.htm:81 -msgid "Add label" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:78 -#: app/templates/views/rdm/entitytype-report.htm:87 -msgid "Delete this label?" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:81 -msgid "preferred" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:81 -msgid "alternate" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:81 -msgid "hidden" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:94 -#: app/templates/views/rdm/entitytype-report.htm:103 -msgid "Notes" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:96 -#: app/templates/views/rdm/entitytype-report.htm:106 -msgid "Add note" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:102 -#: app/templates/views/rdm/entitytype-report.htm:112 -msgid "Delete this note?" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:123 -msgid "Broader/Narrower Concepts" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:146 -msgid "Delete this concept?" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:146 -msgid "" -"By deleting this concept, you will also be deleting the following concepts " -"as well. This operation cannot be undone." -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:178 -msgid "Related Concepts" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:180 -msgid "Add related concept" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:186 -msgid "Remove the relationship to this concept?" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:203 -#: app/templates/views/rdm/entitytype-report.htm:132 -msgid "Values" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:205 -#: app/templates/views/rdm/entitytype-report.htm:135 -msgid "Add value" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:211 -#: app/templates/views/rdm/entitytype-report.htm:141 -msgid "Delete this value?" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:212 -#: app/templates/views/rdm/entitytype-report.htm:142 -msgid "Edit this value" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:231 -msgid "Add images" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:246 -msgid "Delete Image" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:274 -#: app/templates/views/rdm/entitytype-report.htm:165 -msgid "Arches ID:" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:294 -#: app/templates/views/rdm/entitytype-report.htm:179 -msgid "Are you ready to delete this item?" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:304 -#: app/templates/views/rdm/entitytype-report.htm:189 -msgid "No" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:305 -#: app/templates/views/rdm/entitytype-report.htm:190 -msgid "Yes" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:339 -msgid "Arches Reference Data Manager" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:348 -msgid "Schemes" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:352 -msgid "Entity Types" -msgstr "" - -#: app/templates/views/rdm/entitytype-report.htm:29 -msgid "Member Hierarchy" -msgstr "" - -#: app/templates/views/rdm/entitytype-report.htm:32 -msgid "Add dropdown entry" -msgstr "" - -#: app/templates/views/rdm/entitytype-report.htm:46 -#: app/templates/views/rdm/entitytype-report.htm:55 -msgid "Expand this entry" -msgstr "" - -#: app/templates/views/rdm/entitytype-report.htm:54 -msgid "Remove this entry from the dropdown" -msgstr "" - -#: app/templates/views/rdm/entitytype-report.htm:89 -msgid "Edit this label" -msgstr "" - -#: app/templates/views/rdm/entitytype-report.htm:113 -msgid "Edit this note" -msgstr "" - -#: app/templates/views/rdm/modals/add-child-form.htm:7 -msgid "Add Concept" -msgstr "" - -#: app/templates/views/rdm/modals/add-child-form.htm:13 -msgid "Label" -msgstr "" - -#: app/templates/views/rdm/modals/add-child-form.htm:19 -msgid "Note" -msgstr "" - -#: app/templates/views/rdm/modals/add-child-form.htm:36 -msgid "Relation from Parent" -msgstr "" - -#: app/templates/views/rdm/modals/add-child-form.htm:50 -#: app/templates/views/rdm/modals/add-collection-form.htm:32 -#: app/templates/views/rdm/modals/add-scheme-form.htm:38 -msgid "Save changes" -msgstr "" - -#: app/templates/views/rdm/modals/add-collection-form.htm:13 -#: app/templates/views/rdm/modals/add-scheme-form.htm:13 -msgid "ConceptScheme Name" -msgstr "" - -#: app/templates/views/rdm/modals/add-image-form.htm:9 -msgid "Import Images" -msgstr "" - -#: app/templates/views/rdm/modals/add-image-form.htm:9 -msgid "(Click on panel or drag and drop files onto panel to upload)" -msgstr "" - -#: app/templates/views/rdm/modals/add-scheme-form.htm:7 -msgid "Add Concept Scheme" -msgstr "" - -#: app/templates/views/rdm/modals/add-scheme-form.htm:19 -msgid "Scope Note" -msgstr "" - -#: app/templates/views/rdm/modals/delete-collection-form.htm:13 -msgid "Select collection to delete" -msgstr "" - -#: app/templates/views/rdm/modals/delete-collection-form.htm:33 -msgid "" -"You won't be able to undo this operation!  Are you sure you want to " -"permanently delete this entire collection from Arches?" -msgstr "" - -#: app/templates/views/rdm/modals/delete-scheme-form.htm:7 -msgid "Delete Scheme" -msgstr "" - -#: app/templates/views/rdm/modals/delete-scheme-form.htm:13 -msgid "Select scheme to delete" -msgstr "" - -#: app/templates/views/rdm/modals/delete-scheme-form.htm:33 -msgid "" -"You won't be able to undo this operation!  Are you sure you want to " -"permanently delete this entire scheme from Arches?" -msgstr "" - -#: app/templates/views/rdm/modals/export-scheme-form.htm:7 -msgid "Export Scheme" -msgstr "" - -#: app/templates/views/rdm/modals/export-scheme-form.htm:13 -msgid "Select scheme to export" -msgstr "" - -#: app/templates/views/rdm/modals/import-concept-form.htm:9 -msgid "Import Concept" -msgstr "" - -#: app/templates/views/rdm/modals/import-concept-form.htm:24 -msgid "Organization" -msgstr "" - -#: app/templates/views/rdm/modals/import-concept-form.htm:33 -msgid "Concept Indentifiers" -msgstr "" - -#: app/templates/views/rdm/modals/import-scheme-form.htm:9 -msgid "Import New Concept Scheme" -msgstr "" - -#: app/templates/views/rdm/modals/import-scheme-form.htm:20 -msgid "SKOS File" -msgstr "" - -#: app/templates/views/rdm/modals/import-scheme-form.htm:30 -msgid "When concept ids match" -msgstr "" - -#: app/templates/views/rdm/modals/import-scheme-form.htm:32 -msgid "overwrite system concept" -msgstr "" - -#: app/templates/views/rdm/modals/import-scheme-form.htm:33 -msgid "use system concept" -msgstr "" - -#: app/templates/views/rdm/modals/import-scheme-form.htm:41 -msgid "When inserting new concepts" -msgstr "" - -#: app/templates/views/rdm/modals/import-scheme-form.htm:43 -msgid "keep within scheme" -msgstr "" - -#: app/templates/views/rdm/modals/import-scheme-form.htm:44 -msgid "stage in candidates" -msgstr "" - -#: app/templates/views/rdm/modals/import-scheme-form.htm:54 -msgid "Upload File" -msgstr "" - -#: app/templates/views/rdm/modals/manage-parent-form.htm:9 -msgid "New Parent Concept" -msgstr "" - -#: app/templates/views/rdm/modals/manage-parent-form.htm:24 -msgid "Relation to Parent" -msgstr "" - -#: app/templates/views/rdm/modals/manage-parent-form.htm:31 -msgid "Current Parents" -msgstr "" - -#: app/templates/views/rdm/modals/manage-parent-form.htm:37 -msgid "Remove the relationship to this parent concept" -msgstr "" - -#: app/templates/views/rdm/modals/manage-parent-form.htm:37 -msgid "Remove the relationship to this parent concept." -msgstr "" - -#: app/templates/views/rdm/modals/manage-parent-form.htm:53 -msgid "Deleting reference to parent:" -msgstr "" - -#: app/templates/views/rdm/modals/related-concept-form.htm:9 -msgid "Manage Related Concepts" -msgstr "" - -#: app/templates/views/rdm/modals/related-concept-form.htm:27 -#: app/templates/views/rdm/modals/related-member-form.htm:27 -msgid "Select a concept" -msgstr "" - -#: app/templates/views/rdm/modals/related-concept-form.htm:34 -#: app/templates/views/rdm/modals/related-member-form.htm:34 -msgid "Relation type" -msgstr "" - -#: app/templates/views/rdm/modals/related-concept-form.htm:35 -#: app/templates/views/rdm/modals/related-member-form.htm:35 -msgid "Relation to Concept" -msgstr "" - -#: app/templates/views/rdm/modals/related-concept-form.htm:52 -msgid "Use the search tool to select the concept that you want to relate." -msgstr "" - -#: app/templates/views/rdm/modals/related-member-form.htm:9 -msgid "Select Concept Values for Dropdowns" -msgstr "" - -#: app/templates/views/rdm/modals/related-member-form.htm:51 -msgid "Selecting a concept will select that concept and all it's children." -msgstr "" - -#: app/templates/views/rdm/modals/value-form.htm:9 -msgid "Edit Concept Label" -msgstr "" - -#: app/templates/views/rdm/modals/value-form.htm:9 -msgid "Add Concept Label" -msgstr "" - -#: app/templates/views/rdm/modals/value-form.htm:9 -msgid "Manage Concept Label" -msgstr "" - -#: app/templates/views/rdm/modals/value-form.htm:24 -msgid "Label Information" -msgstr "" - -#: app/templates/views/rdm/modals/value-form.htm:35 -msgid "Label type" -msgstr "" - -#: app/templates/views/rdm/modals/value-form.htm:70 -msgid "Only one preferred label may exist for each language." -msgstr "" - -#: app/templates/views/rdm/modals/value-form.htm:83 -msgid "Add Concept Note" -msgstr "" - -#: app/templates/views/rdm/modals/value-form.htm:83 -msgid "Manage Concept Note" -msgstr "" - -#: app/templates/views/rdm/modals/value-form.htm:98 -msgid "Note Editor" -msgstr "" - -#: app/templates/views/rdm/modals/value-form.htm:151 -msgid "Only one note of each type may exist for each language." -msgstr "" - -#: app/templates/views/rdm/modals/value-form.htm:164 -msgid "Add Concept Value" -msgstr "" - -#: app/templates/views/rdm/modals/value-form.htm:164 -msgid "Manage Concept Values" -msgstr "" - -#: app/templates/views/rdm/modals/value-form.htm:179 -msgid "Define a value" -msgstr "" - -#: app/templates/views/rdm/modals/value-form.htm:192 -msgid "Value type" -msgstr "" - -#: app/templates/views/rdm/modals/value-form.htm:230 -msgid "Only one sort order value can be assigned to a concept." -msgstr "" - -#: app/templates/views/resource.htm:25 -#: app/templates/views/resource/resource-base.htm:24 app/views/resource.py:90 -msgid "Resource Manager" -msgstr "" - -#: app/templates/views/resource.htm:53 -msgid "Resources" -msgstr "" - -#: app/templates/views/resource.htm:93 -msgid "Create Resource" -msgstr "" - -#: app/templates/views/resource/edit-log.htm:7 -msgid "Resource History" -msgstr "" - -#: app/templates/views/resource/edit-log.htm:30 -msgid "Now" -msgstr "" - -#: app/templates/views/resource/edit-log.htm:34 -msgid "Most recent" -msgstr "" - -#: app/templates/views/resource/edit-log.htm:35 -msgid "Oldest" -msgstr "" - -#: app/templates/views/resource/edit-log.htm:36 -msgid "By editor" -msgstr "" - -#: app/templates/views/resource/edit-log.htm:37 -msgid "By edit type" -msgstr "" - -#: app/templates/views/resource/edit-log.htm:50 -msgid "Resource Record Created" -msgstr "" - -#: app/templates/views/resource/edit-log.htm:52 -msgid "Record created by Arches with unique identifer" -msgstr "" - -#: app/templates/views/resource/edit-log.htm:57 -#: app/templates/views/resource/edit-log.htm:60 -msgid "Created" -msgstr "" - -#: app/templates/views/resource/edit-log.htm:66 -#: app/templates/views/resource/edit-log.htm:169 -msgid "Tile Data" -msgstr "" - -#: app/templates/views/resource/edit-log.htm:78 -#: app/templates/views/resource/edit-log.htm:114 -msgid "Provisional Tile Data" -msgstr "" - -#: app/templates/views/resource/edit-log.htm:102 -msgid "New Tile Data" -msgstr "" - -#: app/templates/views/resource/edit-log.htm:132 -msgid "Previous Tile Data" -msgstr "" - -#: app/templates/views/resource/edit-log.htm:146 -msgid "Previous Provisional Tile Data" -msgstr "" - -#: app/templates/views/resource/edit-log.htm:162 -#: app/templates/views/resource/edit-log.htm:165 -msgid "Deleted" -msgstr "" - -#: app/templates/views/resource/edit-log.htm:184 -msgid "edited by" -msgstr "" - -#: app/templates/views/resource/editor.htm:25 -msgid "Resource Editor" -msgstr "" - -#: app/templates/views/resource/editor.htm:102 -msgid "Manage Permissions" -msgstr "" - -#: app/templates/views/resource/editor.htm:166 -msgid "Welcome to Arches' Resource Editor" -msgstr "" - -#: app/templates/views/resource/editor.htm:169 -msgid "" -"You are about to create a new resource record. Select any data card from " -"the list on the left and start entering information." -msgstr "" - -#: app/templates/views/resource/editor.htm:170 -msgid "Don't worry if you decide not to enter any data just yet." -msgstr "" - -#: app/templates/views/resource/editor.htm:171 -msgid "" -"Arches will create your new resource record once you've saved a data entry " -"card." -msgstr "" - -#: app/templates/views/resource/editor.htm:177 -msgid "No cards are available for this model." -msgstr "" - -#: app/templates/views/resource/editor.htm:243 -msgid "Add new" -msgstr "" - -#: app/templates/views/resource/editor.htm:270 -msgid "You do not have permission to edit this card." -msgstr "" - -#: app/templates/views/resource/editor/provisional-tile-manager.htm:15 -msgid "User: " -msgstr "" - -#: app/templates/views/resource/editor/provisional-tile-manager.htm:18 -msgid "Created: " -msgstr "" - -#: app/templates/views/resource/editor/provisional-tile-manager.htm:37 -msgid "Accept" -msgstr "" - -#: app/templates/views/resource/editor/provisional-tile-manager.htm:40 -msgid "Decline" -msgstr "" - -#: app/templates/views/resource/report.htm:24 -msgid "Resource Report" -msgstr "" - -#: app/templates/views/search.htm:60 -msgid "Clear Filters" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:25 -msgid "Account Settings" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:48 -msgid "User name:" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:64 -msgid "Account" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:74 -msgid "User name" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:81 -msgid "Change password" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:100 -msgid "Contact email" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:113 -msgid "Phone" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:141 -msgid "Arches user name" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:149 -msgid "This is the unique email or name that you use to log on to Arches." -msgstr "" - -#: app/templates/views/user-profile-manager.htm:165 -#: app/templates/views/user-profile-manager.htm:166 -msgid "First name" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:176 -msgid "" -"Arches uses your name and phone number to make it easier for other users to " -"find and work with you." -msgstr "" - -#: app/templates/views/user-profile-manager.htm:186 -#: app/templates/views/user-profile-manager.htm:187 -msgid "Last name" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:202 -msgid "Phone Number (optional)" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:215 -msgid "Contact Email" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:226 -msgid "" -"Arches uses your e-maill to alert you to projects and tasks assigned to you." -msgstr "" - -#: app/templates/views/user-profile-manager.htm:256 -msgid "Click here to update Two-Factor Authentication settings via email" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:346 -msgid "Notification Settings" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:354 -msgid "Trigger" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:355 -msgid "Email Notification" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:356 -msgid "Web Notification" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:365 -#: app/templates/views/user-profile-manager.htm:370 -msgid "Enable" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:375 -msgid "Exporting Search Results" -msgstr "" - -#: app/utils/data_management/resources/formats/csvfile.py:825 -#, python-brace-format -msgid "No datatype detected for {0}" -msgstr "" - -#: app/utils/data_management/resources/formats/csvfile.py:1132 -#, python-brace-format -msgid "Total resources saved: {save_count}" -msgstr "" - -#: app/utils/data_management/resources/formats/format.py:47 -#, python-brace-format -msgid "{0} of {1} resources saved" -msgstr "" - -#: app/utils/data_management/resources/formats/format.py:57 -#, python-brace-format -msgid "{0} of {1} relations saved" -msgstr "" - -#: app/utils/data_management/resources/formats/format.py:182 -msgid "No import errors" -msgstr "" - -#: app/utils/data_management/resources/formats/format.py:186 -msgid "" -"***** Errors occured during import. Some data may not have been imported. " -"For more information, check resource import error log: " -msgstr "" - -#: app/utils/data_management/resources/formats/format.py:217 -#, python-brace-format -msgid " {0}: {1}\n" -msgstr "" - -#: app/utils/data_management/resources/formats/format.py:269 -msgid "" -"Must supply either a graph id or a list of resource instance ids to export" -msgstr "" - -#: app/utils/data_management/sparql_providers/aat_provider.py:34 -msgid "Getty AAT" -msgstr "" - -#: app/utils/data_management/sparql_providers/aat_provider.py:90 -#, python-format -msgid "" -"Error in SPARQL query:
Test this query directly by " -"pasting the query below into the Getty's own SPARQL " -"endpoint at http://" -"vocab.getty.edu/sparql
%s
Query " -"returned 0 results, please check the query for " -"errors. You may need to add the appropriate " -"languages into the database for this query to work

" -msgstr "" - -#: app/utils/forms.py:64 -msgid "" -"This email address has already been registered with the " -"system. If you forgot your password, click the " -"'exit' link below and go to the login page to reset your password." -msgstr "" - -#: app/utils/forms.py:109 -msgid "Email" -msgstr "" - -#: app/utils/forms.py:113 -msgid "New password" -msgstr "" - -#: app/utils/forms.py:115 -msgid "Re-enter new password" -msgstr "" - -#: app/utils/password_validation.py:12 -#, python-brace-format -msgid "Be longer than {0} characters" -msgstr "" - -#: app/utils/password_validation.py:20 -msgid "Have at least 1 letter" -msgstr "" - -#: app/utils/password_validation.py:37 -msgid "Your password must contain at least one special character" -msgstr "" - -#: app/utils/password_validation.py:43 -msgid "Have at least 1 special character" -msgstr "" - -#: app/utils/password_validation.py:56 -msgid "Your password must contain at least one number" -msgstr "" - -#: app/utils/password_validation.py:60 -msgid "Have at least 1 number" -msgstr "" - -#: app/utils/password_validation.py:74 -msgid "Your password must contain both upper and lower case letters" -msgstr "" - -#: app/utils/password_validation.py:78 -msgid "Have least 1 upper and lower case character" -msgstr "" - -#: app/utils/response.py:56 -msgid "Could not return JSON Response" -msgstr "" - -#: app/utils/task_management.py:28 -msgid "Celery worker connection failed. Reattempting" -msgstr "" - -#: app/utils/task_management.py:30 -msgid "" -"Failed to connect to celery due to a BrokenPipeError/ConnectionResetError" -msgstr "" - -#: app/utils/task_management.py:33 -msgid "A celery broker is running, but a celery worker is not available" -msgstr "" - -#: app/utils/task_management.py:37 -msgid "Unable to connect to a celery broker" -msgstr "" - -#: app/views/api.py:79 -msgid "Failed to dispatch Kibana proxy" -msgstr "" - -#: app/views/api.py:81 -msgid "KibanaProxy failed" -msgstr "" - -#: app/views/api.py:105 -msgid "Failed to create API request" -msgstr "" - -#: app/views/api.py:121 app/views/api.py:797 app/views/resource.py:236 -#: app/views/resource.py:603 -msgid "Unnamed Resource" -msgstr "" - -#: app/views/api.py:483 -#, python-brace-format -msgid "The specified resource '{0}' does not exist. JSON-LD export failed." -msgstr "" - -#: app/views/api.py:793 app/views/resource.py:232 -msgid "New Resource" -msgstr "" - -#: app/views/api.py:1275 -msgid "Tile not found." -msgstr "" - -#: app/views/api.py:1307 -msgid "No nodegroup matching query parameters found." -msgstr "" - -#: app/views/api.py:1356 -msgid "No nodes matching query parameters found." -msgstr "" - -#: app/views/api.py:1364 -#, python-format -msgid "No graph found for graphid %s" -msgstr "" - -#: app/views/api.py:1424 -msgid "User does not have permission to edit this node." -msgstr "" - -#: app/views/auth.py:132 app/views/auth.py:155 app/views/auth.py:212 -msgid "User signup has been disabled. Please contact your administrator." -msgstr "" - -#: app/views/auth.py:169 -msgid "Signup for Arches" -msgstr "" - -#: app/views/auth.py:172 -msgid "" -"Thanks for your interest in Arches. Click on link below " -"to confirm your email address! Use your email address to login." -msgstr "" - -#: app/views/auth.py:176 -msgid "" -"This link expires in 24 hours. If you can't get to it before " -"then, don't worry, you can always try again with the " -"same email address." -msgstr "" - -#: app/views/auth.py:185 -msgid "Welcome to Arches!" -msgstr "" - -#: app/views/auth.py:190 -#, python-format -msgid "" -"An email has been sent to
%s
with a link to " -"activate your account" -msgstr "" - -#: app/views/auth.py:232 -msgid "The signup link has expired, please try signing up again. Thanks!" -msgstr "" - -#: app/views/auth.py:255 -msgid "Invalid password" -msgstr "" - -#: app/views/auth.py:257 -msgid "New password and confirmation must match" -msgstr "" - -#: app/views/auth.py:268 -msgid "Password successfully updated" -msgstr "" - -#: app/views/auth.py:308 app/views/auth.py:326 -msgid "Make sure to set your OAUTH_CLIENT_ID in settings.py" -msgstr "" - -#: app/views/auth.py:372 -msgid "Update Two-Factor Authentication Settings" -msgstr "" - -#: app/views/auth.py:374 -msgid "Click on link below to update your two-factor authentication settings." -msgstr "" - -#: app/views/auth.py:376 -msgid "" -"This link expires in 15 minutes. If you did not request this " -"change, contact your Administrator immediately." -msgstr "" - -#: app/views/auth.py:385 -msgid "Arches Two-Factor Authentication" -msgstr "" - -#: app/views/auth.py:390 -msgid "" -"There has been error sending an email to this address. Please contact your " -"system administrator." -msgstr "" - -#: app/views/concept.py:68 -msgid "Using the RDM" -msgstr "" - -#: app/views/concept.py:238 -msgid "Unable to Load SKOS File" -msgstr "" - -#: app/views/concept.py:238 -msgid "There was an issue saving the contents of the file to Arches. " -msgstr "" - -#: app/views/concept.py:274 -msgid "Unable to Delete" -msgstr "" - -#: app/views/concept.py:274 -msgid "" -"This concept or one of it's subconcepts is already in use by an existing " -"resource." -msgstr "" - -#: app/views/concept.py:327 -msgid "Success" -msgstr "" - -#: app/views/concept.py:327 -msgid "Collection successfully created from the selected concept" -msgstr "" - -#: app/views/concept.py:329 -msgid "Unable to Make Collection" -msgstr "" - -#: app/views/concept.py:329 -msgid "Unable to make a collection from the selected concept." -msgstr "" - -#: app/views/graph.py:154 -msgid "Using the Arches Designer" -msgstr "" - -#: app/views/graph.py:171 -#, python-brace-format -msgid "" -"No namespaces appear to be associated with {ontology.ontologyid} in the " -"ontologies table. This is not a problem as long as all necessary namespaces " -"are included in the ONTOLOGY_NAMESPACES setting." -msgstr "" - -#: app/views/graph.py:215 -msgid "Branch Library" -msgstr "" - -#: app/views/graph.py:215 -msgid "Find a graph branch" -msgstr "" - -#: app/views/graph.py:261 -msgid "Designing a Resource Model" -msgstr "" - -#: app/views/graph.py:263 -msgid "Designing a Branch" -msgstr "" - -#: app/views/graph.py:425 -msgid "Elasticsearch indexing error" -msgstr "" - -#: app/views/graph.py:427 -msgid "" -"If you want to change the datatype of an existing node.\n" -" Delete and then re-create the node, or export the branch " -"then edit the datatype and re-import the branch." -msgstr "" - -#: app/views/graph.py:546 -msgid "Managing Functions" -msgstr "" - -#: app/views/manifest_manager.py:300 -msgid "IIIF server proxy not configured" -msgstr "" - -#: app/views/manifest_manager.py:306 -msgid "Manifest Validation Error" -msgstr "" - -#: app/views/map.py:134 -msgid "Tileserver proxy not configured" -msgstr "" - -#: app/views/resource.py:92 -msgid "Creating Resources" -msgstr "" - -#: app/views/resource.py:350 -msgid "Managing System Settings" -msgstr "" - -#: app/views/resource.py:352 -msgid "Using the Resource Editor" -msgstr "" - -#: app/views/resource.py:357 -msgid "Unable to Delete Resource" -msgstr "" - -#: app/views/resource.py:358 -msgid "" -"User does not have permissions to delete this instance because the instance " -"or its data is restricted" -msgstr "" - -#: app/views/resource.py:367 -msgid "Unable to delete. Please verify the model is not currently published." -msgstr "" - -#: app/views/resource.py:547 app/views/resource.py:553 -msgid "Resource Created" -msgstr "" - -#: app/views/resource.py:548 -msgid "Resource Deleted" -msgstr "" - -#: app/views/resource.py:549 -msgid "Tile Deleted" -msgstr "" - -#: app/views/resource.py:550 -msgid "Tile Created" -msgstr "" - -#: app/views/resource.py:551 -msgid "Tile Updated" -msgstr "" - -#: app/views/resource.py:552 -msgid "Edit Deleted" -msgstr "" - -#: app/views/resource.py:771 -msgid "Failed to fetch resource instance descriptors" -msgstr "" - -#: app/views/resource.py:788 -msgid "No active report template is available for this resource." -msgstr "" - -#: app/views/resource.py:903 -msgid "Unable to delete. Relationship does not exist" -msgstr "" - -#: app/views/resource.py:966 app/views/resource.py:980 app/views/tile.py:151 -msgid "Unable to save. Please verify the model is not currently published." -msgstr "" - -#: app/views/search.py:109 -msgid "Searching the Database" -msgstr "" - -#: app/views/search.py:228 -#, python-brace-format -msgid "" -"Your search exceeds the {download_limit} instance download " -"limit. Anonymous users cannot run an export exceeding this " -"limit. Please sign in with your {app_name} account or " -"refine your search" -msgstr "" - -#: app/views/search.py:244 -#, python-brace-format -msgid "" -"{total} instances have been submitted for export. Click " -"the Bell icon to check for a link to download your data" -msgstr "" - -#: app/views/search.py:249 -#, python-brace-format -msgid "" -"Your search exceeds the {download_limit} instance download limit. Please " -"refine your search" -msgstr "" - -#: app/views/search.py:270 -msgid "" -"Either no instances were identified for export or no resources have " -"exportable geometry nodes Please confirm that the models of " -"instances you would like to export have geometry nodes and " -"that those nodes are set as exportable" -msgstr "" - -#: app/views/search.py:401 -msgid "There was an error retrieving the search results" -msgstr "" - -#: app/views/search.py:500 -msgid "Downloading" -msgstr "" - -#: app/views/search.py:502 -msgid "The requested file is no longer available" -msgstr "" - -#: app/views/tile.py:72 -msgid "Saving tile failed" -msgstr "" - -#: app/views/tile.py:124 -msgid "Unable to save. Please verify the model is currently unpublished." -msgstr "" - -#: app/views/tile.py:133 app/views/tile.py:235 -msgid "This tile is no longer available" -msgstr "" - -#: app/views/tile.py:133 -msgid "It was likely deleted by another user" -msgstr "" - -#: app/views/tile.py:148 -msgid "Unable to save. Please verify your input is valid" -msgstr "" - -#: app/views/tile.py:154 -msgid "Unable to save." -msgstr "" - -#: app/views/tile.py:181 app/views/tile.py:184 app/views/tile.py:259 -#: app/views/tile.py:261 app/views/tile.py:265 app/views/tile.py:286 -msgid "Request Failed" -msgstr "" - -#: app/views/tile.py:181 -msgid "Unable to Save. Verify model status is active" -msgstr "" - -#: app/views/tile.py:184 app/views/tile.py:259 -msgid "Permission Denied" -msgstr "" - -#: app/views/tile.py:235 -msgid "It was likely already deleted by another user" -msgstr "" - -#: app/views/tile.py:261 -msgid "Unable to delete. Verify model status is active" -msgstr "" - -#: app/views/tile.py:265 -msgid "You do not have permissions to delete a tile with authoritative data." -msgstr "" - -#: app/views/user.py:47 -msgid "Not yet logged in" -msgstr "" - -#: app/views/user.py:110 app/views/user.py:145 -msgid "Profile Editing" -msgstr "" - -#: app/views/user.py:167 -msgid "Your " -msgstr "" - -#: management/commands/load_ontology.py:84 -msgid "" -"You must supply an ontology_config.json within your ontology source " -"directory." -msgstr "" - -#: management/commands/load_ontology.py:85 -#, python-brace-format -msgid "'{config_file}' was not found." -msgstr "" - -#: management/commands/load_ontology.py:89 -msgid "You must supply a version number using the -vn/--version argument." -msgstr "" diff --git a/arches/locale/es/LC_MESSAGES/django.mo b/arches/locale/es/LC_MESSAGES/django.mo deleted file mode 100644 index ee56c394f4d5cb2407ca9208aba766e0037699df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 421 zcmYL^Pfx-y9ELG^+R?Lznt0IY563((3NuVraB=@K28rG()HxmP(iWp1#INUPu~Q>& z@}zD0w0-+^c<|XV*)tp&P7M2o3qu>%@M<;(W^A4RWKz7am4, YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-08-30 19:07-0700\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: app/datatypes/base.py:39 -#, python-brace-format -msgid "{0} error, {1} {2} - {3}. Unable to save." -msgstr "" - -#: app/datatypes/base.py:199 -msgid "Multiple provisional edits. Returning first edit" -msgstr "" - -#: app/datatypes/base.py:203 -msgid "Tile has no authoritative or provisional data" -msgstr "" - -#: app/datatypes/concept_types.py:140 -msgid "" -"The widget used to save this data appears to be incorrect for this datatype. " -"Contact system admin to resolve" -msgstr "" - -#: app/datatypes/concept_types.py:148 -msgid "This is an invalid concept prefLabel, or an incomplete UUID" -msgstr "" - -#: app/datatypes/concept_types.py:156 -msgid "This UUID is not an available concept value" -msgstr "" - -#: app/datatypes/datatypes.py:104 -msgid "This is not a string" -msgstr "" - -#: app/datatypes/datatypes.py:328 -msgid "Not a properly formatted number" -msgstr "" - -#: app/datatypes/datatypes.py:419 -msgid "Not of type boolean" -msgstr "" - -#: app/datatypes/datatypes.py:500 -msgid "" -"Incorrect format. Confirm format is in settings.DATE_FORMATS or set the " -"format in settings.DATE_IMPORT_EXPORT_FORMAT." -msgstr "" - -#: app/datatypes/datatypes.py:564 -#, python-brace-format -msgid "{value} is an invalid date format" -msgstr "" - -#: app/datatypes/datatypes.py:665 -msgid "" -"Incorrect Extended Date Time Format. See http://www.loc.gov/standards/" -"datetime/ for supported formats" -msgstr "" - -#: app/datatypes/datatypes.py:718 -msgid "" -"Only dates that specify an exact year, month, and day can be used with the " -"\"=\" operator" -msgstr "" - -#: app/datatypes/datatypes.py:727 -msgid "" -"Only dates that specify an exact year, " -"month, and day can be used with the \">" -"\", \"<\", \">=\", and \"<=\" operators" -msgstr "" - -#: app/datatypes/datatypes.py:739 -msgid "Invalid date specified." -msgstr "" - -#: app/datatypes/datatypes.py:806 -msgid "Unable to serialize some geometry features" -msgstr "" - -#: app/datatypes/datatypes.py:1398 -msgid "File type not permitted" -msgstr "" - -#: app/datatypes/datatypes.py:1424 -#, python-brace-format -msgid "This node has a limit of {0} files. Please reduce files." -msgstr "" - -#: app/datatypes/datatypes.py:1432 -#, python-brace-format -msgid "" -"This node has a file-size limit of {0}. Please reduce file size or contact " -"your sysadmin." -msgstr "" - -#: app/datatypes/datatypes.py:1440 -#, python-brace-format -msgid "The file \"{0}\" does not exist in \"{1}\"" -msgstr "" - -#: app/datatypes/datatypes.py:1444 -#, python-brace-format -msgid "datatype: {0}, value: {1} - {2} ." -msgstr "" - -#: app/datatypes/datatypes.py:1503 app/datatypes/datatypes.py:1590 -msgid "File does not exist" -msgstr "" - -#: app/datatypes/datatypes.py:1622 -msgid "The file url is invalid" -msgstr "" - -#: app/datatypes/datatypes.py:1624 -msgid "A file is not available for this tile" -msgstr "" - -#: app/datatypes/datatypes.py:1626 -msgid "This file's fileid is not a valid UUID" -msgstr "" - -#: app/datatypes/datatypes.py:1757 -#, python-brace-format -msgid "No domain option found for option id {0}, in node conifg: {1}" -msgstr "" - -#: app/datatypes/datatypes.py:1806 -msgid "" -"Invalid domain id. Please check the node this value is mapped to for a list " -"of valid domain ids." -msgstr "" - -#: app/datatypes/datatypes.py:2122 -#, python-brace-format -msgid "The related resource with id '{0}' is not in the system." -msgstr "" - -#: app/etl_modules/base_import_module.py:33 -msgid "Delegating load reversal to Celery task" -msgstr "" - -#: app/etl_modules/branch_csv_importer.py:218 -msgid "Legacy id(s) already exist. Legacy ids must be unique" -msgstr "" - -#: app/etl_modules/branch_csv_importer.py:243 -#: app/etl_modules/import_single_csv.py:208 -msgid "Failed to complete load" -msgstr "" - -#: app/etl_modules/branch_csv_importer.py:244 -#: app/etl_modules/import_single_csv.py:209 -msgid "Unable to insert record into staging table" -msgstr "" - -#: app/etl_modules/branch_csv_importer.py:279 -msgid "Invalid excel file/zip specified" -msgstr "" - -#: app/etl_modules/branch_csv_importer.py:280 -msgid "Upload a valid excel file" -msgstr "" - -#: app/etl_modules/branch_csv_importer.py:307 -msgid "Unable to initialize load" -msgstr "" - -#: app/etl_modules/branch_csv_importer.py:322 -#: app/etl_modules/import_single_csv.py:161 -msgid "Delegating load to Celery task" -msgstr "" - -#: app/etl_modules/branch_csv_importer.py:326 -#: app/etl_modules/import_single_csv.py:165 -msgid "delegated_to_celery" -msgstr "" - -#: app/etl_modules/branch_csv_importer.py:329 -#: app/etl_modules/import_single_csv.py:168 -msgid "" -"Cannot start process. Unable to run process as a background task at this " -"time." -msgstr "" - -#: app/etl_modules/branch_csv_importer.py:335 -#: app/etl_modules/import_single_csv.py:174 -#: app/templates/views/rdm/modals/import-concept-form.htm:40 -msgid "Error" -msgstr "" - -#: app/etl_modules/import_single_csv.py:104 -msgid "No csv file found" -msgstr "" - -#: app/etl_modules/import_single_csv.py:105 -msgid "Upload a valid csv file" -msgstr "" - -#: app/etl_modules/import_single_csv.py:143 -msgid "No valid node is selected" -msgstr "" - -#: app/etl_modules/import_single_csv.py:145 -msgid "Only one column should be selected for id" -msgstr "" - -#: app/functions/primary_descriptors.py:67 -#, python-brace-format -msgid "Invalid nodegroupid, {0}, participating in descriptor function." -msgstr "" - -#: app/functions/primary_descriptors.py:69 app/views/resource.py:745 -#: app/views/search.py:387 -msgid "Undefined" -msgstr "" - -#: app/models/concept.py:153 -msgid "Only include values for include or exclude, but not both" -msgstr "" - -#: app/models/concept.py:844 -#, python-format -msgid "Invalid subconcept definition: %s" -msgstr "" - -#: app/models/concept.py:852 -#, python-format -msgid "Invalid related concept definition: %s" -msgstr "" - -#: app/models/concept.py:863 -#, python-format -msgid "Invalid value definition: %s" -msgstr "" - -#: app/models/concept.py:1267 -msgid "Need to include values when creating a collection" -msgstr "" - -#: app/models/concept.py:1375 -msgid "" -"Index of label failed. Index type (scheme id) could not be derived from the " -"label." -msgstr "" - -#: app/models/fields/i18n.py:166 -msgid "A I18n_TextField object" -msgstr "" - -#: app/models/fields/i18n.py:357 -msgid "A I18n_JSONField object" -msgstr "" - -#: app/models/graph.py:77 -msgid "New Node" -msgstr "" - -#: app/models/graph.py:267 -msgid "Top Node" -msgstr "" - -#: app/models/graph.py:491 -#, python-brace-format -msgid "" -"Duplicate node alias: \"{0}\". All aliases must be unique in a resource " -"model." -msgstr "" - -#: app/models/graph.py:495 -#, python-brace-format -msgid "Fail to save node \"{0}\"." -msgstr "" - -#: app/models/graph.py:554 -#, python-brace-format -msgid "" -"Your resource model: {0}, already has instances saved. You cannot delete a " -"Resource Model with instances." -msgstr "" - -#: app/models/graph.py:703 -#, python-brace-format -msgid "" -"Your resource model: {0}, already has instances saved. You cannot modify a " -"Resource Model with instances." -msgstr "" - -#: app/models/graph.py:735 -msgid "Ontology rules don't allow this node to be appended" -msgstr "" - -#: app/models/graph.py:1002 -#, python-brace-format -msgid "" -"Your resource model: {self.name}, already has instances " -"saved. You cannot delete nodes from a Resource " -"Model with instances." -msgstr "" - -#: app/models/graph.py:1037 -msgid "The graph you wish to append needs to define an ontology" -msgstr "" - -#: app/models/graph.py:1050 -msgid "Ontology rules don't allow this graph to be appended" -msgstr "" - -#: app/models/graph.py:1522 -#, python-brace-format -msgid "" -"Your resource model: {self.name}, already has instances " -"saved. You cannot modify a Resource Model " -"with instances." -msgstr "" - -#: app/models/graph.py:1541 -#, python-brace-format -msgid "Duplicate node name: \"{0}\". All node names in a card must be unique." -msgstr "" - -#: app/models/graph.py:1550 -#, python-brace-format -msgid "Duplicate node name: \"{0}\". All sibling node names must be unique." -msgstr "" - -#: app/models/graph.py:1586 -msgid "" -"The top node of your resource graph: {self.root.name} needs to be a " -"collector. Hint: check that nodegroup_id of your " -"resource node(s) are not null." -msgstr "" - -#: app/models/graph.py:1592 -msgid "The top node of your resource graph must have a datatype of 'semantic'." -msgstr "" - -#: app/models/graph.py:1597 -msgid "" -"If your graph contains more than one node and is not a resource the root " -"must be a collector." -msgstr "" - -#: app/models/graph.py:1602 -msgid "Field name must not be blank." -msgstr "" - -#: app/models/graph.py:1604 -msgid "Field name must contain only alpha-numeric characters or underscores." -msgstr "" - -#: app/models/graph.py:1606 -msgid "Field name cannot begin with an underscore or number" -msgstr "" - -#: app/models/graph.py:1612 -#, python-brace-format -msgid "Field name must be unique to the graph; '{fieldname}' already exists." -msgstr "" - -#: app/models/graph.py:1634 -#, python-brace-format -msgid "A valid {0} ontology class must be selected" -msgstr "" - -#: app/models/graph.py:1637 -#, python-brace-format -msgid "'{0}' is not a valid {1} ontology class" -msgstr "" - -#: app/models/graph.py:1645 -msgid "" -"You must specify an ontology property. Your graph isn't semantically " -"valid. Entity domain '{edge.domainnode." -"ontologyclass}' and Entity range '{edge." -"rangenode.ontologyclass}' can not be related via Property '{edge." -"ontologyproperty}'." -msgstr "" - -#: app/models/graph.py:1664 -msgid "" -"Your graph isn't semantically valid. Entity domain '{edge.domainnode." -"ontologyclass}' and Entity range '{edge." -"rangenode.ontologyclass}' cannot be related " -"via Property '{edge.ontologyproperty}'." -msgstr "" - -#: app/models/graph.py:1672 -#, python-brace-format -msgid "" -"'{0}' is not found in the {1} ontology or is not a valid ontology property " -"for Entity domain '{2}'." -msgstr "" - -#: app/models/graph.py:1681 -msgid "" -"You have assigned ontology classes to your graph nodes but not assigned an " -"ontology to your graph." -msgstr "" - -#: app/models/graph.py:1702 -msgid "The json-ld context you supplied wasn't formatted correctly." -msgstr "" - -#: app/models/graph.py:1707 -#, python-brace-format -msgid "Another resource model already uses the slug '{self.slug}'" -msgstr "" - -#: app/models/graph.py:1753 -msgid "Graph Validation Error" -msgstr "" - -#: app/models/models.py:435 -msgid "Only resource models may be edited - branches are not editable" -msgstr "" - -#: app/models/models.py:437 -msgid "" -"This Model is currently unpublished and not available for instance creation." -msgstr "" - -#: app/models/resource.py:785 -msgid "Published Model Error" -msgstr "" - -#: app/models/resource.py:795 -msgid "Unpublished Model Error" -msgstr "" - -#: app/models/tile.py:276 -msgid "" -"This card violates a unique constraint. The " -"following value is already saved: " -msgstr "" - -#: app/models/tile.py:297 -#, python-brace-format -msgid "" -"Error checking for missing node. Nodeid: {nodeid} with value: {value}, not " -"in nodes. You may have a node in your business data that " -"no longer exists in any graphs." -msgstr "" - -#: app/models/tile.py:302 -msgid "This card requires values for the following: " -msgstr "" - -#: app/models/tile.py:325 -#, python-brace-format -msgid "{0}" -msgstr "" - -#: app/models/tile.py:645 app/models/tile.py:656 app/models/tile.py:673 -msgid "No associated functions or other TypeError raised by a function" -msgstr "" - -#: app/models/tile.py:711 -msgid "Tile Validation Error" -msgstr "" - -#: app/models/tile.py:722 -msgid "Tile Cardinaltiy Error" -msgstr "" - -#: app/search/base_index.py:182 -msgid "Search Index Error:" -msgstr "" - -#: app/search/base_index.py:192 -msgid "Search Index Not Defined Error:" -msgstr "" - -#: app/search/base_index.py:193 -#, python-format -msgid "" -"The index \"%s\" is not defined in settings.ELASTICSEARCH_CUSTOM_INDEXES" -msgstr "" - -#: app/search/components/map_filter.py:75 -msgid "Feature geometry is not defined" -msgstr "" - -#: app/search/elasticsearch_dsl_builder.py:289 -msgid "" -"You need at least one of the following operators in a Range expression: gte, " -"gt, lte, or lt" -msgstr "" - -#: app/search/elasticsearch_dsl_builder.py:291 -msgid "You can only use one of either: gte or gt" -msgstr "" - -#: app/search/elasticsearch_dsl_builder.py:293 -msgid "You can only use one of either: lte or lt" -msgstr "" - -#: app/search/elasticsearch_dsl_builder.py:377 -msgid "You need to specify either a \"field\" or a \"script\"" -msgstr "" - -#: app/search/elasticsearch_dsl_builder.py:379 -msgid "You need to specify a name for your aggregation" -msgstr "" - -#: app/search/elasticsearch_dsl_builder.py:381 -msgid "You need to specify an aggregation type" -msgstr "" - -#: app/search/elasticsearch_dsl_builder.py:570 -msgid "You need to specify a path for your nested aggregation" -msgstr "" - -#: app/search/search_export.py:212 -#, python-brace-format -msgid "Shapefile are fieldnames required for the following nodes: {0}" -msgstr "" - -#: app/tasks.py:31 -msgid "files_deleted" -msgstr "" - -#: app/tasks.py:84 -msgid "" -"Your search {} is ready for download. You have 24 hours to access this file, " -"after which we'll automatically remove it." -msgstr "" - -#: app/tasks.py:88 -msgid "" -"Hello,\n" -"Your request to download a set of search results is now ready." -msgstr "" - -#: app/tasks.py:90 -msgid "Download Now" -msgstr "" - -#: app/tasks.py:91 app/tasks.py:148 -msgid "Thank you" -msgstr "" - -#: app/tasks.py:140 -msgid "Resources have completed loading." -msgstr "" - -#: app/tasks.py:144 -msgid "" -"Hello,\n" -"Your package has successfully loaded into your Arches project." -msgstr "" - -#: app/tasks.py:147 -msgid "Log me in" -msgstr "" - -#: app/tasks.py:213 app/tasks.py:235 -msgid "Completed" -msgstr "" - -#: app/tasks.py:213 app/tasks.py:220 app/tasks.py:235 app/tasks.py:242 -msgid "Failed" -msgstr "" - -#: app/tasks.py:214 -msgid "Branch Excel Import: {} [{}]" -msgstr "" - -#: app/tasks.py:236 -msgid "Single CSV Import: {} [{}]" -msgstr "" - -#: app/templates/base-manager.htm:42 app/templates/change_password.htm:46 -#: app/templates/javascript.htm:404 -#: app/templates/views/rdm/modals/import-concept-form.htm:52 -#: app/templates/views/rdm/modals/import-scheme-form.htm:53 -#: app/templates/views/rdm/modals/manage-parent-form.htm:57 -#: app/templates/views/rdm/modals/related-concept-form.htm:67 -#: app/templates/views/rdm/modals/related-member-form.htm:66 -#: app/templates/views/rdm/modals/value-form.htm:63 -#: app/templates/views/rdm/modals/value-form.htm:142 -#: app/templates/views/rdm/modals/value-form.htm:220 -#: app/templates/views/user-profile-manager.htm:156 -msgid "Cancel" -msgstr "" - -#: app/templates/base-manager.htm:45 -msgid "OK" -msgstr "" - -#: app/templates/base-manager.htm:72 app/templates/rdm.htm:64 -msgid "Tools" -msgstr "" - -#: app/templates/base-manager.htm:80 -msgid "Manage System Settings" -msgstr "" - -#: app/templates/base-manager.htm:86 -#: app/templates/help/system-settings-help.htm:11 app/views/api.py:799 -#: app/views/resource.py:239 -msgid "System Settings" -msgstr "" - -#: app/templates/base-manager.htm:90 -msgid "System Settings Graph" -msgstr "" - -#: app/templates/base-manager.htm:101 app/templates/base-manager.htm:363 -#: app/templates/javascript.htm:386 app/templates/views/search.htm:23 -#: app/views/search.py:105 -msgid "Search" -msgstr "" - -#: app/templates/base-manager.htm:116 -msgid "Add New Resource" -msgstr "" - -#: app/templates/base-manager.htm:149 app/views/graph.py:151 -msgid "Arches Designer" -msgstr "" - -#: app/templates/base-manager.htm:155 app/templates/index.htm:399 -#: app/templates/views/graph.htm:64 -msgid "Resource Models" -msgstr "" - -#: app/templates/base-manager.htm:159 app/templates/views/graph.htm:65 -msgid "Branches" -msgstr "" - -#: app/templates/base-manager.htm:171 -#: app/templates/views/map-layer-manager.htm:26 app/views/map.py:96 -#: app/views/map.py:98 -msgid "Map Layer Manager" -msgstr "" - -#: app/templates/base-manager.htm:177 -#: app/templates/help/map-manager-help.htm:11 -#: app/templates/views/map-layer-manager.htm:88 -msgid "Resource Layers" -msgstr "" - -#: app/templates/base-manager.htm:182 -#: app/templates/help/map-manager-help.htm:31 app/templates/javascript.htm:439 -#: app/templates/views/map-layer-manager.htm:89 -msgid "Basemaps" -msgstr "" - -#: app/templates/base-manager.htm:187 -#: app/templates/help/map-manager-help.htm:46 app/templates/javascript.htm:440 -#: app/templates/javascript.htm:482 -#: app/templates/views/map-layer-manager.htm:90 -msgid "Overlays" -msgstr "" - -#: app/templates/base-manager.htm:201 app/templates/views/edit-history.htm:5 -#: app/views/resource.py:572 -msgid "Recent Edits" -msgstr "" - -#: app/templates/base-manager.htm:214 app/views/user.py:107 -#: app/views/user.py:142 -msgid "Profile Manager" -msgstr "" - -#: app/templates/base-manager.htm:223 -msgid "Modules" -msgstr "" - -#: app/templates/base-manager.htm:232 app/templates/rdm.htm:9 -#: app/views/concept.py:67 -msgid "Reference Data Manager" -msgstr "" - -#: app/templates/base-manager.htm:274 -msgid "DEBUG" -msgstr "" - -#: app/templates/base-manager.htm:289 app/templates/index.htm:87 -#: app/templates/javascript.htm:735 app/templates/views/graph.htm:109 -#: app/templates/views/rdm/concept-report.htm:26 -#: app/templates/views/rdm/concept-report.htm:50 -msgid "Manage" -msgstr "" - -#: app/templates/base-manager.htm:323 -msgid "Profile" -msgstr "" - -#: app/templates/base-manager.htm:323 app/templates/base-manager.htm:326 -msgid "Login" -msgstr "" - -#: app/templates/base-manager.htm:328 -msgid "Welcome" -msgstr "" - -#: app/templates/base-manager.htm:349 app/templates/base-manager.htm:422 -msgid "Notifications" -msgstr "" - -#: app/templates/base-manager.htm:374 -msgid "My Recent Edits" -msgstr "" - -#: app/templates/base-manager.htm:383 -msgid "Edit Resource" -msgstr "" - -#: app/templates/base-manager.htm:391 -msgid "Print" -msgstr "" - -#: app/templates/base-manager.htm:400 app/templates/javascript.htm:340 -#: app/templates/views/graph/card-configuration/card-form-preview.htm:54 -#: app/templates/views/graph/card-configuration/card-form-preview.htm:110 -msgid "Help" -msgstr "" - -#: app/templates/base-manager.htm:411 -msgid "Logout" -msgstr "" - -#: app/templates/base-manager.htm:426 app/templates/base-manager.htm:448 -#: app/templates/login.htm:73 app/templates/rdm.htm:78 -#: app/templates/views/rdm/concept-report.htm:42 -#: app/templates/views/rdm/concept-report.htm:59 -#: app/templates/views/rdm/modals/add-child-form.htm:49 -#: app/templates/views/rdm/modals/add-collection-form.htm:31 -#: app/templates/views/rdm/modals/add-scheme-form.htm:37 -#: app/templates/views/rdm/modals/delete-collection-form.htm:43 -#: app/templates/views/rdm/modals/delete-scheme-form.htm:43 -#: app/templates/views/rdm/modals/export-scheme-form.htm:26 -msgid "Close" -msgstr "" - -#: app/templates/base-manager.htm:444 -msgid "My Edit History" -msgstr "" - -#: app/templates/base-manager.htm:471 -msgid "Close Help" -msgstr "" - -#: app/templates/base-manager.htm:482 -msgid "for more documentation, visit" -msgstr "" - -#: app/templates/change_password.htm:23 -msgid "Change your password" -msgstr "" - -#: app/templates/change_password.htm:47 -msgid "Change Password" -msgstr "" - -#: app/templates/change_password.htm:50 app/templates/signup.htm:133 -msgid "Your password must:" -msgstr "" - -#: app/templates/errors/404.htm:11 app/templates/errors/500.htm:11 -#: app/templates/javascript.htm:206 -msgid "Arches" -msgstr "" - -#: app/templates/errors/404.htm:19 app/templates/errors/500.htm:19 -msgid "Oops!" -msgstr "" - -#: app/templates/errors/404.htm:20 -msgid "Page Not Found!" -msgstr "" - -#: app/templates/errors/404.htm:22 -msgid "" -"Sorry, but the page you are looking for has not been found on our server." -msgstr "" - -#: app/templates/errors/404.htm:26 app/templates/errors/500.htm:26 -msgid "Back to Homepage" -msgstr "" - -#: app/templates/errors/500.htm:20 -msgid "Internal Server Error!" -msgstr "" - -#: app/templates/errors/500.htm:22 -msgid "Something went wrong and we couldn't process your request." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:6 -msgid "Cards Tab" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:10 -#: app/templates/help/function-help.htm:7 -#: app/templates/help/graph-tab-help.htm:10 -#: app/templates/help/permissions-tab-help.htm:10 -msgid "Overview" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:14 -msgid "" -"In this tab you will configure the user-facing aspects of your graph. There " -"are multiple levels to doing so, which are reflected in the levels of the " -"graph tree. Report Configuration where you choose the " -"template for the resource report, Card Configuration where " -"you'll specify card-related settings, and the Widget Manager where you will choose and configure the data entry widget for each " -"node in the graph." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:19 -#: app/templates/views/graph-designer.htm:307 -msgid "Report Configuration" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:23 -msgid "" -"Each Resource Model must be configured with a report template. Reports show " -"data for all nodes in a resource instance for which the user has Read " -"permissions." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:24 -msgid "No Header Template" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:25 -msgid "Lists all node data, no special header at the top of the page." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:26 -msgid "Image Header Template" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:27 -msgid "" -"Use this template for Resource Models that will be be primarily used to " -"record images." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:30 app/templates/javascript.htm:535 -msgid "Included Image Nodes" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:31 -msgid "" -"Choose one or more nodes that hold images in this Resource Model. These " -"images will be presented as a slideshow in the report header." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:34 -msgid "Map Header Template" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:35 -msgid "" -"Use this template for Resource Models that will be be primarily used to " -"record resources that have a geo-location. There are number of settings you " -"should fill out to control the appearance of the map in the header." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:38 -msgid "Map Controls" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:39 -msgid "Choose whether or not the user has access to the Map Tools." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:42 -msgid "Position" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:43 -msgid "" -"You can set the position by panning the map. On report load, the map will " -"automatically pan and zoom to the resource geo-location if there is one " -"(also see Default Value below). Pitch values are 0-60 " -"(higher = more oblique), Bearing values can be positive or " -"negative (270 faces west; -180 faces south). Use ctrl + click " -"then pan the map to change Pitch and Bearing." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:46 -msgid "Zoom" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:47 -msgid "" -"Zoom levels go from 0 (zoomed out) to 20 (zoomed in). On report load, the " -"map will automatically pan and zoom to the resource geo-location if there is " -"one." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:50 -msgid "Geocoder" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:51 -msgid "" -"Configure which geocoding service the address search bar will use, and " -"whether or not to show the bar at all." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:54 -msgid "Resource Properties" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:55 -msgid "Configure some styling options for how the resource appears on the map." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:58 -#: app/templates/help/cards-tab-help.htm:127 app/templates/javascript.htm:236 -#: app/templates/javascript.htm:313 -msgid "Default Value" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:59 -msgid "" -"Choose whether the map should zoom to the resource geo-location if available " -"or the geo-location of the user." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:67 -#: app/templates/views/graph/graph-designer/card-configuration.htm:7 -msgid "Card Configuration" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:71 -msgid "" -"The settings for Cards are mostly related yo how you want a user to see the " -"card, but some have a more direct bearing on data structure as well. The " -"preview shows what the card will look like to users." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:74 -#: app/templates/views/graph/graph-designer/card-configuration.htm:18 -msgid "Card Type" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:75 -msgid "" -"Choose the Card Component to use. Only the Default Card is available " -"initially, but custom Card Components are a way for developers to enhance " -"the user experience." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:78 -#: app/templates/views/graph/graph-designer/card-configuration.htm:28 -msgid "Card Title" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:79 -msgid "Users will see this title when performing data entry." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:82 -#: app/templates/help/graph-tab-help.htm:32 app/templates/javascript.htm:228 -#: app/templates/views/graph/graph-designer/card-configuration.htm:37 -#: app/templates/views/graph/graph-designer/graph-settings.htm:44 -#: app/templates/views/graph/graph-designer/graph-settings.htm:48 -msgid "Subtitle" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:83 -msgid "Users will see this subtitle when performing data entry." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:86 -msgid "CSS Classes" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:87 -msgid "" -"You can add your own CSS classes to this Card to customize its look and " -"feel. Define these classes in your project's \"package.css\" file." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:90 -msgid "Make Card Visible" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:91 -msgid "" -"Show this Card by default. Developers could hide a card initially, and show " -"it based other variables." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:94 -msgid "Allow Multiple Values" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:95 -msgid "" -"While certain node data types allow the storage of multiple values in a " -"single node, \"concept-list\" for example, this setting is how you control " -"cardinality at a higher level. When determining whether or not to use this " -"setting, we recommend testing out the resource editor interface directly." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:98 -msgid "Enable Card-level Help" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:99 -msgid "" -"To aid data entry users when using this Card, you may want to add some extra " -"guidance. Enable setting to do so, and design the content of this guidance " -"with the Card-Level Help menu." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:106 -msgid "Widget Management" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:110 -msgid "" -"Widgets are data entry helpers for each node that collects information; it's " -"often easier to pick a date from a calendar than to type it in, for example. " -"Generally, the data type of the node will determine which Widget template is " -"used. However, in some cases you will have a choice: For example, in the " -"case of a concept node, you can choose a dropdown menu or a set " -"of radio buttons. Similarly, for a string node you can choose a " -"basic text box or a rich text editor." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:111 -msgid "" -"Depending on the Widget, there are more settings you can configure, most of " -"which are optional and all come with acceptable defaults." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:112 -msgid "Common Settings" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:115 -#: app/templates/views/graph/graph-designer/widget-configuration.htm:18 -#: app/templates/views/graph/graph-designer/widget-configuration.htm:21 -msgid "Widget Label" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:116 -msgid "" -"This will be used in the user interface. The default label comes from the " -"node name." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:119 -#: app/templates/views/graph-designer.htm:312 -#: app/templates/views/graph/graph-designer/widget-configuration.htm:27 -msgid "Template" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:120 -msgid "" -"The list of available Widgets is determined by the node's data type, though " -"developers can create new Widgets." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:123 app/templates/javascript.htm:199 -msgid "Placeholder" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:124 -msgid "Shown in the input area before the user has entered anything." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:128 -msgid "If desired, you can define a default value." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:131 -msgid "Other Settings by Widget" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:134 -msgid "map-widget" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:135 -msgid "" -"The map widget allows for a good deal of customization, from the default " -"center and zoom level to default layers." -msgstr "" - -#: app/templates/help/cards-tab-help.htm:138 -msgid "datepicker-widget" -msgstr "" - -#: app/templates/help/cards-tab-help.htm:139 -msgid "" -"This widget is used for the normal date data type, not the extended date/" -"time format data type. You can set minumum or maximum dates, change how " -"specific the calendar is when user first opens it, or set the display of the " -"date. However, note that real YYYY-MM-DD dates are stored in the database " -"whether no matter what display format you have chosed for this widget. So if " -"you have set YYYY for the Date Format and a user enters " -"\"2005\", then \"2005-01-01\" will be saved in the database." -msgstr "" - -#: app/templates/help/function-help.htm:11 -msgid "" -"\n" -"

Functions are discrete operations that can be associated with " -"a Resource Model and are run on specific nodes or cards whenever a user " -"clicks creates or modify's a Resource. Here in the Function Manager you will " -"associate Functions with this Resource Model and configure them " -"appropriately.

\n" -"

To add a Function to this Resource Model, click on it in " -"Function Library, and notice that it is added to the list of Selected " -"Functions. To delete a Function, use the symbol in the upper right corner.\n" -" " -msgstr "" - -#: app/templates/help/function-help.htm:16 -msgid "adding a function - click to view" -msgstr "" - -#: app/templates/help/function-help.htm:16 -#: app/templates/help/graph-tab-help.htm:112 -#: app/templates/help/permissions-tab-help.htm:47 -#: app/templates/help/rdm-help.htm:33 app/templates/help/rdm-help.htm:47 -#: app/templates/help/rdm-help.htm:61 app/templates/help/rdm-help.htm:75 -#: app/templates/help/rdm-help.htm:89 -#: app/templates/help/resource-editor-help.htm:18 -#: app/templates/help/resource-editor-help.htm:31 -#: app/templates/help/resource-editor-help.htm:53 -#: app/templates/help/search-help.htm:8 app/templates/help/search-help.htm:30 -#: app/templates/help/search-help.htm:39 app/templates/help/search-help.htm:49 -#: app/templates/help/search-help.htm:65 app/templates/help/search-help.htm:88 -msgid "open in new tab" -msgstr "" - -#: app/templates/help/function-help.htm:19 -#, python-format -msgid "" -"\n" -"

Arches comes with three default functions (see below). " -"However, functions are envisioned as the hook through which developers can " -"easily customize Arches capabilities, because new Functions can be added to " -"your individual Arches installation. Learn more here.

\n" -" " -msgstr "" - -#: app/templates/help/function-help.htm:26 -msgid "Define Resource Descriptors" -msgstr "" - -#: app/templates/help/function-help.htm:31 -msgid "" -"This function will generate one or more descriptors for Resources that are " -"created with this Resource Model. These descriptors are used throughout the " -"database interface, but are not saved as part of the resource. This gives " -"you control over the way Resources are identified and described in search " -"results and elsewhere." -msgstr "" - -#: app/templates/help/function-help.htm:32 -msgid "" -"Once added to the Resource Model, use the appropriate tab to configure a " -"descriptor template. Choose a card, and variables corresponding to each node " -"in that card will be added to the template, demarcated with < >. You can rearrange these variables and add text to customize the " -"descriptor. When you have set the descriptors, click Re-Index to update any existing resources in your database." -msgstr "" - -#: app/templates/help/function-help.htm:33 -msgid "" -"If there are multiple instances of a given card in a Resource, the first one " -"added will be used to create these descriptors. To manually change this, " -"edit the Resource in question and drag the desired tile to the top of the " -"list." -msgstr "" - -#: app/templates/help/function-help.htm:34 -msgid "" -"Any user with read access permission to a resource will be seeing these " -"resource descriptors wherever it shows up in search results or on the map. " -"If a card is intended to be hidden from any group of users, it " -"should not be used in this function." -msgstr "" - -#: app/templates/help/function-help.htm:36 -msgid "" -"\n" -"
Example
\n" -"

Consider a Resource where the Name node " -"value is Folsom School and Name Type node value is " -"Primary.

\n" -"

Selecting the Name card will populate the " -"template with <Name Type>, <Name>. The resulting " -"descriptor would read Primary, Folsom School. Changing the template " -"to Building Name: <Name> would yield Building Name: " -"Folsom School.

\n" -" " -msgstr "" - -#: app/templates/help/graph-tab-help.htm:6 -msgid "Graph Tab" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:14 -msgid "" -"In this tab you will design the graph—the core of a Resource Model or " -"Branch. In fact, sometimes Resource Models and Branches are generically " -"referred to as \"graphs\"." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:15 -msgid "" -"For the first step in building a graph, you should fill out the top-" -"level settings. Some of these may be changed later while others " -"can't, so make sure to do a lot of testing while developing a graph. With " -"the top-level settings in place, it's time to construct the graph by adding nodes (or full Branches) to the graph tree. Along the way, " -"you'll need to set the node-level settings for each node " -"you create." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:16 -msgid "" -"Once you've finished creating this Resource Model or Branch make sure to set " -"its status to \"active\"." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:21 -msgid "Top-Level Settings" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:25 -#: app/templates/views/rdm/concept-report.htm:269 -#: app/templates/views/rdm/entitytype-report.htm:160 -msgid "Identifiers" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:28 app/templates/javascript.htm:339 -#: app/templates/views/graph/graph-designer/graph-settings.htm:31 -#: app/templates/views/graph/graph-designer/graph-settings.htm:36 -msgid "Name" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:29 -msgid "" -"Used to identify this Resource Model throughout the app interface. Default " -"is New Resource Model." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:33 -msgid "Optional subtitle, displayed on the Arches Designer home page." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:36 -#: app/templates/views/graph/graph-designer/graph-settings.htm:56 -msgid "Ontology" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:37 -msgid "" -"Decide whether an ontology will be enforced in this graph. To learn more " -"about what this means, read Ontologies in Arches. By " -"default, you are allowed to choose between using the CIDOC CRM v6.2, or " -"using no ontology. Once a node or branch has been added to this graph the " -"Ontology setting cannot be modified." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:40 -#: app/templates/views/graph/graph-designer/graph-settings.htm:68 -msgid "Root Class" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:41 -msgid "" -"This setting is only necessary if an \"Ontology\" has been chosen. Define " -"the ontology class of the root node for this graph." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:44 -#: app/templates/views/graph/graph-designer/graph-settings.htm:80 -msgid "Configuration" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:47 -msgid "Status" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:48 -msgid "" -"Set to \"inactive\" to disallow use of this graph during development. " -"Inactive Resource Models cannot be used to create new resources, and " -"inactive Branches can not be added to a Resource Model." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:52 -msgid "Resource models that may be related" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:53 -msgid "" -"Choose which Resource Models can be related to this one with resource-to-" -"resource relationships." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:58 -#: app/templates/views/graph/graph-designer/graph-settings.htm:89 -msgid "Root Node Data Type" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:59 -msgid "Choose what data type to use for the root node of this Branch." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:63 app/templates/javascript.htm:636 -#: app/templates/javascript.htm:644 -#: app/templates/views/graph/graph-designer/graph-settings.htm:158 -#: app/templates/views/graph/graph-designer/node-form.htm:123 -msgid "Description" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:66 -#: app/templates/views/graph/graph-designer/graph-settings.htm:165 -msgid "Author" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:67 -msgid "" -"You can optionally add an Author to this graph. Only " -"administrators will see this information." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:70 -#: app/templates/views/graph/graph-designer/graph-settings.htm:177 -msgid "Abstract" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:71 -msgid "You can optionally add an Abstract to this graph." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:71 -msgid "" -"Users will see this abstract when they are presented with a choice of what " -"Resource Model to use to create a new resource." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:71 -msgid "" -"This abstract will be shown in the Branch Library which is used during graph " -"construction." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:75 -#: app/templates/views/graph/graph-designer/graph-settings.htm:189 -msgid "JSON-LD Context" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:76 -msgid "" -"Add a JSON-LD Context for " -"this Resource Model. This allows you to namespace common URI endpoints that " -"are used within a JSON-LD output of the resource. You can enter a plain URL " -"(\"http://www.cidoc-crm.org/cidoc-crm/\"), or JSON that defines " -"multiple keys ({\"crm\":\"http://www.cidoc-crm.org/cidoc-crm/\",\"rdf" -"\":\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"})." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:80 -#: app/templates/views/graph/graph-designer/graph-settings.htm:212 -msgid "Appearance" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:84 app/templates/javascript.htm:599 -#: app/templates/views/graph/graph-designer/graph-settings.htm:221 -msgid "Color" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:85 -msgid "" -"Choose a color for this Resource Model to be used in the related resources " -"force directed graph." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:89 -msgid "Icon" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:90 -msgid "" -"Choose an icon to identify this graph throughout the app interface. You can " -"browse the icons to select one, or type in the search bar to filter them. " -"Arches uses the Font " -"Awesome icon library; custom icons are not supported." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:98 -msgid "Construct the Graph" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:102 -msgid "" -"Use the graph tree on the left side of the page to construct the graph. " -"Every new graph starts with a Top Node, which will take the " -"name of the new Resource Model or Branch. From this node, you can either " -"Add Child Node to add a single node, or Add Branch to add an entire existing Branch." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:103 -msgid "" -"At any point during construction you can switch from Design " -"mode to Preview to see the full shape of your graph." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:104 -msgid "" -"If you have created a branch structure in a Resource Model that you would " -"like to use in a different Resource Model, you can export it from the graph " -"tree." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:110 -#: app/templates/help/permissions-tab-help.htm:45 -msgid "add a node and branch to new graph - click to view" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:122 -msgid "Node-Level Settings" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:126 -#: app/templates/views/graph/graph-designer/node-form.htm:28 -msgid "Node Identifiers" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:129 -#: app/templates/views/graph/graph-designer/node-form.htm:40 -msgid "Node Name" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:130 -msgid "" -"Set the name for this node. This will be used by default in the user " -"interface, but a different name for display can be configured at the widget " -"level." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:133 -#: app/templates/views/graph/graph-designer/node-form.htm:85 -msgid "Ontology Class" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:134 -msgid "only present if this graph uses an ontology" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:134 -msgid "" -"This setting assigns an ontological class to this node. To learn more, read " -"Ontologies in Arches" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:137 -msgid "Relationship to..." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:138 -msgid "" -"Define what relationship this node has with its parent node (the one " -"directly above it in the graph tree). A verbalization of your choice is " -"shown in the Semantics section below this setting." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:141 -msgid "Node Data Type and Settings" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:142 -msgid "" -"Depending on which data type you choose, you may have many more settings to " -"fill out. Those listed below will be present for every node no matter the " -"data type." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:145 -#: app/templates/views/graph/graph-designer/node-form.htm:144 -msgid "Data type" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:146 -msgid "" -"Choose the data type for this node. Please see the Default Data " -"Types section below. Once data is collected for this node, this " -"setting cannot be changed." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:149 -#: app/templates/views/graph/graph-designer/node-form.htm:183 -msgid "Expose to Advanced Search" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:150 -msgid "" -"If true users will be able to add this node to an Advanced Search query." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:153 -#: app/templates/views/graph/graph-designer/node-form.htm:203 -#: app/templates/views/graph/graph-designer/widget-configuration.htm:63 -msgid "Required" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:154 -msgid "" -"If true a value must be entered for this node in order to save it. Once data " -"is collected for this node, this setting cannot be changed." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:157 -msgid "Place node(s) in a separate card" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:158 -msgid "only present if this node is not already the top node for a card" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:158 -msgid "" -"If true this node will be set in a different card from its parent. This " -"affects data entry, and you are encouraged to test both states of this " -"setting while building you graph. Once data is collected for this node, this " -"setting cannot be changed." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:165 -msgid "Default Data Types" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:169 -msgid "" -"The data type of a node determines what kind of data that node will store. " -"Once chosen, some data types will require further configuration." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:170 -msgid "" -"Developers can create new datatypes." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:173 -msgid "boolean" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:174 -msgid "Use this to store a \"yes\"/\"no\" or \"true\"/\"false\" value." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:177 -msgid "concept" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:178 -msgid "" -"Stores one of a series of concepts from the Reference Data Manager. Users " -"will choose a concept in a dropdown list or set of radio buttons. You'll " -"further be prompted to choose a Concept Collection—" -"this controls which concepts the user is able to choose from." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:181 -msgid "concept-list" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:182 -msgid "Stores multiple concepts in a single node." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:185 -msgid "date" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:186 -msgid "Stores a CE calendar date. See etdf for BCE and fuzzy date handling." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:189 -msgid "edtf" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:190 -msgid "" -"Stores an Extended Date/Time Format value. Use this data type for " -"BCE dates or dates with uncertainty. This datatype requires extra " -"configuration to inform the database search methods how to interpret EDTF " -"values. Data entry users can enter edtf dates using formats listed in the EDTF draft specification." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:193 -msgid "file-list" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:194 -msgid "Stores one or mores files. Use this to upload images, documents, etc." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:197 -msgid "iiif-drawing" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:198 -msgid "" -"Used to store an IIIF compliant image." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:201 -msgid "geojson-feature-collection" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:202 -msgid "" -"Stores geographic coordinates, and is used to show a resource on the map." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:205 -msgid "domain-value" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:206 -msgid "" -"Similar to \"concept\", choose this to present the user with a dropdown list " -"or set of radio buttons. Unlike \"concept\" this dropdown menu will not come " -"from your system-wide controlled vocubulary, but from a list of values that " -"you must define here." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:209 -msgid "domain-value-list" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:210 -msgid "Stores multiple domain-values in a single node." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:213 -msgid "csv-chart-json" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:214 -msgid "Stores a csv chart formatted as JSON." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:217 -msgid "node-value" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:218 -msgid "" -"Stores a reference to a different node in this graph. This would allow you " -"to store duplicate data in more than one branch." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:221 -msgid "number" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:222 -msgid "Stores a number." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:225 -msgid "resource-instance" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:226 -msgid "" -"Embeds a separate resource instance into this node. For example, you could " -"add a node called \"Assessed By\" to a condition assessment branch, and use " -"this data type. This would allow you to associate an individual stored in " -"your database as an Actor resource with a specific condition assessment. " -"Note that this construction is different from making a \"resource-to-" -"resource relationship\". " -msgstr "" - -#: app/templates/help/graph-tab-help.htm:229 -msgid "resource-instance-list" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:230 -msgid "Stores a list of resource instances in a single node." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:233 -msgid "semantic" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:234 -msgid "" -"A semantic node does not store data. Semantic nodes are used where " -"necessary to make symbolic connections between other nodes, generally in " -"order to follow ontological rules. The top node of every graph is a semantic " -"node." -msgstr "" - -#: app/templates/help/graph-tab-help.htm:237 -msgid "string" -msgstr "" - -#: app/templates/help/graph-tab-help.htm:238 -msgid "" -"Stores a string of text. This could be something simple like a name, or more " -"something elaborate like a descriptive paragraph with formatting and " -"hyperlinks." -msgstr "" - -#: app/templates/help/map-manager-help.htm:6 -msgid "" -"\n" -"

Three categories of Map Layers will appear on your map: " -"Resource Layers (the contents of your database), " -"Basemaps (static background layers), and Overlays (custom data layers from outside your database). To configure a " -"layer, first select its category in the top bar, and then choose it from the " -"list at left.

\n" -" " -msgstr "" - -#: app/templates/help/map-manager-help.htm:13 -msgid "" -"Resource Layers display the resource layers in your database. One Resource " -"Layer is created for each node with a geospatial datatype (for example, " -"geojson-feature-collection). You are able to customize the " -"appearance and visibility of each Resource Layer in the following ways." -msgstr "" - -#: app/templates/help/map-manager-help.htm:14 -#: app/templates/help/map-manager-help.htm:34 -#: app/templates/help/map-manager-help.htm:49 app/templates/javascript.htm:588 -#: app/templates/views/map-layer-manager.htm:186 -msgid "Service Styling" -msgstr "" - -#: app/templates/help/map-manager-help.htm:15 -msgid "" -"Define the way features will look on the map. The example map has " -"demonstration features that give you a preview of the changes you make. You " -"can choose to use Advanced Editing to create a more nuanced " -"style. Note that changes made in Advanced Editing will not be reflected if " -"you switch back to basic editing. For styling reference, checkout the
MapBox Style Specification." -msgstr "" - -#: app/templates/help/map-manager-help.htm:16 -#: app/templates/help/map-manager-help.htm:36 -#: app/templates/help/map-manager-help.htm:51 app/templates/javascript.htm:395 -#: app/templates/views/graph/graph-designer/card-configuration.htm:70 -#: app/templates/views/map-layer-manager.htm:183 -msgid "Settings" -msgstr "" - -#: app/templates/help/map-manager-help.htm:17 -msgid "" -"You can change the name of this overlay if desired; by default it will use " -"the name of its Resource Model. You make also set the layer to be added to " -"the search map by default, or choose a custom icon for it." -msgstr "" - -#: app/templates/help/map-manager-help.htm:18 app/templates/javascript.htm:590 -msgid "Clustering" -msgstr "" - -#: app/templates/help/map-manager-help.htm:19 -msgid "" -"Arches uses 'clustering' to better display resources at low zoom levels " -"(zoomed out). You are able to control the clustering settings for each layer " -"individually." -msgstr "" - -#: app/templates/help/map-manager-help.htm:21 -msgid "" -"Cluster Distance - distance (in pixels) within which " -"resources will be clustered" -msgstr "" - -#: app/templates/help/map-manager-help.htm:22 -msgid "" -"Cluster Max Zoom - zoom level after which clustering will " -"stop being used" -msgstr "" - -#: app/templates/help/map-manager-help.htm:23 -msgid "" -"Cluster Min Points - minimum number of points needed to " -"create a cluster" -msgstr "" - -#: app/templates/help/map-manager-help.htm:25 app/templates/javascript.htm:207 -#: app/templates/javascript.htm:589 app/templates/views/graph-designer.htm:212 -#: app/templates/views/graph/graph-designer/permission-settings-form.htm:10 -#: app/templates/views/graph/graph-designer/permission-settings-form.htm:57 -msgid "Permissions" -msgstr "" - -#: app/templates/help/map-manager-help.htm:26 -msgid "" -"This tab shows the permissions for the nodegroup whose geometry is displayed " -"in this Resource Layer. Permissions are defined in the Graph Designer." -msgstr "" - -#: app/templates/help/map-manager-help.htm:33 -msgid "" -"A Basemap will always be present in your map. Arches comes with a few " -"default basemaps, but advanced users are able to add more. Once added, there " -"are few ways to configure each basemap." -msgstr "" - -#: app/templates/help/map-manager-help.htm:35 -msgid "" -"Define a style for this basemap. Note that depending on the type of layer, " -"there are different styling options. For styling reference, checkout the MapBox Style Specification." -msgstr "" - -#: app/templates/help/map-manager-help.htm:38 -msgid "Layer name - enter a name to identify this basemap" -msgstr "" - -#: app/templates/help/map-manager-help.htm:39 -msgid "" -"Default search map - choose this layer to be the default " -"basemap" -msgstr "" - -#: app/templates/help/map-manager-help.htm:40 -#: app/templates/help/map-manager-help.htm:55 -msgid "Layer icon - associate an icon with this layer" -msgstr "" - -#: app/templates/help/map-manager-help.htm:48 -msgid "" -"Overlays allow you to incorporate map layers from external sources. Note " -"that Search Results and Search Markets are treated as overlays, and can be " -"customize separately. New overlays can be added with a little behind-the-" -"scenes work. Once added, there are few ways to configure each overlay." -msgstr "" - -#: app/templates/help/map-manager-help.htm:50 -msgid "" -"Define a style for this overlay. Note that depending on the type of layer, " -"there are different styling options. For styling reference, checkout the MapBox Style Specification." -msgstr "" - -#: app/templates/help/map-manager-help.htm:53 -msgid "Layer name - enter a name to identify this overlay" -msgstr "" - -#: app/templates/help/map-manager-help.htm:54 -msgid "" -"Default search map - choose whether this overlay should be " -"shown in the search map by default. Note that in the search map itself you " -"can change the order of the layers." -msgstr "" - -#: app/templates/help/permissions-tab-help.htm:6 -msgid "Permissions Tab" -msgstr "" - -#: app/templates/help/permissions-tab-help.htm:14 -msgid "" -"Arches allows you to define user and user group permissions on a per-" -"nodegroup basis. For example, you may want to hide the coordinates of a " -"Resource from the public, or allow a certain group of users to only update " -"the condition assessment section of a Resource Model. Rules like these are " -"all enforced using permissions." -msgstr "" - -#: app/templates/help/permissions-tab-help.htm:15 -msgid "Permissions Levels" -msgstr "" - -#: app/templates/help/permissions-tab-help.htm:18 -#: app/templates/javascript.htm:648 app/templates/javascript.htm:756 -#: app/templates/views/components/plugins/workflow.htm:34 -#: app/templates/views/graph/function-manager.htm:121 -#: app/templates/views/rdm/modals/delete-collection-form.htm:44 -#: app/templates/views/rdm/modals/delete-scheme-form.htm:44 -msgid "Delete" -msgstr "" - -#: app/templates/help/permissions-tab-help.htm:19 -msgid "" -"Allows users to delete instances of this nodegroup. Note, this is not the " -"same as being allowed to delete an entire resource, permissions for which " -"are not handled here." -msgstr "" - -#: app/templates/help/permissions-tab-help.htm:22 -msgid "No Access" -msgstr "" - -#: app/templates/help/permissions-tab-help.htm:23 -msgid "" -"Disallows users from seeing or editing instances of this nodegroup. Use this " -"permission level to hide sensitive data from non-authenticated users (the " -"public)." -msgstr "" - -#: app/templates/help/permissions-tab-help.htm:26 -msgid "Read" -msgstr "" - -#: app/templates/help/permissions-tab-help.htm:27 -msgid "" -"Allows users to see this nodegroup's card. If disallowed, the card/nodegroup " -"will be hidden from the map and resource reports." -msgstr "" - -#: app/templates/help/permissions-tab-help.htm:30 -msgid "Create/Update" -msgstr "" - -#: app/templates/help/permissions-tab-help.htm:31 -msgid "" -"Allows users to create or edit instances of this nodegroup. This provides " -"the ability to let users edit some information about a resource, while be " -"restricted from editing other information." -msgstr "" - -#: app/templates/help/permissions-tab-help.htm:34 -msgid "Non-Authenticated Users" -msgstr "" - -#: app/templates/help/permissions-tab-help.htm:35 -msgid "" -"You may notice that by default Arches comes with a \"Guest\" group, as well " -"as user named \"anonymous\" who is a member of that group. Any non-" -"authenticated user is treated as the \"anonymous\" user. This means " -"that all permissions applied to the Guest group will be given to anyone who " -"views the website without logging in." -msgstr "" - -#: app/templates/help/profile-manager-help.htm:7 -msgid "" -"The profile manager allows you to update your account information, such as " -"your password, at any time." -msgstr "" - -#: app/templates/help/rdm-help.htm:6 -msgid "" -"The Reference Data Management (RDM) enables the creation and maintenance of " -"controlled vocabularies that are used throughout your database. In Arches, " -"controlled vocabularies consist of Concepts, and these Concepts are managed " -"in Thesauri and Collections. In the RDM you can create new Thesauri, create " -"new Concepts, import Concepts from external an endpoint (like the Getty " -"AAT), and -- the ultimate goal -- create Collections, which will be used in " -"your database as data input dropdown lists." -msgstr "" - -#: app/templates/help/rdm-help.htm:8 app/templates/javascript.htm:574 -#: app/templates/views/rdm/concept-report.htm:356 -msgid "Concepts" -msgstr "" - -#: app/templates/help/rdm-help.htm:10 -msgid "" -"A Concept is a qualitative property that can be attached to a resource, " -"something like \"Stone\" (which may describe a building material) or \"House" -"\" (which may describe a past use for a structure). The advantage of storing " -"these properties as Concepts is that a Concept may have attributes of its " -"own. In the case of \"House\", we could add an alternate label, \"Dwelling\" " -"to that Concept. Then, if a user searches for \"dwelling\", any resource " -"with the \"House\" Concept attached to it will be found." -msgstr "" - -#: app/templates/help/rdm-help.htm:11 -msgid "" -"Concepts can also be nested, to allow more complex and meaningful " -"relationships between them. For example, \"House\" may appear next to " -"\"School\" within a parent Concept called \"Building Use\"." -msgstr "" - -#: app/templates/help/rdm-help.htm:15 app/templates/rdm.htm:57 -msgid "Thesauri" -msgstr "" - -#: app/templates/help/rdm-help.htm:17 -msgid "" -"A Thesaurus is an entire set of Concepts which can be imported and exported " -"as a whole. You can create as many new Thesauri as you need, or just add new " -"Concepts to the default \"Arches\" Thesaurus. The organization of your " -"Thesauri has no impact on the way Concepts will be exposed to the public or " -"used throughout the app." -msgstr "" - -#: app/templates/help/rdm-help.htm:21 app/templates/rdm.htm:60 -#: app/templates/views/rdm/concept-report.htm:344 -msgid "Collections" -msgstr "" - -#: app/templates/help/rdm-help.htm:23 -msgid "" -"Collections, or Concept Collections as they are sometimes called, are custom " -"aggregations of Concepts that will be used in your app as dropdown lists " -"during the data entry process. Collections allow you to reorganize your " -"Concepts for the specific purpose of data entry, so your dropdown lists do " -"not have to look anything like your Thesaurus. You can create as many " -"Collections as you want, or add new Concepts to existing Collections." -msgstr "" - -#: app/templates/help/rdm-help.htm:27 -msgid "Example - Create a New Thesaurus" -msgstr "" - -#: app/templates/help/rdm-help.htm:29 -msgid "" -"In the video below, a new Thesaurus is created. Once you have made a " -"Thesaurus, you can begin creating a hierarchy of Concepts within it. " -"Remember, the final step will be to make a new Collection and add Concepts " -"to it (from any of your Thesauri)." -msgstr "" - -#: app/templates/help/rdm-help.htm:31 app/templates/help/rdm-help.htm:45 -#: app/templates/help/rdm-help.htm:59 app/templates/help/rdm-help.htm:73 -#: app/templates/help/rdm-help.htm:87 -msgid "click to view demonstration" -msgstr "" - -#: app/templates/help/rdm-help.htm:41 -msgid "Example - Create a Top Concept" -msgstr "" - -#: app/templates/help/rdm-help.htm:43 -msgid "" -"The first level of organization within a Thesaurus is a set of Top Concepts. " -"A Top Concept may be something like \"Architectural Styles\" and its " -"children Concepts will be the actual styles themselves. Below, a new, empty " -"Top Concept is added to an empty Thesaurus." -msgstr "" - -#: app/templates/help/rdm-help.htm:55 -msgid "Example - Create New Concepts" -msgstr "" - -#: app/templates/help/rdm-help.htm:57 -msgid "" -"To create a new Concept, begin by selecting the Top Concept under which it " -"should be placed. This will bring the details about the Top Concept into the " -"main panel. Use the Manage dropdown to \"Add Child\", type in a label, and " -"select the correct language for the label." -msgstr "" - -#: app/templates/help/rdm-help.htm:69 -msgid "Example - Add an Alternate Label to a Concept" -msgstr "" - -#: app/templates/help/rdm-help.htm:71 -msgid "" -"To improve the searchability of your Concepts, you can add as many alternate " -"labels to each one as you want Below, the label \"Dwelling\" is added to the " -"Concept \"House\". The result is that anyone using \"Dwelling\" as a search " -"term will be shown Resources that have the \"House\" Concept." -msgstr "" - -#: app/templates/help/rdm-help.htm:83 -msgid "Example - Create a Collection" -msgstr "" - -#: app/templates/help/rdm-help.htm:85 -msgid "" -"Creating a Collection is very similar to creating a Thesaurus. However, you " -"will be adding existing Concepts to a Collection (potentially from more than " -"one Thesaurus) instead of creating new ones. Below, a new Collection is " -"created. To go further, select the Collection, and use the \"Add dropdown " -"entry\" link to add existing Concepts to this Collection. When configuring " -"the Graph for a Branch or Resource Model, you will now be able to add this " -"Concept Collection to a node." -msgstr "" - -#: app/templates/help/resource-editor-help.htm:7 -msgid "Creating Resource Data" -msgstr "" - -#: app/templates/help/resource-editor-help.htm:11 -msgid "" -"The Resource Editor is used to create new or edit existing Resources. What " -"you see on the left-hand side of the page is this Resource's \"card tree\", " -"which shows all of the data entry cards that you can edit. Think of " -"\"creating data\" as \"adding cards\"." -msgstr "" - -#: app/templates/help/resource-editor-help.htm:12 -msgid "" -"To begin, select a card, enter data, and click Add. Some " -"cards may allow multiple instances, in which case you will be able to add as " -"many of the same type as you want." -msgstr "" - -#: app/templates/help/resource-editor-help.htm:13 -msgid "" -"Note that in the demonstration below, the \"Define Resource Descriptors\" " -"function has already been configured to set the Name card value as the " -"resource display name." -msgstr "" - -#: app/templates/help/resource-editor-help.htm:16 -msgid "basic card data enty - click to view" -msgstr "" - -#: app/templates/help/resource-editor-help.htm:24 -msgid "" -"Once you have saved data for a resource, you can see a full summary by " -"selecting the top card. This is the resource report." -msgstr "" - -#: app/templates/help/resource-editor-help.htm:25 -msgid "" -"In some cases, cards will be nested within other cards, as in the example of " -"adding a geo-location below." -msgstr "" - -#: app/templates/help/resource-editor-help.htm:29 -msgid "nested card data enty - click to view" -msgstr "" - -#: app/templates/help/resource-editor-help.htm:42 -msgid "Creating Resources Relations" -msgstr "" - -#: app/templates/help/resource-editor-help.htm:47 -msgid "" -"In the Resource Editor you can also access the Related Resources " -"Editor . To create a relationship between this resource and another " -"in your database, open the editor, find the resource, and click Add." -msgstr "" - -#: app/templates/help/resource-editor-help.htm:48 -msgid "" -"Your Resource Model will need to be configured to allow relations with the " -"target Resource Model. If relations are not allowed, resources in the " -"dropdown menu will not be selectable." -msgstr "" - -#: app/templates/help/resource-editor-help.htm:51 -msgid "create resource relation - click to view" -msgstr "" - -#: app/templates/help/resource-editor-landing-help.htm:7 -msgid "" -"Choose a Resource Model to begin creating a new Resource in your database." -msgstr "" - -#: app/templates/help/search-help.htm:6 -msgid "Introduction to Search" -msgstr "" - -#: app/templates/help/search-help.htm:11 -msgid "" -"Search Bar The quickest way to search the database is to " -"begin typing in the search bar. You'll be presented with database " -"terminology which you can use to create one or more simple filters. The " -"search bar also acts as an aggregator of all currently enabled " -"filters." -msgstr "" - -#: app/templates/help/search-help.htm:12 -msgid "" -"Search Tools There are a number tools you can use to " -"explore the database, which are described in detail below." -msgstr "" - -#: app/templates/help/search-help.htm:13 -msgid "" -"Search Results Whenever you change any search filters, the " -"updated search results will be listed here. You can link to a resource's " -"report, zoom to it on the map, or view its related resources." -msgstr "" - -#: app/templates/help/search-help.htm:14 -msgid "" -"Search Panel The contents of this panel will change " -"depending on what search tool you are using. Typically, the map will be " -"activated by default." -msgstr "" - -#: app/templates/help/search-help.htm:19 app/templates/index.htm:148 -msgid "Search Tools" -msgstr "" - -#: app/templates/help/search-help.htm:22 app/templates/javascript.htm:399 -msgid "Map" -msgstr "" - -#: app/templates/help/search-help.htm:24 -msgid "" -"Search results can be represented on the map in two ways: markers show the first set of resources in the search results, and " -"cells are used to give a general spatial representation of " -"all resources in the search results." -msgstr "" - -#: app/templates/help/search-help.htm:25 -msgid "" -"In addition to displaying search results, the map can show resource layers " -"(showing all resources), or custom overlays, if any have been added. You " -"control the visibility of all layers and basemaps with the tool panel on the " -"right." -msgstr "" - -#: app/templates/help/search-help.htm:26 -msgid "" -"Finally, you can add a spatial filter to your query by using the map drawing " -"tools to draw a shape and apply a buffer distance if desired." -msgstr "" - -#: app/templates/help/search-help.htm:28 -msgid "change basemap - click to view" -msgstr "" - -#: app/templates/help/search-help.htm:37 -msgid "toggle search results layer - click to view" -msgstr "" - -#: app/templates/help/search-help.htm:47 -msgid "search with spatial query - click to view" -msgstr "" - -#: app/templates/help/search-help.htm:58 -msgid "Time" -msgstr "" - -#: app/templates/help/search-help.htm:60 -msgid "" -"You can apply a temporal criterion to your query by using the Time Filter. " -"You have the option of creating the filter by hand, or you can use the time " -"wheel. The time wheel is a graphic representation of all the resources in " -"the database, organized chronologically." -msgstr "" - -#: app/templates/help/search-help.htm:63 -msgid "apply time filter with time wheel - click to view" -msgstr "" - -#: app/templates/help/search-help.htm:74 -#: app/templates/views/graph/card-configuration/card-form-preview.htm:93 -#: app/templates/views/graph/card-configuration/card-form-preview.htm:135 -msgid "Saved" -msgstr "" - -#: app/templates/help/search-help.htm:76 -msgid "" -"Saved searches allow you to view pre-made queries. Saved searches are " -"created by database administrators, so the number of saved searches shown " -"here will vary from one database to the next." -msgstr "" - -#: app/templates/help/search-help.htm:80 app/templates/javascript.htm:594 -msgid "Advanced" -msgstr "" - -#: app/templates/help/search-help.htm:82 -msgid "" -"You can use the advanced search to make more complex queries based on data " -"attributes, or \"facets\". While the basic search filter allows you to " -"combine multiple filters, advanced search is the only way to combine filters " -"with an or operator, and also gives you access to more " -"comparison operators." -msgstr "" - -#: app/templates/help/search-help.htm:83 -msgid "" -"In the example below, a search is made within a single resource type for any " -"name like \"church\" or any name " -"like \"gate\"." -msgstr "" - -#: app/templates/help/search-help.htm:86 -msgid "search for multiple words in names - click to view" -msgstr "" - -#: app/templates/help/search-help.htm:97 -msgid "Related" -msgstr "" - -#: app/templates/help/search-help.htm:99 -msgid "" -"For each resource listed in the search results you can view its related " -"resources with the \"Related Resources\" link under the description. By " -"viewing Related Resources, you get a new view of the database: not how " -"resources are related geographically nor chronologically, but qualitatively." -msgstr "" - -#: app/templates/help/search-help.htm:100 -msgid "" -"There two methods for viewing Related Resources: in a table where each " -"related resource is a row, or in a graph where resources are shown as nodes " -"in a graph, with relationships connecting them." -msgstr "" - -#: app/templates/help/system-settings-help.htm:6 -msgid "" -"\n" -"

A number of global settings can be defined or altered here.

\n" -" " -msgstr "" - -#: app/templates/help/system-settings-help.htm:13 -msgid "Default Application Settings" -msgstr "" - -#: app/templates/help/system-settings-help.htm:15 -msgid "" -"\n" -" Application Name - Name of your Arches app, " -"to be displayed in the browser title bar and elsewhere.
\n" -" Default Data Import/Export User - Name to " -"associate with data that is imported into the system.
\n" -" " -msgstr "" - -#: app/templates/help/system-settings-help.htm:20 -msgid "Web Analytics" -msgstr "" - -#: app/templates/help/system-settings-help.htm:22 -msgid "" -"\n" -" Google Analytics Key - If you have made a " -"Google Analytics Key to track your app's traffic, enter it here.
\n" -" " -msgstr "" - -#: app/templates/help/system-settings-help.htm:26 -msgid "Thesaurus Service Providers" -msgstr "" - -#: app/templates/help/system-settings-help.htm:28 -msgid "" -"\n" -" Thesaurus SPARQL Endpoint - Advanced users " -"may create more SPARQL endpoints and register them here. These endpoints " -"will be available in the RDM and allow you to import thesaurus entries from " -"external sources.
\n" -" " -msgstr "" - -#: app/templates/help/system-settings-help.htm:35 -msgid "Map Settings" -msgstr "" - -#: app/templates/help/system-settings-help.htm:37 -msgid "Mapbox API" -msgstr "" - -#: app/templates/help/system-settings-help.htm:38 -msgid "" -"Arches uses the Mapbox mapping library for map display and data creation. " -"Arches also supports Mapbox basemaps and other services." -msgstr "" - -#: app/templates/help/system-settings-help.htm:40 -msgid "" -"Mapbox API Key (Optional) - By default, Arches uses some " -"basemap web services from Mapbox. You will need to create a free " -"API key (or \"access token\") for these services to be activated. " -"Alternatively, you could remove all of the default basemaps and add your " -"own, non-Mapbox layers." -msgstr "" - -#: app/templates/help/system-settings-help.htm:41 -msgid "Mapbox Sprites - Path to Mapbox sprites (use default)." -msgstr "" - -#: app/templates/help/system-settings-help.htm:42 -msgid "Mapbox Glyphs - Path to Mapbox glyphs (use default)." -msgstr "" - -#: app/templates/help/system-settings-help.htm:44 -msgid "Project Extent" -msgstr "" - -#: app/templates/help/system-settings-help.htm:45 -msgid "" -"Draw a polygon representing your project's extent. These bounds will serve " -"as the default for the search result grid bounds, and map bounds in search, " -"cards, and reports." -msgstr "" - -#: app/templates/help/system-settings-help.htm:46 -msgid "Map Zoom" -msgstr "" - -#: app/templates/help/system-settings-help.htm:47 -msgid "" -"You can define the zoom behavior of your map. Zoom level 0 shows the whole " -"world (and is the absolute minimum zoom level) and zoom level 20 is the " -"maximum level that most map services support." -msgstr "" - -#: app/templates/help/system-settings-help.htm:49 -msgid "" -"Default Zoom - Set the zoom level that the map will be " -"shown at by default." -msgstr "" - -#: app/templates/help/system-settings-help.htm:50 -msgid "" -"Min Zoom - Minimum zoom level defines how far the user can " -"zoom out when viewing the map." -msgstr "" - -#: app/templates/help/system-settings-help.htm:51 -msgid "" -"Max Zoom - Maximum zoom level defines how far the user can " -"zoom in when viewing the map." -msgstr "" - -#: app/templates/help/system-settings-help.htm:53 -msgid "Search Results Grid" -msgstr "" - -#: app/templates/help/system-settings-help.htm:54 -msgid "" -"Arches aggregates search results and displays them as hexagons. You will " -"need to set default parameters for the hexagon size and precision." -msgstr "" - -#: app/templates/help/system-settings-help.htm:56 -msgid "" -"Hexagon Size (in km) - Set the actual size of the hex bins " -"that will be shown on the map." -msgstr "" - -#: app/templates/help/system-settings-help.htm:57 -msgid "" -"Hexagon Grid Precision - Set the precision with which the " -"contents of the hex bins will be calculated." -msgstr "" - -#: app/templates/help/system-settings-help.htm:59 -msgid "" -"Warning: A large project area combined with a small hexagon " -"size and/or high precision will take a very long time to load, and can crash " -"your browser. We suggest changing these settings in small increments to find " -"the best combination for your project." -msgstr "" - -#: app/templates/help/system-settings-help.htm:63 -msgid "Basic Search Settings" -msgstr "" - -#: app/templates/help/system-settings-help.htm:65 -msgid "Set the default search results behavior." -msgstr "" - -#: app/templates/help/system-settings-help.htm:66 -msgid "" -"\n" -"

\n" -" Number of search results per page - Set the " -"number of search results shown per page. Note this also defines the number " -"of search result markers that are shown on the map.
\n" -" Number of search hints per dropdown - Set " -"the number of search hints that will appear under the search bar as you type " -"in search terms.
\n" -" Max number of search results to export - " -"Set the maximum number of resources to be exported from the search results. " -"This value should generally be evenly divible by the SEARCH_RESULT_LIMIT " -"setting in Arches (10,000 by default).\n" -"

\n" -" " -msgstr "" - -#: app/templates/help/system-settings-help.htm:76 -msgid "Temporal Search Settings" -msgstr "" - -#: app/templates/help/system-settings-help.htm:78 -msgid "" -"Arches creates a Time Wheel based on the resources in your database, to " -"allow for quick temporal visualization and queries. A few aspects of this " -"temporal search are defined here." -msgstr "" - -#: app/templates/help/system-settings-help.htm:80 -msgid "" -"Color Ramp - not currently implemented The color " -"ramp for the time wheel. For further reference, check out the d3 API reference." -msgstr "" - -#: app/templates/help/system-settings-help.htm:81 -msgid "" -"Time wheel configuration - not currently implemented" -msgstr "" - -#: app/templates/help/system-settings-help.htm:86 -msgid "Saved Searches" -msgstr "" - -#: app/templates/help/system-settings-help.htm:88 -msgid "" -"Arches allows you save a search and present it as convenience for your " -"users. Saved Searches appear as search options in the main Search page. " -"Creating a Saved Search is a three-step process." -msgstr "" - -#: app/templates/help/system-settings-help.htm:90 -msgid "" -"\n" -" 1. Specify Search Criteria - Go to the " -"Search page and enter all the criteria you would like to use to configure " -"your Saved Search. You may notice that with the addition of each new search " -"filter (either by using the term filter, map filtering tools, or temporal " -"filters) the URL for the page will change.
\n" -" 2. Copy the URL - In your browser address " -"bar, copy the entire URL. This will be a long string that defines " -"each of the search filters created in step 1.
\n" -" 3. Create the Saved Search - Finally, head " -"back to this page and fill out the settings that you see at left. You can " -"also upload an image that will be shown along with your Search Search.\n" -" " -msgstr "" - -#: app/templates/index.htm:72 -#, python-format -msgid "Arches | %(version)s" -msgstr "" - -#: app/templates/index.htm:80 -msgid "Arches Features" -msgstr "" - -#: app/templates/index.htm:83 -msgid "Search Arches" -msgstr "" - -#: app/templates/index.htm:92 -msgid "Sign in" -msgstr "" - -#: app/templates/index.htm:97 -msgid "Welcome, " -msgstr "" - -#: app/templates/index.htm:101 -msgid "Log off" -msgstr "" - -#: app/templates/index.htm:133 -msgid "Home" -msgstr "" - -#: app/templates/index.htm:138 app/templates/index.htm:215 -msgid "Fast" -msgstr "" - -#: app/templates/index.htm:143 app/templates/index.htm:269 -msgid "Workflows" -msgstr "" - -#: app/templates/index.htm:183 -#, python-format -msgid "Arches %(version)s" -msgstr "" - -#: app/templates/index.htm:184 -msgid "A web and mobile platform for" -msgstr "" - -#: app/templates/index.htm:185 -msgid "managing your most important resource information" -msgstr "" - -#: app/templates/index.htm:193 -msgid "" -"Glarus thrust, Tectonic Area Sardona, Switzerland | Jonas Wagner https://www." -"flickr.com/photos/80225884@N06/ | Attribution 2.0 Generic (CC BY 2.0)" -msgstr "" - -#: app/templates/index.htm:216 -msgid "Deploy Applications Rapidly" -msgstr "" - -#: app/templates/index.htm:218 -msgid "" -"Design custom information management applications in hours. Build your " -"databases with Arches Designer, then configure your interface all without " -"having to write any code." -msgstr "" - -#: app/templates/index.htm:235 -msgid "Interface Manager" -msgstr "" - -#: app/templates/index.htm:237 -msgid "" -"Arches automatically creates data entry forms based on your data models. " -"Use Arches' Card Manager to configure the look and feel of your data entry " -"UI." -msgstr "" - -#: app/templates/index.htm:246 -msgid "Data Security" -msgstr "" - -#: app/templates/index.htm:248 -msgid "" -"Use Arches' Permissions Manager to set up data access rules for all your " -"user groups and individual accounts. You can define read/write/delete and " -"no-access permissions." -msgstr "" - -#: app/templates/index.htm:270 -msgid "Orchestrate your data entry" -msgstr "" - -#: app/templates/index.htm:272 -msgid "" -"Design step-wise data management interfaces that simplify complex editing " -"tasks. Ensure that everyone enters data completely and consistently" -msgstr "" - -#: app/templates/index.htm:295 -msgid "Arches Search Tools" -msgstr "" - -#: app/templates/index.htm:296 -msgid "Find what you're looking for" -msgstr "" - -#: app/templates/index.htm:298 -msgid "" -"Arches comes with powerful built-in search tools. Quickly filter large " -"databases with term, geospatial, and time-based search components" -msgstr "" - -#: app/templates/index.htm:311 -msgid "Search Options" -msgstr "" - -#: app/templates/index.htm:313 -msgid "" -"Arches gives you many ways to find precisely the information you need, even " -"if your Arches application contains 10's of millions of records. In " -"addition to term, thesaurus, geospatial, and temporal filters, Arches " -"provides you with advanced filtering options that support boolean logic, " -"inverses, and many other filtering options." -msgstr "" - -#: app/templates/index.htm:317 -msgid "" -"Arches' search capabilities also provide for sophisticated data " -"visualizations, including interactive displays of the connections between " -"your data objects using a Force Directed Graph." -msgstr "" - -#: app/templates/index.htm:321 -msgid "" -"If you're a software developer, you can build on Arches modular search " -"services and create your own filters, reports, and visualizations to best " -"show off your particular dataset." -msgstr "" - -#: app/templates/index.htm:343 -msgid "Sample Institution Name" -msgstr "" - -#: app/templates/index.htm:346 -msgid "Sample Address" -msgstr "" - -#: app/templates/index.htm:347 -msgid "Getty Conservation Institute" -msgstr "" - -#: app/templates/index.htm:348 -msgid "1200 Getty Center Drive" -msgstr "" - -#: app/templates/index.htm:349 -msgid "Los Angeles, CA 90049" -msgstr "" - -#: app/templates/index.htm:355 -msgid "Guides and Documentation" -msgstr "" - -#: app/templates/index.htm:363 -msgid "What is Arches" -msgstr "" - -#: app/templates/index.htm:366 -msgid "Implementation Considerations" -msgstr "" - -#: app/templates/index.htm:369 -msgid "Information For Developers" -msgstr "" - -#: app/templates/index.htm:379 -msgid "FAQ" -msgstr "" - -#: app/templates/index.htm:382 -msgid "Standards and Interoperability" -msgstr "" - -#: app/templates/index.htm:385 -msgid "Installation Guide" -msgstr "" - -#: app/templates/index.htm:393 -msgid "Arches Project Background" -msgstr "" - -#: app/templates/index.htm:396 -msgid "Arches Webinars/Presentations" -msgstr "" - -#: app/templates/index.htm:415 -msgid "Terms & Conditions" -msgstr "" - -#: app/templates/index.htm:416 -msgid "Privacy Policy" -msgstr "" - -#: app/templates/index.htm:419 -msgid "Powered by Arches" -msgstr "" - -#: app/templates/javascript.htm:114 -msgid "Delete All Resources Associated with this Graph?" -msgstr "" - -#: app/templates/javascript.htm:115 -msgid "" -"Deleting All Resources removes all associated data with this graph " -"entirely. Are you sure you would like to proceed?" -msgstr "" - -#: app/templates/javascript.htm:118 -msgid "Delete Branch/Resource Model?" -msgstr "" - -#: app/templates/javascript.htm:119 -msgid "" -"Deleting this branch/resource model will remove it (and all associated data) " -"entirely. Are you sure you would like to proceed?" -msgstr "" - -#: app/templates/javascript.htm:159 -msgid "Please contact your system administrator for more details." -msgstr "" - -#: app/templates/javascript.htm:160 -msgid "Hide Null Values" -msgstr "" - -#: app/templates/javascript.htm:161 app/templates/javascript.htm:509 -msgid "Load More" -msgstr "" - -#: app/templates/javascript.htm:162 -msgid "Load All" -msgstr "" - -#: app/templates/javascript.htm:163 -msgid "Display Name" -msgstr "" - -#: app/templates/javascript.htm:164 -msgid "Display Description" -msgstr "" - -#: app/templates/javascript.htm:165 -msgid "Map Popup" -msgstr "" - -#: app/templates/javascript.htm:166 -msgid "Map Popup Template" -msgstr "" - -#: app/templates/javascript.htm:167 -msgid "ID:" -msgstr "" - -#: app/templates/javascript.htm:168 -msgid "Add Buffer" -msgstr "" - -#: app/templates/javascript.htm:169 -msgid "Buffer Intersecting Feature" -msgstr "" - -#: app/templates/javascript.htm:170 -msgid "Add buffer to features" -msgstr "" - -#: app/templates/javascript.htm:171 -msgid "Add Buffer Feature" -msgstr "" - -#: app/templates/javascript.htm:172 -msgid "Select a feature to perform intersection" -msgstr "" - -#: app/templates/javascript.htm:173 -msgid "Intersect" -msgstr "" - -#: app/templates/javascript.htm:174 -msgid "Re-index" -msgstr "" - -#: app/templates/javascript.htm:175 -msgid "Re-indexing" -msgstr "" - -#: app/templates/javascript.htm:176 -msgid "Re-index Resources Now" -msgstr "" - -#: app/templates/javascript.htm:177 -msgid "" -"If you've made any changes to this function and there are resources already " -"in the system, then you will need to reindex the resources to reflect your " -"changes. This process can take some time (potentially several minuetes or " -"more). Please be patient." -msgstr "" - -#: app/templates/javascript.htm:178 -msgid "Use bracketed node names like this: " -msgstr "" - -#: app/templates/javascript.htm:179 -msgid "Primary Name Template" -msgstr "" - -#: app/templates/javascript.htm:180 -msgid "Primary Description Template" -msgstr "" - -#: app/templates/javascript.htm:181 -msgid "" -"Select a card from which to choose nodes to power your primary name " -"identifier." -msgstr "" - -#: app/templates/javascript.htm:182 -msgid "" -"Select a card from which to choose nodes to power your primary description " -"identifier." -msgstr "" - -#: app/templates/javascript.htm:183 -msgid "Add as new" -msgstr "" - -#: app/templates/javascript.htm:184 -msgid "Add Feature" -msgstr "" - -#: app/templates/javascript.htm:185 -msgid "Distance:" -msgstr "" - -#: app/templates/javascript.htm:186 -msgid "Units:" -msgstr "" - -#: app/templates/javascript.htm:187 -msgid "meters:" -msgstr "" - -#: app/templates/javascript.htm:188 -msgid "feet:" -msgstr "" - -#: app/templates/javascript.htm:189 -msgid "Download" -msgstr "" - -#: app/templates/javascript.htm:190 -msgid "Download File" -msgstr "" - -#: app/templates/javascript.htm:191 -msgid "Triggering Nodegroups" -msgstr "" - -#: app/templates/javascript.htm:192 app/templates/javascript.htm:540 -msgid "Select a Nodegroup" -msgstr "" - -#: app/templates/javascript.htm:193 -msgid "No Relationships Added" -msgstr "" - -#: app/templates/javascript.htm:194 -msgid "Relate Resource" -msgstr "" - -#: app/templates/javascript.htm:195 -msgid "Cannot Be Related" -msgstr "" - -#: app/templates/javascript.htm:196 app/templates/views/resource/editor.htm:92 -msgid "Related Resources" -msgstr "" - -#: app/templates/javascript.htm:197 -msgid "" -"Arches keeps track of how resources are related. Click the 'related " -"resources' link on a search result from the list on the left to see its " -"relatives displayed in an interactive graph" -msgstr "" - -#: app/templates/javascript.htm:198 -msgid "Report Date:" -msgstr "" - -#: app/templates/javascript.htm:200 -msgid "X Coordinate Placeholder" -msgstr "" - -#: app/templates/javascript.htm:201 -msgid "Y Coordinate Placeholder" -msgstr "" - -#: app/templates/javascript.htm:202 -msgid "Display as Greyscale" -msgstr "" - -#: app/templates/javascript.htm:203 -msgid "Annotation Overlays" -msgstr "" - -#: app/templates/javascript.htm:204 -msgid "Reset to defaults" -msgstr "" - -#: app/templates/javascript.htm:205 -msgid "Data Themes" -msgstr "" - -#: app/templates/javascript.htm:208 -msgid "Allow Normal Access" -msgstr "" - -#: app/templates/javascript.htm:209 -msgid "Person/Group" -msgstr "" - -#: app/templates/javascript.htm:210 -msgid "Set Permissions for this instance" -msgstr "" - -#: app/templates/javascript.htm:211 -msgid "" -"By default only you have access to this record. You can set permissions for " -"specific people or groups by selecting to whom you will grant access" -msgstr "" - -#: app/templates/javascript.htm:212 -msgid "" -"Define access privileges for this instance. You may limit access to " -"yourself, or select which user accounts and groups have permission to this " -"resource." -msgstr "" - -#: app/templates/javascript.htm:213 -msgid "Configure Access to this Instance" -msgstr "" - -#: app/templates/javascript.htm:214 -msgid "Resource Instance Permissions" -msgstr "" - -#: app/templates/javascript.htm:215 -msgid "Unsorted" -msgstr "" - -#: app/templates/javascript.htm:216 -msgid "Ascending" -msgstr "" - -#: app/templates/javascript.htm:217 -msgid "Descending" -msgstr "" - -#: app/templates/javascript.htm:218 -msgid "Fuzzy Year Padding" -msgstr "" - -#: app/templates/javascript.htm:219 -msgid "Fuzzy Month Padding" -msgstr "" - -#: app/templates/javascript.htm:220 -msgid "Fuzzy Day Padding" -msgstr "" - -#: app/templates/javascript.htm:221 -msgid "Fuzzy Season Padding (weeks)" -msgstr "" - -#: app/templates/javascript.htm:222 -msgid "Multiplier if Date is Uncertain (?)" -msgstr "" - -#: app/templates/javascript.htm:223 -msgid "Multiplier if Date is Approximate (~)" -msgstr "" - -#: app/templates/javascript.htm:224 -msgid "Multiplier if Both (? and ~)" -msgstr "" - -#: app/templates/javascript.htm:225 -msgid "Maximum Number of Files" -msgstr "" - -#: app/templates/javascript.htm:226 -msgid "Related Node" -msgstr "" - -#: app/templates/javascript.htm:227 -msgid "Relationship to Node" -msgstr "" - -#: app/templates/javascript.htm:229 -msgid "Continue" -msgstr "" - -#: app/templates/javascript.htm:230 -#: app/templates/views/components/datatypes/number.htm:27 -msgid "Value" -msgstr "" - -#: app/templates/javascript.htm:231 -msgid "Disabled" -msgstr "" - -#: app/templates/javascript.htm:232 app/templates/javascript.htm:269 -msgid "Disable Editing" -msgstr "" - -#: app/templates/javascript.htm:233 app/templates/javascript.htm:270 -msgid "Prevent users from editing value" -msgstr "" - -#: app/templates/javascript.htm:234 -msgid "Domain options" -msgstr "" - -#: app/templates/javascript.htm:235 -msgid "Add new option" -msgstr "" - -#: app/templates/javascript.htm:237 -msgid "Add GNU" -msgstr "" - -#: app/templates/javascript.htm:238 app/templates/javascript.htm:543 -msgid "Showing edits by" -msgstr "" - -#: app/templates/javascript.htm:239 app/templates/javascript.htm:541 -msgid "Return to approved edits" -msgstr "" - -#: app/templates/javascript.htm:240 app/templates/javascript.htm:545 -msgid "This is a new contribution by a provisional editor." -msgstr "" - -#: app/templates/javascript.htm:241 app/templates/javascript.htm:544 -msgid "Currently showing the most recent approved edits" -msgstr "" - -#: app/templates/javascript.htm:242 -#: app/templates/views/resource/editor/provisional-tile-manager.htm:8 -msgid "Provisional Edits" -msgstr "" - -#: app/templates/javascript.htm:243 -msgid "QA Type" -msgstr "" - -#: app/templates/javascript.htm:244 -msgid "All Resources" -msgstr "" - -#: app/templates/javascript.htm:245 -msgid "All Edits" -msgstr "" - -#: app/templates/javascript.htm:246 -msgid "Delete all edits" -msgstr "" - -#: app/templates/javascript.htm:247 -msgid "Delete this record" -msgstr "" - -#: app/templates/javascript.htm:248 -msgid "Cancel edit" -msgstr "" - -#: app/templates/javascript.htm:249 -msgid "Save edit" -msgstr "" - -#: app/templates/javascript.htm:250 -msgid "Sorry, you do not have access to this information" -msgstr "" - -#: app/templates/javascript.htm:251 -msgid "No data added yet for" -msgstr "" - -#: app/templates/javascript.htm:252 -msgid "These data are provisional and pending review" -msgstr "" - -#: app/templates/javascript.htm:253 -msgid "Label 'True'" -msgstr "" - -#: app/templates/javascript.htm:254 -msgid "Label 'False'" -msgstr "" - -#: app/templates/javascript.htm:255 -msgid "Select an Option" -msgstr "" - -#: app/templates/javascript.htm:256 -msgid "Concept Collection" -msgstr "" - -#: app/templates/javascript.htm:257 -msgid "Select a concept collection" -msgstr "" - -#: app/templates/javascript.htm:258 -msgid "Select a Node" -msgstr "" - -#: app/templates/javascript.htm:259 -msgid "Select a Property" -msgstr "" - -#: app/templates/javascript.htm:260 -msgid "No Date Entered" -msgstr "" - -#: app/templates/javascript.htm:261 -msgid "Use date of data entry" -msgstr "" - -#: app/templates/javascript.htm:262 -msgid "Check this to use the date of data entry as the default value." -msgstr "" - -#: app/templates/javascript.htm:263 -msgid "Date" -msgstr "" - -#: app/templates/javascript.htm:264 -msgid "rich text" -msgstr "" - -#: app/templates/javascript.htm:265 -msgid "Direction" -msgstr "" - -#: app/templates/javascript.htm:266 -msgid "Left-to-Right" -msgstr "" - -#: app/templates/javascript.htm:267 -msgid "Right-to-Left" -msgstr "" - -#: app/templates/javascript.htm:268 -msgid "Max Length" -msgstr "" - -#: app/templates/javascript.htm:271 -#: app/templates/views/rdm/modals/add-child-form.htm:25 -#: app/templates/views/rdm/modals/add-collection-form.htm:19 -#: app/templates/views/rdm/modals/add-scheme-form.htm:25 -#: app/templates/views/rdm/modals/value-form.htm:45 -#: app/templates/views/rdm/modals/value-form.htm:46 -#: app/templates/views/rdm/modals/value-form.htm:124 -#: app/templates/views/rdm/modals/value-form.htm:202 -#: app/templates/views/rdm/modals/value-form.htm:203 -msgid "Language" -msgstr "" - -#: app/templates/javascript.htm:272 -msgid "Languages" -msgstr "" - -#: app/templates/javascript.htm:273 -#: app/templates/views/rdm/modals/value-form.htm:34 -#: app/templates/views/rdm/modals/value-form.htm:113 -#: app/templates/views/rdm/modals/value-form.htm:191 -msgid "Type" -msgstr "" - -#: app/templates/javascript.htm:274 -msgid "not a valid EDTF format" -msgstr "" - -#: app/templates/javascript.htm:275 -msgid "Year-month approximate" -msgstr "" - -#: app/templates/javascript.htm:276 -msgid "Entire date (year-month-day) uncertain and approximate" -msgstr "" - -#: app/templates/javascript.htm:277 -msgid "Year uncertain (possibly the year 1984, but not definitely)" -msgstr "" - -#: app/templates/javascript.htm:278 -msgid "" -"Spring, 2001. The values 21, 22, 23, 24 may be used used to signify ' " -"Spring', 'Summer', 'Autumn', 'Winter', respectively, in place of a month " -"value (01 through 12) for a year-and-month format string" -msgstr "" - -#: app/templates/javascript.htm:279 -msgid "" -"The year -100000. 'Y' may be used at the beginning of the date string to " -"signify that the date is a year, when (and only when) the year exceeds four " -"digits, i.e. for years later than 9999 or earlier than -9999." -msgstr "" - -#: app/templates/javascript.htm:280 -msgid "" -"A time interval with calendar year precision, beginning sometime in 1964 and " -"ending sometime in 2008" -msgstr "" - -#: app/templates/javascript.htm:281 -msgid "" -"A time interval with calendar month precision, beginning sometime in June " -"2004 and ending sometime in August of 2006" -msgstr "" - -#: app/templates/javascript.htm:282 -msgid "" -"A time interval beginning sometime on February 1, 2004 and ending sometime " -"in 2005. The start endpoint has calendar day precision and the end endpoint " -"has calendar year precision" -msgstr "" - -#: app/templates/javascript.htm:283 -msgid "[year][“-”][month][“-”][day]" -msgstr "" - -#: app/templates/javascript.htm:284 -msgid "Refers to the calendar date 2021 April 12th with day precision" -msgstr "" - -#: app/templates/javascript.htm:285 -msgid "[year][“-”][month]" -msgstr "" - -#: app/templates/javascript.htm:286 -msgid "Refers to the calendar month April 2021 with month precision" -msgstr "" - -#: app/templates/javascript.htm:287 -msgid " [year]" -msgstr "" - -#: app/templates/javascript.htm:288 -msgid "Refers to the year 2021 with year precision" -msgstr "" - -#: app/templates/javascript.htm:289 -msgid "Some common encodings:" -msgstr "" - -#: app/templates/javascript.htm:290 -msgid "EDTF Date Specfication (Library of Congress)" -msgstr "" - -#: app/templates/javascript.htm:291 -msgid "" -"The EDTF datatype allows you to describe dates (even uncertain dates). You " -"can find a summary of the standard here:" -msgstr "" - -#: app/templates/javascript.htm:292 -msgid "Extended Date/Time Formats (EDTF)" -msgstr "" - -#: app/templates/javascript.htm:293 -msgid "EDTF Formats" -msgstr "" - -#: app/templates/javascript.htm:294 -msgid "Loading Time Wheel" -msgstr "" - -#: app/templates/javascript.htm:295 -msgid "Time Wheel" -msgstr "" - -#: app/templates/javascript.htm:296 -msgid "" -"Click on a block to set a filter, double-click to zoom in, double-click " -"center to zoom out" -msgstr "" - -#: app/templates/javascript.htm:297 -msgid "Last 7 Days" -msgstr "" - -#: app/templates/javascript.htm:298 -msgid "Last 30 Days" -msgstr "" - -#: app/templates/javascript.htm:299 -#: app/templates/views/provisional-history-list.htm:19 -msgid "This week" -msgstr "" - -#: app/templates/javascript.htm:300 -#: app/templates/views/provisional-history-list.htm:20 -msgid "This month" -msgstr "" - -#: app/templates/javascript.htm:301 -#: app/templates/views/provisional-history-list.htm:21 -msgid "This quarter" -msgstr "" - -#: app/templates/javascript.htm:302 -#: app/templates/views/provisional-history-list.htm:22 -msgid "This year" -msgstr "" - -#: app/templates/javascript.htm:303 -#: app/templates/views/provisional-history-list.htm:16 -msgid "Today" -msgstr "" - -#: app/templates/javascript.htm:304 -#: app/templates/views/provisional-history-list.htm:15 -msgid "Custom date range" -msgstr "" - -#: app/templates/javascript.htm:305 -msgid "Search all dates" -msgstr "" - -#: app/templates/javascript.htm:306 -msgid "Date Type" -msgstr "" - -#: app/templates/javascript.htm:307 -msgid "Date Interval" -msgstr "" - -#: app/templates/javascript.htm:308 -msgid "Minimum Date" -msgstr "" - -#: app/templates/javascript.htm:309 -msgid "Maximum Date" -msgstr "" - -#: app/templates/javascript.htm:310 -msgid "Date Format" -msgstr "" - -#: app/templates/javascript.htm:311 -msgid "Has no value" -msgstr "" - -#: app/templates/javascript.htm:312 -msgid "Has any value" -msgstr "" - -#: app/templates/javascript.htm:314 -msgid "Format" -msgstr "" - -#: app/templates/javascript.htm:315 -msgid "view valid formats" -msgstr "" - -#: app/templates/javascript.htm:316 -msgid "Max" -msgstr "" - -#: app/templates/javascript.htm:317 -msgid "Min" -msgstr "" - -#: app/templates/javascript.htm:318 -msgid "Increment" -msgstr "" - -#: app/templates/javascript.htm:319 -msgid "Increment Size" -msgstr "" - -#: app/templates/javascript.htm:320 -msgid "Decimal Places" -msgstr "" - -#: app/templates/javascript.htm:321 -msgid "Number of decimal places" -msgstr "" - -#: app/templates/javascript.htm:322 -msgid "Prefix" -msgstr "" - -#: app/templates/javascript.htm:323 -msgid "Field Prefix" -msgstr "" - -#: app/templates/javascript.htm:324 -msgid "suffix" -msgstr "" - -#: app/templates/javascript.htm:325 -msgid "Field Suffix" -msgstr "" - -#: app/templates/javascript.htm:326 -msgid "From" -msgstr "" - -#: app/templates/javascript.htm:327 -msgid "To" -msgstr "" - -#: app/templates/javascript.htm:328 -msgid "Select" -msgstr "" - -#: app/templates/javascript.htm:329 -msgid "Within" -msgstr "" - -#: app/templates/javascript.htm:330 -msgid "overlaps" -msgstr "" - -#: app/templates/javascript.htm:331 -msgid "equals" -msgstr "" - -#: app/templates/javascript.htm:332 -msgid "is not" -msgstr "" - -#: app/templates/javascript.htm:333 -msgid "not" -msgstr "" - -#: app/templates/javascript.htm:334 -msgid "like" -msgstr "" - -#: app/templates/javascript.htm:335 -msgid "not like" -msgstr "" - -#: app/templates/javascript.htm:336 -msgid "and" -msgstr "" - -#: app/templates/javascript.htm:337 -msgid "or" -msgstr "" - -#: app/templates/javascript.htm:338 -msgid "of" -msgstr "" - -#: app/templates/javascript.htm:341 -#: app/templates/views/user-profile-manager.htm:111 -msgid "None" -msgstr "" - -#: app/templates/javascript.htm:342 app/templates/views/graph.htm:71 -#: app/templates/views/graph/card-configuration/card-form-preview.htm:83 -msgid "Add" -msgstr "" - -#: app/templates/javascript.htm:343 -msgid "Remove" -msgstr "" - -#: app/templates/javascript.htm:344 app/templates/views/graph.htm:41 -#: app/templates/views/graph/function-manager.htm:81 -#: app/templates/views/resource.htm:41 -msgid "Find" -msgstr "" - -#: app/templates/javascript.htm:345 -msgid "Filter" -msgstr "" - -#: app/templates/javascript.htm:346 app/templates/views/list.htm:20 -msgid "Clear" -msgstr "" - -#: app/templates/javascript.htm:347 -msgid "Clear Filter" -msgstr "" - -#: app/templates/javascript.htm:348 -msgid "Buffer" -msgstr "" - -#: app/templates/javascript.htm:349 -msgid "Distance" -msgstr "" - -#: app/templates/javascript.htm:350 -#: app/templates/views/resource/editor.htm:235 -msgid "New" -msgstr "" - -#: app/templates/javascript.htm:351 -#: app/templates/views/resource/editor.htm:262 -msgid "Add New" -msgstr "" - -#: app/templates/javascript.htm:352 -msgid "Return" -msgstr "" - -#: app/templates/javascript.htm:353 -msgid "csv" -msgstr "" - -#: app/templates/javascript.htm:354 -msgid "html" -msgstr "" - -#: app/templates/javascript.htm:355 -msgid "shapefile" -msgstr "" - -#: app/templates/javascript.htm:356 -msgid "geojson url" -msgstr "" - -#: app/templates/javascript.htm:357 -msgid "tile excel" -msgstr "" - -#: app/templates/javascript.htm:358 -msgid "Copy to clipboard" -msgstr "" - -#: app/templates/javascript.htm:359 -msgid "Info" -msgstr "" - -#: app/templates/javascript.htm:360 -msgid "Arches Export" -msgstr "" - -#: app/templates/javascript.htm:361 -msgid "Include the report link in the export?" -msgstr "" - -#: app/templates/javascript.htm:362 -msgid "1. Format" -msgstr "" - -#: app/templates/javascript.htm:363 -msgid "" -"Select the format you'd like for your export data. (tile excel and geojson " -"formats require a resource type filter)" -msgstr "" - -#: app/templates/javascript.htm:364 -msgid "2. Coordinate Precision" -msgstr "" - -#: app/templates/javascript.htm:365 -msgid "" -"Tell us how many decimal places of precision you'd like for geo-data results" -msgstr "" - -#: app/templates/javascript.htm:366 -msgid "3. Report Link" -msgstr "" - -#: app/templates/javascript.htm:367 -msgid "Only applicable to CSV and shapefile exports" -msgstr "" - -#: app/templates/javascript.htm:368 -msgid "4. Name this export" -msgstr "" - -#: app/templates/javascript.htm:369 -msgid "5. Email Address" -msgstr "" - -#: app/templates/javascript.htm:370 -msgid "" -"This download may take some time. Tell us where to email a download link to " -"your results" -msgstr "" - -#: app/templates/javascript.htm:371 -msgid "Export Search Results" -msgstr "" - -#: app/templates/javascript.htm:372 -msgid "Advanced Search" -msgstr "" - -#: app/templates/javascript.htm:373 -msgid "" -"With Advanced Search you can build more sophisticated search queries. Select " -"the search facets you wish to query from the list on the right. Then enter " -"your criteria to customize your search filters" -msgstr "" - -#: app/templates/javascript.htm:374 -msgid "Map Search" -msgstr "" - -#: app/templates/javascript.htm:375 -msgid "Accept GeoJSON" -msgstr "" - -#: app/templates/javascript.htm:376 -msgid "GeoJSON has the following errors that must be resolved:" -msgstr "" - -#: app/templates/javascript.htm:377 -msgid "Edit GeoJSON" -msgstr "" - -#: app/templates/javascript.htm:378 -msgid "Edit Coordinates" -msgstr "" - -#: app/templates/javascript.htm:379 -msgid "Show Feature" -msgstr "" - -#: app/templates/javascript.htm:380 -msgid "Coordinate Reference:" -msgstr "" - -#: app/templates/javascript.htm:381 -msgid "Zoom to all" -msgstr "" - -#: app/templates/javascript.htm:382 -msgid "Zoom to all features" -msgstr "" - -#: app/templates/javascript.htm:383 -msgid "No Email saved for User" -msgstr "" - -#: app/templates/javascript.htm:384 -msgid "Drag GeoJSON or KML files here to add" -msgstr "" - -#: app/templates/javascript.htm:385 -msgid "The following errors occurred:" -msgstr "" - -#: app/templates/javascript.htm:387 -msgid "Enter Search String here" -msgstr "" - -#: app/templates/javascript.htm:388 -msgid "View search string" -msgstr "" - -#: app/templates/javascript.htm:389 -msgid "Search String - use to filter resources displayed" -msgstr "" - -#: app/templates/javascript.htm:390 -msgid "Saved Search" -msgstr "" - -#: app/templates/javascript.htm:391 -msgid "The Arches site administrator hasn't saved any searches yet." -msgstr "" - -#: app/templates/javascript.htm:392 -msgid "searching" -msgstr "" - -#: app/templates/javascript.htm:393 -msgid "Search Facets" -msgstr "" - -#: app/templates/javascript.htm:394 -msgid "Analyze" -msgstr "" - -#: app/templates/javascript.htm:396 app/templates/javascript.htm:521 -msgid "Legend" -msgstr "" - -#: app/templates/javascript.htm:397 -msgid "close" -msgstr "" - -#: app/templates/javascript.htm:398 -#: app/templates/views/resource/edit-log.htm:93 -#: app/templates/views/resource/edit-log.htm:96 -#: app/templates/views/user-profile-manager.htm:91 -msgid "Edit" -msgstr "" - -#: app/templates/javascript.htm:400 -msgid "Details" -msgstr "" - -#: app/templates/javascript.htm:401 -msgid "Report" -msgstr "" - -#: app/templates/javascript.htm:402 -#: app/templates/views/graph/graph-base.htm:48 -#: app/templates/views/rdm/modals/add-image-form.htm:21 -msgid "Done" -msgstr "" - -#: app/templates/javascript.htm:403 -msgid "Apply" -msgstr "" - -#: app/templates/javascript.htm:405 -msgid "Panels" -msgstr "" - -#: app/templates/javascript.htm:406 -msgid "Single Panel" -msgstr "" - -#: app/templates/javascript.htm:407 -msgid "Double Panel" -msgstr "" - -#: app/templates/javascript.htm:408 -msgid "Panel 1" -msgstr "" - -#: app/templates/javascript.htm:409 -msgid "Panel 2" -msgstr "" - -#: app/templates/javascript.htm:410 -msgid "Panel Layout" -msgstr "" - -#: app/templates/javascript.htm:411 -msgid "Selected Panel Layout" -msgstr "" - -#: app/templates/javascript.htm:412 -msgid "Annotation(s)" -msgstr "" - -#: app/templates/javascript.htm:413 -msgid "Brightness" -msgstr "" - -#: app/templates/javascript.htm:414 -msgid "Contrast" -msgstr "" - -#: app/templates/javascript.htm:415 -msgid "Saturation" -msgstr "" - -#: app/templates/javascript.htm:416 -msgid "Greyscale" -msgstr "" - -#: app/templates/javascript.htm:417 app/templates/javascript.htm:420 -msgid "Default Color" -msgstr "" - -#: app/templates/javascript.htm:418 -msgid "Selected Feature Color" -msgstr "" - -#: app/templates/javascript.htm:419 -msgid "Hovered Feature Color" -msgstr "" - -#: app/templates/javascript.htm:421 -msgid "Layer Color Palette" -msgstr "" - -#: app/templates/javascript.htm:422 -msgid "Fill Opacity" -msgstr "" - -#: app/templates/javascript.htm:423 -msgid "Fill Color" -msgstr "" - -#: app/templates/javascript.htm:424 -msgid "Overview Zoom" -msgstr "" - -#: app/templates/javascript.htm:425 -msgid "Min Zoom" -msgstr "" - -#: app/templates/javascript.htm:426 -msgid "Point Radius" -msgstr "" - -#: app/templates/javascript.htm:427 -msgid "Line Opacity" -msgstr "" - -#: app/templates/javascript.htm:428 -msgid "Line Width" -msgstr "" - -#: app/templates/javascript.htm:429 -msgid "Line Color" -msgstr "" - -#: app/templates/javascript.htm:430 -msgid "Stroke Color" -msgstr "" - -#: app/templates/javascript.htm:431 -msgid "Stroke Width" -msgstr "" - -#: app/templates/javascript.htm:432 -msgid "Point Stroke Width" -msgstr "" - -#: app/templates/javascript.htm:433 -msgid "Point Stroke Opacity" -msgstr "" - -#: app/templates/javascript.htm:434 -msgid "Show Style Tools" -msgstr "" - -#: app/templates/javascript.htm:435 -msgid "Hide Style Tools" -msgstr "" - -#: app/templates/javascript.htm:436 -msgid "dismiss" -msgstr "" - -#: app/templates/javascript.htm:437 -msgid "Preview" -msgstr "" - -#: app/templates/javascript.htm:438 -#: app/templates/views/map-layer-manager.htm:72 -msgid "Basemap" -msgstr "" - -#: app/templates/javascript.htm:441 -msgid "Participating Layers" -msgstr "" - -#: app/templates/javascript.htm:442 -msgid "Add a new feature" -msgstr "" - -#: app/templates/javascript.htm:443 -msgid "files uploaded" -msgstr "" - -#: app/templates/javascript.htm:444 -msgid "Max File Size (mb)" -msgstr "" - -#: app/templates/javascript.htm:445 -msgid "example: .jpg, .png, .txt" -msgstr "" - -#: app/templates/javascript.htm:446 -msgid "" -"Images formatted as .jpg, .png, .tiff files may be uploaded. Other formats " -"will be ignored" -msgstr "" - -#: app/templates/javascript.htm:447 -msgid "Accepted formats: .jpg, .png, .tiff" -msgstr "" - -#: app/templates/javascript.htm:448 -msgid "Accepted File Types" -msgstr "" - -#: app/templates/javascript.htm:449 -msgid "Show all files" -msgstr "" - -#: app/templates/javascript.htm:450 -msgid "Show first 5 files" -msgstr "" - -#: app/templates/javascript.htm:451 -msgid "Show first 10 files" -msgstr "" - -#: app/templates/javascript.htm:452 -msgid "Show first 25 files" -msgstr "" - -#: app/templates/javascript.htm:453 -msgid "error" -msgstr "" - -#: app/templates/javascript.htm:454 -msgid "Unsaved" -msgstr "" - -#: app/templates/javascript.htm:455 -msgid "delete all files" -msgstr "" - -#: app/templates/javascript.htm:456 -msgid "add more files" -msgstr "" - -#: app/templates/javascript.htm:457 -msgid "file(s) uploaded" -msgstr "" - -#: app/templates/javascript.htm:458 -msgid "find a file" -msgstr "" - -#: app/templates/javascript.htm:459 -msgid "Uploaded Files" -msgstr "" - -#: app/templates/javascript.htm:460 -msgid "Allowed document formats:" -msgstr "" - -#: app/templates/javascript.htm:461 -msgid "" -"You may upload as many documents as you wish, but the maximum size of any " -"single file is" -msgstr "" - -#: app/templates/javascript.htm:462 -msgid "" -"You may upload as many photos as you wish, but the maximum size of any " -"single file is 8MB." -msgstr "" - -#: app/templates/javascript.htm:463 -msgid "Adding documents to this record is optional." -msgstr "" - -#: app/templates/javascript.htm:464 -msgid "Adding photos to this record is optional." -msgstr "" - -#: app/templates/javascript.htm:465 -msgid "Select Files" -msgstr "" - -#: app/templates/javascript.htm:466 -msgid "Select Photographs" -msgstr "" - -#: app/templates/javascript.htm:467 -msgid "Drag & Drop your files onto this panel" -msgstr "" - -#: app/templates/javascript.htm:468 -msgid "Drag & Drop your photos onto this panel" -msgstr "" - -#: app/templates/javascript.htm:469 -msgid "Upload Photographs" -msgstr "" - -#: app/templates/javascript.htm:470 -msgid "Upload Documents" -msgstr "" - -#: app/templates/javascript.htm:471 -msgid "Show Gallery" -msgstr "" - -#: app/templates/javascript.htm:472 -msgid "Hide Gallery" -msgstr "" - -#: app/templates/javascript.htm:473 -msgid "Select default value" -msgstr "" - -#: app/templates/javascript.htm:474 -msgid "Select a filter" -msgstr "" - -#: app/templates/javascript.htm:475 -msgid "Default Manifest URL" -msgstr "" - -#: app/templates/javascript.htm:476 -msgid "Enter Manifest URL" -msgstr "" - -#: app/templates/javascript.htm:477 -msgid "Select a manifest" -msgstr "" - -#: app/templates/javascript.htm:478 app/templates/javascript.htm:669 -msgid "No manifest selected" -msgstr "" - -#: app/templates/javascript.htm:479 -msgid "Load manifest" -msgstr "" - -#: app/templates/javascript.htm:480 -msgid "Loading manifest" -msgstr "" - -#: app/templates/javascript.htm:481 -msgid "Error loading manifest" -msgstr "" - -#: app/templates/javascript.htm:483 -msgid "Filter images" -msgstr "" - -#: app/templates/javascript.htm:484 -msgid "Draw a" -msgstr "" - -#: app/templates/javascript.htm:485 -msgid "View Gallery" -msgstr "" - -#: app/templates/javascript.htm:486 -msgid "Image" -msgstr "" - -#: app/templates/javascript.htm:487 -msgid "Image List" -msgstr "" - -#: app/templates/javascript.htm:488 -msgid "Image Tools" -msgstr "" - -#: app/templates/javascript.htm:489 app/templates/javascript.htm:667 -msgid "Switch Image Service" -msgstr "" - -#: app/templates/javascript.htm:490 -msgid "Resource Instance Name" -msgstr "" - -#: app/templates/javascript.htm:491 app/templates/javascript.htm:620 -msgid "Related Resource Summary" -msgstr "" - -#: app/templates/javascript.htm:492 app/templates/views/graph-designer.htm:34 -msgid "Resource Model" -msgstr "" - -#: app/templates/javascript.htm:493 app/templates/views/edit-history.htm:18 -msgid "Resource Type" -msgstr "" - -#: app/templates/javascript.htm:494 -msgid "Resource Details" -msgstr "" - -#: app/templates/javascript.htm:495 -msgid "" -"Click the 'Details' link on a search result from the list on the left to " -"view more information about a resource." -msgstr "" - -#: app/templates/javascript.htm:496 -msgid "Resource Information" -msgstr "" - -#: app/templates/javascript.htm:497 -msgid "Has Relationship" -msgstr "" - -#: app/templates/javascript.htm:498 -msgid "Resource's relationship to" -msgstr "" - -#: app/templates/javascript.htm:499 -msgid "Related to" -msgstr "" - -#: app/templates/javascript.htm:500 -msgid "'s relationship to Resource" -msgstr "" - -#: app/templates/javascript.htm:501 -msgid "Relationships" -msgstr "" - -#: app/templates/javascript.htm:502 -msgid "relationships shown" -msgstr "" - -#: app/templates/javascript.htm:503 -msgid "Search Network" -msgstr "" - -#: app/templates/javascript.htm:504 -msgid "Analyze Network" -msgstr "" - -#: app/templates/javascript.htm:505 -msgid "Click a node/edge for info" -msgstr "" - -#: app/templates/javascript.htm:506 -msgid "Click a node to show more relationships" -msgstr "" - -#: app/templates/javascript.htm:507 -msgid "Click a node refocus" -msgstr "" - -#: app/templates/javascript.htm:508 -msgid "Click a node/edge to remove" -msgstr "" - -#: app/templates/javascript.htm:510 -msgid "Workflow Complete" -msgstr "" - -#: app/templates/javascript.htm:511 -msgid "with" -msgstr "" - -#: app/templates/javascript.htm:512 -msgid "Link Text (Optional)" -msgstr "" - -#: app/templates/javascript.htm:513 -msgid "URL for link" -msgstr "" - -#: app/templates/javascript.htm:514 -msgid "URL Link Color" -msgstr "" - -#: app/templates/javascript.htm:515 -msgid "URL Placeholder" -msgstr "" - -#: app/templates/javascript.htm:516 -msgid "URL Label Placeholder" -msgstr "" - -#: app/templates/javascript.htm:517 -msgid "Default relationship to" -msgstr "" - -#: app/templates/javascript.htm:518 -msgid "Default inverse relationship to" -msgstr "" - -#: app/templates/javascript.htm:519 -msgid "References" -msgstr "" - -#: app/templates/javascript.htm:520 -msgid "Does not reference" -msgstr "" - -#: app/templates/javascript.htm:522 -msgid "" -"Check to limit the dropdown to only this widget's node rather than all nodes " -"in the tile." -msgstr "" - -#: app/templates/javascript.htm:523 -msgid "Show only the value of the selected node in the dropdown options" -msgstr "" - -#: app/templates/javascript.htm:524 -msgid "Dropdown Format" -msgstr "" - -#: app/templates/javascript.htm:525 -msgid "Provisional" -msgstr "" - -#: app/templates/javascript.htm:526 -msgid "Card Name" -msgstr "" - -#: app/templates/javascript.htm:527 -msgid "Add Tab" -msgstr "" - -#: app/templates/javascript.htm:528 -msgid "Tab Name" -msgstr "" - -#: app/templates/javascript.htm:529 -msgid "Find a resource..." -msgstr "" - -#: app/templates/javascript.htm:530 -msgid "Find an icon" -msgstr "" - -#: app/templates/javascript.htm:531 -msgid "Select Tab icon" -msgstr "" - -#: app/templates/javascript.htm:532 -msgid "Select cards in this tab" -msgstr "" - -#: app/templates/javascript.htm:533 -msgid "Enter manifest URL" -msgstr "" - -#: app/templates/javascript.htm:534 -msgid "Default Image Service URL" -msgstr "" - -#: app/templates/javascript.htm:536 -msgid "Select image nodes to include" -msgstr "" - -#: app/templates/javascript.htm:537 -msgid "Select an Ontology Property" -msgstr "" - -#: app/templates/javascript.htm:538 -msgid "Select a resource" -msgstr "" - -#: app/templates/javascript.htm:539 -msgid "Select a resource model" -msgstr "" - -#: app/templates/javascript.htm:542 -msgid "Choose a sibling card" -msgstr "" - -#: app/templates/javascript.htm:546 -msgid "This resource has provisional edits that are pending review" -msgstr "" - -#: app/templates/javascript.htm:547 -msgid "" -"This resource has provisional edits (not displayed in this report) that are " -"pending review" -msgstr "" - -#: app/templates/javascript.htm:548 -msgid "Find an address" -msgstr "" - -#: app/templates/javascript.htm:549 -msgid "Select drawings text (optional)" -msgstr "" - -#: app/templates/javascript.htm:550 -msgid "Select drawings map source (optional)" -msgstr "" - -#: app/templates/javascript.htm:551 -msgid "Select drawings map source layer (optional)" -msgstr "" - -#: app/templates/javascript.htm:552 -msgid "Map Center Longitude" -msgstr "" - -#: app/templates/javascript.htm:553 -msgid "Map Center Latitude" -msgstr "" - -#: app/templates/javascript.htm:554 -msgid "Longitude (x coordinate)" -msgstr "" - -#: app/templates/javascript.htm:555 -msgid "Latitude (y coordinate)" -msgstr "" - -#: app/templates/javascript.htm:556 -msgid "Available Geometry Types" -msgstr "" - -#: app/templates/javascript.htm:557 -msgid "Zoom Level" -msgstr "" - -#: app/templates/javascript.htm:558 -msgid "Default Zoom" -msgstr "" - -#: app/templates/javascript.htm:559 -msgid "Update Features" -msgstr "" - -#: app/templates/javascript.htm:560 -msgid "feature(s)" -msgstr "" - -#: app/templates/javascript.htm:561 -msgid "Point" -msgstr "" - -#: app/templates/javascript.htm:562 -msgid "Line" -msgstr "" - -#: app/templates/javascript.htm:563 -msgid "Polygon" -msgstr "" - -#: app/templates/javascript.htm:564 -msgid "Add point" -msgstr "" - -#: app/templates/javascript.htm:565 -msgid "Add line" -msgstr "" - -#: app/templates/javascript.htm:566 -msgid "Add polygon" -msgstr "" - -#: app/templates/javascript.htm:567 -msgid "Select drawing" -msgstr "" - -#: app/templates/javascript.htm:568 -msgid "Related instance map sources" -msgstr "" - -#: app/templates/javascript.htm:569 -msgid "Related instance map source layers (optional)" -msgstr "" - -#: app/templates/javascript.htm:570 -msgid "Intersection layer configuration" -msgstr "" - -#: app/templates/javascript.htm:571 -#, python-brace-format -msgid "Create a new ${graphName}" -msgstr "" - -#: app/templates/javascript.htm:572 -msgid "Add new Relationship" -msgstr "" - -#: app/templates/javascript.htm:573 -msgid "Network response was not ok" -msgstr "" - -#: app/templates/javascript.htm:575 -msgid "Term Matches" -msgstr "" - -#: app/templates/javascript.htm:576 -#, python-brace-format -msgid "${total} date values" -msgstr "" - -#: app/templates/javascript.htm:577 -msgid "Select Widgets" -msgstr "" - -#: app/templates/javascript.htm:578 -msgid "(This card data will define the resource description.)" -msgstr "" - -#: app/templates/javascript.htm:579 -msgid "(This card data will define the resource name.)" -msgstr "" - -#: app/templates/javascript.htm:580 -msgid "Settings Conflict: Remove this card from grouped card?" -msgstr "" - -#: app/templates/javascript.htm:581 -#, python-brace-format -msgid "" -"The cardinality of this card cannot be changed until you remove it from " -"being grouped with the ${cardName} card. Do you want to remove this card " -"from being grouped with the ${cardName} card" -msgstr "" - -#: app/templates/javascript.htm:582 -msgid "!! Referenced model does not exist -- Delete and select a new model !!" -msgstr "" - -#: app/templates/javascript.htm:583 -#: app/templates/views/map-layer-manager.htm:132 -msgid "Layer Preview" -msgstr "" - -#: app/templates/javascript.htm:584 -msgid "Layer Icon" -msgstr "" - -#: app/templates/javascript.htm:585 app/templates/views/graph-designer.htm:127 -#: app/templates/views/graph-designer.htm:136 -#: app/templates/views/graph/function-manager.htm:29 -#: app/templates/views/map-layer-manager.htm:123 -msgid "Save Edits" -msgstr "" - -#: app/templates/javascript.htm:586 app/templates/views/graph-designer.htm:125 -#: app/templates/views/graph-designer.htm:134 -#: app/templates/views/graph/function-manager.htm:28 -#: app/templates/views/map-layer-manager.htm:124 -msgid "Discard Edits" -msgstr "" - -#: app/templates/javascript.htm:587 -msgid "Activated" -msgstr "" - -#: app/templates/javascript.htm:591 -msgid "Layer Name" -msgstr "" - -#: app/templates/javascript.htm:592 -msgid "Add to search map by default:" -msgstr "" - -#: app/templates/javascript.htm:593 -msgid "Legend content" -msgstr "" - -#: app/templates/javascript.htm:595 -msgid "" -"Layer has no data - data on map is for preview purposes. This layer will " -"not show up in map overlays until data is added." -msgstr "" - -#: app/templates/javascript.htm:596 -msgid "Point Style" -msgstr "" - -#: app/templates/javascript.htm:597 -msgid "Line Style" -msgstr "" - -#: app/templates/javascript.htm:598 -msgid "Polygon Style" -msgstr "" - -#: app/templates/javascript.htm:600 -msgid "Halo color" -msgstr "" - -#: app/templates/javascript.htm:601 -msgid "Fill color" -msgstr "" - -#: app/templates/javascript.htm:602 -msgid "Radius" -msgstr "" - -#: app/templates/javascript.htm:603 -msgid "Halo radius" -msgstr "" - -#: app/templates/javascript.htm:604 -msgid "Weight" -msgstr "" - -#: app/templates/javascript.htm:605 -msgid "Halo weight" -msgstr "" - -#: app/templates/javascript.htm:606 -msgid "Outline color" -msgstr "" - -#: app/templates/javascript.htm:607 -msgid "Outline weight" -msgstr "" - -#: app/templates/javascript.htm:608 -msgid "Cluster Distance" -msgstr "" - -#: app/templates/javascript.htm:609 -msgid "Cluster Max Zoom" -msgstr "" - -#: app/templates/javascript.htm:610 -msgid "Cluster Min Points" -msgstr "" - -#: app/templates/javascript.htm:611 -msgid "Vector Simplification" -msgstr "" - -#: app/templates/javascript.htm:612 -msgid "Changes to cluster settings will only be reflected after saving." -msgstr "" - -#: app/templates/javascript.htm:613 -msgid "" -"Preview map data do not use clustering algorithm. Add data for this " -"resource model to see real clustered data." -msgstr "" - -#: app/templates/javascript.htm:614 -msgid "" -"The following users and groups can view this layer. If you wish to change " -"who can access this layer, please update the permissions on the layer node." -msgstr "" - -#: app/templates/javascript.htm:615 -msgid "Users" -msgstr "" - -#: app/templates/javascript.htm:616 -msgid "Groups" -msgstr "" - -#: app/templates/javascript.htm:617 -msgid "Related Resources Editor" -msgstr "" - -#: app/templates/javascript.htm:618 -msgid "Add Related Resources" -msgstr "" - -#: app/templates/javascript.htm:619 -msgid "" -"Arches allows you to define relationships between resources so you can " -"better understand the context and interplay between physical objects, " -"events, activities, people and documents. Relating resources lets you build " -"a network of relationships for your data objects." -msgstr "" - -#: app/templates/javascript.htm:621 -msgid "Table" -msgstr "" - -#: app/templates/javascript.htm:622 -msgid "Visualization" -msgstr "" - -#: app/templates/javascript.htm:623 -msgid "Show Me How" -msgstr "" - -#: app/templates/javascript.htm:624 -msgid "Select resources and relate it to this one" -msgstr "" - -#: app/templates/javascript.htm:625 -msgid "e.g.: .txt" -msgstr "" - -#: app/templates/javascript.htm:626 -msgid "resource relations" -msgstr "" - -#: app/templates/javascript.htm:627 -msgid "'Select an Ontology Property'" -msgstr "" - -#: app/templates/javascript.htm:628 -msgid "This is a Node to Resource Instance relationship" -msgstr "" - -#: app/templates/javascript.htm:629 -msgid "'s relationship to " -msgstr "" - -#: app/templates/javascript.htm:630 -#: app/templates/views/graph/graph-designer/node-form.htm:71 -msgid "Relationship to" -msgstr "" - -#: app/templates/javascript.htm:631 -msgid "Inverse Relationship to" -msgstr "" - -#: app/templates/javascript.htm:632 -msgid "This is a Resource Instance to Resource Instance relationship" -msgstr "" - -#: app/templates/javascript.htm:633 -msgid "Relationship" -msgstr "" - -#: app/templates/javascript.htm:634 -msgid "From Date" -msgstr "" - -#: app/templates/javascript.htm:635 -msgid "To Date" -msgstr "" - -#: app/templates/javascript.htm:637 -msgid "Delete this entry" -msgstr "" - -#: app/templates/javascript.htm:638 app/templates/javascript.htm:757 -#: app/templates/views/components/plugins/workflow.htm:180 -#: app/templates/views/components/plugins/workflow.htm:183 -#: app/templates/views/graph/card-configuration/card-form-preview.htm:126 -#: app/templates/views/rdm/modals/manage-parent-form.htm:58 -#: app/templates/views/rdm/modals/related-concept-form.htm:68 -#: app/templates/views/rdm/modals/related-member-form.htm:67 -#: app/templates/views/rdm/modals/value-form.htm:64 -#: app/templates/views/rdm/modals/value-form.htm:143 -#: app/templates/views/rdm/modals/value-form.htm:221 -#: app/templates/views/user-profile-manager.htm:155 -msgid "Save" -msgstr "" - -#: app/templates/javascript.htm:639 -msgid "This resource is not related to any other resources" -msgstr "" - -#: app/templates/javascript.htm:640 -msgid "Service" -msgstr "" - -#: app/templates/javascript.htm:641 -msgid "Canvas" -msgstr "" - -#: app/templates/javascript.htm:642 -msgid "Manage Image Service" -msgstr "" - -#: app/templates/javascript.htm:643 -msgid "Title" -msgstr "" - -#: app/templates/javascript.htm:645 -msgid "Attribution" -msgstr "" - -#: app/templates/javascript.htm:646 -msgid "Attribution Logo" -msgstr "" - -#: app/templates/javascript.htm:647 -msgid "Metadata" -msgstr "" - -#: app/templates/javascript.htm:649 -msgid "Manage Image Canvases" -msgstr "" - -#: app/templates/javascript.htm:650 -#: app/templates/views/rdm/concept-report.htm:229 -msgid "Images" -msgstr "" - -#: app/templates/javascript.htm:651 -msgid "Select image to delete from the image service" -msgstr "" - -#: app/templates/javascript.htm:652 app/templates/javascript.htm:750 -msgid "Select All" -msgstr "" - -#: app/templates/javascript.htm:653 app/templates/javascript.htm:751 -msgid "Clear All" -msgstr "" - -#: app/templates/javascript.htm:654 app/templates/javascript.htm:752 -msgid "Delete Selected" -msgstr "" - -#: app/templates/javascript.htm:655 -msgid "Drag or " -msgstr "" - -#: app/templates/javascript.htm:656 -msgid "click here " -msgstr "" - -#: app/templates/javascript.htm:657 -msgid "to upload photos" -msgstr "" - -#: app/templates/javascript.htm:658 -msgid "Selected Image Name" -msgstr "" - -#: app/templates/javascript.htm:659 -msgid "Create New Service" -msgstr "" - -#: app/templates/javascript.htm:660 -msgid "Edit a service" -msgstr "" - -#: app/templates/javascript.htm:661 -msgid "Drag & Drop Your Images Here" -msgstr "" - -#: app/templates/javascript.htm:662 -msgid "Import digital images and create a new image service" -msgstr "" - -#: app/templates/javascript.htm:663 -msgid "Select Images" -msgstr "" - -#: app/templates/javascript.htm:664 -msgid "" -"Create a new service by uploading one or more images. Images will be " -"uploaded and processes so that you can view, annotate, and share them with " -"others" -msgstr "" - -#: app/templates/javascript.htm:665 -msgid "Edit an existing Image Service" -msgstr "" - -#: app/templates/javascript.htm:666 -msgid "" -"Update the information and images related to an existing Image Service. Or " -"copy and paste in the URL of a IIIF Manifest to add a service from an " -"external service" -msgstr "" - -#: app/templates/javascript.htm:668 -msgid "Create Image Service" -msgstr "" - -#: app/templates/javascript.htm:670 -msgid "Service Title" -msgstr "" - -#: app/templates/javascript.htm:671 -msgid "Service Description" -msgstr "" - -#: app/templates/javascript.htm:672 -msgid "Metadata Label" -msgstr "" - -#: app/templates/javascript.htm:673 -msgid "Metadata Value" -msgstr "" - -#: app/templates/javascript.htm:674 -msgid "Image Caption" -msgstr "" - -#: app/templates/javascript.htm:675 -msgid "Upload .csv or .zip File" -msgstr "" - -#: app/templates/javascript.htm:676 -msgid "Drag & Drop your file onto this area to upload" -msgstr "" - -#: app/templates/javascript.htm:677 -msgid "Select File" -msgstr "" - -#: app/templates/javascript.htm:678 app/templates/javascript.htm:693 -msgid "Cancel File Import" -msgstr "" - -#: app/templates/javascript.htm:679 -msgid "" -"Use this workflow to upload a file with data that you want to use to create " -"new data instances of a model." -msgstr "" - -#: app/templates/javascript.htm:680 -msgid "Import Format: Single .csv file" -msgstr "" - -#: app/templates/javascript.htm:681 -msgid "File Summary" -msgstr "" - -#: app/templates/javascript.htm:682 -msgid "File name" -msgstr "" - -#: app/templates/javascript.htm:683 -msgid "File size" -msgstr "" - -#: app/templates/javascript.htm:684 -msgid "Number of rows" -msgstr "" - -#: app/templates/javascript.htm:685 -msgid "Target Model" -msgstr "" - -#: app/templates/javascript.htm:686 -msgid "Import Details" -msgstr "" - -#: app/templates/javascript.htm:687 -msgid "Column names in the first row" -msgstr "" - -#: app/templates/javascript.htm:688 app/templates/javascript.htm:762 -msgid "Use as an id" -msgstr "" - -#: app/templates/javascript.htm:689 -msgid "Showing First" -msgstr "" - -#: app/templates/javascript.htm:690 -msgid "Showing All" -msgstr "" - -#: app/templates/javascript.htm:691 -msgid "Rows" -msgstr "" - -#: app/templates/javascript.htm:692 -msgid "Import data" -msgstr "" - -#: app/templates/javascript.htm:694 -msgid "Import Single CSV" -msgstr "" - -#: app/templates/javascript.htm:695 -msgid "Target Resource" -msgstr "" - -#: app/templates/javascript.htm:696 -msgid "Target Fields" -msgstr "" - -#: app/templates/javascript.htm:697 -msgid "Download Templates" -msgstr "" - -#: app/templates/javascript.htm:698 -msgid "Select Template" -msgstr "" - -#: app/templates/javascript.htm:699 -msgid "Upload .zip File" -msgstr "" - -#: app/templates/javascript.htm:700 -msgid "Upload Your .zip File" -msgstr "" - -#: app/templates/javascript.htm:701 -msgid "Branch Excel" -msgstr "" - -#: app/templates/javascript.htm:702 -msgid "File Upload Summary" -msgstr "" - -#: app/templates/javascript.htm:703 -msgid "File" -msgstr "" - -#: app/templates/javascript.htm:704 -msgid "Size" -msgstr "" - -#: app/templates/javascript.htm:705 -#: app/templates/two_factor_authentication_reset.htm:42 -msgid "Submit" -msgstr "" - -#: app/templates/javascript.htm:706 -msgid "File contents" -msgstr "" - -#: app/templates/javascript.htm:707 -msgid "Import Branch Excel Summary" -msgstr "" - -#: app/templates/javascript.htm:708 -msgid "Excel File" -msgstr "" - -#: app/templates/javascript.htm:709 -msgid "Worksheets" -msgstr "" - -#: app/templates/javascript.htm:710 -msgid "Tiles" -msgstr "" - -#: app/templates/javascript.htm:711 -#: app/templates/views/rdm/modals/import-concept-form.htm:53 -msgid "Import" -msgstr "" - -#: app/templates/javascript.htm:712 -#: app/templates/views/rdm/modals/export-scheme-form.htm:27 -msgid "Export" -msgstr "" - -#: app/templates/javascript.htm:713 -msgid "Filter Tasks" -msgstr "" - -#: app/templates/javascript.htm:714 -msgid "Filter Modules" -msgstr "" - -#: app/templates/javascript.htm:715 -msgid "Start" -msgstr "" - -#: app/templates/javascript.htm:716 -msgid "Warning" -msgstr "" - -#: app/templates/javascript.htm:717 -msgid "Are you sure you want to delete this load?" -msgstr "" - -#: app/templates/javascript.htm:718 -msgid "undo import" -msgstr "" - -#: app/templates/javascript.htm:719 -msgid "remove from history" -msgstr "" - -#: app/templates/javascript.htm:720 -msgid "indexing" -msgstr "" - -#: app/templates/javascript.htm:721 -msgid "completed" -msgstr "" - -#: app/templates/javascript.htm:722 -msgid "failed" -msgstr "" - -#: app/templates/javascript.htm:723 -msgid "running" -msgstr "" - -#: app/templates/javascript.htm:724 -msgid "unloading" -msgstr "" - -#: app/templates/javascript.htm:725 -msgid "unloaded" -msgstr "" - -#: app/templates/javascript.htm:726 -msgid "Validation Errors" -msgstr "" - -#: app/templates/javascript.htm:727 -msgid "No Error Found" -msgstr "" - -#: app/templates/javascript.htm:728 -msgid "Loading data" -msgstr "" - -#: app/templates/javascript.htm:729 -msgid "Loading status" -msgstr "" - -#: app/templates/javascript.htm:730 -msgid "Loading started" -msgstr "" - -#: app/templates/javascript.htm:731 -msgid "Loading ended" -msgstr "" - -#: app/templates/javascript.htm:732 -msgid "Load duration" -msgstr "" - -#: app/templates/javascript.htm:733 -msgid "Indexing ended" -msgstr "" - -#: app/templates/javascript.htm:734 -msgid "Indexing duration" -msgstr "" - -#: app/templates/javascript.htm:736 -msgid "Unable to display the selected file" -msgstr "" - -#: app/templates/javascript.htm:737 -msgid "This file can't be displayed." -msgstr "" - -#: app/templates/javascript.htm:738 -msgid "It may be a proprietary format or there isn't a loader available yet" -msgstr "" - -#: app/templates/javascript.htm:739 -msgid "to present it in this webpage." -msgstr "" - -#: app/templates/javascript.htm:740 -msgid "Unable to parse your file with the " -msgstr "" - -#: app/templates/javascript.htm:741 -msgid "loader" -msgstr "" - -#: app/templates/javascript.htm:742 -msgid "Select File Loader" -msgstr "" - -#: app/templates/javascript.htm:743 -msgid "" -"Select the loader best suited for processing and visualizing the selected " -"file" -msgstr "" - -#: app/templates/javascript.htm:744 -msgid "Upload Files" -msgstr "" - -#: app/templates/javascript.htm:745 -msgid "" -"You may upload as many files as you wish; check with the site admin on the " -"maximum file size." -msgstr "" - -#: app/templates/javascript.htm:746 -msgid "optional" -msgstr "" - -#: app/templates/javascript.htm:747 -msgid "Adding files to this record is" -msgstr "" - -#: app/templates/javascript.htm:748 -msgid "" -"Images formatted as .jpg, .png files may be uploaded. Other formats may " -"require a loader to view." -msgstr "" - -#: app/templates/javascript.htm:749 -msgid "File Filter" -msgstr "" - -#: app/templates/javascript.htm:753 -msgid "Download Selected" -msgstr "" - -#: app/templates/javascript.htm:754 -msgid "Loader" -msgstr "" - -#: app/templates/javascript.htm:755 -msgid "File Renderer" -msgstr "" - -#: app/templates/javascript.htm:758 -msgid "files selected" -msgstr "" - -#: app/templates/javascript.htm:759 -msgid "add files" -msgstr "" - -#: app/templates/javascript.htm:760 -msgid "Apply to Selected Files" -msgstr "" - -#: app/templates/javascript.htm:761 -msgid "Apply the same loader to all selected files in the dataset" -msgstr "" - -#: app/templates/login.htm:38 app/templates/login.htm:68 -msgid "Sign In" -msgstr "" - -#: app/templates/login.htm:40 -msgid "" -"Sign in to Arches to access your data modeling, editing, and discovery tools." -msgstr "" - -#: app/templates/login.htm:46 -msgid "Your account has been created. Please sign in." -msgstr "" - -#: app/templates/login.htm:74 -msgid "Login failed" -msgstr "" - -#: app/templates/login.htm:75 -msgid "Invalid username and/or password." -msgstr "" - -#: app/templates/login.htm:80 app/templates/signup.htm:159 -msgid "Forgot password ?" -msgstr "" - -#: app/templates/login.htm:81 -msgid "Forgot password?" -msgstr "" - -#: app/templates/login.htm:84 app/templates/signup.htm:160 -msgid "Create a new account" -msgstr "" - -#: app/templates/login.htm:90 app/templates/signup.htm:153 -msgid "Learn more about Arches" -msgstr "" - -#: app/templates/navbar/function-manage-menu.htm:11 -msgid "Select a graph..." -msgstr "" - -#: app/templates/navbar/function-manage-menu.htm:18 -msgid "Graphs/Semantics" -msgstr "" - -#: app/templates/navbar/function-manage-menu.htm:19 -msgid "Define graph" -msgstr "" - -#: app/templates/navbar/function-manage-menu.htm:28 -#: app/templates/navbar/graph-designer-menu.htm:102 -msgid "Return to Arches Designer" -msgstr "" - -#: app/templates/navbar/function-manage-menu.htm:29 -#: app/templates/navbar/graph-designer-menu.htm:103 -msgid "Create Arches Resource Models and Branches" -msgstr "" - -#: app/templates/navbar/function-manage-menu.htm:37 -#: app/templates/navbar/graph-designer-menu.htm:111 -msgid "footer" -msgstr "" - -#: app/templates/navbar/graph-designer-menu.htm:15 -msgid "New Model" -msgstr "" - -#: app/templates/navbar/graph-designer-menu.htm:16 -msgid "Create new Resource Model" -msgstr "" - -#: app/templates/navbar/graph-designer-menu.htm:24 -#: app/templates/views/graph.htm:75 app/views/graph.py:346 -msgid "New Branch" -msgstr "" - -#: app/templates/navbar/graph-designer-menu.htm:25 -msgid "Create new Branch" -msgstr "" - -#: app/templates/navbar/graph-designer-menu.htm:36 -msgid "Import Model" -msgstr "" - -#: app/templates/navbar/graph-designer-menu.htm:37 -msgid "Import Model by uploading a json file" -msgstr "" - -#: app/templates/navbar/graph-designer-menu.htm:63 -msgid "Functions" -msgstr "" - -#: app/templates/navbar/graph-designer-menu.htm:64 -msgid "Configure functions attached to this Resource Model" -msgstr "" - -#: app/templates/navbar/graph-designer-menu.htm:72 -msgid "Export Mapping File" -msgstr "" - -#: app/templates/navbar/graph-designer-menu.htm:74 -msgid "Use a mapping file with import/export of business data" -msgstr "" - -#: app/templates/navbar/graph-designer-menu.htm:83 -msgid "Delete Associated Instances" -msgstr "" - -#: app/templates/navbar/graph-designer-menu.htm:84 -msgid "Delete All Associated Instances with this Model" -msgstr "" - -#: app/templates/navbar/resource-manage-menu.htm:17 -msgid "Copy Resource" -msgstr "" - -#: app/templates/navbar/resource-manage-menu.htm:18 -msgid "Make a copy and start editing" -msgstr "" - -#: app/templates/navbar/resource-manage-menu.htm:28 -msgid "Delete Resource" -msgstr "" - -#: app/templates/navbar/resource-manage-menu.htm:29 -msgid "Permanently delete this resource" -msgstr "" - -#: app/templates/navbar/resource-manage-menu.htm:39 -msgid "Review Edit History" -msgstr "" - -#: app/templates/navbar/resource-manage-menu.htm:40 -msgid "View changes to this resource record" -msgstr "" - -#: app/templates/navbar/resource-manage-menu.htm:49 -msgid "Jump to Report" -msgstr "" - -#: app/templates/navbar/resource-manage-menu.htm:50 -msgid "View the full resource report" -msgstr "" - -#: app/templates/navbar/resource-manage-menu.htm:58 -msgid "Print Report" -msgstr "" - -#: app/templates/navbar/resource-manage-menu.htm:59 -msgid "Print the full resource report" -msgstr "" - -#: app/templates/rdm.htm:66 app/templates/views/rdm/concept-report.htm:28 -#: app/templates/views/rdm/concept-report.htm:52 -msgid "Toggle Dropdown" -msgstr "" - -#: app/templates/rdm.htm:69 -msgid "Add Thesauri" -msgstr "" - -#: app/templates/rdm.htm:70 -msgid "Import Thesauri" -msgstr "" - -#: app/templates/rdm.htm:71 -msgid "Export Thesauri" -msgstr "" - -#: app/templates/rdm.htm:72 -msgid "Delete Thesauri" -msgstr "" - -#: app/templates/rdm.htm:74 -#: app/templates/views/rdm/modals/add-collection-form.htm:7 -msgid "Add Collection" -msgstr "" - -#: app/templates/rdm.htm:75 -#: app/templates/views/rdm/modals/delete-collection-form.htm:7 -msgid "Delete Collection" -msgstr "" - -#: app/templates/rdm.htm:76 -msgid "Export All Collections" -msgstr "" - -#: app/templates/rdm.htm:120 app/templates/views/rdm/concept-report.htm:3 -#: app/templates/views/rdm/entitytype-report.htm:3 -msgid "Loading..." -msgstr "" - -#: app/templates/signup.htm:31 -msgid "Create Account" -msgstr "" - -#: app/templates/signup.htm:33 -msgid "Register to access data modeling, editing, and discovery tools." -msgstr "" - -#: app/templates/signup.htm:40 -msgid "Please correct the error below." -msgstr "" - -#: app/templates/signup.htm:40 -msgid "Please correct the errors below." -msgstr "" - -#: app/templates/signup.htm:127 -msgid "Signup" -msgstr "" - -#: app/templates/two_factor_authentication_login.htm:19 -#: app/templates/views/user-profile-manager.htm:127 -#: app/templates/views/user-profile-manager.htm:238 -msgid "Two-Factor Authentication" -msgstr "" - -#: app/templates/two_factor_authentication_login.htm:24 -msgid "" -"Please enter the code from your external authentication application below." -msgstr "" - -#: app/templates/two_factor_authentication_login.htm:63 -msgid "Authentication failed. Please try again." -msgstr "" - -#: app/templates/two_factor_authentication_login.htm:71 -msgid "Need to reset two-factor authentication?" -msgstr "" - -#: app/templates/two_factor_authentication_login.htm:81 -msgid "" -"The administrator has required that all users enable two-factor " -"authentication." -msgstr "" - -#: app/templates/two_factor_authentication_login.htm:82 -msgid "Enable two-factor authentication via email" -msgstr "" - -#: app/templates/two_factor_authentication_reset.htm:19 -msgid "Update Two-Factor Authentication" -msgstr "" - -#: app/templates/two_factor_authentication_reset.htm:24 -msgid "Please enter an email address below." -msgstr "" - -#: app/templates/two_factor_authentication_reset.htm:25 -msgid "" -"If it is registered in our system it will receive instructions to update two-" -"factor authentication." -msgstr "" - -#: app/templates/two_factor_authentication_reset.htm:53 -msgid "Success!" -msgstr "" - -#: app/templates/two_factor_authentication_reset.htm:57 -msgid "Email address:" -msgstr "" - -#: app/templates/two_factor_authentication_reset.htm:65 -msgid "" -"If this email address is registered, an email has been sent to it containing " -"instructions to enable two-factor authentication." -msgstr "" - -#: app/templates/two_factor_authentication_reset.htm:72 -#: app/templates/two_factor_authentication_settings.htm:161 -msgid "Click here to return to login page" -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:22 -msgid "Two-Factor Authentication Settings" -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:33 -msgid "This page will expire in 5 minutes." -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:46 -msgid "Two-Factor Authentication:" -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:49 -msgid "ENABLED" -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:51 -msgid "DISABLED" -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:71 -msgid "Generate a new shared secret key" -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:73 -msgid "Enable two-factor authentication" -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:80 -msgid "Scan the QR code below with your external authentication application." -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:91 -msgid "Click here to generate data for manual entry." -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:97 -msgid "Enter the data below into your external authentication application." -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:105 -msgid "Issuer Name:" -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:111 -msgid "Account Name:" -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:117 -msgid "Secret Key:" -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:123 -msgid "Algorithm Type:" -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:126 -msgid "Time based" -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:138 -msgid "Click here to generate QR code." -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:152 -msgid "" -"To disable two-factor authentication, please contact your administrator." -msgstr "" - -#: app/templates/two_factor_authentication_settings.htm:156 -msgid "Disable two-factor authentication" -msgstr "" - -#: app/templates/views/components/plugins/workflow.htm:10 -msgid "Insert Workflow Name" -msgstr "" - -#: app/templates/views/components/plugins/workflow.htm:21 -msgid "Save and Complete Workflow" -msgstr "" - -#: app/templates/views/components/plugins/workflow.htm:24 -msgid "Complete" -msgstr "" - -#: app/templates/views/components/plugins/workflow.htm:146 -msgid "Previous Step" -msgstr "" - -#: app/templates/views/components/plugins/workflow.htm:149 -msgid "Previous" -msgstr "" - -#: app/templates/views/components/plugins/workflow.htm:166 -msgid "Undo" -msgstr "" - -#: app/templates/views/components/plugins/workflow.htm:196 -msgid "Save and Continue" -msgstr "" - -#: app/templates/views/components/plugins/workflow.htm:199 -#: app/templates/views/components/plugins/workflow.htm:220 -#: app/templates/views/components/plugins/workflow.htm:242 -msgid "Next" -msgstr "" - -#: app/templates/views/components/plugins/workflow.htm:217 -#: app/templates/views/components/plugins/workflow.htm:239 -msgid "Next Step" -msgstr "" - -#: app/templates/views/concept-graph.htm:14 -msgid "Concept" -msgstr "" - -#: app/templates/views/concept-graph.htm:19 -msgid "Delete this concept" -msgstr "" - -#: app/templates/views/concept-graph.htm:19 -msgid "Delete this concept and all of it's sub concepts." -msgstr "" - -#: app/templates/views/concept-graph.htm:20 -#: app/templates/views/rdm/concept-report.htm:138 -#: app/templates/views/rdm/concept-report.htm:147 -#: app/templates/views/rdm/concept-report.htm:187 -msgid "Jump to this concept" -msgstr "" - -#: app/templates/views/concept-graph.htm:20 -msgid "More Child Concept" -msgstr "" - -#: app/templates/views/concept-search.htm:2 -#: app/templates/views/rdm/modals/import-concept-form.htm:21 -msgid "Search for a concept..." -msgstr "" - -#: app/templates/views/edit-history.htm:11 -msgid "Recently Added Resources" -msgstr "" - -#: app/templates/views/edit-history.htm:16 -msgid "Resource Id" -msgstr "" - -#: app/templates/views/edit-history.htm:17 -msgid "Resource Name" -msgstr "" - -#: app/templates/views/edit-history.htm:19 -msgid "Edited" -msgstr "" - -#: app/templates/views/edit-history.htm:20 -msgid "Edit Type" -msgstr "" - -#: app/templates/views/edit-history.htm:21 -msgid "Editor" -msgstr "" - -#: app/templates/views/edit-history.htm:30 -msgid " (Resource Deleted)" -msgstr "" - -#: app/templates/views/edit-history.htm:45 -#: app/templates/views/edit-history.htm:47 -msgid "View Report" -msgstr "" - -#: app/templates/views/graph-designer.htm:26 -msgid "Graph Designer" -msgstr "" - -#: app/templates/views/graph-designer.htm:34 -msgid "Branch" -msgstr "" - -#: app/templates/views/graph-designer.htm:55 -msgid "Resource:" -msgstr "" - -#: app/templates/views/graph-designer.htm:63 -msgid "" -"Warning! This will save the graph in its current state and make the Resource " -"accessible to permissioned users." -msgstr "" - -#: app/templates/views/graph-designer.htm:76 -msgid "Notes:" -msgstr "" - -#: app/templates/views/graph-designer.htm:93 -msgid "Publish" -msgstr "" - -#: app/templates/views/graph-designer.htm:112 app/templates/views/graph.htm:51 -msgid "Find a Resource Model/Branch..." -msgstr "" - -#: app/templates/views/graph-designer.htm:145 -#: app/templates/views/graph-designer.htm:157 -msgid "Discard Card Edits" -msgstr "" - -#: app/templates/views/graph-designer.htm:147 -#: app/templates/views/graph-designer.htm:159 -msgid "Save Card Edits" -msgstr "" - -#: app/templates/views/graph-designer.htm:167 -msgid "Unpublish Graph" -msgstr "" - -#: app/templates/views/graph-designer.htm:173 -msgid "Publish Graph" -msgstr "" - -#: app/templates/views/graph-designer.htm:185 -msgid "Quit Designer" -msgstr "" - -#: app/templates/views/graph-designer.htm:201 -msgid "Graph" -msgstr "" - -#: app/templates/views/graph-designer.htm:206 -msgid "Cards" -msgstr "" - -#: app/templates/views/graph-designer.htm:253 -msgid "Add a branch to your model from the library" -msgstr "" - -#: app/templates/views/graph-designer.htm:280 -msgid "Card Designer" -msgstr "" - -#: app/templates/views/graph.htm:25 -msgid "Graphs" -msgstr "" - -#: app/templates/views/graph.htm:74 app/views/graph.py:346 -msgid "New Resource Model" -msgstr "" - -#: app/templates/views/graph.htm:80 -msgid "Import Branch/Resource Model" -msgstr "" - -#: app/templates/views/graph.htm:112 -msgid "Manage Graph" -msgstr "" - -#: app/templates/views/graph.htm:116 -msgid "Manage Functions" -msgstr "" - -#: app/templates/views/graph.htm:119 -msgid "Create Mapping File" -msgstr "" - -#: app/templates/views/graph.htm:122 -msgid "Delete Instances" -msgstr "" - -#: app/templates/views/graph.htm:126 -msgid "Export Model" -msgstr "" - -#: app/templates/views/graph.htm:128 -msgid "Clone Model" -msgstr "" - -#: app/templates/views/graph.htm:130 -msgid "Delete Model" -msgstr "" - -#: app/templates/views/graph/card-configuration/card-components-tree.htm:58 -msgid "Widget" -msgstr "" - -#: app/templates/views/graph/card-configuration/card-form-preview.htm:125 -msgid "Discard" -msgstr "" - -#: app/templates/views/graph/function-manager.htm:23 -msgid "Function Manager" -msgstr "" - -#: app/templates/views/graph/function-manager.htm:41 -msgid "Selected Functions" -msgstr "" - -#: app/templates/views/graph/function-manager.htm:47 -msgid "You haven't added any functions yet." -msgstr "" - -#: app/templates/views/graph/function-manager.htm:49 -msgid "" -"Select functions from the library to add new capabilities to your resource." -msgstr "" - -#: app/templates/views/graph/function-manager.htm:56 -msgid "Close Function Library" -msgstr "" - -#: app/templates/views/graph/function-manager.htm:57 -msgid "Show Function Library" -msgstr "" - -#: app/templates/views/graph/function-manager.htm:88 -msgid "Library filter goes here" -msgstr "" - -#: app/templates/views/graph/function-manager.htm:96 -msgid "Function Library" -msgstr "" - -#: app/templates/views/graph/function-manager.htm:119 -#: app/templates/views/graph/function-manager/function-list.htm:21 -msgid "Function Name" -msgstr "" - -#: app/templates/views/graph/function-manager.htm:137 -msgid "This Function doesn't require any configuration." -msgstr "" - -#: app/templates/views/graph/function-manager/function-list.htm:26 -msgid "Function Description" -msgstr "" - -#: app/templates/views/graph/function-manager/function-list.htm:37 -msgid "Select Function" -msgstr "" - -#: app/templates/views/graph/graph-base.htm:24 -msgid "Graph Manager" -msgstr "" - -#: app/templates/views/graph/graph-designer/branch-list.htm:17 -msgid "Because of ontology rules, there are no branches that can be appended." -msgstr "" - -#: app/templates/views/graph/graph-designer/card-configuration.htm:31 -msgid "Card name" -msgstr "" - -#: app/templates/views/graph/graph-designer/card-configuration.htm:40 -#: app/templates/views/graph/graph-designer/card-configuration.htm:49 -msgid " " -msgstr "" - -#: app/templates/views/graph/graph-designer/card-configuration.htm:46 -msgid "CSS Classes (Optional)" -msgstr "" - -#: app/templates/views/graph/graph-designer/card-configuration.htm:95 -msgid "Help Panel Title" -msgstr "" - -#: app/templates/views/graph/graph-designer/card-configuration.htm:98 -msgid "Help title" -msgstr "" - -#: app/templates/views/graph/graph-designer/card-configuration.htm:105 -msgid "Content" -msgstr "" - -#: app/templates/views/graph/graph-designer/card-configuration.htm:118 -msgid "Unique Values" -msgstr "" - -#: app/templates/views/graph/graph-designer/card-tree-permissions.htm:9 -#: app/templates/views/graph/graph-designer/card-tree.htm:9 -#: app/templates/views/resource/editor.htm:46 -msgid "Find a card..." -msgstr "" - -#: app/templates/views/graph/graph-designer/card-tree-permissions.htm:15 -#: app/templates/views/graph/graph-designer/card-tree.htm:15 -#: app/templates/views/graph/graph-designer/graph-tree.htm:18 -#: app/templates/views/resource/editor.htm:52 -msgid " Expand" -msgstr "" - -#: app/templates/views/graph/graph-designer/card-tree-permissions.htm:16 -#: app/templates/views/graph/graph-designer/card-tree.htm:16 -#: app/templates/views/graph/graph-designer/graph-tree.htm:19 -#: app/templates/views/resource/editor.htm:53 -msgid " Collapse" -msgstr "" - -#: app/templates/views/graph/graph-designer/card-tree-permissions.htm:17 -#: app/templates/views/graph/graph-designer/card-tree.htm:17 -#: app/templates/views/graph/graph-designer/graph-tree.htm:20 -#: app/templates/views/resource/editor.htm:54 -msgid " Grid" -msgstr "" - -#: app/templates/views/graph/graph-designer/card-tree-permissions.htm:18 -msgid " Select All" -msgstr "" - -#: app/templates/views/graph/graph-designer/card-tree-permissions.htm:19 -msgid " Clear All" -msgstr "" - -#: app/templates/views/graph/graph-designer/card-tree.htm:19 -#: app/templates/views/graph/graph-designer/graph-tree.htm:22 -msgid " Show IDs" -msgstr "" - -#: app/templates/views/graph/graph-designer/card-tree.htm:22 -#: app/templates/views/graph/graph-designer/graph-tree.htm:25 -msgid " Hide IDs" -msgstr "" - -#: app/templates/views/graph/graph-designer/card-tree.htm:40 -msgid "(edit report)" -msgstr "" - -#: app/templates/views/graph/graph-designer/graph-settings.htm:121 -msgid "Make card" -msgstr "" - -#: app/templates/views/graph/graph-designer/graph-settings.htm:124 -#: app/templates/views/graph/graph-designer/node-form.htm:252 -msgid "" -"Data from nodes not collected in other cards will be collected in the root " -"card's form section" -msgstr "" - -#: app/templates/views/graph/graph-designer/graph-settings.htm:134 -msgid "Resource models that may be related:" -msgstr "" - -#: app/templates/views/graph/graph-designer/graph-settings.htm:169 -msgid "Author name" -msgstr "" - -#: app/templates/views/graph/graph-designer/graph-settings.htm:181 -msgid "Abstract/description" -msgstr "" - -#: app/templates/views/graph/graph-designer/graph-settings.htm:193 -msgid "" -"URI to a JSON-LD Context Object or a Raw Context Object or Array of Context " -"Objects" -msgstr "" - -#: app/templates/views/graph/graph-designer/graph-settings.htm:200 -msgid "URI Slug for API Access" -msgstr "" - -#: app/templates/views/graph/graph-designer/graph-settings.htm:204 -msgid "Slug" -msgstr "" - -#: app/templates/views/graph/graph-designer/graph-settings.htm:225 -msgid " Map Feature Color " -msgstr "" - -#: app/templates/views/graph/graph-designer/graph-tree.htm:12 -msgid "Find a node, datatype, card..." -msgstr "" - -#: app/templates/views/graph/graph-designer/graph-tree.htm:49 -msgid "Node is exportable in search" -msgstr "" - -#: app/templates/views/graph/graph-designer/graph-tree.htm:57 -msgid "Add Child Node" -msgstr "" - -#: app/templates/views/graph/graph-designer/graph-tree.htm:58 -msgid "Add Branch" -msgstr "" - -#: app/templates/views/graph/graph-designer/graph-tree.htm:61 -msgid "Export Branch" -msgstr "" - -#: app/templates/views/graph/graph-designer/graph-tree.htm:64 -msgid "Delete Node" -msgstr "" - -#: app/templates/views/graph/graph-designer/identity-list.htm:5 -msgid "Groups/Accounts" -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:45 -msgid "Enter node name here..." -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:45 -msgid "node name" -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:54 -msgid "Node Name Alias" -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:59 -msgid "Unique alias generated from this node\\" -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:60 -msgid "Use a custom node alias" -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:71 -msgid "parent" -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:100 -msgid "Semantics" -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:129 -msgid "description" -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:137 -msgid "Node Data Type and Configuration" -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:169 -msgid "Node Settings" -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:186 -msgid "Activate to use this node in Advanced Search." -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:206 -#: app/templates/views/graph/graph-designer/widget-configuration.htm:66 -msgid "" -"Activate to require that data be collected for this node when a card value " -"is edited" -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:224 -msgid "Export via Search Results" -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:227 -msgid "Provide a field name for shapefiles. " -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:227 -msgid "Limited to 10 characters to meet shapefile requirements." -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:230 -msgid "shapefile fieldname" -msgstr "" - -#: app/templates/views/graph/graph-designer/node-form.htm:255 -msgid "" -"Data from this node and downstream nodes will be collected in a single form " -"section" -msgstr "" - -#: app/templates/views/graph/graph-designer/permission-settings-form.htm:21 -msgid "To set permissions: " -msgstr "" - -#: app/templates/views/graph/graph-designer/permission-settings-form.htm:23 -msgid " 1. Select one or more cards from the card tree." -msgstr "" - -#: app/templates/views/graph/graph-designer/permission-settings-form.htm:26 -msgid "" -" 2. Select a Group or User Account from the dropdown below." -msgstr "" - -#: app/templates/views/graph/graph-designer/permission-settings-form.htm:29 -msgid "" -" 3. Apply Permissions to set your changes. You'll see your " -"selections reflected by the icons in the card tree." -msgstr "" - -#: app/templates/views/graph/graph-designer/permission-settings-form.htm:36 -msgid "Set permissions for:" -msgstr "" - -#: app/templates/views/graph/graph-designer/permission-settings-form.htm:43 -msgid "Select a Group/Account..." -msgstr "" - -#: app/templates/views/graph/graph-designer/permission-settings-form.htm:77 -msgid "Revert Permissions" -msgstr "" - -#: app/templates/views/graph/graph-designer/permission-settings-form.htm:79 -msgid "Apply Permissions" -msgstr "" - -#: app/templates/views/graph/graph-designer/permission-settings-form.htm:88 -msgid "Selected Cards" -msgstr "" - -#: app/templates/views/graph/graph-designer/permission-settings-form.htm:91 -msgid "No cards selected" -msgstr "" - -#: app/templates/views/graph/graph-designer/widget-configuration.htm:7 -msgid "Widget Manager" -msgstr "" - -#: app/templates/views/graph/graph-designer/widget-configuration.htm:36 -msgid "Visibility" -msgstr "" - -#: app/templates/views/map-layer-manager.htm:72 -msgid "Overlay" -msgstr "" - -#: app/templates/views/map-layer-manager.htm:97 -msgid "No overlays available" -msgstr "" - -#: app/templates/views/map-layer-manager.htm:120 -msgid "Delete Layer" -msgstr "" - -#: app/templates/views/map-layer-manager.htm:136 -msgid "Activated:" -msgstr "" - -#: app/templates/views/map-layer-manager.htm:197 -msgid "Layer Name:" -msgstr "" - -#: app/templates/views/map-layer-manager.htm:218 -msgid "Only show on search map:" -msgstr "" - -#: app/templates/views/map-layer-manager.htm:249 -msgid "Legend content:" -msgstr "" - -#: app/templates/views/notifications-list.htm:10 -msgid "Dismiss All" -msgstr "" - -#: app/templates/views/notifications-list.htm:26 -msgid "" -"You're up-to-date and do not have any notifications. When you trigger a " -"notification (for example, when you request a large download) it will " -"display here." -msgstr "" - -#: app/templates/views/provisional-history-list.htm:17 -msgid "Last 7 days" -msgstr "" - -#: app/templates/views/provisional-history-list.htm:18 -msgid "Last 30 days" -msgstr "" - -#: app/templates/views/provisional-history-list.htm:49 -msgid "" -"You have not yet edited any data within the specified time period. Once you " -"edit a resource, your edit history will display here." -msgstr "" - -#: app/templates/views/provisional-history-list.htm:71 -msgid "Card: " -msgstr "" - -#: app/templates/views/provisional-history-list.htm:76 -msgid "Edited: " -msgstr "" - -#: app/templates/views/provisional-history-list.htm:82 -msgid "pending review" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:32 -msgid "Add Top Concept" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:33 -msgid "Import Top Concept from SPARQL" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:36 -#: app/templates/views/rdm/concept-report.htm:55 -msgid "Add Child" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:37 -msgid "Import Child from SPARQL" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:39 -#: app/templates/views/rdm/concept-report.htm:57 -msgid "Manage Parents" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:40 -msgid "Make Collection" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:56 -msgid "Import Child from AAT" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:70 -#: app/templates/views/rdm/entitytype-report.htm:78 -msgid "Labels" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:72 -#: app/templates/views/rdm/entitytype-report.htm:81 -msgid "Add label" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:78 -#: app/templates/views/rdm/entitytype-report.htm:87 -msgid "Delete this label?" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:81 -msgid "preferred" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:81 -msgid "alternate" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:81 -msgid "hidden" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:94 -#: app/templates/views/rdm/entitytype-report.htm:103 -msgid "Notes" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:96 -#: app/templates/views/rdm/entitytype-report.htm:106 -msgid "Add note" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:102 -#: app/templates/views/rdm/entitytype-report.htm:112 -msgid "Delete this note?" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:123 -msgid "Broader/Narrower Concepts" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:146 -msgid "Delete this concept?" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:146 -msgid "" -"By deleting this concept, you will also be deleting the following concepts " -"as well. This operation cannot be undone." -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:178 -msgid "Related Concepts" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:180 -msgid "Add related concept" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:186 -msgid "Remove the relationship to this concept?" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:203 -#: app/templates/views/rdm/entitytype-report.htm:132 -msgid "Values" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:205 -#: app/templates/views/rdm/entitytype-report.htm:135 -msgid "Add value" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:211 -#: app/templates/views/rdm/entitytype-report.htm:141 -msgid "Delete this value?" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:212 -#: app/templates/views/rdm/entitytype-report.htm:142 -msgid "Edit this value" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:231 -msgid "Add images" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:246 -msgid "Delete Image" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:274 -#: app/templates/views/rdm/entitytype-report.htm:165 -msgid "Arches ID:" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:294 -#: app/templates/views/rdm/entitytype-report.htm:179 -msgid "Are you ready to delete this item?" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:304 -#: app/templates/views/rdm/entitytype-report.htm:189 -msgid "No" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:305 -#: app/templates/views/rdm/entitytype-report.htm:190 -msgid "Yes" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:339 -msgid "Arches Reference Data Manager" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:348 -msgid "Schemes" -msgstr "" - -#: app/templates/views/rdm/concept-report.htm:352 -msgid "Entity Types" -msgstr "" - -#: app/templates/views/rdm/entitytype-report.htm:29 -msgid "Member Hierarchy" -msgstr "" - -#: app/templates/views/rdm/entitytype-report.htm:32 -msgid "Add dropdown entry" -msgstr "" - -#: app/templates/views/rdm/entitytype-report.htm:46 -#: app/templates/views/rdm/entitytype-report.htm:55 -msgid "Expand this entry" -msgstr "" - -#: app/templates/views/rdm/entitytype-report.htm:54 -msgid "Remove this entry from the dropdown" -msgstr "" - -#: app/templates/views/rdm/entitytype-report.htm:89 -msgid "Edit this label" -msgstr "" - -#: app/templates/views/rdm/entitytype-report.htm:113 -msgid "Edit this note" -msgstr "" - -#: app/templates/views/rdm/modals/add-child-form.htm:7 -msgid "Add Concept" -msgstr "" - -#: app/templates/views/rdm/modals/add-child-form.htm:13 -msgid "Label" -msgstr "" - -#: app/templates/views/rdm/modals/add-child-form.htm:19 -msgid "Note" -msgstr "" - -#: app/templates/views/rdm/modals/add-child-form.htm:36 -msgid "Relation from Parent" -msgstr "" - -#: app/templates/views/rdm/modals/add-child-form.htm:50 -#: app/templates/views/rdm/modals/add-collection-form.htm:32 -#: app/templates/views/rdm/modals/add-scheme-form.htm:38 -msgid "Save changes" -msgstr "" - -#: app/templates/views/rdm/modals/add-collection-form.htm:13 -#: app/templates/views/rdm/modals/add-scheme-form.htm:13 -msgid "ConceptScheme Name" -msgstr "" - -#: app/templates/views/rdm/modals/add-image-form.htm:9 -msgid "Import Images" -msgstr "" - -#: app/templates/views/rdm/modals/add-image-form.htm:9 -msgid "(Click on panel or drag and drop files onto panel to upload)" -msgstr "" - -#: app/templates/views/rdm/modals/add-scheme-form.htm:7 -msgid "Add Concept Scheme" -msgstr "" - -#: app/templates/views/rdm/modals/add-scheme-form.htm:19 -msgid "Scope Note" -msgstr "" - -#: app/templates/views/rdm/modals/delete-collection-form.htm:13 -msgid "Select collection to delete" -msgstr "" - -#: app/templates/views/rdm/modals/delete-collection-form.htm:33 -msgid "" -"You won't be able to undo this operation!  Are you sure you want to " -"permanently delete this entire collection from Arches?" -msgstr "" - -#: app/templates/views/rdm/modals/delete-scheme-form.htm:7 -msgid "Delete Scheme" -msgstr "" - -#: app/templates/views/rdm/modals/delete-scheme-form.htm:13 -msgid "Select scheme to delete" -msgstr "" - -#: app/templates/views/rdm/modals/delete-scheme-form.htm:33 -msgid "" -"You won't be able to undo this operation!  Are you sure you want to " -"permanently delete this entire scheme from Arches?" -msgstr "" - -#: app/templates/views/rdm/modals/export-scheme-form.htm:7 -msgid "Export Scheme" -msgstr "" - -#: app/templates/views/rdm/modals/export-scheme-form.htm:13 -msgid "Select scheme to export" -msgstr "" - -#: app/templates/views/rdm/modals/import-concept-form.htm:9 -msgid "Import Concept" -msgstr "" - -#: app/templates/views/rdm/modals/import-concept-form.htm:24 -msgid "Organization" -msgstr "" - -#: app/templates/views/rdm/modals/import-concept-form.htm:33 -msgid "Concept Indentifiers" -msgstr "" - -#: app/templates/views/rdm/modals/import-scheme-form.htm:9 -msgid "Import New Concept Scheme" -msgstr "" - -#: app/templates/views/rdm/modals/import-scheme-form.htm:20 -msgid "SKOS File" -msgstr "" - -#: app/templates/views/rdm/modals/import-scheme-form.htm:30 -msgid "When concept ids match" -msgstr "" - -#: app/templates/views/rdm/modals/import-scheme-form.htm:32 -msgid "overwrite system concept" -msgstr "" - -#: app/templates/views/rdm/modals/import-scheme-form.htm:33 -msgid "use system concept" -msgstr "" - -#: app/templates/views/rdm/modals/import-scheme-form.htm:41 -msgid "When inserting new concepts" -msgstr "" - -#: app/templates/views/rdm/modals/import-scheme-form.htm:43 -msgid "keep within scheme" -msgstr "" - -#: app/templates/views/rdm/modals/import-scheme-form.htm:44 -msgid "stage in candidates" -msgstr "" - -#: app/templates/views/rdm/modals/import-scheme-form.htm:54 -msgid "Upload File" -msgstr "" - -#: app/templates/views/rdm/modals/manage-parent-form.htm:9 -msgid "New Parent Concept" -msgstr "" - -#: app/templates/views/rdm/modals/manage-parent-form.htm:24 -msgid "Relation to Parent" -msgstr "" - -#: app/templates/views/rdm/modals/manage-parent-form.htm:31 -msgid "Current Parents" -msgstr "" - -#: app/templates/views/rdm/modals/manage-parent-form.htm:37 -msgid "Remove the relationship to this parent concept" -msgstr "" - -#: app/templates/views/rdm/modals/manage-parent-form.htm:37 -msgid "Remove the relationship to this parent concept." -msgstr "" - -#: app/templates/views/rdm/modals/manage-parent-form.htm:53 -msgid "Deleting reference to parent:" -msgstr "" - -#: app/templates/views/rdm/modals/related-concept-form.htm:9 -msgid "Manage Related Concepts" -msgstr "" - -#: app/templates/views/rdm/modals/related-concept-form.htm:27 -#: app/templates/views/rdm/modals/related-member-form.htm:27 -msgid "Select a concept" -msgstr "" - -#: app/templates/views/rdm/modals/related-concept-form.htm:34 -#: app/templates/views/rdm/modals/related-member-form.htm:34 -msgid "Relation type" -msgstr "" - -#: app/templates/views/rdm/modals/related-concept-form.htm:35 -#: app/templates/views/rdm/modals/related-member-form.htm:35 -msgid "Relation to Concept" -msgstr "" - -#: app/templates/views/rdm/modals/related-concept-form.htm:52 -msgid "Use the search tool to select the concept that you want to relate." -msgstr "" - -#: app/templates/views/rdm/modals/related-member-form.htm:9 -msgid "Select Concept Values for Dropdowns" -msgstr "" - -#: app/templates/views/rdm/modals/related-member-form.htm:51 -msgid "Selecting a concept will select that concept and all it's children." -msgstr "" - -#: app/templates/views/rdm/modals/value-form.htm:9 -msgid "Edit Concept Label" -msgstr "" - -#: app/templates/views/rdm/modals/value-form.htm:9 -msgid "Add Concept Label" -msgstr "" - -#: app/templates/views/rdm/modals/value-form.htm:9 -msgid "Manage Concept Label" -msgstr "" - -#: app/templates/views/rdm/modals/value-form.htm:24 -msgid "Label Information" -msgstr "" - -#: app/templates/views/rdm/modals/value-form.htm:35 -msgid "Label type" -msgstr "" - -#: app/templates/views/rdm/modals/value-form.htm:70 -msgid "Only one preferred label may exist for each language." -msgstr "" - -#: app/templates/views/rdm/modals/value-form.htm:83 -msgid "Add Concept Note" -msgstr "" - -#: app/templates/views/rdm/modals/value-form.htm:83 -msgid "Manage Concept Note" -msgstr "" - -#: app/templates/views/rdm/modals/value-form.htm:98 -msgid "Note Editor" -msgstr "" - -#: app/templates/views/rdm/modals/value-form.htm:151 -msgid "Only one note of each type may exist for each language." -msgstr "" - -#: app/templates/views/rdm/modals/value-form.htm:164 -msgid "Add Concept Value" -msgstr "" - -#: app/templates/views/rdm/modals/value-form.htm:164 -msgid "Manage Concept Values" -msgstr "" - -#: app/templates/views/rdm/modals/value-form.htm:179 -msgid "Define a value" -msgstr "" - -#: app/templates/views/rdm/modals/value-form.htm:192 -msgid "Value type" -msgstr "" - -#: app/templates/views/rdm/modals/value-form.htm:230 -msgid "Only one sort order value can be assigned to a concept." -msgstr "" - -#: app/templates/views/resource.htm:25 -#: app/templates/views/resource/resource-base.htm:24 app/views/resource.py:90 -msgid "Resource Manager" -msgstr "" - -#: app/templates/views/resource.htm:53 -msgid "Resources" -msgstr "" - -#: app/templates/views/resource.htm:93 -msgid "Create Resource" -msgstr "" - -#: app/templates/views/resource/edit-log.htm:7 -msgid "Resource History" -msgstr "" - -#: app/templates/views/resource/edit-log.htm:30 -msgid "Now" -msgstr "" - -#: app/templates/views/resource/edit-log.htm:34 -msgid "Most recent" -msgstr "" - -#: app/templates/views/resource/edit-log.htm:35 -msgid "Oldest" -msgstr "" - -#: app/templates/views/resource/edit-log.htm:36 -msgid "By editor" -msgstr "" - -#: app/templates/views/resource/edit-log.htm:37 -msgid "By edit type" -msgstr "" - -#: app/templates/views/resource/edit-log.htm:50 -msgid "Resource Record Created" -msgstr "" - -#: app/templates/views/resource/edit-log.htm:52 -msgid "Record created by Arches with unique identifer" -msgstr "" - -#: app/templates/views/resource/edit-log.htm:57 -#: app/templates/views/resource/edit-log.htm:60 -msgid "Created" -msgstr "" - -#: app/templates/views/resource/edit-log.htm:66 -#: app/templates/views/resource/edit-log.htm:169 -msgid "Tile Data" -msgstr "" - -#: app/templates/views/resource/edit-log.htm:78 -#: app/templates/views/resource/edit-log.htm:114 -msgid "Provisional Tile Data" -msgstr "" - -#: app/templates/views/resource/edit-log.htm:102 -msgid "New Tile Data" -msgstr "" - -#: app/templates/views/resource/edit-log.htm:132 -msgid "Previous Tile Data" -msgstr "" - -#: app/templates/views/resource/edit-log.htm:146 -msgid "Previous Provisional Tile Data" -msgstr "" - -#: app/templates/views/resource/edit-log.htm:162 -#: app/templates/views/resource/edit-log.htm:165 -msgid "Deleted" -msgstr "" - -#: app/templates/views/resource/edit-log.htm:184 -msgid "edited by" -msgstr "" - -#: app/templates/views/resource/editor.htm:25 -msgid "Resource Editor" -msgstr "" - -#: app/templates/views/resource/editor.htm:102 -msgid "Manage Permissions" -msgstr "" - -#: app/templates/views/resource/editor.htm:166 -msgid "Welcome to Arches' Resource Editor" -msgstr "" - -#: app/templates/views/resource/editor.htm:169 -msgid "" -"You are about to create a new resource record. Select any data card from " -"the list on the left and start entering information." -msgstr "" - -#: app/templates/views/resource/editor.htm:170 -msgid "Don't worry if you decide not to enter any data just yet." -msgstr "" - -#: app/templates/views/resource/editor.htm:171 -msgid "" -"Arches will create your new resource record once you've saved a data entry " -"card." -msgstr "" - -#: app/templates/views/resource/editor.htm:177 -msgid "No cards are available for this model." -msgstr "" - -#: app/templates/views/resource/editor.htm:243 -msgid "Add new" -msgstr "" - -#: app/templates/views/resource/editor.htm:270 -msgid "You do not have permission to edit this card." -msgstr "" - -#: app/templates/views/resource/editor/provisional-tile-manager.htm:15 -msgid "User: " -msgstr "" - -#: app/templates/views/resource/editor/provisional-tile-manager.htm:18 -msgid "Created: " -msgstr "" - -#: app/templates/views/resource/editor/provisional-tile-manager.htm:37 -msgid "Accept" -msgstr "" - -#: app/templates/views/resource/editor/provisional-tile-manager.htm:40 -msgid "Decline" -msgstr "" - -#: app/templates/views/resource/report.htm:24 -msgid "Resource Report" -msgstr "" - -#: app/templates/views/search.htm:60 -msgid "Clear Filters" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:25 -msgid "Account Settings" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:48 -msgid "User name:" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:64 -msgid "Account" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:74 -msgid "User name" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:81 -msgid "Change password" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:100 -msgid "Contact email" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:113 -msgid "Phone" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:141 -msgid "Arches user name" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:149 -msgid "This is the unique email or name that you use to log on to Arches." -msgstr "" - -#: app/templates/views/user-profile-manager.htm:165 -#: app/templates/views/user-profile-manager.htm:166 -msgid "First name" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:176 -msgid "" -"Arches uses your name and phone number to make it easier for other users to " -"find and work with you." -msgstr "" - -#: app/templates/views/user-profile-manager.htm:186 -#: app/templates/views/user-profile-manager.htm:187 -msgid "Last name" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:202 -msgid "Phone Number (optional)" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:215 -msgid "Contact Email" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:226 -msgid "" -"Arches uses your e-maill to alert you to projects and tasks assigned to you." -msgstr "" - -#: app/templates/views/user-profile-manager.htm:256 -msgid "Click here to update Two-Factor Authentication settings via email" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:346 -msgid "Notification Settings" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:354 -msgid "Trigger" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:355 -msgid "Email Notification" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:356 -msgid "Web Notification" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:365 -#: app/templates/views/user-profile-manager.htm:370 -msgid "Enable" -msgstr "" - -#: app/templates/views/user-profile-manager.htm:375 -msgid "Exporting Search Results" -msgstr "" - -#: app/utils/data_management/resources/formats/csvfile.py:825 -#, python-brace-format -msgid "No datatype detected for {0}" -msgstr "" - -#: app/utils/data_management/resources/formats/csvfile.py:1132 -#, python-brace-format -msgid "Total resources saved: {save_count}" -msgstr "" - -#: app/utils/data_management/resources/formats/format.py:47 -#, python-brace-format -msgid "{0} of {1} resources saved" -msgstr "" - -#: app/utils/data_management/resources/formats/format.py:57 -#, python-brace-format -msgid "{0} of {1} relations saved" -msgstr "" - -#: app/utils/data_management/resources/formats/format.py:182 -msgid "No import errors" -msgstr "" - -#: app/utils/data_management/resources/formats/format.py:186 -msgid "" -"***** Errors occured during import. Some data may not have been imported. " -"For more information, check resource import error log: " -msgstr "" - -#: app/utils/data_management/resources/formats/format.py:217 -#, python-brace-format -msgid " {0}: {1}\n" -msgstr "" - -#: app/utils/data_management/resources/formats/format.py:269 -msgid "" -"Must supply either a graph id or a list of resource instance ids to export" -msgstr "" - -#: app/utils/data_management/sparql_providers/aat_provider.py:34 -msgid "Getty AAT" -msgstr "" - -#: app/utils/data_management/sparql_providers/aat_provider.py:90 -#, python-format -msgid "" -"Error in SPARQL query:
Test this query directly by " -"pasting the query below into the Getty's own SPARQL " -"endpoint at http://" -"vocab.getty.edu/sparql
%s
Query " -"returned 0 results, please check the query for " -"errors. You may need to add the appropriate " -"languages into the database for this query to work

" -msgstr "" - -#: app/utils/forms.py:64 -msgid "" -"This email address has already been registered with the " -"system. If you forgot your password, click the " -"'exit' link below and go to the login page to reset your password." -msgstr "" - -#: app/utils/forms.py:109 -msgid "Email" -msgstr "" - -#: app/utils/forms.py:113 -msgid "New password" -msgstr "" - -#: app/utils/forms.py:115 -msgid "Re-enter new password" -msgstr "" - -#: app/utils/password_validation.py:12 -#, python-brace-format -msgid "Be longer than {0} characters" -msgstr "" - -#: app/utils/password_validation.py:20 -msgid "Have at least 1 letter" -msgstr "" - -#: app/utils/password_validation.py:37 -msgid "Your password must contain at least one special character" -msgstr "" - -#: app/utils/password_validation.py:43 -msgid "Have at least 1 special character" -msgstr "" - -#: app/utils/password_validation.py:56 -msgid "Your password must contain at least one number" -msgstr "" - -#: app/utils/password_validation.py:60 -msgid "Have at least 1 number" -msgstr "" - -#: app/utils/password_validation.py:74 -msgid "Your password must contain both upper and lower case letters" -msgstr "" - -#: app/utils/password_validation.py:78 -msgid "Have least 1 upper and lower case character" -msgstr "" - -#: app/utils/response.py:56 -msgid "Could not return JSON Response" -msgstr "" - -#: app/utils/task_management.py:28 -msgid "Celery worker connection failed. Reattempting" -msgstr "" - -#: app/utils/task_management.py:30 -msgid "" -"Failed to connect to celery due to a BrokenPipeError/ConnectionResetError" -msgstr "" - -#: app/utils/task_management.py:33 -msgid "A celery broker is running, but a celery worker is not available" -msgstr "" - -#: app/utils/task_management.py:37 -msgid "Unable to connect to a celery broker" -msgstr "" - -#: app/views/api.py:79 -msgid "Failed to dispatch Kibana proxy" -msgstr "" - -#: app/views/api.py:81 -msgid "KibanaProxy failed" -msgstr "" - -#: app/views/api.py:105 -msgid "Failed to create API request" -msgstr "" - -#: app/views/api.py:121 app/views/api.py:797 app/views/resource.py:236 -#: app/views/resource.py:603 -msgid "Unnamed Resource" -msgstr "" - -#: app/views/api.py:483 -#, python-brace-format -msgid "The specified resource '{0}' does not exist. JSON-LD export failed." -msgstr "" - -#: app/views/api.py:793 app/views/resource.py:232 -msgid "New Resource" -msgstr "" - -#: app/views/api.py:1275 -msgid "Tile not found." -msgstr "" - -#: app/views/api.py:1307 -msgid "No nodegroup matching query parameters found." -msgstr "" - -#: app/views/api.py:1356 -msgid "No nodes matching query parameters found." -msgstr "" - -#: app/views/api.py:1364 -#, python-format -msgid "No graph found for graphid %s" -msgstr "" - -#: app/views/api.py:1424 -msgid "User does not have permission to edit this node." -msgstr "" - -#: app/views/auth.py:132 app/views/auth.py:155 app/views/auth.py:212 -msgid "User signup has been disabled. Please contact your administrator." -msgstr "" - -#: app/views/auth.py:169 -msgid "Signup for Arches" -msgstr "" - -#: app/views/auth.py:172 -msgid "" -"Thanks for your interest in Arches. Click on link below " -"to confirm your email address! Use your email address to login." -msgstr "" - -#: app/views/auth.py:176 -msgid "" -"This link expires in 24 hours. If you can't get to it before " -"then, don't worry, you can always try again with the " -"same email address." -msgstr "" - -#: app/views/auth.py:185 -msgid "Welcome to Arches!" -msgstr "" - -#: app/views/auth.py:190 -#, python-format -msgid "" -"An email has been sent to
%s
with a link to " -"activate your account" -msgstr "" - -#: app/views/auth.py:232 -msgid "The signup link has expired, please try signing up again. Thanks!" -msgstr "" - -#: app/views/auth.py:255 -msgid "Invalid password" -msgstr "" - -#: app/views/auth.py:257 -msgid "New password and confirmation must match" -msgstr "" - -#: app/views/auth.py:268 -msgid "Password successfully updated" -msgstr "" - -#: app/views/auth.py:308 app/views/auth.py:326 -msgid "Make sure to set your OAUTH_CLIENT_ID in settings.py" -msgstr "" - -#: app/views/auth.py:372 -msgid "Update Two-Factor Authentication Settings" -msgstr "" - -#: app/views/auth.py:374 -msgid "Click on link below to update your two-factor authentication settings." -msgstr "" - -#: app/views/auth.py:376 -msgid "" -"This link expires in 15 minutes. If you did not request this " -"change, contact your Administrator immediately." -msgstr "" - -#: app/views/auth.py:385 -msgid "Arches Two-Factor Authentication" -msgstr "" - -#: app/views/auth.py:390 -msgid "" -"There has been error sending an email to this address. Please contact your " -"system administrator." -msgstr "" - -#: app/views/concept.py:68 -msgid "Using the RDM" -msgstr "" - -#: app/views/concept.py:238 -msgid "Unable to Load SKOS File" -msgstr "" - -#: app/views/concept.py:238 -msgid "There was an issue saving the contents of the file to Arches. " -msgstr "" - -#: app/views/concept.py:274 -msgid "Unable to Delete" -msgstr "" - -#: app/views/concept.py:274 -msgid "" -"This concept or one of it's subconcepts is already in use by an existing " -"resource." -msgstr "" - -#: app/views/concept.py:327 -msgid "Success" -msgstr "" - -#: app/views/concept.py:327 -msgid "Collection successfully created from the selected concept" -msgstr "" - -#: app/views/concept.py:329 -msgid "Unable to Make Collection" -msgstr "" - -#: app/views/concept.py:329 -msgid "Unable to make a collection from the selected concept." -msgstr "" - -#: app/views/graph.py:154 -msgid "Using the Arches Designer" -msgstr "" - -#: app/views/graph.py:171 -#, python-brace-format -msgid "" -"No namespaces appear to be associated with {ontology.ontologyid} in the " -"ontologies table. This is not a problem as long as all necessary namespaces " -"are included in the ONTOLOGY_NAMESPACES setting." -msgstr "" - -#: app/views/graph.py:215 -msgid "Branch Library" -msgstr "" - -#: app/views/graph.py:215 -msgid "Find a graph branch" -msgstr "" - -#: app/views/graph.py:261 -msgid "Designing a Resource Model" -msgstr "" - -#: app/views/graph.py:263 -msgid "Designing a Branch" -msgstr "" - -#: app/views/graph.py:425 -msgid "Elasticsearch indexing error" -msgstr "" - -#: app/views/graph.py:427 -msgid "" -"If you want to change the datatype of an existing node.\n" -" Delete and then re-create the node, or export the branch " -"then edit the datatype and re-import the branch." -msgstr "" - -#: app/views/graph.py:546 -msgid "Managing Functions" -msgstr "" - -#: app/views/manifest_manager.py:300 -msgid "IIIF server proxy not configured" -msgstr "" - -#: app/views/manifest_manager.py:306 -msgid "Manifest Validation Error" -msgstr "" - -#: app/views/map.py:134 -msgid "Tileserver proxy not configured" -msgstr "" - -#: app/views/resource.py:92 -msgid "Creating Resources" -msgstr "" - -#: app/views/resource.py:350 -msgid "Managing System Settings" -msgstr "" - -#: app/views/resource.py:352 -msgid "Using the Resource Editor" -msgstr "" - -#: app/views/resource.py:357 -msgid "Unable to Delete Resource" -msgstr "" - -#: app/views/resource.py:358 -msgid "" -"User does not have permissions to delete this instance because the instance " -"or its data is restricted" -msgstr "" - -#: app/views/resource.py:367 -msgid "Unable to delete. Please verify the model is not currently published." -msgstr "" - -#: app/views/resource.py:547 app/views/resource.py:553 -msgid "Resource Created" -msgstr "" - -#: app/views/resource.py:548 -msgid "Resource Deleted" -msgstr "" - -#: app/views/resource.py:549 -msgid "Tile Deleted" -msgstr "" - -#: app/views/resource.py:550 -msgid "Tile Created" -msgstr "" - -#: app/views/resource.py:551 -msgid "Tile Updated" -msgstr "" - -#: app/views/resource.py:552 -msgid "Edit Deleted" -msgstr "" - -#: app/views/resource.py:771 -msgid "Failed to fetch resource instance descriptors" -msgstr "" - -#: app/views/resource.py:788 -msgid "No active report template is available for this resource." -msgstr "" - -#: app/views/resource.py:903 -msgid "Unable to delete. Relationship does not exist" -msgstr "" - -#: app/views/resource.py:966 app/views/resource.py:980 app/views/tile.py:151 -msgid "Unable to save. Please verify the model is not currently published." -msgstr "" - -#: app/views/search.py:109 -msgid "Searching the Database" -msgstr "" - -#: app/views/search.py:228 -#, python-brace-format -msgid "" -"Your search exceeds the {download_limit} instance download " -"limit. Anonymous users cannot run an export exceeding this " -"limit. Please sign in with your {app_name} account or " -"refine your search" -msgstr "" - -#: app/views/search.py:244 -#, python-brace-format -msgid "" -"{total} instances have been submitted for export. Click " -"the Bell icon to check for a link to download your data" -msgstr "" - -#: app/views/search.py:249 -#, python-brace-format -msgid "" -"Your search exceeds the {download_limit} instance download limit. Please " -"refine your search" -msgstr "" - -#: app/views/search.py:270 -msgid "" -"Either no instances were identified for export or no resources have " -"exportable geometry nodes Please confirm that the models of " -"instances you would like to export have geometry nodes and " -"that those nodes are set as exportable" -msgstr "" - -#: app/views/search.py:401 -msgid "There was an error retrieving the search results" -msgstr "" - -#: app/views/search.py:500 -msgid "Downloading" -msgstr "" - -#: app/views/search.py:502 -msgid "The requested file is no longer available" -msgstr "" - -#: app/views/tile.py:72 -msgid "Saving tile failed" -msgstr "" - -#: app/views/tile.py:124 -msgid "Unable to save. Please verify the model is currently unpublished." -msgstr "" - -#: app/views/tile.py:133 app/views/tile.py:235 -msgid "This tile is no longer available" -msgstr "" - -#: app/views/tile.py:133 -msgid "It was likely deleted by another user" -msgstr "" - -#: app/views/tile.py:148 -msgid "Unable to save. Please verify your input is valid" -msgstr "" - -#: app/views/tile.py:154 -msgid "Unable to save." -msgstr "" - -#: app/views/tile.py:181 app/views/tile.py:184 app/views/tile.py:259 -#: app/views/tile.py:261 app/views/tile.py:265 app/views/tile.py:286 -msgid "Request Failed" -msgstr "" - -#: app/views/tile.py:181 -msgid "Unable to Save. Verify model status is active" -msgstr "" - -#: app/views/tile.py:184 app/views/tile.py:259 -msgid "Permission Denied" -msgstr "" - -#: app/views/tile.py:235 -msgid "It was likely already deleted by another user" -msgstr "" - -#: app/views/tile.py:261 -msgid "Unable to delete. Verify model status is active" -msgstr "" - -#: app/views/tile.py:265 -msgid "You do not have permissions to delete a tile with authoritative data." -msgstr "" - -#: app/views/user.py:47 -msgid "Not yet logged in" -msgstr "" - -#: app/views/user.py:110 app/views/user.py:145 -msgid "Profile Editing" -msgstr "" - -#: app/views/user.py:167 -msgid "Your " -msgstr "" - -#: management/commands/load_ontology.py:84 -msgid "" -"You must supply an ontology_config.json within your ontology source " -"directory." -msgstr "" - -#: management/commands/load_ontology.py:85 -#, python-brace-format -msgid "'{config_file}' was not found." -msgstr "" - -#: management/commands/load_ontology.py:89 -msgid "You must supply a version number using the -vn/--version argument." -msgstr "" From a7eba0f4bfa52a297da6aa22d7644659e123f827 Mon Sep 17 00:00:00 2001 From: Christopher Byrd Date: Thu, 9 May 2024 09:25:08 -0700 Subject: [PATCH 173/242] nit #10774 --- releases/7.6.0.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/releases/7.6.0.md b/releases/7.6.0.md index 4e88bc44139..35f5db47e43 100644 --- a/releases/7.6.0.md +++ b/releases/7.6.0.md @@ -3,9 +3,15 @@ Arches 7.6.0 Release Notes ### Major enhancements -- An interface for contributing front-end features in Vue is now provided via the ``createVueApplication()`` function. A minimal example is available in the [Arches Vue Integration Styleguide](https://github.com/archesproject/arches-docs/blob/master/docs/developing/vue/arches-vue-integration.md). +- An interface for developing front-end features in Vue is now provided via the ``createVueApplication()`` function. A minimal example is available in the [Arches Vue Integration Styleguide](https://github.com/archesproject/arches-docs/blob/master/docs/developing/vue/arches-vue-integration.md). The ``createVueApplication()`` function is experimental in 7.6. It currently registers all available ``PrimeVue`` services and directives, such as [toast (error messaging) plugins](https://primevue.org/toast/), [tooltip animations](https://primevue.org/tooltip/), and more. Over time, if some of these features do not see significant use in core Arches (or if registering them leads to a performance drag), they may be dropped from the ``createVueApplication()`` wrapper. Implementers may always register any needed plugins/services in their own Vue applications. (Note: The vast majority of ``PrimeVue``'s functionality does not require these services or directives.) -- The ``createVueApplication()`` function is experimental in 7.6. It currently registers all available ``PrimeVue`` services and directives, such as [toast (error messaging) plugins](https://primevue.org/toast/), [tooltip animations](https://primevue.org/tooltip/), and more. Over time, if some of these features do not see significant use in core Arches (or if registering them leads to a performance drag), they may be dropped from the ``createVueApplication()`` wrapper. Implementers may always register any needed plugins/services in their own Vue applications. (Note: The vast majority of ``PrimeVue``'s functionality does not require these services or directives.) +- Adds Vue internationalization (i18n) + +- Adds TypeScript support + +- Adds frontend testing and Python testing for projects + +- Adds Github actions to build applications, run tests, and compare coverage between branches for projects. - Plugins now support the configuration boolean `is_standalone`. Standalone plugins do not appear in the sidebar, and do not display the sidebar or application header. From d3c02f17502707a88f7e33adaf2742bd8f630671 Mon Sep 17 00:00:00 2001 From: Galen Date: Thu, 9 May 2024 15:39:01 -0700 Subject: [PATCH 174/242] Revert "imports named Celery filesize threshold setting in etl module for relevant logic, re #10381" This reverts commit c3d5380d6d58f1a43cd636ff3a76a0497f967067. --- arches/app/etl_modules/import_single_csv.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arches/app/etl_modules/import_single_csv.py b/arches/app/etl_modules/import_single_csv.py index 80372ffb772..efb5e1b82f9 100644 --- a/arches/app/etl_modules/import_single_csv.py +++ b/arches/app/etl_modules/import_single_csv.py @@ -150,7 +150,7 @@ def write(self, request): temp_dir = os.path.join(settings.UPLOADED_FILES_DIR, "tmp", self.loadid) csv_file_path = os.path.join(temp_dir, csv_file_name) csv_size = default_storage.size(csv_file_path) # file size in byte - use_celery_threshold = settings.CELERY_FILE_SIZE_THRESHOLD + use_celery_threshold = 500 # 500 bytes if csv_size > use_celery_threshold: response = self.run_load_task_async(request, self.loadid) From e4ef63306fbcd240ce3e041a62222d32dbe3318a Mon Sep 17 00:00:00 2001 From: Galen Date: Thu, 9 May 2024 15:39:14 -0700 Subject: [PATCH 175/242] Revert "creates new setting for celery threshold of file size re #10381" This reverts commit 39414a3b8c251c6944b52d7915f4883583da8d65. --- arches/settings.py | 1 - 1 file changed, 1 deletion(-) diff --git a/arches/settings.py b/arches/settings.py index b8479cd3051..c795de38ce3 100644 --- a/arches/settings.py +++ b/arches/settings.py @@ -663,7 +663,6 @@ CELERY_TASK_SERIALIZER = "json" CELERY_SEARCH_EXPORT_EXPIRES = 24 * 3600 # seconds CELERY_SEARCH_EXPORT_CHECK = 3600 # seconds -CELERY_FILE_SIZE_THRESHOLD = 500 # bytes CELERY_BEAT_SCHEDULE = { "delete-expired-search-export": {"task": "arches.app.tasks.delete_file", "schedule": CELERY_SEARCH_EXPORT_CHECK}, From fa797dcffbd6f47e301f666bfabda9bf0b5a8a94 Mon Sep 17 00:00:00 2001 From: Galen Date: Thu, 9 May 2024 15:51:20 -0700 Subject: [PATCH 176/242] leverages ETL module config for celery byte size limit, re #10381 --- arches/app/etl_modules/import_single_csv.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/arches/app/etl_modules/import_single_csv.py b/arches/app/etl_modules/import_single_csv.py index efb5e1b82f9..b3bdefdfe38 100644 --- a/arches/app/etl_modules/import_single_csv.py +++ b/arches/app/etl_modules/import_single_csv.py @@ -10,7 +10,7 @@ from django.db.models.functions import Lower from django.utils.translation import gettext as _ from arches.app.datatypes.datatypes import DataTypeFactory -from arches.app.models.models import GraphModel, Node, NodeGroup +from arches.app.models.models import GraphModel, Node, NodeGroup, ETLModule from arches.app.models.system_settings import settings import arches.app.tasks as tasks from arches.app.utils.betterJSONSerializer import JSONSerializer @@ -26,6 +26,7 @@ def __init__(self, request=None, loadid=None): self.loadid = request.POST.get("load_id") if request else loadid self.userid = request.user.id if request else None self.moduleid = request.POST.get("module") if request else None + self.config = ETLModule.objects.get(pk=self.moduleid).config if self.moduleid else {} self.datatype_factory = DataTypeFactory() self.node_lookup = {} self.blank_tile_lookup = {} @@ -150,7 +151,7 @@ def write(self, request): temp_dir = os.path.join(settings.UPLOADED_FILES_DIR, "tmp", self.loadid) csv_file_path = os.path.join(temp_dir, csv_file_name) csv_size = default_storage.size(csv_file_path) # file size in byte - use_celery_threshold = 500 # 500 bytes + use_celery_threshold = self.config.get("celeryByteSizeLimit", 5000) if csv_size > use_celery_threshold: response = self.run_load_task_async(request, self.loadid) From bcdbdbee7ab546a6f757970324cdc184e6ce368b Mon Sep 17 00:00:00 2001 From: Jacob Walls Date: Mon, 13 May 2024 10:22:24 -0400 Subject: [PATCH 177/242] Fix whatisthis command Regression in e11fdde (7.4) --- .../models/migrations/10710_fix_whatisthis.py | 80 +++++++++++++++++++ arches/management/commands/whatisthis.py | 24 +++--- releases/7.6.0.md | 1 + tests/commands/__init__.py | 0 tests/commands/test_whatisthis.py | 17 ++++ 5 files changed, 110 insertions(+), 12 deletions(-) create mode 100644 arches/app/models/migrations/10710_fix_whatisthis.py create mode 100644 tests/commands/__init__.py create mode 100644 tests/commands/test_whatisthis.py diff --git a/arches/app/models/migrations/10710_fix_whatisthis.py b/arches/app/models/migrations/10710_fix_whatisthis.py new file mode 100644 index 00000000000..957b691e087 --- /dev/null +++ b/arches/app/models/migrations/10710_fix_whatisthis.py @@ -0,0 +1,80 @@ +# Generated by Django 4.2.13 on 2024-05-13 09:06 + +import textwrap + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("models", "10709_refresh_geos_by_transaction"), + ] + + forward_sql = textwrap.dedent( + # Single change is uuid() in SELECT + """ + DROP VIEW IF EXISTS vw_annotations; + + CREATE OR REPLACE VIEW vw_annotations AS + SELECT uuid(json_array_elements(t.tiledata::json->n.nodeid::text->'features')->>'id') as feature_id, + t.tileid, + t.tiledata, + t.resourceinstanceid, + t.nodegroupid, + n.nodeid, + json_array_elements(t.tiledata::json->n.nodeid::text->'features')::jsonb as feature, + json_array_elements(t.tiledata::json->n.nodeid::text->'features')->'properties'->>'canvas' as canvas + FROM tiles t + LEFT JOIN nodes n ON t.nodegroupid = n.nodegroupid + WHERE ( + ( + SELECT count(*) AS count + FROM jsonb_object_keys(t.tiledata) jsonb_object_keys(jsonb_object_keys) + WHERE ( + jsonb_object_keys.jsonb_object_keys IN ( + SELECT n_1.nodeid::text AS nodeid + FROM nodes n_1 + WHERE n_1.datatype = 'annotation'::text + ) + ) + ) + ) > 0 + AND n.datatype = 'annotation'::text; + """ + ) + + reverse_sql = textwrap.dedent(""" + DROP VIEW IF EXISTS vw_annotations; + + CREATE OR REPLACE VIEW vw_annotations AS + SELECT json_array_elements(t.tiledata::json->n.nodeid::text->'features')->>'id' as feature_id, + t.tileid, + t.tiledata, + t.resourceinstanceid, + t.nodegroupid, + n.nodeid, + json_array_elements(t.tiledata::json->n.nodeid::text->'features')::jsonb as feature, + json_array_elements(t.tiledata::json->n.nodeid::text->'features')->'properties'->>'canvas' as canvas + FROM tiles t + LEFT JOIN nodes n ON t.nodegroupid = n.nodegroupid + WHERE ( + ( + SELECT count(*) AS count + FROM jsonb_object_keys(t.tiledata) jsonb_object_keys(jsonb_object_keys) + WHERE ( + jsonb_object_keys.jsonb_object_keys IN ( + SELECT n_1.nodeid::text AS nodeid + FROM nodes n_1 + WHERE n_1.datatype = 'annotation'::text + ) + ) + ) + ) > 0 + AND n.datatype = 'annotation'::text; + """ + ) + + operations = [ + migrations.RunSQL(forward_sql, reverse_sql) + ] diff --git a/arches/management/commands/whatisthis.py b/arches/management/commands/whatisthis.py index adc16eea6a0..2d87b25a13a 100644 --- a/arches/management/commands/whatisthis.py +++ b/arches/management/commands/whatisthis.py @@ -1,8 +1,8 @@ -from django.core import management -from django.core.management.base import BaseCommand, CommandError -import django.apps import uuid +from django.core.management.base import BaseCommand +import django.apps + class Command(BaseCommand): @@ -20,7 +20,7 @@ def find_uuid(self, in_uuid): try: val = uuid.UUID(in_uuid, version=4) except ValueError: - print(" -- this is not a valid uuid") + self.stdout.write(" -- this is not a valid uuid") return False ## search all models and see if the UUID matches an existing object @@ -35,19 +35,19 @@ def find_uuid(self, in_uuid): ## return False if nothing was found if not objs: - print(" -- this uuid doesn't match any objects in your database") + self.stdout.write(" -- this uuid doesn't match any objects in your database") return False ## print summary of found objects - print(80 * "=") - print("This UUID is the primary key for {} object{}:".format(len(objs), "s" if len(objs) > 1 else "")) + self.stdout.write(80 * "=") + self.stdout.write("This UUID is the primary key for {} object{}:".format(len(objs), "s" if len(objs) > 1 else "")) for o in objs: - print(80 * "-") - print(o) + self.stdout.write(80 * "-") + self.stdout.write(o) keys = list(vars(o).keys()) keys.sort() for k in keys: - print(k) - print(" {}".format(vars(o)[k])) - print(80 * "=") + self.stdout.write(k) + self.stdout.write(" {}".format(vars(o)[k])) + self.stdout.write(80 * "=") return objs diff --git a/releases/7.6.0.md b/releases/7.6.0.md index 6bfbd281348..94159273d84 100644 --- a/releases/7.6.0.md +++ b/releases/7.6.0.md @@ -18,6 +18,7 @@ Arches 7.6.0 Release Notes - 10490 Fixes an issue where webpack receives multiple build calls when running in a container - 10501 Adds Vue i18n - 10710 Workflow history API: return 400 (instead of 401) for attempts to update completed workflows +- 10083 Fix whatisthis command - 9768 Filter out tiles created during resource creation from activity stream API - 9769 Ensure resource creation edit log timestamps precede resource update timestamps - 10738 Adds Github action for comparing test coverage between branches and rejecting branches that lower test coverage diff --git a/tests/commands/__init__.py b/tests/commands/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/commands/test_whatisthis.py b/tests/commands/test_whatisthis.py new file mode 100644 index 00000000000..533b72a34d5 --- /dev/null +++ b/tests/commands/test_whatisthis.py @@ -0,0 +1,17 @@ +# these tests can be run from the command line via +# python manage.py test tests.commands.test_whatisthis --settings="tests.test_settings" + +import uuid +from io import StringIO + +from django.core.management import call_command + +from tests.base_test import ArchesTestCase + +class WhatIsThisTests(ArchesTestCase): + arbitrary_uuid = uuid.uuid4() + + def test_no_match(self): + out = StringIO() + call_command("whatisthis", str(self.arbitrary_uuid), stdout=out) + self.assertIn("doesn't match", out.getvalue()) From dcd07ae9e79c63675a10eb4c09d139517b4a8695 Mon Sep 17 00:00:00 2001 From: James Kemper Date: Fri, 3 May 2024 12:56:07 -0600 Subject: [PATCH 178/242] fix json import to maintain provided sortorder (cherry picked from commit ceace6058fce1df24e8803f7366aa9ffba312fe1) --- arches/app/utils/data_management/resources/formats/archesfile.py | 1 + 1 file changed, 1 insertion(+) diff --git a/arches/app/utils/data_management/resources/formats/archesfile.py b/arches/app/utils/data_management/resources/formats/archesfile.py index e436bceee2c..a8f671b99fb 100644 --- a/arches/app/utils/data_management/resources/formats/archesfile.py +++ b/arches/app/utils/data_management/resources/formats/archesfile.py @@ -176,6 +176,7 @@ def update_or_create_tile(src_tile): "resourceinstance": resourceinstance, "parenttile_id": str(src_tile["parenttile_id"]) if src_tile["parenttile_id"] else None, "nodegroup_id": str(src_tile["nodegroup_id"]) if src_tile["nodegroup_id"] else None, + "sortorder": str(src_tile["sortorder"]) if src_tile["sortorder"] else 0, "data": src_tile["data"], } new_values = {"tileid": uuid.UUID(str(src_tile["tileid"]))} From ccf42ccf67fa4c3f46894160a22c5b6ab393afbc Mon Sep 17 00:00:00 2001 From: James Kemper Date: Mon, 6 May 2024 14:16:37 -0600 Subject: [PATCH 179/242] correct cast for sortorder to int() (cherry picked from commit e8810b893f17354e1cde2006ccfe50650aa06f98) --- .../app/utils/data_management/resources/formats/archesfile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arches/app/utils/data_management/resources/formats/archesfile.py b/arches/app/utils/data_management/resources/formats/archesfile.py index a8f671b99fb..42525d6ea2c 100644 --- a/arches/app/utils/data_management/resources/formats/archesfile.py +++ b/arches/app/utils/data_management/resources/formats/archesfile.py @@ -176,7 +176,7 @@ def update_or_create_tile(src_tile): "resourceinstance": resourceinstance, "parenttile_id": str(src_tile["parenttile_id"]) if src_tile["parenttile_id"] else None, "nodegroup_id": str(src_tile["nodegroup_id"]) if src_tile["nodegroup_id"] else None, - "sortorder": str(src_tile["sortorder"]) if src_tile["sortorder"] else 0, + "sortorder": int(src_tile["sortorder"]) if src_tile["sortorder"] else 0, "data": src_tile["data"], } new_values = {"tileid": uuid.UUID(str(src_tile["tileid"]))} From 47f032ffee232b2d59b610d9e4d077c7b6b1d397 Mon Sep 17 00:00:00 2001 From: Jacob Walls Date: Mon, 13 May 2024 09:47:03 -0400 Subject: [PATCH 180/242] Add changelog --- releases/6.2.8.md | 51 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 releases/6.2.8.md diff --git a/releases/6.2.8.md b/releases/6.2.8.md new file mode 100644 index 00000000000..a6bfe98b21f --- /dev/null +++ b/releases/6.2.8.md @@ -0,0 +1,51 @@ +Arches 6.2.8 release notes +-------------------------- +### Bug Fixes and Enhancements + +- Preserve tile sortorder during `import_business_data` (from JSON) #10874 + +### Dependency changes: +``` +Python: + Upgraded: + Django 3.2.24 -> 3.2.25 + Added: + None +``` + +### Upgrading Arches +1. You must be upgraded to at least version 6.2.0 before proceeding. + +2. Upgrade to Arches 6.2.8 + + If using a virtual environment, be sure to activate it: + + pip install --upgrade arches==6.2.8 + +3. Update your Javascript dependencies + + Navigate to the directory with your project's package.json file. This is located in the same directory as your project's settings.py file. + Ensure your arches dependency points to either `#archesproject/arches#dev/6.2.x` or `#archesproject/arches#stable/6.2.8`.\ + For example: + + "dependencies": { + "arches": "archesproject/arches#dev/6.2.x" + } + + If upgrading from version <= 6.2.3 run: + + yarn install + +4. If you are running Arches on Apache, be sure to run: + + ``` + python manage.py collectstatic + ``` + and restart your server. + ``` + sudo service apache2 reload + ``` + +5. If you are running Celery, you should also restart your Celery worker(s). The process for doing this depends on how Celery is being run. + +6. **Important**: As of version 6.2.6, Arches supports rate limiting on authentication endpoints to help protect your system. In order to fully take advantage of this feature, you must have your default cache configured using Memcached or Redis. See the Django docs more information on [cache configuration](https://docs.djangoproject.com/en/3.2/topics/cache/#setting-up-the-cache). From fc16daf299f9cd58913371c159fb1b1e95b8075c Mon Sep 17 00:00:00 2001 From: jkemper-pca <80784391+jkemper-pca@users.noreply.github.com> Date: Mon, 13 May 2024 13:57:26 -0600 Subject: [PATCH 181/242] Move the i18n/ url outside of the i18n_patterns function as per the Django docs (#10754) --- .../arches-templates/project_name/urls.py-tpl | 1 + arches/urls.py | 1 - releases/7.6.0.md | 20 ++++++++++++++----- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/arches/install/arches-templates/project_name/urls.py-tpl b/arches/install/arches-templates/project_name/urls.py-tpl index 46a478cd63a..14d33f54de4 100644 --- a/arches/install/arches-templates/project_name/urls.py-tpl +++ b/arches/install/arches-templates/project_name/urls.py-tpl @@ -9,3 +9,4 @@ urlpatterns = [ # if settings.SHOW_LANGUAGE_SWITCH is True: # urlpatterns = i18n_patterns(*urlpatterns) +# urlpatterns.append(path("i18n/", include("django.conf.urls.i18n"))) \ No newline at end of file diff --git a/arches/urls.py b/arches/urls.py index f9a4bdc0e22..46a14a4c80e 100644 --- a/arches/urls.py +++ b/arches/urls.py @@ -288,7 +288,6 @@ # re_path(r'^admin/doc/', include('django.contrib.admindocs.urls')), # Uncomment the next line to enable the admin: re_path(r"^admin/", admin.site.urls), - path("i18n/", include("django.conf.urls.i18n")), re_path(r"^password_reset/$",PasswordResetView.as_view(),name="password_reset",), re_path(r"^password_reset/done/$", auth_views.PasswordResetDoneView.as_view(), name="password_reset_done"), path( diff --git a/releases/7.6.0.md b/releases/7.6.0.md index 6bfbd281348..324b78dc25a 100644 --- a/releases/7.6.0.md +++ b/releases/7.6.0.md @@ -27,6 +27,7 @@ Arches 7.6.0 Release Notes - 9191 Adds unlocalized string datatype - 10781 Graph.delete_instances() now uses BulkDataDeletion - 10665 Return resourceid in ActivityStream rather than resource url +- 10754 Move the i18n/ url outside of the i18n_patterns function ### Dependency changes ``` @@ -202,17 +203,26 @@ Minor incompatibilities: }, } ``` +9. In urls.py: + 1. Update SHOW_LANGUAGE_SWITCH to the following: -9. Run `python manage.py updateproject` + *Note: If the previous code was uncommented in your project make sure to uncomment the new code.* + ``` + # if settings.SHOW_LANGUAGE_SWITCH is True: + # urlpatterns = i18n_patterns(*urlpatterns) + # urlpatterns.append(path("i18n/", include("django.conf.urls.i18n"))) + ``` + +10. Run `python manage.py updateproject` -10. Navigate to the directory with your project's package.json file. Then run: +11. Navigate to the directory with your project's package.json file. Then run: ``` yarn install ``` -11. Start your application server in a separate terminal if it's not already running. +12. Start your application server in a separate terminal if it's not already running. -12. In the same terminal window where you ran `yarn` ( on the same level as `package.json` ): +13. In the same terminal window where you ran `yarn` ( on the same level as `package.json` ): 1. Run `yarn gettext:extract` followed by `yarn gettext:compile`. This will generate i18n files in your `locale` directory. Even if you're not planning on internationalizing your project, it's important to have these files for creating Vue components. @@ -225,7 +235,7 @@ Minor incompatibilities: - `yarn build_production` This builds a production bundle. **takes up to 2hrs depending on resources** - Alternatively you can run `python manage.py build_production`. This will create a production bundle of frontend assessts and also call `collectstatic`. -13. If you are running Arches on Apache, be sure to run: +14. If you are running Arches on Apache, be sure to run: ``` collectstatic From ffaea74e487d5524e7a2ec5b9d353e591d13ab16 Mon Sep 17 00:00:00 2001 From: Jacob Walls Date: Tue, 14 May 2024 08:54:21 -0400 Subject: [PATCH 182/242] Add changelog re #10874 --- releases/7.5.3.md | 60 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 releases/7.5.3.md diff --git a/releases/7.5.3.md b/releases/7.5.3.md new file mode 100644 index 00000000000..1ab37379e54 --- /dev/null +++ b/releases/7.5.3.md @@ -0,0 +1,60 @@ +Arches 7.5.3 Release Notes +-------------------------- + +### Bug Fixes and Enhancements + +- Preserve tile sortorder during `import_business_data` (from JSON) #10874 + +### Dependency changes: +``` +Python: + + +JavaScript: + +``` + +### Upgrading Arches + +1. Upgrade to version 7.5.0 before proceeding. If upgrading from an earlier version, refer to the upgrade process in the [Version 7.5.0 release notes](https://github.com/archesproject/arches/blob/dev/7.5.x/releases/7.5.0.md) + +2. Upgrade to Arches 7.5.3 + ``` + pip install --upgrade arches==7.5.3 + ``` + +3. Update the JavaScript dependencies and devDependencies: + In the project's `package.json` file change arches from `stable/7.5.0` to `stable/7.5.3`: + ``` + "dependencies": { + "arches": "archesproject/arches#stable/7.5.3", + }, + "devDependencies": { + "arches-dev-dependencies": "archesproject/arches-dev-dependencies#stable/7.5.3" + } + ``` + In in your terminal navigate to the directory with your project's package.json file. Then run: + + yarn install + + +4. Start your application server in a separate terminal if it's not already running. Your webpack build will not complete without your application server running. + +5. In a different terminal navigate to the directory with your project's package.json file, run `yarn start` or `yarn build_development`. This will generate your `media/build` directory. + - If running your project in development: + - `yarn start` will build the frontend of the application and then start a webpack development server + - `yarn build_development` will build a development bundle for the frontend assests of the application -- this should complete in less than 2 minutes + - If running your project in production: + - `yarn build_production` This builds a production bundle. **takes up to 2hrs depending on resources** + - Alternatively you can `cd ..` up a directory and run `python manage.py build_production`. This will create a production bundle of frontend assessts and also call `collectstatic`. + + +6. If you are running Arches on Apache, be sure to run: + + ``` + collectstatic + ``` + and restart your server: + ``` + sudo service apache2 reload + ``` From c1d69d134f1cec73a8cb7ec1abd40fef795d1def Mon Sep 17 00:00:00 2001 From: Samuel Scandrett <119508494+SDScandrettKint@users.noreply.github.com> Date: Tue, 14 May 2024 14:03:05 +0100 Subject: [PATCH 183/242] Add space between icon and text in graph Manage list for items that use span tag. (#10912) --- arches/app/templates/navbar/graph-designer-menu.htm | 6 +++--- releases/7.6.0.md | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/arches/app/templates/navbar/graph-designer-menu.htm b/arches/app/templates/navbar/graph-designer-menu.htm index a130f4dd31b..ed615c5d99f 100644 --- a/arches/app/templates/navbar/graph-designer-menu.htm +++ b/arches/app/templates/navbar/graph-designer-menu.htm @@ -42,7 +42,7 @@
  • - +
    @@ -51,7 +51,7 @@
  • - +
    @@ -89,7 +89,7 @@
  • - +
    diff --git a/releases/7.6.0.md b/releases/7.6.0.md index 324b78dc25a..fbb3bb83c64 100644 --- a/releases/7.6.0.md +++ b/releases/7.6.0.md @@ -23,6 +23,7 @@ Arches 7.6.0 Release Notes - 10738 Adds Github action for comparing test coverage between branches and rejecting branches that lower test coverage - 10842 Adds project-level testing and GitHub test runners - 10699 Allow overriding search_results view +- 10911 Styling fix in resource model manage menu - 10726 Upgrade openpyxl package to 3.1.2 and fixes ETL modules - 9191 Adds unlocalized string datatype - 10781 Graph.delete_instances() now uses BulkDataDeletion From e9567e2982d806c55627c9983fbfe0b7fe299d17 Mon Sep 17 00:00:00 2001 From: Jacob Walls Date: Tue, 14 May 2024 14:24:27 -0400 Subject: [PATCH 184/242] Remove dupe changelog --- releases/7.6.0.md | 1 - 1 file changed, 1 deletion(-) diff --git a/releases/7.6.0.md b/releases/7.6.0.md index 35f5db47e43..272548c53d2 100644 --- a/releases/7.6.0.md +++ b/releases/7.6.0.md @@ -23,7 +23,6 @@ Arches 7.6.0 Release Notes - 10757 moves `node_modules` and `webpack` directories to root - 10558 Combine templates for Arches project and applications and move several dotfiles to root - 10490 Fixes an issue where webpack receives multiple build calls when running in a container -- 10501 Adds Vue i18n - 10710 Workflow history API: return 400 (instead of 401) for attempts to update completed workflows - 9768 Filter out tiles created during resource creation from activity stream API - 9769 Ensure resource creation edit log timestamps precede resource update timestamps From 94de7e751025b46c44292e4fb354e2fd5ff1904d Mon Sep 17 00:00:00 2001 From: Jacob Walls Date: Tue, 14 May 2024 14:29:27 -0400 Subject: [PATCH 185/242] Revert baseUrl change in tsconfig.json Was preventing importing types using @ --- arches/install/arches-templates/tsconfig.json | 2 +- arches/management/commands/updateproject.py | 2 +- tsconfig.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/arches/install/arches-templates/tsconfig.json b/arches/install/arches-templates/tsconfig.json index 8fe3480e74d..58ca2ed70fc 100644 --- a/arches/install/arches-templates/tsconfig.json +++ b/arches/install/arches-templates/tsconfig.json @@ -14,7 +14,7 @@ "esModuleInterop": true, "forceConsistentCasingInFileNames": true, "skipLibCheck": true, - "baseUrl": "**/src/", + "baseUrl": "{{ project_name }}/src/", "paths": { "@/*": [ "*.ts", diff --git a/arches/management/commands/updateproject.py b/arches/management/commands/updateproject.py index 8b3e5d7eb0e..e71ac7b6641 100644 --- a/arches/management/commands/updateproject.py +++ b/arches/management/commands/updateproject.py @@ -169,7 +169,7 @@ def update_to_v7_6(self): path_to_project = os.path.join(settings.APP_ROOT, "..") for relative_file_path in [ - 'gettext.config.js', '.coveragerc', '.gitignore', "tests/test_settings.py", "tests/search_indexes/sample_index_tests.py", "pyproject.toml" + 'gettext.config.js', '.coveragerc', '.gitignore', "tsconfig.json", "tests/test_settings.py", "tests/search_indexes/sample_index_tests.py", "pyproject.toml" ]: # relative to app root directory try: file = open(os.path.join(path_to_project, relative_file_path),'r') diff --git a/tsconfig.json b/tsconfig.json index 8fe3480e74d..feec7e80198 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -14,7 +14,7 @@ "esModuleInterop": true, "forceConsistentCasingInFileNames": true, "skipLibCheck": true, - "baseUrl": "**/src/", + "baseUrl": "./arches/app/src/", "paths": { "@/*": [ "*.ts", From 65a5aedd8188a3a3ef5d0921638dd57e479ec494 Mon Sep 17 00:00:00 2001 From: Jacob Walls Date: Tue, 14 May 2024 14:32:39 -0400 Subject: [PATCH 186/242] Remake yarn.lock with vitest and eslint 9 --- package.json | 2 +- yarn.lock | 1882 +++++++++++++++++++++++++------------------------- 2 files changed, 934 insertions(+), 950 deletions(-) diff --git a/package.json b/package.json index a51b57a7ac4..552a7eab933 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "type": "git" }, "devDependencies": { - "arches-dev-dependencies": "archesproject/arches-dev-dependencies#cbyrd-upgrade-dev-dependencies" + "arches-dev-dependencies": "archesproject/arches-dev-dependencies#dev/7.6.x" }, "dependencies": { "@babel/runtime": "^7.17.2", diff --git a/yarn.lock b/yarn.lock index b81621ab14b..36d91638b94 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,11 +2,6 @@ # yarn lockfile v1 -"@aashutoshrathi/word-wrap@^1.2.3": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" - integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== - "@ampproject/remapping@^2.2.0", "@ampproject/remapping@^2.2.1": version "2.3.0" resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" @@ -15,7 +10,7 @@ "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.24" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.23.5", "@babel/code-frame@^7.24.1", "@babel/code-frame@^7.24.2": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.23.5", "@babel/code-frame@^7.24.2": version "7.24.2" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.2.tgz#718b4b19841809a58b29b68cde80bc5e1aa6d9ae" integrity sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ== @@ -29,41 +24,41 @@ integrity sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ== "@babel/core@^7.24.4": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.4.tgz#1f758428e88e0d8c563874741bc4ffc4f71a4717" - integrity sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg== + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.5.tgz#15ab5b98e101972d171aeef92ac70d8d6718f06a" + integrity sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA== dependencies: "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.24.2" - "@babel/generator" "^7.24.4" + "@babel/generator" "^7.24.5" "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helpers" "^7.24.4" - "@babel/parser" "^7.24.4" + "@babel/helper-module-transforms" "^7.24.5" + "@babel/helpers" "^7.24.5" + "@babel/parser" "^7.24.5" "@babel/template" "^7.24.0" - "@babel/traverse" "^7.24.1" - "@babel/types" "^7.24.0" + "@babel/traverse" "^7.24.5" + "@babel/types" "^7.24.5" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/eslint-parser@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.24.1.tgz#e27eee93ed1d271637165ef3a86e2b9332395c32" - integrity sha512-d5guuzMlPeDfZIbpQ8+g1NaCNuAGBBGNECh0HVqz1sjOeVLh2CEaifuOysCH18URW6R7pqXINvf5PaR/dC6jLQ== +"@babel/eslint-parser@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.24.5.tgz#3b0f7d383a540329a30a6a9937cfc89461d26217" + integrity sha512-gsUcqS/fPlgAw1kOtpss7uhY6E9SFFANQ6EFX5GTvzUwaV0+sGaZWk6xq22MOdeT9wfxyokW3ceCUvOiRtZciQ== dependencies: "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1" eslint-visitor-keys "^2.1.0" semver "^6.3.1" -"@babel/generator@^7.24.1", "@babel/generator@^7.24.4": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.4.tgz#1fc55532b88adf952025d5d2d1e71f946cb1c498" - integrity sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw== +"@babel/generator@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.5.tgz#e5afc068f932f05616b66713e28d0f04e99daeb3" + integrity sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA== dependencies: - "@babel/types" "^7.24.0" + "@babel/types" "^7.24.5" "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.25" jsesc "^2.5.1" @@ -93,19 +88,19 @@ lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.24.1", "@babel/helper-create-class-features-plugin@^7.24.4": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.4.tgz#c806f73788a6800a5cfbbc04d2df7ee4d927cce3" - integrity sha512-lG75yeuUSVu0pIcbhiYMXBXANHrpUPaOfu7ryAzskCgKUHuAxRQI5ssrtmF0X9UXldPlvT0XM/A4F44OXRt6iQ== +"@babel/helper-create-class-features-plugin@^7.24.1", "@babel/helper-create-class-features-plugin@^7.24.4", "@babel/helper-create-class-features-plugin@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.5.tgz#7d19da92c7e0cd8d11c09af2ce1b8e7512a6e723" + integrity sha512-uRc4Cv8UQWnE4NXlYTIIdM7wfFkOqlFztcC/gVXDKohKoVB3OyonfelUBaJzSwpBntZ2KYGF/9S7asCHsXwW6g== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-function-name" "^7.23.0" - "@babel/helper-member-expression-to-functions" "^7.23.0" + "@babel/helper-member-expression-to-functions" "^7.24.5" "@babel/helper-optimise-call-expression" "^7.22.5" "@babel/helper-replace-supers" "^7.24.1" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/helper-split-export-declaration" "^7.24.5" semver "^6.3.1" "@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5": @@ -117,10 +112,10 @@ regexpu-core "^5.3.1" semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.6.1": - version "0.6.1" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.1.tgz#fadc63f0c2ff3c8d02ed905dcea747c5b0fb74fd" - integrity sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA== +"@babel/helper-define-polyfill-provider@^0.6.1", "@babel/helper-define-polyfill-provider@^0.6.2": + version "0.6.2" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz#18594f789c3594acb24cfdb4a7f7b7d2e8bd912d" + integrity sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ== dependencies: "@babel/helper-compilation-targets" "^7.22.6" "@babel/helper-plugin-utils" "^7.22.5" @@ -133,7 +128,7 @@ resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== -"@babel/helper-function-name@^7.22.5", "@babel/helper-function-name@^7.23.0": +"@babel/helper-function-name@^7.23.0": version "7.23.0" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== @@ -148,30 +143,30 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-member-expression-to-functions@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366" - integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA== +"@babel/helper-member-expression-to-functions@^7.23.0", "@babel/helper-member-expression-to-functions@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.5.tgz#5981e131d5c7003c7d1fa1ad49e86c9b097ec475" + integrity sha512-4owRteeihKWKamtqg4JmWSsEZU445xpFRXPEwp44HbgbxdWlUV1b4Agg4lkA806Lil5XM/e+FJyS0vj5T6vmcA== dependencies: - "@babel/types" "^7.23.0" + "@babel/types" "^7.24.5" -"@babel/helper-module-imports@^7.22.15", "@babel/helper-module-imports@^7.24.1", "@babel/helper-module-imports@^7.24.3": +"@babel/helper-module-imports@^7.24.1", "@babel/helper-module-imports@^7.24.3": version "7.24.3" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz#6ac476e6d168c7c23ff3ba3cf4f7841d46ac8128" integrity sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg== dependencies: "@babel/types" "^7.24.0" -"@babel/helper-module-transforms@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" - integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== +"@babel/helper-module-transforms@^7.23.3", "@babel/helper-module-transforms@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.24.5.tgz#ea6c5e33f7b262a0ae762fd5986355c45f54a545" + integrity sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A== dependencies: "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-simple-access" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/helper-validator-identifier" "^7.22.20" + "@babel/helper-module-imports" "^7.24.3" + "@babel/helper-simple-access" "^7.24.5" + "@babel/helper-split-export-declaration" "^7.24.5" + "@babel/helper-validator-identifier" "^7.24.5" "@babel/helper-optimise-call-expression@^7.22.5": version "7.22.5" @@ -180,10 +175,10 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz#945681931a52f15ce879fd5b86ce2dae6d3d7f2a" - integrity sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w== +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.0", "@babel/helper-plugin-utils@^7.24.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.5.tgz#a924607dd254a65695e5bd209b98b902b3b2f11a" + integrity sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ== "@babel/helper-remap-async-to-generator@^7.22.20": version "7.22.20" @@ -203,12 +198,12 @@ "@babel/helper-member-expression-to-functions" "^7.23.0" "@babel/helper-optimise-call-expression" "^7.22.5" -"@babel/helper-simple-access@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" - integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== +"@babel/helper-simple-access@^7.22.5", "@babel/helper-simple-access@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.24.5.tgz#50da5b72f58c16b07fbd992810be6049478e85ba" + integrity sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ== dependencies: - "@babel/types" "^7.22.5" + "@babel/types" "^7.24.5" "@babel/helper-skip-transparent-expression-wrappers@^7.22.5": version "7.22.5" @@ -217,22 +212,22 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" - integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== +"@babel/helper-split-export-declaration@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.5.tgz#b9a67f06a46b0b339323617c8c6213b9055a78b6" + integrity sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q== dependencies: - "@babel/types" "^7.22.5" + "@babel/types" "^7.24.5" -"@babel/helper-string-parser@^7.23.4": +"@babel/helper-string-parser@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz#f99c36d3593db9540705d0739a1f10b5e20c696e" integrity sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ== -"@babel/helper-validator-identifier@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" - integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== +"@babel/helper-validator-identifier@^7.22.20", "@babel/helper-validator-identifier@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz#918b1a7fa23056603506370089bd990d8720db62" + integrity sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA== "@babel/helper-validator-option@^7.23.5": version "7.23.5" @@ -240,45 +235,45 @@ integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== "@babel/helper-wrap-function@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz#15352b0b9bfb10fc9c76f79f6342c00e3411a569" - integrity sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw== + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.24.5.tgz#335f934c0962e2c1ed1fb9d79e06a56115067c09" + integrity sha512-/xxzuNvgRl4/HLNKvnFwdhdgN3cpLxgLROeLDl83Yx0AJ1SGvq1ak0OszTOjDfiB8Vx03eJbeDWh9r+jCCWttw== dependencies: - "@babel/helper-function-name" "^7.22.5" - "@babel/template" "^7.22.15" - "@babel/types" "^7.22.19" + "@babel/helper-function-name" "^7.23.0" + "@babel/template" "^7.24.0" + "@babel/types" "^7.24.5" -"@babel/helpers@^7.24.4": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.4.tgz#dc00907fd0d95da74563c142ef4cd21f2cb856b6" - integrity sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw== +"@babel/helpers@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.5.tgz#fedeb87eeafa62b621160402181ad8585a22a40a" + integrity sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q== dependencies: "@babel/template" "^7.24.0" - "@babel/traverse" "^7.24.1" - "@babel/types" "^7.24.0" + "@babel/traverse" "^7.24.5" + "@babel/types" "^7.24.5" "@babel/highlight@^7.24.2": - version "7.24.2" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.2.tgz#3f539503efc83d3c59080a10e6634306e0370d26" - integrity sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA== + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.5.tgz#bc0613f98e1dd0720e99b2a9ee3760194a704b6e" + integrity sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw== dependencies: - "@babel/helper-validator-identifier" "^7.22.20" + "@babel/helper-validator-identifier" "^7.24.5" chalk "^2.4.2" js-tokens "^4.0.0" picocolors "^1.0.0" -"@babel/parser@^7.24.0", "@babel/parser@^7.24.1", "@babel/parser@^7.24.4": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.4.tgz#234487a110d89ad5a3ed4a8a566c36b9453e8c88" - integrity sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg== +"@babel/parser@^7.24.0", "@babel/parser@^7.24.4", "@babel/parser@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.5.tgz#4a4d5ab4315579e5398a82dcf636ca80c3392790" + integrity sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg== -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.24.4": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.4.tgz#6125f0158543fb4edf1c22f322f3db67f21cb3e1" - integrity sha512-qpl6vOOEEzTLLcsuqYYo8yDtrTocmu2xkGvgNebvPjT9DTtfFYGmgDqY+rBYXNlqL4s9qLDn6xkrJv4RxAPiTA== +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.5.tgz#4c3685eb9cd790bcad2843900fe0250c91ccf895" + integrity sha512-LdXRi1wEMTrHVR4Zc9F8OewC3vdm5h4QB6L71zy6StmYeqGi1b3ttIO8UC+BfZKcH9jdr4aI249rBkm+3+YvHw== dependencies: "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.5" "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.24.1": version "7.24.1" @@ -469,12 +464,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-block-scoping@^7.24.4": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.4.tgz#28f5c010b66fbb8ccdeef853bef1935c434d7012" - integrity sha512-nIFUZIpGKDf9O9ttyRXpHFpKC+X3Y5mtshZONuEUYBomAKoM4y029Jr+uB1bHGPhNmK8YXHevDtKDOLmtRrp6g== +"@babel/plugin-transform-block-scoping@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.5.tgz#89574191397f85661d6f748d4b89ee4d9ee69a2a" + integrity sha512-sMfBc3OxghjC95BkYrYocHL3NaOplrcaunblzwXhGmlPwpmfsxr4vK+mBBt49r+S240vahmv+kUxkeKgs+haCw== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.5" "@babel/plugin-transform-class-properties@^7.24.1": version "7.24.1" @@ -493,18 +488,18 @@ "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-transform-classes@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.1.tgz#5bc8fc160ed96378184bc10042af47f50884dcb1" - integrity sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q== +"@babel/plugin-transform-classes@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.5.tgz#05e04a09df49a46348299a0e24bfd7e901129339" + integrity sha512-gWkLP25DFj2dwe9Ck8uwMOpko4YsqyfZJrOmqqcegeDYEbp7rmn4U6UQZNj08UF6MaX39XenSpKRCvpDRBtZ7Q== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/helper-compilation-targets" "^7.23.6" "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-function-name" "^7.23.0" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.5" "@babel/helper-replace-supers" "^7.24.1" - "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/helper-split-export-declaration" "^7.24.5" globals "^11.1.0" "@babel/plugin-transform-computed-properties@^7.24.1": @@ -515,12 +510,12 @@ "@babel/helper-plugin-utils" "^7.24.0" "@babel/template" "^7.24.0" -"@babel/plugin-transform-destructuring@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.1.tgz#b1e8243af4a0206841973786292b8c8dd8447345" - integrity sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw== +"@babel/plugin-transform-destructuring@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.5.tgz#80843ee6a520f7362686d1a97a7b53544ede453c" + integrity sha512-SZuuLyfxvsm+Ah57I/i1HVjveBENYK9ue8MJ7qkc7ndoNjqquJiElzA7f5yaAXjyW2hKojosOTAQQRX50bPSVg== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.5" "@babel/plugin-transform-dotall-regex@^7.24.1": version "7.24.1" @@ -674,15 +669,15 @@ "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-transform-object-rest-spread@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.1.tgz#5a3ce73caf0e7871a02e1c31e8b473093af241ff" - integrity sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA== +"@babel/plugin-transform-object-rest-spread@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.5.tgz#f91bbcb092ff957c54b4091c86bda8372f0b10ef" + integrity sha512-7EauQHszLGM3ay7a161tTQH7fj+3vVM/gThlz5HpFtnygTxjrlvoeq7MPVA1Vy9Q555OB8SnAOsMkLShNkkrHA== dependencies: "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.5" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.24.1" + "@babel/plugin-transform-parameters" "^7.24.5" "@babel/plugin-transform-object-super@^7.24.1": version "7.24.1" @@ -700,21 +695,21 @@ "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-transform-optional-chaining@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.1.tgz#26e588acbedce1ab3519ac40cc748e380c5291e6" - integrity sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg== +"@babel/plugin-transform-optional-chaining@^7.24.1", "@babel/plugin-transform-optional-chaining@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.5.tgz#a6334bebd7f9dd3df37447880d0bd64b778e600f" + integrity sha512-xWCkmwKT+ihmA6l7SSTpk8e4qQl/274iNbSKRRS8mpqFR32ksy36+a+LWY8OXCCEefF8WFlnOHVsaDI2231wBg== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-transform-parameters@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.1.tgz#983c15d114da190506c75b616ceb0f817afcc510" - integrity sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg== +"@babel/plugin-transform-parameters@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.5.tgz#5c3b23f3a6b8fed090f9b98f2926896d3153cc62" + integrity sha512-9Co00MqZ2aoky+4j2jhofErthm6QVLKbpQrvz20c3CH9KQCLHyNB+t2ya4/UrRpQGR+Wrwjg9foopoeSdnHOkA== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.5" "@babel/plugin-transform-private-methods@^7.24.1": version "7.24.1" @@ -724,14 +719,14 @@ "@babel/helper-create-class-features-plugin" "^7.24.1" "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-private-property-in-object@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.1.tgz#756443d400274f8fb7896742962cc1b9f25c1f6a" - integrity sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg== +"@babel/plugin-transform-private-property-in-object@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.5.tgz#f5d1fcad36e30c960134cb479f1ca98a5b06eda5" + integrity sha512-JM4MHZqnWR04jPMujQDTBVRnqxpLLpx2tkn7iPn+Hmsc0Gnb79yvRWOkvqFOx3Z7P7VxiRIR22c4eGSNj87OBQ== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.24.1" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-create-class-features-plugin" "^7.24.5" + "@babel/helper-plugin-utils" "^7.24.5" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-transform-property-literals@^7.24.1": @@ -797,12 +792,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-typeof-symbol@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.1.tgz#6831f78647080dec044f7e9f68003d99424f94c7" - integrity sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA== +"@babel/plugin-transform-typeof-symbol@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.5.tgz#703cace5ef74155fb5eecab63cbfc39bdd25fe12" + integrity sha512-UTGnhYVZtTAjdwOTzT+sCyXmTn8AhaxOS/MjG9REclZ6ULHWF9KoCZur0HSGU7hk8PdBFKKbYe6+gqdXWz84Jg== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.5" "@babel/plugin-transform-unicode-escapes@^7.24.1": version "7.24.1" @@ -836,15 +831,15 @@ "@babel/helper-plugin-utils" "^7.24.0" "@babel/preset-env@^7.24.2": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.24.4.tgz#46dbbcd608771373b88f956ffb67d471dce0d23b" - integrity sha512-7Kl6cSmYkak0FK/FXjSEnLJ1N9T/WA2RkMhu17gZ/dsxKJUuTYNIylahPTzqpLyJN4WhDif8X0XK1R8Wsguo/A== + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.24.5.tgz#6a9ac90bd5a5a9dae502af60dfc58c190551bbcd" + integrity sha512-UGK2ifKtcC8i5AI4cH+sbLLuLc2ktYSFJgBAXorKAsHUZmrQ1q6aQ6i3BvU24wWs2AAKqQB6kq3N9V9Gw1HiMQ== dependencies: "@babel/compat-data" "^7.24.4" "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.5" "@babel/helper-validator-option" "^7.23.5" - "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.24.4" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.24.5" "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.24.1" "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.24.1" "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.24.1" @@ -871,12 +866,12 @@ "@babel/plugin-transform-async-generator-functions" "^7.24.3" "@babel/plugin-transform-async-to-generator" "^7.24.1" "@babel/plugin-transform-block-scoped-functions" "^7.24.1" - "@babel/plugin-transform-block-scoping" "^7.24.4" + "@babel/plugin-transform-block-scoping" "^7.24.5" "@babel/plugin-transform-class-properties" "^7.24.1" "@babel/plugin-transform-class-static-block" "^7.24.4" - "@babel/plugin-transform-classes" "^7.24.1" + "@babel/plugin-transform-classes" "^7.24.5" "@babel/plugin-transform-computed-properties" "^7.24.1" - "@babel/plugin-transform-destructuring" "^7.24.1" + "@babel/plugin-transform-destructuring" "^7.24.5" "@babel/plugin-transform-dotall-regex" "^7.24.1" "@babel/plugin-transform-duplicate-keys" "^7.24.1" "@babel/plugin-transform-dynamic-import" "^7.24.1" @@ -896,13 +891,13 @@ "@babel/plugin-transform-new-target" "^7.24.1" "@babel/plugin-transform-nullish-coalescing-operator" "^7.24.1" "@babel/plugin-transform-numeric-separator" "^7.24.1" - "@babel/plugin-transform-object-rest-spread" "^7.24.1" + "@babel/plugin-transform-object-rest-spread" "^7.24.5" "@babel/plugin-transform-object-super" "^7.24.1" "@babel/plugin-transform-optional-catch-binding" "^7.24.1" - "@babel/plugin-transform-optional-chaining" "^7.24.1" - "@babel/plugin-transform-parameters" "^7.24.1" + "@babel/plugin-transform-optional-chaining" "^7.24.5" + "@babel/plugin-transform-parameters" "^7.24.5" "@babel/plugin-transform-private-methods" "^7.24.1" - "@babel/plugin-transform-private-property-in-object" "^7.24.1" + "@babel/plugin-transform-private-property-in-object" "^7.24.5" "@babel/plugin-transform-property-literals" "^7.24.1" "@babel/plugin-transform-regenerator" "^7.24.1" "@babel/plugin-transform-reserved-words" "^7.24.1" @@ -910,7 +905,7 @@ "@babel/plugin-transform-spread" "^7.24.1" "@babel/plugin-transform-sticky-regex" "^7.24.1" "@babel/plugin-transform-template-literals" "^7.24.1" - "@babel/plugin-transform-typeof-symbol" "^7.24.1" + "@babel/plugin-transform-typeof-symbol" "^7.24.5" "@babel/plugin-transform-unicode-escapes" "^7.24.1" "@babel/plugin-transform-unicode-property-regex" "^7.24.1" "@babel/plugin-transform-unicode-regex" "^7.24.1" @@ -937,9 +932,9 @@ integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== "@babel/runtime@^7.17.2", "@babel/runtime@^7.8.4": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.4.tgz#de795accd698007a66ba44add6cc86542aff1edd" - integrity sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA== + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.5.tgz#230946857c053a36ccc66e1dd03b17dd0c4ed02c" + integrity sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g== dependencies: regenerator-runtime "^0.14.0" @@ -952,29 +947,29 @@ "@babel/parser" "^7.24.0" "@babel/types" "^7.24.0" -"@babel/traverse@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.1.tgz#d65c36ac9dd17282175d1e4a3c49d5b7988f530c" - integrity sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ== +"@babel/traverse@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.5.tgz#972aa0bc45f16983bf64aa1f877b2dd0eea7e6f8" + integrity sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA== dependencies: - "@babel/code-frame" "^7.24.1" - "@babel/generator" "^7.24.1" + "@babel/code-frame" "^7.24.2" + "@babel/generator" "^7.24.5" "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-function-name" "^7.23.0" "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.24.1" - "@babel/types" "^7.24.0" + "@babel/helper-split-export-declaration" "^7.24.5" + "@babel/parser" "^7.24.5" + "@babel/types" "^7.24.5" debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.24.0", "@babel/types@^7.4.4": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.0.tgz#3b951f435a92e7333eba05b7566fd297960ea1bf" - integrity sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w== +"@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.24.0", "@babel/types@^7.24.5", "@babel/types@^7.4.4": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.5.tgz#7661930afc638a5383eb0c4aee59b74f38db84d7" + integrity sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ== dependencies: - "@babel/helper-string-parser" "^7.23.4" - "@babel/helper-validator-identifier" "^7.22.20" + "@babel/helper-string-parser" "^7.24.1" + "@babel/helper-validator-identifier" "^7.24.5" to-fast-properties "^2.0.0" "@bcoe/v8-coverage@^0.2.3": @@ -982,82 +977,82 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@csstools/cascade-layer-name-parser@^1.0.9": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.9.tgz#7093f9c26fd92dee87d853a97de0647c5a8c4262" - integrity sha512-RRqNjxTZDUhx7pxYOBG/AkCVmPS3zYzfE47GEhIGkFuWFTQGJBgWOUUkKNo5MfxIfjDz5/1L3F3rF1oIsYaIpw== +"@csstools/cascade-layer-name-parser@^1.0.11": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.11.tgz#c9b85dc38240c0269385f557149f714e7875fda0" + integrity sha512-yhsonEAhaWRQvHFYhSzOUobH2Ev++fMci+ppFRagw0qVSPlcPV4FnNmlwpM/b2BM10ZeMRkVV4So6YRswD0O0w== -"@csstools/color-helpers@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@csstools/color-helpers/-/color-helpers-4.1.0.tgz#801977ec22c8eb23f9627a4f602e48beaa963bc2" - integrity sha512-pWRKF6cDwget8HowIIf2MqEmqIca/cf8/jO4b3PRtUF5EfQXYMtBIKycXB4yXTCUmwLKOoRZAzh/hjnc7ywOIg== +"@csstools/color-helpers@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@csstools/color-helpers/-/color-helpers-4.2.0.tgz#e8629ca9dce03a3a309506e7892b7f862673cf85" + integrity sha512-hJJrSBzbfGxUsaR6X4Bzd/FLx0F1ulKnR5ljY9AiXCtsR+H+zSWQDFWlKES1BRaVZTDHLpIIHS9K2o0h+JLlrg== -"@csstools/css-calc@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@csstools/css-calc/-/css-calc-1.2.0.tgz#a45145a868e644c31c79baf74c8de64fd09b3415" - integrity sha512-iQqIW5vDPqQdLx07/atCuNKDprhIWjB0b8XRhUyXZWBZYUG+9mNyFwyu30rypX84WLevVo25NYW2ipxR8WyseQ== +"@csstools/css-calc@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@csstools/css-calc/-/css-calc-1.2.2.tgz#bcb856e63ecc16a7508f43e77ea43ac5daaf2833" + integrity sha512-0owrl7AruDRKAxoSIW8XzJdz7GnuW3AOj4rYLfmXsoKIX2ZZzttzGXoiC8n8V08X7wIBlEWWVB4C8fAN18+I6Q== -"@csstools/css-color-parser@^1.6.3": - version "1.6.3" - resolved "https://registry.yarnpkg.com/@csstools/css-color-parser/-/css-color-parser-1.6.3.tgz#813948662e3010672990f2366b94f6174ddba285" - integrity sha512-pQPUPo32HW3/NuZxrwr3VJHE+vGqSTVI5gK4jGbuJ7eOFUrsTmZikXcVdInCVWOvuxK5xbCzwDWoTlZUCAKN+A== +"@csstools/css-color-parser@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@csstools/css-color-parser/-/css-color-parser-2.0.2.tgz#bf60de403889a2726f964a1c9b1ea5593e889f5b" + integrity sha512-Agx2YmxTcZ7TfB7KNZQ+iekaxbWSdblvtA35aTwE3KfuYyjOlCg3P4KGGdQF/cjm1pHWVSBo5duF/BRfZ8s07A== dependencies: - "@csstools/color-helpers" "^4.1.0" - "@csstools/css-calc" "^1.2.0" + "@csstools/color-helpers" "^4.2.0" + "@csstools/css-calc" "^1.2.2" -"@csstools/css-parser-algorithms@^2.6.1": - version "2.6.1" - resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.1.tgz#c45440d1efa2954006748a01697072dae5881bcd" - integrity sha512-ubEkAaTfVZa+WwGhs5jbo5Xfqpeaybr/RvWzvFxRs4jfq16wH8l8Ty/QEEpINxll4xhuGfdMbipRyz5QZh9+FA== +"@csstools/css-parser-algorithms@^2.6.1", "@csstools/css-parser-algorithms@^2.6.3": + version "2.6.3" + resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.3.tgz#b5e7eb2bd2a42e968ef61484f1490a8a4148a8eb" + integrity sha512-xI/tL2zxzEbESvnSxwFgwvy5HS00oCXxL4MLs6HUiDcYfwowsoQaABKxUElp1ARITrINzBnsECOc1q0eg2GOrA== -"@csstools/css-tokenizer@^2.2.4": - version "2.2.4" - resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-2.2.4.tgz#a4b8718ed7fcd2dcd555de16b31ca59ad4b96a06" - integrity sha512-PuWRAewQLbDhGeTvFuq2oClaSCKPIBmHyIobCV39JHRYN0byDcUWJl5baPeNUcqrjtdMNqFooE0FGl31I3JOqw== +"@csstools/css-tokenizer@^2.2.4", "@csstools/css-tokenizer@^2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-2.3.1.tgz#3d47e101ad48d815a4bdce8159fb5764f087f17a" + integrity sha512-iMNHTyxLbBlWIfGtabT157LH9DUx9X8+Y3oymFEuMj8HNc+rpE3dPFGFgHjpKfjeFDjLjYIAIhXPGvS2lKxL9g== -"@csstools/media-query-list-parser@^2.1.9": - version "2.1.9" - resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.9.tgz#feb4b7268f998956eb3ded69507869e73d005dda" - integrity sha512-qqGuFfbn4rUmyOB0u8CVISIp5FfJ5GAR3mBrZ9/TKndHakdnm6pY0L/fbLcpPnrzwCyyTEZl1nUcXAYHEWneTA== +"@csstools/media-query-list-parser@^2.1.11", "@csstools/media-query-list-parser@^2.1.9": + version "2.1.11" + resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.11.tgz#465aa42f268599729350e305e1ae14a30c1daf51" + integrity sha512-uox5MVhvNHqitPP+SynrB1o8oPxPMt2JLgp5ghJOWf54WGQ5OKu47efne49r1SWqs3wRP8xSWjnO9MBKxhB1dA== -"@csstools/postcss-cascade-layers@^4.0.4": - version "4.0.4" - resolved "https://registry.yarnpkg.com/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-4.0.4.tgz#0f20882d4f528a8128b0855ce63c3e6eee6d1b44" - integrity sha512-MKErv8lpEwVmAcAwidY1Kfd3oWrh2Q14kxHs9xn26XzjP/PrcdngWq63lJsZeMlBY7o+WlEOeE+FP6zPzeY2uw== +"@csstools/postcss-cascade-layers@^4.0.6": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-4.0.6.tgz#5a421cd2d5792d1eb8c28e682dc5f2c3b85cb045" + integrity sha512-Xt00qGAQyqAODFiFEJNkTpSUz5VfYqnDLECdlA/Vv17nl/OIV5QfTRHGAXrBGG5YcJyHpJ+GF9gF/RZvOQz4oA== dependencies: - "@csstools/selector-specificity" "^3.0.3" + "@csstools/selector-specificity" "^3.1.1" postcss-selector-parser "^6.0.13" -"@csstools/postcss-color-function@^3.0.13": - version "3.0.13" - resolved "https://registry.yarnpkg.com/@csstools/postcss-color-function/-/postcss-color-function-3.0.13.tgz#7980170ec1ad175af4bd83f2d851b2d8adeb43d5" - integrity sha512-gM24cIPU45HSPJ2zllz7VKjS1OKQS1sKOMI7Wsw8gFyXSGAGrxhYo++McylOqOXd8ecMaKxKQMUJqJVibvJYig== +"@csstools/postcss-color-function@^3.0.16": + version "3.0.16" + resolved "https://registry.yarnpkg.com/@csstools/postcss-color-function/-/postcss-color-function-3.0.16.tgz#d4f0b45a7425d437f267d99dcb94d3961a151b52" + integrity sha512-KtmXfckANSKsLBoTQCzggvKft1cmmmDKYjFO4yVlB23nWUgGInVBTE9T5JLmH29NNdTWSEPLWPUxoQ6XiIEn2Q== dependencies: - "@csstools/css-color-parser" "^1.6.3" - "@csstools/css-parser-algorithms" "^2.6.1" - "@csstools/css-tokenizer" "^2.2.4" + "@csstools/css-color-parser" "^2.0.2" + "@csstools/css-parser-algorithms" "^2.6.3" + "@csstools/css-tokenizer" "^2.3.1" "@csstools/postcss-progressive-custom-properties" "^3.2.0" "@csstools/utilities" "^1.0.0" -"@csstools/postcss-color-mix-function@^2.0.13": - version "2.0.13" - resolved "https://registry.yarnpkg.com/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.13.tgz#bafe2ca37248c36be13dd0329e29a8d5c44434c5" - integrity sha512-mD8IIfGVeWkN1H1wfCqYePOg4cDnVrOXm4P0OlYcvKriq6sImGCGShv/2D88q6s3iUlLXfUBES+DUjLVjDMhnw== +"@csstools/postcss-color-mix-function@^2.0.16": + version "2.0.16" + resolved "https://registry.yarnpkg.com/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.16.tgz#40b95ade50f5b19320bb342db4557bb61a8eefd6" + integrity sha512-BJnD1M5Pdypl1cJuwGuzVC52PqgzaObsDLu34jgf+QU7daVFqz432PvpqvXTmfTSNt4OckOT1QIzWexEFlDNXw== dependencies: - "@csstools/css-color-parser" "^1.6.3" - "@csstools/css-parser-algorithms" "^2.6.1" - "@csstools/css-tokenizer" "^2.2.4" + "@csstools/css-color-parser" "^2.0.2" + "@csstools/css-parser-algorithms" "^2.6.3" + "@csstools/css-tokenizer" "^2.3.1" "@csstools/postcss-progressive-custom-properties" "^3.2.0" "@csstools/utilities" "^1.0.0" -"@csstools/postcss-exponential-functions@^1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.5.tgz#ac6f9e545cf6bbf9d6bad11e655ca693c4982e58" - integrity sha512-7S7I7KgwHWQYzJJAoIjRtUf7DQs1dxipeg1A6ikZr0PYapNJX7UHz0evlpE67SQqYj1xBs70gpG7xUv3uLp4PA== +"@csstools/postcss-exponential-functions@^1.0.7": + version "1.0.7" + resolved "https://registry.yarnpkg.com/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.7.tgz#1ce6402fb40c97448cd465e3682844c401942700" + integrity sha512-9usBPQX74OhiF/VuaVrp44UAPzqbKNyoaxEa6tbEXiFp+OAm3yB/TLRKyPUWg5tvvHGCduGJVdJJB3w8c8NBtA== dependencies: - "@csstools/css-calc" "^1.2.0" - "@csstools/css-parser-algorithms" "^2.6.1" - "@csstools/css-tokenizer" "^2.2.4" + "@csstools/css-calc" "^1.2.2" + "@csstools/css-parser-algorithms" "^2.6.3" + "@csstools/css-tokenizer" "^2.3.1" "@csstools/postcss-font-format-keywords@^3.0.2": version "3.0.2" @@ -1067,34 +1062,34 @@ "@csstools/utilities" "^1.0.0" postcss-value-parser "^4.2.0" -"@csstools/postcss-gamut-mapping@^1.0.6": - version "1.0.6" - resolved "https://registry.yarnpkg.com/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-1.0.6.tgz#d45f4655f9fdaee7ed82e1cd44ca860d938626b6" - integrity sha512-qGFpHU9cRf9qqkbHh9cWMTlBtGi/ujPgP/znQdwkbB4TgDR1ddI5wRRrksBsx64sfoUSlIEd70bxXzD9FtfdLg== +"@csstools/postcss-gamut-mapping@^1.0.9": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-1.0.9.tgz#40358dff1e9be784a99a0925c3062c841fc1b001" + integrity sha512-JmOeiBJj1RJriAkr+aLBaiYUpEqdNOIo3ERQ5a4uNzy18upzrQ6tz7m2Vt1GQpJ62zQj7rC5PjAhCoZCoyE31g== dependencies: - "@csstools/css-color-parser" "^1.6.3" - "@csstools/css-parser-algorithms" "^2.6.1" - "@csstools/css-tokenizer" "^2.2.4" + "@csstools/css-color-parser" "^2.0.2" + "@csstools/css-parser-algorithms" "^2.6.3" + "@csstools/css-tokenizer" "^2.3.1" -"@csstools/postcss-gradients-interpolation-method@^4.0.14": - version "4.0.14" - resolved "https://registry.yarnpkg.com/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.14.tgz#3c533350fab41d95ad21a881393cefe014ed1940" - integrity sha512-VMWC3xtpchHJoRBb/fs1gJR/5nHopX+0GwwmgdCI1DjROtfWUKIW0nv8occ922Gv0/Lk93XBtYBv8JttVBMZUQ== +"@csstools/postcss-gradients-interpolation-method@^4.0.17": + version "4.0.17" + resolved "https://registry.yarnpkg.com/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.17.tgz#905bc1c8ae2b5fca1f38f191d67c56c102eba208" + integrity sha512-qSNIqzLPKd2SadfWwHZv42lDRyYlLaM+Vx5rRIsnYCZbQxzFfe1XAwssrcCsHgba5bA6bi5oDoFCx0W+PRCpfw== dependencies: - "@csstools/css-color-parser" "^1.6.3" - "@csstools/css-parser-algorithms" "^2.6.1" - "@csstools/css-tokenizer" "^2.2.4" + "@csstools/css-color-parser" "^2.0.2" + "@csstools/css-parser-algorithms" "^2.6.3" + "@csstools/css-tokenizer" "^2.3.1" "@csstools/postcss-progressive-custom-properties" "^3.2.0" "@csstools/utilities" "^1.0.0" -"@csstools/postcss-hwb-function@^3.0.12": - version "3.0.12" - resolved "https://registry.yarnpkg.com/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.12.tgz#dd981b8858fdd3eacc29e684a60ee1669b95b6ad" - integrity sha512-90kIs+FsM6isAXLVoFHTTl4h0J6g1J1M6ahpIjAs6/k7a2A9FB/q+l0MHpLre0ZiPlBf2y3e1j4L+79vml7kJw== +"@csstools/postcss-hwb-function@^3.0.15": + version "3.0.15" + resolved "https://registry.yarnpkg.com/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.15.tgz#c7ad67e697dc41eddd30551edcb92c45fa1ef289" + integrity sha512-l34fRiZ7o5+pULv7OplXniBTU4TuKYNNOv0abuvUanddWGSy3+YHlMKUSgcVFo0d1DorxPAhJSTCrugl+4OmMQ== dependencies: - "@csstools/css-color-parser" "^1.6.3" - "@csstools/css-parser-algorithms" "^2.6.1" - "@csstools/css-tokenizer" "^2.2.4" + "@csstools/css-color-parser" "^2.0.2" + "@csstools/css-parser-algorithms" "^2.6.3" + "@csstools/css-tokenizer" "^2.3.1" "@csstools/postcss-progressive-custom-properties" "^3.2.0" "@csstools/utilities" "^1.0.0" @@ -1112,21 +1107,21 @@ resolved "https://registry.yarnpkg.com/@csstools/postcss-initial/-/postcss-initial-1.0.1.tgz#5aa378de9bfd0e6e377433f8986bdecf579e1268" integrity sha512-wtb+IbUIrIf8CrN6MLQuFR7nlU5C7PwuebfeEXfjthUha1+XZj2RVi+5k/lukToA24sZkYAiSJfHM8uG/UZIdg== -"@csstools/postcss-is-pseudo-class@^4.0.6": - version "4.0.6" - resolved "https://registry.yarnpkg.com/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-4.0.6.tgz#149b3bf9dde739932a545079da917ca25464cba0" - integrity sha512-HilOhAsMpFheMYkuaREZx+CGa4hsG6kQdzwXSsuqKDFzYz2eIMP213+3dH/vUbPXaWrzqLKr8m3i0dgYPoh7vg== +"@csstools/postcss-is-pseudo-class@^4.0.8": + version "4.0.8" + resolved "https://registry.yarnpkg.com/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-4.0.8.tgz#d2bcc6c2d86d9653c333926a9ea488c2fc221a7f" + integrity sha512-0aj591yGlq5Qac+plaWCbn5cpjs5Sh0daovYUKJUOMjIp70prGH/XPLp7QjxtbFXz3CTvb0H9a35dpEuIuUi3Q== dependencies: - "@csstools/selector-specificity" "^3.0.3" + "@csstools/selector-specificity" "^3.1.1" postcss-selector-parser "^6.0.13" -"@csstools/postcss-light-dark-function@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-1.0.3.tgz#364f5b4c41ec485f7c8c9148566f0e79508bf5cf" - integrity sha512-izW8hvhOqJlarLcGXO5PSylW9pQS3fytmhRdx2/e1oZFi15vs7ZShOHcREHJ3FfGdYqDA10cP9uhH0A3hmm1Rw== +"@csstools/postcss-light-dark-function@^1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-1.0.5.tgz#5a9a15b1b7e79b3d7c8020a6a133f796ce4dfda7" + integrity sha512-kKM9dtEaVmSTb3scL2pgef62KyWv6SK19JiAnCCuiDhlRE6PADKzaPPBXmP3qj4IEgIH+cQhdEosB0eroU6Fnw== dependencies: - "@csstools/css-parser-algorithms" "^2.6.1" - "@csstools/css-tokenizer" "^2.2.4" + "@csstools/css-parser-algorithms" "^2.6.3" + "@csstools/css-tokenizer" "^2.3.1" "@csstools/postcss-progressive-custom-properties" "^3.2.0" "@csstools/utilities" "^1.0.0" @@ -1152,32 +1147,32 @@ dependencies: postcss-value-parser "^4.2.0" -"@csstools/postcss-logical-viewport-units@^2.0.7": - version "2.0.7" - resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-2.0.7.tgz#3bb03b9a57fe9ec2304bc35cf6c3d5d7c938ee26" - integrity sha512-L4G3zsp/bnU0+WXUyysihCUH14LkfMgUJsS9vKz3vCYbVobOTqQRoNXnEPpyNp8WYyolLqAWbGGJhVu8J6u2OQ== +"@csstools/postcss-logical-viewport-units@^2.0.9": + version "2.0.9" + resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-2.0.9.tgz#8575b832faac9c9118b2228eb65ab622c91fdddf" + integrity sha512-iBBJuExgHwedFH9AqNOHWzZFgYnt17zhu1qWjmSihu1P5pw0lIG9q5t3uIgJJFDNmYoOGfBKan66z9u1QH8yBQ== dependencies: - "@csstools/css-tokenizer" "^2.2.4" + "@csstools/css-tokenizer" "^2.3.1" "@csstools/utilities" "^1.0.0" -"@csstools/postcss-media-minmax@^1.1.4": - version "1.1.4" - resolved "https://registry.yarnpkg.com/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.1.4.tgz#1af01cc02fdb936a1c10a11e2663fd1b1ce1bd79" - integrity sha512-xl/PIO3TUbXO1ZA4SA6HCw+Q9UGe2cgeRKx3lHCzoNig2D4bT5vfVCOrwhxjUb09oHihc9eI3I0iIfVPiXaN1A== +"@csstools/postcss-media-minmax@^1.1.6": + version "1.1.6" + resolved "https://registry.yarnpkg.com/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.1.6.tgz#300581d39cfade44fd9ac2b777c5abb1d088aaa8" + integrity sha512-bc0frf2Lod53j6wEHVsaVElfvCf6uhc96v99M/wUfer4MmNYfO3YLx1kFuB8xXvb0AXiWx4fohCJqemHV3bfRg== dependencies: - "@csstools/css-calc" "^1.2.0" - "@csstools/css-parser-algorithms" "^2.6.1" - "@csstools/css-tokenizer" "^2.2.4" - "@csstools/media-query-list-parser" "^2.1.9" + "@csstools/css-calc" "^1.2.2" + "@csstools/css-parser-algorithms" "^2.6.3" + "@csstools/css-tokenizer" "^2.3.1" + "@csstools/media-query-list-parser" "^2.1.11" -"@csstools/postcss-media-queries-aspect-ratio-number-values@^2.0.7": - version "2.0.7" - resolved "https://registry.yarnpkg.com/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.7.tgz#5f4939e6330a3c2cd0cba1e1b76bc51a74dc839c" - integrity sha512-HBDAQw1K0NilcHGMUHv8jzf2mpOtcWTVKtuY3AeZ5TS1uyWWNVi5/yuA/tREPLU9WifNdqHQ+rfbsV/8zTIkTg== +"@csstools/postcss-media-queries-aspect-ratio-number-values@^2.0.9": + version "2.0.9" + resolved "https://registry.yarnpkg.com/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.9.tgz#764657111d378d73cb66b9110c9e73283116f350" + integrity sha512-PR0s3tFSxPoKoPLoKuiZuYhwQC5bQxq/gFfywX2u/kh8rMzesARPZYKxE71I3jHWi6KDHGZl9Xb5xcFPwtvLiQ== dependencies: - "@csstools/css-parser-algorithms" "^2.6.1" - "@csstools/css-tokenizer" "^2.2.4" - "@csstools/media-query-list-parser" "^2.1.9" + "@csstools/css-parser-algorithms" "^2.6.3" + "@csstools/css-tokenizer" "^2.3.1" + "@csstools/media-query-list-parser" "^2.1.11" "@csstools/postcss-nested-calc@^3.0.2": version "3.0.2" @@ -1194,14 +1189,14 @@ dependencies: postcss-value-parser "^4.2.0" -"@csstools/postcss-oklab-function@^3.0.13": - version "3.0.13" - resolved "https://registry.yarnpkg.com/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.13.tgz#22d82abbebc71b80c6a705bdcd909421a5bb12c3" - integrity sha512-xbzMmukDFAwCt2+279io7ZiamZj87s6cnU3UgKB3G+NMpRX9A6uvN8xlnTLCe384hqg6hix5vlOmwkxqACb5pg== +"@csstools/postcss-oklab-function@^3.0.16": + version "3.0.16" + resolved "https://registry.yarnpkg.com/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.16.tgz#c7ae792fb831c935aca3e7aec7c61ff357814995" + integrity sha512-zm8nND+EraZrmbO4mgcT8FrJrAQUfWNfMmbV5uTCpWtAcO5ycX3E3bO8T1TjczKYRxC5QMM/91n9YExYCF4Mvw== dependencies: - "@csstools/css-color-parser" "^1.6.3" - "@csstools/css-parser-algorithms" "^2.6.1" - "@csstools/css-tokenizer" "^2.2.4" + "@csstools/css-color-parser" "^2.0.2" + "@csstools/css-parser-algorithms" "^2.6.3" + "@csstools/css-tokenizer" "^2.3.1" "@csstools/postcss-progressive-custom-properties" "^3.2.0" "@csstools/utilities" "^1.0.0" @@ -1212,14 +1207,14 @@ dependencies: postcss-value-parser "^4.2.0" -"@csstools/postcss-relative-color-syntax@^2.0.13": - version "2.0.13" - resolved "https://registry.yarnpkg.com/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.13.tgz#8e9739453ca279840ae79b14b4741f2e216a08c4" - integrity sha512-mENWPNcHdiEYtjHFfZP9U1jNukQgFpSQ7wvTvwiadK3qgNBiSl0vMSinM9kKsGsJLTHQ0LEAqWLHurU52I4Jeg== +"@csstools/postcss-relative-color-syntax@^2.0.16": + version "2.0.16" + resolved "https://registry.yarnpkg.com/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.16.tgz#9ace14c5bb1e70ec4e7f8bba0cc98acc5fc9d6e1" + integrity sha512-TSM8fVqJkT8JZDranZPnkpxjU/Q1sNR192lXMND+EcKOUjYa6uYpGSfHgjnWjCRiBSciettS+sL7y9wmnas7qQ== dependencies: - "@csstools/css-color-parser" "^1.6.3" - "@csstools/css-parser-algorithms" "^2.6.1" - "@csstools/css-tokenizer" "^2.2.4" + "@csstools/css-color-parser" "^2.0.2" + "@csstools/css-parser-algorithms" "^2.6.3" + "@csstools/css-tokenizer" "^2.3.1" "@csstools/postcss-progressive-custom-properties" "^3.2.0" "@csstools/utilities" "^1.0.0" @@ -1230,31 +1225,31 @@ dependencies: postcss-selector-parser "^6.0.13" -"@csstools/postcss-stepped-value-functions@^3.0.6": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.6.tgz#8263ddafab483100e13d63929d43cd12fb14767f" - integrity sha512-rnyp8tWRuBXERTHVdB5hjUlif5dQgPcyN+BX55wUnYpZ3LN9QPfK2Z3/HUZymwyou8Gg6vhd6X2W+g1pLq1jYg== +"@csstools/postcss-stepped-value-functions@^3.0.8": + version "3.0.8" + resolved "https://registry.yarnpkg.com/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.8.tgz#696aaa0eb9ea651097d7b1a376c36a9ca925908f" + integrity sha512-X76+thsvsmH/SkqVbN+vjeFKe1ABGLRx8/Wl68QTb/zvJWdzgx5S/nbszZP5O3nTRc5eI8NxIOrQUiy30fR+0g== dependencies: - "@csstools/css-calc" "^1.2.0" - "@csstools/css-parser-algorithms" "^2.6.1" - "@csstools/css-tokenizer" "^2.2.4" + "@csstools/css-calc" "^1.2.2" + "@csstools/css-parser-algorithms" "^2.6.3" + "@csstools/css-tokenizer" "^2.3.1" -"@csstools/postcss-text-decoration-shorthand@^3.0.5": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-3.0.5.tgz#387c236a1ea7f7bc5783cf1bc4b592354cbca60d" - integrity sha512-qKxXpD0TYINkUtWDN1RHdeWKtZCzEv5j3UMT/ZGqyY27icwCFw7iKO0bUeLSHjYFBqhurCWvoOsa9REqLdrNDw== +"@csstools/postcss-text-decoration-shorthand@^3.0.6": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-3.0.6.tgz#108afc5a66b96db3d0cca4f5d9414559c6b7a0bf" + integrity sha512-Q8HEu4AEiwNVZBD6+DpQ8M9SajpMow4+WtmndWIAv8qxDtDYL4JK1xXWkhOGk28PrcJawOvkrEZ8Ri59UN1TJw== dependencies: - "@csstools/color-helpers" "^4.1.0" + "@csstools/color-helpers" "^4.2.0" postcss-value-parser "^4.2.0" -"@csstools/postcss-trigonometric-functions@^3.0.6": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.6.tgz#f8227f1807d28e817e4ff9053093eb8f1bcd9e13" - integrity sha512-i5Zd0bMJooZAn+ZcDmPij2WCkcOJJJ6opzK+QeDjxbMrYmoGQl0CY8FDHdeQyBF1Nly+Q0Fq3S7QfdNLKBBaCg== +"@csstools/postcss-trigonometric-functions@^3.0.8": + version "3.0.8" + resolved "https://registry.yarnpkg.com/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.8.tgz#8ba2206d27481e922bb29c1eeae834928be0abae" + integrity sha512-zEzyGriPqoIYFgHJqWNy8bmoxjM4+ONyTap1ZzQK/Lll/VsCYvx0IckB33W/u89uLSVeeB8xC7uTrkoQ7ogKyQ== dependencies: - "@csstools/css-calc" "^1.2.0" - "@csstools/css-parser-algorithms" "^2.6.1" - "@csstools/css-tokenizer" "^2.2.4" + "@csstools/css-calc" "^1.2.2" + "@csstools/css-parser-algorithms" "^2.6.3" + "@csstools/css-tokenizer" "^2.3.1" "@csstools/postcss-unset-value@^3.0.1": version "3.0.1" @@ -1266,10 +1261,10 @@ resolved "https://registry.yarnpkg.com/@csstools/selector-resolve-nested/-/selector-resolve-nested-1.1.0.tgz#d872f2da402d3ce8bd0cf16ea5f9fba76b18e430" integrity sha512-uWvSaeRcHyeNenKg8tp17EVDRkpflmdyvbE0DHo6D/GdBb6PDnCYYU6gRpXhtICMGMcahQmj2zGxwFM/WC8hCg== -"@csstools/selector-specificity@^3.0.2", "@csstools/selector-specificity@^3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-3.0.3.tgz#208a3929ee614967a1fc8cd6cb758d9fcbf0caae" - integrity sha512-KEPNw4+WW5AVEIyzC80rTbWEUatTW2lXpN8+8ILC8PiPeWPjwUzrPZDIOZ2wwqDmeqOYTdSGyL3+vE5GC3FB3Q== +"@csstools/selector-specificity@^3.0.3", "@csstools/selector-specificity@^3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-3.1.1.tgz#63085d2995ca0f0e55aa8b8a07d69bfd48b844fe" + integrity sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA== "@csstools/utilities@^1.0.0": version "1.0.0" @@ -1282,9 +1277,9 @@ integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== "@dual-bundle/import-meta-resolve@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.0.0.tgz#df79b7ea62c55094dc129880387864cdf41eca7c" - integrity sha512-ZKXyJeFAzcpKM2kk8ipoGIPUqx9BX52omTGnfwjJvxOCaZTM2wtDK7zN0aIgPRbT9XYAlha0HtmZ+XKteuh0Gw== + version "4.1.0" + resolved "https://registry.yarnpkg.com/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz#519c1549b0e147759e7825701ecffd25e5819f7b" + integrity sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg== "@esbuild/aix-ppc64@0.20.2": version "0.20.2" @@ -1428,10 +1423,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@9.0.0": - version "9.0.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.0.0.tgz#1a9e4b4c96d8c7886e0110ed310a0135144a1691" - integrity sha512-RThY/MnKrhubF6+s1JflwUjPEsnCEmYCWwqa/aRISKWNXGZ9epUwft4bUMM35SdKF9xvBrLydAM1RDHd1Z//ZQ== +"@eslint/js@9.2.0": + version "9.2.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.2.0.tgz#b0a9123e8e91a3d9a2eed3a04a6ed44fdab639aa" + integrity sha512-ESiIudvhoYni+MdsI8oD7skpprZ89qKocwRM2KEvhhBJ9nl5MRh7BXU5GTod7Mdygq+AUl+QzId6iWJKR/wABA== "@gerhobbelt/linewrap@0.2.2-3": version "0.2.2-3" @@ -1446,10 +1441,10 @@ chalk "4.1.0" exit "0.1.2" -"@humanwhocodes/config-array@^0.12.3": - version "0.12.3" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.12.3.tgz#a6216d90f81a30bedd1d4b5d799b47241f318072" - integrity sha512-jsNnTBlMWuTpDkeE3on7+dWJi0D6fdDfeANj/w7MpS8ztROCoLvIO2nG0CcFj+E4k8j4QrSTh4Oryi3i2G669g== +"@humanwhocodes/config-array@^0.13.0": + version "0.13.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.13.0.tgz#fb907624df3256d04b9aa2df50d7aa97ec648748" + integrity sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw== dependencies: "@humanwhocodes/object-schema" "^2.0.3" debug "^4.3.1" @@ -1465,6 +1460,11 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== +"@humanwhocodes/retry@^0.2.3": + version "0.2.4" + resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.2.4.tgz#4f3059423823bd8176132ceea9447dee101dfac1" + integrity sha512-Ttl/jHpxfS3st5sxwICYfk4pOH0WrLI1SpW283GgQL7sCWU7EHIOhX4b4fkIxr3tkfzwg8+FNojtzsIEE7Ecgg== + "@isaacs/cliui@^8.0.2": version "8.0.2" resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" @@ -1541,6 +1541,26 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" +"@jsonjoy.com/base64@^1.1.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/base64/-/base64-1.1.2.tgz#cf8ea9dcb849b81c95f14fc0aaa151c6b54d2578" + integrity sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA== + +"@jsonjoy.com/json-pack@^1.0.3": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/json-pack/-/json-pack-1.0.4.tgz#ab59c642a2e5368e8bcfd815d817143d4f3035d0" + integrity sha512-aOcSN4MeAtFROysrbqG137b7gaDDSmVrl5mpo6sT/w+kcXpWnzhMjmY/Fh/sDx26NBxyIE7MB1seqLeCAzy9Sg== + dependencies: + "@jsonjoy.com/base64" "^1.1.1" + "@jsonjoy.com/util" "^1.1.2" + hyperdyperid "^1.2.0" + thingies "^1.20.0" + +"@jsonjoy.com/util@^1.1.2": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/util/-/util-1.1.3.tgz#75b1c3cf21b70e665789d1ad3eabeff8b7fd1429" + integrity sha512-g//kkF4kOwUjemValCtOc/xiYzmwMRmWq3Bn+YnzOzuZLHq2PpMOxxIayN3cKbo7Ko2Np65t6D9H81IvXbXhqg== + "@leichtgewicht/ip-codec@^2.0.1": version "2.0.5" resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz#4fc56c15c580b9adb7dc3c333a134e540b44bfb1" @@ -1772,85 +1792,85 @@ resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== -"@rollup/rollup-android-arm-eabi@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.14.3.tgz#bddf05c3387d02fac04b6b86b3a779337edfed75" - integrity sha512-X9alQ3XM6I9IlSlmC8ddAvMSyG1WuHk5oUnXGw+yUBs3BFoTizmG1La/Gr8fVJvDWAq+zlYTZ9DBgrlKRVY06g== - -"@rollup/rollup-android-arm64@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.14.3.tgz#b26bd09de58704c0a45e3375b76796f6eda825e4" - integrity sha512-eQK5JIi+POhFpzk+LnjKIy4Ks+pwJ+NXmPxOCSvOKSNRPONzKuUvWE+P9JxGZVxrtzm6BAYMaL50FFuPe0oWMQ== - -"@rollup/rollup-darwin-arm64@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.14.3.tgz#c5f3fd1aa285b6d33dda6e3f3ca395f8c37fd5ca" - integrity sha512-Od4vE6f6CTT53yM1jgcLqNfItTsLt5zE46fdPaEmeFHvPs5SjZYlLpHrSiHEKR1+HdRfxuzXHjDOIxQyC3ptBA== - -"@rollup/rollup-darwin-x64@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.14.3.tgz#8e4673734d7dc9d68f6d48e81246055cda0e840f" - integrity sha512-0IMAO21axJeNIrvS9lSe/PGthc8ZUS+zC53O0VhF5gMxfmcKAP4ESkKOCwEi6u2asUrt4mQv2rjY8QseIEb1aw== - -"@rollup/rollup-linux-arm-gnueabihf@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.14.3.tgz#53ed38eb13b58ababdb55a7f66f0538a7f85dcba" - integrity sha512-ge2DC7tHRHa3caVEoSbPRJpq7azhG+xYsd6u2MEnJ6XzPSzQsTKyXvh6iWjXRf7Rt9ykIUWHtl0Uz3T6yXPpKw== - -"@rollup/rollup-linux-arm-musleabihf@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.14.3.tgz#0706ee38330e267a5c9326956820f009cfb21fcd" - integrity sha512-ljcuiDI4V3ySuc7eSk4lQ9wU8J8r8KrOUvB2U+TtK0TiW6OFDmJ+DdIjjwZHIw9CNxzbmXY39wwpzYuFDwNXuw== - -"@rollup/rollup-linux-arm64-gnu@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.14.3.tgz#426fce7b8b242ac5abd48a10a5020f5a468c6cb4" - integrity sha512-Eci2us9VTHm1eSyn5/eEpaC7eP/mp5n46gTRB3Aar3BgSvDQGJZuicyq6TsH4HngNBgVqC5sDYxOzTExSU+NjA== - -"@rollup/rollup-linux-arm64-musl@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.14.3.tgz#65bf944530d759b50d7ffd00dfbdf4125a43406f" - integrity sha512-UrBoMLCq4E92/LCqlh+blpqMz5h1tJttPIniwUgOFJyjWI1qrtrDhhpHPuFxULlUmjFHfloWdixtDhSxJt5iKw== - -"@rollup/rollup-linux-powerpc64le-gnu@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.14.3.tgz#494ba3b31095e9a45df9c3f646d21400fb631a95" - integrity sha512-5aRjvsS8q1nWN8AoRfrq5+9IflC3P1leMoy4r2WjXyFqf3qcqsxRCfxtZIV58tCxd+Yv7WELPcO9mY9aeQyAmw== - -"@rollup/rollup-linux-riscv64-gnu@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.14.3.tgz#8b88ed0a40724cce04aa15374ebe5ba4092d679f" - integrity sha512-sk/Qh1j2/RJSX7FhEpJn8n0ndxy/uf0kI/9Zc4b1ELhqULVdTfN6HL31CDaTChiBAOgLcsJ1sgVZjWv8XNEsAQ== - -"@rollup/rollup-linux-s390x-gnu@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.14.3.tgz#09c9e5ec57a0f6ec3551272c860bb9a04b96d70f" - integrity sha512-jOO/PEaDitOmY9TgkxF/TQIjXySQe5KVYB57H/8LRP/ux0ZoO8cSHCX17asMSv3ruwslXW/TLBcxyaUzGRHcqg== - -"@rollup/rollup-linux-x64-gnu@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.14.3.tgz#197f27fd481ad9c861021d5cbbf21793922a631c" - integrity sha512-8ybV4Xjy59xLMyWo3GCfEGqtKV5M5gCSrZlxkPGvEPCGDLNla7v48S662HSGwRd6/2cSneMQWiv+QzcttLrrOA== - -"@rollup/rollup-linux-x64-musl@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.14.3.tgz#5cc0522f4942f2df625e9bfb6fb02c6580ffbce6" - integrity sha512-s+xf1I46trOY10OqAtZ5Rm6lzHre/UiLA1J2uOhCFXWkbZrJRkYBPO6FhvGfHmdtQ3Bx793MNa7LvoWFAm93bg== - -"@rollup/rollup-win32-arm64-msvc@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.14.3.tgz#a648122389d23a7543b261fba082e65fefefe4f6" - integrity sha512-+4h2WrGOYsOumDQ5S2sYNyhVfrue+9tc9XcLWLh+Kw3UOxAvrfOrSMFon60KspcDdytkNDh7K2Vs6eMaYImAZg== - -"@rollup/rollup-win32-ia32-msvc@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.14.3.tgz#34727b5c7953c35fc6e1ae4f770ad3a2025f8e03" - integrity sha512-T1l7y/bCeL/kUwh9OD4PQT4aM7Bq43vX05htPJJ46RTI4r5KNt6qJRzAfNfM+OYMNEVBWQzR2Gyk+FXLZfogGw== - -"@rollup/rollup-win32-x64-msvc@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.14.3.tgz#5b2fb4d8cd44c05deef8a7b0e6deb9ccb8939d18" - integrity sha512-/BypzV0H1y1HzgYpxqRaXGBRqfodgoBBCcsrujT6QRcakDQdfU+Lq9PENPh5jB4I44YWq+0C2eHsHya+nZY1sA== +"@rollup/rollup-android-arm-eabi@4.17.2": + version "4.17.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.17.2.tgz#1a32112822660ee104c5dd3a7c595e26100d4c2d" + integrity sha512-NM0jFxY8bB8QLkoKxIQeObCaDlJKewVlIEkuyYKm5An1tdVZ966w2+MPQ2l8LBZLjR+SgyV+nRkTIunzOYBMLQ== + +"@rollup/rollup-android-arm64@4.17.2": + version "4.17.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.17.2.tgz#5aeef206d65ff4db423f3a93f71af91b28662c5b" + integrity sha512-yeX/Usk7daNIVwkq2uGoq2BYJKZY1JfyLTaHO/jaiSwi/lsf8fTFoQW/n6IdAsx5tx+iotu2zCJwz8MxI6D/Bw== + +"@rollup/rollup-darwin-arm64@4.17.2": + version "4.17.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.17.2.tgz#6b66aaf003c70454c292cd5f0236ebdc6ffbdf1a" + integrity sha512-kcMLpE6uCwls023+kknm71ug7MZOrtXo+y5p/tsg6jltpDtgQY1Eq5sGfHcQfb+lfuKwhBmEURDga9N0ol4YPw== + +"@rollup/rollup-darwin-x64@4.17.2": + version "4.17.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.17.2.tgz#f64fc51ed12b19f883131ccbcea59fc68cbd6c0b" + integrity sha512-AtKwD0VEx0zWkL0ZjixEkp5tbNLzX+FCqGG1SvOu993HnSz4qDI6S4kGzubrEJAljpVkhRSlg5bzpV//E6ysTQ== + +"@rollup/rollup-linux-arm-gnueabihf@4.17.2": + version "4.17.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.17.2.tgz#1a7641111be67c10111f7122d1e375d1226cbf14" + integrity sha512-3reX2fUHqN7sffBNqmEyMQVj/CKhIHZd4y631duy0hZqI8Qoqf6lTtmAKvJFYa6bhU95B1D0WgzHkmTg33In0A== + +"@rollup/rollup-linux-arm-musleabihf@4.17.2": + version "4.17.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.17.2.tgz#c93fd632923e0fee25aacd2ae414288d0b7455bb" + integrity sha512-uSqpsp91mheRgw96xtyAGP9FW5ChctTFEoXP0r5FAzj/3ZRv3Uxjtc7taRQSaQM/q85KEKjKsZuiZM3GyUivRg== + +"@rollup/rollup-linux-arm64-gnu@4.17.2": + version "4.17.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.17.2.tgz#fa531425dd21d058a630947527b4612d9d0b4a4a" + integrity sha512-EMMPHkiCRtE8Wdk3Qhtciq6BndLtstqZIroHiiGzB3C5LDJmIZcSzVtLRbwuXuUft1Cnv+9fxuDtDxz3k3EW2A== + +"@rollup/rollup-linux-arm64-musl@4.17.2": + version "4.17.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.17.2.tgz#8acc16f095ceea5854caf7b07e73f7d1802ac5af" + integrity sha512-NMPylUUZ1i0z/xJUIx6VUhISZDRT+uTWpBcjdv0/zkp7b/bQDF+NfnfdzuTiB1G6HTodgoFa93hp0O1xl+/UbA== + +"@rollup/rollup-linux-powerpc64le-gnu@4.17.2": + version "4.17.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.17.2.tgz#94e69a8499b5cf368911b83a44bb230782aeb571" + integrity sha512-T19My13y8uYXPw/L/k0JYaX1fJKFT/PWdXiHr8mTbXWxjVF1t+8Xl31DgBBvEKclw+1b00Chg0hxE2O7bTG7GQ== + +"@rollup/rollup-linux-riscv64-gnu@4.17.2": + version "4.17.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.17.2.tgz#7ef1c781c7e59e85a6ce261cc95d7f1e0b56db0f" + integrity sha512-BOaNfthf3X3fOWAB+IJ9kxTgPmMqPPH5f5k2DcCsRrBIbWnaJCgX2ll77dV1TdSy9SaXTR5iDXRL8n7AnoP5cg== + +"@rollup/rollup-linux-s390x-gnu@4.17.2": + version "4.17.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.17.2.tgz#f15775841c3232fca9b78cd25a7a0512c694b354" + integrity sha512-W0UP/x7bnn3xN2eYMql2T/+wpASLE5SjObXILTMPUBDB/Fg/FxC+gX4nvCfPBCbNhz51C+HcqQp2qQ4u25ok6g== + +"@rollup/rollup-linux-x64-gnu@4.17.2": + version "4.17.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.17.2.tgz#b521d271798d037ad70c9f85dd97d25f8a52e811" + integrity sha512-Hy7pLwByUOuyaFC6mAr7m+oMC+V7qyifzs/nW2OJfC8H4hbCzOX07Ov0VFk/zP3kBsELWNFi7rJtgbKYsav9QQ== + +"@rollup/rollup-linux-x64-musl@4.17.2": + version "4.17.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.17.2.tgz#9254019cc4baac35800991315d133cc9fd1bf385" + integrity sha512-h1+yTWeYbRdAyJ/jMiVw0l6fOOm/0D1vNLui9iPuqgRGnXA0u21gAqOyB5iHjlM9MMfNOm9RHCQ7zLIzT0x11Q== + +"@rollup/rollup-win32-arm64-msvc@4.17.2": + version "4.17.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.17.2.tgz#27f65a89f6f52ee9426ec11e3571038e4671790f" + integrity sha512-tmdtXMfKAjy5+IQsVtDiCfqbynAQE/TQRpWdVataHmhMb9DCoJxp9vLcCBjEQWMiUYxO1QprH/HbY9ragCEFLA== + +"@rollup/rollup-win32-ia32-msvc@4.17.2": + version "4.17.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.17.2.tgz#a2fbf8246ed0bb014f078ca34ae6b377a90cb411" + integrity sha512-7II/QCSTAHuE5vdZaQEwJq2ZACkBpQDOmQsE6D6XUbnBHW8IAhm4eTufL6msLJorzrHDFv3CF8oCA/hSIRuZeQ== + +"@rollup/rollup-win32-x64-msvc@4.17.2": + version "4.17.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.17.2.tgz#5a2d08b81e8064b34242d5cc9973ef8dd1e60503" + integrity sha512-TGGO7v7qOq4CYmSBVEYpI1Y5xDuCEnbVC5Vth8mOsW0gDSzxNrVERPc790IGHsrT2dQSimgMr9Ub3Y1Jci5/8w== "@sinclair/typebox@^0.27.8": version "0.27.8" @@ -2844,9 +2864,9 @@ "@types/estree" "*" "@types/eslint@*": - version "8.56.9" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.56.9.tgz#403e9ced04a34e63f1c383c5b8ee1a94442c8cc4" - integrity sha512-W4W3KcqzjJ0sHg2vAq9vfml6OhsJ53TcUjUqfzzZf/EChUtwspszj/S0pzMxnfRcO55/iGq47dscXw71Fxc4Zg== + version "8.56.10" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.56.10.tgz#eb2370a73bf04a901eeba8f22595c7ee0f7eb58d" + integrity sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ== dependencies: "@types/estree" "*" "@types/json-schema" "*" @@ -2960,9 +2980,9 @@ "@types/node" "*" "@types/node@*": - version "20.12.7" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.7.tgz#04080362fa3dd6c5822061aa3124f5c152cff384" - integrity sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg== + version "20.12.12" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.12.tgz#7cbecdf902085cec634fdb362172dfe12b8f2050" + integrity sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw== dependencies: undici-types "~5.26.4" @@ -3058,16 +3078,16 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.7.0.tgz#bf34a02f221811505b8bf2f31060c8560c1bb0a3" - integrity sha512-GJWR0YnfrKnsRoluVO3PRb9r5aMZriiMMM/RHj5nnTrBy1/wIgk76XCtCKcnXGjpZQJQRFtGV9/0JJ6n30uwpQ== +"@typescript-eslint/eslint-plugin@8.0.0-alpha.11": + version "8.0.0-alpha.11" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.0.0-alpha.11.tgz#8e1b344c09a2147f94dde3709cc4054dd523cdc2" + integrity sha512-JILZNFOn0eceiZats/fdm+0RCYW5vlVjUismvCHsSRzHabZxi3x9Rv+p7dnlLNUFY2laRZ967zSpiS1pLUZT1Q== dependencies: "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "7.7.0" - "@typescript-eslint/type-utils" "7.7.0" - "@typescript-eslint/utils" "7.7.0" - "@typescript-eslint/visitor-keys" "7.7.0" + "@typescript-eslint/scope-manager" "8.0.0-alpha.11" + "@typescript-eslint/type-utils" "8.0.0-alpha.11" + "@typescript-eslint/utils" "8.0.0-alpha.11" + "@typescript-eslint/visitor-keys" "8.0.0-alpha.11" debug "^4.3.4" graphemer "^1.4.0" ignore "^5.3.1" @@ -3075,47 +3095,47 @@ semver "^7.6.0" ts-api-utils "^1.3.0" -"@typescript-eslint/parser@7.7.0", "@typescript-eslint/parser@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.7.0.tgz#6b1b3ce76c5de002c43af8ae933613b0f2b4bcc6" - integrity sha512-fNcDm3wSwVM8QYL4HKVBggdIPAy9Q41vcvC/GtDobw3c4ndVT3K6cqudUmjHPw8EAp4ufax0o58/xvWaP2FmTg== +"@typescript-eslint/parser@8.0.0-alpha.11", "@typescript-eslint/parser@^8.0.0-alpha.11": + version "8.0.0-alpha.11" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.0.0-alpha.11.tgz#3783b690f3f55e3d8528557f763e1dcce7884293" + integrity sha512-SIItaDvMpBdd9ncexXDdt0cH0KSiLTFG1mHgv6zYcaDeJmQ+3ZePNFUkuDwh1GeokHBg0BHx6UjK5DKXuDzwpg== dependencies: - "@typescript-eslint/scope-manager" "7.7.0" - "@typescript-eslint/types" "7.7.0" - "@typescript-eslint/typescript-estree" "7.7.0" - "@typescript-eslint/visitor-keys" "7.7.0" + "@typescript-eslint/scope-manager" "8.0.0-alpha.11" + "@typescript-eslint/types" "8.0.0-alpha.11" + "@typescript-eslint/typescript-estree" "8.0.0-alpha.11" + "@typescript-eslint/visitor-keys" "8.0.0-alpha.11" debug "^4.3.4" -"@typescript-eslint/scope-manager@7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.7.0.tgz#3f0db079b275bb8b0cb5be7613fb3130cfb5de77" - integrity sha512-/8INDn0YLInbe9Wt7dK4cXLDYp0fNHP5xKLHvZl3mOT5X17rK/YShXaiNmorl+/U4VKCVIjJnx4Ri5b0y+HClw== +"@typescript-eslint/scope-manager@8.0.0-alpha.11": + version "8.0.0-alpha.11" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.0.0-alpha.11.tgz#6f53462c58be127aef50a6b640173edd3dfd7e28" + integrity sha512-OzM7xRXyFuE+uUv/6qE3GRYfbh/BVKalF/aO4+U42a8PZcpIUseYo3bwlCYz5F0ngzy5SpxBSjw1FucqweeWUQ== dependencies: - "@typescript-eslint/types" "7.7.0" - "@typescript-eslint/visitor-keys" "7.7.0" + "@typescript-eslint/types" "8.0.0-alpha.11" + "@typescript-eslint/visitor-keys" "8.0.0-alpha.11" -"@typescript-eslint/type-utils@7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.7.0.tgz#36792ff4209a781b058de61631a48df17bdefbc5" - integrity sha512-bOp3ejoRYrhAlnT/bozNQi3nio9tIgv3U5C0mVDdZC7cpcQEDZXvq8inrHYghLVwuNABRqrMW5tzAv88Vy77Sg== +"@typescript-eslint/type-utils@8.0.0-alpha.11": + version "8.0.0-alpha.11" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.0.0-alpha.11.tgz#229cc832493b8572bd920c83277945ea2a329fb6" + integrity sha512-0MvON7i0fCdVHCFAHK1VmeQwtmK7NnGT8lpXvXYYtiMlBJa+rVesh9yTAsgvGum7PmLXecJC9GpPkD9f3K1vYQ== dependencies: - "@typescript-eslint/typescript-estree" "7.7.0" - "@typescript-eslint/utils" "7.7.0" + "@typescript-eslint/typescript-estree" "8.0.0-alpha.11" + "@typescript-eslint/utils" "8.0.0-alpha.11" debug "^4.3.4" ts-api-utils "^1.3.0" -"@typescript-eslint/types@7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.7.0.tgz#23af4d24bf9ce15d8d301236e3e3014143604f27" - integrity sha512-G01YPZ1Bd2hn+KPpIbrAhEWOn5lQBrjxkzHkWvP6NucMXFtfXoevK82hzQdpfuQYuhkvFDeQYbzXCjR1z9Z03w== +"@typescript-eslint/types@8.0.0-alpha.11": + version "8.0.0-alpha.11" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.0.0-alpha.11.tgz#a06a27e552c6eedef3fee3dac10c68fb5540b871" + integrity sha512-tkIpFZbuh6uaJrFCriXdrNDALWGKtDqL5bmOKXzNM+J1ydyGuga4TE8NnAcT/y1zfn4Hh8hLtvflnmfPDnOxLQ== -"@typescript-eslint/typescript-estree@7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.0.tgz#b5dd6383b4c6a852d7b256a37af971e8982be97f" - integrity sha512-8p71HQPE6CbxIBy2kWHqM1KGrC07pk6RJn40n0DSc6bMOBBREZxSDJ+BmRzc8B5OdaMh1ty3mkuWRg4sCFiDQQ== +"@typescript-eslint/typescript-estree@8.0.0-alpha.11": + version "8.0.0-alpha.11" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.0.0-alpha.11.tgz#0b8c86add8d1f02ddd89177ee116a082d03b6f65" + integrity sha512-M4aGP+niQG7jmQVkWBXwtwVXW6Q8teE0zhWG2FJYY9YzJ5uEDWE0VeUCFEG5fjOrjhKjTGHMv1hMkwbaYFGOgg== dependencies: - "@typescript-eslint/types" "7.7.0" - "@typescript-eslint/visitor-keys" "7.7.0" + "@typescript-eslint/types" "8.0.0-alpha.11" + "@typescript-eslint/visitor-keys" "8.0.0-alpha.11" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" @@ -3123,25 +3143,25 @@ semver "^7.6.0" ts-api-utils "^1.3.0" -"@typescript-eslint/utils@7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.7.0.tgz#3d2b6606a60ac34f3c625facfb3b3ab7e126f58d" - integrity sha512-LKGAXMPQs8U/zMRFXDZOzmMKgFv3COlxUQ+2NMPhbqgVm6R1w+nU1i4836Pmxu9jZAuIeyySNrN/6Rc657ggig== +"@typescript-eslint/utils@8.0.0-alpha.11": + version "8.0.0-alpha.11" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.0.0-alpha.11.tgz#f453453fd4af128f970e3666a973c56f439f2eb3" + integrity sha512-CUaFRGc0xXfvQouDH+3ddHd0Sf77n7v6Uvy6Uj7oZl2eO3j/z9VJNyJyQ2OpeqRgv0484EYXrsQsniRK2pW8tA== dependencies: "@eslint-community/eslint-utils" "^4.4.0" "@types/json-schema" "^7.0.15" "@types/semver" "^7.5.8" - "@typescript-eslint/scope-manager" "7.7.0" - "@typescript-eslint/types" "7.7.0" - "@typescript-eslint/typescript-estree" "7.7.0" + "@typescript-eslint/scope-manager" "8.0.0-alpha.11" + "@typescript-eslint/types" "8.0.0-alpha.11" + "@typescript-eslint/typescript-estree" "8.0.0-alpha.11" semver "^7.6.0" -"@typescript-eslint/visitor-keys@7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.0.tgz#950148cf1ac11562a2d903fdf7acf76714a2dc9e" - integrity sha512-h0WHOj8MhdhY8YWkzIF30R379y0NqyOHExI9N9KCzvmu05EgG4FumeYa3ccfKUSphyWkWQE1ybVrgz/Pbam6YA== +"@typescript-eslint/visitor-keys@8.0.0-alpha.11": + version "8.0.0-alpha.11" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.0.0-alpha.11.tgz#33ba2106947a6aa100c75aaad0949357b8bb35b4" + integrity sha512-s3ubHZUz16eTgZyWjqh12KUNdJjp5YH7t+2yOCEyzLebrFV8P9z9E5qNxny1nA3b4TjRNC6jLYPhFvE43X22jA== dependencies: - "@typescript-eslint/types" "7.7.0" + "@typescript-eslint/types" "8.0.0-alpha.11" eslint-visitor-keys "^3.4.3" "@vitejs/plugin-vue@^5.0.4": @@ -3150,9 +3170,9 @@ integrity sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ== "@vitest/coverage-v8@^1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@vitest/coverage-v8/-/coverage-v8-1.5.0.tgz#2eb4472b497d820934b1a4e4d387547d3be62ba3" - integrity sha512-1igVwlcqw1QUMdfcMlzzY4coikSIBN944pkueGi0pawrX5I5Z+9hxdTR+w3Sg6Q3eZhvdMAs8ZaF9JuTG1uYOQ== + version "1.6.0" + resolved "https://registry.yarnpkg.com/@vitest/coverage-v8/-/coverage-v8-1.6.0.tgz#2f54ccf4c2d9f23a71294aba7f95b3d2e27d14e7" + integrity sha512-KvapcbMY/8GYIG0rlwwOKCVNRc0OL20rrhFkg/CHNzncV03TE2XWvO5w9uZYoxNiMEBacAJt3unSOiZ7svePew== dependencies: "@ampproject/remapping" "^2.2.1" "@bcoe/v8-coverage" "^0.2.3" @@ -3168,120 +3188,120 @@ strip-literal "^2.0.0" test-exclude "^6.0.0" -"@vitest/expect@1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-1.5.0.tgz#961190510a2723bd4abf5540bcec0a4dfd59ef14" - integrity sha512-0pzuCI6KYi2SIC3LQezmxujU9RK/vwC1U9R0rLuGlNGcOuDWxqWKu6nUdFsX9tH1WU0SXtAxToOsEjeUn1s3hA== +"@vitest/expect@1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-1.6.0.tgz#0b3ba0914f738508464983f4d811bc122b51fb30" + integrity sha512-ixEvFVQjycy/oNgHjqsL6AZCDduC+tflRluaHIzKIsdbzkLn2U/iBnVeJwB6HsIjQBdfMR8Z0tRxKUsvFJEeWQ== dependencies: - "@vitest/spy" "1.5.0" - "@vitest/utils" "1.5.0" + "@vitest/spy" "1.6.0" + "@vitest/utils" "1.6.0" chai "^4.3.10" -"@vitest/runner@1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-1.5.0.tgz#1f7cb78ee4064e73e53d503a19c1b211c03dfe0c" - integrity sha512-7HWwdxXP5yDoe7DTpbif9l6ZmDwCzcSIK38kTSIt6CFEpMjX4EpCgT6wUmS0xTXqMI6E/ONmfgRKmaujpabjZQ== +"@vitest/runner@1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-1.6.0.tgz#a6de49a96cb33b0e3ba0d9064a3e8d6ce2f08825" + integrity sha512-P4xgwPjwesuBiHisAVz/LSSZtDjOTPYZVmNAnpHHSR6ONrf8eCJOFRvUwdHn30F5M1fxhqtl7QZQUk2dprIXAg== dependencies: - "@vitest/utils" "1.5.0" + "@vitest/utils" "1.6.0" p-limit "^5.0.0" pathe "^1.1.1" -"@vitest/snapshot@1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-1.5.0.tgz#cd2d611fd556968ce8fb6b356a09b4593c525947" - integrity sha512-qpv3fSEuNrhAO3FpH6YYRdaECnnRjg9VxbhdtPwPRnzSfHVXnNzzrpX4cJxqiwgRMo7uRMWDFBlsBq4Cr+rO3A== +"@vitest/snapshot@1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-1.6.0.tgz#deb7e4498a5299c1198136f56e6e0f692e6af470" + integrity sha512-+Hx43f8Chus+DCmygqqfetcAZrDJwvTj0ymqjQq4CvmpKFSTVteEOBzCusu1x2tt4OJcvBflyHUE0DZSLgEMtQ== dependencies: magic-string "^0.30.5" pathe "^1.1.1" pretty-format "^29.7.0" -"@vitest/spy@1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-1.5.0.tgz#1369a1bec47f46f18eccfa45f1e8fbb9b5e15e77" - integrity sha512-vu6vi6ew5N5MMHJjD5PoakMRKYdmIrNJmyfkhRpQt5d9Ewhw9nZ5Aqynbi3N61bvk9UvZ5UysMT6ayIrZ8GA9w== +"@vitest/spy@1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-1.6.0.tgz#362cbd42ccdb03f1613798fde99799649516906d" + integrity sha512-leUTap6B/cqi/bQkXUu6bQV5TZPx7pmMBKBQiI0rJA8c3pB56ZsaTbREnF7CJfmvAS4V2cXIBAh/3rVwrrCYgw== dependencies: tinyspy "^2.2.0" -"@vitest/utils@1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-1.5.0.tgz#90c9951f4516f6d595da24876b58e615f6c99863" - integrity sha512-BDU0GNL8MWkRkSRdNFvCUCAVOeHaUlVJ9Tx0TYBZyXaaOTmGtUFObzchCivIBrIwKzvZA7A9sCejVhXM2aY98A== +"@vitest/utils@1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-1.6.0.tgz#5c5675ca7d6f546a7b4337de9ae882e6c57896a1" + integrity sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw== dependencies: diff-sequences "^29.6.3" estree-walker "^3.0.3" loupe "^2.3.7" pretty-format "^29.7.0" -"@volar/language-core@2.2.0-alpha.8": - version "2.2.0-alpha.8" - resolved "https://registry.yarnpkg.com/@volar/language-core/-/language-core-2.2.0-alpha.8.tgz#74120a27ff2498ad297e86d17be95a9c7e1b46f5" - integrity sha512-Ew1Iw7/RIRNuDLn60fWJdOLApAlfTVPxbPiSLzc434PReC9kleYtaa//Wo2WlN1oiRqneW0pWQQV0CwYqaimLQ== +"@volar/language-core@2.2.2", "@volar/language-core@~2.2.2": + version "2.2.2" + resolved "https://registry.yarnpkg.com/@volar/language-core/-/language-core-2.2.2.tgz#3c0e745a6d279e6f1872ad3de406683e2e92002b" + integrity sha512-GuvEL4JdxbnLVhPLICncCGT+tVW4cIz9GxXNeDofNnJ4iNTKhr5suGVsA1GLOne9PbraSjn8PlLt+pvLxuRVeQ== dependencies: - "@volar/source-map" "2.2.0-alpha.8" + "@volar/source-map" "2.2.2" -"@volar/source-map@2.2.0-alpha.8": - version "2.2.0-alpha.8" - resolved "https://registry.yarnpkg.com/@volar/source-map/-/source-map-2.2.0-alpha.8.tgz#ca090f828fbef7e09ea06a636c41a06aa2afe153" - integrity sha512-E1ZVmXFJ5DU4fWDcWHzi8OLqqReqIDwhXvIMhVdk6+VipfMVv4SkryXu7/rs4GA/GsebcRyJdaSkKBB3OAkIcA== +"@volar/source-map@2.2.2": + version "2.2.2" + resolved "https://registry.yarnpkg.com/@volar/source-map/-/source-map-2.2.2.tgz#ec25e8366297b1e9bbd3abcb1636330010d59d59" + integrity sha512-vUwvZuSW6iN4JI9QRinh9EjFasx1TUtnaWMKwgWx08xz1PyYuNkLlWlrZXBZ5GGBhML0u230M/7X+AHY2h9yKg== dependencies: muggle-string "^0.4.0" -"@volar/typescript@2.2.0-alpha.8": - version "2.2.0-alpha.8" - resolved "https://registry.yarnpkg.com/@volar/typescript/-/typescript-2.2.0-alpha.8.tgz#83a056c52995b4142364be3dda41d955a96f7356" - integrity sha512-RLbRDI+17CiayHZs9HhSzlH0FhLl/+XK6o2qoiw2o2GGKcyD1aDoY6AcMd44acYncTOrqoTNoY6LuCiRyiJiGg== +"@volar/typescript@~2.2.2": + version "2.2.2" + resolved "https://registry.yarnpkg.com/@volar/typescript/-/typescript-2.2.2.tgz#b133919b5d1ef99f882916ddb62297766500843c" + integrity sha512-WcwOREz7+uOrpjUrKhOMaOKKmyPdtqF95HWX7SE0d9hhBB1KkfahxhaAex5U9Bn43LfINHlycLoYCNEtfeKm0g== dependencies: - "@volar/language-core" "2.2.0-alpha.8" + "@volar/language-core" "2.2.2" path-browserify "^1.0.1" -"@vue/compiler-core@3.4.23": - version "3.4.23" - resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.4.23.tgz#a08f5998e391ad75e602a66dd7255af9054df2f3" - integrity sha512-HAFmuVEwNqNdmk+w4VCQ2pkLk1Vw4XYiiyxEp3z/xvl14aLTUBw2OfVH3vBcx+FtGsynQLkkhK410Nah1N2yyQ== +"@vue/compiler-core@3.4.27": + version "3.4.27" + resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.4.27.tgz#e69060f4b61429fe57976aa5872cfa21389e4d91" + integrity sha512-E+RyqY24KnyDXsCuQrI+mlcdW3ALND6U7Gqa/+bVwbcpcR3BRRIckFoz7Qyd4TTlnugtwuI7YgjbvsLmxb+yvg== dependencies: - "@babel/parser" "^7.24.1" - "@vue/shared" "3.4.23" + "@babel/parser" "^7.24.4" + "@vue/shared" "3.4.27" entities "^4.5.0" estree-walker "^2.0.2" source-map-js "^1.2.0" -"@vue/compiler-dom@3.4.23", "@vue/compiler-dom@^3.4.0": - version "3.4.23" - resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.4.23.tgz#6fa622d1e5c8508551564c5dc5948e9cddf60867" - integrity sha512-t0b9WSTnCRrzsBGrDd1LNR5HGzYTr7LX3z6nNBG+KGvZLqrT0mY6NsMzOqlVMBKKXKVuusbbB5aOOFgTY+senw== +"@vue/compiler-dom@3.4.27", "@vue/compiler-dom@^3.4.0": + version "3.4.27" + resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.4.27.tgz#d51d35f40d00ce235d7afc6ad8b09dfd92b1cc1c" + integrity sha512-kUTvochG/oVgE1w5ViSr3KUBh9X7CWirebA3bezTbB5ZKBQZwR2Mwj9uoSKRMFcz4gSMzzLXBPD6KpCLb9nvWw== dependencies: - "@vue/compiler-core" "3.4.23" - "@vue/shared" "3.4.23" + "@vue/compiler-core" "3.4.27" + "@vue/shared" "3.4.27" -"@vue/compiler-sfc@3.4.23", "@vue/compiler-sfc@^3.4.21": - version "3.4.23" - resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.4.23.tgz#7041517b9bbd1b304f0db33bfa424e9a899fda8d" - integrity sha512-fSDTKTfzaRX1kNAUiaj8JB4AokikzStWgHooMhaxyjZerw624L+IAP/fvI4ZwMpwIh8f08PVzEnu4rg8/Npssw== +"@vue/compiler-sfc@3.4.27", "@vue/compiler-sfc@^3.4.21": + version "3.4.27" + resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.4.27.tgz#399cac1b75c6737bf5440dc9cf3c385bb2959701" + integrity sha512-nDwntUEADssW8e0rrmE0+OrONwmRlegDA1pD6QhVeXxjIytV03yDqTey9SBDiALsvAd5U4ZrEKbMyVXhX6mCGA== dependencies: - "@babel/parser" "^7.24.1" - "@vue/compiler-core" "3.4.23" - "@vue/compiler-dom" "3.4.23" - "@vue/compiler-ssr" "3.4.23" - "@vue/shared" "3.4.23" + "@babel/parser" "^7.24.4" + "@vue/compiler-core" "3.4.27" + "@vue/compiler-dom" "3.4.27" + "@vue/compiler-ssr" "3.4.27" + "@vue/shared" "3.4.27" estree-walker "^2.0.2" - magic-string "^0.30.8" + magic-string "^0.30.10" postcss "^8.4.38" source-map-js "^1.2.0" -"@vue/compiler-ssr@3.4.23": - version "3.4.23" - resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.4.23.tgz#1ae4afe962a9e156b1a79eff909c37cd423dd4c2" - integrity sha512-hb6Uj2cYs+tfqz71Wj6h3E5t6OKvb4MVcM2Nl5i/z1nv1gjEhw+zYaNOV+Xwn+SSN/VZM0DgANw5TuJfxfezPg== +"@vue/compiler-ssr@3.4.27": + version "3.4.27" + resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.4.27.tgz#2a8ecfef1cf448b09be633901a9c020360472e3d" + integrity sha512-CVRzSJIltzMG5FcidsW0jKNQnNRYC8bT21VegyMMtHmhW3UOI7knmUehzswXLrExDLE6lQCZdrhD4ogI7c+vuw== dependencies: - "@vue/compiler-dom" "3.4.23" - "@vue/shared" "3.4.23" + "@vue/compiler-dom" "3.4.27" + "@vue/shared" "3.4.27" -"@vue/language-core@2.0.13": - version "2.0.13" - resolved "https://registry.yarnpkg.com/@vue/language-core/-/language-core-2.0.13.tgz#2d1638b882011187b4b57115425d52b0901acab5" - integrity sha512-oQgM+BM66SU5GKtUMLQSQN0bxHFkFpLSSAiY87wVziPaiNQZuKVDt/3yA7GB9PiQw0y/bTNL0bOc0jM/siYjKg== +"@vue/language-core@2.0.17": + version "2.0.17" + resolved "https://registry.yarnpkg.com/@vue/language-core/-/language-core-2.0.17.tgz#25ba5c7f4450790cc6cfaccf9805a6b91ada1bd7" + integrity sha512-tHw2J6G9yL4kn3jN5MftOHEq86Y6qnuohBQ1OHkJ73fAv3OYgwDI1cfX7ds0OEJEycOMG64BA3ql5bDgDa41zw== dependencies: - "@volar/language-core" "2.2.0-alpha.8" + "@volar/language-core" "~2.2.2" "@vue/compiler-dom" "^3.4.0" "@vue/shared" "^3.4.0" computeds "^0.0.1" @@ -3289,47 +3309,47 @@ path-browserify "^1.0.1" vue-template-compiler "^2.7.14" -"@vue/reactivity@3.4.23": - version "3.4.23" - resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.4.23.tgz#f29044a90a24994af075e4368790f31fa29ed747" - integrity sha512-GlXR9PL+23fQ3IqnbSQ8OQKLodjqCyoCrmdLKZk3BP7jN6prWheAfU7a3mrltewTkoBm+N7qMEb372VHIkQRMQ== +"@vue/reactivity@3.4.27": + version "3.4.27" + resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.4.27.tgz#6ece72331bf719953f5eaa95ec60b2b8d49e3791" + integrity sha512-kK0g4NknW6JX2yySLpsm2jlunZJl2/RJGZ0H9ddHdfBVHcNzxmQ0sS0b09ipmBoQpY8JM2KmUw+a6sO8Zo+zIA== dependencies: - "@vue/shared" "3.4.23" + "@vue/shared" "3.4.27" -"@vue/runtime-core@3.4.23": - version "3.4.23" - resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.4.23.tgz#21f6c7153c33f56081145c2819c2f194cbe3eb22" - integrity sha512-FeQ9MZEXoFzFkFiw9MQQ/FWs3srvrP+SjDKSeRIiQHIhtkzoj0X4rWQlRNHbGuSwLra6pMyjAttwixNMjc/xLw== +"@vue/runtime-core@3.4.27": + version "3.4.27" + resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.4.27.tgz#1b6e1d71e4604ba7442dd25ed22e4a1fc6adbbda" + integrity sha512-7aYA9GEbOOdviqVvcuweTLe5Za4qBZkUY7SvET6vE8kyypxVgaT1ixHLg4urtOlrApdgcdgHoTZCUuTGap/5WA== dependencies: - "@vue/reactivity" "3.4.23" - "@vue/shared" "3.4.23" + "@vue/reactivity" "3.4.27" + "@vue/shared" "3.4.27" -"@vue/runtime-dom@3.4.23": - version "3.4.23" - resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.4.23.tgz#d5a9cca88b445de125c57e6b0d73faa2491e853f" - integrity sha512-RXJFwwykZWBkMiTPSLEWU3kgVLNAfActBfWFlZd0y79FTUxexogd0PLG4HH2LfOktjRxV47Nulygh0JFXe5f9A== +"@vue/runtime-dom@3.4.27": + version "3.4.27" + resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.4.27.tgz#fe8d1ce9bbe8921d5dd0ad5c10df0e04ef7a5ee7" + integrity sha512-ScOmP70/3NPM+TW9hvVAz6VWWtZJqkbdf7w6ySsws+EsqtHvkhxaWLecrTorFxsawelM5Ys9FnDEMt6BPBDS0Q== dependencies: - "@vue/runtime-core" "3.4.23" - "@vue/shared" "3.4.23" + "@vue/runtime-core" "3.4.27" + "@vue/shared" "3.4.27" csstype "^3.1.3" -"@vue/server-renderer@3.4.23": - version "3.4.23" - resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.4.23.tgz#e605872e26d995f5ba9382e8758cd8cc7fa2e16d" - integrity sha512-LDwGHtnIzvKFNS8dPJ1SSU5Gvm36p2ck8wCZc52fc3k/IfjKcwCyrWEf0Yag/2wTFUBXrqizfhK9c/mC367dXQ== +"@vue/server-renderer@3.4.27": + version "3.4.27" + resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.4.27.tgz#3306176f37e648ba665f97dda3ce705687be63d2" + integrity sha512-dlAMEuvmeA3rJsOMJ2J1kXU7o7pOxgsNHVr9K8hB3ImIkSuBrIdy0vF66h8gf8Tuinf1TK3mPAz2+2sqyf3KzA== dependencies: - "@vue/compiler-ssr" "3.4.23" - "@vue/shared" "3.4.23" + "@vue/compiler-ssr" "3.4.27" + "@vue/shared" "3.4.27" -"@vue/shared@3.4.23", "@vue/shared@^3.4.0": - version "3.4.23" - resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.4.23.tgz#e536a6dfd2f5f950d08c2e8ebcfe7e5329a851a1" - integrity sha512-wBQ0gvf+SMwsCQOyusNw/GoXPV47WGd1xB5A1Pgzy0sQ3Bi5r5xm3n+92y3gCnB3MWqnRDdvfkRGxhKtbBRNgg== +"@vue/shared@3.4.27", "@vue/shared@^3.4.0": + version "3.4.27" + resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.4.27.tgz#f05e3cd107d157354bb4ae7a7b5fc9cf73c63b50" + integrity sha512-DL3NmY2OFlqmYYrzp39yi3LDkKxa5vZVwxWdQ3rG0ekuWscHraeIbnI8t+aZK7qhYqEqWKTUdijadunb9pnrgA== "@vue/test-utils@^2.4.5": - version "2.4.5" - resolved "https://registry.yarnpkg.com/@vue/test-utils/-/test-utils-2.4.5.tgz#010aa4debe6602d83dc75f233b397092742105a2" - integrity sha512-oo2u7vktOyKUked36R93NB7mg2B+N7Plr8lxp2JBGwr18ch6EggFjixSCdIVVLkT6Qr0z359Xvnafc9dcKyDUg== + version "2.4.6" + resolved "https://registry.yarnpkg.com/@vue/test-utils/-/test-utils-2.4.6.tgz#7d534e70c4319d2a587d6a3b45a39e9695ade03c" + integrity sha512-FMxEjOpYNYiFe0GkaHsnJPXFHxQ6m4t8vI/ElPGpMWxZKpmRvQ33OIrvRXemy6yha03RxhOlQuy+gZMC3CQSow== dependencies: js-beautify "^1.14.9" vue-component-type-helpers "^2.0.0" @@ -3485,11 +3505,6 @@ resolved "https://registry.yarnpkg.com/JSV/-/JSV-4.0.2.tgz#d077f6825571f82132f9dffaed587b4029feff57" integrity sha512-ZJ6wx9xaKJ3yFUhq5/sk82PJMuUyLk277I8mQeyDgCTjGdjWJIvPfaU5LIXaMuaN2UO1X3kZH4+lgphublZUHw== -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - abbrev@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-2.0.0.tgz#cf59829b8b4f03f89dda2771cb7f3653828c89bf" @@ -3567,14 +3582,14 @@ ajv@^6.12.4, ajv@^6.12.5: uri-js "^4.2.2" ajv@^8.0.0, ajv@^8.0.1, ajv@^8.9.0: - version "8.12.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + version "8.13.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.13.0.tgz#a3939eaec9fb80d217ddf0c3376948c023f28c91" + integrity sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA== dependencies: - fast-deep-equal "^3.1.1" + fast-deep-equal "^3.1.3" json-schema-traverse "^1.0.0" require-from-string "^2.0.2" - uri-js "^4.2.2" + uri-js "^4.4.1" almond@~0.3.1: version "0.3.3" @@ -3638,17 +3653,17 @@ anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" -arches-dev-dependencies@archesproject/arches-dev-dependencies#cbyrd-upgrade-dev-dependencies: +arches-dev-dependencies@archesproject/arches-dev-dependencies#dev/7.6.x: version "7.6.0" - resolved "https://codeload.github.com/archesproject/arches-dev-dependencies/tar.gz/9915848bd3d1d830229e414fee76667b12f102bb" + resolved "https://codeload.github.com/archesproject/arches-dev-dependencies/tar.gz/41f700e27576b9701d00d2a07a991f185868240a" dependencies: "@babel/core" "^7.24.4" - "@babel/eslint-parser" "^7.24.1" + "@babel/eslint-parser" "^7.24.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-transform-class-properties" "^7.24.1" "@babel/plugin-transform-runtime" "^7.24.3" "@babel/preset-env" "^7.24.2" - "@typescript-eslint/parser" "^7.7.0" + "@typescript-eslint/parser" "^8.0.0-alpha.11" "@vitejs/plugin-vue" "^5.0.4" "@vitest/coverage-v8" "^1.5.0" "@vue/test-utils" "^2.4.5" @@ -3679,8 +3694,10 @@ arches-dev-dependencies@archesproject/arches-dev-dependencies#cbyrd-upgrade-dev- text-loader "^0.0.1" ts-loader "^9.5.1" typescript "^5.4.5" - typescript-eslint "^7.7.0" + typescript-eslint "^8.0.0-alpha.11" + vite "^5.0.0" vitest "^1.5.0" + vue "^3.4.21" vue-loader "^17.4.2" vue-template-compiler "^2.7.16" vue-tsc "^2.0.13" @@ -3791,12 +3808,12 @@ babel-loader@^9.1.3: schema-utils "^4.0.0" babel-plugin-polyfill-corejs2@^0.4.10: - version "0.4.10" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.10.tgz#276f41710b03a64f6467433cab72cbc2653c38b1" - integrity sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ== + version "0.4.11" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz#30320dfe3ffe1a336c15afdcdafd6fd615b25e33" + integrity sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q== dependencies: "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.6.1" + "@babel/helper-define-polyfill-provider" "^0.6.2" semver "^6.3.1" babel-plugin-polyfill-corejs3@^0.10.1, babel-plugin-polyfill-corejs3@^0.10.4: @@ -3808,11 +3825,11 @@ babel-plugin-polyfill-corejs3@^0.10.1, babel-plugin-polyfill-corejs3@^0.10.4: core-js-compat "^3.36.1" babel-plugin-polyfill-regenerator@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.1.tgz#4f08ef4c62c7a7f66a35ed4c0d75e30506acc6be" - integrity sha512-JfTApdE++cgcTWjsiCQlLyFBMbTUft9ja17saCc93lgV33h4tuCVj7tlvu//qpLwaG+3yEz7/KhahGrUMkVq9g== + version "0.6.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz#addc47e240edd1da1058ebda03021f382bba785e" + integrity sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.1" + "@babel/helper-define-polyfill-provider" "^0.6.2" backbone@1.3.3: version "1.3.3" @@ -4015,9 +4032,9 @@ camelcase@^5.3.1: integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== caniuse-lite@^1.0.30001587, caniuse-lite@^1.0.30001599: - version "1.0.30001610" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001610.tgz#2f44ed6e21d359e914271ae35b68903632628ccf" - integrity sha512-QFutAY4NgaelojVMjY63o6XlZyORPaLfyMnsl3HgnWdJUcX6K0oaJymHjH8PT5Gk7sTm8rvC/c5COUQKXqmOMA== + version "1.0.30001618" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001618.tgz#fad74fa006aef0f01e8e5c0a5540c74d8d36ec6f" + integrity sha512-p407+D1tIkDvsEAPS22lJxLQQaG8OTBEqo0KhzfABGk0TU4juBNDSfH0hyAp/HRyx+M8L17z/ltyhxh27FTfQg== chai@^4.3.10: version "4.4.1" @@ -4253,6 +4270,11 @@ concat-stream@^1.6.1: readable-stream "^2.2.2" typedarray "^0.0.6" +confbox@^0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/confbox/-/confbox-0.1.7.tgz#ccfc0a2bcae36a84838e83a3b7f770fb17d6c579" + integrity sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA== + config-chain@^1.1.13: version "1.1.13" resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" @@ -4315,16 +4337,16 @@ copy-webpack-plugin@^12.0.2: serialize-javascript "^6.0.2" core-js-compat@^3.31.0, core-js-compat@^3.36.1: - version "3.36.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.36.1.tgz#1818695d72c99c25d621dca94e6883e190cea3c8" - integrity sha512-Dk997v9ZCt3X/npqzyGdTlq6t7lDBhZwGvV94PKzDArjp7BTRm7WlDAXYd/OWdeFHO8OChQYRJNJvUCqCbrtKA== + version "3.37.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.37.1.tgz#c844310c7852f4bdf49b8d339730b97e17ff09ee" + integrity sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg== dependencies: browserslist "^4.23.0" core-js@^3.21.1: - version "3.36.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.36.1.tgz#c97a7160ebd00b2de19e62f4bbd3406ab720e578" - integrity sha512-BTvUrwxVBezj5SZ3f10ImnX2oRByMxql3EimVqMysepbC9EeMUOpLwdy6Eoili2x6E4kf+ZUB5k/+Jv55alPfA== + version "3.37.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.37.1.tgz#d21751ddb756518ac5a00e4d66499df981a62db9" + integrity sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw== core-util-is@~1.0.0: version "1.0.3" @@ -4371,24 +4393,24 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -css-blank-pseudo@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-6.0.1.tgz#f79f8b84cc00f891e16aa85f14093c5e1c3499a8" - integrity sha512-goSnEITByxTzU4Oh5oJZrEWudxTqk7L6IXj1UW69pO6Hv0UdX+Vsrt02FFu5DweRh2bLu6WpX/+zsQCu5O1gKw== +css-blank-pseudo@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-6.0.2.tgz#50db072d4fb5b40c2df9ffe5ca5fbb9b19c77fc8" + integrity sha512-J/6m+lsqpKPqWHOifAFtKFeGLOzw3jR92rxQcwRUfA/eTuZzKfKlxOmYDx2+tqOPQAueNvBiY8WhAeHu5qNmTg== dependencies: postcss-selector-parser "^6.0.13" -css-functions-list@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/css-functions-list/-/css-functions-list-3.2.1.tgz#2eb205d8ce9f9ce74c5c1d7490b66b77c45ce3ea" - integrity sha512-Nj5YcaGgBtuUmn1D7oHqPW0c9iui7xsTsj5lIX8ZgevdfhmjFfKB3r8moHJtNJnctnYXJyYX5I1pp90HM4TPgQ== +css-functions-list@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/css-functions-list/-/css-functions-list-3.2.2.tgz#9a54c6dd8416ed25c1079cd88234e927526c1922" + integrity sha512-c+N0v6wbKVxTu5gOBBFkr9BEdBWaqqjQeiJ8QvSRIJOf+UxlJh930m8e6/WNeODIK0mYLFkoONrnj16i2EcvfQ== -css-has-pseudo@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-6.0.3.tgz#babd8f208507d553b3986ee803b3adf4dd09c00e" - integrity sha512-qIsDxK/z0byH/mpNsv5hzQ5NOl8m1FRmOLgZpx4bG5uYHnOlO2XafeMI4mFIgNSViHwoUWcxSJZyyijaAmbs+A== +css-has-pseudo@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-6.0.5.tgz#372e7293ef9bb901ec0bdce85a6fc1365012fa2c" + integrity sha512-ZTv6RlvJJZKp32jPYnAJVhowDCrRrHUTAxsYSuUPBEDJjzws6neMnzkRblxtgmv1RgcV5dhH2gn7E3wA9Wt6lw== dependencies: - "@csstools/selector-specificity" "^3.0.3" + "@csstools/selector-specificity" "^3.1.1" postcss-selector-parser "^6.0.13" postcss-value-parser "^4.2.0" @@ -4446,9 +4468,9 @@ csscolorparser@~1.0.3: integrity sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w== cssdb@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-8.0.0.tgz#7fdaea83364f6c9edc364e7681ebef644a327d3d" - integrity sha512-hfpm8VXc7/dhcEWpLvKDLwImOSk1sa2DxL36OEiY/4h2MGfKjPYIMZo4hnEEl+TCJr2GwcX46jF5TafRASDe9w== + version "8.0.1" + resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-8.0.1.tgz#970b4d1890715625ba25999454e9c9aca7b1e809" + integrity sha512-diegY/vnOYmPXY0bOBj5jeHaiK8MMpjgPuipirY8pF9AthtqEXgqVdKF5tnb6RTc/ZdhQqG0TBnInQ5CbbUW7Q== cssesc@^3.0.0: version "3.0.0" @@ -4475,12 +4497,9 @@ cytoscape-cola@^2.4.0: webcola "^3.4.0" cytoscape@^3.18.2: - version "3.28.1" - resolved "https://registry.yarnpkg.com/cytoscape/-/cytoscape-3.28.1.tgz#f32c3e009bdf32d47845a16a4cd2be2bbc01baf7" - integrity sha512-xyItz4O/4zp9/239wCcH8ZcFuuZooEeF8KHRmzjDfGdXsj3OG9MFSMA0pJE0uX3uCN/ygof6hHf4L7lst+JaDg== - dependencies: - heap "^0.2.6" - lodash "^4.17.21" + version "3.29.2" + resolved "https://registry.yarnpkg.com/cytoscape/-/cytoscape-3.29.2.tgz#c99f42513c80a75e2e94858add32896c860202ac" + integrity sha512-2G1ycU28Nh7OHT9rkXRLpCDP30MKH1dXJORZuBhtEhEW7pKwgPi77ImqlCWinouyE1PNepIOGZBOrE84DG7LyQ== d3-array@1: version "1.2.4" @@ -4971,7 +4990,7 @@ define-lazy-prop@^3.0.0: resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== -define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: +define-properties@^1.2.0, define-properties@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== @@ -5123,9 +5142,9 @@ ee-first@1.1.1: integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== electron-to-chromium@^1.4.668: - version "1.4.737" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.737.tgz#3a774a58e04980741f65d440f5fdf57af18b6dde" - integrity sha512-QvLTxaLHKdy5YxvixAw/FfHq2eWLUL9KvsPjp0aHK1gI5d3EDuDgITkvj0nFO2c6zUY3ZqVAJQiBYyQP9tQpfw== + version "1.4.768" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.768.tgz#3795bd000ccb8978be1af2d06320b2dac810a372" + integrity sha512-z2U3QcvNuxdkk33YV7R1bVMNq7fL23vq3WfO5BHcqrm4TnDGReouBfYKLEFh5umoK1XACjEwp8mmnhXk2EJigw== emoji-regex@^8.0.0: version "8.0.0" @@ -5155,9 +5174,9 @@ end-of-stream@^1.1.0: once "^1.4.0" enhanced-resolve@^5.0.0, enhanced-resolve@^5.16.0: - version "5.16.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz#65ec88778083056cb32487faa9aef82ed0864787" - integrity sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA== + version "5.16.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.16.1.tgz#e8bc63d51b826d6f1cbc0a150ecb5a8b0c62e567" + integrity sha512-4U5pNsuDl0EhuZpq46M5xPslstkviJuhrdobaRDBk2Jy2KO37FDAJl4lb2KlNabxT0m4MTK2UHNrsAcphE8nyw== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" @@ -5178,9 +5197,9 @@ env-paths@^2.2.1: integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== envinfo@^7.7.3: - version "7.12.0" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.12.0.tgz#b56723b39c2053d67ea5714f026d05d4f5cc7acd" - integrity sha512-Iw9rQJBGpJRd3rwXm9ft/JiGoAZmLxxJZELYDQoPRZ4USVhkKtIcNBPw6U+/K2mBpaqM25JSV6Yl4Az9vO2wJg== + version "7.13.0" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.13.0.tgz#81fbb81e5da35d74e814941aeab7c325a606fb31" + integrity sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q== eonasdan-bootstrap-datetimepicker@~4.17.49: version "4.17.49" @@ -5264,9 +5283,9 @@ es-errors@^1.2.1, es-errors@^1.3.0: integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== es-module-lexer@^1.2.1: - version "1.5.0" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.5.0.tgz#4878fee3789ad99e065f975fdd3c645529ff0236" - integrity sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw== + version "1.5.2" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.5.2.tgz#00b423304f2500ac59359cc9b6844951f372d497" + integrity sha512-l60ETUTmLqbVbVHv1J4/qj+M8nq7AwMzEcg3kmJDt9dCNrTk+yHcYFf/Kw75pMDwd9mPcIGCG5LcS20SxYRzFA== es-object-atoms@^1.0.0: version "1.0.0" @@ -5322,7 +5341,7 @@ esbuild@^0.20.1: "@esbuild/win32-ia32" "0.20.2" "@esbuild/win32-x64" "0.20.2" -escalade@^3.1.1: +escalade@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== @@ -5343,9 +5362,9 @@ escape-string-regexp@^4.0.0: integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== eslint-plugin-vue@^9.25.0: - version "9.25.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-9.25.0.tgz#615cb7bb6d0e2140d21840b9aa51dce69e803e7a" - integrity sha512-tDWlx14bVe6Bs+Nnh3IGrD+hb11kf2nukfm6jLsmJIhmiRQ1SUaksvwY9U5MvPB0pcrg0QK0xapQkfITs3RKOA== + version "9.26.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-9.26.0.tgz#bf7f5cce62c8f878059b91edae44d22974133af5" + integrity sha512-eTvlxXgd4ijE1cdur850G6KalZqk65k1JKoOI2d1kT3hr8sPD07j1q98FRFdNnpxBELGPWxZmInxeHGF/GxtqQ== dependencies: "@eslint-community/eslint-utils" "^4.4.0" globals "^13.24.0" @@ -5396,16 +5415,17 @@ eslint-visitor-keys@^4.0.0: integrity sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw== eslint@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.0.0.tgz#6270548758e390343f78c8afd030566d86927d40" - integrity sha512-IMryZ5SudxzQvuod6rUdIUz29qFItWx281VhtFVc2Psy/ZhlCeD/5DT6lBIJ4H3G+iamGJoTln1v+QSuPw0p7Q== + version "9.2.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.2.0.tgz#0700ebc99528753315d78090876911d3cdbf19fe" + integrity sha512-0n/I88vZpCOzO+PQpt0lbsqmn9AsnsJAQseIqhZFI8ibQT0U1AkEKRxA3EVMos0BoHSXDQvCXY25TUjB5tr8Og== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" "@eslint/eslintrc" "^3.0.2" - "@eslint/js" "9.0.0" - "@humanwhocodes/config-array" "^0.12.3" + "@eslint/js" "9.2.0" + "@humanwhocodes/config-array" "^0.13.0" "@humanwhocodes/module-importer" "^1.0.1" + "@humanwhocodes/retry" "^0.2.3" "@nodelib/fs.walk" "^1.2.8" ajv "^6.12.4" chalk "^4.0.0" @@ -5421,7 +5441,6 @@ eslint@^9.0.0: file-entry-cache "^8.0.0" find-up "^5.0.0" glob-parent "^6.0.2" - graphemer "^1.4.0" ignore "^5.2.0" imurmurhash "^0.1.4" is-glob "^4.0.0" @@ -5994,15 +6013,15 @@ glob-to-regexp@^0.4.1: path-is-absolute "^1.0.0" glob@^10.3.3, glob@^10.3.7: - version "10.3.12" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.12.tgz#3a65c363c2e9998d220338e88a5f6ac97302960b" - integrity sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg== + version "10.3.15" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.15.tgz#e72bc61bc3038c90605f5dd48543dc67aaf3b50d" + integrity sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw== dependencies: foreground-child "^3.1.0" jackspeak "^2.3.6" minimatch "^9.0.1" minipass "^7.0.4" - path-scurry "^1.10.2" + path-scurry "^1.11.0" global-modules@^2.0.0: version "2.0.0" @@ -6038,11 +6057,12 @@ globals@^14.0.0: integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== globalthis@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" - integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + version "1.0.4" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" + integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== dependencies: - define-properties "^1.1.3" + define-properties "^1.2.1" + gopd "^1.0.1" globby@^11.1.0: version "11.1.0" @@ -6091,13 +6111,6 @@ gopd@^1.0.1: dependencies: get-intrinsic "^1.1.3" -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - got@^11.8.5: version "11.8.6" resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" @@ -6224,11 +6237,6 @@ he@^1.2.0: resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== -heap@^0.2.6: - version "0.2.7" - resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.7.tgz#1e6adf711d3f27ce35a81fe3b7bd576c2260a8fc" - integrity sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg== - hosted-git-info@^2.1.4: version "2.8.9" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" @@ -6418,6 +6426,11 @@ human-signals@^5.0.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-5.0.0.tgz#42665a284f9ae0dade3ba41ebc37eb4b852f3a28" integrity sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ== +hyperdyperid@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/hyperdyperid/-/hyperdyperid-1.2.0.tgz#59668d323ada92228d2a869d3e474d5a33b69e6b" + integrity sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A== + iconv-lite@0.4, iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -6453,9 +6466,9 @@ ignore@^5.2.0, ignore@^5.2.4, ignore@^5.3.1: integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== immutable@^4.0.0: - version "4.3.5" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.5.tgz#f8b436e66d59f99760dc577f5c99a4fd2a5cc5a0" - integrity sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw== + version "4.3.6" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.6.tgz#6a05f7858213238e587fb83586ffa3b4b27f0447" + integrity sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ== import-fresh@^3.2.1, import-fresh@^3.3.0: version "3.3.0" @@ -6544,9 +6557,9 @@ ipaddr.js@1.9.1: integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== ipaddr.js@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.1.0.tgz#2119bc447ff8c257753b196fc5f1ce08a4cdf39f" - integrity sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ== + version "2.2.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.2.0.tgz#d33fa7bac284f4de7af949638c9d68157c6b92e8" + integrity sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA== is-arguments@^1.1.1: version "1.1.1" @@ -7022,11 +7035,6 @@ json5@^2.1.2, json5@^2.2.3: resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== -jsonc-parser@^3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.1.tgz#031904571ccf929d7670ee8c547545081cb37f1a" - integrity sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA== - jsonlint-lines@1.7.1, jsonlint-lines@^1.7.1: version "1.7.1" resolved "https://registry.yarnpkg.com/jsonlint-lines/-/jsonlint-lines-1.7.1.tgz#507de680d3fb8c4be1641cc57d6f679f29f178ff" @@ -7260,9 +7268,9 @@ lowercase-keys@^2.0.0: integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== lru-cache@^10.2.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" - integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== + version "10.2.2" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.2.tgz#48206bc114c1252940c41b25b41af5b545aca878" + integrity sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ== lru-cache@^5.1.1: version "5.1.1" @@ -7283,10 +7291,10 @@ lt-themify-icons@^1.1.0: resolved "https://registry.yarnpkg.com/lt-themify-icons/-/lt-themify-icons-1.1.0.tgz#945401d5a7205eff653ad5ef4ce94b912ba98c58" integrity sha512-/9PcTKSq6GdUw+bfzeStjOUgsaOmZEwrxwVCmA9CtORgUgKQNCSxKCwgIpDz81IRgBPG7Ob5DefYqINhULsn1g== -magic-string@^0.30.5, magic-string@^0.30.8: - version "0.30.9" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.9.tgz#8927ae21bfdd856310e07a1bc8dd5e73cb6c251d" - integrity sha512-S1+hd+dIrC8EZqKyT9DstTH/0Z+f76kmmvZnkfQVmOpDEF9iVgdYif3Q/pIWHmCoo59bQVGW0kVL3e2nl+9+Sw== +magic-string@^0.30.10, magic-string@^0.30.5: + version "0.30.10" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.10.tgz#123d9c41a0cb5640c892b041d4cfb3bd0aa4b39e" + integrity sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ== dependencies: "@jridgewell/sourcemap-codec" "^1.4.15" @@ -7370,10 +7378,13 @@ media-typer@0.3.0: integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== memfs@^4.6.0: - version "4.8.2" - resolved "https://registry.yarnpkg.com/memfs/-/memfs-4.8.2.tgz#9bb7c3e43647348451082557f05fb170b7442949" - integrity sha512-j4WKth315edViMBGkHW6NTF0QBjsTrcRDmYNcGsPq+ozMEyCCCIlX2d2mJ5wuh6iHvJ3FevUrr48v58YRqVdYg== + version "4.9.2" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-4.9.2.tgz#42e7b48207268dad8c9c48ea5d4952c5d3840433" + integrity sha512-f16coDZlTG1jskq3mxarwB+fGRrd0uXWt+o1WIhRfOwbXQZqUDsTVxQBFK9JjRQHblg8eAG2JSbprDXKjc7ijQ== dependencies: + "@jsonjoy.com/json-pack" "^1.0.3" + "@jsonjoy.com/util" "^1.1.2" + sonic-forest "^1.0.0" tslib "^2.0.0" meow@^13.2.0: @@ -7480,9 +7491,9 @@ min-indent@^1.0.0: integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== mini-css-extract-plugin@^2.8.1: - version "2.8.1" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.8.1.tgz#75245f3f30ce3a56dbdd478084df6fe475f02dc7" - integrity sha512-/1HDlyFRxWIZPI1ZpgqlZ8jMw/1Dp/dl3P0L1jtZ+zVcHqwPhGwaJwKL00WVgfnBy6PWCde9W65or7IIETImuA== + version "2.9.0" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.0.tgz#c73a1327ccf466f69026ac22a8e8fd707b78a235" + integrity sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA== dependencies: schema-utils "^4.0.0" tapable "^2.2.1" @@ -7533,19 +7544,19 @@ minimist@^1.2.6, minimist@^1.2.8: integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== "minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.4: - version "7.0.4" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" - integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== + version "7.1.1" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.1.tgz#f7f85aff59aa22f110b20e27692465cf3bf89481" + integrity sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA== -mlly@^1.2.0, mlly@^1.4.2: - version "1.6.1" - resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.6.1.tgz#0983067dc3366d6314fc5e12712884e6978d028f" - integrity sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA== +mlly@^1.4.2, mlly@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.7.0.tgz#587383ae40dda23cadb11c3c3cc972b277724271" + integrity sha512-U9SDaXGEREBYQgfejV97coK0UL1r+qnF2SyO9A3qcI8MzKnsIFKHNVEkrDyNncQTKQQumsasmeq84eNMdBfsNQ== dependencies: acorn "^8.11.3" pathe "^1.1.2" - pkg-types "^1.0.3" - ufo "^1.3.2" + pkg-types "^1.1.0" + ufo "^1.5.3" moment-timezone@^0.4.0: version "0.4.1" @@ -7681,19 +7692,12 @@ nodemon@^3.1.0: underscore "~1.6.0" nopt@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-7.2.0.tgz#067378c68116f602f552876194fd11f1292503d7" - integrity sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA== + version "7.2.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-7.2.1.tgz#1cac0eab9b8e97c9093338446eddd40b2c8ca1e7" + integrity sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w== dependencies: abbrev "^2.0.0" -nopt@~1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" - integrity sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg== - dependencies: - abbrev "1" - normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -7761,9 +7765,9 @@ numeral@^2.0.6: integrity sha512-qaKRmtYPZ5qdw4jWJD6bxEf1FJEqllJrwxCLIm0sQU/A7v2/czigzOb+C2uSiFsa9lBUzeH7M1oK+Q+OLxL3kA== nwsapi@^2.2.7: - version "2.2.7" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" - integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== + version "2.2.10" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.10.tgz#0b77a68e21a0b483db70b11fad055906e867cda8" + integrity sha512-QK0sRs7MKv0tKe1+5uZIQk/C8XGza4DAnztJG8iD+TpJIORARrCxczA738awHrZoHeTjSSoHqao2teO0dC/gFQ== object-assign@^4.0.1: version "4.1.1" @@ -7847,16 +7851,16 @@ open@^10.0.3: is-wsl "^3.1.0" optionator@^0.9.3: - version "0.9.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" - integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== + version "0.9.4" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== dependencies: - "@aashutoshrathi/word-wrap" "^1.2.3" deep-is "^0.1.3" fast-levenshtein "^2.0.6" levn "^0.4.1" prelude-ls "^1.2.1" type-check "^0.4.0" + word-wrap "^1.2.5" p-cancelable@^2.0.0: version "2.1.1" @@ -8028,10 +8032,10 @@ path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-scurry@^1.10.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.2.tgz#8f6357eb1239d5fa1da8b9f70e9c080675458ba7" - integrity sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA== +path-scurry@^1.11.0: + version "1.11.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" + integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== dependencies: lru-cache "^10.2.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -8051,7 +8055,7 @@ path-type@^5.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-5.0.0.tgz#14b01ed7aea7ddf9c7c3f46181d4d04f9c785bb8" integrity sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg== -pathe@^1.1.0, pathe@^1.1.1, pathe@^1.1.2: +pathe@^1.1.1, pathe@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec" integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== @@ -8069,10 +8073,10 @@ pbf@^3.2.1: ieee754 "^1.1.12" resolve-protobuf-schema "^2.1.0" -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== +picocolors@^1.0.0, picocolors@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" + integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: version "2.3.1" @@ -8115,14 +8119,14 @@ pkg-dir@^7.0.0: dependencies: find-up "^6.3.0" -pkg-types@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.0.3.tgz#988b42ab19254c01614d13f4f65a2cfc7880f868" - integrity sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A== +pkg-types@^1.0.3, pkg-types@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.1.1.tgz#07b626880749beb607b0c817af63aac1845a73f2" + integrity sha512-ko14TjmDuQJ14zsotODv7dBlwxKhUKQEhuhmbqo1uCi9BB0Z2alo/wAXg6q1dTR5TyuqYyWhjtfe/Tsh+X28jQ== dependencies: - jsonc-parser "^3.2.0" - mlly "^1.2.0" - pathe "^1.1.0" + confbox "^0.1.7" + mlly "^1.7.0" + pathe "^1.1.2" pofile@1.0.x: version "1.0.11" @@ -8164,14 +8168,14 @@ postcss-clamp@^4.1.0: dependencies: postcss-value-parser "^4.2.0" -postcss-color-functional-notation@^6.0.8: - version "6.0.8" - resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-6.0.8.tgz#944da638391a4943ecb7628bd7db5a95a9d787c9" - integrity sha512-BilFPTHcfWEnuQeqL83nbSPVK3tcU57S60aOrqgditarNDzOojyF0Gdc2Ur5L+zox366QjrCe0rOBLDO2pNvRQ== +postcss-color-functional-notation@^6.0.11: + version "6.0.11" + resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-6.0.11.tgz#6219b4762519115a397b870707c1a9926ecb52f6" + integrity sha512-gJ+hAtAsgBF4w7eh28Pg7EA60lx7vE5xO/B/yZawaI6FYHky+5avA9YSe73nJHnAMEVFpCMeJc6Wts5g+niksg== dependencies: - "@csstools/css-color-parser" "^1.6.3" - "@csstools/css-parser-algorithms" "^2.6.1" - "@csstools/css-tokenizer" "^2.2.4" + "@csstools/css-color-parser" "^2.0.2" + "@csstools/css-parser-algorithms" "^2.6.3" + "@csstools/css-tokenizer" "^2.3.1" "@csstools/postcss-progressive-custom-properties" "^3.2.0" "@csstools/utilities" "^1.0.0" @@ -8191,35 +8195,35 @@ postcss-color-rebeccapurple@^9.0.3: "@csstools/utilities" "^1.0.0" postcss-value-parser "^4.2.0" -postcss-custom-media@^10.0.4: - version "10.0.4" - resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-10.0.4.tgz#f40fcf05f3ee95e7a34bbdcb4dff99da41f0238f" - integrity sha512-Ubs7O3wj2prghaKRa68VHBvuy3KnTQ0zbGwqDYY1mntxJD0QL2AeiAy+AMfl3HBedTCVr2IcFNktwty9YpSskA== +postcss-custom-media@^10.0.6: + version "10.0.6" + resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-10.0.6.tgz#e194ad7c9190390c20515d45661e9dcaaf031e84" + integrity sha512-BjihQoIO4Wjqv9fQNExSJIim8UAmkhLxuJnhJsLTRFSba1y1MhxkJK5awsM//6JJ+/Tu5QUxf624RQAvKHv6SA== dependencies: - "@csstools/cascade-layer-name-parser" "^1.0.9" - "@csstools/css-parser-algorithms" "^2.6.1" - "@csstools/css-tokenizer" "^2.2.4" - "@csstools/media-query-list-parser" "^2.1.9" + "@csstools/cascade-layer-name-parser" "^1.0.11" + "@csstools/css-parser-algorithms" "^2.6.3" + "@csstools/css-tokenizer" "^2.3.1" + "@csstools/media-query-list-parser" "^2.1.11" -postcss-custom-properties@^13.3.7: - version "13.3.7" - resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-13.3.7.tgz#87f8ce173b147dc5e7e7d7f36123042b2572afd6" - integrity sha512-0N9F/GUCr/D0IazjzHahyYW2bQVDT6qDtEudiGHAhMd3XqhfM3VmfYVlkc/40DOhsPtngSNb54/Ctu8msvFOvQ== +postcss-custom-properties@^13.3.10: + version "13.3.10" + resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-13.3.10.tgz#72a47708e6123f7757e419ad6f0bccb5f7a7ea6d" + integrity sha512-ejaalIpl7p0k0L5ngIZ86AZGmp3m1KdeOCbSQTK4gQcB1ncaoPTHorw206+tsZRIhIDYvh5ZButEje6740YDXw== dependencies: - "@csstools/cascade-layer-name-parser" "^1.0.9" - "@csstools/css-parser-algorithms" "^2.6.1" - "@csstools/css-tokenizer" "^2.2.4" + "@csstools/cascade-layer-name-parser" "^1.0.11" + "@csstools/css-parser-algorithms" "^2.6.3" + "@csstools/css-tokenizer" "^2.3.1" "@csstools/utilities" "^1.0.0" postcss-value-parser "^4.2.0" -postcss-custom-selectors@^7.1.8: - version "7.1.8" - resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-7.1.8.tgz#600ce32a487737038831bb679e9a8011ffc62ee5" - integrity sha512-fqDkGSEsO7+oQaqdRdR8nwwqH+N2uk6LE/2g4myVJJYz/Ly418lHKEleKTdV/GzjBjFcG4n0dbfuH/Pd2BE8YA== +postcss-custom-selectors@^7.1.10: + version "7.1.10" + resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-7.1.10.tgz#caf0b4f2bccdfe9b106b000a56a1b50b8e48df92" + integrity sha512-bV/6+IExyT2J4kMzX6c+ZMlN1xDfjcC4ePr1ywKezcTgwgUn11qQN3jdzFBpo8Dk1K7vO/OYOwMb5AtJP4JZcg== dependencies: - "@csstools/cascade-layer-name-parser" "^1.0.9" - "@csstools/css-parser-algorithms" "^2.6.1" - "@csstools/css-tokenizer" "^2.2.4" + "@csstools/cascade-layer-name-parser" "^1.0.11" + "@csstools/css-parser-algorithms" "^2.6.3" + "@csstools/css-tokenizer" "^2.3.1" postcss-selector-parser "^6.0.13" postcss-dir-pseudo-class@^8.0.1: @@ -8270,14 +8274,14 @@ postcss-image-set-function@^6.0.3: "@csstools/utilities" "^1.0.0" postcss-value-parser "^4.2.0" -postcss-lab-function@^6.0.13: - version "6.0.13" - resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-6.0.13.tgz#6bbddc1c1bc33d1aab4898df3c9ac586bc5d5796" - integrity sha512-tzEThi3prSyomnVqaAU+k/YJib4rxeeTKVfMt+mPcEugFgp0t6xRjoc7fzaWCoEwYLC6GxGLD8/Ugx8COCqabw== +postcss-lab-function@^6.0.16: + version "6.0.16" + resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-6.0.16.tgz#08f5939ffc74803fcb20b7553d4eb3b3b873786c" + integrity sha512-QWv0VxfjgIl8jBR/wuQcm/o31jn4P/LwzYuVKzNQoO5t7HPcU0d3RfWUiDrHN3frmSv+YYZppr3P81tKFTDyqg== dependencies: - "@csstools/css-color-parser" "^1.6.3" - "@csstools/css-parser-algorithms" "^2.6.1" - "@csstools/css-tokenizer" "^2.2.4" + "@csstools/css-color-parser" "^2.0.2" + "@csstools/css-parser-algorithms" "^2.6.3" + "@csstools/css-tokenizer" "^2.3.1" "@csstools/postcss-progressive-custom-properties" "^3.2.0" "@csstools/utilities" "^1.0.0" @@ -8325,13 +8329,13 @@ postcss-modules-values@^4.0.0: dependencies: icss-utils "^5.0.0" -postcss-nesting@^12.1.1: - version "12.1.1" - resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-12.1.1.tgz#6662d9c70e6356686dc24132f2a7520ec90d39ef" - integrity sha512-qc74KvIAQNa5ujZKG1UV286dhaDW6basbUy2i9AzNU/T8C9hpvGu9NZzm1SfePe2yP7sPYgpA8d4sPVopn2Hhw== +postcss-nesting@^12.1.4: + version "12.1.4" + resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-12.1.4.tgz#b79451b22ac1abe96b9aa2f01b27a6f8c447d353" + integrity sha512-CcHOq94K137E+U4Ommu7pexcpp0Tjm24zl4UcqWs1oSLAr5cLI+jLrqQ5h/bdjhMX6cMbzunyustVNnvrzF8Zg== dependencies: "@csstools/selector-resolve-nested" "^1.1.0" - "@csstools/selector-specificity" "^3.0.3" + "@csstools/selector-specificity" "^3.1.1" postcss-selector-parser "^6.0.13" postcss-opacity-percentage@^2.0.0: @@ -8359,53 +8363,53 @@ postcss-place@^9.0.1: postcss-value-parser "^4.2.0" postcss-preset-env@^9.5.5: - version "9.5.5" - resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-9.5.5.tgz#b44aa9110007d92c6d5d157b615d9cff15ac1664" - integrity sha512-tg71KfEgTHMM+C4LpWtKfHFWEunfWj1JThq/Odsw60MOowcffBrMAcSBDE+imftW5/BD3mpOiiTL6c+KcnGaLQ== - dependencies: - "@csstools/postcss-cascade-layers" "^4.0.4" - "@csstools/postcss-color-function" "^3.0.13" - "@csstools/postcss-color-mix-function" "^2.0.13" - "@csstools/postcss-exponential-functions" "^1.0.5" + version "9.5.13" + resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-9.5.13.tgz#7dfab9cbcc35044fd7a0465f87f643249a66cf31" + integrity sha512-YQMwWu6MAc4Envrjf/mW2BTrb5J8WkrJ4dV2VostZVDhrmEPpYREOyhmvtlFLDxK1/AmTDY8aXjZViMC1qKu/w== + dependencies: + "@csstools/postcss-cascade-layers" "^4.0.6" + "@csstools/postcss-color-function" "^3.0.16" + "@csstools/postcss-color-mix-function" "^2.0.16" + "@csstools/postcss-exponential-functions" "^1.0.7" "@csstools/postcss-font-format-keywords" "^3.0.2" - "@csstools/postcss-gamut-mapping" "^1.0.6" - "@csstools/postcss-gradients-interpolation-method" "^4.0.14" - "@csstools/postcss-hwb-function" "^3.0.12" + "@csstools/postcss-gamut-mapping" "^1.0.9" + "@csstools/postcss-gradients-interpolation-method" "^4.0.17" + "@csstools/postcss-hwb-function" "^3.0.15" "@csstools/postcss-ic-unit" "^3.0.6" "@csstools/postcss-initial" "^1.0.1" - "@csstools/postcss-is-pseudo-class" "^4.0.6" - "@csstools/postcss-light-dark-function" "^1.0.3" + "@csstools/postcss-is-pseudo-class" "^4.0.8" + "@csstools/postcss-light-dark-function" "^1.0.5" "@csstools/postcss-logical-float-and-clear" "^2.0.1" "@csstools/postcss-logical-overflow" "^1.0.1" "@csstools/postcss-logical-overscroll-behavior" "^1.0.1" "@csstools/postcss-logical-resize" "^2.0.1" - "@csstools/postcss-logical-viewport-units" "^2.0.7" - "@csstools/postcss-media-minmax" "^1.1.4" - "@csstools/postcss-media-queries-aspect-ratio-number-values" "^2.0.7" + "@csstools/postcss-logical-viewport-units" "^2.0.9" + "@csstools/postcss-media-minmax" "^1.1.6" + "@csstools/postcss-media-queries-aspect-ratio-number-values" "^2.0.9" "@csstools/postcss-nested-calc" "^3.0.2" "@csstools/postcss-normalize-display-values" "^3.0.2" - "@csstools/postcss-oklab-function" "^3.0.13" + "@csstools/postcss-oklab-function" "^3.0.16" "@csstools/postcss-progressive-custom-properties" "^3.2.0" - "@csstools/postcss-relative-color-syntax" "^2.0.13" + "@csstools/postcss-relative-color-syntax" "^2.0.16" "@csstools/postcss-scope-pseudo-class" "^3.0.1" - "@csstools/postcss-stepped-value-functions" "^3.0.6" - "@csstools/postcss-text-decoration-shorthand" "^3.0.5" - "@csstools/postcss-trigonometric-functions" "^3.0.6" + "@csstools/postcss-stepped-value-functions" "^3.0.8" + "@csstools/postcss-text-decoration-shorthand" "^3.0.6" + "@csstools/postcss-trigonometric-functions" "^3.0.8" "@csstools/postcss-unset-value" "^3.0.1" autoprefixer "^10.4.19" browserslist "^4.22.3" - css-blank-pseudo "^6.0.1" - css-has-pseudo "^6.0.3" + css-blank-pseudo "^6.0.2" + css-has-pseudo "^6.0.5" css-prefers-color-scheme "^9.0.1" cssdb "^8.0.0" postcss-attribute-case-insensitive "^6.0.3" postcss-clamp "^4.1.0" - postcss-color-functional-notation "^6.0.8" + postcss-color-functional-notation "^6.0.11" postcss-color-hex-alpha "^9.0.4" postcss-color-rebeccapurple "^9.0.3" - postcss-custom-media "^10.0.4" - postcss-custom-properties "^13.3.7" - postcss-custom-selectors "^7.1.8" + postcss-custom-media "^10.0.6" + postcss-custom-properties "^13.3.10" + postcss-custom-selectors "^7.1.10" postcss-dir-pseudo-class "^8.0.1" postcss-double-position-gradients "^5.0.6" postcss-focus-visible "^9.0.1" @@ -8413,21 +8417,21 @@ postcss-preset-env@^9.5.5: postcss-font-variant "^5.0.0" postcss-gap-properties "^5.0.1" postcss-image-set-function "^6.0.3" - postcss-lab-function "^6.0.13" + postcss-lab-function "^6.0.16" postcss-logical "^7.0.1" - postcss-nesting "^12.1.1" + postcss-nesting "^12.1.4" postcss-opacity-percentage "^2.0.0" postcss-overflow-shorthand "^5.0.1" postcss-page-break "^3.0.4" postcss-place "^9.0.1" - postcss-pseudo-class-any-link "^9.0.1" + postcss-pseudo-class-any-link "^9.0.2" postcss-replace-overflow-wrap "^4.0.0" postcss-selector-not "^7.0.2" -postcss-pseudo-class-any-link@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-9.0.1.tgz#71c24a886765763d4e37e21a27ecc6f1c1a5d698" - integrity sha512-cKYGGZ9yzUZi+dZd7XT2M8iSDfo+T2Ctbpiizf89uBTBfIpZpjvTavzIJXpCReMVXSKROqzpxClNu6fz4DHM0Q== +postcss-pseudo-class-any-link@^9.0.2: + version "9.0.2" + resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-9.0.2.tgz#e436a7db1421f8a347fff3f19951a27d4e791987" + integrity sha512-HFSsxIqQ9nA27ahyfH37cRWGk3SYyQLpk0LiWw/UGMV4VKT5YG2ONee4Pz/oFesnK0dn2AjcyequDbIjKJgB0g== dependencies: postcss-selector-parser "^6.0.13" @@ -8503,9 +8507,9 @@ pretty-format@^29.7.0: react-is "^18.0.0" primevue@^3.51.0: - version "3.51.0" - resolved "https://registry.yarnpkg.com/primevue/-/primevue-3.51.0.tgz#afea7e501626f4a5099e9358945ab840389d70c9" - integrity sha512-BdMveidLSr0fNJ5+mxuke8mMCHyiXwvfDP4iwPr6R98rl3E0Wcm1u4/RKVrL7o0Iq606SXyhPQL3LGyAfXngcA== + version "3.52.0" + resolved "https://registry.yarnpkg.com/primevue/-/primevue-3.52.0.tgz#819d1d70fe37cea7dcd06076b7c3cd9ee4e3c6a4" + integrity sha512-HLOVP5YI0ArFKUhIyfZsWmTNMaBYNCBWC/3DYvdd/Po4LY5/WXf7yIYvArE2q/3OuwSXJXvjlR8UNQeJYRSQog== process-nextick-args@~2.0.0: version "2.0.1" @@ -8636,9 +8640,9 @@ rbush@^2.0.1: quickselect "^1.0.1" react-is@^18.0.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" - integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + version "18.3.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" + integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== read-pkg-up@^7.0.1: version "7.0.1" @@ -8865,9 +8869,9 @@ rimraf@^2.6.3: glob "^7.1.3" rimraf@^5.0.5: - version "5.0.5" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-5.0.5.tgz#9be65d2d6e683447d2e9013da2bf451139a61ccf" - integrity sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A== + version "5.0.7" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-5.0.7.tgz#27bddf202e7d89cb2e0381656380d1734a854a74" + integrity sha512-nV6YcJo5wbLW77m+8KjH8aB/7/rxQy9SZ0HY5shnwULfS+9nmTtVXAJET5NdZmCzA4fPI/Hm1wo/Po/4mopOdg== dependencies: glob "^10.3.7" @@ -8900,28 +8904,28 @@ robust-sum@^1.0.0: integrity sha512-AvLExwpaqUqD1uwLU6MwzzfRdaI6VEZsyvQ3IAQ0ZJ08v1H+DTyqskrf2ZJyh0BDduFVLN7H04Zmc+qTiahhAw== rollup@^4.13.0: - version "4.14.3" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.14.3.tgz#bcbb7784b35826d3164346fa6d5aac95190d8ba9" - integrity sha512-ag5tTQKYsj1bhrFC9+OEWqb5O6VYgtQDO9hPDBMmIbePwhfSr+ExlcU741t8Dhw5DkPCQf6noz0jb36D6W9/hw== + version "4.17.2" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.17.2.tgz#26d1785d0144122277fdb20ab3a24729ae68301f" + integrity sha512-/9ClTJPByC0U4zNLowV1tMBe8yMEAxewtR3cUNX5BoEpGH3dQEWpJLr6CLp0fPdYRF/fzVOgvDb1zXuakwF5kQ== dependencies: "@types/estree" "1.0.5" optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.14.3" - "@rollup/rollup-android-arm64" "4.14.3" - "@rollup/rollup-darwin-arm64" "4.14.3" - "@rollup/rollup-darwin-x64" "4.14.3" - "@rollup/rollup-linux-arm-gnueabihf" "4.14.3" - "@rollup/rollup-linux-arm-musleabihf" "4.14.3" - "@rollup/rollup-linux-arm64-gnu" "4.14.3" - "@rollup/rollup-linux-arm64-musl" "4.14.3" - "@rollup/rollup-linux-powerpc64le-gnu" "4.14.3" - "@rollup/rollup-linux-riscv64-gnu" "4.14.3" - "@rollup/rollup-linux-s390x-gnu" "4.14.3" - "@rollup/rollup-linux-x64-gnu" "4.14.3" - "@rollup/rollup-linux-x64-musl" "4.14.3" - "@rollup/rollup-win32-arm64-msvc" "4.14.3" - "@rollup/rollup-win32-ia32-msvc" "4.14.3" - "@rollup/rollup-win32-x64-msvc" "4.14.3" + "@rollup/rollup-android-arm-eabi" "4.17.2" + "@rollup/rollup-android-arm64" "4.17.2" + "@rollup/rollup-darwin-arm64" "4.17.2" + "@rollup/rollup-darwin-x64" "4.17.2" + "@rollup/rollup-linux-arm-gnueabihf" "4.17.2" + "@rollup/rollup-linux-arm-musleabihf" "4.17.2" + "@rollup/rollup-linux-arm64-gnu" "4.17.2" + "@rollup/rollup-linux-arm64-musl" "4.17.2" + "@rollup/rollup-linux-powerpc64le-gnu" "4.17.2" + "@rollup/rollup-linux-riscv64-gnu" "4.17.2" + "@rollup/rollup-linux-s390x-gnu" "4.17.2" + "@rollup/rollup-linux-x64-gnu" "4.17.2" + "@rollup/rollup-linux-x64-musl" "4.17.2" + "@rollup/rollup-win32-arm64-msvc" "4.17.2" + "@rollup/rollup-win32-ia32-msvc" "4.17.2" + "@rollup/rollup-win32-x64-msvc" "4.17.2" fsevents "~2.3.2" rrweb-cssom@^0.6.0: @@ -8986,16 +8990,16 @@ safe-regex-test@^1.0.3: integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== sass-loader@^14.2.0: - version "14.2.0" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-14.2.0.tgz#0d4440170fd9c9d93684e274a5ef73dbf55f414b" - integrity sha512-jxmjDXD9OYNDb2bp9JvopdE6QjecQY9beTWik/6sEHrsMxyo90Gyc471A4NUz60NLs4WsAh6yVtIvhLwEZcXeg== + version "14.2.1" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-14.2.1.tgz#db9ad96b56dc1c1ea546101e76375d5b008fec70" + integrity sha512-G0VcnMYU18a4N7VoNDegg2OuMjYtxnqzQWARVWCIVSZwJeiL9kg8QMsuIZOplsJgTzZLF6jGxI3AClj8I9nRdQ== dependencies: neo-async "^2.6.2" sass@^1.75.0: - version "1.75.0" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.75.0.tgz#91bbe87fb02dfcc34e052ddd6ab80f60d392be6c" - integrity sha512-ShMYi3WkrDWxExyxSZPst4/okE9ts46xZmJDSawJQrnte7M1V9fScVB+uNXOVKRBt0PggHOwoZcn8mYX4trnBw== + version "1.77.1" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.77.1.tgz#018cdfb206afd14724030c02e9fefd8f30a76cd0" + integrity sha512-OMEyfirt9XEfyvocduUIOlUSkWOXS/LAt6oblR/ISXCTukyavjex+zQNm51pPCOiFKY1QpWvEH1EeCkgyV3I6w== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" @@ -9063,11 +9067,9 @@ semver@^6.3.1: integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== semver@^7.3.4, semver@^7.3.6, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0: - version "7.6.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" - integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== - dependencies: - lru-cache "^6.0.0" + version "7.6.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13" + integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== send@0.18.0: version "0.18.0" @@ -9140,28 +9142,6 @@ set-function-name@^2.0.1: functions-have-names "^1.2.3" has-property-descriptors "^1.0.2" -set-function-length@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" - integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== - dependencies: - define-data-property "^1.1.4" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - gopd "^1.0.1" - has-property-descriptors "^1.0.2" - -set-function-name@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" - integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== - dependencies: - define-data-property "^1.1.4" - es-errors "^1.3.0" - functions-have-names "^1.2.3" - has-property-descriptors "^1.0.2" - setprototypeof@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" @@ -9282,6 +9262,13 @@ sockjs@^0.3.24: uuid "^8.3.2" websocket-driver "^0.7.4" +sonic-forest@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sonic-forest/-/sonic-forest-1.0.3.tgz#81363af60017daba39b794fce24627dc412563cb" + integrity sha512-dtwajos6IWMEWXdEbW1IkEkyL2gztCAgDplRIX+OT5aRKnEd5e7r7YCxRgXZdhRP1FBdOBf8axeTPhzDv8T4wQ== + dependencies: + tree-dump "^1.0.0" + "source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.1, source-map-js@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" @@ -9374,7 +9361,7 @@ std-env@^3.5.0: resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.7.0.tgz#c9f7386ced6ecf13360b6c6c55b8aaa4ef7481d2" integrity sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg== -"string-width-cjs@npm:string-width@^4.2.0": +"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -9391,15 +9378,6 @@ string-width@^2.0.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" -string-width@^4.1.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" @@ -9451,7 +9429,7 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -9465,13 +9443,6 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - strip-ansi@^7.0.1, strip-ansi@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" @@ -9542,19 +9513,19 @@ stylelint-webpack-plugin@^5.0.0: schema-utils "^4.2.0" stylelint@^16.3.1: - version "16.3.1" - resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-16.3.1.tgz#006cc6cd4bd8e7b3acb1607bb8e8de85121b7847" - integrity sha512-/JOwQnBvxEKOT2RtNgGpBVXnCSMBgKOL2k7w0K52htwCyJls4+cHvc4YZgXlVoAZS9QJd2DgYAiRnja96pTgxw== + version "16.5.0" + resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-16.5.0.tgz#4e3aff7cc2294fa54da729b972a6c38bf2a584a0" + integrity sha512-IlCBtVrG+qTy3v+tZTk50W8BIomjY/RUuzdrDqdnlCYwVuzXtPbiGfxYqtyYAyOMcb+195zRsuHn6tgfPmFfbw== dependencies: "@csstools/css-parser-algorithms" "^2.6.1" "@csstools/css-tokenizer" "^2.2.4" "@csstools/media-query-list-parser" "^2.1.9" - "@csstools/selector-specificity" "^3.0.2" + "@csstools/selector-specificity" "^3.0.3" "@dual-bundle/import-meta-resolve" "^4.0.0" balanced-match "^2.0.0" colord "^2.9.3" cosmiconfig "^9.0.0" - css-functions-list "^3.2.1" + css-functions-list "^3.2.2" css-tree "^2.3.1" debug "^4.3.4" fast-glob "^3.3.2" @@ -9583,7 +9554,7 @@ stylelint@^16.3.1: strip-ansi "^7.1.0" supports-hyperlinks "^3.0.0" svg-tags "^1.0.0" - table "^6.8.1" + table "^6.8.2" write-file-atomic "^5.0.1" subtag@^0.5.0: @@ -9650,7 +9621,7 @@ symbol-tree@^3.2.4: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== -table@^6.8.1: +table@^6.8.2: version "6.8.2" resolved "https://registry.yarnpkg.com/table/-/table-6.8.2.tgz#c5504ccf201213fa227248bdc8c5569716ac6c58" integrity sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA== @@ -9678,9 +9649,9 @@ terser-webpack-plugin@^5.3.10: terser "^5.26.0" terser@^5.10.0, terser@^5.15.1, terser@^5.26.0: - version "5.30.3" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.30.3.tgz#f1bb68ded42408c316b548e3ec2526d7dd03f4d2" - integrity sha512-STdUgOUx8rLbMGO9IOwHLpCqolkDITFFQSMYYwKE1N2lY6MVSaeoi10z/EhWxRc6ybqoVmKSkhKYH/XUpl7vSA== + version "5.31.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.31.0.tgz#06eef86f17007dbad4593f11a574c7f5eb02c6a1" + integrity sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.8.2" @@ -9706,15 +9677,20 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== +thingies@^1.20.0: + version "1.21.0" + resolved "https://registry.yarnpkg.com/thingies/-/thingies-1.21.0.tgz#e80fbe58fd6fdaaab8fad9b67bd0a5c943c445c1" + integrity sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g== + thunky@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== tinybench@^2.5.1: - version "2.7.0" - resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.7.0.tgz#d56198a69bead7e240c8f9542484f3eb3c3f749d" - integrity sha512-Qgayeb106x2o4hNzNjsZEfFziw8IbKqtbXBjVh7VIZfBxfD5M4gWtpyx5+YTae2gJ6Y6Dz/KLepiv16RFeQWNA== + version "2.8.0" + resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.8.0.tgz#30e19ae3a27508ee18273ffed9ac7018949acd7b" + integrity sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw== tinypool@^0.8.3: version "0.8.4" @@ -9763,16 +9739,14 @@ topojson-server@^3.0.0: commander "2" touch@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" - integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== - dependencies: - nopt "~1.0.10" + version "3.1.1" + resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.1.tgz#097a23d7b161476435e5c1344a95c0f75b4a5694" + integrity sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA== tough-cookie@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" - integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== + version "4.1.4" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.4.tgz#945f1461b45b5a8c76821c33ea49c3ac192c1b36" + integrity sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag== dependencies: psl "^1.1.33" punycode "^2.1.1" @@ -9800,6 +9774,11 @@ traverse@~0.6.6: typedarray.prototype.slice "^1.0.3" which-typed-array "^1.1.15" +tree-dump@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tree-dump/-/tree-dump-1.0.1.tgz#b448758da7495580e6b7830d6b7834fca4c45b96" + integrity sha512-WCkcRBVPSlHHq1dc/px9iOfqklvzCbdRwvlNfxGZsrHqf6aZttfPrd7DJTt6oR10dwUfpFFQeVTkPbBIZxX/YA== + trim-newlines@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" @@ -9942,14 +9921,14 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== -typescript-eslint@^7.7.0: - version "7.7.0" - resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-7.7.0.tgz#b755e350dad25bb1e5b3826d11daa973dc0970ac" - integrity sha512-wZZ+7mTQJCn4mGAvzdERtL4vwKGM/mF9cMSMeKUllz3Hgbd1Mdd5L60Q+nJmCio9RB4OyMMr0EX4Ry2Q7jiAyw== +typescript-eslint@^8.0.0-alpha.11: + version "8.0.0-alpha.11" + resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.0.0-alpha.11.tgz#f9098e1dbdcf2ca7ebb05edeea480ea0af42b5cb" + integrity sha512-bV2ovYumF93wNwDK1YWhXOqQVO5Omupy+fqlx52RRbLwSuI0Aw57hQtc0C8am8T/jOhzlKZnmRbJ3KJPCixvYA== dependencies: - "@typescript-eslint/eslint-plugin" "7.7.0" - "@typescript-eslint/parser" "7.7.0" - "@typescript-eslint/utils" "7.7.0" + "@typescript-eslint/eslint-plugin" "8.0.0-alpha.11" + "@typescript-eslint/parser" "8.0.0-alpha.11" + "@typescript-eslint/utils" "8.0.0-alpha.11" "typescript@4 - 5", typescript@^5.4.5: version "5.4.5" @@ -9961,7 +9940,7 @@ typical@^4.0.0: resolved "https://registry.yarnpkg.com/typical/-/typical-4.0.0.tgz#cbeaff3b9d7ae1e2bbfaf5a4e6f11eccfde94fc4" integrity sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw== -ufo@^1.3.2: +ufo@^1.5.3: version "1.5.3" resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.5.3.tgz#3325bd3c977b6c6cd3160bf4ff52989adc9d3344" integrity sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw== @@ -10047,14 +10026,14 @@ unpipe@1.0.0, unpipe@~1.0.0: integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== update-browserslist-db@^1.0.13: - version "1.0.13" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" - integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== + version "1.0.16" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz#f6d489ed90fb2f07d67784eb3f53d7891f736356" + integrity sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ== dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" + escalade "^3.1.2" + picocolors "^1.0.1" -uri-js@^4.2.2: +uri-js@^4.2.2, uri-js@^4.4.1: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== @@ -10147,10 +10126,10 @@ vfile@^4.0.0: unist-util-stringify-position "^2.0.0" vfile-message "^2.0.0" -vite-node@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-1.5.0.tgz#7f74dadfecb15bca016c5ce5ef85e5cc4b82abf2" - integrity sha512-tV8h6gMj6vPzVCa7l+VGq9lwoJjW8Y79vst8QZZGiuRAfijU+EEWuc0kFpmndQrWhMMhet1jdSF+40KSZUqIIw== +vite-node@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-1.6.0.tgz#2c7e61129bfecc759478fa592754fd9704aaba7f" + integrity sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw== dependencies: cac "^6.7.14" debug "^4.3.4" @@ -10159,9 +10138,9 @@ vite-node@1.5.0: vite "^5.0.0" vite@^5.0.0: - version "5.2.9" - resolved "https://registry.yarnpkg.com/vite/-/vite-5.2.9.tgz#cd9a356c6ff5f7456c09c5ce74068ffa8df743d9" - integrity sha512-uOQWfuZBlc6Y3W/DTuQ1Sr+oIXWvqljLvS881SVmAj00d5RdgShLcuXWxseWPd4HXwiYBFW/vXHfKFeqj9uQnw== + version "5.2.11" + resolved "https://registry.yarnpkg.com/vite/-/vite-5.2.11.tgz#726ec05555431735853417c3c0bfb36003ca0cbd" + integrity sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ== dependencies: esbuild "^0.20.1" postcss "^8.4.38" @@ -10170,15 +10149,15 @@ vite@^5.0.0: fsevents "~2.3.3" vitest@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/vitest/-/vitest-1.5.0.tgz#6ebb396bd358650011a9c96c18fa614b668365c1" - integrity sha512-d8UKgR0m2kjdxDWX6911uwxout6GHS0XaGH1cksSIVVG8kRlE7G7aBw7myKQCvDI5dT4j7ZMa+l706BIORMDLw== - dependencies: - "@vitest/expect" "1.5.0" - "@vitest/runner" "1.5.0" - "@vitest/snapshot" "1.5.0" - "@vitest/spy" "1.5.0" - "@vitest/utils" "1.5.0" + version "1.6.0" + resolved "https://registry.yarnpkg.com/vitest/-/vitest-1.6.0.tgz#9d5ad4752a3c451be919e412c597126cffb9892f" + integrity sha512-H5r/dN06swuFnzNFhq/dnz37bPXnq8xB2xB5JOVk8K09rUtoeNN+LHWkoQ0A/i3hvbUKKcCei9KpbxqHMLhLLA== + dependencies: + "@vitest/expect" "1.6.0" + "@vitest/runner" "1.6.0" + "@vitest/snapshot" "1.6.0" + "@vitest/spy" "1.6.0" + "@vitest/utils" "1.6.0" acorn-walk "^8.3.2" chai "^4.3.10" debug "^4.3.4" @@ -10192,7 +10171,7 @@ vitest@^1.5.0: tinybench "^2.5.1" tinypool "^0.8.3" vite "^5.0.0" - vite-node "1.5.0" + vite-node "1.6.0" why-is-node-running "^2.2.2" vt-pbf@^3.1.1: @@ -10205,9 +10184,9 @@ vt-pbf@^3.1.1: pbf "^3.2.1" vue-component-type-helpers@^2.0.0: - version "2.0.13" - resolved "https://registry.yarnpkg.com/vue-component-type-helpers/-/vue-component-type-helpers-2.0.13.tgz#4cd08fe6c42a071159664e6c30b7fe1b01e17b68" - integrity sha512-xNO5B7DstNWETnoYflLkVgh8dK8h2ZDgxY1M2O0zrqGeBNq5yAZ8a10yCS9+HnixouNGYNX+ggU9MQQq86HTpg== + version "2.0.17" + resolved "https://registry.yarnpkg.com/vue-component-type-helpers/-/vue-component-type-helpers-2.0.17.tgz#4d143094717734cecc5fd88d1209f12c7ae33009" + integrity sha512-2car49m8ciqg/JjgMBkx7o/Fd2A7fHESxNqL/2vJYFLXm4VwYO4yH0rexOi4a35vwNgDyvt17B07Vj126l9rAQ== vue-eslint-parser@^9.4.2: version "9.4.2" @@ -10240,12 +10219,12 @@ vue-template-compiler@^2.7.14, vue-template-compiler@^2.7.16: he "^1.2.0" vue-tsc@^2.0.13: - version "2.0.13" - resolved "https://registry.yarnpkg.com/vue-tsc/-/vue-tsc-2.0.13.tgz#6ee557705456442e0f43ec0d1774ebf5ffec54f1" - integrity sha512-a3nL3FvguCWVJUQW/jFrUxdeUtiEkbZoQjidqvMeBK//tuE2w6NWQAbdrEpY2+6nSa4kZoKZp8TZUMtHpjt4mQ== + version "2.0.17" + resolved "https://registry.yarnpkg.com/vue-tsc/-/vue-tsc-2.0.17.tgz#bd1c7704c454169b3fcb893421226be99ccae4bf" + integrity sha512-RRZsiCBD1hvATQb321xV+SkRDKsK5hgFQ4WXy5wuYsyyjz8xAK4DjxHkpH7PFoJKUbZTbeW8KzhejzXZS49Tzw== dependencies: - "@volar/typescript" "2.2.0-alpha.8" - "@vue/language-core" "2.0.13" + "@volar/typescript" "~2.2.2" + "@vue/language-core" "2.0.17" semver "^7.5.4" vue3-gettext@^3.0.0-beta.4: @@ -10264,15 +10243,15 @@ vue3-gettext@^3.0.0-beta.4: tslib "^2.4.0" vue@^3.4.21: - version "3.4.23" - resolved "https://registry.yarnpkg.com/vue/-/vue-3.4.23.tgz#9d5a990a71c5bd5446f80377828e6587cfc488d5" - integrity sha512-X1y6yyGJ28LMUBJ0k/qIeKHstGd+BlWQEOT40x3auJFTmpIhpbKLgN7EFsqalnJXq1Km5ybDEsp6BhuWKciUDg== + version "3.4.27" + resolved "https://registry.yarnpkg.com/vue/-/vue-3.4.27.tgz#40b7d929d3e53f427f7f5945386234d2854cc2a1" + integrity sha512-8s/56uK6r01r1icG/aEOHqyMVxd1bkYcSe9j8HcKtr/xTOFWvnzIVTehNW+5Yt89f+DLBe4A569pnZLS5HzAMA== dependencies: - "@vue/compiler-dom" "3.4.23" - "@vue/compiler-sfc" "3.4.23" - "@vue/runtime-dom" "3.4.23" - "@vue/server-renderer" "3.4.23" - "@vue/shared" "3.4.23" + "@vue/compiler-dom" "3.4.27" + "@vue/compiler-sfc" "3.4.27" + "@vue/runtime-dom" "3.4.27" + "@vue/server-renderer" "3.4.27" + "@vue/shared" "3.4.27" w3c-xmlserializer@^5.0.0: version "5.0.0" @@ -10540,6 +10519,11 @@ wkt-parser@^1.3.3: resolved "https://registry.yarnpkg.com/wkt-parser/-/wkt-parser-1.3.3.tgz#46b4e3032dd9c86907f7e630b57e3c6ea2bb772b" integrity sha512-ZnV3yH8/k58ZPACOXeiHaMuXIiaTk1t0hSUVisbO0t4RjA5wPpUytcxeyiN2h+LZRrmuHIh/1UlrR9e7DHDvTw== +word-wrap@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" @@ -10572,9 +10556,9 @@ write-file-atomic@^5.0.1: signal-exit "^4.0.1" ws@^8.16.0: - version "8.16.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.16.0.tgz#d1cd774f36fbc07165066a60e40323eab6446fd4" - integrity sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ== + version "8.17.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.0.tgz#d145d18eca2ed25aaf791a183903f7be5e295fea" + integrity sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow== xml-name-validator@^4.0.0: version "4.0.0" From fca355cd46189f36e279df1b6311f930d0b4e252 Mon Sep 17 00:00:00 2001 From: Jacob Walls Date: Wed, 15 May 2024 11:32:55 -0400 Subject: [PATCH 187/242] Unsilence type declarations from typed third-party modules #10925 --- arches/app/src/declarations.d.ts | 53 -------------------------------- 1 file changed, 53 deletions(-) diff --git a/arches/app/src/declarations.d.ts b/arches/app/src/declarations.d.ts index 17dd54fb8c4..76e1629b2b2 100644 --- a/arches/app/src/declarations.d.ts +++ b/arches/app/src/declarations.d.ts @@ -3,70 +3,17 @@ // declare modules that have been added to your project (should mirror `package.json`) declare module 'arches'; declare module "@babel/runtime"; -declare module "@mapbox/geojson-extent"; declare module "@mapbox/geojsonhint"; -declare module "@mapbox/mapbox-gl-draw"; -declare module "@mapbox/mapbox-gl-geocoder"; -declare module "@tmcw/togeojson"; -declare module "@turf/turf"; -declare module "backbone"; -declare module "bootstrap"; -declare module "bootstrap-colorpicker"; -declare module "chosen-js"; -declare module "ckeditor4"; -declare module "codemirror"; -declare module "core-js"; declare module "cross-env"; -declare module "cross-fetch"; -declare module "cytoscape"; declare module "cytoscape-cola"; -declare module "d3"; -declare module "datatables.net"; -declare module "datatables.net-bs"; -declare module "datatables.net-buttons"; -declare module "datatables.net-buttons-bs"; -declare module "datatables.net-responsive"; -declare module "datatables.net-responsive-bs"; -declare module "dom4"; -declare module "dropzone"; -declare module "eonasdan-bootstrap-datetimepicker"; declare module "font-awesome"; -declare module "ionicons"; -declare module "jqtree"; -declare module "jquery"; -declare module "jquery-migrate"; declare module "jquery-validation"; -declare module "jqueryui"; -declare module "js-cookie"; -declare module "knockout"; declare module "knockout-mapping"; -declare module "knockstrap"; -declare module "latlon-geohash"; -declare module "leaflet"; -declare module "leaflet-draw"; declare module "leaflet-iiif"; -declare module "leaflet.fullscreen"; declare module "lt-themify-icons"; -declare module "mapbox-gl"; -declare module "metismenu"; -declare module "moment"; -declare module "moment-timezone"; -declare module "nouislider"; -declare module "numeral"; -declare module "primevue"; -declare module "primevue/*"; -declare module "proj4"; -declare module "regenerator-runtime"; -declare module "requirejs"; declare module "requirejs-plugins"; declare module "requirejs-text"; declare module "select-woo"; -declare module "select2"; -declare module "underscore"; -declare module "uuidjs"; -declare module "vue"; -declare module "vue3-gettext"; -declare module "webpack-bundle-tracker"; // declare filetypes used in `./src/` folder declare module '*.ts'; From 6ad79db814f53ed94b2a322b35cd15d8a7189b93 Mon Sep 17 00:00:00 2001 From: Ryan Anderson Date: Wed, 1 May 2024 16:55:23 -0700 Subject: [PATCH 188/242] Change precision of incoming geoms to reduce size in order to conform with Lucene byte limits #10855 --- arches/app/datatypes/datatypes.py | 25 ++++++++++++++----------- arches/app/utils/geo_utils.py | 22 +++++++++++++++++++++- 2 files changed, 35 insertions(+), 12 deletions(-) diff --git a/arches/app/datatypes/datatypes.py b/arches/app/datatypes/datatypes.py index 66bfc990dda..e14a085f729 100644 --- a/arches/app/datatypes/datatypes.py +++ b/arches/app/datatypes/datatypes.py @@ -991,8 +991,9 @@ def clean(self, tile, nodeid): tile.data[nodeid] = None def transform_value_for_tile(self, value, **kwargs): + geo_utils = GeoUtils() if "format" in kwargs and kwargs["format"] == "esrijson": - arches_geojson = GeoUtils().arcgisjson_to_geojson(value) + arches_geojson = geo_utils.arcgisjson_to_geojson(value) else: try: geojson = json.loads(value) @@ -1003,20 +1004,14 @@ def transform_value_for_tile(self, value, **kwargs): else: raise TypeError except (json.JSONDecodeError, KeyError, TypeError): - arches_geojson = {} - arches_geojson["type"] = "FeatureCollection" - arches_geojson["features"] = [] try: geometry = GEOSGeometry(value, srid=4326) if geometry.geom_type == "GeometryCollection": - for geom in geometry: - arches_json_geometry = {} - arches_json_geometry["geometry"] = JSONDeserializer().deserialize(GEOSGeometry(geom, srid=4326).json) - arches_json_geometry["type"] = "Feature" - arches_json_geometry["id"] = str(uuid.uuid4()) - arches_json_geometry["properties"] = {} - arches_geojson["features"].append(arches_json_geometry) + arches_geojson = geo_utils.convert_geos_geom_collection_to_feature_collection(geometry) else: + arches_geojson = {} + arches_geojson["type"] = "FeatureCollection" + arches_geojson["features"] = [] arches_json_geometry = {} arches_json_geometry["geometry"] = JSONDeserializer().deserialize(geometry.json) arches_json_geometry["type"] = "Feature" @@ -1042,6 +1037,14 @@ def update(self, tile, data, nodeid=None, action=None): return updated_data def append_to_document(self, document, nodevalue, nodeid, tile, provisional=False): + geo_utils = GeoUtils() + max_bytes = 32766 # max bytes allowed by Lucene + byte_count = 0 + byte_count += len(str(nodevalue).encode("UTF-8")) + + if byte_count > max_bytes: + nodevalue = geo_utils.reduce_precision(nodevalue, 7) + document["geometries"].append({"geom": nodevalue, "nodegroup_id": tile.nodegroup_id, "provisional": provisional, "tileid": tile.pk}) bounds = self.get_bounds_from_value(nodevalue) if bounds is not None: diff --git a/arches/app/utils/geo_utils.py b/arches/app/utils/geo_utils.py index 2a7ac8bfb0f..f798ef6326f 100644 --- a/arches/app/utils/geo_utils.py +++ b/arches/app/utils/geo_utils.py @@ -1,6 +1,7 @@ import json +import uuid from arcgis2geojson import arcgis2geojson -from django.contrib.gis.geos import GEOSGeometry, GeometryCollection +from django.contrib.gis.geos import GEOSGeometry, GeometryCollection, WKTWriter from arches.app.utils.betterJSONSerializer import JSONSerializer, JSONDeserializer @@ -67,3 +68,22 @@ def arcgisjson_to_geojson(self, geom): features.append({"type": "Feature", "properties": {}, "geometry": arcgis2geojson(geometry)}) feature_collection = {"type": "FeatureCollection", "features": features} return feature_collection + + def convert_geos_geom_collection_to_feature_collection(self, geometry): + arches_geojson = {} + arches_geojson["type"] = "FeatureCollection" + arches_geojson["features"] = [] + for geom in geometry: + arches_json_geometry = {} + arches_json_geometry["geometry"] = JSONDeserializer().deserialize(GEOSGeometry(geom, srid=4326).json) + arches_json_geometry["type"] = "Feature" + arches_json_geometry["id"] = str(uuid.uuid4()) + arches_json_geometry["properties"] = {} + arches_geojson["features"].append(arches_json_geometry) + return arches_geojson + + def reduce_precision(self, geom, precision): + writer = WKTWriter() + writer.precision = precision + less_precise_geom = writer.write(GEOSGeometry(self.create_geom_collection_from_geojson(geom))) + return self.convert_geos_geom_collection_to_feature_collection(GEOSGeometry(less_precise_geom)) From a7c95b0369706c109242f85a5fcb8b0c9f1a5f38 Mon Sep 17 00:00:00 2001 From: Ryan Anderson Date: Tue, 14 May 2024 11:34:48 -0700 Subject: [PATCH 189/242] Make reduce geometry precision function recursive, add tests #10855 --- arches/app/datatypes/datatypes.py | 67 +- arches/app/utils/geo_utils.py | 22 +- .../problematic_excessive_vertices.geojson | 4908 +++++++++++++++++ tests/utils/datatype_tests.py | 47 +- 4 files changed, 5013 insertions(+), 31 deletions(-) create mode 100644 tests/fixtures/problematic_excessive_vertices.geojson diff --git a/arches/app/datatypes/datatypes.py b/arches/app/datatypes/datatypes.py index e14a085f729..0da730e5505 100644 --- a/arches/app/datatypes/datatypes.py +++ b/arches/app/datatypes/datatypes.py @@ -915,31 +915,35 @@ def default_es_mapping(self): class GeojsonFeatureCollectionDataType(BaseDataType): def validate(self, value, row_number=None, source=None, node=None, nodeid=None, strict=False, **kwargs): errors = [] - coord_limit = 1500 - coordinate_count = 0 + geo_utils = GeoUtils() + max_bytes = 32766 # max bytes allowed by Lucene + byte_count = 0 + byte_count += len(str(value).encode("UTF-8")) + + def validate_geom_byte_size_can_be_reduced(geom): + try: + if len(geom['features']) > 0: + feature_geom = GEOSGeometry(JSONSerializer().serialize(geom['features'][0]['geometry'])) + current_precision = abs(self.find_num(feature_geom.coords)) - def validate_geom(geom, coordinate_count=0): + geom = geo_utils.reduce_precision(geom, current_precision) + except: + message = _("Geojson byte size exceeds Lucene 32766 limit.") + title = _("Geometry Size Exceeds Elasticsearch Limit") + errors.append( + { + "type": "ERROR", + "message": "datatype: {0} {1} - {2}. {3}.".format( + self.datatype_model.datatype, source, message, "This data was not imported." + ), + "title": title, + } + ) + + def validate_geom_bbox(geom): try: - coordinate_count += geom.num_coords bbox = Polygon(settings.DATA_VALIDATION_BBOX) - if coordinate_count > coord_limit: - message = _( - "Geometry has too many coordinates for Elasticsearch ({0}), \ - Please limit to less then {1} coordinates of 5 digits of precision or less.".format( - coordinate_count, coord_limit - ) - ) - title = _("Geometry Too Many Coordinates for ES") - errors.append( - { - "type": "ERROR", - "message": "datatype: {0} value: {1} {2} - {3}. {4}".format( - self.datatype_model.datatype, value, source, message, "This data was not imported." - ), - "title": title, - } - ) - + if bbox.contains(geom) == False: message = _( "Geometry does not fall within the bounding box of the selected coordinate system. \ @@ -969,10 +973,12 @@ def validate_geom(geom, coordinate_count=0): ) if value is not None: + if byte_count > max_bytes: + validate_geom_byte_size_can_be_reduced(value) for feature in value["features"]: try: geom = GEOSGeometry(JSONSerializer().serialize(feature["geometry"])) - validate_geom(geom, coordinate_count) + validate_geom_bbox(geom) except Exception: message = _("Unable to serialize some geometry features") title = _("Unable to Serialize Geometry") @@ -1036,14 +1042,25 @@ def update(self, tile, data, nodeid=None, action=None): updated_data = tile.data[nodeid] return updated_data + def find_num(self, current_item): + if len(current_item) and type(current_item[0]) == float: + return decimal.Decimal(str(current_item[0])).as_tuple().exponent + else: + return self.find_num(current_item[0]) + def append_to_document(self, document, nodevalue, nodeid, tile, provisional=False): geo_utils = GeoUtils() max_bytes = 32766 # max bytes allowed by Lucene byte_count = 0 byte_count += len(str(nodevalue).encode("UTF-8")) - if byte_count > max_bytes: - nodevalue = geo_utils.reduce_precision(nodevalue, 7) + if len(nodevalue['features']) > 0: + feature_geom = GEOSGeometry(JSONSerializer().serialize(nodevalue['features'][0]['geometry'])) + current_precision = abs(self.find_num(feature_geom.coords)) + + if byte_count > max_bytes and current_precision: + nodevalue = geo_utils.reduce_precision(nodevalue, current_precision) + document["geometries"].append({"geom": nodevalue, "nodegroup_id": tile.nodegroup_id, "provisional": provisional, "tileid": tile.pk}) bounds = self.get_bounds_from_value(nodevalue) diff --git a/arches/app/utils/geo_utils.py b/arches/app/utils/geo_utils.py index f798ef6326f..88660d9ef58 100644 --- a/arches/app/utils/geo_utils.py +++ b/arches/app/utils/geo_utils.py @@ -82,8 +82,20 @@ def convert_geos_geom_collection_to_feature_collection(self, geometry): arches_geojson["features"].append(arches_json_geometry) return arches_geojson - def reduce_precision(self, geom, precision): - writer = WKTWriter() - writer.precision = precision - less_precise_geom = writer.write(GEOSGeometry(self.create_geom_collection_from_geojson(geom))) - return self.convert_geos_geom_collection_to_feature_collection(GEOSGeometry(less_precise_geom)) + def reduce_precision(self, geom, current_precision): + if current_precision > 0: + writer = WKTWriter() + max_bytes = 32766 # max bytes allowed by Lucene + + current_precision -= 1 + writer.precision = current_precision + less_precise_geom = writer.write(GEOSGeometry(self.create_geom_collection_from_geojson(geom))) + new_byte_count = len(str(less_precise_geom).encode("UTF-8")) + new_geom_collection = self.convert_geos_geom_collection_to_feature_collection(GEOSGeometry(less_precise_geom)) + if new_byte_count > max_bytes: + return self.reduce_precision(new_geom_collection, current_precision) + else: + return new_geom_collection + else: + raise Exception('Geometry still too large after reducing to 0 precision.') + diff --git a/tests/fixtures/problematic_excessive_vertices.geojson b/tests/fixtures/problematic_excessive_vertices.geojson new file mode 100644 index 00000000000..26630318bac --- /dev/null +++ b/tests/fixtures/problematic_excessive_vertices.geojson @@ -0,0 +1,4908 @@ +{ +"type": "FeatureCollection", +"features": [ +{ +"type": "Feature", +"properties": {}, +"geometry": { +"coordinates": [ +[ +[ +13.383955993504978, +52.50750927203524 +], +[ +13.383953777968724, +52.50750627537351 +], +[ +13.383951562432472, +52.50750327871177 +], +[ +13.38394934689622, +52.50750028205004 +], +[ +13.383947131359966, +52.507497285388304 +], +[ +13.383953285627953, +52.507497135555425 +], +[ +13.38395943989594, +52.50749698572254 +], +[ +13.383965594163925, +52.507496835889654 +], +[ +13.383971748431913, +52.507496686056776 +], +[ +13.38397544099325, +52.507499233218944 +], +[ +13.383979133554588, +52.50750178038111 +], +[ +13.383982826115925, +52.50750432754328 +], +[ +13.383986518677263, +52.50750687470545 +], +[ +13.383990703579425, +52.507508073370005 +], +[ +13.383994888481585, +52.50750927203456 +], +[ +13.383999073383745, +52.50751047069912 +], +[ +13.384003258285906, +52.50751166936367 +], +[ +13.384008427871223, +52.50751047069912 +], +[ +13.38401359745654, +52.50750927203456 +], +[ +13.384018767041859, +52.507508073370005 +], +[ +13.384023936627175, +52.50750687470545 +], +[ +13.384022459602626, +52.50750058171609 +], +[ +13.384021721090352, +52.50749743522141 +], +[ +13.384020982578077, +52.507494288726726 +], +[ +13.384016059163692, +52.507492340896505 +], +[ +13.384011135749306, +52.50749039306628 +], +[ +13.38400621233492, +52.50748844523605 +], +[ +13.384001288920535, +52.50748649740583 +], +[ +13.3839924267744, +52.50748514890809 +], +[ +13.383983564628265, +52.50748380041034 +], +[ +13.383979133555197, +52.50748312616147 +], +[ +13.38397470248213, +52.507482451912594 +], +[ +13.383965840335994, +52.507481103414854 +], +[ +13.38395845521384, +52.507480953581606 +], +[ +13.383951070091683, +52.50748080374835 +], +[ +13.383943684969527, +52.507480653915096 +], +[ +13.383936299847372, +52.50748050408185 +], +[ +13.38393162260338, +52.50748260174542 +], +[ +13.38392694535939, +52.507484699409 +], +[ +13.383922268115398, +52.50748679707257 +], +[ +13.383917590871407, +52.50748889473615 +], +[ +13.38391956023782, +52.50749578705797 +], +[ +13.383921529604232, +52.50750267937979 +], +[ +13.383922514286883, +52.507506874705804 +], +[ +13.383923498969537, +52.50751107003182 +], +[ +13.38392448365219, +52.50751526535783 +], +[ +13.383925468334843, +52.507519460683845 +], +[ +13.383915621506006, +52.50752125868 +], +[ +13.383905774677169, +52.507523056676156 +], +[ +13.383899374237714, +52.507522757010136 +], +[ +13.38389297379826, +52.507522457344116 +], +[ +13.383886573358804, +52.507522157678096 +], +[ +13.38388017291935, +52.507521858012076 +], +[ +13.383874264821742, +52.507520959013675 +], +[ +13.383868356724134, +52.50752006001527 +], +[ +13.383862448626527, +52.50751916101686 +], +[ +13.38385654052892, +52.50751826201846 +], +[ +13.383849647748658, +52.50751721318717 +], +[ +13.383842754968398, +52.50751616435589 +], +[ +13.383835862188139, +52.50751511552461 +], +[ +13.383828969407878, +52.507514066693325 +], +[ +13.383826384615212, +52.507513542277664 +], +[ +13.383823799822544, +52.507513017861996 +], +[ +13.383818630237212, +52.507511969030666 +], +[ +13.38381346065188, +52.50751092019934 +], +[ +13.383808291066545, +52.50750987136801 +], +[ +13.383801890627627, +52.507508822536295 +], +[ +13.38379549018871, +52.50750777370459 +], +[ +13.383789089749794, +52.50750672487288 +], +[ +13.383782689310875, +52.50750567604117 +], +[ +13.383778996749797, +52.507505151625466 +], +[ +13.383775304188719, +52.507504627209755 +], +[ +13.383767919066562, +52.50750357837835 +], +[ +13.383764226505484, +52.507503053962644 +], +[ +13.383760533944406, +52.50750252954694 +], +[ +13.38375314882225, +52.507501480715526 +], +[ +13.383741824968931, +52.50749968271836 +], +[ +13.383736163042272, +52.50749878371978 +], +[ +13.383730501115613, +52.5074978847212 +], +[ +13.38371893109133, +52.50749593689103 +], +[ +13.383707361067046, +52.507493989060876 +], +[ +13.383701576054904, +52.5074930151458 +], +[ +13.383695791042761, +52.50749204123072 +], +[ +13.383684221018479, +52.507490093400556 +], +[ +13.383680036115798, +52.50748889473576 +], +[ +13.383675851213116, +52.50748769607096 +], +[ +13.383667481407754, +52.507485298741365 +], +[ +13.383662804163746, +52.507482302079254 +], +[ +13.38365812691974, +52.50747930541714 +], +[ +13.383655788297736, +52.50747780708609 +], +[ +13.383653449675732, +52.50747630875503 +], +[ +13.383648772431725, +52.50747331209292 +], +[ +13.383647172321997, +52.507470914762735 +], +[ +13.383645572212266, +52.50746851743254 +], +[ +13.383642371992806, +52.50746372277216 +], +[ +13.383639171773346, +52.507458928111774 +], +[ +13.383635971553888, +52.5074541334514 +], +[ +13.383644587529645, +52.50745338428568 +], +[ +13.383648895517524, +52.50745300970282 +], +[ +13.383653203505402, +52.50745263511996 +], +[ +13.38365751149328, +52.5074522605371 +], +[ +13.383661819481159, +52.50745188595424 +], +[ +13.383670435456915, +52.507451136788525 +], +[ +13.383674374188631, +52.50745683044754 +], +[ +13.38367634355449, +52.50745967727704 +], +[ +13.383678312920347, +52.50746252410655 +], +[ +13.383679543773948, +52.507465820435456 +], +[ +13.38368077462755, +52.50746911676437 +], +[ +13.383683236334752, +52.50747570942219 +], +[ +13.38368717506647, +52.50747720775324 +], +[ +13.383691113798186, +52.507478706084285 +], +[ +13.38369899126162, +52.50748170274638 +], +[ +13.383702437651472, +52.50747900575077 +], +[ +13.383705884041325, +52.50747630875515 +], +[ +13.383704899358655, +52.50747361175897 +], +[ +13.383703914675987, +52.50747091476278 +], +[ +13.38370194531065, +52.5074655207704 +], +[ +13.383700714457065, +52.50746237427411 +], +[ +13.38369948360348, +52.507459227777815 +], +[ +13.383697021896312, +52.50745293478523 +], +[ +13.383696037213124, +52.507450537455 +], +[ +13.383695052529934, +52.507448140124765 +], +[ +13.383693083163555, +52.5074433454643 +], +[ +13.383693083163555, +52.50743615347177 +], +[ +13.383693083163555, +52.50743255747551 +], +[ +13.383693083163555, +52.50742896147924 +], +[ +13.383695052529397, +52.507425215649135 +], +[ +13.38369702189524, +52.50742146981903 +], +[ +13.383698991261081, +52.50741772398892 +], +[ +13.383700960626923, +52.507413978158816 +], +[ +13.383714746188012, +52.507414877158126 +], +[ +13.383721638968558, +52.507415326657785 +], +[ +13.383728531749103, +52.507415776157444 +], +[ +13.383735424529648, +52.5074162256571 +], +[ +13.383742317310194, +52.50741667515676 +], +[ +13.383756102871283, +52.50741757415607 +], +[ +13.383743301993448, +52.50742656414714 +], +[ +13.383736901554531, +52.507431059142675 +], +[ +13.383730501115613, +52.507435554138205 +], +[ +13.383725577701178, +52.50744244646436 +], +[ +13.38372311599396, +52.50744589262744 +], +[ +13.383720654286742, +52.507449338790515 +], +[ +13.38372213131126, +52.50745713011395 +], +[ +13.383722869823519, +52.50746102577567 +], +[ +13.383723608335776, +52.50746492143738 +], +[ +13.383723115993913, +52.50747361175839 +], +[ +13.383722869822982, +52.5074779569189 +], +[ +13.38372262365205, +52.5074823020794 +], +[ +13.38373099345637, +52.50748679707222 +], +[ +13.38373517835853, +52.50748904456863 +], +[ +13.38373936326069, +52.50749129206503 +], +[ +13.383745763700649, +52.50748769607096 +], +[ +13.383748963920628, +52.507485898073924 +], +[ +13.383752164140608, +52.50748410007689 +], +[ +13.383750933286485, +52.507481702747064 +], +[ +13.383749702432365, +52.50747930541724 +], +[ +13.383747240724121, +52.507474510757596 +], +[ +13.383750687115082, +52.50746821776622 +], +[ +13.383752410310564, +52.50746507127053 +], +[ +13.383754133506043, +52.50746192477484 +], +[ +13.383753887335095, +52.50745952744451 +], +[ +13.383753641164146, +52.507457130114176 +], +[ +13.38375314882225, +52.507452335453515 +], +[ +13.383757826066256, +52.50744918895711 +], +[ +13.383762503310264, +52.50744604246071 +], +[ +13.38376718055427, +52.5074428959643 +], +[ +13.383771857798278, +52.5074397494679 +], +[ +13.383774811847312, +52.50742896147924 +], +[ +13.383775796529997, +52.50742356748368 +], +[ +13.383776781212683, +52.50741817348811 +], +[ +13.383778750577987, +52.507407385497125 +], +[ +13.383766934383749, +52.507400193502995 +], +[ +13.383734439846156, +52.50739719683842 +], +[ +13.383703914676149, +52.5073977961706 +], +[ +13.383677328236688, +52.50740438883282 +], +[ +13.383664527358723, +52.50742117015333 +], +[ +13.383670435456915, +52.507431958142895 +], +[ +13.38365714223712, +52.50743705247045 +], +[ +13.383643849017323, +52.507442146798006 +], +[ +13.383622185992197, +52.507442146798006 +], +[ +13.383595599554882, +52.507435554138205 +], +[ +13.383591660822189, +52.50742536548237 +], +[ +13.383583783358562, +52.50740918349597 +], +[ +13.383584768042352, +52.50739360084038 +], +[ +13.383588706774102, +52.50738610917757 +], +[ +13.383592645505852, +52.50737861751475 +], +[ +13.383593137846674, +52.50737172518437 +], +[ +13.383593630187496, +52.50736483285399 +], +[ +13.383593630187496, +52.50735853985536 +], +[ +13.383593630187496, +52.50735224685674 +], +[ +13.383593630187496, +52.50733966085949 +], +[ +13.383587722091514, +52.5073180848596 +], +[ +13.383590676140548, +52.507300704187905 +], +[ +13.383591660822189, +52.50728332351451 +], +[ +13.383593630187496, +52.50726594283825 +], +[ +13.383592645505852, +52.507249760827584 +], +[ +13.383591660822189, +52.50722578747179 +], +[ +13.383592645505852, +52.50720840678557 +], +[ +13.383590676140548, +52.50719042676159 +], +[ +13.383589691456821, +52.50717604274039 +], +[ +13.383588706773027, +52.5071604600488 +], +[ +13.383585260383175, +52.50714817369285 +], +[ +13.383581813993322, +52.507135887336894 +], +[ +13.383598061261075, +52.50713618700434 +], +[ +13.383614308528829, +52.50713648667179 +], +[ +13.383619724285094, +52.50714877302775 +], +[ +13.383625140041358, +52.50716105938371 +], +[ +13.383617262577795, +52.507179638746244 +], +[ +13.383626124725085, +52.507201814110466 +], +[ +13.383656649895224, +52.507194622100265 +], +[ +13.383694067847282, +52.507194622100265 +], +[ +13.383725577701144, +52.50719761877219 +], +[ +13.383726562382725, +52.507210204787945 +], +[ +13.383696037212585, +52.507212002788954 +], +[ +13.383669450773125, +52.507210204787945 +], +[ +13.383648772431725, +52.50721440012577 +], +[ +13.383617262577795, +52.507214999460224 +], +[ +13.383605446383752, +52.507225188137404 +], +[ +13.383608400432783, +52.507238972817255 +], +[ +13.383627109408812, +52.5072371748167 +], +[ +13.383625140041358, +52.50722818480698 +], +[ +13.383639910286648, +52.507225188137404 +], +[ +13.383654680529917, +52.50722398946974 +], +[ +13.383675358871317, +52.50722398946974 +], +[ +13.383695052528859, +52.507221592133185 +], +[ +13.38371868491929, +52.507221592133185 +], +[ +13.383737393895318, +52.507227585473906 +], +[ +13.383733455164643, +52.507238972817255 +], +[ +13.383730501115613, +52.50724736349154 +], +[ +13.383709822774277, +52.507246764158516 +], +[ +13.38370194531065, +52.507238373484164 +], +[ +13.383690129114457, +52.50723537681484 +], +[ +13.38366551204245, +52.507236575482246 +], +[ +13.383643849017323, +52.507243767488156 +], +[ +13.383631048139486, +52.507252158162125 +], +[ +13.383618247261522, +52.50725695283244 +], +[ +13.383610369798218, +52.50726953884085 +], +[ +13.383629078774119, +52.50727493284452 +], +[ +13.383640894968293, +52.50726953884085 +], +[ +13.383655665213643, +52.50726414483817 +], +[ +13.383667481407754, +52.50725935016823 +], +[ +13.383681266969381, +52.50725455549797 +], +[ +13.383702929992294, +52.507256353498185 +], +[ +13.383713269164035, +52.507256653165314 +], +[ +13.383723608335776, +52.50725695283244 +], +[ +13.383735424529949, +52.507260548835305 +], +[ +13.383747240724121, +52.50726414483817 +], +[ +13.3837467483833, +52.50726893950784 +], +[ +13.38374625604248, +52.50727373417751 +], +[ +13.383721638968323, +52.50727673084565 +], +[ +13.383698006577957, +52.50727493284452 +], +[ +13.383681266969381, +52.507277330178546 +], +[ +13.383660588628048, +52.50728032684656 +], +[ +13.38364286433581, +52.50728392284871 +], +[ +13.383625140041358, +52.50728871751753 +], +[ +13.383609385114363, +52.50729171418522 +], +[ +13.383611354481816, +52.50730130352189 +], +[ +13.383634002188584, +52.507303101522645 +], +[ +13.383656649895224, +52.507300704187905 +], +[ +13.383691113798184, +52.507299505521225 +], +[ +13.383709822774277, +52.50729650885372 +], +[ +13.383730501115613, +52.50728871751753 +], +[ +13.383744286677173, +52.50728871751753 +], +[ +13.383751179456882, +52.50730190285589 +], +[ +13.383727547066451, +52.50730909485711 +], +[ +13.383712776822204, +52.50731089285767 +], +[ +13.383698006577957, +52.50731269085822 +], +[ +13.383670435456915, +52.507313889524774 +], +[ +13.383646803066354, +52.507315088191326 +], +[ +13.383614308528829, +52.507315687525185 +], +[ +13.383610369798218, +52.50732527685965 +], +[ +13.383635971553888, +52.507328273526305 +], +[ +13.383655665213643, +52.50732587619351 +], +[ +13.383691113798184, +52.507324677525794 +], +[ +13.383709822774245, +52.50732228019223 +], +[ +13.383719177262275, +52.50732108152545 +], +[ +13.383728531750306, +52.50731988285866 +], +[ +13.383751179456882, +52.50731748552561 +], +[ +13.383758072237157, +52.50731763535911 +], +[ +13.383764965017434, +52.507317785192605 +], +[ +13.383778750577987, +52.5073180848596 +], +[ +13.383779735261713, +52.50732887286011 +], +[ +13.383775058017697, +52.507329547110004 +], +[ +13.383770380773683, +52.5073302213599 +], +[ +13.383761026285653, +52.507331569859694 +], +[ +13.383751671797622, +52.50733291835949 +], +[ +13.383742317309592, +52.50733426685928 +], +[ +13.383734193675764, +52.50733426685928 +], +[ +13.383726070041934, +52.50733426685928 +], +[ +13.383709822774277, +52.50733426685928 +], +[ +13.383683236334752, +52.507337862859465 +], +[ +13.383666496724027, +52.507339061525705 +], +[ +13.383655994692674, +52.5073425606994 +], +[ +13.383643849017323, +52.50734205819196 +], +[ +13.383637694749337, +52.507342357858846 +], +[ +13.383631540481352, +52.507342657525726 +], +[ +13.38361923194538, +52.50734325685949 +], +[ +13.383617754920849, +52.50734685285882 +], +[ +13.383616277896316, +52.50735044885814 +], +[ +13.383613323847252, +52.50735764085679 +], +[ +13.38361898577391, +52.507357790689866 +], +[ +13.38362464770057, +52.507357940522944 +], +[ +13.383635971553888, +52.5073582401891 +], +[ +13.383641633480565, +52.50735734118925 +], +[ +13.383647295407242, +52.50735644218939 +], +[ +13.383658619260595, +52.50735464418968 +], +[ +13.383682251650894, +52.507350448857714 +], +[ +13.383703914676149, +52.507349250191616 +], +[ +13.383729516431755, +52.50734805152545 +], +[ +13.38375314882225, +52.50734565419189 +], +[ +13.383766934383749, +52.50734445552566 +], +[ +13.383786628041419, +52.50735164752388 +], +[ +13.38378071994544, +52.50736123685477 +], +[ +13.38373936326069, +52.507364233520384 +], +[ +13.383728777919595, +52.50736393385391 +], +[ +13.3837181925785, +52.50736363418743 +], +[ +13.383697021896312, +52.50736303485447 +], +[ +13.383680282286695, +52.50736453318724 +], +[ +13.383663542677079, +52.507366031520014 +], +[ +13.383649757115483, +52.507368728519246 +], +[ +13.383635971553888, +52.50737142551848 +], +[ +13.383627109407705, +52.50737412251693 +], +[ +13.383618247261522, +52.50737681951538 +], +[ +13.383617262577795, +52.507390004842215 +], +[ +13.383627109407152, +52.507389705175804 +], +[ +13.38363695623651, +52.50738940550939 +], +[ +13.383646803065867, +52.50738910584298 +], +[ +13.383656649895224, +52.50738880617657 +], +[ +13.383666250553633, +52.50738835667677 +], +[ +13.383675851212042, +52.50738790717698 +], +[ +13.38368545187045, +52.50738745767718 +], +[ +13.383695052528859, +52.50738700817738 +], +[ +13.383705884041404, +52.507385959344745 +], +[ +13.383716715553952, +52.507384910512116 +], +[ +13.3837275470665, +52.507383861679486 +], +[ +13.383738378579045, +52.50738281284685 +], +[ +13.383770873114551, +52.507373223517924 +], +[ +13.383796474872439, +52.50737142551848 +], +[ +13.383802382969492, +52.507366031520476 +], +[ +13.383808291066545, +52.507360637522474 +], +[ +13.38380755255427, +52.50735434452359 +], +[ +13.383806814041996, +52.50734805152471 +], +[ +13.383805337017447, +52.50733546552694 +], +[ +13.38380459850519, +52.50732947219312 +], +[ +13.383803859992932, +52.5073234788593 +], +[ +13.383802382968417, +52.507311492191654 +], +[ +13.383798936578565, +52.5073051991897 +], +[ +13.38379549018871, +52.50729890618774 +], +[ +13.383792043798856, +52.50729261318578 +], +[ +13.383788597409003, +52.50728632018383 +], +[ +13.383782443140431, +52.50728197501485 +], +[ +13.383776288871859, +52.507277629845866 +], +[ +13.383763980334715, +52.5072689395079 +], +[ +13.383761026285685, +52.50724736349154 +], +[ +13.383754133506043, +52.50722578747179 +], +[ +13.383747240724121, +52.50719761877219 +], +[ +13.383734439846156, +52.50718143674914 +], +[ +13.383693083163555, +52.50717784074342 +], +[ +13.38365763457895, +52.50717844007806 +], +[ +13.383636956237615, +52.50718383408532 +], +[ +13.383639910286648, +52.507168850729734 +], +[ +13.383666496724027, +52.50715866204559 +], +[ +13.383690129114457, +52.507157463377204 +], +[ +13.383706868725117, +52.50715626470811 +], +[ +13.383723608335776, +52.50715506603901 +], +[ +13.383749210091574, +52.50715506603901 +], +[ +13.383761026285685, +52.50717364540403 +], +[ +13.383758072236587, +52.507189827427005 +], +[ +13.383778750577987, +52.50719642010284 +], +[ +13.383797459554016, +52.50719162542965 +], +[ +13.383823061309686, +52.50718203608255 +], +[ +13.383854571163551, +52.50717664207523 +], +[ +13.38387328013958, +52.50718862875896 +], +[ +13.383863433310841, +52.507200615442606 +], +[ +13.383835862187587, +52.50720301277833 +], +[ +13.383803367652144, +52.50720361211291 +], +[ +13.383778750577987, +52.50720720811642 +], +[ +13.38376988843291, +52.50721440012577 +], +[ +13.383771857798278, +52.50722998280903 +], +[ +13.38379352082334, +52.50723297947841 +], +[ +13.383811245115576, +52.507221592133185 +], +[ +13.383843739651214, +52.507216198127956 +], +[ +13.383863433310841, +52.50721440012577 +], +[ +13.383888050382785, +52.50721260212347 + ], + [ + 13.383905774677169, + 52.507231181476506 + ], + [ + 13.383894943164835, + 52.507243168155135 + ], + [ + 13.383851617114518, + 52.50724736349154 + ], + [ + 13.383803367652144, + 52.50724796282592 + ], + [ + 13.383784658676051, + 52.507252158162125 + ], + [ + 13.383796474872439, + 52.50726594283825 + ], + [ + 13.383806814043137, + 52.507268040506645 + ], + [ + 13.383817153213835, + 52.50727013817504 + ], + [ + 13.383830446432524, + 52.50726744117308 + ], + [ + 13.383837093041869, + 52.5072660926721 + ], + [ + 13.383843739651214, + 52.50726474417112 + ], + [ + 13.383858017553534, + 52.50726294616975 + ], + [ + 13.383865156504694, + 52.50726204716907 + ], + [ + 13.383872295455854, + 52.50726114816839 + ], + [ + 13.383889035066511, + 52.50725875083329 + ], + [ + 13.38389740487184, + 52.50725755216574 + ], + [ + 13.383905774677169, + 52.507256353498185 + ], + [ + 13.383918083213207, + 52.50726054883465 + ], + [ + 13.383924237481224, + 52.50726264650288 + ], + [ + 13.383930391749244, + 52.50726474417112 + ], + [ + 13.383931376431896, + 52.507273134843 + ], + [ + 13.383932361114548, + 52.50728152551488 + ], + [ + 13.383922760456155, + 52.507283023848835 + ], + [ + 13.383913159797762, + 52.50728452218279 + ], + [ + 13.38390355913937, + 52.50728602051675 + ], + [ + 13.383893958480977, + 52.50728751885071 + ], + [ + 13.383884850163911, + 52.50728811818412 + ], + [ + 13.383875741846845, + 52.507288717517525 + ], + [ + 13.38386663352978, + 52.50728931685093 + ], + [ + 13.383857525212713, + 52.50728991618434 + ], + [ + 13.383849893920162, + 52.50728976635115 + ], + [ + 13.383842262627612, + 52.507289616517966 + ], + [ + 13.38382700004251, + 52.50728931685159 + ], + [ + 13.383820599603624, + 52.50729381185303 + ], + [ + 13.383814199164737, + 52.50729830685447 + ], + [ + 13.383817645554592, + 52.50730549885635 + ], + [ + 13.383821091944446, + 52.50731269085822 + ], + [ + 13.383837831555104, + 52.50731329019214 + ], + [ + 13.383861463945534, + 52.50731029352374 + ], + [ + 13.383887065701272, + 52.50730669752394 + ], + [ + 13.383911682773215, + 52.507303101522645 + ], + [ + 13.383940238578047, + 52.50730130352189 + ], + [ + 13.383952054774303, + 52.507321680859015 + ], + [ + 13.383929407065517, + 52.50733186952669 + ], + [ + 13.38390380530978, + 52.50732887286011 + ], + [ + 13.383857525212713, + 52.50732647552602 + ], + [ + 13.383831923456976, + 52.50732887286011 + ], + [ + 13.38382847706709, + 52.50733366752669 + ], + [ + 13.383825030677203, + 52.50733846219327 + ], + [ + 13.38382478450627, + 52.5073429571923 + ], + [ + 13.38382453833534, + 52.50734745219133 + ], + [ + 13.383824045993476, + 52.5073564421894 + ], + [ + 13.383837831553997, + 52.50735674185626 + ], + [ + 13.383851617114518, + 52.50735704152313 + ], + [ + 13.383884111652238, + 52.50734984952398 + ], + [ + 13.383915621506103, + 52.50734505485945 + ], + [ + 13.383943192627209, + 52.50734205819196 + ], + [ + 13.383968794382879, + 52.507339061525705 + ], + [ + 13.383978641213831, + 52.50735584285709 + ], + [ + 13.3839707637504, + 52.50737202485208 + ], + [ + 13.383917590871407, + 52.50737202485208 + ], + [ + 13.383896912530075, + 52.50736962751896 + ], + [ + 13.383864417992482, + 52.50737562084954 + ], + [ + 13.38382700004251, + 52.50737562084954 + ], + [ + 13.383805337017447, + 52.507382213513246 + ], + [ + 13.38380435233587, + 52.507396597505014 + ], + [ + 13.383852601798308, + 52.507406186831666 + ], + [ + 13.383874264823307, + 52.507400193502995 + ], + [ + 13.383894943164835, + 52.5073977961706 + ], + [ + 13.383908728724181, + 52.507394200173856 + ], + [ + 13.383925960675695, + 52.507393001507594 + ], + [ + 13.383943192627209, + 52.50739180284133 + ], + [ + 13.383966825017508, + 52.50738760751093 + ], + [ + 13.384001288920535, + 52.50738760751093 + ], + [ + 13.383989472724215, + 52.507407385497125 + ], + [ + 13.383952054774303, + 52.507413978158816 + ], + [ + 13.383926945359358, + 52.50741457749151 + ], + [ + 13.383901835944412, + 52.5074151768242 + ], + [ + 13.383872295455854, + 52.50742117015333 + ], + [ + 13.383830938773249, + 52.50742236881852 + ], + [ + 13.38381616853001, + 52.50742446648304 + ], + [ + 13.38380878340839, + 52.5074255153153 + ], + [ + 13.383801398286773, + 52.50742656414756 + ], + [ + 13.383797459555055, + 52.507430459810166 + ], + [ + 13.383793520823339, + 52.50743435547278 + ], + [ + 13.383785643359905, + 52.507442146798006 + ], + [ + 13.383783181652673, + 52.507449039123706 + ], + [ + 13.383781950799056, + 52.50745248528656 + ], + [ + 13.38378071994544, + 52.50745593144941 + ], + [ + 13.383780227603847, + 52.507458403696006 + ], + [ + 13.383779735262252, + 52.5074608759426 + ], + [ + 13.383779242920657, + 52.5074633481892 + ], + [ + 13.383778750579062, + 52.5074658204358 + ], + [ + 13.383778258237466, + 52.5074682926824 + ], + [ + 13.383777765895871, + 52.507470764928996 + ], + [ + 13.383776781212683, + 52.50747570942219 + ], + [ + 13.383772842482005, + 52.507488295403256 + ], + [ + 13.383778750579612, + 52.50749039306663 + ], + [ + 13.383784658677222, + 52.507492490730016 + ], + [ + 13.383790566774831, + 52.5074945883934 + ], + [ + 13.383796474872439, + 52.507496686056776 + ], + [ + 13.383799182750018, + 52.50749488805951 + ], + [ + 13.383801890627597, + 52.507493090062255 + ], + [ + 13.383807306382755, + 52.507489494067734 + ], + [ + 13.383806814041428, + 52.5074857482402 + ], + [ + 13.383806321700101, + 52.507482002412665 + ], + [ + 13.383805337017447, + 52.507474510757596 + ], + [ + 13.383806567871048, + 52.507470015763474 + ], + [ + 13.383807798724648, + 52.50746552076936 + ], + [ + 13.383810260431849, + 52.50745653078112 + ], + [ + 13.383812229798293, + 52.50744933878956 + ], + [ + 13.383814199164737, + 52.507442146798006 + ], + [ + 13.383841770285715, + 52.50743675280463 + ], + [ + 13.383864417992482, + 52.50743855080284 + ], + [ + 13.383844724334745, + 52.5074541334514 + ], + [ + 13.38382700004251, + 52.507474510757596 + ], + [ + 13.383826507701183, + 52.507479005750895 + ], + [ + 13.383826015359856, + 52.5074835007442 + ], + [ + 13.38382552301853, + 52.507487995737506 + ], + [ + 13.383825030677203, + 52.507492490730804 + ], + [ + 13.383833400482011, + 52.50749398906161 + ], + [ + 13.383841770286821, + 52.50749548739241 + ], + [ + 13.383850140091631, + 52.507496985723215 + ], + [ + 13.38385850989644, + 52.50749848405402 + ], + [ + 13.383861217774573, + 52.507493989060976 + ], + [ + 13.383863925652705, + 52.50748949406793 + ], + [ + 13.383866633530836, + 52.50748499907489 + ], + [ + 13.38386934140897, + 52.50748050408185 + ], + [ + 13.38387377248154, + 52.507469716097 + ], + [ + 13.38387820355411, + 52.50745892811215 + ], + [ + 13.383887065701272, + 52.507446941459285 + ], + [ + 13.38390380530978, + 52.50743435547309 + ], + [ + 13.383916606187649, + 52.507431658476165 + ], + [ + 13.383929407065517, + 52.50742896147924 + ], + [ + 13.383939253896534, + 52.50744754079238 + ], + [ + 13.383928668554919, + 52.50745143645419 + ], + [ + 13.383918083213304, + 52.507455332116 + ], + [ + 13.383896912530075, + 52.50746312343963 + ], + [ + 13.383911190432459, + 52.50746552076975 + ], + [ + 13.383925468334843, + 52.50746791809987 + ], + [ + 13.383938023042333, + 52.50746626993536 + ], + [ + 13.383950577749822, + 52.50746462177084 + ], + [ + 13.38396313245731, + 52.50746297360633 + ], + [ + 13.383975687164801, + 52.50746132544182 + ], + [ + 13.383971748433051, + 52.50744993812233 + ], + [ + 13.383967809701302, + 52.50743855080284 + ], + [ + 13.383960424578625, + 52.50743225780856 + ], + [ + 13.383953039455948, + 52.50742596481428 + ], + [ + 13.383970271407428, + 52.50742386714976 + ], + [ + 13.383987503358908, + 52.50742176948524 + ], + [ + 13.383999811895954, + 52.50741787382203 + ], + [ + 13.384012120433, + 52.507413978158816 + ], + [ + 13.384035752823495, + 52.507398395504005 + ], + [ + 13.384021967261935, + 52.507379216848285 + ], + [ + 13.38401507448109, + 52.507370526518365 + ], + [ + 13.384008181700244, + 52.507361836188444 + ], + [ + 13.384002765943977, + 52.507353745190166 + ], + [ + 13.38399735018771, + 52.50734565419189 + ], + [ + 13.38399242677331, + 52.507334866193084 + ], + [ + 13.383987503358908, + 52.50732812369245 + ], + [ + 13.383982579944506, + 52.50732138119182 + ], + [ + 13.383977656530105, + 52.50731463869119 + ], + [ + 13.383972733115703, + 52.50730789619056 + ], + [ + 13.383969779066605, + 52.50729980518789 + ], + [ + 13.383966825017508, + 52.50729171418522 + ], + [ + 13.383957962872563, + 52.50726834017372 + ], + [ + 13.383941223261838, + 52.50724556548982 + ], + [ + 13.383930391749244, + 52.50722698613945 + ], + [ + 13.383912667457006, + 52.5071892280936 + ], + [ + 13.383884111652238, + 52.507157463377204 + ], + [ + 13.383832908140702, + 52.50716345672034 + ], + [ + 13.383797459554016, + 52.507168850729734 + ], + [ + 13.383782689310875, + 52.50717784074342 + ], + [ + 13.38376988843291, + 52.50716105938371 + ], + [ + 13.383761026285685, + 52.50714248001629 + ], + [ + 13.38374034794435, + 52.50714248001629 + ], + [ + 13.383719669603016, + 52.50714248001629 + ], + [ + 13.383691606140047, + 52.507142180349454 + ], + [ + 13.383663542677079, + 52.50714188068262 + ], + [ + 13.383639910286648, + 52.50713828467554 + ], + [ + 13.38361923194538, + 52.507125099315694 + ], + [ + 13.383639417945371, + 52.50712360097931 + ], + [ + 13.383659603945363, + 52.507122102642924 + ], + [ + 13.383679789945354, + 52.507120604306536 + ], + [ + 13.383699975945346, + 52.507119105970155 + ], + [ + 13.383720654286712, + 52.50712000497215 + ], + [ + 13.383741332628079, + 52.50712090397415 + ], + [ + 13.383762995652065, + 52.50712330131244 + ], + [ + 13.383784658676051, + 52.50712569865073 + ], + [ + 13.383790074432316, + 52.50713319033171 + ], + [ + 13.38379549018858, + 52.50714068201268 + ], + [ + 13.383810752773714, + 52.50714427801974 + ], + [ + 13.383826015358848, + 52.50714787402679 + ], + [ + 13.383817153213835, + 52.50712629798576 + ], + [ + 13.383846693700116, + 52.507118506635116 + ], + [ + 13.383860479261807, + 52.50714248001629 + ], + [ + 13.3838850963359, + 52.50713648667179 + ], + [ + 13.383883126968511, + 52.50711431129326 + ], + [ + 13.38390380530978, + 52.50711431129326 + ], + [ + 13.383905774677169, + 52.50714188068262 + ], + [ + 13.383919560236778, + 52.507157463377204 + ], + [ + 13.383946146676239, + 52.50717364540403 + ], + [ + 13.38394811604161, + 52.50719222476429 + ], + [ + 13.383959932237802, + 52.50720780745106 + ], + [ + 13.383971748431913, + 52.50722698613945 + ], + [ + 13.38398257994457, + 52.507243168155135 + ], + [ + 13.38399439614083, + 52.50726294616971 + ], + [ + 13.384003258285906, + 52.507284522182765 + ], + [ + 13.384014089798372, + 52.507309694191115 + ], + [ + 13.384021967261935, + 52.507327674192446 + ], + [ + 13.384027875358989, + 52.50733666419217 + ], + [ + 13.384033783456042, + 52.50734565419189 + ], + [ + 13.384038706871486, + 52.507359438854905 + ], + [ + 13.38404363028693, + 52.507373223517924 + ], + [ + 13.384048553701364, + 52.50738371184589 + ], + [ + 13.384053477115797, + 52.507394200173856 + ], + [ + 13.38405544648107, + 52.507404089166336 + ], + [ + 13.384057415846344, + 52.507413978158816 + ], + [ + 13.38404215326134, + 52.50741997148655 + ], + [ + 13.384026890676337, + 52.50742596481428 + ], + [ + 13.384015074481121, + 52.50743645313678 + ], + [ + 13.384003258285906, + 52.507446941459285 + ], + [ + 13.384000796578706, + 52.507456530780736 + ], + [ + 13.383998334871505, + 52.50746612010219 + ], + [ + 13.384019013212805, + 52.50746761843336 + ], + [ + 13.384039691554106, + 52.50746911676453 + ], + [ + 13.384041660920518, + 52.50746102577488 + ], + [ + 13.38404363028693, + 52.50745293478523 + ], + [ + 13.384075140140792, + 52.50743855080284 + ], + [ + 13.384089910384064, + 52.50742296815056 + ], + [ + 13.384084002285869, + 52.50740498816622 + ], + [ + 13.38407809418774, + 52.50739360084038 + ], + [ + 13.384075140140792, + 52.50738101484753 + ], + [ + 13.384064308628327, + 52.507366031520014 + ], + [ + 13.384053477115797, + 52.50734565419189 + ], + [ + 13.38404363028693, + 52.50732347885937 + ], + [ + 13.384027875360063, + 52.50729531018691 + ], + [ + 13.384013105114645, + 52.50726834017372 + ], + [ + 13.383996365506134, + 52.5072371748167 + ], + [ + 13.383979625895408, + 52.50720720811642 + ], + [ + 13.38396977906667, + 52.50718203608255 + ], + [ + 13.383956978188772, + 52.50716105938371 + ], + [ + 13.383937284529017, + 52.50713828467554 + ], + [ + 13.38392743770021, + 52.507121503309186 + ], + [ + 13.383921529604232, + 52.50710412260357 + ], + [ + 13.383964855652268, + 52.50710172526545 + ], + [ + 13.38399735018771, + 52.507099927261116 + ], + [ + 13.384030829409093, + 52.507098728592034 + ], + [ + 13.384061354579297, + 52.507099927261116 + ], + [ + 13.384061354579297, + 52.507117907301314 + ], + [ + 13.384033783456042, + 52.507117907301314 + ], + [ + 13.384007197018663, + 52.507117907301314 + ], + [ + 13.383973717797216, + 52.507117907301314 + ], + [ + 13.383955993504978, + 52.50712569865073 + ], + [ + 13.383967809701302, + 52.50713828467554 + ], + [ + 13.38400522765121, + 52.507135887336894 + ], + [ + 13.384024921310965, + 52.50713408933452 + ], + [ + 13.384057415846344, + 52.507132890664515 + ], + [ + 13.384084002285869, + 52.507145476688414 + ], + [ + 13.384059385213925, + 52.50715506603901 + ], + [ + 13.384020982578077, + 52.50715266870207 + ], + [ + 13.38398454930981, + 52.507151470033556 + ], + [ + 13.383980610579135, + 52.50716765206011 + ], + [ + 13.384007197018663, + 52.50717244673448 + ], + [ + 13.384053477115797, + 52.507168251394894 + ], + [ + 13.38407317077334, + 52.507168251394894 + ], + [ + 13.38409384911474, + 52.507168251394894 + ], + [ + 13.38409680316377, + 52.50718383408532 + ], + [ + 13.384074155455439, + 52.50718922809562 + ], + [ + 13.384030829407466, + 52.50718563209009 + ], + [ + 13.384002273602635, + 52.50718982742902 + ], + [ + 13.383994396139135, + 52.507203612114985 + ], + [ + 13.38400916638234, + 52.50720840678759 + ], + [ + 13.384034768138141, + 52.50720960545532 + ], + [ + 13.384058400528508, + 52.50720660878522 + ], + [ + 13.38408794101713, + 52.507204211448204 + ], + [ + 13.384111573407564, + 52.507203012780344 + ], + [ + 13.384115512138107, + 52.50722159213513 + ], + [ + 13.384096803162079, + 52.507238373486125 + ], + [ + 13.38407612482081, + 52.50723058214543 + ], + [ + 13.384031814089111, + 52.507224588806274 + ], + [ + 13.384018028529566, + 52.50723238014735 + ], + [ + 13.384027875358305, + 52.50724856216089 + ], + [ + 13.384060369893943, + 52.50725036016248 + ], + [ + 13.384095818480565, + 52.507250959496865 + ], + [ + 13.384132251748833, + 52.50724976082946 + ], + [ + 13.38414406794294, + 52.50725935017018 + ], + [ + 13.384132251748833, + 52.507273734179456 + ], + [ + 13.384106649993095, + 52.50727433351235 + ], + [ + 13.384062339261332, + 52.50726893950992 + ], + [ + 13.384046584334397, + 52.507274932846535 + ], + [ + 13.384050523065072, + 52.50730250219066 + ], + [ + 13.38408695633334, + 52.50729770752249 + ], + [ + 13.384113542772804, + 52.50729411152218 + ], + [ + 13.384142098577636, + 52.50729411152218 + ], + [ + 13.384166715651856, + 52.507311492193615 + ], + [ + 13.384143083261426, + 52.50731808486149 + ], + [ + 13.384116496821965, + 52.50731269086024 + ], + [ + 13.384085971651826, + 52.507313290194155 + ], + [ + 13.384074155455439, + 52.507324078195246 + ], + [ + 13.384090895066164, + 52.507337263527624 + ], + [ + 13.384101726577653, + 52.50733606486136 + ], + [ + 13.384112558089141, + 52.5073348661951 + ], + [ + 13.384141113893909, + 52.507332468861144 + ], + [ + 13.384162776918968, + 52.507331869528635 + ], + [ + 13.384162284577105, + 52.507342957193984 + ], + [ + 13.384161792235242, + 52.50735404485933 + ], + [ + 13.384145052625657, + 52.50735554319224 + ], + [ + 13.384128313016072, + 52.50735704152515 + ], + [ + 13.38411452745552, + 52.50735614252526 + ], + [ + 13.384100741894967, + 52.507355243525375 + ], + [ + 13.384099757212315, + 52.50736812918746 + ], + [ + 13.384098772529663, + 52.50738101484955 + ], + [ + 13.384119943211786, + 52.50737981618316 + ], + [ + 13.384141113893909, + 52.50737861751677 + ], + [ + 13.384157853503526, + 52.50737711918416 + ], + [ + 13.384174593113142, + 52.507375620851555 + ], + [ + 13.384178531844858, + 52.50738371184745 + ], + [ + 13.384182470576574, + 52.50739180284335 + ], + [ + 13.384159822869904, + 52.50739509917469 + ], + [ + 13.384137175163234, + 52.50739839550602 + ], + [ + 13.384109604040043, + 52.50740199150386 + ], + [ + 13.384111573407564, + 52.507416375492845 + ], + [ + 13.384133236430474, + 52.50742117015535 + ], + [ + 13.384152930089188, + 52.50741997148941 + ], + [ + 13.384172623747903, + 52.50741877282348 + ], + [ + 13.384209057016038, + 52.50742057082201 + ], + [ + 13.384194286772898, + 52.507434355475105 + ], + [ + 13.38414899135734, + 52.50743855080491 + ], + [ + 13.38411058872377, + 52.507442146800024 + ], + [ + 13.384098772528555, + 52.507450537457096 + ], + [ + 13.38408695633334, + 52.50745892811417 + ], + [ + 13.384114527456594, + 52.50746911676662 + ], + [ + 13.384131759406968, + 52.5074667194365 + ], + [ + 13.38413606739456, + 52.50746612010397 + ], + [ + 13.384140375382154, + 52.50746552077144 + ], + [ + 13.384144683369747, + 52.50746492143891 + ], + [ + 13.38414899135734, + 52.50746432210638 + ], + [ + 13.384157730418288, + 52.507463198357875 + ], + [ + 13.38416209994876, + 52.50746263648362 + ], + [ + 13.384166469479233, + 52.50746207460937 + ], + [ + 13.384170839009705, + 52.50746151273512 + ], + [ + 13.384175208540178, + 52.50746095086087 + ], + [ + 13.38417957807065, + 52.507460388986615 + ], + [ + 13.384183947601123, + 52.50745982711236 + ], + [ + 13.384192686662068, + 52.50745870336386 + ], + [ + 13.384201425723013, + 52.507457579615355 + ], + [ + 13.384205795253486, + 52.5074570177411 + ], + [ + 13.384210164783958, + 52.50745645586685 + ], + [ + 13.384218903844905, + 52.50745533211835 + ], + [ + 13.384239582188387, + 52.50744334546632 + ], + [ + 13.384231704724955, + 52.50739779617255 + ], + [ + 13.384216934479602, + 52.50737741885093 + ], + [ + 13.3841992101873, + 52.507358240191174 + ], + [ + 13.384192317407658, + 52.50734085952781 + ], + [ + 13.384187393993125, + 52.5073156875272 + ], + [ + 13.384180501211207, + 52.5072755321793 + ], + [ + 13.384168685017096, + 52.50723957215359 + ], + [ + 13.384161792235242, + 52.50721859546535 + ], + [ + 13.384145052626797, + 52.507195820771564 + ], + [ + 13.384128313016072, + 52.50716105938566 + ], + [ + 13.384114527456594, + 52.507141880684635 + ], + [ + 13.38408991038237, + 52.507118506637134 + ], + [ + 13.384085971651826, + 52.50710232460276 + ], + [ + 13.384118466187205, + 52.50709693058979 + ], + [ + 13.384168685017096, + 52.50709752992501 + ], + [ + 13.3842120110652, + 52.50709693058979 + ], + [ + 13.384228750675794, + 52.50711191395741 + ], + [ + 13.384197240821928, + 52.50711730796824 + ], + [ + 13.384155884139263, + 52.50710771861399 + ], + [ + 13.384128313016072, + 52.50711550996417 + ], + [ + 13.384139144528602, + 52.50713468867027 + ], + [ + 13.38417656248066, + 52.50713528800518 + ], + [ + 13.384224811943033, + 52.507129893994026 + ], + [ + 13.384242536235336, + 52.50714847336378 + ], + [ + 13.384206102967005, + 52.50715326803769 + ], + [ + 13.384163761602826, + 52.50714967203229 + ], + [ + 13.384148006675828, + 52.50715926138238 + ], + [ + 13.384157853504567, + 52.50716885073168 + ], + [ + 13.384177547162173, + 52.50717184740302 + ], + [ + 13.384196256138202, + 52.50717064873478 + ], + [ + 13.384212995748927, + 52.50717124806825 + ], + [ + 13.384230720041165, + 52.50717064873478 + ], + [ + 13.384249429017194, + 52.507169450065156 + ], + [ + 13.384269122674736, + 52.507170049399996 + ], + [ + 13.384277984822026, + 52.50718143675109 + ], + [ + 13.38426419926033, + 52.50719102609832 + ], + [ + 13.384239582188387, + 52.50718743009292 + ], + [ + 13.384218903844905, + 52.50718683075821 + ], + [ + 13.384191332723868, + 52.50718503275545 + ], + [ + 13.384171639066258, + 52.50718443342203 + ], + [ + 13.384174593113142, + 52.507195820771564 + ], + [ + 13.384194286772898, + 52.50720001610991 + ], + [ + 13.384220873212358, + 52.50720001610991 + ], + [ + 13.38424549028437, + 52.50720241344576 + ], + [ + 13.3842612452113, + 52.50720181411243 + ], + [ + 13.384280938871056, + 52.507201214777844 + ], + [ + 13.384292755065166, + 52.507212602125556 + ], + [ + 13.384271092040171, + 52.50721919479988 + ], + [ + 13.384249429017194, + 52.50722039346754 + ], + [ + 13.384231704724955, + 52.507217996132205 + ], + [ + 13.384202164236266, + 52.507216198129974 + ], + [ + 13.38419527145656, + 52.50722998281105 + ], + [ + 13.384212995748927, + 52.50723717481865 + ], + [ + 13.384249429017194, + 52.507243168157096 + ], + [ + 13.384286846967038, + 52.50724017148797 + ], + [ + 13.384319341504758, + 52.50723477748242 + ], + [ + 13.384349866674766, + 52.50724856216089 + ], + [ + 13.384339035162364, + 52.507261148170336 + ], + [ + 13.38431441809029, + 52.507263545505985 + ], + [ + 13.384277984822026, + 52.5072599495032 + ], + [ + 13.384244505602789, + 52.50725935017018 + ], + [ + 13.384213980430504, + 52.5072563535002 + ], + [ + 13.384210041699896, + 52.507274932846535 + ], + [ + 13.38422382726152, + 52.507282124849645 + ], + [ + 13.384251398382562, + 52.507283922850725 + ], + [ + 13.384272076723898, + 52.507281525516895 + ], + [ + 13.384311464041259, + 52.50727673084774 + ], + [ + 13.38435085135862, + 52.50727673084774 + ], + [ + 13.384353805407654, + 52.50729890619048 + ], + [ + 13.384330173017288, + 52.50730130352391 + ], + [ + 13.384297678479568, + 52.50730130352391 + ], + [ + 13.384266168625702, + 52.50729830685649 + ], + [ + 13.38423859750466, + 52.50729770752249 + ], + [ + 13.3842120110652, + 52.50729950552317 + ], + [ + 13.384211026383623, + 52.507318684194125 + ], + [ + 13.384242536235336, + 52.507323478861316 + ], + [ + 13.38427995418733, + 52.507324078195246 + ], + [ + 13.384302601894033, + 52.50732287952875 + ], + [ + 13.384337065796993, + 52.50732647552797 + ], + [ + 13.384364636920184, + 52.50732228019489 + ], + [ + 13.384372514383747, + 52.50731988286068 + ], + [ + 13.384391223357563, + 52.50733306819493 + ], + [ + 13.384365621601829, + 52.507343856193934 + ], + [ + 13.384337065796993, + 52.50734205819398 + ], + [ + 13.38429373974902, + 52.50734026019531 + ], + [ + 13.384244505602789, + 52.507337263527624 + ], + [ + 13.384219888528632, + 52.507338462195214 + ], + [ + 13.384233674090327, + 52.5073534455256 + ], + [ + 13.384256321796899, + 52.507355243525375 + ], + [ + 13.38427995418733, + 52.5073546441917 + ], + [ + 13.384301617212389, + 52.507355243525375 + ], + [ + 13.384328203651917, + 52.50735644219147 + ], + [ + 13.384371529699957, + 52.50735404485933 + ], + [ + 13.384401070188447, + 52.5073546441917 + ], + [ + 13.38441584043172, + 52.50736782952148 + ], + [ + 13.3843882693084, + 52.50737202485403 + ], + [ + 13.384360698187423, + 52.50737082618689 + ], + [ + 13.384317372139451, + 52.50737322351987 + ], + [ + 13.384274046089201, + 52.50736962752098 + ], + [ + 13.3842405668699, + 52.50737022685458 + ], + [ + 13.384246474968096, + 52.5073870081794 + ], + [ + 13.384269122674736, + 52.507390004844304 + ], + [ + 13.38429373974902, + 52.507390004844304 + ], + [ + 13.384341004529754, + 52.507387607512875 + ], + [ + 13.38437054501623, + 52.507385210180225 + ], + [ + 13.384405993602853, + 52.50738461084806 + ], + [ + 13.384433564723958, + 52.50739959417154 + ], + [ + 13.38439516209032, + 52.50740378950142 + ], + [ + 13.384340019846091, + 52.50740378950142 + ], + [ + 13.384298663163358, + 52.50740378950142 + ], + [ + 13.384259275845997, + 52.50740319016938 + ], + [ + 13.384254352431595, + 52.50741757415809 + ], + [ + 13.384281923552633, + 52.50742057082201 + ], + [ + 13.384312448723877, + 52.507419671822745 + ], + [ + 13.384342973895121, + 52.50741877282348 + ], + [ + 13.384365129261004, + 52.50741757415816 + ], + [ + 13.384387284626888, + 52.507416375492845 + ], + [ + 13.384403039553852, + 52.50741607582617 + ], + [ + 13.384418794480817, + 52.5074157761595 + ], + [ + 13.384431103016821, + 52.507415476492824 + ], + [ + 13.384443411552825, + 52.50741517682615 + ], + [ + 13.384429625993283, + 52.507431958144856 + ], + [ + 13.38441140935915, + 52.507431958144856 + ], + [ + 13.384393192725016, + 52.507431958144856 + ], + [ + 13.384367590968173, + 52.50743225781078 + ], + [ + 13.38434198921133, + 52.5074325574767 + ], + [ + 13.38431441809029, + 52.507433156809974 + ], + [ + 13.384294724431609, + 52.50743345647655 + ], + [ + 13.384275030772928, + 52.50743375614312 + ], + [ + 13.3842612452113, + 52.507447540794395 + ], + [ + 13.384294724430534, + 52.50745353412034 + ], + [ + 13.384313433406563, + 52.50745083712332 + ], + [ + 13.384332142382592, + 52.50744814012631 + ], + [ + 13.384341004528693, + 52.50744799029333 + ], + [ + 13.384345435601745, + 52.507447915376844 + ], + [ + 13.384349866674796, + 52.50744784046035 + ], + [ + 13.384354297747848, + 52.50744776554386 + ], + [ + 13.3843587288209, + 52.50744769062737 + ], + [ + 13.384363159893951, + 52.50744761571089 + ], + [ + 13.384367590967, + 52.507447540794395 + ], + [ + 13.384371037357415, + 52.50744724112798 + ], + [ + 13.38437448374783, + 52.507446941461566 + ], + [ + 13.38438137652866, + 52.507446342128745 + ], + [ + 13.384384822919074, + 52.507446042462334 + ], + [ + 13.38438826930949, + 52.50744574279592 + ], + [ + 13.38439516209032, + 52.507445143463094 + ], + [ + 13.384398977736595, + 52.50744521837974 + ], + [ + 13.38440279338287, + 52.5074452932964 + ], + [ + 13.384410424675421, + 52.507445443129704 + ], + [ + 13.384414240321696, + 52.50744551804635 + ], + [ + 13.384418055967972, + 52.50744559296301 + ], + [ + 13.384421871614247, + 52.507445667879665 + ], + [ + 13.384425687260523, + 52.507445742796314 + ], + [ + 13.384429379821308, + 52.50745008795765 + ], + [ + 13.3844312261017, + 52.507452260538315 + ], + [ + 13.384433072382093, + 52.50745443311898 + ], + [ + 13.384434918662485, + 52.507456605699645 + ], + [ + 13.384436764942878, + 52.50745877828031 + ], + [ + 13.38443861122327, + 52.507460950860974 + ], + [ + 13.384440457503663, + 52.507463123441646 + ], + [ + 13.38443467249153, + 52.507463572941084 + ], + [ + 13.384428887479395, + 52.50746402244052 + ], + [ + 13.384423102467261, + 52.50746447193996 + ], + [ + 13.384417317455128, + 52.5074649214394 + ], + [ + 13.384411532442995, + 52.50746537093884 + ], + [ + 13.384405747430861, + 52.50746582043828 + ], + [ + 13.384399962418726, + 52.507466269937716 + ], + [ + 13.384394177406593, + 52.507466719437154 + ], + [ + 13.38438950016273, + 52.50746675689538 + ], + [ + 13.384384822918864, + 52.50746679435362 + ], + [ + 13.384380145675, + 52.507466831811854 + ], + [ + 13.384375468431134, + 52.50746686927008 + ], + [ + 13.38437079118727, + 52.50746690672831 + ], + [ + 13.384366113943404, + 52.50746694418655 + ], + [ + 13.384361436699539, + 52.50746698164478 + ], + [ + 13.384356759455676, + 52.50746701910301 + ], + [ + 13.384352082211812, + 52.50746705656124 + ], + [ + 13.384347404967947, + 52.507467094019475 + ], + [ + 13.384342727724082, + 52.50746713147771 + ], + [ + 13.384338050480217, + 52.50746716893594 + ], + [ + 13.384333373236352, + 52.50746720639417 + ], + [ + 13.384328695992487, + 52.5074672438524 + ], + [ + 13.384324018748622, + 52.50746728131064 + ], + [ + 13.384319341504758, + 52.50746731876887 + ], + [ + 13.384308756163144, + 52.50746911676656 + ], + [ + 13.384303463492337, + 52.5074700157654 + ], + [ + 13.384298170821529, + 52.50747091476424 + ], + [ + 13.38429287815072, + 52.50747181376308 + ], + [ + 13.384287585479914, + 52.507472712761924 + ], + [ + 13.384282292809107, + 52.50747361176077 + ], + [ + 13.3842770001383, + 52.507474510759614 + ], + [ + 13.384267399479889, + 52.50747540975839 + ], + [ + 13.38425779882148, + 52.50747630875717 + ], + [ + 13.384252998492276, + 52.50747675825656 + ], + [ + 13.384248198163071, + 52.50747720775595 + ], + [ + 13.384243397833867, + 52.507477657255336 + ], + [ + 13.38423859750466, + 52.507478106754725 + ], + [ + 13.38423268940706, + 52.50747833150426 + ], + [ + 13.384226781309462, + 52.50747855625379 + ], + [ + 13.384220873211863, + 52.507478781003314 + ], + [ + 13.384214965114264, + 52.50747900575285 + ], + [ + 13.384209057016665, + 52.50747923050238 + ], + [ + 13.384203148919067, + 52.50747945525191 + ], + [ + 13.384191332723868, + 52.50747990475097 + ], + [ + 13.38418671702259, + 52.50748016695897 + ], + [ + 13.384182101321311, + 52.50748042916696 + ], + [ + 13.384177485620032, + 52.50748069137495 + ], + [ + 13.384172869918753, + 52.50748095358294 + ], + [ + 13.384163638516196, + 52.50748147799892 + ], + [ + 13.38415440711364, + 52.50748200241491 + ], + [ + 13.384149791412362, + 52.50748226462291 + ], + [ + 13.384145175711083, + 52.5074825268309 + ], + [ + 13.384135944308525, + 52.50748305124688 + ], + [ + 13.384117481503411, + 52.50748410007885 + ], + [ + 13.38408991038237, + 52.507488894738096 + ], + [ + 13.38410024955307, + 52.50749728539064 + ], + [ + 13.38411058872377, + 52.50750567604319 + ], + [ + 13.384133236431516, + 52.50750267938178 + ], + [ + 13.384138898358453, + 52.50750193021643 + ], + [ + 13.384144560285389, + 52.507501181051076 + ], + [ + 13.384150222212327, + 52.507500431885724 + ], + [ + 13.384155884139263, + 52.50749968272037 + ], + [ + 13.384160807553926, + 52.50749915830463 + ], + [ + 13.384165730968586, + 52.50749863388889 + ], + [ + 13.384170654383249, + 52.507498109473154 + ], + [ + 13.384175577797912, + 52.507497585057415 + ], + [ + 13.384180501212574, + 52.507497060641676 + ], + [ + 13.384185424627237, + 52.507496536225936 + ], + [ + 13.38419527145656, + 52.50749548739446 + ], + [ + 13.384203641261369, + 52.507495187728026 + ], + [ + 13.384207826163774, + 52.50749503789481 + ], + [ + 13.384212011066177, + 52.5074948880616 + ], + [ + 13.38421619596858, + 52.50749473822839 + ], + [ + 13.384220380870985, + 52.507494588395176 + ], + [ + 13.384228750675794, + 52.50749428872874 + ], + [ + 13.384237612821927, + 52.50749428872874 + ], + [ + 13.384242043894995, + 52.50749428872874 + ], + [ + 13.384246474968062, + 52.50749428872874 + ], + [ + 13.38425090604113, + 52.50749428872874 + ], + [ + 13.384255337114197, + 52.50749428872874 + ], + [ + 13.384259768187263, + 52.50749428872874 + ], + [ + 13.38426419926033, + 52.50749428872874 + ], + [ + 13.384270107357946, + 52.50749398906264 + ], + [ + 13.384276015455562, + 52.507493689396526 + ], + [ + 13.384281923553178, + 52.50749338973041 + ], + [ + 13.384287831650795, + 52.50749309006431 + ], + [ + 13.384293739748411, + 52.5074927903982 + ], + [ + 13.384299647846028, + 52.50749249073209 + ], + [ + 13.384305555943644, + 52.50749219106598 + ], + [ + 13.384311464041259, + 52.50749189139987 + ], + [ + 13.384319341504725, + 52.50749054290186 + ], + [ + 13.38432721896819, + 52.50748919440386 + ], + [ + 13.384331157699922, + 52.50748852015486 + ], + [ + 13.384335096431656, + 52.50748784590586 + ], + [ + 13.384342973895121, + 52.50748649740785 + ], + [ + 13.384364226334235, + 52.50748649498627 + ], + [ + 13.38437485255379, + 52.507486493775474 + ], + [ + 13.384385478773348, + 52.50748649256469 + ], + [ + 13.384393148955954, + 52.50748559477688 + ], + [ + 13.384400819138563, + 52.507484696989074 + ], + [ + 13.384416159503777, + 52.50748290141346 + ], + [ + 13.384424124693652, + 52.50748236274066 + ], + [ + 13.384432089883525, + 52.50748182406785 + ], + [ + 13.384448020263273, + 52.507480746722244 + ], + [ + 13.384454510418063, + 52.507478592031205 + ], + [ + 13.384461000572852, + 52.507476437340166 + ], + [ + 13.38446749072764, + 52.50747428264913 + ], + [ + 13.384473980882431, + 52.50747212795809 + ], + [ + 13.384474128385747, + 52.50746871636338 + ], + [ + 13.384474275889065, + 52.50746530476867 + ], + [ + 13.384474570895698, + 52.50745848157925 + ], + [ + 13.384475160908964, + 52.50744483520041 + ], + [ + 13.384470440797829, + 52.50742328828121 + ], + [ + 13.384463950642989, + 52.507408923664585 + ], + [ + 13.38446070556557, + 52.507401741356276 + ], + [ + 13.384457460488148, + 52.50739455904796 + ], + [ + 13.384448610277808, + 52.507378039734036 + ], + [ + 13.384439760067467, + 52.50736152042011 + ], + [ + 13.384435039954964, + 52.507349669604515 + ], + [ + 13.38443031984246, + 52.50733781878892 + ], + [ + 13.384418519560615, + 52.50732848178083 + ], + [ + 13.38440671927877, + 52.507319144772744 + ], + [ + 13.384389018858085, + 52.507291851972745 + ], + [ + 13.384374858521943, + 52.50727245971651 + ], + [ + 13.384367778352667, + 52.50725234922398 + ], + [ + 13.384352437987387, + 52.50723223872743 + ], + [ + 13.384341227720077, + 52.50722397905759 + ], + [ + 13.384330017452767, + 52.50721571938775 + ], + [ + 13.384314677087618, + 52.50719848181408 + ], + [ + 13.384305236862742, + 52.50717765307375 + ], + [ + 13.384291076523995, + 52.50716041549342 + ], + [ + 13.38427219607411, + 52.5071345591164 + ], + [ + 13.384256855708896, + 52.50711803976072 + ], + [ + 13.384242695372885, + 52.50709649277167 + ], + [ + 13.38426511590731, + 52.50708715574161 + ], + [ + 13.384300516748935, + 52.50708715574161 + ], + [ + 13.384347262137217, + 52.507086481015364 + ], + [ + 13.384389018858085, + 52.50708643750864 + ], + [ + 13.384385578391806, + 52.507064901930875 + ], + [ + 13.38438788361979, + 52.50705290906545 + ], + [ + 13.384406290692153, + 52.507045816504665 + ], + [ + 13.384401048179827, + 52.507035354984524 + ], + [ + 13.384413920244176, + 52.50702489346439 + ], + [ + 13.384395594984577, + 52.50701994479128 + ], + [ + 13.384397397029515, + 52.50700519550069 + ], + [ + 13.384412765288761, + 52.50699333378806 + ], + [ + 13.384400322112795, + 52.50698862801008 + ], + [ + 13.384403980781265, + 52.50698024699794 + ], + [ + 13.38443976016389, + 52.506973068846825 + ], + [ + 13.38443100486968, + 52.50696092981299 + ], + [ + 13.384443770332986, + 52.50694976107136 + ], + [ + 13.384441523232375, + 52.50693675266926 + ], + [ + 13.384452029174135, + 52.50692616999686 + ], + [ + 13.384459745388178, + 52.5069129190209 + ], + [ + 13.384478620514793, + 52.5069059749455 + ], + [ + 13.384473362241943, + 52.50692069714985 + ], + [ + 13.384486218543552, + 52.50691704315445 + ], + [ + 13.384500081211252, + 52.50692135217909 + ], + [ + 13.384493816572311, + 52.50692811136341 + ], + [ + 13.384483300026554, + 52.50694040465201 + ], + [ + 13.384490898055313, + 52.50695269794061 + ], + [ + 13.384483400605157, + 52.50696529749837 + ], + [ + 13.384500055921686, + 52.50697667197717 + ], + [ + 13.38448048208816, + 52.50698620883937 + ], + [ + 13.384487073751396, + 52.50699942093573 + ], + [ + 13.384486872449445, + 52.50701110168451 + ], + [ + 13.384486671147494, + 52.50702278243329 + ], + [ + 13.384479425288363, + 52.507034463182066 + ], + [ + 13.384486268543592, + 52.50704614393085 + ], + [ + 13.384482041781043, + 52.507059049755604 + ], + [ + 13.384463725904078, + 52.507069505428404 + ], + [ + 13.384480632810964, + 52.50708118617719 + ], + [ + 13.384467348761271, + 52.507092866925966 + ], + [ + 13.384465720683957, + 52.50711875799343 + ], + [ + 13.384444480178535, + 52.50711373036358 + ], + [ + 13.384423239673117, + 52.507109420965456 + ], + [ + 13.384400819138628, + 52.50710654803358 + ], + [ + 13.384377218577542, + 52.50710439333515 + ], + [ + 13.38433473756397, + 52.507102956868756 + ], + [ + 13.384305236862742, + 52.50710367510158 + ], + [ + 13.384281636299052, + 52.50710654803358 + ], + [ + 13.384286356412728, + 52.50711803976072 + ], + [ + 13.384320577227891, + 52.5071237856238 + ], + [ + 13.38434063770424, + 52.50712091269232 + ], + [ + 13.384360698183192, + 52.50711947622691 + ], + [ + 13.384389018858085, + 52.507123067391156 + ], + [ + 13.384417339532847, + 52.50712594032256 + ], + [ + 13.384444480178535, + 52.50712881325391 + ], + [ + 13.384465720683957, + 52.507133122650465 + ], + [ + 13.384453920403478, + 52.50714964200362 + ], + [ + 13.384419699588511, + 52.50714389614203 + ], + [ + 13.384392558942691, + 52.50714245967702 + ], + [ + 13.384370138408203, + 52.507139586746 + ], + [ + 13.384346743651347, + 52.50713569909404 + ], + [ + 13.38432006936476, + 52.50713671381251 + ], + [ + 13.384298396507353, + 52.507133669655964 + ], + [ + 13.384303397936664, + 52.507148890437016 + ], + [ + 13.384325904364376, + 52.50714990515534 + ], + [ + 13.38434424293679, + 52.50715041251508 + ], + [ + 13.384368416508755, + 52.50715294931148 + ], + [ + 13.384385921509173, + 52.507154978748126 + ], + [ + 13.384415096510322, + 52.507156500826135 + ], + [ + 13.38444343793934, + 52.50715853026383 + ], + [ + 13.38446677794107, + 52.50716157441861 + ], + [ + 13.384463443654317, + 52.50717273632187 + ], + [ + 13.384436769367726, + 52.50717172160373 + ], + [ + 13.384400925794834, + 52.507169692166364 + ], + [ + 13.384376752222932, + 52.50716766273005 + ], + [ + 13.384350911508468, + 52.50716563329255 + ], + [ + 13.38433090579356, + 52.50716563329255 + ], + [ + 13.384315901507767, + 52.50716563329255 + ], + [ + 13.384333406508118, + 52.50717831727311 + ], + [ + 13.384360080794709, + 52.50717983935072 + ], + [ + 13.384379252937427, + 52.50717983935072 + ], + [ + 13.384400925794834, + 52.50717983935072 + ], + [ + 13.384416763652686, + 52.507180854068714 + ], + [ + 13.384445105081776, + 52.50718186878678 + ], + [ + 13.384465944368875, + 52.507184912942016 + ], + [ + 13.384475113655116, + 52.507195567483244 + ], + [ + 13.38444343793934, + 52.50720368522834 + ], + [ + 13.384415096510322, + 52.507198611638024 + ], + [ + 13.384371750795571, + 52.507194552765306 + ], + [ + 13.384346743651347, + 52.50719353804627 + ], + [ + 13.384368538724472, + 52.507205755367075 + ], + [ + 13.384390333797596, + 52.507217972687876 + ], + [ + 13.384420610204847, + 52.50721881032141 + ], + [ + 13.384450886612099, + 52.50721964795495 + ], + [ + 13.384457907026036, + 52.50724273738132 + ], + [ + 13.384461417233004, + 52.5072542820945 + ], + [ + 13.384464927439971, + 52.50726582680768 + ], + [ + 13.384472966291122, + 52.507276758985775 + ], + [ + 13.384481005142273, + 52.50728769116387 + ], + [ + 13.384489043993426, + 52.50729862334196 + ], + [ + 13.384497082844577, + 52.50730955552005 + ], + [ + 13.38449782554753, + 52.50732110023287 + ], + [ + 13.384498568250486, + 52.50733264494569 + ], + [ + 13.384514142768591, + 52.50735512183632 + ], + [ + 13.384525955489876, + 52.50736574774825 + ], + [ + 13.384531730018935, + 52.50737698619389 + ], + [ + 13.384537504547996, + 52.50738822463953 + ], + [ + 13.384543279077056, + 52.507399463085164 + ], + [ + 13.384549053606115, + 52.5074107015308 + ], + [ + 13.384554828135176, + 52.50742193997644 + ], + [ + 13.384557715399705, + 52.50742755919926 + ], + [ + 13.384560602664235, + 52.507433178422076 + ], + [ + 13.384563489928766, + 52.507438797644895 + ], + [ + 13.384566377193295, + 52.50744441686772 + ], + [ + 13.384569264457824, + 52.507450036090546 + ], + [ + 13.384572151722354, + 52.507455655313365 + ], + [ + 13.384575038986885, + 52.50746127453618 + ], + [ + 13.384577926251414, + 52.507466893759 + ], + [ + 13.384580813515944, + 52.50747251298182 + ], + [ + 13.384583700780475, + 52.50747813220464 + ], + [ + 13.384589475309534, + 52.507489370650276 + ], + [ + 13.384595249838593, + 52.50750060909591 + ], + [ + 13.384598137103124, + 52.50750622831873 + ], + [ + 13.384601024367655, + 52.50751184754155 + ], + [ + 13.384603911632183, + 52.50751746676437 + ], + [ + 13.384606798896714, + 52.50752308598719 + ], + [ + 13.384612573425773, + 52.50753432443283 + ], + [ + 13.384615460690302, + 52.50753994365566 + ], + [ + 13.384618347954833, + 52.50754556287848 + ], + [ + 13.384621235219363, + 52.507551182101295 + ], + [ + 13.384624122483892, + 52.507556801324114 + ], + [ + 13.384629897012953, + 52.50756803976975 + ], + [ + 13.384632784277482, + 52.50757365899257 + ], + [ + 13.384635671542013, + 52.50757927821539 + ], + [ + 13.384614431603357, + 52.50757709052226 + ], + [ + 13.384603811634028, + 52.5075759966757 + ], + [ + 13.384593191664699, + 52.50757490282913 + ], + [ + 13.38458257169537, + 52.507573808982556 + ], + [ + 13.384571951726041, + 52.50757271513599 + ], + [ + 13.384550711787384, + 52.507570527442866 + ], + [ + 13.384529471848726, + 52.50756833974974 + ], + [ + 13.384508231910068, + 52.50756615205661 + ], + [ + 13.38448699197141, + 52.507563964363484 + ], + [ + 13.384465752032753, + 52.50756177667035 + ], + [ + 13.384444512094095, + 52.507559588977216 + ], + [ + 13.384433892124767, + 52.50755849513065 + ], + [ + 13.384423272155438, + 52.50755740128409 + ], + [ + 13.38440203221678, + 52.50755521359096 + ], + [ + 13.384380792278124, + 52.507553025897835 + ], + [ + 13.384370172308795, + 52.50755193205127 + ], + [ + 13.384359552339468, + 52.50755083820471 + ], + [ + 13.38433831240081, + 52.50754865051157 + ], + [ + 13.384317072462153, + 52.50754646281844 + ], + [ + 13.384295832523495, + 52.50754427512531 + ], + [ + 13.384274592584838, + 52.507542087432185 + ], + [ + 13.384263972615509, + 52.50754099358562 + ], + [ + 13.38425335264618, + 52.50753989973906 + ], + [ + 13.384242732676851, + 52.507538805892494 + ], + [ + 13.384232112707522, + 52.50753771204593 + ], + [ + 13.384221492738195, + 52.50753661819937 + ], + [ + 13.384210872768866, + 52.5075355243528 + ], + [ + 13.384200252799538, + 52.507534430506226 + ], + [ + 13.38418963283021, + 52.50753333665966 + ], + [ + 13.384179012860882, + 52.5075322428131 + ], + [ + 13.384168392891553, + 52.507531148966535 + ], + [ + 13.384157772922224, + 52.50753005511997 + ], + [ + 13.384147152952895, + 52.50752896127341 + ], + [ + 13.38414184296823, + 52.507528414350126 + ], + [ + 13.384136532983566, + 52.507527867426845 + ], + [ + 13.384131222998903, + 52.50752732050356 + ], + [ + 13.384125913014238, + 52.50752677358028 + ], + [ + 13.384120603029572, + 52.507526226657 + ], + [ + 13.384115293044909, + 52.50752567973372 + ], + [ + 13.384109983060245, + 52.507525132810436 + ], + [ + 13.38410467307558, + 52.507524585887154 + ], + [ + 13.384099363090915, + 52.50752403896387 + ], + [ + 13.384096708098582, + 52.50752376550223 + ], + [ + 13.384094053106251, + 52.50752349204059 + ], + [ + 13.384083433136922, + 52.50752239819402 + ], + [ + 13.384078123152257, + 52.50752185127074 + ], + [ + 13.384072813167593, + 52.50752130434745 + ], + [ + 13.38406750318293, + 52.50752075742417 + ], + [ + 13.384062193198265, + 52.507520210500886 + ], + [ + 13.384040953259607, + 52.50751802280776 + ], + [ + 13.384030584881538, + 52.50751907282168 + ], + [ + 13.384020216503469, + 52.5075201228356 + ], + [ + 13.383999479747331, + 52.50752222286344 + ], + [ + 13.383994043967036, + 52.50752060400992 + ], + [ + 13.383988608186742, + 52.507518985156395 + ], + [ + 13.383983172406449, + 52.50751736630287 + ], + [ + 13.383977736626154, + 52.50751574744935 + ], + [ + 13.38397230084586, + 52.50751412859582 + ], + [ + 13.383966865065567, + 52.5075125097423 + ], + [ + 13.383961429285272, + 52.50751089088877 + ], + [ + 13.383955993504978, + 52.50750927203524 + ] + ] + ], + "type": "Polygon" + } + } + ] +} \ No newline at end of file diff --git a/tests/utils/datatype_tests.py b/tests/utils/datatype_tests.py index d9378f870ab..631eaddadae 100644 --- a/tests/utils/datatype_tests.py +++ b/tests/utils/datatype_tests.py @@ -15,10 +15,11 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . """ - +import json from arches.app.datatypes.datatypes import DataTypeFactory from arches.app.models.models import Language from arches.app.models.tile import Tile +from arches.app.models.system_settings import settings from tests.base_test import ArchesTestCase @@ -55,6 +56,50 @@ def test_tile_transform(self): with self.assertRaises(ValueError): boolean.transform_value_for_tile(None) +class GeoJsonDataTypeTest(ArchesTestCase): + + def test_validate_reduce_byte_size(self): + f = open("tests/fixtures/problematic_excessive_vertices.geojson") + geom = json.load(f) + geom_datatype = DataTypeFactory().get_instance("geojson-feature-collection") + errors = geom_datatype.validate(geom) + self.assertEqual(len(errors), 0) + + + def test_validate_bbox(self): + settings.DATA_VALIDATION_BBOX = [( + 12.948801570473677, + 52.666192057898854 + ), + ( + 12.948801570473677, + 52.26439571958821 + ), + ( + 13.87818788958171, + 52.26439571958821 + ), + ( + 13.87818788958171, + 52.666192057898854 + ), + ( + 12.948801570473677, + 52.666192057898854 + )] + + geom_datatype = DataTypeFactory().get_instance("geojson-feature-collection") + + with self.subTest(): + geom = json.loads('{"type": "FeatureCollection","features": [{"type": "Feature","properties": {},"geometry": {"coordinates": [14.073244400935238,19.967099711627156],"type": "Point"}}]}') + errors = geom_datatype.validate(geom) + self.assertEqual(len(errors), 1) + + with self.subTest(): + geom = json.loads('{"type": "FeatureCollection","features": [{"type": "Feature","properties": {},"geometry": {"coordinates": [13.400257324930152,52.50578474077699],"type": "Point"}}]}') + errors = geom_datatype.validate(geom) + self.assertEqual(len(errors), 0) + class StringDataTypeTests(ArchesTestCase): def test_string_validate(self): From 16063497957df0dbd898d5288223c83e1ba36c2e Mon Sep 17 00:00:00 2001 From: Ryan Anderson Date: Tue, 14 May 2024 13:16:45 -0700 Subject: [PATCH 190/242] Reposnd to comments on PR --- arches/app/datatypes/datatypes.py | 2 +- tests/utils/datatype_tests.py | 69 ++++++++++++++++--------------- 2 files changed, 37 insertions(+), 34 deletions(-) diff --git a/arches/app/datatypes/datatypes.py b/arches/app/datatypes/datatypes.py index 0da730e5505..a481a730150 100644 --- a/arches/app/datatypes/datatypes.py +++ b/arches/app/datatypes/datatypes.py @@ -1043,7 +1043,7 @@ def update(self, tile, data, nodeid=None, action=None): return updated_data def find_num(self, current_item): - if len(current_item) and type(current_item[0]) == float: + if len(current_item) and isinstance(current_item[0], float): return decimal.Decimal(str(current_item[0])).as_tuple().exponent else: return self.find_num(current_item[0]) diff --git a/tests/utils/datatype_tests.py b/tests/utils/datatype_tests.py index 631eaddadae..6d82d810001 100644 --- a/tests/utils/datatype_tests.py +++ b/tests/utils/datatype_tests.py @@ -20,7 +20,8 @@ from arches.app.models.models import Language from arches.app.models.tile import Tile from arches.app.models.system_settings import settings -from tests.base_test import ArchesTestCase +from tests.base_test import ArchesTestCase, sync_overridden_test_settings_to_arches +from django.test import override_settings # these tests can be run from the command line via @@ -59,46 +60,48 @@ def test_tile_transform(self): class GeoJsonDataTypeTest(ArchesTestCase): def test_validate_reduce_byte_size(self): - f = open("tests/fixtures/problematic_excessive_vertices.geojson") - geom = json.load(f) + with open("tests/fixtures/problematic_excessive_vertices.geojson") as f: + geom = json.load(f) geom_datatype = DataTypeFactory().get_instance("geojson-feature-collection") errors = geom_datatype.validate(geom) self.assertEqual(len(errors), 0) + @override_settings( + DATA_VALIDATION_BBOX = [( + 12.948801570473677, + 52.666192057898854 + ), + ( + 12.948801570473677, + 52.26439571958821 + ), + ( + 13.87818788958171, + 52.26439571958821 + ), + ( + 13.87818788958171, + 52.666192057898854 + ), + ( + 12.948801570473677, + 52.666192057898854 + )] + ) def test_validate_bbox(self): - settings.DATA_VALIDATION_BBOX = [( - 12.948801570473677, - 52.666192057898854 - ), - ( - 12.948801570473677, - 52.26439571958821 - ), - ( - 13.87818788958171, - 52.26439571958821 - ), - ( - 13.87818788958171, - 52.666192057898854 - ), - ( - 12.948801570473677, - 52.666192057898854 - )] + with sync_overridden_test_settings_to_arches(): + geom_datatype = DataTypeFactory().get_instance("geojson-feature-collection") - geom_datatype = DataTypeFactory().get_instance("geojson-feature-collection") - - with self.subTest(): - geom = json.loads('{"type": "FeatureCollection","features": [{"type": "Feature","properties": {},"geometry": {"coordinates": [14.073244400935238,19.967099711627156],"type": "Point"}}]}') - errors = geom_datatype.validate(geom) - self.assertEqual(len(errors), 1) + with self.subTest(bbox="invalid"): + geom = json.loads('{"type": "FeatureCollection","features": [{"type": "Feature","properties": {},"geometry": {"coordinates": [14.073244400935238,19.967099711627156],"type": "Point"}}]}') + errors = geom_datatype.validate(geom) + self.assertEqual(len(errors), 1) - with self.subTest(): - geom = json.loads('{"type": "FeatureCollection","features": [{"type": "Feature","properties": {},"geometry": {"coordinates": [13.400257324930152,52.50578474077699],"type": "Point"}}]}') - errors = geom_datatype.validate(geom) - self.assertEqual(len(errors), 0) + with self.subTest(bbox="valid"): + geom = json.loads('{"type": "FeatureCollection","features": [{"type": "Feature","properties": {},"geometry": {"coordinates": [13.400257324930152,52.50578474077699],"type": "Point"}}]}') + errors = geom_datatype.validate(geom) + self.assertEqual(len(errors), 0) class StringDataTypeTests(ArchesTestCase): From b6d3ed40417308f578f9a96cb38a936eb6ba865a Mon Sep 17 00:00:00 2001 From: Ryan Anderson Date: Tue, 14 May 2024 14:48:22 -0700 Subject: [PATCH 191/242] Set lower bound to precision reduction to 5 --- arches/app/utils/geo_utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arches/app/utils/geo_utils.py b/arches/app/utils/geo_utils.py index 88660d9ef58..a99df2a79c3 100644 --- a/arches/app/utils/geo_utils.py +++ b/arches/app/utils/geo_utils.py @@ -83,7 +83,7 @@ def convert_geos_geom_collection_to_feature_collection(self, geometry): return arches_geojson def reduce_precision(self, geom, current_precision): - if current_precision > 0: + if current_precision > 5: writer = WKTWriter() max_bytes = 32766 # max bytes allowed by Lucene From a92c7873f60d61b7711af81210f72b6498afd8bd Mon Sep 17 00:00:00 2001 From: Ryan Anderson Date: Tue, 14 May 2024 21:26:02 -0700 Subject: [PATCH 192/242] Respond to comments on PR --- arches/app/datatypes/datatypes.py | 27 +++++++++++++-------------- arches/app/utils/geo_utils.py | 17 +++++++++++------ 2 files changed, 24 insertions(+), 20 deletions(-) diff --git a/arches/app/datatypes/datatypes.py b/arches/app/datatypes/datatypes.py index a481a730150..d33bbeae629 100644 --- a/arches/app/datatypes/datatypes.py +++ b/arches/app/datatypes/datatypes.py @@ -913,21 +913,23 @@ def default_es_mapping(self): class GeojsonFeatureCollectionDataType(BaseDataType): + def __init__(self, model=None): + super(GeojsonFeatureCollectionDataType, self).__init__(model=model) + self.geo_utils = GeoUtils() + def validate(self, value, row_number=None, source=None, node=None, nodeid=None, strict=False, **kwargs): errors = [] - geo_utils = GeoUtils() max_bytes = 32766 # max bytes allowed by Lucene byte_count = 0 byte_count += len(str(value).encode("UTF-8")) - def validate_geom_byte_size_can_be_reduced(geom): + def validate_geom_byte_size_can_be_reduced(feature_collection): try: - if len(geom['features']) > 0: - feature_geom = GEOSGeometry(JSONSerializer().serialize(geom['features'][0]['geometry'])) + if len(feature_collection['features']) > 0: + feature_geom = GEOSGeometry(JSONSerializer().serialize(feature_collection['features'][0]['geometry'])) current_precision = abs(self.find_num(feature_geom.coords)) - - geom = geo_utils.reduce_precision(geom, current_precision) - except: + feature_collection = self.geo_utils.reduce_precision(feature_collection, current_precision) + except Exception as e: message = _("Geojson byte size exceeds Lucene 32766 limit.") title = _("Geometry Size Exceeds Elasticsearch Limit") errors.append( @@ -997,9 +999,8 @@ def clean(self, tile, nodeid): tile.data[nodeid] = None def transform_value_for_tile(self, value, **kwargs): - geo_utils = GeoUtils() if "format" in kwargs and kwargs["format"] == "esrijson": - arches_geojson = geo_utils.arcgisjson_to_geojson(value) + arches_geojson = self.geo_utils.arcgisjson_to_geojson(value) else: try: geojson = json.loads(value) @@ -1013,7 +1014,7 @@ def transform_value_for_tile(self, value, **kwargs): try: geometry = GEOSGeometry(value, srid=4326) if geometry.geom_type == "GeometryCollection": - arches_geojson = geo_utils.convert_geos_geom_collection_to_feature_collection(geometry) + arches_geojson = self.geo_utils.convert_geos_geom_collection_to_feature_collection(geometry) else: arches_geojson = {} arches_geojson["type"] = "FeatureCollection" @@ -1049,7 +1050,6 @@ def find_num(self, current_item): return self.find_num(current_item[0]) def append_to_document(self, document, nodevalue, nodeid, tile, provisional=False): - geo_utils = GeoUtils() max_bytes = 32766 # max bytes allowed by Lucene byte_count = 0 byte_count += len(str(nodevalue).encode("UTF-8")) @@ -1059,9 +1059,8 @@ def append_to_document(self, document, nodevalue, nodeid, tile, provisional=Fals current_precision = abs(self.find_num(feature_geom.coords)) if byte_count > max_bytes and current_precision: - nodevalue = geo_utils.reduce_precision(nodevalue, current_precision) - - + nodevalue = self.geo_utils.reduce_precision(nodevalue, current_precision) + document["geometries"].append({"geom": nodevalue, "nodegroup_id": tile.nodegroup_id, "provisional": provisional, "tileid": tile.pk}) bounds = self.get_bounds_from_value(nodevalue) if bounds is not None: diff --git a/arches/app/utils/geo_utils.py b/arches/app/utils/geo_utils.py index a99df2a79c3..aabb7107fee 100644 --- a/arches/app/utils/geo_utils.py +++ b/arches/app/utils/geo_utils.py @@ -89,13 +89,18 @@ def reduce_precision(self, geom, current_precision): current_precision -= 1 writer.precision = current_precision - less_precise_geom = writer.write(GEOSGeometry(self.create_geom_collection_from_geojson(geom))) - new_byte_count = len(str(less_precise_geom).encode("UTF-8")) - new_geom_collection = self.convert_geos_geom_collection_to_feature_collection(GEOSGeometry(less_precise_geom)) + less_precise_geom_collection = writer.write(GEOSGeometry(self.create_geom_collection_from_geojson(geom))) + new_byte_count = len(str(less_precise_geom_collection).encode("UTF-8")) + new_geos_geom_collection = GEOSGeometry(less_precise_geom_collection) + if new_geos_geom_collection.valid: + new_feature_collection = self.convert_geos_geom_collection_to_feature_collection(new_geos_geom_collection) + else: + raise Exception('Geometry is not valid after reducing precision') + if new_byte_count > max_bytes: - return self.reduce_precision(new_geom_collection, current_precision) + return self.reduce_precision(new_feature_collection, current_precision) else: - return new_geom_collection + return new_feature_collection else: - raise Exception('Geometry still too large after reducing to 0 precision.') + raise Exception('Geometry still too large after reducing to 5 precision.') From 24c848162bda3ee889f5cca1b038545ecced96f9 Mon Sep 17 00:00:00 2001 From: Ryan Anderson Date: Tue, 14 May 2024 21:27:15 -0700 Subject: [PATCH 193/242] nit --- tests/utils/datatype_tests.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/utils/datatype_tests.py b/tests/utils/datatype_tests.py index 6d82d810001..7d0c2c902f3 100644 --- a/tests/utils/datatype_tests.py +++ b/tests/utils/datatype_tests.py @@ -66,7 +66,6 @@ def test_validate_reduce_byte_size(self): errors = geom_datatype.validate(geom) self.assertEqual(len(errors), 0) - @override_settings( DATA_VALIDATION_BBOX = [( 12.948801570473677, From d65a30e8a02aaad39e093bb323044090ba7ac5fb Mon Sep 17 00:00:00 2001 From: Ryan Anderson Date: Wed, 15 May 2024 11:12:42 -0700 Subject: [PATCH 194/242] Add named error to geoutils/datatypes --- arches/app/datatypes/datatypes.py | 2 +- arches/app/utils/geo_utils.py | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/arches/app/datatypes/datatypes.py b/arches/app/datatypes/datatypes.py index d33bbeae629..bbe4211d5d1 100644 --- a/arches/app/datatypes/datatypes.py +++ b/arches/app/datatypes/datatypes.py @@ -929,7 +929,7 @@ def validate_geom_byte_size_can_be_reduced(feature_collection): feature_geom = GEOSGeometry(JSONSerializer().serialize(feature_collection['features'][0]['geometry'])) current_precision = abs(self.find_num(feature_geom.coords)) feature_collection = self.geo_utils.reduce_precision(feature_collection, current_precision) - except Exception as e: + except ValueError: message = _("Geojson byte size exceeds Lucene 32766 limit.") title = _("Geometry Size Exceeds Elasticsearch Limit") errors.append( diff --git a/arches/app/utils/geo_utils.py b/arches/app/utils/geo_utils.py index aabb7107fee..f950fb75464 100644 --- a/arches/app/utils/geo_utils.py +++ b/arches/app/utils/geo_utils.py @@ -95,12 +95,11 @@ def reduce_precision(self, geom, current_precision): if new_geos_geom_collection.valid: new_feature_collection = self.convert_geos_geom_collection_to_feature_collection(new_geos_geom_collection) else: - raise Exception('Geometry is not valid after reducing precision') - + raise ValueError('Geometry is not valid after reducing precision.') if new_byte_count > max_bytes: return self.reduce_precision(new_feature_collection, current_precision) else: return new_feature_collection else: - raise Exception('Geometry still too large after reducing to 5 precision.') + raise ValueError('Geometry still too large after reducing to 5 precision.') From aa155a18061fae5baba129c2988e92f5ca655a9c Mon Sep 17 00:00:00 2001 From: Cyrus Hiatt Date: Wed, 15 May 2024 17:15:39 -0700 Subject: [PATCH 195/242] nit --- arches/app/datatypes/datatypes.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/arches/app/datatypes/datatypes.py b/arches/app/datatypes/datatypes.py index bbe4211d5d1..c5e363b7830 100644 --- a/arches/app/datatypes/datatypes.py +++ b/arches/app/datatypes/datatypes.py @@ -1044,10 +1044,10 @@ def update(self, tile, data, nodeid=None, action=None): return updated_data def find_num(self, current_item): - if len(current_item) and isinstance(current_item[0], float): - return decimal.Decimal(str(current_item[0])).as_tuple().exponent - else: - return self.find_num(current_item[0]) + if len(current_item) and isinstance(current_item[0], float): + return decimal.Decimal(str(current_item[0])).as_tuple().exponent + else: + return self.find_num(current_item[0]) def append_to_document(self, document, nodevalue, nodeid, tile, provisional=False): max_bytes = 32766 # max bytes allowed by Lucene From 8d0ec6ba70dc959e259a6ff8ae7ef604132f584d Mon Sep 17 00:00:00 2001 From: Cyrus Hiatt Date: Wed, 15 May 2024 17:16:12 -0700 Subject: [PATCH 196/242] Check if all geoms are valid --- arches/app/datatypes/datatypes.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/arches/app/datatypes/datatypes.py b/arches/app/datatypes/datatypes.py index c5e363b7830..aee304aa380 100644 --- a/arches/app/datatypes/datatypes.py +++ b/arches/app/datatypes/datatypes.py @@ -980,9 +980,12 @@ def validate_geom_bbox(geom): for feature in value["features"]: try: geom = GEOSGeometry(JSONSerializer().serialize(feature["geometry"])) - validate_geom_bbox(geom) + if geom.valid: + validate_geom_bbox(geom) + else: + raise Exception except Exception: - message = _("Unable to serialize some geometry features") + message = _("Unable to serialize some geometry features.") title = _("Unable to Serialize Geometry") error_message = self.create_error_message(value, source, row_number, message, title) errors.append(error_message) From 7d1858b90cb67a0f1101d441a9ef2e3657478d8c Mon Sep 17 00:00:00 2001 From: Cyrus Hiatt Date: Wed, 15 May 2024 17:16:33 -0700 Subject: [PATCH 197/242] nit --- arches/app/utils/geo_utils.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/arches/app/utils/geo_utils.py b/arches/app/utils/geo_utils.py index f950fb75464..e23fa3f3f40 100644 --- a/arches/app/utils/geo_utils.py +++ b/arches/app/utils/geo_utils.py @@ -86,7 +86,6 @@ def reduce_precision(self, geom, current_precision): if current_precision > 5: writer = WKTWriter() max_bytes = 32766 # max bytes allowed by Lucene - current_precision -= 1 writer.precision = current_precision less_precise_geom_collection = writer.write(GEOSGeometry(self.create_geom_collection_from_geojson(geom))) @@ -101,5 +100,5 @@ def reduce_precision(self, geom, current_precision): else: return new_feature_collection else: - raise ValueError('Geometry still too large after reducing to 5 precision.') + raise ValueError('Geometry still too large after reducing precision to 5 places after the decimal.') From 7b35592bc49b1c09c4a3e2d6b5bc49dda096c19f Mon Sep 17 00:00:00 2001 From: Jacob Walls Date: Thu, 16 May 2024 11:35:47 -0400 Subject: [PATCH 198/242] Handle missing ontology in JSON-LD api response (#10661) --- arches/app/views/api.py | 11 +++++++++-- releases/7.6.0.md | 1 + tests/views/api_tests.py | 17 +++++++++++++++++ 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/arches/app/views/api.py b/arches/app/views/api.py index 1c2b4ef6f34..6ddc99a2314 100644 --- a/arches/app/views/api.py +++ b/arches/app/views/api.py @@ -542,12 +542,19 @@ def get(self, request, resourceid=None, slug=None, graphid=None): elif format == "json-ld": try: - models.ResourceInstance.objects.get(pk=resourceid) # check for existance + resource = models.ResourceInstance.objects.select_related("graph").get(pk=resourceid) + if not resource.graph.ontology_id: + return JSONErrorResponse( + message=_( + "The graph '{0}' does not have an ontology. JSON-LD requires one." + ).format(resource.graph.name), + status=400, + ) exporter = ResourceExporter(format=format) output = exporter.writer.write_resources(resourceinstanceids=[resourceid], indent=indent, user=request.user) out = output[0]["outputfile"].getvalue() except models.ResourceInstance.DoesNotExist: - logger.error(_("The specified resource '{0}' does not exist. JSON-LD export failed.".format(resourceid))) + logger.error(_("The specified resource '{0}' does not exist. JSON-LD export failed.").format(resourceid)) return JSONResponse(status=404) else: diff --git a/releases/7.6.0.md b/releases/7.6.0.md index 31770298131..ed9ef46d695 100644 --- a/releases/7.6.0.md +++ b/releases/7.6.0.md @@ -23,6 +23,7 @@ Arches 7.6.0 Release Notes - 10757 moves `node_modules` and `webpack` directories to root - 10558 Combine templates for Arches project and applications and move several dotfiles to root - 10490 Fixes an issue where webpack receives multiple build calls when running in a container +- Handle missing ontologies in JSON-LD api response - 10710 Workflow history API: return 400 (instead of 401) for attempts to update completed workflows - 9768 Filter out tiles created during resource creation from activity stream API - 9769 Ensure resource creation edit log timestamps precede resource update timestamps diff --git a/tests/views/api_tests.py b/tests/views/api_tests.py index ff9ee36732e..b1454fb653b 100644 --- a/tests/views/api_tests.py +++ b/tests/views/api_tests.py @@ -66,6 +66,11 @@ def setUpClass(cls): cls.phase_type_assignment_graph.publish(user=None) cls.phase_type_assignment_graph.save() + cls.data_type_graph = Graph.objects.get(name="Data Type Testing Model") + cls.test_prj_user = ( + models.ResourceInstance.objects.filter(graph=cls.data_type_graph).first() + ) + def get_tile_by_id(self, tileid, tiles): for tile in tiles: if tile["tileid"] == tileid: @@ -389,3 +394,15 @@ def test_api_resources_archesjson(self): # ==Assert========================================================================================== self.assertTrue("Resource matching query does not exist." in str(context_del.exception)) # Check exception message. # ================================================================================================== + + def test_get_resource_jsonld_invalid_no_ontology(self): + # Bypass validation in .save() + Graph.objects.filter(pk=self.data_type_graph.pk).update(ontology=None) + + with self.assertLogs("django.request", level="WARNING"): + response = self.client.get( + reverse("resources", kwargs={"resourceid": str(self.test_prj_user.pk)}) + + "?format=json-ld" + ) + + self.assertEqual(response.status_code, 400) From 80951ad8856c5dd80612ad36d667d259be111ffb Mon Sep 17 00:00:00 2001 From: Cyrus Hiatt Date: Wed, 15 May 2024 15:46:52 -0700 Subject: [PATCH 199/242] Allow zoom constraints on node map source, #10929 --- arches/app/datatypes/base.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/arches/app/datatypes/base.py b/arches/app/datatypes/base.py index 329ec733d38..13f1ba88676 100644 --- a/arches/app/datatypes/base.py +++ b/arches/app/datatypes/base.py @@ -109,6 +109,11 @@ def get_map_source(self, node=None, preview=False): if node is None: return None source_config = {"type": "vector", "tiles": [tileserver_url]} + node_config = json.loads(node.config.value) + for prop in ("minzoom", "maxzoom"): + if prop in node_config: + source_config[prop] = node_config[prop] + count = None if preview == True: count = models.TileModel.objects.filter(nodegroup_id=node.nodegroup_id, data__has_key=str(node.nodeid)).count() From 01e639b5fca46296133fe236e80bb7d28e002756 Mon Sep 17 00:00:00 2001 From: Jacob Walls Date: Thu, 16 May 2024 11:59:38 -0400 Subject: [PATCH 200/242] Update comment --- arches/app/src/declarations.d.ts | 2 +- .../arches-templates/project_name/src/declarations.d.ts | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/arches/app/src/declarations.d.ts b/arches/app/src/declarations.d.ts index 76e1629b2b2..3e511106c58 100644 --- a/arches/app/src/declarations.d.ts +++ b/arches/app/src/declarations.d.ts @@ -1,6 +1,6 @@ // import declarations from other projects or Arches core -// declare modules that have been added to your project (should mirror `package.json`) +// declare untyped modules that have been added to your project in `package.json` declare module 'arches'; declare module "@babel/runtime"; declare module "@mapbox/geojsonhint"; diff --git a/arches/install/arches-templates/project_name/src/declarations.d.ts b/arches/install/arches-templates/project_name/src/declarations.d.ts index ebedbf32c89..d9f471356b4 100644 --- a/arches/install/arches-templates/project_name/src/declarations.d.ts +++ b/arches/install/arches-templates/project_name/src/declarations.d.ts @@ -1,7 +1,8 @@ // import declarations from other projects or Arches core import('../../node_modules/arches/arches/app/src/declarations.d.ts'); -// declare modules that have been added to your project (should mirror `package.json`) +// declare untyped modules that have been added to your project in `package.json` +// Module homepage on npmjs.com uses logos "TS" or "DT" to indicate if typed declare module 'arches'; // declare filetypes used in `./src/` folder From ea2d4126a29df94b63532fdacae57644dd82480f Mon Sep 17 00:00:00 2001 From: Cyrus Hiatt Date: Thu, 16 May 2024 11:07:22 -0700 Subject: [PATCH 201/242] Test get_map_source datatype method, #10929 --- tests/utils/datatype_tests.py | 43 ++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/tests/utils/datatype_tests.py b/tests/utils/datatype_tests.py index 70748de82cf..77f69dc4334 100644 --- a/tests/utils/datatype_tests.py +++ b/tests/utils/datatype_tests.py @@ -17,13 +17,17 @@ """ import json +import os import uuid from arches.app.datatypes.base import BaseDataType from arches.app.datatypes.datatypes import DataTypeFactory +from arches.app.models import models from arches.app.models.models import Language from arches.app.models.tile import Tile -from arches.app.models.system_settings import settings +from arches.app.utils.betterJSONSerializer import JSONDeserializer +from arches.app.utils.data_management.resource_graphs.importer import import_graph as resource_graph_importer +from arches.app.utils.i18n import LanguageSynchronizer from tests.base_test import ArchesTestCase, sync_overridden_test_settings_to_arches from django.test import override_settings @@ -63,6 +67,22 @@ def test_tile_transform(self): class GeoJsonDataTypeTest(ArchesTestCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + LanguageSynchronizer.synchronize_settings_with_db() + + with open(os.path.join("tests/fixtures/resource_graphs/Resource Test Model.json"), "r") as f: + archesfile = JSONDeserializer().deserialize(f) + + resource_graph_importer(archesfile["graph"]) + cls.search_model_graphid = uuid.UUID("c9b37a14-17b3-11eb-a708-acde48001122") + + @classmethod + def tearDownClass(cls): + models.GraphModel.objects.filter(pk=cls.search_model_graphid).delete() + super().tearDownClass() + def test_validate_reduce_byte_size(self): with open("tests/fixtures/problematic_excessive_vertices.geojson") as f: geom = json.load(f) @@ -105,6 +125,27 @@ def test_validate_bbox(self): geom = json.loads('{"type": "FeatureCollection","features": [{"type": "Feature","properties": {},"geometry": {"coordinates": [13.400257324930152,52.50578474077699],"type": "Point"}}]}') errors = geom_datatype.validate(geom) self.assertEqual(len(errors), 0) + + def test_get_map_source(self): + geom_datatype = DataTypeFactory().get_instance("geojson-feature-collection") + node = models.Node.objects.get(pk='c9b37f96-17b3-11eb-a708-acde48001122') + nodeconfig = json.loads(node.config.value) + nodeconfig["minzoom"] = 12 + nodeconfig["maxzoom"] = 15 + node.config.value = json.dumps(nodeconfig) + node.save() + result = geom_datatype.get_map_source(node) + map_source = json.loads(result["source"]) + + with self.subTest(input=result): + self.assertEqual(result["name"], 'resources-c9b37f96-17b3-11eb-a708-acde48001122') + + with self.subTest(input=map_source): + self.assertEqual(map_source["tiles"][0], "/mvt/c9b37f96-17b3-11eb-a708-acde48001122/{z}/{x}/{y}.pbf") + + with self.subTest(input=map_source): + self.assertTrue("minzoom" in map_source and "maxzoom" in map_source) + class BaseDataTypeTests(ArchesTestCase): def test_get_tile_data_only_none(self): From 6a03afbe1d94d06b2a2479eca180e2ac29f5d686 Mon Sep 17 00:00:00 2001 From: Cyrus Hiatt Date: Thu, 16 May 2024 11:13:58 -0700 Subject: [PATCH 202/242] Update release notes, re #10929 --- releases/7.6.0.md | 1 + 1 file changed, 1 insertion(+) diff --git a/releases/7.6.0.md b/releases/7.6.0.md index ed9ef46d695..37b95d478be 100644 --- a/releases/7.6.0.md +++ b/releases/7.6.0.md @@ -36,6 +36,7 @@ Arches 7.6.0 Release Notes - 10781 Graph.delete_instances() now uses BulkDataDeletion - 10665 Return resourceid in ActivityStream rather than resource url - 10754 Move the i18n/ url outside of the i18n_patterns function +- Allow minzoom and maxzoom to be applied to a resource map source from a geojson node config #10929 ### Dependency changes ``` From 37efabb15ec15d0e64eabbccabdc3433447ac857 Mon Sep 17 00:00:00 2001 From: Cyrus Hiatt Date: Fri, 17 May 2024 09:54:21 -0700 Subject: [PATCH 203/242] Remove ref to postgres user #10944 --- .../migrations/10709_refresh_geos_by_transaction.py | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/arches/app/models/migrations/10709_refresh_geos_by_transaction.py b/arches/app/models/migrations/10709_refresh_geos_by_transaction.py index 609e94bc7f6..a6094920f4a 100644 --- a/arches/app/models/migrations/10709_refresh_geos_by_transaction.py +++ b/arches/app/models/migrations/10709_refresh_geos_by_transaction.py @@ -56,10 +56,7 @@ class Migration(migrations.Migration): $BODY$; - ALTER FUNCTION public.refresh_transaction_geojson_geometries(uuid) - OWNER TO postgres; - - + CREATE OR REPLACE FUNCTION public.__arches_staging_to_tile( load_id uuid) RETURNS boolean @@ -176,9 +173,6 @@ class Migration(migrations.Migration): RETURN status; END; $BODY$; - - ALTER FUNCTION public.__arches_staging_to_tile(uuid) - OWNER TO postgres; """ reverse = """ From cf63396a888ed215689213b127b7107c47496ab8 Mon Sep 17 00:00:00 2001 From: Galen Date: Fri, 17 May 2024 19:35:26 -0700 Subject: [PATCH 204/242] changes default byteSizeLimit to 500, re #10381 --- arches/app/etl_modules/import_single_csv.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arches/app/etl_modules/import_single_csv.py b/arches/app/etl_modules/import_single_csv.py index b3bdefdfe38..b926d7438eb 100644 --- a/arches/app/etl_modules/import_single_csv.py +++ b/arches/app/etl_modules/import_single_csv.py @@ -151,7 +151,7 @@ def write(self, request): temp_dir = os.path.join(settings.UPLOADED_FILES_DIR, "tmp", self.loadid) csv_file_path = os.path.join(temp_dir, csv_file_name) csv_size = default_storage.size(csv_file_path) # file size in byte - use_celery_threshold = self.config.get("celeryByteSizeLimit", 5000) + use_celery_threshold = self.config.get("celeryByteSizeLimit", 500) if csv_size > use_celery_threshold: response = self.run_load_task_async(request, self.loadid) From ce4d1a33a16dd2b1f0d9bd296282b5017436dac7 Mon Sep 17 00:00:00 2001 From: Christopher Byrd Date: Mon, 20 May 2024 14:35:39 -0700 Subject: [PATCH 205/242] fixes clone graph issue #10839 --- arches/app/views/graph.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/arches/app/views/graph.py b/arches/app/views/graph.py index 556aa5ffc5f..9cc9cb109d2 100644 --- a/arches/app/views/graph.py +++ b/arches/app/views/graph.py @@ -421,14 +421,26 @@ def post(self, request, graphid=None): elif self.action == "export_branch": clone_data = graph.copy(root=data) clone_data["copy"].slug = None + clone_data["copy"].publication = None + clone_data["copy"].save() + + if bool(graph.publication_id): + clone_data["copy"].publish(user=request.user) + ret = {"success": True, "graphid": clone_data["copy"].pk} elif self.action == "clone_graph": clone_data = graph.copy() ret = clone_data["copy"] ret.slug = None + ret.publication = None + ret.save() + + if bool(graph.publication_id): + ret.publish(user=request.user) + ret.copy_functions(graph, [clone_data["nodes"], clone_data["nodegroups"]]) elif self.action == "reorder_nodes": From 345ea6b57fa2747074f19cb467ee6ad1b1df69af Mon Sep 17 00:00:00 2001 From: Jacob Walls Date: Mon, 20 May 2024 17:54:12 -0400 Subject: [PATCH 206/242] Adjust APITests setup to work on both v7.6 and v8 --- tests/views/api_tests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/views/api_tests.py b/tests/views/api_tests.py index b1454fb653b..a939e34e50f 100644 --- a/tests/views/api_tests.py +++ b/tests/views/api_tests.py @@ -66,7 +66,7 @@ def setUpClass(cls): cls.phase_type_assignment_graph.publish(user=None) cls.phase_type_assignment_graph.save() - cls.data_type_graph = Graph.objects.get(name="Data Type Testing Model") + cls.data_type_graph = Graph.objects.get(pk=cls.data_type_graphid) cls.test_prj_user = ( models.ResourceInstance.objects.filter(graph=cls.data_type_graph).first() ) From 467e62b6116053852fedf1b3e73fa9901bdf1b06 Mon Sep 17 00:00:00 2001 From: Christopher Byrd Date: Mon, 20 May 2024 15:32:35 -0700 Subject: [PATCH 207/242] adds tests #10839 --- tests/views/graph_manager_tests.py | 36 ++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/tests/views/graph_manager_tests.py b/tests/views/graph_manager_tests.py index 140e3c94c41..91d4fea8252 100644 --- a/tests/views/graph_manager_tests.py +++ b/tests/views/graph_manager_tests.py @@ -22,8 +22,8 @@ from tests import test_settings from arches.app.models.system_settings import settings from tests.base_test import ArchesTestCase +from django.contrib.auth import get_user_model from django.test import Client -from django.core import management from django.urls import reverse from arches.app.models.graph import Graph from arches.app.models.models import Node, NodeGroup, GraphModel, CardModel, Edge @@ -189,6 +189,8 @@ def setUp(self): self.GRAPH_ID = str(graph.pk) self.NODE_COUNT = 5 + self.graph = graph + self.client = Client() LanguageSynchronizer.synchronize_settings_with_db() @@ -288,19 +290,49 @@ def test_node_delete(self): self.assertEqual(len(graph["nodes"]), 3) self.assertEqual(len(graph["edges"]), 2) - def test_graph_clone(self): + def test_graph_clone_on_unpublished_graph(self): + """ + Test clone a graph (HERITAGE_RESOURCE) via view + + """ + self.client.login(username="admin", password="admin") + url = reverse("clone_graph", kwargs={"graphid": self.GRAPH_ID}) + post_data = {} + content_type = "application/x-www-form-urlencoded" + response = self.client.post(url, post_data, content_type) + response_json = json.loads(response.content) + + self.assertEqual(len(response_json["nodes"]), self.NODE_COUNT) + + original_graph_node_ids = [str(node.pk) for node in self.graph.nodes.values()] + cloned_graph_node_ids = [node["nodeid"] for node in response_json["nodes"]] + + self.assertFalse(set(original_graph_node_ids) & set(cloned_graph_node_ids)) + + def test_graph_clone_on_published_graph(self): """ Test clone a graph (HERITAGE_RESOURCE) via view """ self.client.login(username="admin", password="admin") + + user_id = self.client.session['_auth_user_id'] + logged_in_user = get_user_model().objects.get(pk=user_id) + self.graph.publish(user=logged_in_user) + url = reverse("clone_graph", kwargs={"graphid": self.GRAPH_ID}) post_data = {} content_type = "application/x-www-form-urlencoded" response = self.client.post(url, post_data, content_type) response_json = json.loads(response.content) + self.assertEqual(len(response_json["nodes"]), self.NODE_COUNT) + original_graph_node_ids = [str(node.pk) for node in self.graph.nodes.values()] + cloned_graph_node_ids = [node["nodeid"] for node in response_json["nodes"]] + + self.assertFalse(set(original_graph_node_ids) & set(cloned_graph_node_ids)) + def test_new_graph(self): """ Test creating a new graph via the view From 9232fe70c15fbd9af6b443f99225329d9a4b5c2b Mon Sep 17 00:00:00 2001 From: Christopher Byrd Date: Mon, 20 May 2024 15:47:52 -0700 Subject: [PATCH 208/242] nit #10839 --- arches/app/views/graph.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/arches/app/views/graph.py b/arches/app/views/graph.py index 9cc9cb109d2..b9114ce200e 100644 --- a/arches/app/views/graph.py +++ b/arches/app/views/graph.py @@ -421,13 +421,9 @@ def post(self, request, graphid=None): elif self.action == "export_branch": clone_data = graph.copy(root=data) clone_data["copy"].slug = None - clone_data["copy"].publication = None clone_data["copy"].save() - if bool(graph.publication_id): - clone_data["copy"].publish(user=request.user) - ret = {"success": True, "graphid": clone_data["copy"].pk} elif self.action == "clone_graph": From 5e32b9d8e65098142c338ba06c735aa423ae512c Mon Sep 17 00:00:00 2001 From: Christopher Byrd Date: Mon, 20 May 2024 15:48:38 -0700 Subject: [PATCH 209/242] nit #10839 --- arches/app/views/graph.py | 1 - 1 file changed, 1 deletion(-) diff --git a/arches/app/views/graph.py b/arches/app/views/graph.py index b9114ce200e..76cc0dd2455 100644 --- a/arches/app/views/graph.py +++ b/arches/app/views/graph.py @@ -421,7 +421,6 @@ def post(self, request, graphid=None): elif self.action == "export_branch": clone_data = graph.copy(root=data) clone_data["copy"].slug = None - clone_data["copy"].save() ret = {"success": True, "graphid": clone_data["copy"].pk} From 86742bdba127c33faf2dc00e18e317d0a8db841d Mon Sep 17 00:00:00 2001 From: Christopher Byrd Date: Tue, 21 May 2024 08:16:23 -0700 Subject: [PATCH 210/242] nit #10839 --- tests/views/graph_manager_tests.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tests/views/graph_manager_tests.py b/tests/views/graph_manager_tests.py index 91d4fea8252..dfd9cfacc3b 100644 --- a/tests/views/graph_manager_tests.py +++ b/tests/views/graph_manager_tests.py @@ -304,8 +304,10 @@ def test_graph_clone_on_unpublished_graph(self): self.assertEqual(len(response_json["nodes"]), self.NODE_COUNT) + cloned_graph = Graph.objects.get(pk=response_json['graphid']) + original_graph_node_ids = [str(node.pk) for node in self.graph.nodes.values()] - cloned_graph_node_ids = [node["nodeid"] for node in response_json["nodes"]] + cloned_graph_node_ids = [str(node.pk) for node in cloned_graph.nodes.values()] self.assertFalse(set(original_graph_node_ids) & set(cloned_graph_node_ids)) @@ -328,8 +330,10 @@ def test_graph_clone_on_published_graph(self): self.assertEqual(len(response_json["nodes"]), self.NODE_COUNT) + cloned_graph = Graph.objects.get(pk=response_json['graphid']) + original_graph_node_ids = [str(node.pk) for node in self.graph.nodes.values()] - cloned_graph_node_ids = [node["nodeid"] for node in response_json["nodes"]] + cloned_graph_node_ids = [str(node.pk) for node in cloned_graph.nodes.values()] self.assertFalse(set(original_graph_node_ids) & set(cloned_graph_node_ids)) From 5be4ce89c442caa17e1f01e92fd5b5f20a191caf Mon Sep 17 00:00:00 2001 From: Jacob Walls Date: Tue, 21 May 2024 11:45:03 -0400 Subject: [PATCH 211/242] Reenable type-checking in vue templates Follow-up to 92123cd (disabled) Follow-up to fca355c (root cause fixed) --- arches/install/arches-templates/tsconfig.json | 5 +---- tsconfig.json | 5 +---- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/arches/install/arches-templates/tsconfig.json b/arches/install/arches-templates/tsconfig.json index 58ca2ed70fc..73304be69eb 100644 --- a/arches/install/arches-templates/tsconfig.json +++ b/arches/install/arches-templates/tsconfig.json @@ -25,8 +25,5 @@ "include": [ "**/*.ts", "**/*.vue" - ], - "vueCompilerOptions": { - "skipTemplateCodegen": true - } + ] } diff --git a/tsconfig.json b/tsconfig.json index feec7e80198..2791834ad75 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -25,8 +25,5 @@ "include": [ "**/*.ts", "**/*.vue" - ], - "vueCompilerOptions": { - "skipTemplateCodegen": true - } + ] } From 5ad38acb77fb7a1a89fd857d28abe2c389d3847f Mon Sep 17 00:00:00 2001 From: Christopher Byrd Date: Tue, 21 May 2024 10:45:41 -0700 Subject: [PATCH 212/242] removes postcss.config.js #10902 (#10953) --- postcss.config.js | 5 - releases/7.6.0.md | 2 +- yarn.lock | 894 +++++++++------------------------------------- 3 files changed, 167 insertions(+), 734 deletions(-) delete mode 100644 postcss.config.js diff --git a/postcss.config.js b/postcss.config.js deleted file mode 100644 index 2644e1aad6c..00000000000 --- a/postcss.config.js +++ /dev/null @@ -1,5 +0,0 @@ -const postcssPresetEnv = require('postcss-preset-env'); - -module.exports = { - plugins: [postcssPresetEnv()], -}; diff --git a/releases/7.6.0.md b/releases/7.6.0.md index 37b95d478be..deddfa9a0bc 100644 --- a/releases/7.6.0.md +++ b/releases/7.6.0.md @@ -73,7 +73,6 @@ JavaScript: eslint == 9.0.0 html-loader == 5.0.0 postcss-loader == 8.1.1 - postcss-preset-env == 9.5.5 sass-loader == 14.2.0 style-loader == 4.0.0 stylelint == 16.3.1 @@ -103,6 +102,7 @@ JavaScript: @babel/plugin-proposal-class-properties eslint-webpack-plugin node-sass + postcss-preset-env ``` ### Breaking changes diff --git a/yarn.lock b/yarn.lock index 36d91638b94..a7d764f4af6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -977,300 +977,26 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@csstools/cascade-layer-name-parser@^1.0.11": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.11.tgz#c9b85dc38240c0269385f557149f714e7875fda0" - integrity sha512-yhsonEAhaWRQvHFYhSzOUobH2Ev++fMci+ppFRagw0qVSPlcPV4FnNmlwpM/b2BM10ZeMRkVV4So6YRswD0O0w== - -"@csstools/color-helpers@^4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@csstools/color-helpers/-/color-helpers-4.2.0.tgz#e8629ca9dce03a3a309506e7892b7f862673cf85" - integrity sha512-hJJrSBzbfGxUsaR6X4Bzd/FLx0F1ulKnR5ljY9AiXCtsR+H+zSWQDFWlKES1BRaVZTDHLpIIHS9K2o0h+JLlrg== - -"@csstools/css-calc@^1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@csstools/css-calc/-/css-calc-1.2.2.tgz#bcb856e63ecc16a7508f43e77ea43ac5daaf2833" - integrity sha512-0owrl7AruDRKAxoSIW8XzJdz7GnuW3AOj4rYLfmXsoKIX2ZZzttzGXoiC8n8V08X7wIBlEWWVB4C8fAN18+I6Q== - -"@csstools/css-color-parser@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@csstools/css-color-parser/-/css-color-parser-2.0.2.tgz#bf60de403889a2726f964a1c9b1ea5593e889f5b" - integrity sha512-Agx2YmxTcZ7TfB7KNZQ+iekaxbWSdblvtA35aTwE3KfuYyjOlCg3P4KGGdQF/cjm1pHWVSBo5duF/BRfZ8s07A== - dependencies: - "@csstools/color-helpers" "^4.2.0" - "@csstools/css-calc" "^1.2.2" - -"@csstools/css-parser-algorithms@^2.6.1", "@csstools/css-parser-algorithms@^2.6.3": +"@csstools/css-parser-algorithms@^2.6.1": version "2.6.3" resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.3.tgz#b5e7eb2bd2a42e968ef61484f1490a8a4148a8eb" integrity sha512-xI/tL2zxzEbESvnSxwFgwvy5HS00oCXxL4MLs6HUiDcYfwowsoQaABKxUElp1ARITrINzBnsECOc1q0eg2GOrA== -"@csstools/css-tokenizer@^2.2.4", "@csstools/css-tokenizer@^2.3.1": +"@csstools/css-tokenizer@^2.2.4": version "2.3.1" resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-2.3.1.tgz#3d47e101ad48d815a4bdce8159fb5764f087f17a" integrity sha512-iMNHTyxLbBlWIfGtabT157LH9DUx9X8+Y3oymFEuMj8HNc+rpE3dPFGFgHjpKfjeFDjLjYIAIhXPGvS2lKxL9g== -"@csstools/media-query-list-parser@^2.1.11", "@csstools/media-query-list-parser@^2.1.9": +"@csstools/media-query-list-parser@^2.1.9": version "2.1.11" resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.11.tgz#465aa42f268599729350e305e1ae14a30c1daf51" integrity sha512-uox5MVhvNHqitPP+SynrB1o8oPxPMt2JLgp5ghJOWf54WGQ5OKu47efne49r1SWqs3wRP8xSWjnO9MBKxhB1dA== -"@csstools/postcss-cascade-layers@^4.0.6": - version "4.0.6" - resolved "https://registry.yarnpkg.com/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-4.0.6.tgz#5a421cd2d5792d1eb8c28e682dc5f2c3b85cb045" - integrity sha512-Xt00qGAQyqAODFiFEJNkTpSUz5VfYqnDLECdlA/Vv17nl/OIV5QfTRHGAXrBGG5YcJyHpJ+GF9gF/RZvOQz4oA== - dependencies: - "@csstools/selector-specificity" "^3.1.1" - postcss-selector-parser "^6.0.13" - -"@csstools/postcss-color-function@^3.0.16": - version "3.0.16" - resolved "https://registry.yarnpkg.com/@csstools/postcss-color-function/-/postcss-color-function-3.0.16.tgz#d4f0b45a7425d437f267d99dcb94d3961a151b52" - integrity sha512-KtmXfckANSKsLBoTQCzggvKft1cmmmDKYjFO4yVlB23nWUgGInVBTE9T5JLmH29NNdTWSEPLWPUxoQ6XiIEn2Q== - dependencies: - "@csstools/css-color-parser" "^2.0.2" - "@csstools/css-parser-algorithms" "^2.6.3" - "@csstools/css-tokenizer" "^2.3.1" - "@csstools/postcss-progressive-custom-properties" "^3.2.0" - "@csstools/utilities" "^1.0.0" - -"@csstools/postcss-color-mix-function@^2.0.16": - version "2.0.16" - resolved "https://registry.yarnpkg.com/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.16.tgz#40b95ade50f5b19320bb342db4557bb61a8eefd6" - integrity sha512-BJnD1M5Pdypl1cJuwGuzVC52PqgzaObsDLu34jgf+QU7daVFqz432PvpqvXTmfTSNt4OckOT1QIzWexEFlDNXw== - dependencies: - "@csstools/css-color-parser" "^2.0.2" - "@csstools/css-parser-algorithms" "^2.6.3" - "@csstools/css-tokenizer" "^2.3.1" - "@csstools/postcss-progressive-custom-properties" "^3.2.0" - "@csstools/utilities" "^1.0.0" - -"@csstools/postcss-exponential-functions@^1.0.7": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.7.tgz#1ce6402fb40c97448cd465e3682844c401942700" - integrity sha512-9usBPQX74OhiF/VuaVrp44UAPzqbKNyoaxEa6tbEXiFp+OAm3yB/TLRKyPUWg5tvvHGCduGJVdJJB3w8c8NBtA== - dependencies: - "@csstools/css-calc" "^1.2.2" - "@csstools/css-parser-algorithms" "^2.6.3" - "@csstools/css-tokenizer" "^2.3.1" - -"@csstools/postcss-font-format-keywords@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-3.0.2.tgz#b504cfc60588ac39fa5d1c67ef3da802b1bd7701" - integrity sha512-E0xz2sjm4AMCkXLCFvI/lyl4XO6aN1NCSMMVEOngFDJ+k2rDwfr6NDjWljk1li42jiLNChVX+YFnmfGCigZKXw== - dependencies: - "@csstools/utilities" "^1.0.0" - postcss-value-parser "^4.2.0" - -"@csstools/postcss-gamut-mapping@^1.0.9": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-1.0.9.tgz#40358dff1e9be784a99a0925c3062c841fc1b001" - integrity sha512-JmOeiBJj1RJriAkr+aLBaiYUpEqdNOIo3ERQ5a4uNzy18upzrQ6tz7m2Vt1GQpJ62zQj7rC5PjAhCoZCoyE31g== - dependencies: - "@csstools/css-color-parser" "^2.0.2" - "@csstools/css-parser-algorithms" "^2.6.3" - "@csstools/css-tokenizer" "^2.3.1" - -"@csstools/postcss-gradients-interpolation-method@^4.0.17": - version "4.0.17" - resolved "https://registry.yarnpkg.com/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.17.tgz#905bc1c8ae2b5fca1f38f191d67c56c102eba208" - integrity sha512-qSNIqzLPKd2SadfWwHZv42lDRyYlLaM+Vx5rRIsnYCZbQxzFfe1XAwssrcCsHgba5bA6bi5oDoFCx0W+PRCpfw== - dependencies: - "@csstools/css-color-parser" "^2.0.2" - "@csstools/css-parser-algorithms" "^2.6.3" - "@csstools/css-tokenizer" "^2.3.1" - "@csstools/postcss-progressive-custom-properties" "^3.2.0" - "@csstools/utilities" "^1.0.0" - -"@csstools/postcss-hwb-function@^3.0.15": - version "3.0.15" - resolved "https://registry.yarnpkg.com/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.15.tgz#c7ad67e697dc41eddd30551edcb92c45fa1ef289" - integrity sha512-l34fRiZ7o5+pULv7OplXniBTU4TuKYNNOv0abuvUanddWGSy3+YHlMKUSgcVFo0d1DorxPAhJSTCrugl+4OmMQ== - dependencies: - "@csstools/css-color-parser" "^2.0.2" - "@csstools/css-parser-algorithms" "^2.6.3" - "@csstools/css-tokenizer" "^2.3.1" - "@csstools/postcss-progressive-custom-properties" "^3.2.0" - "@csstools/utilities" "^1.0.0" - -"@csstools/postcss-ic-unit@^3.0.6": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@csstools/postcss-ic-unit/-/postcss-ic-unit-3.0.6.tgz#441f18a9064884e1e6ab77169413e0e6184f5c1d" - integrity sha512-fHaU9C/sZPauXMrzPitZ/xbACbvxbkPpHoUgB9Kw5evtsBWdVkVrajOyiT9qX7/c+G1yjApoQjP1fQatldsy9w== - dependencies: - "@csstools/postcss-progressive-custom-properties" "^3.2.0" - "@csstools/utilities" "^1.0.0" - postcss-value-parser "^4.2.0" - -"@csstools/postcss-initial@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-initial/-/postcss-initial-1.0.1.tgz#5aa378de9bfd0e6e377433f8986bdecf579e1268" - integrity sha512-wtb+IbUIrIf8CrN6MLQuFR7nlU5C7PwuebfeEXfjthUha1+XZj2RVi+5k/lukToA24sZkYAiSJfHM8uG/UZIdg== - -"@csstools/postcss-is-pseudo-class@^4.0.8": - version "4.0.8" - resolved "https://registry.yarnpkg.com/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-4.0.8.tgz#d2bcc6c2d86d9653c333926a9ea488c2fc221a7f" - integrity sha512-0aj591yGlq5Qac+plaWCbn5cpjs5Sh0daovYUKJUOMjIp70prGH/XPLp7QjxtbFXz3CTvb0H9a35dpEuIuUi3Q== - dependencies: - "@csstools/selector-specificity" "^3.1.1" - postcss-selector-parser "^6.0.13" - -"@csstools/postcss-light-dark-function@^1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-1.0.5.tgz#5a9a15b1b7e79b3d7c8020a6a133f796ce4dfda7" - integrity sha512-kKM9dtEaVmSTb3scL2pgef62KyWv6SK19JiAnCCuiDhlRE6PADKzaPPBXmP3qj4IEgIH+cQhdEosB0eroU6Fnw== - dependencies: - "@csstools/css-parser-algorithms" "^2.6.3" - "@csstools/css-tokenizer" "^2.3.1" - "@csstools/postcss-progressive-custom-properties" "^3.2.0" - "@csstools/utilities" "^1.0.0" - -"@csstools/postcss-logical-float-and-clear@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-float-and-clear/-/postcss-logical-float-and-clear-2.0.1.tgz#c70ed8293cc376b1572bf56794219f54dc58c54d" - integrity sha512-SsrWUNaXKr+e/Uo4R/uIsqJYt3DaggIh/jyZdhy/q8fECoJSKsSMr7nObSLdvoULB69Zb6Bs+sefEIoMG/YfOA== - -"@csstools/postcss-logical-overflow@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-overflow/-/postcss-logical-overflow-1.0.1.tgz#d14631369f43ef989c7e32f051ddb6952a8ce35c" - integrity sha512-Kl4lAbMg0iyztEzDhZuQw8Sj9r2uqFDcU1IPl+AAt2nue8K/f1i7ElvKtXkjhIAmKiy5h2EY8Gt/Cqg0pYFDCw== - -"@csstools/postcss-logical-overscroll-behavior@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-overscroll-behavior/-/postcss-logical-overscroll-behavior-1.0.1.tgz#9305a6f0d08bb7b5f1a228272951f72d3bf9d44f" - integrity sha512-+kHamNxAnX8ojPCtV8WPcUP3XcqMFBSDuBuvT6MHgq7oX4IQxLIXKx64t7g9LiuJzE7vd06Q9qUYR6bh4YnGpQ== - -"@csstools/postcss-logical-resize@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-resize/-/postcss-logical-resize-2.0.1.tgz#a46c1b51055db96fb63af3bfe58909c773aea377" - integrity sha512-W5Gtwz7oIuFcKa5SmBjQ2uxr8ZoL7M2bkoIf0T1WeNqljMkBrfw1DDA8/J83k57NQ1kcweJEjkJ04pUkmyee3A== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-logical-viewport-units@^2.0.9": - version "2.0.9" - resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-2.0.9.tgz#8575b832faac9c9118b2228eb65ab622c91fdddf" - integrity sha512-iBBJuExgHwedFH9AqNOHWzZFgYnt17zhu1qWjmSihu1P5pw0lIG9q5t3uIgJJFDNmYoOGfBKan66z9u1QH8yBQ== - dependencies: - "@csstools/css-tokenizer" "^2.3.1" - "@csstools/utilities" "^1.0.0" - -"@csstools/postcss-media-minmax@^1.1.6": - version "1.1.6" - resolved "https://registry.yarnpkg.com/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.1.6.tgz#300581d39cfade44fd9ac2b777c5abb1d088aaa8" - integrity sha512-bc0frf2Lod53j6wEHVsaVElfvCf6uhc96v99M/wUfer4MmNYfO3YLx1kFuB8xXvb0AXiWx4fohCJqemHV3bfRg== - dependencies: - "@csstools/css-calc" "^1.2.2" - "@csstools/css-parser-algorithms" "^2.6.3" - "@csstools/css-tokenizer" "^2.3.1" - "@csstools/media-query-list-parser" "^2.1.11" - -"@csstools/postcss-media-queries-aspect-ratio-number-values@^2.0.9": - version "2.0.9" - resolved "https://registry.yarnpkg.com/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.9.tgz#764657111d378d73cb66b9110c9e73283116f350" - integrity sha512-PR0s3tFSxPoKoPLoKuiZuYhwQC5bQxq/gFfywX2u/kh8rMzesARPZYKxE71I3jHWi6KDHGZl9Xb5xcFPwtvLiQ== - dependencies: - "@csstools/css-parser-algorithms" "^2.6.3" - "@csstools/css-tokenizer" "^2.3.1" - "@csstools/media-query-list-parser" "^2.1.11" - -"@csstools/postcss-nested-calc@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@csstools/postcss-nested-calc/-/postcss-nested-calc-3.0.2.tgz#72ae4d087987ab5596397f5c2e5db4403b81c4a9" - integrity sha512-ySUmPyawiHSmBW/VI44+IObcKH0v88LqFe0d09Sb3w4B1qjkaROc6d5IA3ll9kjD46IIX/dbO5bwFN/swyoyZA== - dependencies: - "@csstools/utilities" "^1.0.0" - postcss-value-parser "^4.2.0" - -"@csstools/postcss-normalize-display-values@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-3.0.2.tgz#9013e6ade2fbd4cd725438c9ff0b1000062cf20d" - integrity sha512-fCapyyT/dUdyPtrelQSIV+d5HqtTgnNP/BEG9IuhgXHt93Wc4CfC1bQ55GzKAjWrZbgakMQ7MLfCXEf3rlZJOw== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-oklab-function@^3.0.16": - version "3.0.16" - resolved "https://registry.yarnpkg.com/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.16.tgz#c7ae792fb831c935aca3e7aec7c61ff357814995" - integrity sha512-zm8nND+EraZrmbO4mgcT8FrJrAQUfWNfMmbV5uTCpWtAcO5ycX3E3bO8T1TjczKYRxC5QMM/91n9YExYCF4Mvw== - dependencies: - "@csstools/css-color-parser" "^2.0.2" - "@csstools/css-parser-algorithms" "^2.6.3" - "@csstools/css-tokenizer" "^2.3.1" - "@csstools/postcss-progressive-custom-properties" "^3.2.0" - "@csstools/utilities" "^1.0.0" - -"@csstools/postcss-progressive-custom-properties@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-3.2.0.tgz#811da8616938e8148a7c4fb40c26e30bf94d4ceb" - integrity sha512-BZlirVxCRgKlE7yVme+Xvif72eTn1MYXj8oZ4Knb+jwaH4u3AN1DjbhM7j86RP5vvuAOexJ4JwfifYYKWMN/QQ== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-relative-color-syntax@^2.0.16": - version "2.0.16" - resolved "https://registry.yarnpkg.com/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.16.tgz#9ace14c5bb1e70ec4e7f8bba0cc98acc5fc9d6e1" - integrity sha512-TSM8fVqJkT8JZDranZPnkpxjU/Q1sNR192lXMND+EcKOUjYa6uYpGSfHgjnWjCRiBSciettS+sL7y9wmnas7qQ== - dependencies: - "@csstools/css-color-parser" "^2.0.2" - "@csstools/css-parser-algorithms" "^2.6.3" - "@csstools/css-tokenizer" "^2.3.1" - "@csstools/postcss-progressive-custom-properties" "^3.2.0" - "@csstools/utilities" "^1.0.0" - -"@csstools/postcss-scope-pseudo-class@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-scope-pseudo-class/-/postcss-scope-pseudo-class-3.0.1.tgz#c5454ea2fb3cf9beaf212d3a631a5c18cd4fbc14" - integrity sha512-3ZFonK2gfgqg29gUJ2w7xVw2wFJ1eNWVDONjbzGkm73gJHVCYK5fnCqlLr+N+KbEfv2XbWAO0AaOJCFB6Fer6A== - dependencies: - postcss-selector-parser "^6.0.13" - -"@csstools/postcss-stepped-value-functions@^3.0.8": - version "3.0.8" - resolved "https://registry.yarnpkg.com/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.8.tgz#696aaa0eb9ea651097d7b1a376c36a9ca925908f" - integrity sha512-X76+thsvsmH/SkqVbN+vjeFKe1ABGLRx8/Wl68QTb/zvJWdzgx5S/nbszZP5O3nTRc5eI8NxIOrQUiy30fR+0g== - dependencies: - "@csstools/css-calc" "^1.2.2" - "@csstools/css-parser-algorithms" "^2.6.3" - "@csstools/css-tokenizer" "^2.3.1" - -"@csstools/postcss-text-decoration-shorthand@^3.0.6": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-3.0.6.tgz#108afc5a66b96db3d0cca4f5d9414559c6b7a0bf" - integrity sha512-Q8HEu4AEiwNVZBD6+DpQ8M9SajpMow4+WtmndWIAv8qxDtDYL4JK1xXWkhOGk28PrcJawOvkrEZ8Ri59UN1TJw== - dependencies: - "@csstools/color-helpers" "^4.2.0" - postcss-value-parser "^4.2.0" - -"@csstools/postcss-trigonometric-functions@^3.0.8": - version "3.0.8" - resolved "https://registry.yarnpkg.com/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.8.tgz#8ba2206d27481e922bb29c1eeae834928be0abae" - integrity sha512-zEzyGriPqoIYFgHJqWNy8bmoxjM4+ONyTap1ZzQK/Lll/VsCYvx0IckB33W/u89uLSVeeB8xC7uTrkoQ7ogKyQ== - dependencies: - "@csstools/css-calc" "^1.2.2" - "@csstools/css-parser-algorithms" "^2.6.3" - "@csstools/css-tokenizer" "^2.3.1" - -"@csstools/postcss-unset-value@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-unset-value/-/postcss-unset-value-3.0.1.tgz#598a25630fd9ab0edf066d235916f7441404942a" - integrity sha512-dbDnZ2ja2U8mbPP0Hvmt2RMEGBiF1H7oY6HYSpjteXJGihYwgxgTr6KRbbJ/V6c+4wd51M+9980qG4gKVn5ttg== - -"@csstools/selector-resolve-nested@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@csstools/selector-resolve-nested/-/selector-resolve-nested-1.1.0.tgz#d872f2da402d3ce8bd0cf16ea5f9fba76b18e430" - integrity sha512-uWvSaeRcHyeNenKg8tp17EVDRkpflmdyvbE0DHo6D/GdBb6PDnCYYU6gRpXhtICMGMcahQmj2zGxwFM/WC8hCg== - -"@csstools/selector-specificity@^3.0.3", "@csstools/selector-specificity@^3.1.1": +"@csstools/selector-specificity@^3.0.3": version "3.1.1" resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-3.1.1.tgz#63085d2995ca0f0e55aa8b8a07d69bfd48b844fe" integrity sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA== -"@csstools/utilities@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@csstools/utilities/-/utilities-1.0.0.tgz#42f3c213f2fb929324d465684ab9f46a0febd4bb" - integrity sha512-tAgvZQe/t2mlvpNosA4+CkMiZ2azISW5WPAcdSalZlEjQvUfghHxfQcrCiK/7/CrfAWVxyM88kGFYO82heIGDg== - "@discoveryjs/json-ext@^0.5.0": version "0.5.7" resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" @@ -1408,10 +1134,10 @@ resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== -"@eslint/eslintrc@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.0.2.tgz#36180f8e85bf34d2fe3ccc2261e8e204a411ab4e" - integrity sha512-wV19ZEGEMAC1eHgrS7UQPqsdEiCIbTKTasEfcXAigzoXICcqZSjBZEHlZwNVvKg6UBCjSlos84XiLqsRJnIcIg== +"@eslint/eslintrc@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.1.0.tgz#dbd3482bfd91efa663cbe7aa1f506839868207b6" + integrity sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ== dependencies: ajv "^6.12.4" debug "^4.3.2" @@ -1423,10 +1149,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@9.2.0": - version "9.2.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.2.0.tgz#b0a9123e8e91a3d9a2eed3a04a6ed44fdab639aa" - integrity sha512-ESiIudvhoYni+MdsI8oD7skpprZ89qKocwRM2KEvhhBJ9nl5MRh7BXU5GTod7Mdygq+AUl+QzId6iWJKR/wABA== +"@eslint/js@9.3.0": + version "9.3.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.3.0.tgz#2e8f65c9c55227abc4845b1513c69c32c679d8fe" + integrity sha512-niBqk8iwv96+yuTwjM6bWg8ovzAPF9qkICsGtcoa5/dmqcEMfdwNAX7+/OHcJHc7wj7XqPxH98oAHytFYlw6Sw== "@gerhobbelt/linewrap@0.2.2-3": version "0.2.2-3" @@ -1460,10 +1186,10 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== -"@humanwhocodes/retry@^0.2.3": - version "0.2.4" - resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.2.4.tgz#4f3059423823bd8176132ceea9447dee101dfac1" - integrity sha512-Ttl/jHpxfS3st5sxwICYfk4pOH0WrLI1SpW283GgQL7sCWU7EHIOhX4b4fkIxr3tkfzwg8+FNojtzsIEE7Ecgg== +"@humanwhocodes/retry@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.3.0.tgz#6d86b8cb322660f03d3f0aa94b99bdd8e172d570" + integrity sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew== "@isaacs/cliui@^8.0.2": version "8.0.2" @@ -2945,7 +2671,12 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/json-schema@*", "@types/json-schema@^7.0.15", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": +"@types/js-cookie@^3.0.6": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@types/js-cookie/-/js-cookie-3.0.6.tgz#a04ca19e877687bd449f5ad37d33b104b71fdf95" + integrity sha512-wkw9yd1kEXOPnvEeEV1Go1MmxtBJL0RR79aOTAApecWFVu7w0NNXNqhcWgvw2YgZDYadliXkl14pa3WXw5jlCQ== + +"@types/json-schema@*", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== @@ -3018,11 +2749,6 @@ resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.2.tgz#ed279a64fa438bb69f2480eda44937912bb7480a" integrity sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow== -"@types/semver@^7.5.8": - version "7.5.8" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" - integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== - "@types/send@*": version "0.17.4" resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a" @@ -3078,64 +2804,62 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@8.0.0-alpha.11": - version "8.0.0-alpha.11" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.0.0-alpha.11.tgz#8e1b344c09a2147f94dde3709cc4054dd523cdc2" - integrity sha512-JILZNFOn0eceiZats/fdm+0RCYW5vlVjUismvCHsSRzHabZxi3x9Rv+p7dnlLNUFY2laRZ967zSpiS1pLUZT1Q== +"@typescript-eslint/eslint-plugin@8.0.0-alpha.14": + version "8.0.0-alpha.14" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.0.0-alpha.14.tgz#23cc6208bac9150629453bb1cea3ab99b83b145a" + integrity sha512-tfw3zfCg+ynwARhVsuMXKBrmWCtqQ2Cr/cjPAuyKhJGY8t069Lc0Y+F5H7oDLlmm+G54v8lAHkTkw4K/p+PpFQ== dependencies: "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "8.0.0-alpha.11" - "@typescript-eslint/type-utils" "8.0.0-alpha.11" - "@typescript-eslint/utils" "8.0.0-alpha.11" - "@typescript-eslint/visitor-keys" "8.0.0-alpha.11" - debug "^4.3.4" + "@typescript-eslint/scope-manager" "8.0.0-alpha.14" + "@typescript-eslint/type-utils" "8.0.0-alpha.14" + "@typescript-eslint/utils" "8.0.0-alpha.14" + "@typescript-eslint/visitor-keys" "8.0.0-alpha.14" graphemer "^1.4.0" ignore "^5.3.1" natural-compare "^1.4.0" - semver "^7.6.0" ts-api-utils "^1.3.0" -"@typescript-eslint/parser@8.0.0-alpha.11", "@typescript-eslint/parser@^8.0.0-alpha.11": - version "8.0.0-alpha.11" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.0.0-alpha.11.tgz#3783b690f3f55e3d8528557f763e1dcce7884293" - integrity sha512-SIItaDvMpBdd9ncexXDdt0cH0KSiLTFG1mHgv6zYcaDeJmQ+3ZePNFUkuDwh1GeokHBg0BHx6UjK5DKXuDzwpg== +"@typescript-eslint/parser@8.0.0-alpha.14", "@typescript-eslint/parser@^8.0.0-alpha.11": + version "8.0.0-alpha.14" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.0.0-alpha.14.tgz#0eb015188cd474606f0d4fd4f9c0aa03e697d851" + integrity sha512-fD+DFo6aJJYyX4w712HzmE7QmUkoUvtlsFO/MqmYMeHIe0Pz5JZpJ1aYVbdxctazOb7NoW3p3RQgmpDcLT2pdQ== dependencies: - "@typescript-eslint/scope-manager" "8.0.0-alpha.11" - "@typescript-eslint/types" "8.0.0-alpha.11" - "@typescript-eslint/typescript-estree" "8.0.0-alpha.11" - "@typescript-eslint/visitor-keys" "8.0.0-alpha.11" + "@typescript-eslint/scope-manager" "8.0.0-alpha.14" + "@typescript-eslint/types" "8.0.0-alpha.14" + "@typescript-eslint/typescript-estree" "8.0.0-alpha.14" + "@typescript-eslint/visitor-keys" "8.0.0-alpha.14" debug "^4.3.4" -"@typescript-eslint/scope-manager@8.0.0-alpha.11": - version "8.0.0-alpha.11" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.0.0-alpha.11.tgz#6f53462c58be127aef50a6b640173edd3dfd7e28" - integrity sha512-OzM7xRXyFuE+uUv/6qE3GRYfbh/BVKalF/aO4+U42a8PZcpIUseYo3bwlCYz5F0ngzy5SpxBSjw1FucqweeWUQ== +"@typescript-eslint/scope-manager@8.0.0-alpha.14": + version "8.0.0-alpha.14" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.0.0-alpha.14.tgz#3258f2aefe7edd02610910f1782cb972ea8ce7e6" + integrity sha512-6EmhoNZzfjd/sZGxichVguWUGCCgT12xyw3ppNZ9bM/m6qQCE66BqudGxzD58UPL4PpN++Y8KqVItax0gNq4BQ== dependencies: - "@typescript-eslint/types" "8.0.0-alpha.11" - "@typescript-eslint/visitor-keys" "8.0.0-alpha.11" + "@typescript-eslint/types" "8.0.0-alpha.14" + "@typescript-eslint/visitor-keys" "8.0.0-alpha.14" -"@typescript-eslint/type-utils@8.0.0-alpha.11": - version "8.0.0-alpha.11" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.0.0-alpha.11.tgz#229cc832493b8572bd920c83277945ea2a329fb6" - integrity sha512-0MvON7i0fCdVHCFAHK1VmeQwtmK7NnGT8lpXvXYYtiMlBJa+rVesh9yTAsgvGum7PmLXecJC9GpPkD9f3K1vYQ== +"@typescript-eslint/type-utils@8.0.0-alpha.14": + version "8.0.0-alpha.14" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.0.0-alpha.14.tgz#69997245b18ae0b6be9987603a01905d23e87399" + integrity sha512-F/rtAXWMrFPO49xK0XLw7hYtPVrjj+jRJhJRRcSBWRybcu7rvlEQ/Chk+QXvyp15QuwmMD5jAqNI+Fkbxgc0gQ== dependencies: - "@typescript-eslint/typescript-estree" "8.0.0-alpha.11" - "@typescript-eslint/utils" "8.0.0-alpha.11" + "@typescript-eslint/typescript-estree" "8.0.0-alpha.14" + "@typescript-eslint/utils" "8.0.0-alpha.14" debug "^4.3.4" ts-api-utils "^1.3.0" -"@typescript-eslint/types@8.0.0-alpha.11": - version "8.0.0-alpha.11" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.0.0-alpha.11.tgz#a06a27e552c6eedef3fee3dac10c68fb5540b871" - integrity sha512-tkIpFZbuh6uaJrFCriXdrNDALWGKtDqL5bmOKXzNM+J1ydyGuga4TE8NnAcT/y1zfn4Hh8hLtvflnmfPDnOxLQ== +"@typescript-eslint/types@8.0.0-alpha.14": + version "8.0.0-alpha.14" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.0.0-alpha.14.tgz#125f81d5041f0f4ce56837cb79b680e7a5adebd9" + integrity sha512-2u0FBQ0usELnbTqZhHN6X8ngJlpCchFTroWFG5nvo0TOoiPYV+5AbGiRb0IWMsLfxSzeDJeasUzByVvOHn1t1A== -"@typescript-eslint/typescript-estree@8.0.0-alpha.11": - version "8.0.0-alpha.11" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.0.0-alpha.11.tgz#0b8c86add8d1f02ddd89177ee116a082d03b6f65" - integrity sha512-M4aGP+niQG7jmQVkWBXwtwVXW6Q8teE0zhWG2FJYY9YzJ5uEDWE0VeUCFEG5fjOrjhKjTGHMv1hMkwbaYFGOgg== +"@typescript-eslint/typescript-estree@8.0.0-alpha.14": + version "8.0.0-alpha.14" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.0.0-alpha.14.tgz#0ec97e2f0d813c91626ceb16189a513aadfdaaab" + integrity sha512-FM0qHSJ4Sqg49wBCcljq//J9V8SJbq3XFmjaWCF8Tk2hIuYkYZp7joXHs0Ld3FnM+9rj84OQTqSq8zczArNMNg== dependencies: - "@typescript-eslint/types" "8.0.0-alpha.11" - "@typescript-eslint/visitor-keys" "8.0.0-alpha.11" + "@typescript-eslint/types" "8.0.0-alpha.14" + "@typescript-eslint/visitor-keys" "8.0.0-alpha.14" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" @@ -3143,25 +2867,22 @@ semver "^7.6.0" ts-api-utils "^1.3.0" -"@typescript-eslint/utils@8.0.0-alpha.11": - version "8.0.0-alpha.11" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.0.0-alpha.11.tgz#f453453fd4af128f970e3666a973c56f439f2eb3" - integrity sha512-CUaFRGc0xXfvQouDH+3ddHd0Sf77n7v6Uvy6Uj7oZl2eO3j/z9VJNyJyQ2OpeqRgv0484EYXrsQsniRK2pW8tA== +"@typescript-eslint/utils@8.0.0-alpha.14": + version "8.0.0-alpha.14" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.0.0-alpha.14.tgz#be5f3a644bf874bd95498ef13530d6ae26431d58" + integrity sha512-hiH1uqRVyOPd+ZWqInwRob2s3Cq+p7LTIolvj+x7QJ6CpBCPrEMEPVuBiFibw2/rW+zJGTa3Ggjdpqy8bLb60g== dependencies: "@eslint-community/eslint-utils" "^4.4.0" - "@types/json-schema" "^7.0.15" - "@types/semver" "^7.5.8" - "@typescript-eslint/scope-manager" "8.0.0-alpha.11" - "@typescript-eslint/types" "8.0.0-alpha.11" - "@typescript-eslint/typescript-estree" "8.0.0-alpha.11" - semver "^7.6.0" + "@typescript-eslint/scope-manager" "8.0.0-alpha.14" + "@typescript-eslint/types" "8.0.0-alpha.14" + "@typescript-eslint/typescript-estree" "8.0.0-alpha.14" -"@typescript-eslint/visitor-keys@8.0.0-alpha.11": - version "8.0.0-alpha.11" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.0.0-alpha.11.tgz#33ba2106947a6aa100c75aaad0949357b8bb35b4" - integrity sha512-s3ubHZUz16eTgZyWjqh12KUNdJjp5YH7t+2yOCEyzLebrFV8P9z9E5qNxny1nA3b4TjRNC6jLYPhFvE43X22jA== +"@typescript-eslint/visitor-keys@8.0.0-alpha.14": + version "8.0.0-alpha.14" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.0.0-alpha.14.tgz#a08687113669559181563282f7f8bd4aa62ffe2f" + integrity sha512-LwUhX8+ttlzJWhqLAkiH7E1tX2WJS0zvK0D83w4L9DRl4TRSQBuGtPIM1+GvG90VMix8sjlGaybBzWfNji1cUw== dependencies: - "@typescript-eslint/types" "8.0.0-alpha.11" + "@typescript-eslint/types" "8.0.0-alpha.14" eslint-visitor-keys "^3.4.3" "@vitejs/plugin-vue@^5.0.4": @@ -3232,26 +2953,26 @@ loupe "^2.3.7" pretty-format "^29.7.0" -"@volar/language-core@2.2.2", "@volar/language-core@~2.2.2": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@volar/language-core/-/language-core-2.2.2.tgz#3c0e745a6d279e6f1872ad3de406683e2e92002b" - integrity sha512-GuvEL4JdxbnLVhPLICncCGT+tVW4cIz9GxXNeDofNnJ4iNTKhr5suGVsA1GLOne9PbraSjn8PlLt+pvLxuRVeQ== +"@volar/language-core@2.2.4", "@volar/language-core@~2.2.4": + version "2.2.4" + resolved "https://registry.yarnpkg.com/@volar/language-core/-/language-core-2.2.4.tgz#50a9194732988610d6b0d8d8732a07235e6464c8" + integrity sha512-7As47GndxGxsqqYnbreLrfB5NDUeQioPM2LJKUuB4/34c0NpEJ2byVl3c9KYdjIdiEstWZ9JLtLKNTaPWb5jtA== dependencies: - "@volar/source-map" "2.2.2" + "@volar/source-map" "2.2.4" -"@volar/source-map@2.2.2": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@volar/source-map/-/source-map-2.2.2.tgz#ec25e8366297b1e9bbd3abcb1636330010d59d59" - integrity sha512-vUwvZuSW6iN4JI9QRinh9EjFasx1TUtnaWMKwgWx08xz1PyYuNkLlWlrZXBZ5GGBhML0u230M/7X+AHY2h9yKg== +"@volar/source-map@2.2.4": + version "2.2.4" + resolved "https://registry.yarnpkg.com/@volar/source-map/-/source-map-2.2.4.tgz#15e50e2fc98e76e61711b6cc5d45872814a3e482" + integrity sha512-m92FLpR9vB1YEZfiZ+bfgpLrToL/DNkOrorWVep3pffHrwwI4Tx2oIQN+sqHJfKkiT5N3J1owC+8crhAEinfjg== dependencies: muggle-string "^0.4.0" -"@volar/typescript@~2.2.2": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@volar/typescript/-/typescript-2.2.2.tgz#b133919b5d1ef99f882916ddb62297766500843c" - integrity sha512-WcwOREz7+uOrpjUrKhOMaOKKmyPdtqF95HWX7SE0d9hhBB1KkfahxhaAex5U9Bn43LfINHlycLoYCNEtfeKm0g== +"@volar/typescript@~2.2.4": + version "2.2.4" + resolved "https://registry.yarnpkg.com/@volar/typescript/-/typescript-2.2.4.tgz#8f283d8e9769fed03d9e632a159152e2b3295af0" + integrity sha512-uAQC53tgEbHO62G8NXMfmBrJAlP2QJ9WxVEEQqqK3I6VSy8frL5LbH3hAWODxiwMWixv74wJLWlKbWXOgdIoRQ== dependencies: - "@volar/language-core" "2.2.2" + "@volar/language-core" "2.2.4" path-browserify "^1.0.1" "@vue/compiler-core@3.4.27": @@ -3296,12 +3017,12 @@ "@vue/compiler-dom" "3.4.27" "@vue/shared" "3.4.27" -"@vue/language-core@2.0.17": - version "2.0.17" - resolved "https://registry.yarnpkg.com/@vue/language-core/-/language-core-2.0.17.tgz#25ba5c7f4450790cc6cfaccf9805a6b91ada1bd7" - integrity sha512-tHw2J6G9yL4kn3jN5MftOHEq86Y6qnuohBQ1OHkJ73fAv3OYgwDI1cfX7ds0OEJEycOMG64BA3ql5bDgDa41zw== +"@vue/language-core@2.0.19": + version "2.0.19" + resolved "https://registry.yarnpkg.com/@vue/language-core/-/language-core-2.0.19.tgz#d55f9c1e92690c77ffd599688ba36c2b50c4303b" + integrity sha512-A9EGOnvb51jOvnCYoRLnMP+CcoPlbZVxI9gZXE/y2GksRWM6j/PrLEIC++pnosWTN08tFpJgxhSS//E9v/Sg+Q== dependencies: - "@volar/language-core" "~2.2.2" + "@volar/language-core" "~2.2.4" "@vue/compiler-dom" "^3.4.0" "@vue/shared" "^3.4.0" computeds "^0.0.1" @@ -3655,7 +3376,7 @@ anymatch@~3.1.2: arches-dev-dependencies@archesproject/arches-dev-dependencies#dev/7.6.x: version "7.6.0" - resolved "https://codeload.github.com/archesproject/arches-dev-dependencies/tar.gz/41f700e27576b9701d00d2a07a991f185868240a" + resolved "https://codeload.github.com/archesproject/arches-dev-dependencies/tar.gz/cf574f16c52ff6952b638654ef90211116f7d5e6" dependencies: "@babel/core" "^7.24.4" "@babel/eslint-parser" "^7.24.5" @@ -3663,6 +3384,7 @@ arches-dev-dependencies@archesproject/arches-dev-dependencies#dev/7.6.x: "@babel/plugin-transform-class-properties" "^7.24.1" "@babel/plugin-transform-runtime" "^7.24.3" "@babel/preset-env" "^7.24.2" + "@types/js-cookie" "^3.0.6" "@typescript-eslint/parser" "^8.0.0-alpha.11" "@vitejs/plugin-vue" "^5.0.4" "@vitest/coverage-v8" "^1.5.0" @@ -3683,7 +3405,6 @@ arches-dev-dependencies@archesproject/arches-dev-dependencies#dev/7.6.x: nodemon "^3.1.0" postcss "^8.4.38" postcss-loader "^8.1.1" - postcss-preset-env "^9.5.5" raw-loader "^4.0.2" sass "^1.75.0" sass-loader "^14.2.0" @@ -3780,18 +3501,6 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== -autoprefixer@^10.4.19: - version "10.4.19" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.19.tgz#ad25a856e82ee9d7898c59583c1afeb3fa65f89f" - integrity sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew== - dependencies: - browserslist "^4.23.0" - caniuse-lite "^1.0.30001599" - fraction.js "^4.3.7" - normalize-range "^0.1.2" - picocolors "^1.0.0" - postcss-value-parser "^4.2.0" - available-typed-arrays@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" @@ -3931,14 +3640,14 @@ brace-expansion@^2.0.1: dependencies: balanced-match "^1.0.0" -braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== +braces@^3.0.3, braces@~3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: - fill-range "^7.0.1" + fill-range "^7.1.1" -browserslist@^4.21.10, browserslist@^4.22.2, browserslist@^4.22.3, browserslist@^4.23.0: +browserslist@^4.21.10, browserslist@^4.22.2, browserslist@^4.23.0: version "4.23.0" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== @@ -4031,10 +3740,10 @@ camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -caniuse-lite@^1.0.30001587, caniuse-lite@^1.0.30001599: - version "1.0.30001618" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001618.tgz#fad74fa006aef0f01e8e5c0a5540c74d8d36ec6f" - integrity sha512-p407+D1tIkDvsEAPS22lJxLQQaG8OTBEqo0KhzfABGk0TU4juBNDSfH0hyAp/HRyx+M8L17z/ltyhxh27FTfQg== +caniuse-lite@^1.0.30001587: + version "1.0.30001620" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001620.tgz#78bb6f35b8fe315b96b8590597094145d0b146b4" + integrity sha512-WJvYsOjd1/BYUY6SNGUosK9DUidBPDTnOARHp3fSmFO1ekdxaY6nKRttEVrfMmYi80ctS0kz1wiWmm14fVc3ew== chai@^4.3.10: version "4.4.1" @@ -4393,27 +4102,11 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -css-blank-pseudo@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-6.0.2.tgz#50db072d4fb5b40c2df9ffe5ca5fbb9b19c77fc8" - integrity sha512-J/6m+lsqpKPqWHOifAFtKFeGLOzw3jR92rxQcwRUfA/eTuZzKfKlxOmYDx2+tqOPQAueNvBiY8WhAeHu5qNmTg== - dependencies: - postcss-selector-parser "^6.0.13" - css-functions-list@^3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/css-functions-list/-/css-functions-list-3.2.2.tgz#9a54c6dd8416ed25c1079cd88234e927526c1922" integrity sha512-c+N0v6wbKVxTu5gOBBFkr9BEdBWaqqjQeiJ8QvSRIJOf+UxlJh930m8e6/WNeODIK0mYLFkoONrnj16i2EcvfQ== -css-has-pseudo@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-6.0.5.tgz#372e7293ef9bb901ec0bdce85a6fc1365012fa2c" - integrity sha512-ZTv6RlvJJZKp32jPYnAJVhowDCrRrHUTAxsYSuUPBEDJjzws6neMnzkRblxtgmv1RgcV5dhH2gn7E3wA9Wt6lw== - dependencies: - "@csstools/selector-specificity" "^3.1.1" - postcss-selector-parser "^6.0.13" - postcss-value-parser "^4.2.0" - css-loader@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-7.1.1.tgz#de4163c0cb765c03d7957eb9e0a49c7f354948c7" @@ -4428,11 +4121,6 @@ css-loader@^7.1.1: postcss-value-parser "^4.2.0" semver "^7.5.4" -css-prefers-color-scheme@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-9.0.1.tgz#30fcb94cc38b639b66fb99e1882ffd97f741feaa" - integrity sha512-iFit06ochwCKPRiWagbTa1OAWCvWWVdEnIFd8BaRrgO8YrrNh4RAWUQTFcYX5tdFZgFl1DJ3iiULchZyEbnF4g== - css-select@^4.1.3: version "4.3.0" resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" @@ -4467,11 +4155,6 @@ csscolorparser@~1.0.3: resolved "https://registry.yarnpkg.com/csscolorparser/-/csscolorparser-1.0.3.tgz#b34f391eea4da8f3e98231e2ccd8df9c041f171b" integrity sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w== -cssdb@^8.0.0: - version "8.0.1" - resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-8.0.1.tgz#970b4d1890715625ba25999454e9c9aca7b1e809" - integrity sha512-diegY/vnOYmPXY0bOBj5jeHaiK8MMpjgPuipirY8pF9AthtqEXgqVdKF5tnb6RTc/ZdhQqG0TBnInQ5CbbUW7Q== - cssesc@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" @@ -5142,9 +4825,9 @@ ee-first@1.1.1: integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== electron-to-chromium@^1.4.668: - version "1.4.768" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.768.tgz#3795bd000ccb8978be1af2d06320b2dac810a372" - integrity sha512-z2U3QcvNuxdkk33YV7R1bVMNq7fL23vq3WfO5BHcqrm4TnDGReouBfYKLEFh5umoK1XACjEwp8mmnhXk2EJigw== + version "1.4.776" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.776.tgz#1580009f42f9f2ffc1b238e3d8d6e6baa7ca1682" + integrity sha512-s694bi3+gUzlliqxjPHpa9NRTlhzTgB34aan+pVKZmOTGy2xoZXl+8E1B8i5p5rtev3PKMK/H4asgNejC+YHNg== emoji-regex@^8.0.0: version "8.0.0" @@ -5283,9 +4966,9 @@ es-errors@^1.2.1, es-errors@^1.3.0: integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== es-module-lexer@^1.2.1: - version "1.5.2" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.5.2.tgz#00b423304f2500ac59359cc9b6844951f372d497" - integrity sha512-l60ETUTmLqbVbVHv1J4/qj+M8nq7AwMzEcg3kmJDt9dCNrTk+yHcYFf/Kw75pMDwd9mPcIGCG5LcS20SxYRzFA== + version "1.5.3" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.5.3.tgz#25969419de9c0b1fbe54279789023e8a9a788412" + integrity sha512-i1gCgmR9dCl6Vil6UKPI/trA69s08g/syhiDK9TG0Nf1RJjjFI+AzoWW7sPufzkgYAn861skuCwJa0pIIHYxvg== es-object-atoms@^1.0.0: version "1.0.0" @@ -5415,17 +5098,17 @@ eslint-visitor-keys@^4.0.0: integrity sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw== eslint@^9.0.0: - version "9.2.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.2.0.tgz#0700ebc99528753315d78090876911d3cdbf19fe" - integrity sha512-0n/I88vZpCOzO+PQpt0lbsqmn9AsnsJAQseIqhZFI8ibQT0U1AkEKRxA3EVMos0BoHSXDQvCXY25TUjB5tr8Og== + version "9.3.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.3.0.tgz#36a96db84592618d6ed9074d677e92f4e58c08b9" + integrity sha512-5Iv4CsZW030lpUqHBapdPo3MJetAPtejVW8B84GIcIIv8+ohFaddXsrn1Gn8uD9ijDb+kcYKFUVmC8qG8B2ORQ== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^3.0.2" - "@eslint/js" "9.2.0" + "@eslint/eslintrc" "^3.1.0" + "@eslint/js" "9.3.0" "@humanwhocodes/config-array" "^0.13.0" "@humanwhocodes/module-importer" "^1.0.1" - "@humanwhocodes/retry" "^0.2.3" + "@humanwhocodes/retry" "^0.3.0" "@nodelib/fs.walk" "^1.2.8" ajv "^6.12.4" chalk "^4.0.0" @@ -5665,10 +5348,10 @@ file-loader@^6.2.0: loader-utils "^2.0.0" schema-utils "^3.0.0" -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== dependencies: to-regex-range "^5.0.1" @@ -5790,11 +5473,6 @@ forwarded@0.2.0: resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== -fraction.js@^4.3.7: - version "4.3.7" - resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" - integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== - fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" @@ -7441,12 +7119,12 @@ mgrs@1.0.0: integrity sha512-awNbTOqCxK1DBGjalK3xqWIstBZgN6fxsMSiXLs9/spqWkF2pAhb2rrYCFSsr1/tT7PhcDGjZndG8SWYn0byYA== micromatch@^4.0.0, micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + version "4.0.6" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.6.tgz#ab4e37c42726b9cd788181ba4a2a4fead8e394a3" + integrity sha512-Y4Ypn3oujJYxJcMacVgcs92wofTHxp9FzfDpQON4msDefoC0lb3ETvQLOdLcbhSwU1bz8HrL/1sygfBIHudrkQ== dependencies: - braces "^3.0.2" - picomatch "^2.3.1" + braces "^3.0.3" + picomatch "^4.0.2" mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": version "1.52.0" @@ -7723,11 +7401,6 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== - normalize-url@^6.0.1: version "6.1.0" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" @@ -8078,11 +7751,16 @@ picocolors@^1.0.0, picocolors@^1.0.1: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +picomatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab" + integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== + pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -8154,137 +7832,6 @@ possible-typed-array-names@^1.0.0: resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== -postcss-attribute-case-insensitive@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-6.0.3.tgz#d118023911a768dfccfc0b0147f5ff06d8485806" - integrity sha512-KHkmCILThWBRtg+Jn1owTnHPnFit4OkqS+eKiGEOPIGke54DCeYGJ6r0Fx/HjfE9M9kznApCLcU0DvnPchazMQ== - dependencies: - postcss-selector-parser "^6.0.13" - -postcss-clamp@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/postcss-clamp/-/postcss-clamp-4.1.0.tgz#7263e95abadd8c2ba1bd911b0b5a5c9c93e02363" - integrity sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-color-functional-notation@^6.0.11: - version "6.0.11" - resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-6.0.11.tgz#6219b4762519115a397b870707c1a9926ecb52f6" - integrity sha512-gJ+hAtAsgBF4w7eh28Pg7EA60lx7vE5xO/B/yZawaI6FYHky+5avA9YSe73nJHnAMEVFpCMeJc6Wts5g+niksg== - dependencies: - "@csstools/css-color-parser" "^2.0.2" - "@csstools/css-parser-algorithms" "^2.6.3" - "@csstools/css-tokenizer" "^2.3.1" - "@csstools/postcss-progressive-custom-properties" "^3.2.0" - "@csstools/utilities" "^1.0.0" - -postcss-color-hex-alpha@^9.0.4: - version "9.0.4" - resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-9.0.4.tgz#f455902fb222453b2eb9699dfa9fc17a9c056f1e" - integrity sha512-XQZm4q4fNFqVCYMGPiBjcqDhuG7Ey2xrl99AnDJMyr5eDASsAGalndVgHZF8i97VFNy1GQeZc4q2ydagGmhelQ== - dependencies: - "@csstools/utilities" "^1.0.0" - postcss-value-parser "^4.2.0" - -postcss-color-rebeccapurple@^9.0.3: - version "9.0.3" - resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-9.0.3.tgz#63e14d9b9ab196e62e3491606a2b77a9531a6825" - integrity sha512-ruBqzEFDYHrcVq3FnW3XHgwRqVMrtEPLBtD7K2YmsLKVc2jbkxzzNEctJKsPCpDZ+LeMHLKRDoSShVefGc+CkQ== - dependencies: - "@csstools/utilities" "^1.0.0" - postcss-value-parser "^4.2.0" - -postcss-custom-media@^10.0.6: - version "10.0.6" - resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-10.0.6.tgz#e194ad7c9190390c20515d45661e9dcaaf031e84" - integrity sha512-BjihQoIO4Wjqv9fQNExSJIim8UAmkhLxuJnhJsLTRFSba1y1MhxkJK5awsM//6JJ+/Tu5QUxf624RQAvKHv6SA== - dependencies: - "@csstools/cascade-layer-name-parser" "^1.0.11" - "@csstools/css-parser-algorithms" "^2.6.3" - "@csstools/css-tokenizer" "^2.3.1" - "@csstools/media-query-list-parser" "^2.1.11" - -postcss-custom-properties@^13.3.10: - version "13.3.10" - resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-13.3.10.tgz#72a47708e6123f7757e419ad6f0bccb5f7a7ea6d" - integrity sha512-ejaalIpl7p0k0L5ngIZ86AZGmp3m1KdeOCbSQTK4gQcB1ncaoPTHorw206+tsZRIhIDYvh5ZButEje6740YDXw== - dependencies: - "@csstools/cascade-layer-name-parser" "^1.0.11" - "@csstools/css-parser-algorithms" "^2.6.3" - "@csstools/css-tokenizer" "^2.3.1" - "@csstools/utilities" "^1.0.0" - postcss-value-parser "^4.2.0" - -postcss-custom-selectors@^7.1.10: - version "7.1.10" - resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-7.1.10.tgz#caf0b4f2bccdfe9b106b000a56a1b50b8e48df92" - integrity sha512-bV/6+IExyT2J4kMzX6c+ZMlN1xDfjcC4ePr1ywKezcTgwgUn11qQN3jdzFBpo8Dk1K7vO/OYOwMb5AtJP4JZcg== - dependencies: - "@csstools/cascade-layer-name-parser" "^1.0.11" - "@csstools/css-parser-algorithms" "^2.6.3" - "@csstools/css-tokenizer" "^2.3.1" - postcss-selector-parser "^6.0.13" - -postcss-dir-pseudo-class@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-8.0.1.tgz#b93755f52fb90215301b1d3ecb7c5e6416930a1e" - integrity sha512-uULohfWBBVoFiZXgsQA24JV6FdKIidQ+ZqxOouhWwdE+qJlALbkS5ScB43ZTjPK+xUZZhlaO/NjfCt5h4IKUfw== - dependencies: - postcss-selector-parser "^6.0.13" - -postcss-double-position-gradients@^5.0.6: - version "5.0.6" - resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-5.0.6.tgz#fec69371a131b67ec92740bcf8c9ad6ce7f168d3" - integrity sha512-QJ+089FKMaqDxOhhIHsJrh4IP7h4PIHNC5jZP5PMmnfUScNu8Hji2lskqpFWCvu+5sj+2EJFyzKd13sLEWOZmQ== - dependencies: - "@csstools/postcss-progressive-custom-properties" "^3.2.0" - "@csstools/utilities" "^1.0.0" - postcss-value-parser "^4.2.0" - -postcss-focus-visible@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-9.0.1.tgz#eede1032ce86b3bb2556d93ca5df63c68dfc2559" - integrity sha512-N2VQ5uPz3Z9ZcqI5tmeholn4d+1H14fKXszpjogZIrFbhaq0zNAtq8sAnw6VLiqGbL8YBzsnu7K9bBkTqaRimQ== - dependencies: - postcss-selector-parser "^6.0.13" - -postcss-focus-within@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-8.0.1.tgz#524af4c7eabae35cb1efa220a7903016fcc897fa" - integrity sha512-NFU3xcY/xwNaapVb+1uJ4n23XImoC86JNwkY/uduytSl2s9Ekc2EpzmRR63+ExitnW3Mab3Fba/wRPCT5oDILA== - dependencies: - postcss-selector-parser "^6.0.13" - -postcss-font-variant@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz#efd59b4b7ea8bb06127f2d031bfbb7f24d32fa66" - integrity sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA== - -postcss-gap-properties@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-5.0.1.tgz#887b64655f42370b43f0ab266cc6dbabf504d276" - integrity sha512-k2z9Cnngc24c0KF4MtMuDdToROYqGMMUQGcE6V0odwjHyOHtaDBlLeRBV70y9/vF7KIbShrTRZ70JjsI1BZyWw== - -postcss-image-set-function@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-6.0.3.tgz#84c5e32cc1085198f2cf4a786028dae8a2632bb2" - integrity sha512-i2bXrBYzfbRzFnm+pVuxVePSTCRiNmlfssGI4H0tJQvDue+yywXwUxe68VyzXs7cGtMaH6MCLY6IbCShrSroCw== - dependencies: - "@csstools/utilities" "^1.0.0" - postcss-value-parser "^4.2.0" - -postcss-lab-function@^6.0.16: - version "6.0.16" - resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-6.0.16.tgz#08f5939ffc74803fcb20b7553d4eb3b3b873786c" - integrity sha512-QWv0VxfjgIl8jBR/wuQcm/o31jn4P/LwzYuVKzNQoO5t7HPcU0d3RfWUiDrHN3frmSv+YYZppr3P81tKFTDyqg== - dependencies: - "@csstools/css-color-parser" "^2.0.2" - "@csstools/css-parser-algorithms" "^2.6.3" - "@csstools/css-tokenizer" "^2.3.1" - "@csstools/postcss-progressive-custom-properties" "^3.2.0" - "@csstools/utilities" "^1.0.0" - postcss-loader@^8.1.1: version "8.1.1" resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-8.1.1.tgz#2822589e7522927344954acb55bbf26e8b195dfe" @@ -8294,13 +7841,6 @@ postcss-loader@^8.1.1: jiti "^1.20.0" semver "^7.5.4" -postcss-logical@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-7.0.1.tgz#a3121f6510591b195321b16e65fbe13b1cfd3115" - integrity sha512-8GwUQZE0ri0K0HJHkDv87XOLC8DE0msc+HoWLeKdtjDZEwpZ5xuK3QdV6FhmHSQW40LPkg43QzvATRAI3LsRkg== - dependencies: - postcss-value-parser "^4.2.0" - postcss-modules-extract-imports@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz#b4497cb85a9c0c4b5aabeb759bb25e8d89f15002" @@ -8329,117 +7869,6 @@ postcss-modules-values@^4.0.0: dependencies: icss-utils "^5.0.0" -postcss-nesting@^12.1.4: - version "12.1.4" - resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-12.1.4.tgz#b79451b22ac1abe96b9aa2f01b27a6f8c447d353" - integrity sha512-CcHOq94K137E+U4Ommu7pexcpp0Tjm24zl4UcqWs1oSLAr5cLI+jLrqQ5h/bdjhMX6cMbzunyustVNnvrzF8Zg== - dependencies: - "@csstools/selector-resolve-nested" "^1.1.0" - "@csstools/selector-specificity" "^3.1.1" - postcss-selector-parser "^6.0.13" - -postcss-opacity-percentage@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-opacity-percentage/-/postcss-opacity-percentage-2.0.0.tgz#c0a56060cd4586e3f954dbde1efffc2deed53002" - integrity sha512-lyDrCOtntq5Y1JZpBFzIWm2wG9kbEdujpNt4NLannF+J9c8CgFIzPa80YQfdza+Y+yFfzbYj/rfoOsYsooUWTQ== - -postcss-overflow-shorthand@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-5.0.1.tgz#c0a124edad4f7ad88109275a60510e1fb07ab833" - integrity sha512-XzjBYKLd1t6vHsaokMV9URBt2EwC9a7nDhpQpjoPk2HRTSQfokPfyAS/Q7AOrzUu6q+vp/GnrDBGuj/FCaRqrQ== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-page-break@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-3.0.4.tgz#7fbf741c233621622b68d435babfb70dd8c1ee5f" - integrity sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ== - -postcss-place@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-9.0.1.tgz#c08c46a94e639c1ee3457ac96d50c50a89bd6ac3" - integrity sha512-JfL+paQOgRQRMoYFc2f73pGuG/Aw3tt4vYMR6UA3cWVMxivviPTnMFnFTczUJOA4K2Zga6xgQVE+PcLs64WC8Q== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-preset-env@^9.5.5: - version "9.5.13" - resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-9.5.13.tgz#7dfab9cbcc35044fd7a0465f87f643249a66cf31" - integrity sha512-YQMwWu6MAc4Envrjf/mW2BTrb5J8WkrJ4dV2VostZVDhrmEPpYREOyhmvtlFLDxK1/AmTDY8aXjZViMC1qKu/w== - dependencies: - "@csstools/postcss-cascade-layers" "^4.0.6" - "@csstools/postcss-color-function" "^3.0.16" - "@csstools/postcss-color-mix-function" "^2.0.16" - "@csstools/postcss-exponential-functions" "^1.0.7" - "@csstools/postcss-font-format-keywords" "^3.0.2" - "@csstools/postcss-gamut-mapping" "^1.0.9" - "@csstools/postcss-gradients-interpolation-method" "^4.0.17" - "@csstools/postcss-hwb-function" "^3.0.15" - "@csstools/postcss-ic-unit" "^3.0.6" - "@csstools/postcss-initial" "^1.0.1" - "@csstools/postcss-is-pseudo-class" "^4.0.8" - "@csstools/postcss-light-dark-function" "^1.0.5" - "@csstools/postcss-logical-float-and-clear" "^2.0.1" - "@csstools/postcss-logical-overflow" "^1.0.1" - "@csstools/postcss-logical-overscroll-behavior" "^1.0.1" - "@csstools/postcss-logical-resize" "^2.0.1" - "@csstools/postcss-logical-viewport-units" "^2.0.9" - "@csstools/postcss-media-minmax" "^1.1.6" - "@csstools/postcss-media-queries-aspect-ratio-number-values" "^2.0.9" - "@csstools/postcss-nested-calc" "^3.0.2" - "@csstools/postcss-normalize-display-values" "^3.0.2" - "@csstools/postcss-oklab-function" "^3.0.16" - "@csstools/postcss-progressive-custom-properties" "^3.2.0" - "@csstools/postcss-relative-color-syntax" "^2.0.16" - "@csstools/postcss-scope-pseudo-class" "^3.0.1" - "@csstools/postcss-stepped-value-functions" "^3.0.8" - "@csstools/postcss-text-decoration-shorthand" "^3.0.6" - "@csstools/postcss-trigonometric-functions" "^3.0.8" - "@csstools/postcss-unset-value" "^3.0.1" - autoprefixer "^10.4.19" - browserslist "^4.22.3" - css-blank-pseudo "^6.0.2" - css-has-pseudo "^6.0.5" - css-prefers-color-scheme "^9.0.1" - cssdb "^8.0.0" - postcss-attribute-case-insensitive "^6.0.3" - postcss-clamp "^4.1.0" - postcss-color-functional-notation "^6.0.11" - postcss-color-hex-alpha "^9.0.4" - postcss-color-rebeccapurple "^9.0.3" - postcss-custom-media "^10.0.6" - postcss-custom-properties "^13.3.10" - postcss-custom-selectors "^7.1.10" - postcss-dir-pseudo-class "^8.0.1" - postcss-double-position-gradients "^5.0.6" - postcss-focus-visible "^9.0.1" - postcss-focus-within "^8.0.1" - postcss-font-variant "^5.0.0" - postcss-gap-properties "^5.0.1" - postcss-image-set-function "^6.0.3" - postcss-lab-function "^6.0.16" - postcss-logical "^7.0.1" - postcss-nesting "^12.1.4" - postcss-opacity-percentage "^2.0.0" - postcss-overflow-shorthand "^5.0.1" - postcss-page-break "^3.0.4" - postcss-place "^9.0.1" - postcss-pseudo-class-any-link "^9.0.2" - postcss-replace-overflow-wrap "^4.0.0" - postcss-selector-not "^7.0.2" - -postcss-pseudo-class-any-link@^9.0.2: - version "9.0.2" - resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-9.0.2.tgz#e436a7db1421f8a347fff3f19951a27d4e791987" - integrity sha512-HFSsxIqQ9nA27ahyfH37cRWGk3SYyQLpk0LiWw/UGMV4VKT5YG2ONee4Pz/oFesnK0dn2AjcyequDbIjKJgB0g== - dependencies: - postcss-selector-parser "^6.0.13" - -postcss-replace-overflow-wrap@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz#d2df6bed10b477bf9c52fab28c568b4b29ca4319" - integrity sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw== - postcss-resolve-nested-selector@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz#29ccbc7c37dedfac304e9fff0bf1596b3f6a0e4e" @@ -8450,14 +7879,7 @@ postcss-safe-parser@^7.0.0: resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-7.0.0.tgz#6273d4e5149e286db5a45bc6cf6eafcad464014a" integrity sha512-ovehqRNVCpuFzbXoTb4qLtyzK3xn3t/CUBxOs8LsnQjQrShaB4lKiHoVqY8ANaC0hBMHq5QVWk77rwGklFUDrg== -postcss-selector-not@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-7.0.2.tgz#f9184c7770be5dcb4abd7efa3610a15fbd2f0b31" - integrity sha512-/SSxf/90Obye49VZIfc0ls4H0P6i6V1iHv0pzZH8SdgvZOPFkF37ef1r5cyWcMflJSFJ5bfuoluTnFnBBFiuSA== - dependencies: - postcss-selector-parser "^6.0.13" - -postcss-selector-parser@^6.0.13, postcss-selector-parser@^6.0.15, postcss-selector-parser@^6.0.16, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: +postcss-selector-parser@^6.0.15, postcss-selector-parser@^6.0.16, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: version "6.0.16" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz#3b88b9f5c5abd989ef4e2fc9ec8eedd34b20fb04" integrity sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw== @@ -8997,9 +8419,9 @@ sass-loader@^14.2.0: neo-async "^2.6.2" sass@^1.75.0: - version "1.77.1" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.77.1.tgz#018cdfb206afd14724030c02e9fefd8f30a76cd0" - integrity sha512-OMEyfirt9XEfyvocduUIOlUSkWOXS/LAt6oblR/ISXCTukyavjex+zQNm51pPCOiFKY1QpWvEH1EeCkgyV3I6w== + version "1.77.2" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.77.2.tgz#18d4ed2eefc260cdc8099c5439ec1303fd5863aa" + integrity sha512-eb4GZt1C3avsX3heBNlrc7I09nyT00IUuo4eFhAbeXWU2fvA7oXI53SxODVAA+zgZCk9aunAZgO+losjR3fAwA== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" @@ -9361,7 +8783,7 @@ std-env@^3.5.0: resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.7.0.tgz#c9f7386ced6ecf13360b6c6c55b8aaa4ef7481d2" integrity sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg== -"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -9378,6 +8800,15 @@ string-width@^2.0.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" +string-width@^4.1.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" @@ -9429,7 +8860,7 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -9443,6 +8874,13 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + strip-ansi@^7.0.1, strip-ansi@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" @@ -9922,13 +9360,13 @@ typedarray@^0.0.6: integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== typescript-eslint@^8.0.0-alpha.11: - version "8.0.0-alpha.11" - resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.0.0-alpha.11.tgz#f9098e1dbdcf2ca7ebb05edeea480ea0af42b5cb" - integrity sha512-bV2ovYumF93wNwDK1YWhXOqQVO5Omupy+fqlx52RRbLwSuI0Aw57hQtc0C8am8T/jOhzlKZnmRbJ3KJPCixvYA== + version "8.0.0-alpha.14" + resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.0.0-alpha.14.tgz#ec1ba16601239fd2cd2ec888017dc58eb857b15b" + integrity sha512-Un2y0pbBCdvmk2YsY/S/oftSA/4tEZtRMfewHlXJ43LBR07V2HSXPC/t6RJ29KZ+N5ORqe61QUQLupquVBPZhQ== dependencies: - "@typescript-eslint/eslint-plugin" "8.0.0-alpha.11" - "@typescript-eslint/parser" "8.0.0-alpha.11" - "@typescript-eslint/utils" "8.0.0-alpha.11" + "@typescript-eslint/eslint-plugin" "8.0.0-alpha.14" + "@typescript-eslint/parser" "8.0.0-alpha.14" + "@typescript-eslint/utils" "8.0.0-alpha.14" "typescript@4 - 5", typescript@^5.4.5: version "5.4.5" @@ -10184,9 +9622,9 @@ vt-pbf@^3.1.1: pbf "^3.2.1" vue-component-type-helpers@^2.0.0: - version "2.0.17" - resolved "https://registry.yarnpkg.com/vue-component-type-helpers/-/vue-component-type-helpers-2.0.17.tgz#4d143094717734cecc5fd88d1209f12c7ae33009" - integrity sha512-2car49m8ciqg/JjgMBkx7o/Fd2A7fHESxNqL/2vJYFLXm4VwYO4yH0rexOi4a35vwNgDyvt17B07Vj126l9rAQ== + version "2.0.19" + resolved "https://registry.yarnpkg.com/vue-component-type-helpers/-/vue-component-type-helpers-2.0.19.tgz#545988c2abade4744a0dcc2b6a68f8e4ac40cccc" + integrity sha512-cN3f1aTxxKo4lzNeQAkVopswuImUrb5Iurll9Gaw5cqpnbTAxtEMM1mgi6ou4X79OCyqYv1U1mzBHJkzmiK82w== vue-eslint-parser@^9.4.2: version "9.4.2" @@ -10219,12 +9657,12 @@ vue-template-compiler@^2.7.14, vue-template-compiler@^2.7.16: he "^1.2.0" vue-tsc@^2.0.13: - version "2.0.17" - resolved "https://registry.yarnpkg.com/vue-tsc/-/vue-tsc-2.0.17.tgz#bd1c7704c454169b3fcb893421226be99ccae4bf" - integrity sha512-RRZsiCBD1hvATQb321xV+SkRDKsK5hgFQ4WXy5wuYsyyjz8xAK4DjxHkpH7PFoJKUbZTbeW8KzhejzXZS49Tzw== + version "2.0.19" + resolved "https://registry.yarnpkg.com/vue-tsc/-/vue-tsc-2.0.19.tgz#db0158a36b7e3773d31855fad5185554bbc7584f" + integrity sha512-JWay5Zt2/871iodGF72cELIbcAoPyhJxq56mPPh+M2K7IwI688FMrFKc/+DvB05wDWEuCPexQJ6L10zSwzzapg== dependencies: - "@volar/typescript" "~2.2.2" - "@vue/language-core" "2.0.17" + "@volar/typescript" "~2.2.4" + "@vue/language-core" "2.0.19" semver "^7.5.4" vue3-gettext@^3.0.0-beta.4: From 985dd7f797dc91950897f86cd45872147145bb2d Mon Sep 17 00:00:00 2001 From: Jacob Walls Date: Wed, 22 May 2024 10:20:17 -0400 Subject: [PATCH 213/242] Fix issue, add test --- arches/management/commands/whatisthis.py | 2 +- tests/commands/test_whatisthis.py | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/arches/management/commands/whatisthis.py b/arches/management/commands/whatisthis.py index 2d87b25a13a..4fdf2230e94 100644 --- a/arches/management/commands/whatisthis.py +++ b/arches/management/commands/whatisthis.py @@ -43,7 +43,7 @@ def find_uuid(self, in_uuid): self.stdout.write("This UUID is the primary key for {} object{}:".format(len(objs), "s" if len(objs) > 1 else "")) for o in objs: self.stdout.write(80 * "-") - self.stdout.write(o) + self.stdout.write(str(o)) keys = list(vars(o).keys()) keys.sort() for k in keys: diff --git a/tests/commands/test_whatisthis.py b/tests/commands/test_whatisthis.py index 533b72a34d5..6cdbeb48533 100644 --- a/tests/commands/test_whatisthis.py +++ b/tests/commands/test_whatisthis.py @@ -6,11 +6,19 @@ from django.core.management import call_command +from arches.app.models.graph import Graph from tests.base_test import ArchesTestCase class WhatIsThisTests(ArchesTestCase): arbitrary_uuid = uuid.uuid4() + def test_match(self): + g = Graph.new() + out = StringIO() + call_command("whatisthis", str(g.pk), stdout=out) + # Produces hits on graph and node + self.assertIn("This UUID is the primary key for 2 objects:", out.getvalue()) + def test_no_match(self): out = StringIO() call_command("whatisthis", str(self.arbitrary_uuid), stdout=out) From fe098c8be21756eb422450c2fa3ebbc6f805482f Mon Sep 17 00:00:00 2001 From: Christopher Byrd Date: Thu, 23 May 2024 15:17:27 -0700 Subject: [PATCH 214/242] hardens webpack when finding settings.py #10970 --- .../webpack/webpack-utils/find-file.js | 20 ++++ .../webpack/webpack.common.js | 92 +++++++++++-------- webpack/webpack-utils/find-file.js | 20 ++++ webpack/webpack.common.js | 92 +++++++++++-------- 4 files changed, 146 insertions(+), 78 deletions(-) create mode 100644 arches/install/arches-templates/webpack/webpack-utils/find-file.js create mode 100644 webpack/webpack-utils/find-file.js diff --git a/arches/install/arches-templates/webpack/webpack-utils/find-file.js b/arches/install/arches-templates/webpack/webpack-utils/find-file.js new file mode 100644 index 00000000000..c6c7936549f --- /dev/null +++ b/arches/install/arches-templates/webpack/webpack-utils/find-file.js @@ -0,0 +1,20 @@ +const fs = require('fs'); +const Path = require('path'); + +function findFile(path, target) { + for (const name of fs.readdirSync(path)) { + const filePath = Path.join(path, name); + const stat = fs.lstatSync(filePath); + + if (stat.isDirectory() && name !== 'node_modules') { + const result = findFile(filePath, target); + if (result) { + return result; + } + } else if (name === target) { + return filePath; + } + } +} + +module.exports = { findFile }; diff --git a/arches/install/arches-templates/webpack/webpack.common.js b/arches/install/arches-templates/webpack/webpack.common.js index 2831c848c21..54cb7868e14 100644 --- a/arches/install/arches-templates/webpack/webpack.common.js +++ b/arches/install/arches-templates/webpack/webpack.common.js @@ -11,6 +11,7 @@ const { CleanWebpackPlugin } = require('clean-webpack-plugin'); const { spawn } = require("child_process"); const { VueLoaderPlugin } = require("vue-loader"); +const { findFile } = require('./webpack-utils/find-file'); const { buildImageFilePathLookup } = require('./webpack-utils/build-image-filepath-lookup'); const { buildJavascriptFilepathLookup } = require('./webpack-utils/build-javascript-filepath-lookup'); const { buildTemplateFilePathLookup } = require('./webpack-utils/build-template-filepath-lookup'); @@ -18,29 +19,7 @@ const { buildCSSFilepathLookup } = require('./webpack-utils/build-css-filepath-l module.exports = () => { return new Promise((resolve, _reject) => { - const createWebpackConfig = function (data) { // reads from application's settings.py - if (!data) { - console.error( - '\x1b[31m%s\x1b[0m', // red - "Webpack did not receive application data! Aborting..." - ) - return; - } - // prevents subsequent builds, this usually happens when using application containers. - projectSettings.stdout.removeAllListeners() - - const parsedData = JSON.parse(data); - console.log('Data imported from settings.py:', parsedData) - - const APP_ROOT = parsedData['APP_ROOT']; - const ARCHES_APPLICATIONS = parsedData['ARCHES_APPLICATIONS']; - const ARCHES_APPLICATIONS_PATHS = parsedData['ARCHES_APPLICATIONS_PATHS']; - const SITE_PACKAGES_DIRECTORY = parsedData['SITE_PACKAGES_DIRECTORY']; - const ROOT_DIR = parsedData['ROOT_DIR']; - const STATIC_URL = parsedData['STATIC_URL'] - const PUBLIC_SERVER_ADDRESS = parsedData['PUBLIC_SERVER_ADDRESS'] - const WEBPACK_DEVELOPMENT_SERVER_PORT = parsedData['WEBPACK_DEVELOPMENT_SERVER_PORT'] - + const createWebpackConfig = function () { // BEGIN workaround for handling node_modules paths in arches-core vs projects let PROJECT_RELATIVE_NODE_MODULES_PATH; @@ -510,23 +489,58 @@ module.exports = () => { }; // BEGIN get data from `settings.py` - const parentDir = Path.basename(Path.dirname(__dirname)); - - let projectSettings = spawn( - 'python', - [Path.resolve(Path.dirname(__dirname), parentDir, 'settings.py')] - ); - projectSettings.stderr.on("data", process.stderr.write); - projectSettings.stdout.on("data", createWebpackConfig); - - projectSettings.on('error', () => { - projectSettings = spawn( - 'python3', - [Path.resolve(Path.dirname(__dirname), parentDir, 'settings.py')] - ); + const settingsFilePath = findFile(Path.dirname(__dirname), 'settings.py') + + const runPythonScript = (pythonCommand) => { + let projectSettings = spawn(pythonCommand, [settingsFilePath]); + projectSettings.stderr.on("data", process.stderr.write); - projectSettings.stdout.on("data", createWebpackConfig); - }); + projectSettings.stdout.on("data", function(data) { + if (!data) { + console.error( + '\x1b[31m%s\x1b[0m', // red + "Webpack did not receive application data! Aborting..." + ) + return; + } + + const parsedData = JSON.parse(data); + console.log('Data imported from settings.py:', parsedData) + + global.APP_ROOT = parsedData['APP_ROOT']; + global.ARCHES_APPLICATIONS = parsedData['ARCHES_APPLICATIONS']; + global.ARCHES_APPLICATIONS_PATHS = parsedData['ARCHES_APPLICATIONS_PATHS']; + global.SITE_PACKAGES_DIRECTORY = parsedData['SITE_PACKAGES_DIRECTORY']; + global.ROOT_DIR = parsedData['ROOT_DIR']; + global.STATIC_URL = parsedData['STATIC_URL'] + global.PUBLIC_SERVER_ADDRESS = parsedData['PUBLIC_SERVER_ADDRESS'] + global.WEBPACK_DEVELOPMENT_SERVER_PORT = parsedData['WEBPACK_DEVELOPMENT_SERVER_PORT'] + + createWebpackConfig() + }); + projectSettings.on('close', (code) => { + if (code !== 0) { + console.error( + '\x1b[31m%s\x1b[0m', // red + `Could not successfully read ${settingsFilePath}, exited with code: ${code}.` + ); + } + }); + + projectSettings.on('error', () => { + if (pythonCommand === 'python') { + runPythonScript('python3'); + } + else { + console.error( + '\x1b[31m%s\x1b[0m', // red + `Could not successfully read ${settingsFilePath} with ${pythonCommand}, error occurred.` + ); + } + }); + }; + + runPythonScript('python'); // END get data from `settings.py` }); }; diff --git a/webpack/webpack-utils/find-file.js b/webpack/webpack-utils/find-file.js new file mode 100644 index 00000000000..c6c7936549f --- /dev/null +++ b/webpack/webpack-utils/find-file.js @@ -0,0 +1,20 @@ +const fs = require('fs'); +const Path = require('path'); + +function findFile(path, target) { + for (const name of fs.readdirSync(path)) { + const filePath = Path.join(path, name); + const stat = fs.lstatSync(filePath); + + if (stat.isDirectory() && name !== 'node_modules') { + const result = findFile(filePath, target); + if (result) { + return result; + } + } else if (name === target) { + return filePath; + } + } +} + +module.exports = { findFile }; diff --git a/webpack/webpack.common.js b/webpack/webpack.common.js index 2831c848c21..54cb7868e14 100644 --- a/webpack/webpack.common.js +++ b/webpack/webpack.common.js @@ -11,6 +11,7 @@ const { CleanWebpackPlugin } = require('clean-webpack-plugin'); const { spawn } = require("child_process"); const { VueLoaderPlugin } = require("vue-loader"); +const { findFile } = require('./webpack-utils/find-file'); const { buildImageFilePathLookup } = require('./webpack-utils/build-image-filepath-lookup'); const { buildJavascriptFilepathLookup } = require('./webpack-utils/build-javascript-filepath-lookup'); const { buildTemplateFilePathLookup } = require('./webpack-utils/build-template-filepath-lookup'); @@ -18,29 +19,7 @@ const { buildCSSFilepathLookup } = require('./webpack-utils/build-css-filepath-l module.exports = () => { return new Promise((resolve, _reject) => { - const createWebpackConfig = function (data) { // reads from application's settings.py - if (!data) { - console.error( - '\x1b[31m%s\x1b[0m', // red - "Webpack did not receive application data! Aborting..." - ) - return; - } - // prevents subsequent builds, this usually happens when using application containers. - projectSettings.stdout.removeAllListeners() - - const parsedData = JSON.parse(data); - console.log('Data imported from settings.py:', parsedData) - - const APP_ROOT = parsedData['APP_ROOT']; - const ARCHES_APPLICATIONS = parsedData['ARCHES_APPLICATIONS']; - const ARCHES_APPLICATIONS_PATHS = parsedData['ARCHES_APPLICATIONS_PATHS']; - const SITE_PACKAGES_DIRECTORY = parsedData['SITE_PACKAGES_DIRECTORY']; - const ROOT_DIR = parsedData['ROOT_DIR']; - const STATIC_URL = parsedData['STATIC_URL'] - const PUBLIC_SERVER_ADDRESS = parsedData['PUBLIC_SERVER_ADDRESS'] - const WEBPACK_DEVELOPMENT_SERVER_PORT = parsedData['WEBPACK_DEVELOPMENT_SERVER_PORT'] - + const createWebpackConfig = function () { // BEGIN workaround for handling node_modules paths in arches-core vs projects let PROJECT_RELATIVE_NODE_MODULES_PATH; @@ -510,23 +489,58 @@ module.exports = () => { }; // BEGIN get data from `settings.py` - const parentDir = Path.basename(Path.dirname(__dirname)); - - let projectSettings = spawn( - 'python', - [Path.resolve(Path.dirname(__dirname), parentDir, 'settings.py')] - ); - projectSettings.stderr.on("data", process.stderr.write); - projectSettings.stdout.on("data", createWebpackConfig); - - projectSettings.on('error', () => { - projectSettings = spawn( - 'python3', - [Path.resolve(Path.dirname(__dirname), parentDir, 'settings.py')] - ); + const settingsFilePath = findFile(Path.dirname(__dirname), 'settings.py') + + const runPythonScript = (pythonCommand) => { + let projectSettings = spawn(pythonCommand, [settingsFilePath]); + projectSettings.stderr.on("data", process.stderr.write); - projectSettings.stdout.on("data", createWebpackConfig); - }); + projectSettings.stdout.on("data", function(data) { + if (!data) { + console.error( + '\x1b[31m%s\x1b[0m', // red + "Webpack did not receive application data! Aborting..." + ) + return; + } + + const parsedData = JSON.parse(data); + console.log('Data imported from settings.py:', parsedData) + + global.APP_ROOT = parsedData['APP_ROOT']; + global.ARCHES_APPLICATIONS = parsedData['ARCHES_APPLICATIONS']; + global.ARCHES_APPLICATIONS_PATHS = parsedData['ARCHES_APPLICATIONS_PATHS']; + global.SITE_PACKAGES_DIRECTORY = parsedData['SITE_PACKAGES_DIRECTORY']; + global.ROOT_DIR = parsedData['ROOT_DIR']; + global.STATIC_URL = parsedData['STATIC_URL'] + global.PUBLIC_SERVER_ADDRESS = parsedData['PUBLIC_SERVER_ADDRESS'] + global.WEBPACK_DEVELOPMENT_SERVER_PORT = parsedData['WEBPACK_DEVELOPMENT_SERVER_PORT'] + + createWebpackConfig() + }); + projectSettings.on('close', (code) => { + if (code !== 0) { + console.error( + '\x1b[31m%s\x1b[0m', // red + `Could not successfully read ${settingsFilePath}, exited with code: ${code}.` + ); + } + }); + + projectSettings.on('error', () => { + if (pythonCommand === 'python') { + runPythonScript('python3'); + } + else { + console.error( + '\x1b[31m%s\x1b[0m', // red + `Could not successfully read ${settingsFilePath} with ${pythonCommand}, error occurred.` + ); + } + }); + }; + + runPythonScript('python'); // END get data from `settings.py` }); }; From c5552f14786938d9b8a83788a7aafadc08b7c5e5 Mon Sep 17 00:00:00 2001 From: Christopher Byrd Date: Thu, 23 May 2024 15:22:34 -0700 Subject: [PATCH 215/242] nit #10970 --- .../arches-templates/webpack/webpack.common.js | 12 ++++++------ webpack/webpack.common.js | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/arches/install/arches-templates/webpack/webpack.common.js b/arches/install/arches-templates/webpack/webpack.common.js index 54cb7868e14..30367bfb10e 100644 --- a/arches/install/arches-templates/webpack/webpack.common.js +++ b/arches/install/arches-templates/webpack/webpack.common.js @@ -500,23 +500,23 @@ module.exports = () => { console.error( '\x1b[31m%s\x1b[0m', // red "Webpack did not receive application data! Aborting..." - ) + ); return; } const parsedData = JSON.parse(data); - console.log('Data imported from settings.py:', parsedData) + console.log('Data imported from settings.py:', parsedData); global.APP_ROOT = parsedData['APP_ROOT']; global.ARCHES_APPLICATIONS = parsedData['ARCHES_APPLICATIONS']; global.ARCHES_APPLICATIONS_PATHS = parsedData['ARCHES_APPLICATIONS_PATHS']; global.SITE_PACKAGES_DIRECTORY = parsedData['SITE_PACKAGES_DIRECTORY']; global.ROOT_DIR = parsedData['ROOT_DIR']; - global.STATIC_URL = parsedData['STATIC_URL'] - global.PUBLIC_SERVER_ADDRESS = parsedData['PUBLIC_SERVER_ADDRESS'] - global.WEBPACK_DEVELOPMENT_SERVER_PORT = parsedData['WEBPACK_DEVELOPMENT_SERVER_PORT'] + global.STATIC_URL = parsedData['STATIC_URL']; + global.PUBLIC_SERVER_ADDRESS = parsedData['PUBLIC_SERVER_ADDRESS']; + global.WEBPACK_DEVELOPMENT_SERVER_PORT = parsedData['WEBPACK_DEVELOPMENT_SERVER_PORT']; - createWebpackConfig() + createWebpackConfig(); }); projectSettings.on('close', (code) => { if (code !== 0) { diff --git a/webpack/webpack.common.js b/webpack/webpack.common.js index 54cb7868e14..30367bfb10e 100644 --- a/webpack/webpack.common.js +++ b/webpack/webpack.common.js @@ -500,23 +500,23 @@ module.exports = () => { console.error( '\x1b[31m%s\x1b[0m', // red "Webpack did not receive application data! Aborting..." - ) + ); return; } const parsedData = JSON.parse(data); - console.log('Data imported from settings.py:', parsedData) + console.log('Data imported from settings.py:', parsedData); global.APP_ROOT = parsedData['APP_ROOT']; global.ARCHES_APPLICATIONS = parsedData['ARCHES_APPLICATIONS']; global.ARCHES_APPLICATIONS_PATHS = parsedData['ARCHES_APPLICATIONS_PATHS']; global.SITE_PACKAGES_DIRECTORY = parsedData['SITE_PACKAGES_DIRECTORY']; global.ROOT_DIR = parsedData['ROOT_DIR']; - global.STATIC_URL = parsedData['STATIC_URL'] - global.PUBLIC_SERVER_ADDRESS = parsedData['PUBLIC_SERVER_ADDRESS'] - global.WEBPACK_DEVELOPMENT_SERVER_PORT = parsedData['WEBPACK_DEVELOPMENT_SERVER_PORT'] + global.STATIC_URL = parsedData['STATIC_URL']; + global.PUBLIC_SERVER_ADDRESS = parsedData['PUBLIC_SERVER_ADDRESS']; + global.WEBPACK_DEVELOPMENT_SERVER_PORT = parsedData['WEBPACK_DEVELOPMENT_SERVER_PORT']; - createWebpackConfig() + createWebpackConfig(); }); projectSettings.on('close', (code) => { if (code !== 0) { From cf51e36fa4e25860bb872c3dd54d80ce21ab3e1b Mon Sep 17 00:00:00 2001 From: Galen Date: Fri, 24 May 2024 00:06:09 -0700 Subject: [PATCH 216/242] creates url for get_i18n_data, replace hardcoded in create-vue-app, re archesproject#10974 --- arches/app/media/js/utils/create-vue-application.js | 3 ++- arches/app/templates/javascript.htm | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/arches/app/media/js/utils/create-vue-application.js b/arches/app/media/js/utils/create-vue-application.js index f182484e26f..9fbc526a43b 100644 --- a/arches/app/media/js/utils/create-vue-application.js +++ b/arches/app/media/js/utils/create-vue-application.js @@ -6,6 +6,7 @@ import FocusTrap from 'primevue/focustrap'; import StyleClass from 'primevue/styleclass'; import ToastService from 'primevue/toastservice'; import Tooltip from 'primevue/tooltip'; +import arches from 'arches'; import { createApp } from 'vue'; import { createGettext } from "vue3-gettext"; @@ -24,7 +25,7 @@ export default async function createVueApplication(vueComponent){ * TODO: cbyrd #10501 - we should add an event listener that will re-fetch i18n data * and rebuild the app when a specific event is fired from the LanguageSwitcher component. **/ - return fetch('/api/get_frontend_i18n_data').then(resp => { + return fetch(arches.urls.api_get_frontend_i18n_data).then(resp => { if (!resp.ok) { throw new Error(resp.statusText); } diff --git a/arches/app/templates/javascript.htm b/arches/app/templates/javascript.htm index ec9b8fca1ae..53a5ae62c2b 100644 --- a/arches/app/templates/javascript.htm +++ b/arches/app/templates/javascript.htm @@ -1049,6 +1049,7 @@ api_resources='(resourceid)=>{return "{% url "resources" "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" %}".replace("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", resourceid)}' api_search_component_data='"{% url "api_search_component_data" "aaaa"%}".replace("aaaa", "")' api_user_incomplete_workflows="{% url 'api_user_incomplete_workflows' %}" + api_get_frontend_i18n_data="{% url 'get_frontend_i18n_data' %}" geojson="{% url 'geojson' %}" icons="{% url 'icons' %}" ontology_properties="{% url 'ontology_properties' %}" From b8dc09344696be4eedc487bd93327312f00a3c92 Mon Sep 17 00:00:00 2001 From: Galen Mancino Date: Wed, 29 May 2024 07:53:45 -0700 Subject: [PATCH 217/242] Fix for boolean datatype validation (#10937) --- arches/app/utils/string_utils.py | 2 +- tests/utils/datatype_tests.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/arches/app/utils/string_utils.py b/arches/app/utils/string_utils.py index e6596c4b887..8ce5ec86b62 100644 --- a/arches/app/utils/string_utils.py +++ b/arches/app/utils/string_utils.py @@ -1,5 +1,5 @@ def str_to_bool(value): - match value: + match value.lower(): case "y" | "yes" | "t" | "true" | "on" | "1": return True case "n" | "no" | "f" | "false" | "off" | "0": diff --git a/tests/utils/datatype_tests.py b/tests/utils/datatype_tests.py index 77f69dc4334..f71e582cb4e 100644 --- a/tests/utils/datatype_tests.py +++ b/tests/utils/datatype_tests.py @@ -40,12 +40,12 @@ class BooleanDataTypeTests(ArchesTestCase): def test_validate(self): boolean = DataTypeFactory().get_instance("boolean") - for good in ["true", "false", "yes", "no", None]: + for good in ["true", "True", "false", "False", "yes", "no", None]: with self.subTest(input=good): no_errors = boolean.validate(good) self.assertEqual(len(no_errors), 0) - for bad in ["garbage", "True", "False", "None"]: + for bad in ["garbage", "str", "None"]: with self.subTest(input=bad): errors = boolean.validate(bad) self.assertEqual(len(errors), 1) From 908e949b74a068f7328eb445eb82555d4048ae08 Mon Sep 17 00:00:00 2001 From: Phil Weir Date: Sat, 24 Jun 2023 14:13:40 +0100 Subject: [PATCH 218/242] centralize permissions imports --- arches/app/models/models.py | 19 ----------------- arches/app/models/permissions.py | 22 ++++++++++++++++++++ arches/app/models/resource.py | 3 +-- arches/app/models/system_settings.py | 2 +- arches/app/views/graph.py | 2 +- arches/app/views/map.py | 3 +-- arches/app/views/resource.py | 2 +- arches/management/commands/add_test_users.py | 2 +- 8 files changed, 28 insertions(+), 27 deletions(-) create mode 100644 arches/app/models/permissions.py diff --git a/arches/app/models/models.py b/arches/app/models/models.py index 60c3bdd5d36..abf258495ac 100644 --- a/arches/app/models/models.py +++ b/arches/app/models/models.py @@ -39,8 +39,6 @@ from django.contrib.auth.models import Group from django.contrib.contenttypes.models import ContentType from django.core.validators import validate_slug -from guardian.models import GroupObjectPermission -from guardian.shortcuts import assign_perm # can't use "arches.app.models.system_settings.SystemSettings" because of circular refernce issue # so make sure the only settings we use in this file are ones that are static (fixed at run time) @@ -1417,23 +1415,6 @@ def save_profile(sender, instance, **kwargs): UserProfile.objects.get_or_create(user=instance) -@receiver(post_save, sender=User) -def create_permissions_for_new_users(sender, instance, created, **kwargs): - from arches.app.models.resource import Resource - - if created: - ct = ContentType.objects.get(app_label="models", model="resourceinstance") - resourceInstanceIds = list(GroupObjectPermission.objects.filter(content_type=ct).values_list("object_pk", flat=True).distinct()) - for resourceInstanceId in resourceInstanceIds: - resourceInstanceId = uuid.UUID(resourceInstanceId) - resources = ResourceInstance.objects.filter(pk__in=resourceInstanceIds) - assign_perm("no_access_to_resourceinstance", instance, resources) - for resource_instance in resources: - resource = Resource(resource_instance.resourceinstanceid) - resource.graph_id = resource_instance.graph_id - resource.createdtime = resource_instance.createdtime - resource.index() - class UserXTask(models.Model): id = models.UUIDField(primary_key=True, serialize=False) diff --git a/arches/app/models/permissions.py b/arches/app/models/permissions.py new file mode 100644 index 00000000000..bfc8d955b53 --- /dev/null +++ b/arches/app/models/permissions.py @@ -0,0 +1,22 @@ +from django.db.models.signals import post_delete, pre_save, post_save +from arches.app.utils.permission_backend import GroupObjectPermission, assign_perm + +from arches.app.models.models import User, ContentType, ResourceInstance + +@receiver(post_save, sender=User) +def create_permissions_for_new_users(sender, instance, created, **kwargs): + from arches.app.models.resource import Resource + + if created: + ct = ContentType.objects.get(app_label="models", model="resourceinstance") + resourceInstanceIds = list(GroupObjectPermission.objects.filter(content_type=ct).values_list("object_pk", flat=True).distinct()) + for resourceInstanceId in resourceInstanceIds: + resourceInstanceId = uuid.UUID(resourceInstanceId) + resources = ResourceInstance.objects.filter(pk__in=resourceInstanceIds) + assign_perm("no_access_to_resourceinstance", instance, resources) + for resource_instance in resources: + resource = Resource(resource_instance.resourceinstanceid) + resource.graph_id = resource_instance.graph_id + resource.createdtime = resource_instance.createdtime + resource.index() + diff --git a/arches/app/models/resource.py b/arches/app/models/resource.py index b4d6d1812bd..8280fb3144c 100644 --- a/arches/app/models/resource.py +++ b/arches/app/models/resource.py @@ -40,8 +40,7 @@ from arches.app.utils import import_class_from_string, task_management from arches.app.utils.label_based_graph import LabelBasedGraph from arches.app.utils.label_based_graph_v2 import LabelBasedGraph as LabelBasedGraphV2 -from guardian.shortcuts import assign_perm, remove_perm -from guardian.exceptions import NotUserNorGroup +from arches.app.utils.permission_backend import assign_perm, remove_perm, NotUserNorGroup from arches.app.utils.betterJSONSerializer import JSONSerializer, JSONDeserializer from arches.app.utils.exceptions import ( InvalidNodeNameException, diff --git a/arches/app/models/system_settings.py b/arches/app/models/system_settings.py index 1bd92816e4a..1a3af6b68c6 100644 --- a/arches/app/models/system_settings.py +++ b/arches/app/models/system_settings.py @@ -19,7 +19,7 @@ from django.conf import LazySettings from django.db import ProgrammingError, OperationalError from django.utils.functional import empty -from arches.app.models import models +from arches.app.models import models, permissions class SystemSettings(LazySettings): diff --git a/arches/app/views/graph.py b/arches/app/views/graph.py index 76cc0dd2455..800583fcb65 100644 --- a/arches/app/views/graph.py +++ b/arches/app/views/graph.py @@ -45,7 +45,7 @@ from arches.app.utils.data_management.resource_graphs import importer as GraphImporter from arches.app.utils.system_metadata import system_metadata from arches.app.views.base import BaseManagerView -from guardian.shortcuts import assign_perm, get_perms, remove_perm, get_group_perms, get_user_perms +from arches.app.utils.permission_backend import assign_perm, get_perms, remove_perm, get_group_perms, get_user_perms from io import BytesIO from elasticsearch.exceptions import RequestError from django.core.cache import cache diff --git a/arches/app/views/map.py b/arches/app/views/map.py index 3eca63c7654..0e7d9854fc8 100644 --- a/arches/app/views/map.py +++ b/arches/app/views/map.py @@ -20,7 +20,6 @@ from django.http import Http404 from django.utils.translation import gettext as _ from django.utils.decorators import method_decorator -from guardian.shortcuts import get_users_with_perms, get_groups_with_perms from revproxy.views import ProxyView from arches.app.models import models from arches.app.models.system_settings import settings @@ -30,7 +29,7 @@ from arches.app.utils.betterJSONSerializer import JSONSerializer, JSONDeserializer from arches.app.utils.decorators import group_required from arches.app.utils.response import JSONResponse -from arches.app.utils.permission_backend import get_users_for_object, get_groups_for_object +from arches.app.utils.permission_backend import get_users_for_object, get_groups_for_object, get_users_with_perms, get_groups_with_perms from arches.app.search.search_engine_factory import SearchEngineFactory from arches.app.search.elasticsearch_dsl_builder import Query, Bool, GeoBoundsAgg, Term from arches.app.search.mappings import RESOURCES_INDEX diff --git a/arches/app/views/resource.py b/arches/app/views/resource.py index ea266274dc0..55de3346d1e 100644 --- a/arches/app/views/resource.py +++ b/arches/app/views/resource.py @@ -65,7 +65,7 @@ from arches.app.views.concept import Concept from arches.app.datatypes.datatypes import DataTypeFactory from elasticsearch import Elasticsearch -from guardian.shortcuts import ( +from arches.app.utils.permission_backend import ( assign_perm, get_perms, remove_perm, diff --git a/arches/management/commands/add_test_users.py b/arches/management/commands/add_test_users.py index eb10f709f83..f2fbb889bf6 100644 --- a/arches/management/commands/add_test_users.py +++ b/arches/management/commands/add_test_users.py @@ -20,7 +20,7 @@ from django.contrib.auth.models import User from django.contrib.auth.models import Group from django.contrib.auth.models import Permission -from guardian.shortcuts import assign_perm +from arches.app.utils.permission_backend import assign_perm from arches.app.models import models class Command(BaseCommand): From ee569f81ebfbb04d06dcf4515597f28fb51b83bc Mon Sep 17 00:00:00 2001 From: Phil Weir Date: Sat, 24 Jun 2023 14:28:39 +0100 Subject: [PATCH 219/242] resolve circular imports --- arches/app/models/system_settings.py | 2 +- arches/wsgi.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/arches/app/models/system_settings.py b/arches/app/models/system_settings.py index 1a3af6b68c6..1bd92816e4a 100644 --- a/arches/app/models/system_settings.py +++ b/arches/app/models/system_settings.py @@ -19,7 +19,7 @@ from django.conf import LazySettings from django.db import ProgrammingError, OperationalError from django.utils.functional import empty -from arches.app.models import models, permissions +from arches.app.models import models class SystemSettings(LazySettings): diff --git a/arches/wsgi.py b/arches/wsgi.py index 8ef7da98770..3966b411b14 100644 --- a/arches/wsgi.py +++ b/arches/wsgi.py @@ -35,5 +35,6 @@ application = get_wsgi_application() from arches.app.models.system_settings import settings +from arches.app.models import permissions settings.update_from_db() From 8fbe465cdbcfe28be748be6c164e5291b44257f8 Mon Sep 17 00:00:00 2001 From: Phil Weir Date: Sat, 24 Jun 2023 18:06:42 +0100 Subject: [PATCH 220/242] initial attempt to centralize permissions --- arches/app/models/models.py | 6 + arches/app/models/permissions.py | 22 - arches/app/utils/permission_backend.py | 488 ++++-------------- .../utils/permissions/arches_default_deny.py | 28 + .../app/utils/permissions/arches_standard.py | 434 ++++++++++++++++ arches/app/utils/permissions/casbin.py | 28 + arches/settings.py | 1 - 7 files changed, 598 insertions(+), 409 deletions(-) delete mode 100644 arches/app/models/permissions.py create mode 100644 arches/app/utils/permissions/arches_default_deny.py create mode 100644 arches/app/utils/permissions/arches_standard.py create mode 100644 arches/app/utils/permissions/casbin.py diff --git a/arches/app/models/models.py b/arches/app/models/models.py index abf258495ac..ab8b2335d75 100644 --- a/arches/app/models/models.py +++ b/arches/app/models/models.py @@ -1529,6 +1529,12 @@ class Meta: managed = True db_table = "user_x_notification_types" +@receiver(post_save, sender=User) +def create_permissions_for_new_users(sender, instance, created, **kwargs): + from arches.app.utils.permission_backend import process_new_user + + if created: + process_new_user(instance, created) @receiver(post_save, sender=UserXNotification) def send_email_on_save(sender, instance, **kwargs): diff --git a/arches/app/models/permissions.py b/arches/app/models/permissions.py deleted file mode 100644 index bfc8d955b53..00000000000 --- a/arches/app/models/permissions.py +++ /dev/null @@ -1,22 +0,0 @@ -from django.db.models.signals import post_delete, pre_save, post_save -from arches.app.utils.permission_backend import GroupObjectPermission, assign_perm - -from arches.app.models.models import User, ContentType, ResourceInstance - -@receiver(post_save, sender=User) -def create_permissions_for_new_users(sender, instance, created, **kwargs): - from arches.app.models.resource import Resource - - if created: - ct = ContentType.objects.get(app_label="models", model="resourceinstance") - resourceInstanceIds = list(GroupObjectPermission.objects.filter(content_type=ct).values_list("object_pk", flat=True).distinct()) - for resourceInstanceId in resourceInstanceIds: - resourceInstanceId = uuid.UUID(resourceInstanceId) - resources = ResourceInstance.objects.filter(pk__in=resourceInstanceIds) - assign_perm("no_access_to_resourceinstance", instance, resources) - for resource_instance in resources: - resource = Resource(resource_instance.resourceinstanceid) - resource.graph_id = resource_instance.graph_id - resource.createdtime = resource_instance.createdtime - resource.index() - diff --git a/arches/app/utils/permission_backend.py b/arches/app/utils/permission_backend.py index d6d38b43085..bfacc687dc3 100644 --- a/arches/app/utils/permission_backend.py +++ b/arches/app/utils/permission_backend.py @@ -1,281 +1,25 @@ +from abc import abstractmethod import inspect from arches.app.models.models import * from arches.app.models.system_settings import settings -from guardian.backends import check_support, ObjectPermissionBackend -from django.core.exceptions import ObjectDoesNotExist -from guardian.core import ObjectPermissionChecker -from guardian.shortcuts import ( - get_perms, - get_group_perms, - get_user_perms, - get_users_with_perms, -) -from guardian.models import GroupObjectPermission, UserObjectPermission -from guardian.exceptions import WrongAppError -from django.contrib.auth.models import User, Group -from django.contrib.gis.db.models import Model -from django.core.cache import caches -from arches.app.models.models import ResourceInstance, MapLayer -from arches.app.search.elasticsearch_dsl_builder import Bool, Query, Terms, Nested -from arches.app.search.mappings import RESOURCES_INDEX - - -class PermissionBackend(ObjectPermissionBackend): - def has_perm(self, user_obj, perm, obj=None): - # check if user_obj and object are supported (pulled directly from guardian) - support, user_obj = check_support(user_obj, obj) - if not support: - return False - - if "." in perm: - app_label, perm = perm.split(".") - if app_label != obj._meta.app_label: - raise WrongAppError("Passed perm has app label of '%s' and " "given obj has '%s'" % (app_label, obj._meta.app_label)) - - ObjPermissionChecker = CachedObjectPermissionChecker(user_obj, obj) - explicitly_defined_perms = ObjPermissionChecker.get_perms(obj) - - if len(explicitly_defined_perms) > 0: - if "no_access_to_nodegroup" in explicitly_defined_perms: - return False - else: - return bool(perm in explicitly_defined_perms) - else: - UserPermissionChecker = CachedUserPermissionChecker(user_obj) - return bool(UserPermissionChecker.user_has_permission(perm)) - - -def get_restricted_users(resource): - """ - Takes a resource instance and identifies which users are explicitly restricted from - reading, editing, deleting, or accessing it. - - """ - user_perms = get_users_with_perms(resource, attach_perms=True, with_group_users=False) - user_and_group_perms = get_users_with_perms(resource, attach_perms=True, with_group_users=True) - - result = { - "no_access": [], - "cannot_read": [], - "cannot_write": [], - "cannot_delete": [], - } - - for user, perms in user_and_group_perms.items(): - if user.is_superuser: - pass - elif user in user_perms and "no_access_to_resourceinstance" in user_perms[user]: - for k, v in result.items(): - v.append(user.id) - else: - if "view_resourceinstance" not in perms: - result["cannot_read"].append(user.id) - if "change_resourceinstance" not in perms: - result["cannot_write"].append(user.id) - if "delete_resourceinstance" not in perms: - result["cannot_delete"].append(user.id) - if "no_access_to_resourceinstance" in perms and len(perms) == 1: - result["no_access"].append(user.id) - - return result - - -def get_restricted_instances(user, search_engine=None, allresources=False): - if allresources is False and user.is_superuser is True: - return [] +class NotUserNorGroup(Exception): + ... - if allresources is True: - restricted_group_instances = { - perm["object_pk"] - for perm in GroupObjectPermission.objects.filter(permission__codename="no_access_to_resourceinstance").values("object_pk") - } - restricted_user_instances = { - perm["object_pk"] - for perm in UserObjectPermission.objects.filter(permission__codename="no_access_to_resourceinstance").values("object_pk") - } - all_restricted_instances = list(restricted_group_instances | restricted_user_instances) - return all_restricted_instances - else: - terms = Terms(field="permissions.users_with_no_access", terms=[str(user.id)]) - query = Query(search_engine, start=0, limit=settings.SEARCH_RESULT_LIMIT) - has_access = Bool() - nested_term_filter = Nested(path="permissions", query=terms) - has_access.must(nested_term_filter) - query.add_query(has_access) - results = query.search(index=RESOURCES_INDEX, scroll="1m") - scroll_id = results["_scroll_id"] - total = results["hits"]["total"]["value"] - if total > settings.SEARCH_RESULT_LIMIT: - pages = total // settings.SEARCH_RESULT_LIMIT - for page in range(pages): - results_scrolled = query.se.es.scroll(scroll_id=scroll_id, scroll="1m") - results["hits"]["hits"] += results_scrolled["hits"]["hits"] - restricted_ids = [res["_id"] for res in results["hits"]["hits"]] - return restricted_ids - - -def get_groups_for_object(perm, obj): - """ - returns a list of group objects that have the given permission on the given object - - Arguments: - perm -- the permssion string eg: "read_nodegroup" - obj -- the model instance to check - - """ - - def has_group_perm(group, perm, obj): - explicitly_defined_perms = get_perms(group, obj) - if len(explicitly_defined_perms) > 0: - if "no_access_to_nodegroup" in explicitly_defined_perms: - return False - else: - return perm in explicitly_defined_perms - else: - default_perms = [] - for permission in group.permissions.all(): - if perm in permission.codename: - return True - return False - - ret = [] - for group in Group.objects.all(): - if has_group_perm(group, perm, obj): - ret.append(group) - return ret - - -def get_users_for_object(perm, obj): - """ - returns a list of user objects that have the given permission on the given object - Arguments: - perm -- the permssion string eg: "read_nodegroup" - obj -- the model instance to check - - """ - - ret = [] - for user in User.objects.all(): - if user.has_perm(perm, obj): - ret.append(user) - return ret - - -def get_nodegroups_by_perm(user, perms, any_perm=True): - """ - returns a list of node groups that a user has the given permission on - - Arguments: - user -- the user to check - perms -- the permssion string eg: "read_nodegroup" or list of strings - any_perm -- True to check ANY perm in "perms" or False to check ALL perms - - """ - if not isinstance(perms, list): - perms = [perms] - - formatted_perms = [] - # in some cases, `perms` can have a `model.` prefix - for perm in perms: - if len(perm.split(".")) > 1: - formatted_perms.append(perm.split(".")[1]) - else: - formatted_perms.append(perm) - - permitted_nodegroups = set() - NodegroupPermissionsChecker = CachedObjectPermissionChecker(user, NodeGroup) - - for nodegroup in NodeGroup.objects.all(): - explicit_perms = NodegroupPermissionsChecker.get_perms(nodegroup) - - if len(explicit_perms): - if any_perm: - if len(set(formatted_perms) & set(explicit_perms)): - permitted_nodegroups.add(nodegroup) - else: - if set(formatted_perms) == set(explicit_perms): - permitted_nodegroups.add(nodegroup) - else: # if no explicit permissions, object is considered accessible by all with group permissions - permitted_nodegroups.add(nodegroup) - - return permitted_nodegroups - - -def get_map_layers_by_perm(user, perms, any_perm=True): - """ - returns a list of node groups that a user has the given permission on - - Arguments: - user -- the user to check - perms -- the permssion string eg: "read_map_layer" or list of strings - any_perm -- True to check ANY perm in "perms" or False to check ALL perms - - """ - - if not isinstance(perms, list): - perms = [perms] - - formatted_perms = [] - # in some cases, `perms` can have a `model.` prefix - for perm in perms: - if len(perm.split(".")) > 1: - formatted_perms.append(perm.split(".")[1]) - else: - formatted_perms.append(perm) - - if user.is_superuser is True: - return MapLayer.objects.all() - else: - permitted_map_layers = list() +class PermissionBackend: + def __init__(self): + self._backend = _get_permission_backend() - user_permissions = ObjectPermissionChecker(user) + def authenticate(self, request, username=None, password=None): + return self._backend.authenticate(request, username=username, password=password) - for map_layer in MapLayer.objects.all(): - if map_layer.addtomap is True and map_layer.isoverlay is False: - permitted_map_layers.append(map_layer) - else: # if no explicit permissions, object is considered accessible by all with group permissions - explicit_map_layer_perms = user_permissions.get_perms(map_layer) - if len(explicit_map_layer_perms): - if any_perm: - if len(set(formatted_perms) & set(explicit_map_layer_perms)): - permitted_map_layers.append(map_layer) - else: - if set(formatted_perms) == set(explicit_map_layer_perms): - permitted_map_layers.append(map_layer) - elif map_layer.ispublic: - permitted_map_layers.append(map_layer) - - return permitted_map_layers - - -def user_can_read_map_layers(user): - - map_layers_with_read_permission = get_map_layers_by_perm(user, ["models.read_maplayer"]) - map_layers_allowed = [] - - for map_layer in map_layers_with_read_permission: - if ("no_access_to_maplayer" not in get_user_perms(user, map_layer)) or ( - map_layer.addtomap is False and map_layer.isoverlay is False - ): - map_layers_allowed.append(map_layer) - - return map_layers_allowed - - -def user_can_write_map_layers(user): - map_layers_with_write_permission = get_map_layers_by_perm(user, ["models.write_maplayer"]) - map_layers_allowed = [] - - for map_layer in map_layers_with_write_permission: - if ("no_access_to_maplayer" not in get_user_perms(user, map_layer)) or ( - map_layer.addtomap is False and map_layer.isoverlay is False - ): - map_layers_allowed.append(map_layer) + def has_perm(self, user_obj, perm, obj=None): + return self._backend.has_perm(user_obj, perm, obj=obj) - return map_layers_allowed + def get_all_permissions(self, user_obj, obj=None): + return self._backend.get_all_permissions(user_obj, obj=obj) def get_editable_resource_types(user): @@ -352,91 +96,22 @@ def user_can_delete_model_nodegroups(user, resource): return user_has_resource_model_permissions(user, ["models.delete_nodegroup"], resource) -def user_can_read_graph(user, graph_id): - """ - returns a boolean denoting if a user has permmission to read a model's nodegroups - - Arguments: - user -- the user to check - graph_id -- a graph id to check if a user has permissions to that graph's type specifically - - """ - - return user_has_resource_model_permissions(user, ["models.read_nodegroup"], graph_id=graph_id) - - -def user_has_resource_model_permissions(user, perms, resource=None, graph_id=None): +def user_has_resource_model_permissions(user, perms, resource): """ Checks if a user has any explicit permissions to a model's nodegroups Arguments: user -- the user to check perms -- the permssion string eg: "read_nodegroup" or list of strings - graph_id -- a graph id to check if a user has permissions to that graph's type specifically + resource -- a resource instance to check if a user has permissions to that resource's type specifically """ - if resource: - graph_id = resource.graph_id - nodegroups = get_nodegroups_by_perm(user, perms) - nodes = Node.objects.filter(nodegroup__in=nodegroups).filter(graph_id=graph_id).select_related("graph") + nodes = Node.objects.filter(nodegroup__in=nodegroups).filter(graph_id=resource.graph_id).select_related("graph") return nodes.exists() -def check_resource_instance_permissions(user, resourceid, permission): - """ - Checks if a user has permission to access a resource instance - - Arguments: - user -- the user to check - resourceid -- the id of the resource - permission -- the permission codename (e.g. 'view_resourceinstance') for which to check - - """ - result = {} - try: - if resourceid == settings.SYSTEM_SETTINGS_RESOURCE_ID: - if not user.groups.filter(name="System Administrator").exists(): - result["permitted"] = False - return result - - resource = ResourceInstance.objects.get(resourceinstanceid=resourceid) - result["resource"] = resource - - all_perms = get_perms(user, resource) - - if len(all_perms) == 0: # no permissions assigned. permission implied - result["permitted"] = "unknown" - return result - else: - user_permissions = get_user_perms(user, resource) - if "no_access_to_resourceinstance" in user_permissions: # user is restricted - result["permitted"] = False - return result - elif permission in user_permissions: # user is permitted - result["permitted"] = True - return result - - group_permissions = get_group_perms(user, resource) - if "no_access_to_resourceinstance" in group_permissions: # group is restricted - no user override - result["permitted"] = False - return result - elif permission in group_permissions: # group is permitted - no user override - result["permitted"] = True - return result - - if permission not in all_perms: # neither user nor group explicitly permits or restricts. - result["permitted"] = False # restriction implied - return result - - except ObjectDoesNotExist: - result["permitted"] = True # if the object does not exist, no harm in returning true - this prevents strange 403s. - return result - - return result - - def user_can_read_resource(user, resourceid=None): """ Requires that a user be able to read an instance and read a single nodegroup of a resource @@ -556,66 +231,107 @@ def user_created_transaction(user, transactionid): return True return False +class PermissionFramework(metaclass=ABCMeta): + @abstractmethod + def assign_perm(self, perm, user_or_group, obj=None): + ... -class CachedObjectPermissionChecker: - """ - A permission checker that leverages the 'user_permission' cache to check object-level user permissions. - """ + @abstractmethod + def remove_perm(self, perm, user_or_group=None, obj=None): + ... - def __new__(cls, user, input): - if inspect.isclass(input): - classname = input.__name__ - elif isinstance(input, Model): - classname = input.__class__.__name__ - elif isinstance(input, str) and globals().get(input): - classname = input - else: - raise Exception("Cannot derive model from input.") + @abstractmethod + def get_permission_backend(self): + ... - user_permission_cache = caches["user_permission"] + @abstractmethod + def get_restricted_users(self, resource): + ... - current_user_cached_permissions = user_permission_cache.get(str(user.pk), {}) + @abstractmethod + def get_restricted_instances(self, user, search_engine=None, allresources=False): + ... - if current_user_cached_permissions.get(classname): - checker = current_user_cached_permissions.get(classname) - else: - checker = ObjectPermissionChecker(user) - checker.prefetch_perms(globals()[classname].objects.all()) + @abstractmethod + def get_groups_for_object(self, perm, obj): + ... - current_user_cached_permissions[classname] = checker - user_permission_cache.set(str(user.pk), current_user_cached_permissions) + @abstractmethod + def get_users_for_object(self, perm, obj): + ... - return checker + @abstractmethod + def check_resource_instance_permissions(self, user, resourceid, permission): + ... + @abstractmethod + def get_nodegroups_by_perm(self, user, perms, any_perm=True): + ... -class CachedUserPermissionChecker: - """ - A permission checker that leverages the 'user_permission' cache to check user-level user permissions. - """ + @abstractmethod + def get_map_layers_by_perm(self, user, perms, any_perm=True): + ... + + @abstractmethod + def user_can_read_map_layers(self, user): + ... - def __init__(self, user): - user_permission_cache = caches["user_permission"] - current_user_cached_permissions = user_permission_cache.get(str(user.pk), {}) + @abstractmethod + def user_can_write_map_layers(self, user): + ... - if current_user_cached_permissions.get("user_permissions"): - user_permissions = current_user_cached_permissions.get("user_permissions") + @abstractmethod + def process_new_user(self, instance, created): + ... + +_PERMISSION_FRAMEWORK = None + +def _get_permission_framework(): + global _PERMISSION_FRAMEWORK + if not _PERMISSION_FRAMEWORK: + if settings.PERMISSION_FRAMEWORK == "arches_default_deny": + from arches.app.utils.permissions.arches_standard import ArchesDefaultDenyPermissionFramework + _PERMISSION_FRAMEWORK = ArchesDefaultDenyPermissionFramework() else: - user_permissions = set() + from arches.app.utils.permissions.arches_standard import ArchesStandardPermissionFramework + _PERMISSION_FRAMEWORK = ArchesStandardPermissionFramework() + return _PERMISSION_FRAMEWORK - for group in user.groups.all(): - for group_permission in group.permissions.all(): - user_permissions.add(group_permission.codename) +def assign_perm(perm, user_or_group, obj=None): + return _get_permission_framework().assign_perm(perm, user_or_group, obj=obj) - for user_permission in user.user_permissions.all(): - user_permissions.add(user_permission.codename) +def remove_perm(perm, user_or_group=None, obj=None): + return _get_permission_framework().remove_perm(perm, user_or_group=user_or_group, obj=obj) - current_user_cached_permissions["user_permissions"] = user_permissions - user_permission_cache.set(str(user.pk), current_user_cached_permissions) +def _get_permission_backend(): + return _get_permission_framework().get_permission_backend() - self.user_permissions = user_permissions +def get_restricted_users(resource): + return _get_permission_framework().get_restricted_users(resource) - def user_has_permission(self, permission): - if permission in self.user_permissions: - return True - else: - return False +def get_restricted_instances(user, search_engine=None, allresources=False): + return _get_permission_framework().get_restricted_instances(user, search_engine=search_engine, allresources=allresources) + +def get_groups_for_object(perm, obj): + return _get_permission_framework().get_groups_for_object(perm, obj) + +def get_users_for_object(perm, obj): + return _get_permission_framework().get_users_for_object(perm, obj) + +def check_resource_instance_permissions(user, resourceid, permission): + return _get_permission_framework().check_resource_instance_permissions(user, resourceid, permission) + +def get_nodegroups_by_perm(user, perms, any_perm=True): + return _get_permission_framework().get_nodegroups_by_perm(user, perms, any_perm=any_perm) + +def get_map_layers_by_perm(user, perms, any_perm=True): + return _get_permission_framework().get_map_layers_by_perm(user, perms, any_perm=any_perm) + +def user_can_read_map_layers(user): + return _get_permission_framework().user_can_read_map_layers(user) + +def user_can_write_map_layers(user): + return _get_permission_framework().user_can_write_map_layers(user) + +def process_new_user(instance, created): + return _get_permission_framework().process_new_user(instance, created) diff --git a/arches/app/utils/permissions/arches_default_deny.py b/arches/app/utils/permissions/arches_default_deny.py new file mode 100644 index 00000000000..1ef9d32557f --- /dev/null +++ b/arches/app/utils/permissions/arches_default_deny.py @@ -0,0 +1,28 @@ +from arches.app.utils.permissions.arches_standard import ArchesStandardPermissionFramework + +class ArchesDefaultDenyPermissionFramework(ArchesStandardPermissionFramework): + def check_resource_instance_permissions(self, user, resourceid, permission): + result = super().check_resource_instance_permissions(user, resourceid, permission) + + if result and result.get("permitted", None) is not None: + # This is a safety check - we don't want an unpermissioned user + # defaulting to having access (allowing anonymous users is still + # possible by assigning appropriate group permissions). + if result["permitted"] == "unknown": + result["permitted"] = False + elif result["permitted"] == False: + + # This covers the case where one group denies permission and another + # allows it. Ideally, the deny would override (as normal in Arches) but + # this prevents us from having a default deny rule that another group + # can override (as deny rules in Arches must be explicit for a resource). + resource = ResourceInstance.objects.get(resourceinstanceid=resourceid) + user_permissions = get_user_perms(user, resource) + if "no_access_to_resourceinstance" not in user_permissions: + group_permissions = get_group_perms(user, resource) + + # This should correspond to the exact case we wish to flip. + if permission in group_permissions and len(group_permissions) > 1: + result["permitted"] = True + + return result diff --git a/arches/app/utils/permissions/arches_standard.py b/arches/app/utils/permissions/arches_standard.py new file mode 100644 index 00000000000..db344dfed05 --- /dev/null +++ b/arches/app/utils/permissions/arches_standard.py @@ -0,0 +1,434 @@ +from django.core.exceptions import ObjectDoesNotExist +from django.contrib.auth.models import User, Group +from django.contrib.gis.db.models import Model +from django.core.cache import caches +from guardian.backends import check_support, ObjectPermissionBackend +from guardian.core import ObjectPermissionChecker +from guardian.shortcuts import ( + get_perms, + get_group_perms, + get_user_perms, + get_users_with_perms, +) +from guardian.exceptions import NotUserNorGroup +from arches.app.models.resource import Resource + +from guardian.shortcuts import ( + get_perms, + get_group_perms, + get_user_perms, + get_users_with_perms, +) +from guardian.models import GroupObjectPermission, UserObjectPermission +from guardian.exceptions import WrongAppError +from guardian.shortcuts import assign_perm, get_perms, remove_perm, get_group_perms, get_user_perms + +from arches.app.models.models import User, ContentType, ResourceInstance +from arches.app.models.models import ResourceInstance, MapLayer +from arches.app.search.elasticsearch_dsl_builder import Bool, Query, Terms, Nested +from arches.app.search.mappings import RESOURCES_INDEX +from arches.app.utils.permission_backend import PermissionFramework, NotUserNorGroup as ArchesNotUserNorGroup + +class ArchesStandardPermissionFramework(PermissionFramework): + def setup(self): + ... + + def assign_perm(self, perm, user_or_group, obj=None): + try: + return assign_perm(perm, user_or_group, obj=None) + except NotUserNorGroup: + raise ArchesNotUserNorGroup() + + def remove_perm(self, perm, user_or_group=None, obj=None): + return remove_perm(perm, user_or_group=None, obj=None) + + def get_perms(self, user_or_group, obj): + return get_perms(user_or_group, obj) + + def get_group_perms(self, user_or_group, obj): + return get_group_perms(user_or_group, obj) + + def get_user_perms(self, user, obj): + return get_user_perms(user, obj) + + def process_new_user(self, user): + ct = ContentType.objects.get(app_label="models", model="resourceinstance") + resourceInstanceIds = list(GroupObjectPermission.objects.filter(content_type=ct).values_list("object_pk", flat=True).distinct()) + for resourceInstanceId in resourceInstanceIds: + resourceInstanceId = uuid.UUID(resourceInstanceId) + resources = ResourceInstance.objects.filter(pk__in=resourceInstanceIds) + self.assign_perm("no_access_to_resourceinstance", instance, resources) + for resource_instance in resources: + resource = Resource(resource_instance.resourceinstanceid) + resource.graph_id = resource_instance.graph_id + resource.createdtime = resource_instance.createdtime + resource.index() + + def get_map_layers_by_perm(self, user, perms, any_perm=True): + """ + returns a list of node groups that a user has the given permission on + + Arguments: + user -- the user to check + perms -- the permssion string eg: "read_map_layer" or list of strings + any_perm -- True to check ANY perm in "perms" or False to check ALL perms + + """ + + if not isinstance(perms, list): + perms = [perms] + + formatted_perms = [] + # in some cases, `perms` can have a `model.` prefix + for perm in perms: + if len(perm.split(".")) > 1: + formatted_perms.append(perm.split(".")[1]) + else: + formatted_perms.append(perm) + + if user.is_superuser is True: + return MapLayer.objects.all() + else: + permitted_map_layers = list() + + user_permissions = ObjectPermissionChecker(user) + + for map_layer in MapLayer.objects.all(): + if map_layer.addtomap is True and map_layer.isoverlay is False: + permitted_map_layers.append(map_layer) + else: # if no explicit permissions, object is considered accessible by all with group permissions + explicit_map_layer_perms = user_permissions.get_perms(map_layer) + if len(explicit_map_layer_perms): + if any_perm: + if len(set(formatted_perms) & set(explicit_map_layer_perms)): + permitted_map_layers.append(map_layer) + else: + if set(formatted_perms) == set(explicit_map_layer_perms): + permitted_map_layers.append(map_layer) + elif map_layer.ispublic: + permitted_map_layers.append(map_layer) + + return permitted_map_layers + + + def user_can_read_map_layers(self, user): + + map_layers_with_read_permission = get_map_layers_by_perm(user, ["models.read_maplayer"]) + map_layers_allowed = [] + + for map_layer in map_layers_with_read_permission: + if ("no_access_to_maplayer" not in get_user_perms(user, map_layer)) or ( + map_layer.addtomap is False and map_layer.isoverlay is False + ): + map_layers_allowed.append(map_layer) + + return map_layers_allowed + + + def user_can_write_map_layers(self, user): + map_layers_with_write_permission = get_map_layers_by_perm(user, ["models.write_maplayer"]) + map_layers_allowed = [] + + for map_layer in map_layers_with_write_permission: + if ("no_access_to_maplayer" not in get_user_perms(user, map_layer)) or ( + map_layer.addtomap is False and map_layer.isoverlay is False + ): + map_layers_allowed.append(map_layer) + + return map_layers_allowed + + def get_nodegroups_by_perm(self, user, perms, any_perm=True): + """ + returns a list of node groups that a user has the given permission on + + Arguments: + user -- the user to check + perms -- the permssion string eg: "read_nodegroup" or list of strings + any_perm -- True to check ANY perm in "perms" or False to check ALL perms + + """ + if not isinstance(perms, list): + perms = [perms] + + formatted_perms = [] + # in some cases, `perms` can have a `model.` prefix + for perm in perms: + if len(perm.split(".")) > 1: + formatted_perms.append(perm.split(".")[1]) + else: + formatted_perms.append(perm) + + permitted_nodegroups = set() + NodegroupPermissionsChecker = CachedObjectPermissionChecker(user, NodeGroup) + + for nodegroup in NodeGroup.objects.all(): + explicit_perms = NodegroupPermissionsChecker.get_perms(nodegroup) + + if len(explicit_perms): + if any_perm: + if len(set(formatted_perms) & set(explicit_perms)): + permitted_nodegroups.add(nodegroup) + else: + if set(formatted_perms) == set(explicit_perms): + permitted_nodegroups.add(nodegroup) + else: # if no explicit permissions, object is considered accessible by all with group permissions + permitted_nodegroups.add(nodegroup) + + return permitted_nodegroups + + def check_resource_instance_permissions(self, user, resourceid, permission): + """ + Checks if a user has permission to access a resource instance + + Arguments: + user -- the user to check + resourceid -- the id of the resource + permission -- the permission codename (e.g. 'view_resourceinstance') for which to check + + """ + result = {} + try: + if resourceid == settings.SYSTEM_SETTINGS_RESOURCE_ID: + if not user.groups.filter(name="System Administrator").exists(): + result["permitted"] = False + return result + + resource = ResourceInstance.objects.get(resourceinstanceid=resourceid) + result["resource"] = resource + + all_perms = self.get_perms(user, resource) + + if len(all_perms) == 0: # no permissions assigned. permission implied + result["permitted"] = "unknown" + return result + else: + user_permissions = self.get_user_perms(user, resource) + if "no_access_to_resourceinstance" in user_permissions: # user is restricted + result["permitted"] = False + return result + elif permission in user_permissions: # user is permitted + result["permitted"] = True + return result + + group_permissions = self.get_group_perms(user, resource) + if "no_access_to_resourceinstance" in group_permissions: # group is restricted - no user override + result["permitted"] = False + return result + elif permission in group_permissions: # group is permitted - no user override + result["permitted"] = True + return result + + if permission not in all_perms: # neither user nor group explicitly permits or restricts. + result["permitted"] = False # restriction implied + return result + + except ObjectDoesNotExist: + result["permitted"] = True # if the object does not exist, no harm in returning true - this prevents strange 403s. + return result + + return result + + def get_restricted_users(self, resource): + """ + Takes a resource instance and identifies which users are explicitly restricted from + reading, editing, deleting, or accessing it. + + """ + + user_perms = get_users_with_perms(resource, attach_perms=True, with_group_users=False) + user_and_group_perms = get_users_with_perms(resource, attach_perms=True, with_group_users=True) + + result = { + "no_access": [], + "cannot_read": [], + "cannot_write": [], + "cannot_delete": [], + } + + for user, perms in user_and_group_perms.items(): + if user.is_superuser: + pass + elif user in user_perms and "no_access_to_resourceinstance" in user_perms[user]: + for k, v in result.items(): + v.append(user.id) + else: + if "view_resourceinstance" not in perms: + result["cannot_read"].append(user.id) + if "change_resourceinstance" not in perms: + result["cannot_write"].append(user.id) + if "delete_resourceinstance" not in perms: + result["cannot_delete"].append(user.id) + if "no_access_to_resourceinstance" in perms and len(perms) == 1: + result["no_access"].append(user.id) + + return result + + def get_groups_for_object(self, perm, obj): + """ + returns a list of group objects that have the given permission on the given object + + Arguments: + perm -- the permssion string eg: "read_nodegroup" + obj -- the model instance to check + + """ + + def has_group_perm(group, perm, obj): + explicitly_defined_perms = self.get_perms(group, obj) + if len(explicitly_defined_perms) > 0: + if "no_access_to_nodegroup" in explicitly_defined_perms: + return False + else: + return perm in explicitly_defined_perms + else: + default_perms = [] + for permission in group.permissions.all(): + if perm in permission.codename: + return True + return False + + ret = [] + for group in Group.objects.all(): + if has_group_perm(group, perm, obj): + ret.append(group) + return ret + + + def get_users_for_object(self, perm, obj): + """ + returns a list of user objects that have the given permission on the given object + + Arguments: + perm -- the permssion string eg: "read_nodegroup" + obj -- the model instance to check + + """ + + ret = [] + for user in User.objects.all(): + if user.has_perm(perm, obj): + ret.append(user) + return ret + + + def get_restricted_instances(self, user, search_engine=None, allresources=False): + if allresources is False and user.is_superuser is True: + return [] + + if allresources is True: + restricted_group_instances = { + perm["object_pk"] + for perm in GroupObjectPermission.objects.filter(permission__codename="no_access_to_resourceinstance").values("object_pk") + } + restricted_user_instances = { + perm["object_pk"] + for perm in UserObjectPermission.objects.filter(permission__codename="no_access_to_resourceinstance").values("object_pk") + } + all_restricted_instances = list(restricted_group_instances | restricted_user_instances) + return all_restricted_instances + else: + terms = Terms(field="permissions.users_with_no_access", terms=[str(user.id)]) + query = Query(search_engine, start=0, limit=settings.SEARCH_RESULT_LIMIT) + has_access = Bool() + nested_term_filter = Nested(path="permissions", query=terms) + has_access.must(nested_term_filter) + query.add_query(has_access) + results = query.search(index=RESOURCES_INDEX, scroll="1m") + scroll_id = results["_scroll_id"] + total = results["hits"]["total"]["value"] + if total > settings.SEARCH_RESULT_LIMIT: + pages = total // settings.SEARCH_RESULT_LIMIT + for page in range(pages): + results_scrolled = query.se.es.scroll(scroll_id=scroll_id, scroll="1m") + results["hits"]["hits"] += results_scrolled["hits"]["hits"] + restricted_ids = [res["_id"] for res in results["hits"]["hits"]] + return restricted_ids + + + +class PermissionBackend(ObjectPermissionBackend): + def has_perm(self, user_obj, perm, obj=None): + # check if user_obj and object are supported (pulled directly from guardian) + support, user_obj = check_support(user_obj, obj) + if not support: + return False + + if "." in perm: + app_label, perm = perm.split(".") + if app_label != obj._meta.app_label: + raise WrongAppError("Passed perm has app label of '%s' and " "given obj has '%s'" % (app_label, obj._meta.app_label)) + + ObjPermissionChecker = CachedObjectPermissionChecker(user_obj, obj) + explicitly_defined_perms = ObjPermissionChecker.get_perms(obj) + + if len(explicitly_defined_perms) > 0: + if "no_access_to_nodegroup" in explicitly_defined_perms: + return False + else: + return bool(perm in explicitly_defined_perms) + else: + UserPermissionChecker = CachedUserPermissionChecker(user_obj) + return bool(UserPermissionChecker.user_has_permission(perm)) + + +class CachedUserPermissionChecker: + """ + A permission checker that leverages the 'user_permission' cache to check user-level user permissions. + """ + + def __init__(self, user): + user_permission_cache = caches["user_permission"] + current_user_cached_permissions = user_permission_cache.get(str(user.pk), {}) + + if current_user_cached_permissions.get("user_permissions"): + user_permissions = current_user_cached_permissions.get("user_permissions") + else: + user_permissions = set() + + for group in user.groups.all(): + for group_permission in group.permissions.all(): + user_permissions.add(group_permission.codename) + + for user_permission in user.user_permissions.all(): + user_permissions.add(user_permission.codename) + + current_user_cached_permissions["user_permissions"] = user_permissions + user_permission_cache.set(str(user.pk), current_user_cached_permissions) + + self.user_permissions = user_permissions + + def user_has_permission(self, permission): + if permission in self.user_permissions: + return True + else: + return False + +class CachedObjectPermissionChecker: + """ + A permission checker that leverages the 'user_permission' cache to check object-level user permissions. + """ + + def __new__(cls, user, input): + if inspect.isclass(input): + classname = input.__name__ + elif isinstance(input, Model): + classname = input.__class__.__name__ + elif isinstance(input, str) and globals().get(input): + classname = input + else: + raise Exception("Cannot derive model from input.") + + user_permission_cache = caches["user_permission"] + + current_user_cached_permissions = user_permission_cache.get(str(user.pk), {}) + + if current_user_cached_permissions.get(classname): + checker = current_user_cached_permissions.get(classname) + else: + checker = ObjectPermissionChecker(user) + checker.prefetch_perms(globals()[classname].objects.all()) + + current_user_cached_permissions[classname] = checker + user_permission_cache.set(str(user.pk), current_user_cached_permissions) + + return checker diff --git a/arches/app/utils/permissions/casbin.py b/arches/app/utils/permissions/casbin.py new file mode 100644 index 00000000000..1ef9d32557f --- /dev/null +++ b/arches/app/utils/permissions/casbin.py @@ -0,0 +1,28 @@ +from arches.app.utils.permissions.arches_standard import ArchesStandardPermissionFramework + +class ArchesDefaultDenyPermissionFramework(ArchesStandardPermissionFramework): + def check_resource_instance_permissions(self, user, resourceid, permission): + result = super().check_resource_instance_permissions(user, resourceid, permission) + + if result and result.get("permitted", None) is not None: + # This is a safety check - we don't want an unpermissioned user + # defaulting to having access (allowing anonymous users is still + # possible by assigning appropriate group permissions). + if result["permitted"] == "unknown": + result["permitted"] = False + elif result["permitted"] == False: + + # This covers the case where one group denies permission and another + # allows it. Ideally, the deny would override (as normal in Arches) but + # this prevents us from having a default deny rule that another group + # can override (as deny rules in Arches must be explicit for a resource). + resource = ResourceInstance.objects.get(resourceinstanceid=resourceid) + user_permissions = get_user_perms(user, resource) + if "no_access_to_resourceinstance" not in user_permissions: + group_permissions = get_group_perms(user, resource) + + # This should correspond to the exact case we wish to flip. + if permission in group_permissions and len(group_permissions) > 1: + result["permitted"] = True + + return result diff --git a/arches/settings.py b/arches/settings.py index a48c323df8d..2f61a5fbe6c 100644 --- a/arches/settings.py +++ b/arches/settings.py @@ -332,7 +332,6 @@ "oauth2_provider.backends.OAuth2Backend", "django.contrib.auth.backends.ModelBackend", # this is default "arches.app.utils.permission_backend.PermissionBackend", - "guardian.backends.ObjectPermissionBackend", "arches.app.utils.external_oauth_backend.ExternalOauthAuthenticationBackend", ) From 2a1ddde15a0e171215aa867d442167fa8c2ede52 Mon Sep 17 00:00:00 2001 From: Phil Weir Date: Sat, 24 Jun 2023 19:28:38 +0100 Subject: [PATCH 221/242] make permissions framework settable --- arches/app/utils/permission_backend.py | 20 ++++++++++++++++++- .../app/utils/permissions/arches_standard.py | 17 ++++++++++------ arches/settings.py | 2 ++ 3 files changed, 32 insertions(+), 7 deletions(-) diff --git a/arches/app/utils/permission_backend.py b/arches/app/utils/permission_backend.py index bfacc687dc3..a185938d221 100644 --- a/arches/app/utils/permission_backend.py +++ b/arches/app/utils/permission_backend.py @@ -1,4 +1,4 @@ -from abc import abstractmethod +from abc import abstractmethod, ABCMeta import inspect from arches.app.models.models import * @@ -333,5 +333,23 @@ def user_can_read_map_layers(user): def user_can_write_map_layers(user): return _get_permission_framework().user_can_write_map_layers(user) +def get_users_with_perms(obj, attach_perms=False, with_superusers=False, with_group_users=True, only_with_perms_in=None): + return _get_permission_framework().get_users_with_perms(obj, attach_perms=attach_perms, with_superusers=with_superuesrs, with_group_users=with_group_users, only_with_perms_in=only_with_perms_in) + +def get_groups_with_perms(obj, attach_perms=False, with_superusers=False, with_group_users=True, only_with_perms_in=None): + return _get_permission_framework().get_groups_with_perms(obj, attach_perms=attach_perms, with_superusers=with_superusers, with_group_users=with_group_users, only_with_perms_in=only_with_perms_in) + +def get_user_perms(user, obj): + return _get_permission_framework().get_user_perms(user, obj) + +def get_group_perms(user_or_group, obj): + return _get_permission_framework().get_group_perms(user_or_group, obj) + +def get_perms_for_model(cls): + return _get_permission_framework().get_perms_for_model(cls) + +def get_perms(user_or_group, obj): + return _get_permission_framework().get_perms(user_or_group, obj) + def process_new_user(instance, created): return _get_permission_framework().process_new_user(instance, created) diff --git a/arches/app/utils/permissions/arches_standard.py b/arches/app/utils/permissions/arches_standard.py index db344dfed05..2dcf2336133 100644 --- a/arches/app/utils/permissions/arches_standard.py +++ b/arches/app/utils/permissions/arches_standard.py @@ -9,16 +9,12 @@ get_group_perms, get_user_perms, get_users_with_perms, + get_groups_with_perms, + get_perms_for_model, ) from guardian.exceptions import NotUserNorGroup from arches.app.models.resource import Resource -from guardian.shortcuts import ( - get_perms, - get_group_perms, - get_user_perms, - get_users_with_perms, -) from guardian.models import GroupObjectPermission, UserObjectPermission from guardian.exceptions import WrongAppError from guardian.shortcuts import assign_perm, get_perms, remove_perm, get_group_perms, get_user_perms @@ -33,6 +29,9 @@ class ArchesStandardPermissionFramework(PermissionFramework): def setup(self): ... + def get_perms_for_model(self, cls): + return get_perms_for_model(cls) + def assign_perm(self, perm, user_or_group, obj=None): try: return assign_perm(perm, user_or_group, obj=None) @@ -228,6 +227,12 @@ def check_resource_instance_permissions(self, user, resourceid, permission): return result + def get_users_with_perms(self, obj, attach_perms=False, with_superusers=False, with_group_users=True, only_with_perms_in=None): + return get_users_with_perms(obj, attach_perms=attach_perms, with_superusers=with_superuesrs, with_group_users=with_group_users, only_with_perms_in=only_with_perms_in) + + def get_groups_with_perms(self, obj, attach_perms=False, with_superusers=False, with_group_users=True, only_with_perms_in=None): + return get_groups_with_perms(obj, attach_perms=attach_perms, with_superusers=with_superusers, with_group_users=with_group_users, only_with_perms_in=only_with_perms_in) + def get_restricted_users(self, resource): """ Takes a resource instance and identifies which users are explicitly restricted from diff --git a/arches/settings.py b/arches/settings.py index 2f61a5fbe6c..219b6a51337 100644 --- a/arches/settings.py +++ b/arches/settings.py @@ -761,6 +761,8 @@ def JSON_LD_FIX_DATA_FUNCTION(data, jsdata, model): return jsdata +PERMISSION_FRAMEWORK = "arches_standard" + ########################################## ### END RUN TIME CONFIGURABLE SETTINGS ### From c1e8aa69fc7cbea6174d69fd45cf371a038a8e38 Mon Sep 17 00:00:00 2001 From: Phil Weir Date: Tue, 27 Jun 2023 19:41:26 +0100 Subject: [PATCH 222/242] tidy missing methods --- arches/app/utils/permissions/arches_standard.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/arches/app/utils/permissions/arches_standard.py b/arches/app/utils/permissions/arches_standard.py index 2dcf2336133..44108f4c6d9 100644 --- a/arches/app/utils/permissions/arches_standard.py +++ b/arches/app/utils/permissions/arches_standard.py @@ -19,7 +19,8 @@ from guardian.exceptions import WrongAppError from guardian.shortcuts import assign_perm, get_perms, remove_perm, get_group_perms, get_user_perms -from arches.app.models.models import User, ContentType, ResourceInstance +import inspect +from arches.app.models.models import * from arches.app.models.models import ResourceInstance, MapLayer from arches.app.search.elasticsearch_dsl_builder import Bool, Query, Terms, Nested from arches.app.search.mappings import RESOURCES_INDEX @@ -38,6 +39,9 @@ def assign_perm(self, perm, user_or_group, obj=None): except NotUserNorGroup: raise ArchesNotUserNorGroup() + def get_permission_backend(self): + return PermissionBackend() + def remove_perm(self, perm, user_or_group=None, obj=None): return remove_perm(perm, user_or_group=None, obj=None) @@ -112,7 +116,7 @@ def get_map_layers_by_perm(self, user, perms, any_perm=True): def user_can_read_map_layers(self, user): - map_layers_with_read_permission = get_map_layers_by_perm(user, ["models.read_maplayer"]) + map_layers_with_read_permission = self.get_map_layers_by_perm(user, ["models.read_maplayer"]) map_layers_allowed = [] for map_layer in map_layers_with_read_permission: @@ -125,7 +129,7 @@ def user_can_read_map_layers(self, user): def user_can_write_map_layers(self, user): - map_layers_with_write_permission = get_map_layers_by_perm(user, ["models.write_maplayer"]) + map_layers_with_write_permission = self.get_map_layers_by_perm(user, ["models.write_maplayer"]) map_layers_allowed = [] for map_layer in map_layers_with_write_permission: @@ -192,8 +196,8 @@ def check_resource_instance_permissions(self, user, resourceid, permission): result["permitted"] = False return result - resource = ResourceInstance.objects.get(resourceinstanceid=resourceid) - result["resource"] = resource + resource = ResourceInstance.objects.get(resourceinstanceid=resourceid) + result["resource"] = resource all_perms = self.get_perms(user, resource) From 27232cda23ed16a01285765ad49497c95e5d1cba Mon Sep 17 00:00:00 2001 From: Phil Weir Date: Sat, 23 Sep 2023 23:00:34 +0100 Subject: [PATCH 223/242] minor permission framework bugfixes --- arches/app/permissions/__init__.py | 0 .../permissions/arches_default_deny.py | 2 +- .../permissions/arches_standard.py | 10 +++---- arches/app/utils/permission_backend.py | 18 ++++++------ arches/app/utils/permissions/casbin.py | 28 ------------------- arches/settings.py | 5 +++- 6 files changed, 20 insertions(+), 43 deletions(-) create mode 100644 arches/app/permissions/__init__.py rename arches/app/{utils => }/permissions/arches_default_deny.py (94%) rename arches/app/{utils => }/permissions/arches_standard.py (97%) delete mode 100644 arches/app/utils/permissions/casbin.py diff --git a/arches/app/permissions/__init__.py b/arches/app/permissions/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/arches/app/utils/permissions/arches_default_deny.py b/arches/app/permissions/arches_default_deny.py similarity index 94% rename from arches/app/utils/permissions/arches_default_deny.py rename to arches/app/permissions/arches_default_deny.py index 1ef9d32557f..cff7c2368e3 100644 --- a/arches/app/utils/permissions/arches_default_deny.py +++ b/arches/app/permissions/arches_default_deny.py @@ -1,4 +1,4 @@ -from arches.app.utils.permissions.arches_standard import ArchesStandardPermissionFramework +from arches.app.permissions.arches_standard import ArchesStandardPermissionFramework class ArchesDefaultDenyPermissionFramework(ArchesStandardPermissionFramework): def check_resource_instance_permissions(self, user, resourceid, permission): diff --git a/arches/app/utils/permissions/arches_standard.py b/arches/app/permissions/arches_standard.py similarity index 97% rename from arches/app/utils/permissions/arches_standard.py rename to arches/app/permissions/arches_standard.py index 44108f4c6d9..6458ca68f76 100644 --- a/arches/app/utils/permissions/arches_standard.py +++ b/arches/app/permissions/arches_standard.py @@ -35,7 +35,7 @@ def get_perms_for_model(self, cls): def assign_perm(self, perm, user_or_group, obj=None): try: - return assign_perm(perm, user_or_group, obj=None) + return assign_perm(perm, user_or_group, obj=obj) except NotUserNorGroup: raise ArchesNotUserNorGroup() @@ -43,7 +43,7 @@ def get_permission_backend(self): return PermissionBackend() def remove_perm(self, perm, user_or_group=None, obj=None): - return remove_perm(perm, user_or_group=None, obj=None) + return remove_perm(perm, user_or_group=user_or_group, obj=obj) def get_perms(self, user_or_group, obj): return get_perms(user_or_group, obj) @@ -232,10 +232,10 @@ def check_resource_instance_permissions(self, user, resourceid, permission): return result def get_users_with_perms(self, obj, attach_perms=False, with_superusers=False, with_group_users=True, only_with_perms_in=None): - return get_users_with_perms(obj, attach_perms=attach_perms, with_superusers=with_superuesrs, with_group_users=with_group_users, only_with_perms_in=only_with_perms_in) + return get_users_with_perms(obj, attach_perms=attach_perms, with_superusers=with_superusers, with_group_users=with_group_users, only_with_perms_in=only_with_perms_in) - def get_groups_with_perms(self, obj, attach_perms=False, with_superusers=False, with_group_users=True, only_with_perms_in=None): - return get_groups_with_perms(obj, attach_perms=attach_perms, with_superusers=with_superusers, with_group_users=with_group_users, only_with_perms_in=only_with_perms_in) + def get_groups_with_perms(self, obj, attach_perms=False): + return get_groups_with_perms(obj, attach_perms=attach_perms) def get_restricted_users(self, resource): """ diff --git a/arches/app/utils/permission_backend.py b/arches/app/utils/permission_backend.py index a185938d221..69e25f543b9 100644 --- a/arches/app/utils/permission_backend.py +++ b/arches/app/utils/permission_backend.py @@ -1,5 +1,4 @@ from abc import abstractmethod, ABCMeta -import inspect from arches.app.models.models import * from arches.app.models.system_settings import settings @@ -289,11 +288,14 @@ def process_new_user(self, instance, created): def _get_permission_framework(): global _PERMISSION_FRAMEWORK if not _PERMISSION_FRAMEWORK: - if settings.PERMISSION_FRAMEWORK == "arches_default_deny": - from arches.app.utils.permissions.arches_standard import ArchesDefaultDenyPermissionFramework - _PERMISSION_FRAMEWORK = ArchesDefaultDenyPermissionFramework() + if settings.PERMISSION_FRAMEWORK: + if "." not in settings.PERMISSION_FRAMEWORK: + raise RuntimeError("Permissions frameworks must be a dot-separated module and a class") + modulename, classname = settings.PERMISSION_FRAMEWORK.split(".", -1) + PermissionFramework = get_class_from_modulename(modulename, classname, settings.PERMISSION_FRAMEWORK_LOCATIONS) + _PERMISSION_FRAMEWORK = PermissionFramework() else: - from arches.app.utils.permissions.arches_standard import ArchesStandardPermissionFramework + from arches.app.permissions.arches_standard import ArchesStandardPermissionFramework _PERMISSION_FRAMEWORK = ArchesStandardPermissionFramework() return _PERMISSION_FRAMEWORK @@ -334,10 +336,10 @@ def user_can_write_map_layers(user): return _get_permission_framework().user_can_write_map_layers(user) def get_users_with_perms(obj, attach_perms=False, with_superusers=False, with_group_users=True, only_with_perms_in=None): - return _get_permission_framework().get_users_with_perms(obj, attach_perms=attach_perms, with_superusers=with_superuesrs, with_group_users=with_group_users, only_with_perms_in=only_with_perms_in) + return _get_permission_framework().get_users_with_perms(obj, attach_perms=attach_perms, with_superusers=with_superusers, with_group_users=with_group_users, only_with_perms_in=only_with_perms_in) -def get_groups_with_perms(obj, attach_perms=False, with_superusers=False, with_group_users=True, only_with_perms_in=None): - return _get_permission_framework().get_groups_with_perms(obj, attach_perms=attach_perms, with_superusers=with_superusers, with_group_users=with_group_users, only_with_perms_in=only_with_perms_in) +def get_groups_with_perms(obj, attach_perms=False): + return _get_permission_framework().get_groups_with_perms(obj, attach_perms=attach_perms) def get_user_perms(user, obj): return _get_permission_framework().get_user_perms(user, obj) diff --git a/arches/app/utils/permissions/casbin.py b/arches/app/utils/permissions/casbin.py deleted file mode 100644 index 1ef9d32557f..00000000000 --- a/arches/app/utils/permissions/casbin.py +++ /dev/null @@ -1,28 +0,0 @@ -from arches.app.utils.permissions.arches_standard import ArchesStandardPermissionFramework - -class ArchesDefaultDenyPermissionFramework(ArchesStandardPermissionFramework): - def check_resource_instance_permissions(self, user, resourceid, permission): - result = super().check_resource_instance_permissions(user, resourceid, permission) - - if result and result.get("permitted", None) is not None: - # This is a safety check - we don't want an unpermissioned user - # defaulting to having access (allowing anonymous users is still - # possible by assigning appropriate group permissions). - if result["permitted"] == "unknown": - result["permitted"] = False - elif result["permitted"] == False: - - # This covers the case where one group denies permission and another - # allows it. Ideally, the deny would override (as normal in Arches) but - # this prevents us from having a default deny rule that another group - # can override (as deny rules in Arches must be explicit for a resource). - resource = ResourceInstance.objects.get(resourceinstanceid=resourceid) - user_permissions = get_user_perms(user, resource) - if "no_access_to_resourceinstance" not in user_permissions: - group_permissions = get_group_perms(user, resource) - - # This should correspond to the exact case we wish to flip. - if permission in group_permissions and len(group_permissions) > 1: - result["permitted"] = True - - return result diff --git a/arches/settings.py b/arches/settings.py index 219b6a51337..74a8e9b53b8 100644 --- a/arches/settings.py +++ b/arches/settings.py @@ -594,6 +594,9 @@ # Don't forget to use absolute paths, not relative paths. ) +PERMISSION_FRAMEWORK_LOCATIONS = [ + "arches.app.permissions", +] DATATYPE_LOCATIONS = [ "arches.app.datatypes", ] @@ -761,7 +764,7 @@ def JSON_LD_FIX_DATA_FUNCTION(data, jsdata, model): return jsdata -PERMISSION_FRAMEWORK = "arches_standard" +PERMISSION_FRAMEWORK = "arches_standard.ArchesStandardPermissionFramework" ########################################## From e1220ae958e7a673b8ba105eaca11eea6fbb60db Mon Sep 17 00:00:00 2001 From: Phil Weir Date: Mon, 2 Oct 2023 17:49:07 +0100 Subject: [PATCH 224/242] correct signature for process_new_user --- arches/app/permissions/arches_standard.py | 3 ++- arches/settings.py | 6 ++++-- gunicorn_config.py | 0 3 files changed, 6 insertions(+), 3 deletions(-) create mode 100755 gunicorn_config.py diff --git a/arches/app/permissions/arches_standard.py b/arches/app/permissions/arches_standard.py index 6458ca68f76..a7217a16068 100644 --- a/arches/app/permissions/arches_standard.py +++ b/arches/app/permissions/arches_standard.py @@ -1,4 +1,5 @@ from django.core.exceptions import ObjectDoesNotExist +from arches.app.models.system_settings import settings from django.contrib.auth.models import User, Group from django.contrib.gis.db.models import Model from django.core.cache import caches @@ -54,7 +55,7 @@ def get_group_perms(self, user_or_group, obj): def get_user_perms(self, user, obj): return get_user_perms(user, obj) - def process_new_user(self, user): + def process_new_user(self, instance, created): ct = ContentType.objects.get(app_label="models", model="resourceinstance") resourceInstanceIds = list(GroupObjectPermission.objects.filter(content_type=ct).values_list("object_pk", flat=True).distinct()) for resourceInstanceId in resourceInstanceIds: diff --git a/arches/settings.py b/arches/settings.py index 74a8e9b53b8..e3636c32a47 100644 --- a/arches/settings.py +++ b/arches/settings.py @@ -330,8 +330,9 @@ AUTHENTICATION_BACKENDS = ( "arches.app.utils.email_auth_backend.EmailAuthenticationBackend", "oauth2_provider.backends.OAuth2Backend", + #"dauthz.backends.CasbinBackend", "django.contrib.auth.backends.ModelBackend", # this is default - "arches.app.utils.permission_backend.PermissionBackend", + #"arches.app.utils.permission_backend.PermissionBackend", "arches.app.utils.external_oauth_backend.ExternalOauthAuthenticationBackend", ) @@ -353,6 +354,7 @@ "corsheaders", "oauth2_provider", "django_celery_results", + #"dauthz.apps.DauthzConfig" ) ARCHES_APPLICATIONS = () @@ -370,6 +372,7 @@ "django.contrib.auth.middleware.AuthenticationMiddleware", "django.contrib.messages.middleware.MessageMiddleware", # "django.middleware.clickjacking.XFrameOptionsMiddleware", + #"dauthz.middlewares.request_middleware.RequestMiddleware", "arches.app.utils.middleware.SetAnonymousUser", ] @@ -766,7 +769,6 @@ def JSON_LD_FIX_DATA_FUNCTION(data, jsdata, model): PERMISSION_FRAMEWORK = "arches_standard.ArchesStandardPermissionFramework" - ########################################## ### END RUN TIME CONFIGURABLE SETTINGS ### ########################################## diff --git a/gunicorn_config.py b/gunicorn_config.py new file mode 100755 index 00000000000..e69de29bb2d From b0791b3dc049e677ad9316aaaf32c3bf7753994c Mon Sep 17 00:00:00 2001 From: Phil Weir Date: Thu, 25 Apr 2024 00:58:30 +0100 Subject: [PATCH 225/242] add signals for user/group --- arches/app/models/models.py | 23 ++++++++++++++++++++++- arches/app/utils/permission_backend.py | 9 +++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/arches/app/models/models.py b/arches/app/models/models.py index ab8b2335d75..bc14f4b6512 100644 --- a/arches/app/models/models.py +++ b/arches/app/models/models.py @@ -31,7 +31,7 @@ from django.template.loader import get_template, render_to_string from django.core.validators import RegexValidator from django.db.models import Q, Max -from django.db.models.signals import post_delete, pre_save, post_save +from django.db.models.signals import post_delete, pre_save, post_save, m2m_changed from django.dispatch import receiver from django.utils import translation from django.utils.translation import gettext as _ @@ -1536,6 +1536,27 @@ def create_permissions_for_new_users(sender, instance, created, **kwargs): if created: process_new_user(instance, created) +@receiver(m2m_changed, sender=User.groups.through) +def update_groups_for_user(sender, instance, action, **kwargs): + from arches.app.utils.permission_backend import update_groups_for_user + + if action in ("post_add", "post_remove"): + update_groups_for_user(instance) + +@receiver(m2m_changed, sender=User.user_permissions.through) +def update_permissions_for_user(sender, instance, action, **kwargs): + from arches.app.utils.permission_backend import update_permissions_for_user + + if action in ("post_add", "post_remove"): + update_permissions_for_user(instance) + +@receiver(m2m_changed, sender=Group.permissions.through) +def update_permissions_for_group(sender, instance, action, **kwargs): + from arches.app.utils.permission_backend import update_permissions_for_group + + if action in ("post_add", "post_remove"): + update_permissions_for_group(instance) + @receiver(post_save, sender=UserXNotification) def send_email_on_save(sender, instance, **kwargs): """Checks if a notification type needs to send an email, does so if email server exists""" diff --git a/arches/app/utils/permission_backend.py b/arches/app/utils/permission_backend.py index 69e25f543b9..4b90e5f7fed 100644 --- a/arches/app/utils/permission_backend.py +++ b/arches/app/utils/permission_backend.py @@ -355,3 +355,12 @@ def get_perms(user_or_group, obj): def process_new_user(instance, created): return _get_permission_framework().process_new_user(instance, created) + +def update_groups_for_user(instance): + return _get_permission_framework().update_groups_for_user(instance) + +def update_permissions_for_user(instance): + return _get_permission_framework().update_permissions_for_user(instance) + +def update_permissions_for_group(instance): + return _get_permission_framework().update_permissions_for_group(instance) From ea5ec941082129c6463d0c8213b636ca5afdb8f2 Mon Sep 17 00:00:00 2001 From: Phil Weir Date: Thu, 7 Dec 2023 00:32:11 +0000 Subject: [PATCH 226/242] implement dummy hooks for standard model for user/group/permission updates --- arches/app/permissions/arches_standard.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/arches/app/permissions/arches_standard.py b/arches/app/permissions/arches_standard.py index a7217a16068..6c4c0d8c5c6 100644 --- a/arches/app/permissions/arches_standard.py +++ b/arches/app/permissions/arches_standard.py @@ -306,7 +306,7 @@ def has_group_perm(group, perm, obj): def get_users_for_object(self, perm, obj): """ - returns a list of user objects that have the given permission on the given object + Returns a list of user objects that have the given permission on the given object Arguments: perm -- the permssion string eg: "read_nodegroup" @@ -354,6 +354,18 @@ def get_restricted_instances(self, user, search_engine=None, allresources=False) restricted_ids = [res["_id"] for res in results["hits"]["hits"]] return restricted_ids + def update_groups_for_user(self, user): + """Hook for spotting group updates on a user.""" + ... + + def update_permissions_for_user(self, user): + """Hook for spotting permission updates on a user.""" + ... + + def update_permissions_for_group(self, group): + """Hook for spotting permission updates on a group.""" + ... + class PermissionBackend(ObjectPermissionBackend): From 4d604ffafdfaa6f67f9e86ee53f81871c734712d Mon Sep 17 00:00:00 2001 From: Phil Weir Date: Thu, 25 Apr 2024 00:43:29 +0100 Subject: [PATCH 227/242] move additional permission checks into PermissionFramework --- arches/app/permissions/arches_default_deny.py | 7 +- arches/app/permissions/arches_standard.py | 134 +++++++++++ arches/app/utils/permission_backend.py | 215 ++++++------------ 3 files changed, 211 insertions(+), 145 deletions(-) diff --git a/arches/app/permissions/arches_default_deny.py b/arches/app/permissions/arches_default_deny.py index cff7c2368e3..2322f4f2c8d 100644 --- a/arches/app/permissions/arches_default_deny.py +++ b/arches/app/permissions/arches_default_deny.py @@ -1,6 +1,11 @@ from arches.app.permissions.arches_standard import ArchesStandardPermissionFramework +from arches.app.search.components.resource_type_filter import get_permitted_graphids class ArchesDefaultDenyPermissionFramework(ArchesStandardPermissionFramework): + def get_sets_for_user(self, user, perm): + # We do not do set filtering - None is allow-all for sets. + return None if user and user.username != "anonymous" else set() + def check_resource_instance_permissions(self, user, resourceid, permission): result = super().check_resource_instance_permissions(user, resourceid, permission) @@ -22,7 +27,7 @@ def check_resource_instance_permissions(self, user, resourceid, permission): group_permissions = get_group_perms(user, resource) # This should correspond to the exact case we wish to flip. - if permission in group_permissions and len(group_permissions) > 1: + if permission in group_permissions: result["permitted"] = True return result diff --git a/arches/app/permissions/arches_standard.py b/arches/app/permissions/arches_standard.py index 6c4c0d8c5c6..ed2b580380a 100644 --- a/arches/app/permissions/arches_standard.py +++ b/arches/app/permissions/arches_standard.py @@ -366,6 +366,140 @@ def update_permissions_for_group(self, group): """Hook for spotting permission updates on a group.""" ... + def user_has_resource_model_permissions(self, user, perms, resource): + """ + Checks if a user has any explicit permissions to a model's nodegroups + + Arguments: + user -- the user to check + perms -- the permssion string eg: "read_nodegroup" or list of strings + resource -- a resource instance to check if a user has permissions to that resource's type specifically + + """ + + nodegroups = self.get_nodegroups_by_perm(user, perms) + nodes = Node.objects.filter(nodegroup__in=nodegroups).filter(graph_id=resource.graph_id).select_related("graph") + return nodes.exists() + + + def user_can_read_resource(self, user, resourceid=None): + """ + Requires that a user be able to read an instance and read a single nodegroup of a resource + + """ + if user.is_authenticated: + if user.is_superuser: + return True + if resourceid not in [None, ""]: + result = self.check_resource_instance_permissions(user, resourceid, "view_resourceinstance") + if result is not None: + if result["permitted"] == "unknown": + return self.user_has_resource_model_permissions(user, ["models.read_nodegroup"], result["resource"]) + else: + return result["permitted"] + else: + return None + + return len(self.get_resource_types_by_perm(user, ["models.read_nodegroup"])) > 0 + return False + + def get_resource_types_by_perm(self, user, perms): + graphs = set() + nodegroups = self.get_nodegroups_by_perm(user, perms) + for node in Node.objects.filter(nodegroup__in=nodegroups).prefetch_related("graph"): + if node.graph.isresource and str(node.graph_id) != settings.SYSTEM_SETTINGS_RESOURCE_MODEL_ID: + graphs.add(node.graph) + return list(graphs) + + + def user_can_edit_resource(self, user, resourceid=None): + """ + Requires that a user be able to edit an instance and delete a single nodegroup of a resource + + """ + if user.is_authenticated: + if user.is_superuser: + return True + if resourceid not in [None, ""]: + result = self.check_resource_instance_permissions(user, resourceid, "change_resourceinstance") + if result is not None: + if result["permitted"] == "unknown": + return user.groups.filter(name__in=settings.RESOURCE_EDITOR_GROUPS).exists() or self.user_can_edit_model_nodegroups( + user, result["resource"] + ) + else: + return result["permitted"] + else: + return None + + return user.groups.filter(name__in=settings.RESOURCE_EDITOR_GROUPS).exists() or len(self.get_editable_resource_types(user)) > 0 + return False + + + def user_can_delete_resource(self, user, resourceid=None): + """ + Requires that a user be permitted to delete an instance + + """ + if user.is_authenticated: + if user.is_superuser: + return True + if resourceid not in [None, ""]: + result = self.check_resource_instance_permissions(user, resourceid, "delete_resourceinstance") + if result is not None: + if result["permitted"] == "unknown": + nodegroups = self.get_nodegroups_by_perm(user, "models.delete_nodegroup") + tiles = TileModel.objects.filter(resourceinstance_id=resourceid) + protected_tiles = {str(tile.nodegroup_id) for tile in tiles} - set(nodegroups) + if len(protected_tiles) > 0: + return False + return user.groups.filter(name__in=settings.RESOURCE_EDITOR_GROUPS).exists() or self.user_can_delete_model_nodegroups( + user, result["resource"] + ) + else: + return result["permitted"] + else: + return None + return False + + + def user_can_read_concepts(self, user): + """ + Requires that a user is a part of the RDM Administrator group + + """ + + if user.is_authenticated: + return user.groups.filter(name="RDM Administrator").exists() + return False + + + def user_is_resource_editor(self, user): + """ + Single test for whether a user is in the Resource Editor group + """ + + return user.groups.filter(name="Resource Editor").exists() + + + def user_is_resource_reviewer(self, user): + """ + Single test for whether a user is in the Resource Reviewer group + """ + + return user.groups.filter(name="Resource Reviewer").exists() + + + def user_is_resource_exporter(self, user): + """ + Single test for whether a user is in the Resource Exporter group + """ + + return user.groups.filter(name="Resource Exporter").exists() + + def user_in_group_by_name(self, user, names): + return bool(user.groups.filter(name__in=names)) + class PermissionBackend(ObjectPermissionBackend): diff --git a/arches/app/utils/permission_backend.py b/arches/app/utils/permission_backend.py index 4b90e5f7fed..7988975647b 100644 --- a/arches/app/utils/permission_backend.py +++ b/arches/app/utils/permission_backend.py @@ -50,25 +50,6 @@ def get_createable_resource_types(user): return [] -def get_resource_types_by_perm(user, perms): - """ - returns a list of graphs for which a user has specific nodegroup permissions - - Arguments: - user -- the user to check - perms -- the permssion string eg: "read_nodegroup" or list of strings - resource -- a resource instance to check if a user has permissions to that resource's type specifically - - """ - - graphs = set() - nodegroups = get_nodegroups_by_perm(user, perms) - for node in Node.objects.filter(nodegroup__in=nodegroups).prefetch_related("graph"): - if node.graph.isresource and str(node.graph_id) != settings.SYSTEM_SETTINGS_RESOURCE_MODEL_ID: - graphs.add(node.graph) - return list(graphs) - - def user_can_edit_model_nodegroups(user, resource): """ returns a list of graphs of which a user can edit resource instances @@ -94,131 +75,6 @@ def user_can_delete_model_nodegroups(user, resource): return user_has_resource_model_permissions(user, ["models.delete_nodegroup"], resource) - -def user_has_resource_model_permissions(user, perms, resource): - """ - Checks if a user has any explicit permissions to a model's nodegroups - - Arguments: - user -- the user to check - perms -- the permssion string eg: "read_nodegroup" or list of strings - resource -- a resource instance to check if a user has permissions to that resource's type specifically - - """ - - nodegroups = get_nodegroups_by_perm(user, perms) - nodes = Node.objects.filter(nodegroup__in=nodegroups).filter(graph_id=resource.graph_id).select_related("graph") - return nodes.exists() - - -def user_can_read_resource(user, resourceid=None): - """ - Requires that a user be able to read an instance and read a single nodegroup of a resource - - """ - if user.is_authenticated: - if user.is_superuser: - return True - if resourceid not in [None, ""]: - result = check_resource_instance_permissions(user, resourceid, "view_resourceinstance") - if result is not None: - if result["permitted"] == "unknown": - return user_has_resource_model_permissions(user, ["models.read_nodegroup"], result["resource"]) - else: - return result["permitted"] - else: - return None - - return len(get_resource_types_by_perm(user, ["models.read_nodegroup"])) > 0 - return False - - -def user_can_edit_resource(user, resourceid=None): - """ - Requires that a user be able to edit an instance and delete a single nodegroup of a resource - - """ - if user.is_authenticated: - if user.is_superuser: - return True - if resourceid not in [None, ""]: - result = check_resource_instance_permissions(user, resourceid, "change_resourceinstance") - if result is not None: - if result["permitted"] == "unknown": - return user.groups.filter(name__in=settings.RESOURCE_EDITOR_GROUPS).exists() or user_can_edit_model_nodegroups( - user, result["resource"] - ) - else: - return result["permitted"] - else: - return None - - return user.groups.filter(name__in=settings.RESOURCE_EDITOR_GROUPS).exists() or len(get_editable_resource_types(user)) > 0 - return False - - -def user_can_delete_resource(user, resourceid=None): - """ - Requires that a user be permitted to delete an instance - - """ - if user.is_authenticated: - if user.is_superuser: - return True - if resourceid not in [None, ""]: - result = check_resource_instance_permissions(user, resourceid, "delete_resourceinstance") - if result is not None: - if result["permitted"] == "unknown": - nodegroups = get_nodegroups_by_perm(user, "models.delete_nodegroup") - tiles = TileModel.objects.filter(resourceinstance_id=resourceid) - protected_tiles = {str(tile.nodegroup_id) for tile in tiles} - {str(nodegroup.nodegroupid) for nodegroup in nodegroups} - if len(protected_tiles) > 0: - return False - return user.groups.filter(name__in=settings.RESOURCE_EDITOR_GROUPS).exists() or user_can_delete_model_nodegroups( - user, result["resource"] - ) - else: - return result["permitted"] - else: - return None - return False - - -def user_can_read_concepts(user): - """ - Requires that a user is a part of the RDM Administrator group - - """ - - if user.is_authenticated: - return user.groups.filter(name="RDM Administrator").exists() - return False - - -def user_is_resource_editor(user): - """ - Single test for whether a user is in the Resource Editor group - """ - - return user.groups.filter(name="Resource Editor").exists() - - -def user_is_resource_reviewer(user): - """ - Single test for whether a user is in the Resource Reviewer group - """ - - return user.groups.filter(name="Resource Reviewer").exists() - - -def user_is_resource_exporter(user): - """ - Single test for whether a user is in the Resource Exporter group - """ - - return user.groups.filter(name="Resource Exporter").exists() - - def user_created_transaction(user, transactionid): if user.is_authenticated: if user.is_superuser: @@ -230,6 +86,7 @@ def user_created_transaction(user, transactionid): return True return False + class PermissionFramework(metaclass=ABCMeta): @abstractmethod def assign_perm(self, perm, user_or_group, obj=None): @@ -283,6 +140,46 @@ def user_can_write_map_layers(self, user): def process_new_user(self, instance, created): ... + @abstractmethod + def user_has_resource_model_permissions(self, user, perms, resource): + ... + + @abstractmethod + def user_can_read_resource(self, user, resourceid=None): + ... + + @abstractmethod + def user_can_edit_resource(self, user, resourceid=None): + ... + + @abstractmethod + def user_can_delete_resource(self, user, resourceid=None): + ... + + @abstractmethod + def user_can_read_concepts(self, user): + ... + + @abstractmethod + def user_is_resource_editor(self, user): + ... + + @abstractmethod + def user_is_resource_reviewer(self, user): + ... + + @abstractmethod + def user_is_resource_exporter(self, user): + ... + + @abstractmethod + def get_resource_types_by_perm(self, user, perms): + ... + + @abstractmethod + def user_in_group_by_name(self, user, names): + ... + _PERMISSION_FRAMEWORK = None def _get_permission_framework(): @@ -364,3 +261,33 @@ def update_permissions_for_user(instance): def update_permissions_for_group(instance): return _get_permission_framework().update_permissions_for_group(instance) + +def user_has_resource_model_permissions(user, perms, resource): + return _get_permission_framework().user_has_resource_model_permissions(user, perms, resource) + +def user_can_read_resource(user, resourceid=None): + return _get_permission_framework().user_can_read_resource(user, resourceid=resourceid) + +def user_can_edit_resource(user, resourceid=None): + return _get_permission_framework().user_can_edit_resource(user, resourceid=resourceid) + +def user_can_delete_resource(user, resourceid=None): + return _get_permission_framework().user_can_delete_resource(user, resourceid=resourceid) + +def user_can_read_concepts(user): + return _get_permission_framework().user_can_read_concepts(user) + +def user_is_resource_editor(user): + return _get_permission_framework().user_is_resource_editor(user) + +def user_is_resource_reviewer(user): + return _get_permission_framework().user_is_resource_reviewer(user) + +def user_is_resource_exporter(user): + return _get_permission_framework().user_is_resource_exporter(user) + +def get_resource_types_by_perm(user, perms): + return _get_permission_framework().get_resource_types_by_perm(user, perms) + +def user_in_group_by_name(user, names): + return _get_permission_framework().user_in_group_by_name(user, names) From 1483e0df7457906b38eef259b9aaba975dff1e6f Mon Sep 17 00:00:00 2001 From: Phil Weir Date: Tue, 19 Dec 2023 03:12:10 +0000 Subject: [PATCH 228/242] enable users to see the usual nodes --- arches/app/permissions/arches_standard.py | 73 +++++++++++++---------- arches/settings.py | 2 +- 2 files changed, 44 insertions(+), 31 deletions(-) diff --git a/arches/app/permissions/arches_standard.py b/arches/app/permissions/arches_standard.py index ed2b580380a..d90e8498bbf 100644 --- a/arches/app/permissions/arches_standard.py +++ b/arches/app/permissions/arches_standard.py @@ -151,34 +151,7 @@ def get_nodegroups_by_perm(self, user, perms, any_perm=True): any_perm -- True to check ANY perm in "perms" or False to check ALL perms """ - if not isinstance(perms, list): - perms = [perms] - - formatted_perms = [] - # in some cases, `perms` can have a `model.` prefix - for perm in perms: - if len(perm.split(".")) > 1: - formatted_perms.append(perm.split(".")[1]) - else: - formatted_perms.append(perm) - - permitted_nodegroups = set() - NodegroupPermissionsChecker = CachedObjectPermissionChecker(user, NodeGroup) - - for nodegroup in NodeGroup.objects.all(): - explicit_perms = NodegroupPermissionsChecker.get_perms(nodegroup) - - if len(explicit_perms): - if any_perm: - if len(set(formatted_perms) & set(explicit_perms)): - permitted_nodegroups.add(nodegroup) - else: - if set(formatted_perms) == set(explicit_perms): - permitted_nodegroups.add(nodegroup) - else: # if no explicit permissions, object is considered accessible by all with group permissions - permitted_nodegroups.add(nodegroup) - - return permitted_nodegroups + return set(get_nodegroups_by_perm_for_user_or_group(user, perms, any_perm=any_perm)) def check_resource_instance_permissions(self, user, resourceid, permission): """ @@ -576,7 +549,8 @@ def __new__(cls, user, input): user_permission_cache = caches["user_permission"] - current_user_cached_permissions = user_permission_cache.get(str(user.pk), {}) + key = f"g:{user.pk}" if isinstance(user, Group) else str(user.pk) + current_user_cached_permissions = user_permission_cache.get(key, {}) if current_user_cached_permissions.get(classname): checker = current_user_cached_permissions.get(classname) @@ -585,6 +559,45 @@ def __new__(cls, user, input): checker.prefetch_perms(globals()[classname].objects.all()) current_user_cached_permissions[classname] = checker - user_permission_cache.set(str(user.pk), current_user_cached_permissions) + user_permission_cache.set(key, current_user_cached_permissions) return checker + +def get_nodegroups_by_perm_for_user_or_group(user_or_group, perms=None, any_perm=True, ignore_perms=False): + formatted_perms = [] + if perms is None: + if not ignore_perms: + raise RuntimeError("Must provide perms or explicitly ignore") + else: + if not isinstance(perms, list): + perms = [perms] + + # in some cases, `perms` can have a `model.` prefix + for perm in perms: + if len(perm.split(".")) > 1: + formatted_perms.append(perm.split(".")[1]) + else: + formatted_perms.append(perm) + + permitted_nodegroups = {} + NodegroupPermissionsChecker = CachedObjectPermissionChecker( + user_or_group, + NodeGroup, + ) + + for nodegroup in NodeGroup.objects.all(): + explicit_perms = NodegroupPermissionsChecker.get_perms(nodegroup) + + if len(explicit_perms): + if ignore_perms: + permitted_nodegroups[nodegroup] = explicit_perms + elif any_perm: + if len(set(formatted_perms) & set(explicit_perms)): + permitted_nodegroups[nodegroup] = explicit_perms + else: + if set(formatted_perms) == set(explicit_perms): + permitted_nodegroups[nodegroup] = explicit_perms + else: # if no explicit permissions, object is considered accessible by all with group permissions + permitted_nodegroups[nodegroup] = set() + + return permitted_nodegroups diff --git a/arches/settings.py b/arches/settings.py index e3636c32a47..89d6df108a9 100644 --- a/arches/settings.py +++ b/arches/settings.py @@ -332,7 +332,7 @@ "oauth2_provider.backends.OAuth2Backend", #"dauthz.backends.CasbinBackend", "django.contrib.auth.backends.ModelBackend", # this is default - #"arches.app.utils.permission_backend.PermissionBackend", + "arches.app.permissions.arches_standard.PermissionBackend", "arches.app.utils.external_oauth_backend.ExternalOauthAuthenticationBackend", ) From 189137d849f722035e74089b93c8c2697298608e Mon Sep 17 00:00:00 2001 From: Phil Weir Date: Tue, 23 Jan 2024 22:55:49 +0000 Subject: [PATCH 229/242] restore user_can_read_graph --- arches/app/utils/permission_backend.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/arches/app/utils/permission_backend.py b/arches/app/utils/permission_backend.py index 7988975647b..89e3fe87688 100644 --- a/arches/app/utils/permission_backend.py +++ b/arches/app/utils/permission_backend.py @@ -75,6 +75,20 @@ def user_can_delete_model_nodegroups(user, resource): return user_has_resource_model_permissions(user, ["models.delete_nodegroup"], resource) + +def user_can_read_graph(user, graph_id): + """ + returns a boolean denoting if a user has permmission to read a model's nodegroups + + Arguments: + user -- the user to check + graph_id -- a graph id to check if a user has permissions to that graph's type specifically + + """ + + return user_has_resource_model_permissions(user, ["models.read_nodegroup"], graph_id=graph_id) + + def user_created_transaction(user, transactionid): if user.is_authenticated: if user.is_superuser: From ad1c5de29da96f6a4eb88a09741320fcbd825b22 Mon Sep 17 00:00:00 2001 From: Phil Weir Date: Wed, 1 May 2024 11:52:35 +0100 Subject: [PATCH 230/242] use ExtensionType for permissions frameworks --- arches/app/const.py | 1 + arches/app/utils/permission_backend.py | 3 ++- arches/settings.py | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/arches/app/const.py b/arches/app/const.py index 9d422b27450..b93022b59af 100644 --- a/arches/app/const.py +++ b/arches/app/const.py @@ -20,3 +20,4 @@ class ExtensionType(Enum): ETL_MODULES = "etl_modules" FUNCTIONS = "functions" SEARCH_COMPONENTS = "search_components" + PERMISSIONS_FRAMEWORKS = "permissions" diff --git a/arches/app/utils/permission_backend.py b/arches/app/utils/permission_backend.py index 89e3fe87688..9ef06c17a65 100644 --- a/arches/app/utils/permission_backend.py +++ b/arches/app/utils/permission_backend.py @@ -1,5 +1,6 @@ from abc import abstractmethod, ABCMeta +from arches.app.const import ExtensionType from arches.app.models.models import * from arches.app.models.system_settings import settings @@ -203,7 +204,7 @@ def _get_permission_framework(): if "." not in settings.PERMISSION_FRAMEWORK: raise RuntimeError("Permissions frameworks must be a dot-separated module and a class") modulename, classname = settings.PERMISSION_FRAMEWORK.split(".", -1) - PermissionFramework = get_class_from_modulename(modulename, classname, settings.PERMISSION_FRAMEWORK_LOCATIONS) + PermissionFramework = get_class_from_modulename(modulename, classname, ExtensionType.PERMISSIONS_FRAMEWORKS) _PERMISSION_FRAMEWORK = PermissionFramework() else: from arches.app.permissions.arches_standard import ArchesStandardPermissionFramework diff --git a/arches/settings.py b/arches/settings.py index 89d6df108a9..3dd0d3458b0 100644 --- a/arches/settings.py +++ b/arches/settings.py @@ -597,7 +597,7 @@ # Don't forget to use absolute paths, not relative paths. ) -PERMISSION_FRAMEWORK_LOCATIONS = [ +PERMISSION_LOCATIONS = [ "arches.app.permissions", ] DATATYPE_LOCATIONS = [ From 94ab9a50cf2e61a329b1f09d1bfb32fc9557474a Mon Sep 17 00:00:00 2001 From: Phil Weir Date: Mon, 6 May 2024 18:02:13 +0100 Subject: [PATCH 231/242] fix: tidy up default-deny --- arches/app/permissions/arches_default_deny.py | 36 ++++++++++++++++--- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/arches/app/permissions/arches_default_deny.py b/arches/app/permissions/arches_default_deny.py index 2322f4f2c8d..8258c45b5cf 100644 --- a/arches/app/permissions/arches_default_deny.py +++ b/arches/app/permissions/arches_default_deny.py @@ -1,12 +1,38 @@ -from arches.app.permissions.arches_standard import ArchesStandardPermissionFramework +""" +ARCHES - a program developed to inventory and manage immovable cultural heritage. +Copyright (C) 2013 J. Paul Getty Trust and World Monuments Fund +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 . +""" + +from __future__ import annotations + from arches.app.search.components.resource_type_filter import get_permitted_graphids +from django.contrib.auth.models import User +from arches.app.models.models import ResourceInstance + +from arches.app.permissions.arches_standard import ArchesStandardPermissionFramework, ResourceInstancePermissions class ArchesDefaultDenyPermissionFramework(ArchesStandardPermissionFramework): - def get_sets_for_user(self, user, perm): + def get_sets_for_user(self, user: User, perm: str) -> set[str] | None: # We do not do set filtering - None is allow-all for sets. return None if user and user.username != "anonymous" else set() - def check_resource_instance_permissions(self, user, resourceid, permission): + + def get_restricted_users(self, resource: ResourceInstance) -> dict[str, list[int]]: + """Fetches _explicitly_ restricted users.""" + return super().get_restricted_users(resource) + + + def check_resource_instance_permissions(self, user: User, resourceid: str, permission: str) -> ResourceInstancePermissions: result = super().check_resource_instance_permissions(user, resourceid, permission) if result and result.get("permitted", None) is not None: @@ -22,9 +48,9 @@ def check_resource_instance_permissions(self, user, resourceid, permission): # this prevents us from having a default deny rule that another group # can override (as deny rules in Arches must be explicit for a resource). resource = ResourceInstance.objects.get(resourceinstanceid=resourceid) - user_permissions = get_user_perms(user, resource) + user_permissions = self.get_user_perms(user, resource) if "no_access_to_resourceinstance" not in user_permissions: - group_permissions = get_group_perms(user, resource) + group_permissions = self.get_group_perms(user, resource) # This should correspond to the exact case we wish to flip. if permission in group_permissions: From aefaa041fcaf3071a7ddaf8217d23ab90d245a50 Mon Sep 17 00:00:00 2001 From: Phil Weir Date: Mon, 6 May 2024 18:06:11 +0100 Subject: [PATCH 232/242] fix: mostly adding types to ArchesStandardPermissionFramework --- arches/app/permissions/arches_standard.py | 194 +++++++++++++--------- 1 file changed, 115 insertions(+), 79 deletions(-) diff --git a/arches/app/permissions/arches_standard.py b/arches/app/permissions/arches_standard.py index d90e8498bbf..b0f48e81aa1 100644 --- a/arches/app/permissions/arches_standard.py +++ b/arches/app/permissions/arches_standard.py @@ -1,3 +1,24 @@ +""" +ARCHES - a program developed to inventory and manage immovable cultural heritage. +Copyright (C) 2013 J. Paul Getty Trust and World Monuments Fund +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 . +""" + +from __future__ import annotations + +import sys +import uuid +from typing import Iterable + from django.core.exceptions import ObjectDoesNotExist from arches.app.models.system_settings import settings from django.contrib.auth.models import User, Group @@ -16,25 +37,35 @@ from guardian.exceptions import NotUserNorGroup from arches.app.models.resource import Resource -from guardian.models import GroupObjectPermission, UserObjectPermission +from guardian.models import GroupObjectPermission, UserObjectPermission, Permission from guardian.exceptions import WrongAppError from guardian.shortcuts import assign_perm, get_perms, remove_perm, get_group_perms, get_user_perms import inspect from arches.app.models.models import * +from django.contrib.contenttypes.models import ContentType from arches.app.models.models import ResourceInstance, MapLayer from arches.app.search.elasticsearch_dsl_builder import Bool, Query, Terms, Nested from arches.app.search.mappings import RESOURCES_INDEX from arches.app.utils.permission_backend import PermissionFramework, NotUserNorGroup as ArchesNotUserNorGroup +from arches.app.search.search import SearchEngine + +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, Literal + class ResourceInstancePermissions(TypedDict): + permitted: NotRequired[bool | Literal["unknown"]] + resource: NotRequired[ResourceInstance] +else: + ResourceInstancePermissions = dict class ArchesStandardPermissionFramework(PermissionFramework): def setup(self): ... - def get_perms_for_model(self, cls): - return get_perms_for_model(cls) + def get_perms_for_model(self, cls: str | Model) -> list[Permission]: + return get_perms_for_model(cls) # type: ignore - def assign_perm(self, perm, user_or_group, obj=None): + def assign_perm(self, perm: Permission | str, user_or_group: User | Group, obj: ResourceInstance | None=None) -> Permission: try: return assign_perm(perm, user_or_group, obj=obj) except NotUserNorGroup: @@ -46,16 +77,16 @@ def get_permission_backend(self): def remove_perm(self, perm, user_or_group=None, obj=None): return remove_perm(perm, user_or_group=user_or_group, obj=obj) - def get_perms(self, user_or_group, obj): - return get_perms(user_or_group, obj) + def get_perms(self, user_or_group: User | Group, obj: ResourceInstance) -> list[Permission]: + return get_perms(user_or_group, obj) # type: ignore - def get_group_perms(self, user_or_group, obj): - return get_group_perms(user_or_group, obj) + def get_group_perms(self, user_or_group: User | Group, obj: ResourceInstance) -> list[Permission]: + return get_group_perms(user_or_group, obj) # type: ignore - def get_user_perms(self, user, obj): - return get_user_perms(user, obj) + def get_user_perms(self, user: User, obj: ResourceInstance) -> list[Permission]: + return get_user_perms(user, obj) # type: ignore - def process_new_user(self, instance, created): + def process_new_user(self, instance: User, created: bool) -> None: ct = ContentType.objects.get(app_label="models", model="resourceinstance") resourceInstanceIds = list(GroupObjectPermission.objects.filter(content_type=ct).values_list("object_pk", flat=True).distinct()) for resourceInstanceId in resourceInstanceIds: @@ -63,12 +94,12 @@ def process_new_user(self, instance, created): resources = ResourceInstance.objects.filter(pk__in=resourceInstanceIds) self.assign_perm("no_access_to_resourceinstance", instance, resources) for resource_instance in resources: - resource = Resource(resource_instance.resourceinstanceid) + resource = Resource(resource_instance.resourceinstanceid) # type: ignore resource.graph_id = resource_instance.graph_id resource.createdtime = resource_instance.createdtime - resource.index() + resource.index() # type: ignore - def get_map_layers_by_perm(self, user, perms, any_perm=True): + def get_map_layers_by_perm(self, user: User, perms: str | Iterable[str], any_perm: bool=True) -> list[MapLayer]: """ returns a list of node groups that a user has the given permission on @@ -79,7 +110,7 @@ def get_map_layers_by_perm(self, user, perms, any_perm=True): """ - if not isinstance(perms, list): + if isinstance(perms, str): perms = [perms] formatted_perms = [] @@ -91,7 +122,7 @@ def get_map_layers_by_perm(self, user, perms, any_perm=True): formatted_perms.append(perm) if user.is_superuser is True: - return MapLayer.objects.all() + return list(MapLayer.objects.all()) else: permitted_map_layers = list() @@ -116,7 +147,6 @@ def get_map_layers_by_perm(self, user, perms, any_perm=True): def user_can_read_map_layers(self, user): - map_layers_with_read_permission = self.get_map_layers_by_perm(user, ["models.read_maplayer"]) map_layers_allowed = [] @@ -129,7 +159,7 @@ def user_can_read_map_layers(self, user): return map_layers_allowed - def user_can_write_map_layers(self, user): + def user_can_write_map_layers(self, user: User) -> list[MapLayer]: map_layers_with_write_permission = self.get_map_layers_by_perm(user, ["models.write_maplayer"]) map_layers_allowed = [] @@ -141,7 +171,7 @@ def user_can_write_map_layers(self, user): return map_layers_allowed - def get_nodegroups_by_perm(self, user, perms, any_perm=True): + def get_nodegroups_by_perm(self, user: User, perms: str | Iterable[str], any_perm: bool=True) -> list[str]: """ returns a list of node groups that a user has the given permission on @@ -151,9 +181,12 @@ def get_nodegroups_by_perm(self, user, perms, any_perm=True): any_perm -- True to check ANY perm in "perms" or False to check ALL perms """ - return set(get_nodegroups_by_perm_for_user_or_group(user, perms, any_perm=any_perm)) + return list(set( + str(nodegroup.pk) + for nodegroup in get_nodegroups_by_perm_for_user_or_group(user, perms, any_perm=any_perm) + )) - def check_resource_instance_permissions(self, user, resourceid, permission): + def check_resource_instance_permissions(self, user: User, resourceid: str, permission: str) -> ResourceInstancePermissions: """ Checks if a user has permission to access a resource instance @@ -163,7 +196,7 @@ def check_resource_instance_permissions(self, user, resourceid, permission): permission -- the permission codename (e.g. 'view_resourceinstance') for which to check """ - result = {} + result = ResourceInstancePermissions() try: if resourceid == settings.SYSTEM_SETTINGS_RESOURCE_ID: if not user.groups.filter(name="System Administrator").exists(): @@ -200,18 +233,16 @@ def check_resource_instance_permissions(self, user, resourceid, permission): return result except ObjectDoesNotExist: - result["permitted"] = True # if the object does not exist, no harm in returning true - this prevents strange 403s. + result["permitted"] = True # if the object does not exist, should return true - this prevents strange 403s. return result - return result - - def get_users_with_perms(self, obj, attach_perms=False, with_superusers=False, with_group_users=True, only_with_perms_in=None): - return get_users_with_perms(obj, attach_perms=attach_perms, with_superusers=with_superusers, with_group_users=with_group_users, only_with_perms_in=only_with_perms_in) + def get_users_with_perms(self, obj: Model, attach_perms: bool=False, with_superusers: bool=False, with_group_users: bool=True, only_with_perms_in: Iterable[str] | None=None) -> list[User]: + return get_users_with_perms(obj, attach_perms=attach_perms, with_superusers=with_superusers, with_group_users=with_group_users, only_with_perms_in=only_with_perms_in) # type: ignore - def get_groups_with_perms(self, obj, attach_perms=False): - return get_groups_with_perms(obj, attach_perms=attach_perms) + def get_groups_with_perms(self, obj: Model, attach_perms: bool=False) -> list[Group]: + return get_groups_with_perms(obj, attach_perms=attach_perms) # type: ignore - def get_restricted_users(self, resource): + def get_restricted_users(self, resource: ResourceInstance) -> dict[str, list[int]]: """ Takes a resource instance and identifies which users are explicitly restricted from reading, editing, deleting, or accessing it. @@ -221,7 +252,7 @@ def get_restricted_users(self, resource): user_perms = get_users_with_perms(resource, attach_perms=True, with_group_users=False) user_and_group_perms = get_users_with_perms(resource, attach_perms=True, with_group_users=True) - result = { + result: dict[str, list[int]] = { "no_access": [], "cannot_read": [], "cannot_write": [], @@ -246,7 +277,7 @@ def get_restricted_users(self, resource): return result - def get_groups_for_object(self, perm, obj): + def get_groups_for_object(self, perm: str, obj: Model) -> list[Group]: """ returns a list of group objects that have the given permission on the given object @@ -272,12 +303,12 @@ def has_group_perm(group, perm, obj): ret = [] for group in Group.objects.all(): - if has_group_perm(group, perm, obj): + if bool(has_group_perm(group, perm, obj)): # type: ignore ret.append(group) return ret - def get_users_for_object(self, perm, obj): + def get_users_for_object(self, perm: str, obj: Model) -> list[User]: """ Returns a list of user objects that have the given permission on the given object @@ -294,7 +325,7 @@ def get_users_for_object(self, perm, obj): return ret - def get_restricted_instances(self, user, search_engine=None, allresources=False): + def get_restricted_instances(self, user: User, search_engine: SearchEngine | None=None, allresources: bool=False) -> list[str]: if allresources is False and user.is_superuser is True: return [] @@ -310,13 +341,13 @@ def get_restricted_instances(self, user, search_engine=None, allresources=False) all_restricted_instances = list(restricted_group_instances | restricted_user_instances) return all_restricted_instances else: - terms = Terms(field="permissions.users_with_no_access", terms=[str(user.id)]) - query = Query(search_engine, start=0, limit=settings.SEARCH_RESULT_LIMIT) - has_access = Bool() - nested_term_filter = Nested(path="permissions", query=terms) - has_access.must(nested_term_filter) - query.add_query(has_access) - results = query.search(index=RESOURCES_INDEX, scroll="1m") + terms = Terms(field="permissions.users_with_no_access", terms=[str(user.id)]) # type: ignore + query = Query(search_engine, start=0, limit=settings.SEARCH_RESULT_LIMIT) # type: ignore + has_access = Bool() # type: ignore + nested_term_filter = Nested(path="permissions", query=terms) # type: ignore + has_access.must(nested_term_filter) # type: ignore + query.add_query(has_access) # type: ignore + results = query.search(index=RESOURCES_INDEX, scroll="1m") # type: ignore scroll_id = results["_scroll_id"] total = results["hits"]["total"]["value"] if total > settings.SEARCH_RESULT_LIMIT: @@ -327,35 +358,38 @@ def get_restricted_instances(self, user, search_engine=None, allresources=False) restricted_ids = [res["_id"] for res in results["hits"]["hits"]] return restricted_ids - def update_groups_for_user(self, user): + def update_groups_for_user(self, user: User) -> None: """Hook for spotting group updates on a user.""" ... - def update_permissions_for_user(self, user): + def update_permissions_for_user(self, user: User) -> None: """Hook for spotting permission updates on a user.""" ... - def update_permissions_for_group(self, group): + def update_permissions_for_group(self, group: Group) -> None: """Hook for spotting permission updates on a group.""" ... - def user_has_resource_model_permissions(self, user, perms, resource): + def user_has_resource_model_permissions(self, user: User, perms: str | Iterable[str], resource: ResourceInstance | None=None, graph_id: str | None=None) -> bool: """ Checks if a user has any explicit permissions to a model's nodegroups Arguments: user -- the user to check perms -- the permssion string eg: "read_nodegroup" or list of strings - resource -- a resource instance to check if a user has permissions to that resource's type specifically + graph_id -- a graph id to check if a user has permissions to that graph's type specifically """ + if resource: + graph_id = resource.graph_id + nodegroups = self.get_nodegroups_by_perm(user, perms) - nodes = Node.objects.filter(nodegroup__in=nodegroups).filter(graph_id=resource.graph_id).select_related("graph") - return nodes.exists() + nodes = Node.objects.filter(nodegroup__in=nodegroups).filter(graph_id=graph_id).select_related("graph") + return bool(nodes.exists()) - def user_can_read_resource(self, user, resourceid=None): + def user_can_read_resource(self, user: User, resourceid: str | None=None) -> bool | None: """ Requires that a user be able to read an instance and read a single nodegroup of a resource @@ -363,7 +397,7 @@ def user_can_read_resource(self, user, resourceid=None): if user.is_authenticated: if user.is_superuser: return True - if resourceid not in [None, ""]: + if resourceid is not None and resourceid != "": result = self.check_resource_instance_permissions(user, resourceid, "view_resourceinstance") if result is not None: if result["permitted"] == "unknown": @@ -376,7 +410,7 @@ def user_can_read_resource(self, user, resourceid=None): return len(self.get_resource_types_by_perm(user, ["models.read_nodegroup"])) > 0 return False - def get_resource_types_by_perm(self, user, perms): + def get_resource_types_by_perm(self, user: User, perms: str | Iterable[str]) -> list[str]: graphs = set() nodegroups = self.get_nodegroups_by_perm(user, perms) for node in Node.objects.filter(nodegroup__in=nodegroups).prefetch_related("graph"): @@ -385,7 +419,7 @@ def get_resource_types_by_perm(self, user, perms): return list(graphs) - def user_can_edit_resource(self, user, resourceid=None): + def user_can_edit_resource(self, user: User, resourceid: str | None=None) -> bool: """ Requires that a user be able to edit an instance and delete a single nodegroup of a resource @@ -393,7 +427,7 @@ def user_can_edit_resource(self, user, resourceid=None): if user.is_authenticated: if user.is_superuser: return True - if resourceid not in [None, ""]: + if resourceid is not None and resourceid != "": result = self.check_resource_instance_permissions(user, resourceid, "change_resourceinstance") if result is not None: if result["permitted"] == "unknown": @@ -409,7 +443,7 @@ def user_can_edit_resource(self, user, resourceid=None): return False - def user_can_delete_resource(self, user, resourceid=None): + def user_can_delete_resource(self, user: User, resourceid: str | None=None) -> bool | None: """ Requires that a user be permitted to delete an instance @@ -417,7 +451,7 @@ def user_can_delete_resource(self, user, resourceid=None): if user.is_authenticated: if user.is_superuser: return True - if resourceid not in [None, ""]: + if resourceid is not None and resourceid != "": result = self.check_resource_instance_permissions(user, resourceid, "delete_resourceinstance") if result is not None: if result["permitted"] == "unknown": @@ -436,47 +470,47 @@ def user_can_delete_resource(self, user, resourceid=None): return False - def user_can_read_concepts(self, user): + def user_can_read_concepts(self, user: User) -> bool: """ Requires that a user is a part of the RDM Administrator group """ if user.is_authenticated: - return user.groups.filter(name="RDM Administrator").exists() + return bool(user.groups.filter(name="RDM Administrator").exists()) return False - def user_is_resource_editor(self, user): + def user_is_resource_editor(self, user: User) -> bool: """ Single test for whether a user is in the Resource Editor group """ - return user.groups.filter(name="Resource Editor").exists() + return bool(user.groups.filter(name="Resource Editor").exists()) - def user_is_resource_reviewer(self, user): + def user_is_resource_reviewer(self, user: User) -> bool: """ Single test for whether a user is in the Resource Reviewer group """ - return user.groups.filter(name="Resource Reviewer").exists() + return bool(user.groups.filter(name="Resource Reviewer").exists()) - def user_is_resource_exporter(self, user): + def user_is_resource_exporter(self, user: User) -> bool: """ Single test for whether a user is in the Resource Exporter group """ - return user.groups.filter(name="Resource Exporter").exists() + return bool(user.groups.filter(name="Resource Exporter").exists()) - def user_in_group_by_name(self, user, names): + def user_in_group_by_name(self, user: User, names: Iterable[str]) -> bool: return bool(user.groups.filter(name__in=names)) -class PermissionBackend(ObjectPermissionBackend): - def has_perm(self, user_obj, perm, obj=None): +class PermissionBackend(ObjectPermissionBackend): # type: ignore + def has_perm(self, user_obj: User, perm: str, obj: Model | None=None) -> bool: # check if user_obj and object are supported (pulled directly from guardian) support, user_obj = check_support(user_obj, obj) if not support: @@ -484,11 +518,13 @@ def has_perm(self, user_obj, perm, obj=None): if "." in perm: app_label, perm = perm.split(".") + if obj is None: + raise RuntimeError("Passed perm has app label of '%s' and obj is None") if app_label != obj._meta.app_label: raise WrongAppError("Passed perm has app label of '%s' and " "given obj has '%s'" % (app_label, obj._meta.app_label)) - ObjPermissionChecker = CachedObjectPermissionChecker(user_obj, obj) - explicitly_defined_perms = ObjPermissionChecker.get_perms(obj) + obj_checker: ObjectPermissionChecker = CachedObjectPermissionChecker(user_obj, obj) + explicitly_defined_perms = obj_checker.get_perms(obj) if len(explicitly_defined_perms) > 0: if "no_access_to_nodegroup" in explicitly_defined_perms: @@ -496,8 +532,8 @@ def has_perm(self, user_obj, perm, obj=None): else: return bool(perm in explicitly_defined_perms) else: - UserPermissionChecker = CachedUserPermissionChecker(user_obj) - return bool(UserPermissionChecker.user_has_permission(perm)) + user_checker = CachedUserPermissionChecker(user_obj) + return bool(user_checker.user_has_permission(perm)) class CachedUserPermissionChecker: @@ -505,7 +541,7 @@ class CachedUserPermissionChecker: A permission checker that leverages the 'user_permission' cache to check user-level user permissions. """ - def __init__(self, user): + def __init__(self, user: User): user_permission_cache = caches["user_permission"] current_user_cached_permissions = user_permission_cache.get(str(user.pk), {}) @@ -524,9 +560,9 @@ def __init__(self, user): current_user_cached_permissions["user_permissions"] = user_permissions user_permission_cache.set(str(user.pk), current_user_cached_permissions) - self.user_permissions = user_permissions + self.user_permissions: set[str] = user_permissions - def user_has_permission(self, permission): + def user_has_permission(self, permission: str) -> bool: if permission in self.user_permissions: return True else: @@ -537,7 +573,7 @@ class CachedObjectPermissionChecker: A permission checker that leverages the 'user_permission' cache to check object-level user permissions. """ - def __new__(cls, user, input): + def __new__(cls, user: User, input: type | Model | str) -> ObjectPermissionChecker: if inspect.isclass(input): classname = input.__name__ elif isinstance(input, Model): @@ -563,13 +599,13 @@ def __new__(cls, user, input): return checker -def get_nodegroups_by_perm_for_user_or_group(user_or_group, perms=None, any_perm=True, ignore_perms=False): +def get_nodegroups_by_perm_for_user_or_group(user_or_group: User | Group, perms: str | Iterable[str] | None=None, any_perm: bool=True, ignore_perms: bool=False) -> dict[NodeGroup, set[Permission]]: formatted_perms = [] if perms is None: if not ignore_perms: raise RuntimeError("Must provide perms or explicitly ignore") else: - if not isinstance(perms, list): + if isinstance(perms, str): perms = [perms] # in some cases, `perms` can have a `model.` prefix @@ -580,13 +616,13 @@ def get_nodegroups_by_perm_for_user_or_group(user_or_group, perms=None, any_perm formatted_perms.append(perm) permitted_nodegroups = {} - NodegroupPermissionsChecker = CachedObjectPermissionChecker( + checker: ObjectPermissionChecker = CachedObjectPermissionChecker( user_or_group, NodeGroup, ) for nodegroup in NodeGroup.objects.all(): - explicit_perms = NodegroupPermissionsChecker.get_perms(nodegroup) + explicit_perms = checker.get_perms(nodegroup) if len(explicit_perms): if ignore_perms: From 2e22944ec55d9bcd742d06907e2675c4d6eac3c0 Mon Sep 17 00:00:00 2001 From: Phil Weir Date: Mon, 6 May 2024 18:08:49 +0100 Subject: [PATCH 233/242] feat: add set-required (TBC) - this would allow both future-core and project-level introduction of resource instance groupings, which is more relevant outside default-allow --- arches/app/permissions/arches_standard.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/arches/app/permissions/arches_standard.py b/arches/app/permissions/arches_standard.py index b0f48e81aa1..82f1ee38910 100644 --- a/arches/app/permissions/arches_standard.py +++ b/arches/app/permissions/arches_standard.py @@ -308,6 +308,10 @@ def has_group_perm(group, perm, obj): return ret + def get_sets_for_user(self, user: User, perm: str) -> set[str] | None: + # We do not do set filtering - None is allow-all for sets. + return None + def get_users_for_object(self, perm: str, obj: Model) -> list[User]: """ Returns a list of user objects that have the given permission on the given object From fb707e63f10bc2e1ef1056300cc2577f27daa8b1 Mon Sep 17 00:00:00 2001 From: Phil Weir Date: Mon, 6 May 2024 18:10:18 +0100 Subject: [PATCH 234/242] fix: move logic from arches.app.utils.permission_backend to where it can be overridden in PermissionFramework --- arches/app/permissions/arches_standard.py | 68 ++++++++++++++ arches/app/utils/permission_backend.py | 103 ++++++++-------------- 2 files changed, 103 insertions(+), 68 deletions(-) diff --git a/arches/app/permissions/arches_standard.py b/arches/app/permissions/arches_standard.py index 82f1ee38910..c1053d99e9b 100644 --- a/arches/app/permissions/arches_standard.py +++ b/arches/app/permissions/arches_standard.py @@ -474,6 +474,74 @@ def user_can_delete_resource(self, user: User, resourceid: str | None=None) -> b return False + def get_editable_resource_types(self, user: User) -> list[str]: + """ + returns a list of graphs of which a user can edit resource instances + + Arguments: + user -- the user to check + + """ + + if self.user_is_resource_editor(user): + return self.get_resource_types_by_perm(user, ["models.write_nodegroup", "models.delete_nodegroup"]) + else: + return [] + + + def get_createable_resource_types(self, user: User) -> list[str]: + """ + returns a list of graphs of which a user can create resource instances + + Arguments: + user -- the user to check + + """ + if self.user_is_resource_editor(user): + return self.get_resource_types_by_perm(user, "models.write_nodegroup") + else: + return [] + + + def user_can_edit_model_nodegroups(self, user: User, resource: ResourceInstance) -> bool: + """ + returns a list of graphs of which a user can edit resource instances + + Arguments: + user -- the user to check + resource -- an instance of a model + + """ + + return bool(self.user_has_resource_model_permissions(user, ["models.write_nodegroup"], resource)) + + + def user_can_delete_model_nodegroups(self, user: User, resource: ResourceInstance) -> bool: + """ + returns a list of graphs of which a user can edit resource instances + + Arguments: + user -- the user to check + resource -- an instance of a model + + """ + + return bool(self.user_has_resource_model_permissions(user, ["models.delete_nodegroup"], resource)) + + + def user_can_read_graph(self, user: User, graph_id: str) -> bool: + """ + returns a boolean denoting if a user has permmission to read a model's nodegroups + + Arguments: + user -- the user to check + graph_id -- a graph id to check if a user has permissions to that graph's type specifically + + """ + + return bool(self.user_has_resource_model_permissions(user, ["models.read_nodegroup"], graph_id=graph_id)) + + def user_can_read_concepts(self, user: User) -> bool: """ Requires that a user is a part of the RDM Administrator group diff --git a/arches/app/utils/permission_backend.py b/arches/app/utils/permission_backend.py index 9ef06c17a65..c9020af61fc 100644 --- a/arches/app/utils/permission_backend.py +++ b/arches/app/utils/permission_backend.py @@ -22,74 +22,6 @@ def get_all_permissions(self, user_obj, obj=None): return self._backend.get_all_permissions(user_obj, obj=obj) -def get_editable_resource_types(user): - """ - returns a list of graphs of which a user can edit resource instances - - Arguments: - user -- the user to check - - """ - - if user_is_resource_editor(user): - return get_resource_types_by_perm(user, ["models.write_nodegroup", "models.delete_nodegroup"]) - else: - return [] - - -def get_createable_resource_types(user): - """ - returns a list of graphs of which a user can create resource instances - - Arguments: - user -- the user to check - - """ - if user_is_resource_editor(user): - return get_resource_types_by_perm(user, "models.write_nodegroup") - else: - return [] - - -def user_can_edit_model_nodegroups(user, resource): - """ - returns a list of graphs of which a user can edit resource instances - - Arguments: - user -- the user to check - resource -- an instance of a model - - """ - - return user_has_resource_model_permissions(user, ["models.write_nodegroup"], resource) - - -def user_can_delete_model_nodegroups(user, resource): - """ - returns a list of graphs of which a user can edit resource instances - - Arguments: - user -- the user to check - resource -- an instance of a model - - """ - - return user_has_resource_model_permissions(user, ["models.delete_nodegroup"], resource) - - -def user_can_read_graph(user, graph_id): - """ - returns a boolean denoting if a user has permmission to read a model's nodegroups - - Arguments: - user -- the user to check - graph_id -- a graph id to check if a user has permissions to that graph's type specifically - - """ - - return user_has_resource_model_permissions(user, ["models.read_nodegroup"], graph_id=graph_id) - - def user_created_transaction(user, transactionid): if user.is_authenticated: if user.is_superuser: @@ -103,6 +35,26 @@ def user_created_transaction(user, transactionid): class PermissionFramework(metaclass=ABCMeta): + @abstractmethod + def user_can_read_graph(self, user, graph_id): + ... + + @abstractmethod + def user_can_delete_model_nodegroups(self, user, resource): + ... + + @abstractmethod + def user_can_edit_model_nodegroups(self, user, resource): + ... + + @abstractmethod + def get_createable_resource_types(self, user): + ... + + @abstractmethod + def get_editable_resource_types(self, user): + ... + @abstractmethod def assign_perm(self, perm, user_or_group, obj=None): ... @@ -306,3 +258,18 @@ def get_resource_types_by_perm(user, perms): def user_in_group_by_name(user, names): return _get_permission_framework().user_in_group_by_name(user, names) + +def user_can_read_graph(user, graph_id): + return _get_permission_framework().user_can_read_graph(user, graph_id) + +def user_can_delete_model_nodegroups(user, resource): + return _get_permission_framework().user_can_delete_model_nodegroups(user, resource) + +def user_can_edit_model_nodegroups(user, resource): + return _get_permission_framework().user_can_edit_model_nodegroups(user, resource) + +def get_createable_resource_types(user): + return _get_permission_framework().get_createable_resource_types(user) + +def get_editable_resource_types(user): + return _get_permission_framework().get_editable_resource_types(user) From 43183ef7b94851034ded131fcaeeaf452898cb36 Mon Sep 17 00:00:00 2001 From: Phil Weir Date: Mon, 6 May 2024 18:11:04 +0100 Subject: [PATCH 235/242] fix: move group_required logic to PermissionFramework, as otherwise uncustomizable --- arches/app/permissions/arches_standard.py | 14 ++++++++++++++ arches/app/utils/decorators.py | 5 ++--- arches/app/utils/permission_backend.py | 7 +++++++ arches/app/views/graph.py | 2 +- 4 files changed, 24 insertions(+), 4 deletions(-) diff --git a/arches/app/permissions/arches_standard.py b/arches/app/permissions/arches_standard.py index c1053d99e9b..e1e1e1095a9 100644 --- a/arches/app/permissions/arches_standard.py +++ b/arches/app/permissions/arches_standard.py @@ -579,6 +579,20 @@ def user_is_resource_exporter(self, user: User) -> bool: def user_in_group_by_name(self, user: User, names: Iterable[str]) -> bool: return bool(user.groups.filter(name__in=names)) + def group_required(self, user: User, *group_names: list[str]) -> bool: + # To fully reimplement this without Django groups, the following group names must (currently) be handled: + # - Application Administrator + # - RDM Administrator + # - Graph Editor + # - Resource Editor + # - Resource Exporter + # - System Administrator + + if user.is_authenticated: + if user.is_superuser or bool(user.groups.filter(name__in=group_names)): + return True + return False + class PermissionBackend(ObjectPermissionBackend): # type: ignore diff --git a/arches/app/utils/decorators.py b/arches/app/utils/decorators.py index 5a614a56835..c387984b632 100644 --- a/arches/app/utils/decorators.py +++ b/arches/app/utils/decorators.py @@ -28,6 +28,7 @@ from arches.app.utils.permission_backend import user_can_delete_resource from arches.app.utils.permission_backend import user_can_read_concepts from arches.app.utils.permission_backend import user_created_transaction +from arches.app.utils.permission_backend import group_required as permission_group_required from django.contrib.auth.decorators import user_passes_test # Get an instance of a logger @@ -66,9 +67,7 @@ def group_required(*group_names, raise_exception=False): """ def in_groups(u): - if u.is_authenticated: - if u.is_superuser or bool(u.groups.filter(name__in=group_names)): - return True + passed = permission_group_required(u, *group_names) if raise_exception: raise PermissionDenied # else: user_passes_test() redirects to nowhere diff --git a/arches/app/utils/permission_backend.py b/arches/app/utils/permission_backend.py index c9020af61fc..ce320524c33 100644 --- a/arches/app/utils/permission_backend.py +++ b/arches/app/utils/permission_backend.py @@ -147,6 +147,10 @@ def get_resource_types_by_perm(self, user, perms): def user_in_group_by_name(self, user, names): ... + @abstractmethod + def group_required(self, user, *group_names): + ... + _PERMISSION_FRAMEWORK = None def _get_permission_framework(): @@ -273,3 +277,6 @@ def get_createable_resource_types(user): def get_editable_resource_types(user): return _get_permission_framework().get_editable_resource_types(user) + +def group_required(user, *group_names): + return _get_permission_framework().group_required(user, *group_names) diff --git a/arches/app/views/graph.py b/arches/app/views/graph.py index 800583fcb65..5c1e6433dc6 100644 --- a/arches/app/views/graph.py +++ b/arches/app/views/graph.py @@ -189,7 +189,7 @@ def get_ontology_namespaces(self): def get(self, request, graphid): if graphid == settings.SYSTEM_SETTINGS_RESOURCE_MODEL_ID: - if not request.user.groups.filter(name="System Administrator").exists(): + if not group_required("System Administrator", raise_exception=True): raise PermissionDenied self.graph = Graph.objects.get(graphid=graphid) From bd11f78cc3720860cec346b2c3d025c0a0848021 Mon Sep 17 00:00:00 2001 From: Phil Weir Date: Mon, 6 May 2024 18:12:59 +0100 Subject: [PATCH 236/242] tests: add tests for permissions frameworks --- .../base_permissions_framework_test.py | 85 +++++++++++++++++ .../permissions_arches_default_deny_tests.py | 94 ++++++++++++++++++ .../permissions_arches_standard_tests.py | 95 +++++++++++++++++++ 3 files changed, 274 insertions(+) create mode 100644 tests/permissions/base_permissions_framework_test.py create mode 100644 tests/permissions/permissions_arches_default_deny_tests.py create mode 100644 tests/permissions/permissions_arches_standard_tests.py diff --git a/tests/permissions/base_permissions_framework_test.py b/tests/permissions/base_permissions_framework_test.py new file mode 100644 index 00000000000..c4f548d879f --- /dev/null +++ b/tests/permissions/base_permissions_framework_test.py @@ -0,0 +1,85 @@ +""" +ARCHES - a program developed to inventory and manage immovable cultural heritage. +Copyright (C) 2013 J. Paul Getty Trust and World Monuments Fund +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 . +""" + +from tests.base_test import ArchesTestCase + +import os +from tests import test_settings +from tests.base_test import ArchesTestCase +from django.core import management +from django.urls import reverse +from django.test.client import RequestFactory, Client +from django.test.utils import captured_stdout +from arches.app.utils.betterJSONSerializer import JSONSerializer, JSONDeserializer +from django.contrib.auth.models import User +from django.contrib.auth.models import Group +from arches.app.models.models import GraphModel, ResourceInstance, Node +from arches.app.models.resource import Resource +from arches.app.permissions.arches_default_deny import ArchesDefaultDenyPermissionFramework + +class ArchesPermissionFrameworkTestCase(ArchesTestCase): + def setUp(self): + self.expected_resource_count = 2 + self.client = Client() + self.data_type_graphid = "330802c5-95bd-11e8-b7ac-acde48001122" + self.resource_instance_id = "f562c2fa-48d3-4798-a723-10209806c068" + self.user = User.objects.get(username="ben") + self.group = Group.objects.get(pk=2) + self.framework = self.FRAMEWORK() + resource = Resource.objects.get(pk=self.resource_instance_id) + resource.graph_id = self.data_type_graphid + resource.remove_resource_instance_permissions() + + def tearDown(self): + ResourceInstance.objects.filter(graph_id=self.data_type_graphid).delete() + + @classmethod + def add_users(cls): + profiles = ( + {"name": "ben", "email": "ben@test.com", "password": "Test12345!", "groups": ["Graph Editor", "Resource Editor"]}, + { + "name": "sam", + "email": "sam@test.com", + "password": "Test12345!", + "groups": ["Graph Editor", "Resource Editor", "Resource Reviewer"], + }, + {"name": "jim", "email": "jim@test.com", "password": "Test12345!", "groups": ["Graph Editor", "Resource Editor"]}, + ) + + for profile in profiles: + try: + user = User.objects.create_user(username=profile["name"], email=profile["email"], password=profile["password"]) + user.save() + + for group_name in profile["groups"]: + group = Group.objects.get(name=group_name) + group.user_set.add(user) + + except Exception as e: + print(e) + + @classmethod + def setUpClass(cls): + cls.data_type_graphid = "330802c5-95bd-11e8-b7ac-acde48001122" + if not GraphModel.objects.filter(pk=cls.data_type_graphid).exists(): + # TODO: Fix this to run inside transaction, i.e. after super().setUpClass() + # https://github.com/archesproject/arches/issues/10719 + test_pkg_path = os.path.join(test_settings.TEST_ROOT, "fixtures", "testing_prj", "testing_prj", "pkg") + with captured_stdout(): + management.call_command("packages", operation="load_package", source=test_pkg_path, yes=True, verbosity=0) + + super().setUpClass() + cls.add_users() + diff --git a/tests/permissions/permissions_arches_default_deny_tests.py b/tests/permissions/permissions_arches_default_deny_tests.py new file mode 100644 index 00000000000..e21b3ef8b39 --- /dev/null +++ b/tests/permissions/permissions_arches_default_deny_tests.py @@ -0,0 +1,94 @@ +""" +ARCHES - a program developed to inventory and manage immovable cultural heritage. +Copyright (C) 2013 J. Paul Getty Trust and World Monuments Fund +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 . +""" + +import os +from tests import test_settings +from tests.permissions.base_permissions_framework_test import ArchesPermissionFrameworkTestCase +from django.core import management +from django.urls import reverse +from django.test.client import RequestFactory, Client +from django.test.utils import captured_stdout +from arches.app.utils.betterJSONSerializer import JSONSerializer, JSONDeserializer +from django.contrib.auth.models import User +from django.contrib.auth.models import Group +from arches.app.models.models import GraphModel, ResourceInstance, Node +from arches.app.models.resource import Resource +from arches.app.permissions.arches_default_deny import ArchesDefaultDenyPermissionFramework + +# these tests can be run from the command line via +# python manage.py test tests.permissions.permission_tests --settings="tests.test_settings" + + +class ArchesDefaultDenyPermissionTests(ArchesPermissionFrameworkTestCase): + FRAMEWORK = ArchesDefaultDenyPermissionFramework + + def test_user_cannot_view_without_permission(self): + """ + Tests if a user is _not_ allowed to view a resource with implicit permissions but is with explicit permissions, provided + that 'view_resourceinstance' is assigned. + """ + + implicit_permission = self.framework.user_can_read_resource(self.user, self.resource_instance_id) + resource = ResourceInstance.objects.get(resourceinstanceid=self.resource_instance_id) + self.framework.assign_perm("change_resourceinstance", self.group, resource) + can_access_without_view_permission = self.framework.user_can_read_resource(self.user, self.resource_instance_id) + self.framework.assign_perm("view_resourceinstance", self.group, resource) + can_access_with_view_permission = self.framework.user_can_read_resource(self.user, self.resource_instance_id) + self.assertTrue( + implicit_permission is False and can_access_without_view_permission is False and can_access_with_view_permission is True + ) + + def test_user_has_resource_model_permissions(self): + """ + Tests that a user cannot access an instance if they have no access to any nodegroup. + + """ + + resource = ResourceInstance.objects.get(resourceinstanceid=self.resource_instance_id) + nodes = Node.objects.filter(graph_id=resource.graph_id) + for node in nodes: + if node.nodegroup: + self.framework.assign_perm("no_access_to_nodegroup", self.group, node.nodegroup) + hasperms = self.framework.user_has_resource_model_permissions(self.user, ["models.read_nodegroup"], resource) + self.assertTrue(hasperms is False) + + def test_get_restricted_users(self): + """ + Tests that users are properly identified as restricted. + """ + + resource = ResourceInstance.objects.get(resourceinstanceid=self.resource_instance_id) + self.framework.assign_perm("no_access_to_resourceinstance", self.group, resource) + ben = self.user + jim = User.objects.get(username="jim") + sam = User.objects.get(username="sam") + admin = User.objects.get(username="admin") + self.framework.assign_perm("view_resourceinstance", ben, resource) + self.framework.assign_perm("change_resourceinstance", jim, resource) + + restrictions = self.framework.get_restricted_users(resource) + + results = [ + jim.id in restrictions["cannot_read"], + ben.id in restrictions["cannot_write"], + sam.id in restrictions["cannot_delete"], + sam.id in restrictions["no_access"], + admin.id not in restrictions["cannot_read"], + admin.id not in restrictions["cannot_write"], + admin.id not in restrictions["cannot_delete"], + admin.id not in restrictions["no_access"], + ] + + self.assertTrue(all(results) is True) diff --git a/tests/permissions/permissions_arches_standard_tests.py b/tests/permissions/permissions_arches_standard_tests.py new file mode 100644 index 00000000000..488cee70376 --- /dev/null +++ b/tests/permissions/permissions_arches_standard_tests.py @@ -0,0 +1,95 @@ +""" +ARCHES - a program developed to inventory and manage immovable cultural heritage. +Copyright (C) 2013 J. Paul Getty Trust and World Monuments Fund +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 . +""" + +import os +from tests import test_settings +from tests.base_test import ArchesTestCase +from tests.permissions.base_permissions_framework_test import ArchesPermissionFrameworkTestCase +from django.core import management +from django.urls import reverse +from django.test.client import RequestFactory, Client +from django.test.utils import captured_stdout +from arches.app.utils.betterJSONSerializer import JSONSerializer, JSONDeserializer +from django.contrib.auth.models import User +from django.contrib.auth.models import Group +from arches.app.models.models import GraphModel, ResourceInstance, Node +from arches.app.models.resource import Resource +from arches.app.permissions.arches_standard import ArchesStandardPermissionFramework + +# these tests can be run from the command line via +# python manage.py test tests.permissions.permission_tests --settings="tests.test_settings" + + +class ArchesStandardPermissionTests(ArchesPermissionFrameworkTestCase): + FRAMEWORK = ArchesStandardPermissionFramework + + def test_user_cannot_view_without_permission(self): + """ + Tests if a user is allowed to view a resource with implicit permissions and explicit permissions, but + not without explicit permission if a permission other than 'view_resourceinstance' is assigned. + """ + + implicit_permission = self.framework.user_can_read_resource(self.user, self.resource_instance_id) + resource = ResourceInstance.objects.get(resourceinstanceid=self.resource_instance_id) + self.framework.assign_perm("change_resourceinstance", self.group, resource) + can_access_without_view_permission = self.framework.user_can_read_resource(self.user, self.resource_instance_id) + self.framework.assign_perm("view_resourceinstance", self.group, resource) + can_access_with_view_permission = self.framework.user_can_read_resource(self.user, self.resource_instance_id) + self.assertTrue( + implicit_permission is True and can_access_without_view_permission is False and can_access_with_view_permission is True + ) + + def test_user_has_resource_model_permissions(self): + """ + Tests that a user cannot access an instance if they have no access to any nodegroup. + + """ + + resource = ResourceInstance.objects.get(resourceinstanceid=self.resource_instance_id) + nodes = Node.objects.filter(graph_id=resource.graph_id) + for node in nodes: + if node.nodegroup: + self.framework.assign_perm("no_access_to_nodegroup", self.group, node.nodegroup) + hasperms = self.framework.user_has_resource_model_permissions(self.user, ["models.read_nodegroup"], resource) + self.assertTrue(hasperms is False) + + def test_get_restricted_users(self): + """ + Tests that users are properly identified as restricted. + """ + + resource = ResourceInstance.objects.get(resourceinstanceid=self.resource_instance_id) + self.framework.assign_perm("no_access_to_resourceinstance", self.group, resource) + ben = self.user + jim = User.objects.get(username="jim") + sam = User.objects.get(username="sam") + admin = User.objects.get(username="admin") + self.framework.assign_perm("view_resourceinstance", ben, resource) + self.framework.assign_perm("change_resourceinstance", jim, resource) + + restrictions = self.framework.get_restricted_users(resource) + + results = [ + jim.id in restrictions["cannot_read"], + ben.id in restrictions["cannot_write"], + sam.id in restrictions["cannot_delete"], + sam.id in restrictions["no_access"], + admin.id not in restrictions["cannot_read"], + admin.id not in restrictions["cannot_write"], + admin.id not in restrictions["cannot_delete"], + admin.id not in restrictions["no_access"], + ] + + self.assertTrue(all(results) is True) From 0f6a8b7419f4ace8c4ad8b260726719f89024e1b Mon Sep 17 00:00:00 2001 From: Phil Weir Date: Mon, 6 May 2024 18:31:43 +0100 Subject: [PATCH 237/242] fix: == to is in False comparison --- arches/app/permissions/arches_default_deny.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arches/app/permissions/arches_default_deny.py b/arches/app/permissions/arches_default_deny.py index 8258c45b5cf..3765c0094b8 100644 --- a/arches/app/permissions/arches_default_deny.py +++ b/arches/app/permissions/arches_default_deny.py @@ -41,7 +41,7 @@ def check_resource_instance_permissions(self, user: User, resourceid: str, permi # possible by assigning appropriate group permissions). if result["permitted"] == "unknown": result["permitted"] = False - elif result["permitted"] == False: + elif result["permitted"] is False: # This covers the case where one group denies permission and another # allows it. Ideally, the deny would override (as normal in Arches) but From 3025687cd291230aa865f373df5d7121f56f6e68 Mon Sep 17 00:00:00 2001 From: Phil Weir Date: Thu, 25 Apr 2024 01:50:16 +0100 Subject: [PATCH 238/242] use nodegroup pks rather than full object when permission-checking, if possible --- arches/app/models/models.py | 6 +++--- .../utils/data_management/resources/formats/format.py | 2 +- arches/app/views/api.py | 10 +++++----- arches/app/views/base.py | 4 +++- arches/app/views/search.py | 2 +- 5 files changed, 13 insertions(+), 11 deletions(-) diff --git a/arches/app/models/models.py b/arches/app/models/models.py index bc14f4b6512..9cccf226619 100644 --- a/arches/app/models/models.py +++ b/arches/app/models/models.py @@ -1391,19 +1391,19 @@ def is_reviewer(self): def viewable_nodegroups(self): from arches.app.utils.permission_backend import get_nodegroups_by_perm - return set(str(nodegroup.pk) for nodegroup in get_nodegroups_by_perm(self.user, ["models.read_nodegroup"], any_perm=True)) + return set(str(nodegroup_pk) for nodegroup_pk in get_nodegroups_by_perm(self.user, ["models.read_nodegroup"], any_perm=True)) @property def editable_nodegroups(self): from arches.app.utils.permission_backend import get_nodegroups_by_perm - return set(str(nodegroup.pk) for nodegroup in get_nodegroups_by_perm(self.user, ["models.write_nodegroup"], any_perm=True)) + return set(str(nodegroup_pk) for nodegroup_pk in get_nodegroups_by_perm(self.user, ["models.write_nodegroup"], any_perm=True)) @property def deletable_nodegroups(self): from arches.app.utils.permission_backend import get_nodegroups_by_perm - return set(str(nodegroup.pk) for nodegroup in get_nodegroups_by_perm(self.user, ["models.delete_nodegroup"], any_perm=True)) + return set(str(nodegroup_pk) for nodegroup_pk in get_nodegroups_by_perm(self.user, ["models.delete_nodegroup"], any_perm=True)) class Meta: managed = True diff --git a/arches/app/utils/data_management/resources/formats/format.py b/arches/app/utils/data_management/resources/formats/format.py index 9d51b0c7a44..761048f5821 100644 --- a/arches/app/utils/data_management/resources/formats/format.py +++ b/arches/app/utils/data_management/resources/formats/format.py @@ -263,7 +263,7 @@ def get_tiles(self, graph_id=None, resourceinstanceids=None, **kwargs): user = kwargs.get("user", None) permitted_nodegroups = [] if user: - permitted_nodegroups = [str(nodegroup.pk) for nodegroup in get_nodegroups_by_perm(user, "models.read_nodegroup")] + permitted_nodegroups = get_nodegroups_by_perm(user, "models.read_nodegroup") if (graph_id is None or graph_id is False) and resourceinstanceids is None: raise MissingGraphException(_("Must supply either a graph id or a list of resource instance ids to export")) diff --git a/arches/app/views/api.py b/arches/app/views/api.py index 6ddc99a2314..429c19d3dbb 100644 --- a/arches/app/views/api.py +++ b/arches/app/views/api.py @@ -1051,7 +1051,7 @@ def get(self, request): canvas = request.GET.get("canvas", None) resourceid = request.GET.get("resourceid", None) nodeid = request.GET.get("nodeid", None) - permitted_nodegroups = [nodegroup for nodegroup in get_nodegroups_by_perm(request.user, "models.read_nodegroup")] + permitted_nodegroups = get_nodegroups_by_perm(request.user, "models.read_nodegroup") annotations = models.VwAnnotation.objects.filter(nodegroup__in=permitted_nodegroups) if canvas is not None: annotations = annotations.filter(canvas=canvas) @@ -1086,7 +1086,7 @@ def get(self, request): class IIIFAnnotationNodes(APIBase): def get(self, request, indent=None): - permitted_nodegroups = [nodegroup for nodegroup in get_nodegroups_by_perm(request.user, "models.read_nodegroup")] + permitted_nodegroups = get_nodegroups_by_perm(request.user, "models.read_nodegroup") annotation_nodes = models.Node.objects.filter(nodegroup__in=permitted_nodegroups, datatype="annotation") return JSONResponse( [ @@ -1373,7 +1373,7 @@ def get(self, request, tileid): return JSONResponse(str(e), status=404) # filter tiles from attribute query based on user permissions - permitted_nodegroups = [str(nodegroup.pk) for nodegroup in get_nodegroups_by_perm(request.user, "models.read_nodegroup")] + permitted_nodegroups = get_nodegroups_by_perm(request.user, "models.read_nodegroup") if str(tile.nodegroup_id) in permitted_nodegroups: return JSONResponse(tile, status=200) else: @@ -1404,7 +1404,7 @@ def get(self, request, nodegroupid=None): try: nodegroup = models.NodeGroup.objects.get(pk=params["nodegroupid"]) - permitted_nodegroups = [nodegroup.pk for nodegroup in get_nodegroups_by_perm(user, perms)] + permitted_nodegroups = get_nodegroups_by_perm(user, perms) except Exception as e: return JSONResponse(str(e), status=404) @@ -1452,7 +1452,7 @@ def graphLookup(graphid): # try to get nodes by attribute filter and then get nodes by passed in user perms try: nodes = models.Node.objects.filter(**dict(params)).values() - permitted_nodegroups = [str(nodegroup.pk) for nodegroup in get_nodegroups_by_perm(user, perms)] + permitted_nodegroups = get_nodegroups_by_perm(user, perms) except Exception as e: return JSONResponse(str(e), status=404) diff --git a/arches/app/views/base.py b/arches/app/views/base.py index 7b2d799f80e..b0c5b4b8028 100644 --- a/arches/app/views/base.py +++ b/arches/app/views/base.py @@ -52,7 +52,9 @@ def get_context_data(self, **kwargs): if self.request.user.has_perm("view_plugin", plugin): context["plugins"].append(plugin) - createable = get_createable_resource_types(self.request.user) + createable = list( + models.GraphModel.objects.filter(pk__in=list(get_createable_resource_types(self.request.user))).all() + ) createable.sort(key=lambda x: x.name.lower()) context["createable_resources"] = JSONSerializer().serialize( createable, diff --git a/arches/app/views/search.py b/arches/app/views/search.py index b229430d50a..570123641c6 100644 --- a/arches/app/views/search.py +++ b/arches/app/views/search.py @@ -443,7 +443,7 @@ def get_provisional_type(request): def get_permitted_nodegroups(user): - return [str(nodegroup.pk) for nodegroup in get_nodegroups_by_perm(user, "models.read_nodegroup")] + return get_nodegroups_by_perm(user, "models.read_nodegroup") def buffer(request): From db9c7fefad75c57b13e7bb74a20975b58259bbfe Mon Sep 17 00:00:00 2001 From: Phil Weir Date: Mon, 6 May 2024 20:33:39 +0100 Subject: [PATCH 239/242] time_wheel to use string nodegroups --- arches/app/search/time_wheel.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arches/app/search/time_wheel.py b/arches/app/search/time_wheel.py index 38b174db76e..2cccf81f0df 100644 --- a/arches/app/search/time_wheel.py +++ b/arches/app/search/time_wheel.py @@ -170,7 +170,7 @@ def appendDateRanges(self, results, range_lookup): return results def get_permitted_nodegroups(self, user): - return [str(nodegroup.pk) for nodegroup in get_nodegroups_by_perm(user, "models.read_nodegroup")] + return get_nodegroups_by_perm(user, "models.read_nodegroup") class d3Item(object): From fccf567b40bbb3076191746f34424a67a6f94dcd Mon Sep 17 00:00:00 2001 From: Phil Weir Date: Thu, 30 May 2024 18:44:45 +0100 Subject: [PATCH 240/242] fix: remove dauthz references --- arches/settings.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/arches/settings.py b/arches/settings.py index 3dd0d3458b0..dcaae16d768 100644 --- a/arches/settings.py +++ b/arches/settings.py @@ -330,7 +330,6 @@ AUTHENTICATION_BACKENDS = ( "arches.app.utils.email_auth_backend.EmailAuthenticationBackend", "oauth2_provider.backends.OAuth2Backend", - #"dauthz.backends.CasbinBackend", "django.contrib.auth.backends.ModelBackend", # this is default "arches.app.permissions.arches_standard.PermissionBackend", "arches.app.utils.external_oauth_backend.ExternalOauthAuthenticationBackend", @@ -354,7 +353,6 @@ "corsheaders", "oauth2_provider", "django_celery_results", - #"dauthz.apps.DauthzConfig" ) ARCHES_APPLICATIONS = () @@ -372,7 +370,6 @@ "django.contrib.auth.middleware.AuthenticationMiddleware", "django.contrib.messages.middleware.MessageMiddleware", # "django.middleware.clickjacking.XFrameOptionsMiddleware", - #"dauthz.middlewares.request_middleware.RequestMiddleware", "arches.app.utils.middleware.SetAnonymousUser", ] From f020aca27f580238c12abce812fdffe577a0db94 Mon Sep 17 00:00:00 2001 From: Phil Weir Date: Thu, 30 May 2024 18:54:59 +0100 Subject: [PATCH 241/242] feat: add get_createable_resource_models to allow get_createable_resource_types to remain ID-only --- arches/app/permissions/arches_standard.py | 4 ++-- arches/app/utils/permission_backend.py | 3 +++ arches/app/views/base.py | 7 ++----- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/arches/app/permissions/arches_standard.py b/arches/app/permissions/arches_standard.py index e1e1e1095a9..d2dd968f53e 100644 --- a/arches/app/permissions/arches_standard.py +++ b/arches/app/permissions/arches_standard.py @@ -418,8 +418,8 @@ def get_resource_types_by_perm(self, user: User, perms: str | Iterable[str]) -> graphs = set() nodegroups = self.get_nodegroups_by_perm(user, perms) for node in Node.objects.filter(nodegroup__in=nodegroups).prefetch_related("graph"): - if node.graph.isresource and str(node.graph_id) != settings.SYSTEM_SETTINGS_RESOURCE_MODEL_ID: - graphs.add(node.graph) + if node.graph.isresource and str(node.graph_id) != SystemSettings.SYSTEM_SETTINGS_RESOURCE_MODEL_ID: + graphs.add(str(node.graph.pk)) return list(graphs) diff --git a/arches/app/utils/permission_backend.py b/arches/app/utils/permission_backend.py index ce320524c33..dea884eaf1b 100644 --- a/arches/app/utils/permission_backend.py +++ b/arches/app/utils/permission_backend.py @@ -167,6 +167,9 @@ def _get_permission_framework(): _PERMISSION_FRAMEWORK = ArchesStandardPermissionFramework() return _PERMISSION_FRAMEWORK +def get_createable_resource_models(user): + return GraphModel.objects.filter(pk__in=list(get_createable_resource_types(user))).all() + def assign_perm(perm, user_or_group, obj=None): return _get_permission_framework().assign_perm(perm, user_or_group, obj=obj) diff --git a/arches/app/views/base.py b/arches/app/views/base.py index b0c5b4b8028..49813cbd338 100644 --- a/arches/app/views/base.py +++ b/arches/app/views/base.py @@ -26,13 +26,12 @@ from django.views.generic import TemplateView from arches.app.datatypes.datatypes import DataTypeFactory from arches.app.utils.permission_backend import ( - get_createable_resource_types, + get_createable_resource_models, user_is_resource_reviewer, get_editable_resource_types, get_resource_types_by_perm, user_can_read_map_layers, ) -from arches.app.utils.permission_backend import get_createable_resource_types, user_is_resource_reviewer class BaseManagerView(TemplateView): @@ -52,9 +51,7 @@ def get_context_data(self, **kwargs): if self.request.user.has_perm("view_plugin", plugin): context["plugins"].append(plugin) - createable = list( - models.GraphModel.objects.filter(pk__in=list(get_createable_resource_types(self.request.user))).all() - ) + createable = list(get_createable_resource_models(self.request.user)) createable.sort(key=lambda x: x.name.lower()) context["createable_resources"] = JSONSerializer().serialize( createable, From 8fa8cbe74f192cefbfab1d89b772da006627278f Mon Sep 17 00:00:00 2001 From: Phil Weir Date: Sat, 8 Jun 2024 17:29:29 +0100 Subject: [PATCH 242/242] fix: get_nodegroups_by_perm now returns IDs, so filter tiles by nodegroup_id, not nodegroup --- arches/app/models/resource.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arches/app/models/resource.py b/arches/app/models/resource.py index 8280fb3144c..e5448cfede3 100644 --- a/arches/app/models/resource.py +++ b/arches/app/models/resource.py @@ -256,7 +256,7 @@ def load_tiles(self, user=None, perm='read_nodegroup'): self.tiles = list(models.TileModel.objects.filter(resourceinstance=self)) if user: readable_nodegroups = get_nodegroups_by_perm(user, perm, any_perm=True) - self.tiles = [tile for tile in self.tiles if tile.nodegroup is not None and tile.nodegroup in readable_nodegroups] + self.tiles = [tile for tile in self.tiles if tile.nodegroup is not None and tile.nodegroup_id in readable_nodegroups] # # flatten out the nested tiles into a single array def get_flattened_tiles(self):