├── .bumpversion.cfg ├── .editorconfig ├── .eslintrc.cjs ├── .gitignore ├── .pre-commit-config.yaml ├── .prettierrc.cjs ├── CHANGES.rst ├── LICENSE ├── MANIFEST.in ├── README.md ├── VERSION ├── doc ├── admin │ ├── backup_restore.rst │ ├── conf.py │ ├── configure.rst │ ├── install.rst │ ├── toc.rst │ └── upgrade.rst ├── developer │ ├── Makefile │ ├── auth.rst │ ├── change.rst │ ├── component.rst │ ├── conf.py │ ├── create.rst │ ├── error_report.rst │ ├── file_upload.rst │ ├── index.rst │ ├── misc.rst │ ├── ogr2ogr.rst │ ├── python_api.rst │ ├── resource.rst │ ├── toc.rst │ └── vector_data_types.rst ├── internal │ ├── Makefile │ ├── apitype.rst │ ├── code_formatting.rst │ ├── component.rst │ ├── conf.py │ ├── error.rst │ ├── i18n.rst │ ├── index.rst │ ├── jsrealm.rst │ ├── lunkwill.rst │ ├── migration.rst │ ├── test.rst │ ├── toc.rst │ ├── url_route.rst │ └── versioning.rst └── toc.rst ├── docker.py ├── migration ├── 2015-06-30-wmsclient-auth.sql ├── 2015-09-21-wfsserver-max-features.sql ├── 2015-10-01-auth-user-disabled.sql ├── 2015-12-28-auth-group-register.sql ├── 2016-03-08-feature-geometry-type.sql ├── 2017-02-12-layer-field.sql ├── 2017-02-13-wmsclient-connection-version-check.sql ├── 2018-02-02-webap-draw_order.sql ├── 2018-09-11-resource-creation_date.sql ├── 2018-12-16-postgis_connection-port.sql ├── 2019-05-16-webmap-editable.sql ├── 2019-05-30-srs.sql ├── 2019-06-02-webmap-add-annotation.sql ├── 2019-08-29-raster_layer-dtype.sql ├── 2019-10-10-feature-layer-geometyr-type.sql ├── 2020-01-15-auth_user-oauth_subject.sql ├── 2020-06-16-last-activity.sql ├── 2020-06-22-wmsserver-layer-position.sql ├── 2020-06-25-tmsclient.sql ├── 2020-07-11-oauth-timestamp.sql ├── 2020-07-11-oauth-token.sql ├── 2020-07-15-pyramid-session.sql ├── 2020-07-22-wfsserver_layer-keyname-unique.sql ├── 2020-08-19-social.sql ├── 2020-09-02-fileobj-unique.sql ├── 2020-10-18-lookup_table.sql ├── 2020-10-19-svg_marker_library.sql ├── 2020-12-09-tmsclient_connection-verify.sql ├── 2020-12-12-layer_field-unique.sql └── 2021-01-01-migration-table.sql ├── nextgisweb ├── __init__.py ├── __main__.py ├── audit │ ├── __init__.py │ ├── api.py │ ├── backend │ │ ├── __init__.py │ │ ├── base.py │ │ ├── dbase.py │ │ └── file.py │ ├── component.py │ ├── locale │ │ └── ru.po │ ├── model.py │ ├── nodepkg │ │ ├── journal │ │ │ ├── Journal.less │ │ │ ├── Journal.tsx │ │ │ └── index.ts │ │ └── package.json │ ├── tween.py │ └── view.py ├── auth │ ├── __init__.py │ ├── api.py │ ├── cli.py │ ├── component.py │ ├── exception.py │ ├── locale │ │ └── ru.po │ ├── migration │ │ ├── 05778268-add-user-disabled-column.fw.sql │ │ ├── 05778268-add-user-disabled-column.rw.sql │ │ ├── 073aa220-add-group-register-column.fw.sql │ │ ├── 073aa220-add-group-register-column.rw.sql │ │ ├── 24d8973b-add-user-oauth_subject-column.fw.sql │ │ ├── 24d8973b-add-user-oauth_subject-column.rw.sql │ │ ├── 27e8ee61-last-activity-column.fw.sql │ │ ├── 27e8ee61-last-activity-column.rw.sql │ │ ├── 28691764-oauth-timestamp.fw.sql │ │ ├── 28691764-oauth-timestamp.rw.sql │ │ ├── 28691765-oauth-token.fw.sql │ │ ├── 28691765-oauth-token.rw.sql │ │ ├── 2d0ad4b8-add-auth_user_lower_keyname_idx.fw.sql │ │ ├── 2d0ad4b8-add-auth_user_lower_keyname_idx.rw.sql │ │ ├── 2eeb41fd-add-language-column.fw.sql │ │ ├── 2eeb41fd-add-language-column.rw.sql │ │ ├── 3372ed9b-add-auth_principal_cls_lower_display_name_idx.fw.sql │ │ ├── 3372ed9b-add-auth_principal_cls_lower_display_name_idx.rw.sql │ │ ├── 35f4315f-oauth-password-token-table.fw.sql │ │ ├── 35f4315f-oauth-password-token-table.rw.sql │ │ ├── 38dc8c21-user-alink-token.fw.sql │ │ ├── 38dc8c21-user-alink-token.rw.sql │ │ ├── 390b25ab-jsonb-token-data.fw.sql │ │ ├── 390b25ab-jsonb-token-data.rw.sql │ │ ├── 39b20e77-group-oauth_mapping-column.fw.sql │ │ ├── 39b20e77-group-oauth_mapping-column.rw.sql │ │ ├── 3c756e1a-refactor-oauth.fw.sql │ │ ├── 3c756e1a-refactor-oauth.rw.sql │ │ ├── 435611dc-add-permissions-column.fw.sql │ │ ├── 435611dc-add-permissions-column.rw.sql │ │ ├── 43b64d85-fix-system-group.fw.sql │ │ └── 43b64d85-fix-system-group.rw.sql │ ├── model.py │ ├── nodepkg │ │ ├── client-settings.ts │ │ ├── component │ │ │ ├── index.ts │ │ │ ├── permission-select │ │ │ │ ├── PermissionSelect.tsx │ │ │ │ └── index.ts │ │ │ └── principal-select │ │ │ │ ├── PrincipalSelect.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── testentry.tsx │ │ │ │ └── type.ts │ │ ├── group-browse │ │ │ ├── GroupBrowse.tsx │ │ │ └── index.ts │ │ ├── group-widget │ │ │ ├── GroupWidget.tsx │ │ │ └── index.ts │ │ ├── icon.tsx │ │ ├── login-page │ │ │ ├── LoginPage.tsx │ │ │ └── index.ts │ │ ├── login │ │ │ ├── LoginBox.tsx │ │ │ ├── LoginForm.less │ │ │ ├── LoginForm.tsx │ │ │ ├── index.tsx │ │ │ ├── loginModal.tsx │ │ │ └── type.ts │ │ ├── oauth.tsx │ │ ├── package.json │ │ ├── session-invite │ │ │ ├── SessionInvite.tsx │ │ │ └── index.ts │ │ ├── settings-form │ │ │ ├── SettingsForm.tsx │ │ │ └── index.ts │ │ ├── store │ │ │ ├── authStore.ts │ │ │ └── index.ts │ │ ├── user-browse │ │ │ ├── UserBrowse.tsx │ │ │ ├── component │ │ │ │ └── ToggleSelectedUsers.tsx │ │ │ ├── index.ts │ │ │ └── type.ts │ │ └── user-widget │ │ │ ├── UserWidget.tsx │ │ │ ├── UserWidgetAlinkToken.tsx │ │ │ ├── UserWidgetPassword.tsx │ │ │ └── index.ts │ ├── oauth.py │ ├── permission.py │ ├── policy.py │ ├── test │ │ ├── __init__.py │ │ ├── test_api.py │ │ ├── test_last_activity.py │ │ ├── test_oauth.py │ │ └── test_policy.py │ ├── util.py │ └── view.py ├── basemap │ ├── __init__.py │ ├── component.py │ ├── icon │ │ └── resource │ │ │ └── basemap_layer.svg │ ├── locale │ │ └── ru.po │ ├── migration │ │ ├── 314b36a0-add-copyright_-fields.fw.sql │ │ └── 314b36a0-add-copyright_-fields.rw.sql │ ├── model.py │ ├── nodepkg │ │ ├── client-settings.ts │ │ ├── layer-widget │ │ │ ├── LayerStore.ts │ │ │ ├── LayerWidget.tsx │ │ │ ├── component │ │ │ │ └── QMSSelect.tsx │ │ │ ├── index.ts │ │ │ ├── service │ │ │ │ └── qms.ts │ │ │ └── type.ts │ │ ├── package.json │ │ ├── plugin │ │ │ └── base-map │ │ │ │ ├── BaseMap.ts │ │ │ │ └── index.ts │ │ ├── util │ │ │ ├── baselayer.ts │ │ │ └── epsg3395.ts │ │ └── webmap-widget │ │ │ ├── Basemap.ts │ │ │ ├── WebMapStore.ts │ │ │ ├── WebMapWidget.tsx │ │ │ └── index.ts │ ├── plugin.py │ └── view.py ├── core │ ├── __init__.py │ ├── backup.py │ ├── cli │ │ ├── __init__.py │ │ ├── backup.py │ │ ├── migration.py │ │ ├── operation.py │ │ └── stat_stor.py │ ├── component.py │ ├── exception.py │ ├── fontconfig.py │ ├── locale │ │ └── ru.po │ ├── migration.py │ ├── migration │ │ ├── 2d9056c4-move-measurement-settings.fw.sql │ │ ├── 2d9056c4-move-measurement-settings.rw.sql │ │ ├── 2e803d47-add-storage-tables.fw.sql │ │ ├── 2e803d47-add-storage-tables.rw.sql │ │ ├── 2e8a9c51-add-instance-id.py │ │ ├── 38db8bab-jsonb-values.fw.sql │ │ └── 38db8bab-jsonb-values.rw.sql │ ├── model.py │ ├── storage.py │ ├── test │ │ ├── __init__.py │ │ ├── test_backup.py │ │ ├── test_db.py │ │ ├── test_exception.py │ │ ├── test_migration.py │ │ ├── test_option.py │ │ ├── test_setting.py │ │ └── test_storage.py │ └── util.py ├── env │ ├── __init__.py │ ├── cli │ │ ├── __init__.py │ │ ├── base.py │ │ └── dump_config.py │ ├── compat.py │ ├── component.py │ ├── environment.py │ ├── i18n │ │ ├── __init__.py │ │ └── extract.py │ ├── model.py │ ├── package.py │ └── test │ │ ├── __init__.py │ │ ├── test_cli.py │ │ └── test_component.py ├── feature_attachment │ ├── __init__.py │ ├── api.py │ ├── component.py │ ├── exception.py │ ├── exif.py │ ├── extension.py │ ├── locale │ │ └── ru.po │ ├── migration │ │ ├── 3c7119ac-resource_id-feature_id-index.fw.sql │ │ ├── 3c7119ac-resource_id-feature_id-index.rw.sql │ │ ├── 3cab998c-add-keyname.fw.sql │ │ ├── 3cab998c-add-keyname.rw.sql │ │ ├── 3f5e63e6-add-file_meta-column.fw.sql │ │ ├── 3f5e63e6-add-file_meta-column.rw.sql │ │ ├── 420c3c4e-versioning.fw.sql │ │ └── 420c3c4e-versioning.rw.sql │ ├── model.py │ ├── nodepkg │ │ ├── attachment-bundle │ │ │ ├── ol-control │ │ │ │ ├── control.ts │ │ │ │ └── index.ts │ │ │ ├── plugin │ │ │ │ ├── index.ts │ │ │ │ └── plugin.ts │ │ │ └── tab │ │ │ │ ├── AttachmentsTab.less │ │ │ │ ├── AttachmentsTab.tsx │ │ │ │ └── index.ts │ │ ├── attachment-editor │ │ │ ├── AttachmentEditor.less │ │ │ ├── AttachmentEditor.tsx │ │ │ ├── AttachmentEditorStore.ts │ │ │ ├── component │ │ │ │ └── FileReaderImage.tsx │ │ │ ├── plugin.ts │ │ │ ├── type.ts │ │ │ └── util │ │ │ │ ├── findAttachmentIndex.ts │ │ │ │ └── isFileImage.ts │ │ ├── attachment-form │ │ │ ├── AttachmentForm.less │ │ │ ├── AttachmentForm.tsx │ │ │ └── index.ts │ │ ├── attachment-table-view │ │ │ ├── AttachmentTableView.tsx │ │ │ └── plugin.ts │ │ ├── attachment-table │ │ │ ├── AttachmentTable.less │ │ │ ├── AttachmentTable.tsx │ │ │ └── index.ts │ │ ├── client-settings.ts │ │ ├── image-thumbnail │ │ │ ├── ImageThumbnail.less │ │ │ ├── ImageThumbnail.tsx │ │ │ ├── component │ │ │ │ ├── CarouselModal.less │ │ │ │ ├── CarouselModal.tsx │ │ │ │ ├── CarouselRender.less │ │ │ │ ├── CarouselRender.tsx │ │ │ │ ├── CarouselSlide.tsx │ │ │ │ ├── PhotospherePreview.less │ │ │ │ └── PhotospherePreview.tsx │ │ │ ├── index.ts │ │ │ └── util │ │ │ │ ├── getFeatureImage.ts │ │ │ │ ├── getFileImage.ts │ │ │ │ └── isFilePanorama.ts │ │ ├── package.json │ │ └── type.ts │ ├── plugin.py │ ├── test │ │ ├── __init__.py │ │ ├── data │ │ │ └── panorama-image.jpg │ │ ├── test_api.py │ │ └── test_versioning.py │ ├── util.py │ └── view.py ├── feature_description │ ├── __init__.py │ ├── api.py │ ├── component.py │ ├── extension.py │ ├── locale │ │ └── ru.po │ ├── migration │ │ ├── 420c3c6c-versioning.fw.sql │ │ └── 420c3c6c-versioning.rw.sql │ ├── model.py │ ├── nodepkg │ │ ├── description-editor │ │ │ ├── DescriptionEditor.tsx │ │ │ ├── DescriptionEditorStore.ts │ │ │ └── plugin.ts │ │ ├── description-view │ │ │ ├── DescriptionView.tsx │ │ │ └── plugin.ts │ │ ├── package.json │ │ └── type.ts │ ├── test │ │ ├── __init__.py │ │ ├── test_api.py │ │ └── test_versioning.py │ └── util.py ├── feature_layer │ ├── __init__.py │ ├── api.py │ ├── api_export.py │ ├── api_identify.py │ ├── api_mvt.py │ ├── biutil.py │ ├── component.py │ ├── dtutil.py │ ├── exception.py │ ├── extension.py │ ├── favorite.py │ ├── feature.py │ ├── interface.py │ ├── locale │ │ └── ru.po │ ├── migration │ │ ├── 0f7ab6a1-fix-datatype-constraint.fw.sql │ │ ├── 0f7ab6a1-fix-datatype-constraint.rw.sql │ │ ├── 2b7e8ee6-layer-field-unique.fw.sql │ │ ├── 2b7e8ee6-layer-field-unique.rw.sql │ │ ├── 2c3ce7cd-lookup_table_id-column.fw.sql │ │ ├── 2c3ce7cd-lookup_table_id-column.rw.sql │ │ ├── 2cbdc86f-defer-unique-constraints.fw.sql │ │ ├── 2cbdc86f-defer-unique-constraints.rw.sql │ │ ├── 37e53073-fix-enum.fw.sql │ │ ├── 37e53073-fix-enum.rw.sql │ │ ├── 420c3c0b-versioning.fw.sql │ │ ├── 420c3c0b-versioning.rw.sql │ │ ├── 42550420-transactions.fw.sql │ │ ├── 42550420-transactions.rw.sql │ │ ├── 438055b2-add-text_search-column.fw.sql │ │ └── 438055b2-add-text_search-column.rw.sql │ ├── model.py │ ├── nodepkg │ │ ├── attribute-editor │ │ │ ├── AttributeEditor.tsx │ │ │ ├── AttributeEditorStore.ts │ │ │ ├── plugin.ts │ │ │ └── type.ts │ │ ├── client-settings.ts │ │ ├── export-form │ │ │ ├── ExportForm.tsx │ │ │ └── index.ts │ │ ├── feature-display-modal │ │ │ ├── FeatureDisplayModal.less │ │ │ ├── FeatureDisplayModal.tsx │ │ │ └── index.ts │ │ ├── feature-display │ │ │ ├── FeatureDisplayWidget.less │ │ │ ├── FeatureDisplayWidget.tsx │ │ │ └── index.ts │ │ ├── feature-editor-modal │ │ │ ├── FeatureEditorModal.less │ │ │ ├── FeatureEditorModal.tsx │ │ │ └── index.ts │ │ ├── feature-editor │ │ │ ├── FeatureEditorStore.ts │ │ │ ├── FeatureEditorWidget.less │ │ │ ├── FeatureEditorWidget.tsx │ │ │ ├── constant.ts │ │ │ ├── index.ts │ │ │ ├── registry.ts │ │ │ └── type.ts │ │ ├── feature-grid │ │ │ ├── FeatureGrid.less │ │ │ ├── FeatureGrid.tsx │ │ │ ├── FeatureGridActions.tsx │ │ │ ├── FeatureGridStore.ts │ │ │ ├── FeatureTable.less │ │ │ ├── FeatureTable.tsx │ │ │ ├── FeatureTableRows.tsx │ │ │ ├── api │ │ │ │ ├── deleteFeatures.ts │ │ │ │ └── fetchFeatures.ts │ │ │ ├── component │ │ │ │ ├── ExportAction.tsx │ │ │ │ ├── SortIcon.tsx │ │ │ │ └── TableConfigModal.tsx │ │ │ ├── constant.ts │ │ │ ├── hook │ │ │ │ └── useFeatureTable.ts │ │ │ ├── index.ts │ │ │ ├── type.ts │ │ │ └── util │ │ │ │ ├── createCacheKey.ts │ │ │ │ ├── fetchWrapper.ts │ │ │ │ ├── renderFeatureFieldValue.ts │ │ │ │ ├── scrollbarWidth.ts │ │ │ │ └── updateFeaturesValue.tsx │ │ ├── fields-widget │ │ │ ├── DatatypeSelect.tsx │ │ │ ├── FieldsStore.ts │ │ │ ├── FieldsWidget.tsx │ │ │ └── index.ts │ │ ├── geometry-info │ │ │ ├── GeometryInfo.less │ │ │ ├── GeometryInfo.tsx │ │ │ ├── component │ │ │ │ ├── GeometryInfoPreview.tsx │ │ │ │ ├── GeometryInfoTable.less │ │ │ │ └── GeometryInfoTable.tsx │ │ │ └── index.ts │ │ ├── hook │ │ │ └── useExportFeatureLayer.ts │ │ ├── package.json │ │ ├── resource-section │ │ │ ├── FeatureLayerResourceSection.tsx │ │ │ └── index.ts │ │ ├── settings-widget │ │ │ ├── SettingStore.ts │ │ │ ├── SettingsWidget.tsx │ │ │ └── index.ts │ │ ├── type │ │ │ ├── EditorStore.ts │ │ │ ├── FeatureItem.ts │ │ │ ├── GeometryInfo.ts │ │ │ └── index.ts │ │ └── util │ │ │ ├── getFeatureFieldValue.tsx │ │ │ └── ngwAttributes.ts │ ├── ogrdriver.py │ ├── test │ │ ├── __init__.py │ │ ├── data.py │ │ ├── data │ │ │ ├── filter-extent-layer.geojson │ │ │ ├── geometry │ │ │ │ ├── linestring.geojson │ │ │ │ ├── linestringz.geojson │ │ │ │ ├── multilinestring.geojson │ │ │ │ ├── multilinestringz.geojson │ │ │ │ ├── multipoint.geojson │ │ │ │ ├── multipointz.geojson │ │ │ │ ├── multipolygon.geojson │ │ │ │ ├── multipolygonz.geojson │ │ │ │ ├── point.geojson │ │ │ │ ├── pointz.geojson │ │ │ │ ├── polygon.geojson │ │ │ │ └── polygonz.geojson │ │ │ └── points.geojson │ │ ├── ref_sql │ │ │ ├── after_insert.complex.sql │ │ │ ├── after_insert.simple.sql │ │ │ ├── before_delete.complex.sql │ │ │ ├── before_delete.simple.sql │ │ │ ├── before_update.complex.sql │ │ │ ├── before_update.simple.sql │ │ │ ├── changed_fids.complex.sql │ │ │ ├── changed_fids.simple.sql │ │ │ ├── changes.complex.sql │ │ │ ├── changes.simple.sql │ │ │ ├── create_table.complex.sql │ │ │ ├── create_table.simple.sql │ │ │ ├── delete_ctab.complex.sql │ │ │ ├── delete_ctab.simple.sql │ │ │ ├── feature_pit.complex.sql │ │ │ ├── feature_pit.simple.sql │ │ │ ├── initfill.complex.sql │ │ │ └── initfill.simple.sql │ │ ├── test_api.py │ │ ├── test_api_cget.py │ │ ├── test_api_export.py │ │ ├── test_api_extent.py │ │ ├── test_api_transaction.py │ │ ├── test_api_versioning.py │ │ ├── test_layer.py │ │ ├── test_type.py │ │ ├── test_util.py │ │ └── test_versioning.py │ ├── transaction │ │ ├── __init__.py │ │ ├── api.py │ │ ├── exception.py │ │ ├── model.py │ │ └── operation.py │ ├── util.py │ ├── versioning │ │ ├── __init__.py │ │ ├── api.py │ │ ├── exception.py │ │ ├── extension.py │ │ ├── model.py │ │ └── util.py │ └── view.py ├── file_storage │ ├── __init__.py │ ├── cli.py │ ├── component.py │ ├── migration │ │ ├── 2978ca7f-fileobj-uuid-component-unique.fw.sql │ │ ├── 2978ca7f-fileobj-uuid-component-unique.rw.sql │ │ └── 42a4e9bb-add-size-column.py │ ├── model.py │ └── test │ │ ├── __init__.py │ │ ├── test_cleanup.py │ │ └── test_model.py ├── file_upload │ ├── __init__.py │ ├── api.py │ ├── cli.py │ ├── component.py │ ├── locale │ │ └── ru.po │ ├── migration │ │ └── 3803b726-cleanup-prev-format.py │ ├── model.py │ ├── nodepkg │ │ ├── client-settings.ts │ │ ├── file-uploader │ │ │ ├── FileUploader.less │ │ │ ├── FileUploader.tsx │ │ │ ├── FileUploaderButton.tsx │ │ │ ├── field │ │ │ │ └── FilePicker.tsx │ │ │ ├── hook │ │ │ │ └── useFileUploader.ts │ │ │ ├── index.ts │ │ │ ├── type.ts │ │ │ └── util │ │ │ │ └── fileUploader.ts │ │ ├── image-uploader │ │ │ ├── ImageUploader.less │ │ │ ├── ImageUploader.tsx │ │ │ ├── index.ts │ │ │ └── type.ts │ │ ├── index.ts │ │ ├── package.json │ │ └── testentry │ │ │ ├── button.ts │ │ │ ├── file.ts │ │ │ └── image.ts │ ├── test │ │ ├── __init__.py │ │ └── test_api.py │ ├── util.py │ └── view.py ├── gui │ ├── __init__.py │ ├── component.py │ ├── locale │ │ └── ru.po │ ├── nodepkg │ │ ├── action-toolbar │ │ │ ├── ActionToolbar.less │ │ │ ├── ActionToolbar.tsx │ │ │ ├── hook │ │ │ │ └── useActionToolbar.tsx │ │ │ ├── index.ts │ │ │ └── type.ts │ │ ├── antd │ │ │ ├── CheckboxValue.tsx │ │ │ ├── InputValue.tsx │ │ │ ├── calendar │ │ │ │ └── index.tsx │ │ │ ├── config-provider │ │ │ │ └── index.tsx │ │ │ ├── date-picker │ │ │ │ └── index.tsx │ │ │ ├── date-time-picker │ │ │ │ └── index.tsx │ │ │ ├── date.ts │ │ │ ├── index.ts │ │ │ ├── input-big-integer │ │ │ │ └── index.tsx │ │ │ ├── input-integer │ │ │ │ └── index.tsx │ │ │ ├── range-picker │ │ │ │ └── index.tsx │ │ │ ├── table │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── tabs │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── theme.ts │ │ │ └── time-picker │ │ │ │ └── index.tsx │ │ ├── arm │ │ │ ├── LotMV.tsx │ │ │ ├── index.ts │ │ │ ├── mapper.ts │ │ │ ├── type.ts │ │ │ ├── util.ts │ │ │ └── validate.ts │ │ ├── buttons │ │ │ ├── CopyToClipboardButton.tsx │ │ │ └── index.ts │ │ ├── component │ │ │ ├── AutoCompleteHoneypot.tsx │ │ │ ├── AutoCompleteInput.tsx │ │ │ ├── InputOpacity.tsx │ │ │ ├── InputScaleDenom.tsx │ │ │ ├── LoadingWrapper.tsx │ │ │ ├── SaveButton.tsx │ │ │ ├── TemplateLink.tsx │ │ │ ├── code │ │ │ │ ├── Code.tsx │ │ │ │ ├── hook │ │ │ │ │ ├── customSetup.ts │ │ │ │ │ ├── editableSetup.ts │ │ │ │ │ ├── themeSetup.ts │ │ │ │ │ └── useCodeMirror.ts │ │ │ │ ├── index.ts │ │ │ │ ├── testentry.tsx │ │ │ │ └── type.ts │ │ │ ├── content-card │ │ │ │ ├── ContentCard.less │ │ │ │ ├── ContentCard.tsx │ │ │ │ └── index.ts │ │ │ ├── extent-row │ │ │ │ ├── ExtentRow.less │ │ │ │ ├── ExtentRow.tsx │ │ │ │ └── index.ts │ │ │ ├── index.ts │ │ │ ├── language-select │ │ │ │ ├── LanguageSelect.tsx │ │ │ │ ├── index.ts │ │ │ │ └── testentry.tsx │ │ │ ├── simple-table │ │ │ │ ├── SimpleTable.less │ │ │ │ ├── SimpleTable.tsx │ │ │ │ └── index.ts │ │ │ ├── tabs-label-badge │ │ │ │ ├── TabsLabelBadge.less │ │ │ │ ├── TabsLabelBadge.tsx │ │ │ │ └── index.ts │ │ │ └── text-editor │ │ │ │ ├── TextEditor.less │ │ │ │ ├── TextEditor.tsx │ │ │ │ └── index.ts │ │ ├── confirm.ts │ │ ├── dayjs.ts │ │ ├── description │ │ │ ├── DescriptionHtml.less │ │ │ ├── DescriptionHtml.tsx │ │ │ ├── ProcessedHtml.tsx │ │ │ ├── index.ts │ │ │ ├── testContent.tsx │ │ │ └── testentry.tsx │ │ ├── edi-table │ │ │ ├── EdiTable.less │ │ │ ├── EdiTable.tsx │ │ │ ├── EdiTableKeyValue.tsx │ │ │ ├── EdiTableStore.ts │ │ │ ├── RowAction.tsx │ │ │ ├── index.ts │ │ │ ├── testentry.tsx │ │ │ └── type.ts │ │ ├── error │ │ │ ├── CodeLazy.tsx │ │ │ ├── ErrorModal.tsx │ │ │ ├── ErrorPage.tsx │ │ │ ├── extractError.ts │ │ │ ├── index.ts │ │ │ ├── shared.tsx │ │ │ ├── testentry.tsx │ │ │ └── util.ts │ │ ├── fields-form │ │ │ ├── FieldsForm.tsx │ │ │ ├── FieldsFormVirtualized.tsx │ │ │ ├── FormItem.tsx │ │ │ ├── field │ │ │ │ └── _FormItem.tsx │ │ │ ├── index.ts │ │ │ ├── rules │ │ │ │ └── KeynameRule.ts │ │ │ ├── testentry.tsx │ │ │ └── type.ts │ │ ├── focus-table │ │ │ ├── ComplexTree.less │ │ │ ├── ComplexTree.tsx │ │ │ ├── DataProvider.ts │ │ │ ├── FocusTable.less │ │ │ ├── FocusTable.tsx │ │ │ ├── FocusToolbar.tsx │ │ │ ├── Toggle.tsx │ │ │ ├── action.tsx │ │ │ ├── hook.ts │ │ │ ├── index.tsx │ │ │ ├── testentry.tsx │ │ │ ├── type.ts │ │ │ └── util.ts │ │ ├── hook │ │ │ ├── index.ts │ │ │ ├── useEffectDebugger.ts │ │ │ ├── useEventListener.ts │ │ │ ├── useFit.ts │ │ │ ├── useKeydownListener.ts │ │ │ ├── useLoading.ts │ │ │ ├── useObjectState.ts │ │ │ ├── usePrevious.ts │ │ │ ├── useThemeVariables.ts │ │ │ └── useUnsavedChanges.ts │ │ ├── icon.tsx │ │ ├── mayout │ │ │ ├── Area.less │ │ │ ├── Area.tsx │ │ │ ├── Lot.tsx │ │ │ ├── index.tsx │ │ │ └── testentry.tsx │ │ ├── model-browse │ │ │ ├── ModelBrowse.tsx │ │ │ └── index.ts │ │ ├── model-form │ │ │ ├── ModelForm.tsx │ │ │ └── index.ts │ │ ├── model-logo-form │ │ │ ├── ModelLogoForm.tsx │ │ │ └── index.ts │ │ ├── package.json │ │ ├── progress-modal │ │ │ ├── ProgressModal.tsx │ │ │ ├── index.ts │ │ │ └── showProgressModal.ts │ │ ├── react-app.tsx │ │ ├── react-boot.tsx │ │ ├── showModal.tsx │ │ ├── showModalBase.tsx │ │ ├── showModalLazy.tsx │ │ ├── single-setting-form │ │ │ ├── SingleSettingForm.tsx │ │ │ └── index.ts │ │ ├── svg-icon │ │ │ ├── SvgIcon.tsx │ │ │ ├── SvgIconLink.tsx │ │ │ ├── index.ts │ │ │ ├── testentry.tsx │ │ │ └── type.ts │ │ ├── testentry │ │ │ ├── driver │ │ │ │ └── react.ts │ │ │ └── lifecycle.tsx │ │ ├── type │ │ │ └── index.ts │ │ └── util │ │ │ ├── constant │ │ │ └── presetColors.ts │ │ │ ├── deepCleanUndefined.ts │ │ │ ├── dom.ts │ │ │ ├── downloadCsv.ts │ │ │ ├── executeWithMinDelay.ts │ │ │ ├── extent.ts │ │ │ ├── formatSize.ts │ │ │ ├── index.ts │ │ │ ├── indexer.ts │ │ │ ├── isEqualJSON.ts │ │ │ ├── parseCsv.ts │ │ │ ├── sleep.ts │ │ │ ├── sorterFactory.ts │ │ │ └── tree.ts │ ├── template │ │ ├── react_app.mako │ │ └── react_boot.mako │ ├── util.py │ └── view.py ├── i18n │ ├── __init__.py │ ├── localizer.py │ ├── script.py │ └── util.py ├── jsrealm │ ├── __init__.py │ ├── cli.py │ ├── component.py │ ├── entry.py │ ├── i18n.py │ ├── icon.py │ ├── nodepkg │ │ ├── ckeditor │ │ │ ├── bundle.js │ │ │ ├── index.d.ts │ │ │ ├── index.js │ │ │ ├── index.less │ │ │ ├── package.json │ │ │ └── webpack.cjs │ │ ├── external │ │ │ ├── package.json │ │ │ └── webpack.external.cjs │ │ ├── icon │ │ │ ├── global.d.ts │ │ │ ├── index.ts │ │ │ └── package.json │ │ ├── jsrealm │ │ │ ├── babelrc.cjs │ │ │ ├── config.cjs │ │ │ ├── entrypoint │ │ │ │ └── registry.ts │ │ │ ├── error.ts │ │ │ ├── global.d.ts │ │ │ ├── i18n │ │ │ │ ├── catalog.ts │ │ │ │ ├── comp │ │ │ │ │ └── .gitkeep │ │ │ │ ├── lang │ │ │ │ │ └── index.ts │ │ │ │ └── loader.cjs │ │ │ ├── icon │ │ │ │ ├── runtime.cjs │ │ │ │ └── util.cjs │ │ │ ├── ngwEntry.js │ │ │ ├── package.json │ │ │ ├── plugin │ │ │ │ ├── index.ts │ │ │ │ ├── loader.ts │ │ │ │ ├── meta.ts │ │ │ │ ├── registry.ts │ │ │ │ ├── testentry │ │ │ │ │ ├── metareg.ts │ │ │ │ │ ├── plugin │ │ │ │ │ │ ├── bar.ts │ │ │ │ │ │ ├── foo.ts │ │ │ │ │ │ └── zoo.ts │ │ │ │ │ ├── registry.ts │ │ │ │ │ └── testreg.ts │ │ │ │ └── type.ts │ │ │ ├── tag-parser.cjs │ │ │ ├── testentry │ │ │ │ ├── TestEntries.tsx │ │ │ │ ├── driver │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── mocha.less │ │ │ │ │ └── mocha.ts │ │ │ │ ├── entry │ │ │ │ │ ├── abs.ts │ │ │ │ │ └── rel.ts │ │ │ │ ├── import.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mod │ │ │ │ │ ├── abs.ts │ │ │ │ │ └── rel.ts │ │ │ │ ├── registry.ts │ │ │ │ └── runner.ts │ │ │ ├── webpack.main.cjs │ │ │ ├── webpack.root.cjs │ │ │ └── webpack │ │ │ │ ├── defaults.cjs │ │ │ │ ├── font-weight-fix.cjs │ │ │ │ ├── plugins.cjs │ │ │ │ └── util.cjs │ │ └── stylesheet │ │ │ ├── package.json │ │ │ └── webpack.stylesheet.cjs │ ├── template │ │ └── testentry.mako │ ├── tsgen.py │ ├── util.py │ └── view.py ├── layer │ ├── __init__.py │ ├── api.py │ ├── component.py │ ├── interface.py │ ├── locale │ │ └── ru.po │ ├── model.py │ └── test │ │ ├── __init__.py │ │ └── test_api.py ├── layer_preview │ ├── __init__.py │ ├── component.py │ ├── favorite.py │ ├── locale │ │ └── ru.po │ ├── nodepkg │ │ ├── package.json │ │ └── preview-layer │ │ │ ├── PreviewLayer.tsx │ │ │ └── index.ts │ └── view.py ├── lib │ ├── __init__.py │ ├── apitype │ │ ├── __init__.py │ │ ├── http.py │ │ ├── param.py │ │ ├── primitive.py │ │ ├── query_string.py │ │ ├── schema.py │ │ ├── struct.py │ │ ├── test │ │ │ ├── __init__.py │ │ │ ├── test_derive.py │ │ │ ├── test_param.py │ │ │ └── test_util.py │ │ └── util.py │ ├── clann │ │ ├── __init__.py │ │ ├── argparse.py │ │ ├── cmd_grp.py │ │ ├── decorator.py │ │ ├── param.py │ │ └── test │ │ │ ├── __init__.py │ │ │ └── test_param.py │ ├── config │ │ ├── __init__.py │ │ ├── annotation.py │ │ ├── otype.py │ │ ├── test │ │ │ ├── __init__.py │ │ │ ├── test_annotation.py │ │ │ ├── test_option.py │ │ │ └── test_util.py │ │ └── util.py │ ├── db.py │ ├── dinject │ │ ├── __init__.py │ │ ├── container.py │ │ ├── inject.py │ │ └── test │ │ │ ├── __init__.py │ │ │ ├── test_container.py │ │ │ └── test_inject.py │ ├── dynmenu.py │ ├── geometry │ │ ├── __init__.py │ │ └── test │ │ │ ├── __init__.py │ │ │ ├── test_calc.py │ │ │ ├── test_geometry.py │ │ │ └── test_transform.py │ ├── i18n │ │ ├── __init__.py │ │ ├── test │ │ │ ├── __init__.py │ │ │ └── test_trstr.py │ │ └── trstr.py │ ├── imptool.py │ ├── json │ │ ├── __init__.py │ │ └── test │ │ │ ├── __init__.py │ │ │ └── test_json.py │ ├── logging │ │ └── __init__.py │ ├── migration │ │ ├── __init__.py │ │ ├── base.py │ │ ├── graph.py │ │ ├── migration.py │ │ ├── operation.py │ │ ├── registry.py │ │ ├── revision.py │ │ └── test │ │ │ ├── __init__.py │ │ │ ├── conftest.py │ │ │ ├── mformat │ │ │ ├── 00000001.py │ │ │ ├── 00000002.py │ │ │ ├── 00000003.fw.sql │ │ │ └── 00000003.rw.sql │ │ │ ├── registry │ │ │ ├── bar │ │ │ │ ├── 2bfa0320.py │ │ │ │ └── 2bfa0406.py │ │ │ └── foo │ │ │ │ ├── 2bfa0530.py │ │ │ │ ├── 2bfa05b4.py │ │ │ │ ├── 2bfa061e.py │ │ │ │ ├── 2bfa06fe.py │ │ │ │ └── 2bfa075a.py │ │ │ ├── test_context.py │ │ │ ├── test_graph.py │ │ │ ├── test_registry.py │ │ │ ├── test_resolve.py │ │ │ └── test_revision.py │ ├── msext.py │ ├── ogrhelper │ │ ├── __init__.py │ │ └── test │ │ │ ├── __init__.py │ │ │ └── test_read.py │ ├── osrhelper │ │ └── __init__.py │ ├── ows │ │ └── __init__.py │ ├── registry │ │ ├── __init__.py │ │ └── test │ │ │ ├── __init__.py │ │ │ └── test_registry.py │ ├── saext │ │ ├── __init__.py │ │ ├── enum.py │ │ ├── geometry.py │ │ ├── msgspec.py │ │ └── uuid.py │ └── safehtml │ │ ├── __init__.py │ │ └── test │ │ ├── __init__.py │ │ └── test_sanitize.py ├── lookup_table │ ├── __init__.py │ ├── component.py │ ├── icon │ │ └── resource │ │ │ └── lookup_table.svg │ ├── locale │ │ └── ru.po │ ├── migration │ │ ├── 4ad6cff8-sorted-value.fw.sql │ │ └── 4ad6cff8-sorted-value.rw.sql │ ├── model.py │ ├── nodepkg │ │ ├── component │ │ │ └── lookup-select │ │ │ │ ├── LookupSelect.tsx │ │ │ │ └── index.ts │ │ ├── editor │ │ │ ├── EditorStore.ts │ │ │ ├── EditorWidget.less │ │ │ ├── EditorWidget.tsx │ │ │ ├── index.ts │ │ │ └── util.ts │ │ ├── package.json │ │ ├── resource-section │ │ │ ├── LookupTableResourceSection.tsx │ │ │ └── index.ts │ │ └── util │ │ │ ├── getLookupTableItems.ts │ │ │ ├── getLookupValue.ts │ │ │ └── sort.ts │ ├── test │ │ ├── __init__.py │ │ └── test_api.py │ └── view.py ├── ogcfserver │ ├── __init__.py │ ├── api.py │ ├── component.py │ ├── icon │ │ └── resource │ │ │ └── ogcfserver_service.svg │ ├── locale │ │ └── ru.po │ ├── model.py │ ├── nodepkg │ │ ├── package.json │ │ └── service-widget │ │ │ ├── Collection.ts │ │ │ ├── ServiceStore.ts │ │ │ ├── ServiceWidget.tsx │ │ │ └── index.ts │ ├── test │ │ ├── __init__.py │ │ ├── data │ │ │ └── ne_110m_populated_places.geojson │ │ └── test_gdal.py │ └── view.py ├── postgis │ ├── __init__.py │ ├── api.py │ ├── component.py │ ├── diagnostics.py │ ├── exception.py │ ├── icon │ │ └── resource │ │ │ ├── postgis_connection.svg │ │ │ └── postgis_layer.svg │ ├── locale │ │ └── ru.po │ ├── migration │ │ ├── 32357124-geometry-type-length.fw.sql │ │ ├── 32357124-geometry-type-length.rw.sql │ │ ├── 37e639a6-fix-enum.fw.sql │ │ ├── 37e639a6-fix-enum.rw.sql │ │ ├── 4836e6df-ssl-mode.fw.sql │ │ └── 4836e6df-ssl-mode.rw.sql │ ├── model.py │ ├── nodepkg │ │ ├── connection-widget │ │ │ ├── ConnectionStore.ts │ │ │ ├── ConnectionWidget.tsx │ │ │ └── index.ts │ │ ├── diagnostics-widget │ │ │ ├── DiagnosticsWidget.less │ │ │ ├── DiagnosticsWidget.tsx │ │ │ └── index.ts │ │ ├── layer-widget │ │ │ ├── LayerStore.ts │ │ │ ├── LayerWidget.tsx │ │ │ └── index.ts │ │ └── package.json │ ├── test │ │ ├── __init__.py │ │ ├── test_diagnostics.py │ │ └── test_types.py │ ├── util.py │ └── view.py ├── pyramid │ ├── __init__.py │ ├── api.py │ ├── asset │ │ ├── favicon.ico │ │ ├── logo_outline.png │ │ ├── nextgis.png │ │ ├── nextgis_logo.svg │ │ ├── nextgis_logo_s.svg │ │ ├── return-button.svg │ │ └── webgis-for-social.png │ ├── breadcrumb.py │ ├── cli.py │ ├── codegen.py │ ├── component.py │ ├── exception.py │ ├── i18n.py │ ├── icon │ │ └── material.json │ ├── locale │ │ └── ru.po │ ├── lunkwill.py │ ├── migration │ │ ├── 35e3442d-remove-cookie-secret.py │ │ ├── 368d12d1-settings-for-cache.fw.sql │ │ ├── 368d12d1-settings-for-cache.rw.sql │ │ ├── 39374be0-jsonb-session.fw.sql │ │ ├── 39374be0-jsonb-session.rw.sql │ │ ├── 436507ae-store-mime-type-with-logo.fw.sql │ │ └── 436507ae-store-mime-type-with-logo.rw.sql │ ├── model.py │ ├── nodepkg │ │ ├── api │ │ │ ├── LunkwillParam.ts │ │ │ ├── cache.ts │ │ │ ├── error.ts │ │ │ ├── index.ts │ │ │ ├── request.ts │ │ │ ├── route.ts │ │ │ ├── testentry.ts │ │ │ └── type.ts │ │ ├── backup-browse │ │ │ ├── BackupBrowse.less │ │ │ ├── BackupBrowse.tsx │ │ │ └── index.ts │ │ ├── client-settings.ts │ │ ├── company-logo.ts │ │ ├── control-panel │ │ │ ├── ControlPanel.tsx │ │ │ └── index.ts │ │ ├── cors-settings │ │ │ ├── CORSSettings.tsx │ │ │ └── index.ts │ │ ├── custom-css-form │ │ │ ├── CustomCSSForm.tsx │ │ │ └── index.ts │ │ ├── error-page │ │ │ ├── ErrorPage.tsx │ │ │ └── index.ts │ │ ├── fonts │ │ │ ├── FontsPanel.tsx │ │ │ └── index.ts │ │ ├── global.d.ts │ │ ├── home-path │ │ │ ├── HomePath.tsx │ │ │ └── index.ts │ │ ├── hook │ │ │ ├── index.ts │ │ │ ├── testentry.tsx │ │ │ ├── type.ts │ │ │ ├── useAbortController.ts │ │ │ ├── useCache.ts │ │ │ ├── useRoute.ts │ │ │ └── useRouteGet.ts │ │ ├── i18n │ │ │ ├── format.ts │ │ │ ├── gettext.ts │ │ │ ├── index.ts │ │ │ ├── testentry.ts │ │ │ ├── testentry │ │ │ │ ├── core.ts │ │ │ │ └── react.tsx │ │ │ └── translated.ts │ │ ├── icon │ │ │ └── index.ts │ │ ├── layout │ │ │ ├── Avatar.less │ │ │ ├── Avatar.tsx │ │ │ ├── Base.tsx │ │ │ ├── Breadcrumbs.less │ │ │ ├── Breadcrumbs.tsx │ │ │ ├── Menu.less │ │ │ ├── Menu.tsx │ │ │ ├── MenuItem.tsx │ │ │ ├── PageTitle.tsx │ │ │ ├── dynmenu │ │ │ │ ├── Dynmenu.less │ │ │ │ └── Dynmenu.tsx │ │ │ ├── header │ │ │ │ ├── Header.less │ │ │ │ ├── Header.tsx │ │ │ │ ├── HeaderComponents.tsx │ │ │ │ ├── HeaderLogo.tsx │ │ │ │ ├── registry.ts │ │ │ │ └── type.ts │ │ │ ├── index.ts │ │ │ ├── store.ts │ │ │ └── useLayout.ts │ │ ├── logo-form │ │ │ ├── LogoForm.tsx │ │ │ └── index.ts │ │ ├── metrics │ │ │ ├── GoogleAnalyticsTab.tsx │ │ │ ├── MetricSettings.less │ │ │ ├── MetricSettings.tsx │ │ │ ├── YandexMetricaTab.tsx │ │ │ ├── index.ts │ │ │ └── tab.ts │ │ ├── nextgis.ts │ │ ├── package.json │ │ ├── settings.ts │ │ ├── storage-summary │ │ │ ├── StorageSummary.less │ │ │ ├── StorageSummary.tsx │ │ │ └── index.ts │ │ ├── swagger-ui │ │ │ ├── SwaggerUI.less │ │ │ ├── SwaggerUI.tsx │ │ │ ├── font-fix.less │ │ │ ├── index.ts │ │ │ └── testentry.tsx │ │ ├── system-info │ │ │ ├── SystemInfo.less │ │ │ ├── SystemInfo.tsx │ │ │ ├── SystemInfoUpdate.less │ │ │ ├── SystemInfoUpdate.tsx │ │ │ └── index.ts │ │ ├── system-name-form │ │ │ ├── SystemNameForm.tsx │ │ │ └── index.ts │ │ ├── update │ │ │ ├── UpdateStore.ts │ │ │ └── index.tsx │ │ └── util │ │ │ ├── abort.ts │ │ │ ├── index.ts │ │ │ ├── loader.ts │ │ │ ├── queue.ts │ │ │ └── tileLoadFunction.ts │ ├── openapi │ │ ├── __init__.py │ │ └── docstring.py │ ├── permission.py │ ├── renderer.py │ ├── session.py │ ├── template │ │ ├── base.mako │ │ ├── client_config.mako │ │ ├── header.mako │ │ ├── metrics.mako │ │ ├── plain.mako │ │ ├── test_exception_template.mako │ │ ├── uacompat.mako │ │ └── update.mako │ ├── test │ │ ├── __init__.py │ │ ├── test_api.py │ │ ├── test_cors.py │ │ ├── test_exception.py │ │ ├── test_i18n.py │ │ ├── test_openapi.py │ │ ├── test_openapi_json.py │ │ ├── test_session.py │ │ ├── test_uacompat.py │ │ └── test_view.py │ ├── tomb │ │ ├── __init__.py │ │ ├── config.py │ │ ├── exception.py │ │ ├── helper.py │ │ ├── inspect.py │ │ ├── predicate.py │ │ ├── response.py │ │ └── util.py │ ├── uacompat.py │ ├── util.py │ └── view.py ├── raster_layer │ ├── __init__.py │ ├── api.py │ ├── api_identify.py │ ├── cli.py │ ├── component.py │ ├── gdaldriver.py │ ├── icon │ │ └── resource │ │ │ └── raster_layer.svg │ ├── kind_of_data.py │ ├── locale │ │ └── ru.po │ ├── migration │ │ ├── 22100521-add-dtype-column.fw.sql │ │ ├── 22100521-add-dtype-column.rw.sql │ │ ├── 2ea54a77-relative-symlinks.py │ │ ├── 3260f32e-add-cog-column.fw.sql │ │ ├── 3260f32e-add-cog-column.rw.sql │ │ ├── 4c303b5e-add-fileobj_pam_id-column.fw.sql │ │ └── 4c303b5e-add-fileobj_pam_id-column.rw.sql │ ├── model.py │ ├── nodepkg │ │ ├── client-settings.ts │ │ ├── editor-widget │ │ │ ├── EditorStore.ts │ │ │ ├── EditorWidget.tsx │ │ │ └── index.ts │ │ ├── export-form │ │ │ ├── ExportForm.tsx │ │ │ └── index.ts │ │ └── package.json │ ├── test │ │ ├── __init__.py │ │ ├── data │ │ │ ├── rounds.tif │ │ │ ├── sochi-aster-colorized.tif │ │ │ └── sochi-aster-dem.tif │ │ ├── test_cog.py │ │ ├── test_export.py │ │ ├── test_model.py │ │ └── validate_cloud_optimized_geotiff.py │ ├── util.py │ ├── view.py │ └── workdir.py ├── raster_mosaic │ ├── __init__.py │ ├── api.py │ ├── component.py │ ├── icon │ │ └── resource │ │ │ └── raster_mosaic.svg │ ├── locale │ │ └── ru.po │ ├── migration │ │ └── 2ea56ce5-relative-symlinks.py │ ├── model.py │ ├── nodepkg │ │ ├── package.json │ │ └── resource-widget │ │ │ ├── Store.ts │ │ │ ├── Widget.less │ │ │ ├── Widget.tsx │ │ │ └── index.ts │ └── view.py ├── raster_style │ ├── __init__.py │ ├── component.py │ ├── icon │ │ └── resource │ │ │ └── raster_style.svg │ ├── iconRaster.png │ ├── locale │ │ └── ru.po │ └── model.py ├── render │ ├── __init__.py │ ├── api.py │ ├── component.py │ ├── empty_256x256.png │ ├── imgcodec.py │ ├── interface.py │ ├── legend.py │ ├── locale │ │ └── ru.po │ ├── migration │ │ ├── 37e63b62-fix-enum.fw.sql │ │ ├── 37e63b62-fix-enum.rw.sql │ │ ├── 45964892-drop-changes-tracking-and-cache-seeding-columns.fw.sql │ │ └── 45964892-drop-changes-tracking-and-cache-seeding-columns.rw.sql │ ├── model.py │ ├── nodepkg │ │ ├── package.json │ │ ├── resource-section │ │ │ └── legend-symbols │ │ │ │ ├── ResourceSectionLegendSymbols.less │ │ │ │ ├── ResourceSectionLegendSymbols.tsx │ │ │ │ └── index.ts │ │ └── tile-cache-widget │ │ │ ├── TileCacheStore.ts │ │ │ ├── TileCacheWidget.tsx │ │ │ └── index.ts │ ├── test │ │ ├── __init__.py │ │ ├── test_tile_cache.py │ │ └── test_util.py │ ├── util.py │ └── view.py ├── resmeta │ ├── __init__.py │ ├── component.py │ ├── locale │ │ └── ru.po │ ├── migration │ │ ├── 35cf5bc3-bool-value-column.fw.sql │ │ └── 35cf5bc3-bool-value-column.rw.sql │ ├── model.py │ ├── nodepkg │ │ ├── editor │ │ │ ├── EditorStore.ts │ │ │ ├── EditorWidget.tsx │ │ │ └── index.ts │ │ ├── package.json │ │ └── resource-section │ │ │ ├── ResmetaResourceSection.tsx │ │ │ └── index.ts │ ├── test │ │ ├── __init__.py │ │ └── test_api.py │ └── view.py ├── resource │ ├── __init__.py │ ├── api.py │ ├── category.py │ ├── component.py │ ├── composite.py │ ├── event.py │ ├── exception.py │ ├── extaccess.py │ ├── favorite │ │ ├── __init__.py │ │ ├── api.py │ │ ├── base.py │ │ ├── model.py │ │ └── view.py │ ├── home.py │ ├── icon │ │ └── resource │ │ │ ├── resource.svg │ │ │ └── resource_group.svg │ ├── interface.py │ ├── locale │ │ └── ru.po │ ├── migration │ │ ├── 45820e29-add-resource_favorite-table.fw.sql │ │ ├── 45820e29-add-resource_favorite-table.rw.sql │ │ ├── 45960792-remove-metadata-scope.fw.sql │ │ ├── 45960792-remove-metadata-scope.rw.sql │ │ ├── 45f6d7cf-remove-datasctruct-permissions.fw.sql │ │ └── 45f6d7cf-remove-datasctruct-permissions.rw.sql │ ├── model.py │ ├── nodepkg │ │ ├── blueprint.ts │ │ ├── client-settings.ts │ │ ├── component │ │ │ ├── index.ts │ │ │ ├── resource-picker │ │ │ │ ├── ResourcePickerBreadcrumb.tsx │ │ │ │ ├── ResourcePickerCard.less │ │ │ │ ├── ResourcePickerCard.tsx │ │ │ │ ├── ResourcePickerChildren.less │ │ │ │ ├── ResourcePickerChildren.tsx │ │ │ │ ├── ResourcePickerFooter.tsx │ │ │ │ ├── ResourcePickerModal.less │ │ │ │ ├── ResourcePickerModal.tsx │ │ │ │ ├── ResourcePickerTitle.tsx │ │ │ │ ├── hook │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── useFocusTablePicker.ts │ │ │ │ │ ├── usePickerCard.ts │ │ │ │ │ ├── usePickerModal.ts │ │ │ │ │ └── useResourcePicker.ts │ │ │ │ ├── index.ts │ │ │ │ ├── pickToFocusTable.tsx │ │ │ │ ├── showResourcePicker.ts │ │ │ │ ├── store │ │ │ │ │ ├── ResourcePickerStore.ts │ │ │ │ │ └── decorator │ │ │ │ │ │ └── actionHandler.ts │ │ │ │ ├── testentry.tsx │ │ │ │ ├── type.ts │ │ │ │ └── util │ │ │ │ │ └── renderResourceCls.tsx │ │ │ └── resource-select │ │ │ │ ├── ResourceSelect.tsx │ │ │ │ ├── ResourceSelectMultiple.tsx │ │ │ │ ├── ResourceSelectRef.tsx │ │ │ │ ├── hook │ │ │ │ └── useResourceSelect.ts │ │ │ │ ├── index.ts │ │ │ │ ├── testentry.tsx │ │ │ │ └── type.ts │ │ ├── composite │ │ │ ├── CompositeStore.ts │ │ │ ├── CompositeWidget.less │ │ │ ├── CompositeWidget.tsx │ │ │ └── index.ts │ │ ├── delete-page │ │ │ ├── DeletePage.less │ │ │ ├── DeletePage.tsx │ │ │ ├── DeletePageModal.tsx │ │ │ ├── index.ts │ │ │ ├── type.ts │ │ │ └── util.ts │ │ ├── description-editor │ │ │ ├── DescriptionEditorStore.ts │ │ │ ├── DescriptionEditorWidget.tsx │ │ │ └── index.ts │ │ ├── editor-widget │ │ │ ├── EditorStore.ts │ │ │ ├── EditorWidget.tsx │ │ │ └── index.ts │ │ ├── effective-permissions │ │ │ ├── EffectivePermissions.less │ │ │ ├── EffectivePermissions.tsx │ │ │ ├── hook │ │ │ │ └── useLoadData.ts │ │ │ ├── index.ts │ │ │ └── type.ts │ │ ├── export-settings │ │ │ ├── ExportSettings.tsx │ │ │ └── index.ts │ │ ├── favorite │ │ │ ├── Avatar.tsx │ │ │ ├── FavoritePage.less │ │ │ ├── FavoritePage.tsx │ │ │ └── useFavorites.tsx │ │ ├── global.d.ts │ │ ├── hook │ │ │ └── useResource.ts │ │ ├── icon.tsx │ │ ├── json-view │ │ │ ├── JsonView.tsx │ │ │ └── index.ts │ │ ├── package.json │ │ ├── page │ │ │ └── show │ │ │ │ ├── ResourcePageShow.tsx │ │ │ │ └── index.ts │ │ ├── permissions-widget │ │ │ ├── PermissionStoreItem.ts │ │ │ ├── PermissionsStore.ts │ │ │ ├── PermissionsWidget.tsx │ │ │ └── index.tsx │ │ ├── resource-section │ │ │ ├── button │ │ │ │ ├── ResourceSectionButton.less │ │ │ │ ├── ResourceSectionButton.tsx │ │ │ │ └── index.ts │ │ │ ├── children │ │ │ │ ├── ResourceSectionChildren.less │ │ │ │ ├── ResourceSectionChildren.tsx │ │ │ │ ├── component │ │ │ │ │ ├── MenuDropdown.tsx │ │ │ │ │ ├── PreviewModal.less │ │ │ │ │ ├── PreviewModal.tsx │ │ │ │ │ └── RenderActions.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── type.ts │ │ │ │ └── util │ │ │ │ │ ├── createResourceTableItemOptions.ts │ │ │ │ │ ├── forEachSelected.ts │ │ │ │ │ ├── isDeleteAction.ts │ │ │ │ │ ├── isPreviewAction.ts │ │ │ │ │ ├── loadVoluems.ts │ │ │ │ │ └── notify.ts │ │ │ ├── description │ │ │ │ ├── ResourceSectionDescription.tsx │ │ │ │ └── index.ts │ │ │ ├── external-access │ │ │ │ ├── ResourceSectionExternalAccess.less │ │ │ │ ├── ResourceSectionExternalAccess.tsx │ │ │ │ └── index.ts │ │ │ ├── index.ts │ │ │ ├── main │ │ │ │ ├── CreateResourceButton.tsx │ │ │ │ ├── CreateResourceModal.less │ │ │ │ ├── CreateResourceModal.tsx │ │ │ │ ├── ResourceSectionMain.less │ │ │ │ ├── ResourceSectionMain.tsx │ │ │ │ └── index.ts │ │ │ └── type.ts │ │ ├── resources-filter │ │ │ ├── ResourcesFilter.less │ │ │ ├── ResourcesFilter.tsx │ │ │ ├── index.ts │ │ │ └── layout-header-plugin.ts │ │ ├── type │ │ │ ├── EditorStore.ts │ │ │ ├── EditorWidget.ts │ │ │ └── index.ts │ │ └── util │ │ │ ├── generateResourceKeyname.ts │ │ │ ├── loadParents.ts │ │ │ └── renderResourceCls.tsx │ ├── permission.py │ ├── presolver.py │ ├── psection.py │ ├── sattribute.py │ ├── scope.py │ ├── serialize.py │ ├── template │ │ └── favorite.mako │ ├── test │ │ ├── __init__.py │ │ ├── test_api.py │ │ ├── test_api_delete.py │ │ ├── test_gdal.py │ │ ├── test_model.py │ │ ├── test_permission.py │ │ └── test_presolver.py │ ├── view.py │ └── widget.py ├── script.py ├── sentry │ ├── __init__.py │ ├── component.py │ ├── nodepkg │ │ ├── global.d.ts │ │ ├── init.ts │ │ ├── package.json │ │ └── testentry.tsx │ ├── template │ │ └── init.mako │ └── view.py ├── sld │ ├── __init__.py │ ├── cli.py │ ├── component.py │ ├── locale │ │ └── ru.po │ ├── model.py │ ├── nodepkg │ │ ├── package.json │ │ └── style-editor │ │ │ ├── RasterStyleEditor.less │ │ │ ├── RasterStyleEditor.tsx │ │ │ ├── StyleEditor.tsx │ │ │ ├── component │ │ │ ├── KindEditor.tsx │ │ │ ├── LinePatternPresetView.css │ │ │ ├── LinePatternPresetView.tsx │ │ │ ├── OlRenderer.less │ │ │ ├── OlRenderer.tsx │ │ │ ├── SymbolizerCard.less │ │ │ ├── SymbolizerCard.tsx │ │ │ ├── TypeSelect │ │ │ │ ├── TypeField.tsx │ │ │ │ ├── TypeSelect.tsx │ │ │ │ └── index.ts │ │ │ └── editor │ │ │ │ ├── FillEditor.tsx │ │ │ │ ├── LineEditor.tsx │ │ │ │ └── MarkEditor.tsx │ │ │ ├── field │ │ │ ├── ColorInput.less │ │ │ ├── ColorInput.tsx │ │ │ └── DashInput.tsx │ │ │ ├── index.ts │ │ │ ├── testentry.tsx │ │ │ ├── type │ │ │ ├── Style.ts │ │ │ └── index.ts │ │ │ └── util │ │ │ ├── constant.ts │ │ │ ├── convertFromGeostyler.ts │ │ │ ├── convertToGeostyler.ts │ │ │ ├── extractColorAndOpacity.ts │ │ │ ├── generateSymbolizer.ts │ │ │ ├── getRasterBandRange.ts │ │ │ ├── getRasterSymbolizerValues.ts │ │ │ ├── hexWithOpacity.ts │ │ │ └── linePatternPresets.ts │ └── test │ │ ├── __init__.py │ │ └── test_model.py ├── social │ ├── __init__.py │ ├── api.py │ ├── component.py │ ├── locale │ │ └── ru.po │ ├── model.py │ ├── nodepkg │ │ ├── editor-widget │ │ │ ├── EditorStore.ts │ │ │ ├── EditorWidget.less │ │ │ ├── EditorWidget.tsx │ │ │ └── index.ts │ │ └── package.json │ ├── template │ │ └── meta.mako │ └── view.py ├── spatial_ref_sys │ ├── __init__.py │ ├── api.py │ ├── cli.py │ ├── component.py │ ├── locale │ │ └── ru.po │ ├── migration │ │ ├── 2c1c1918-add-catalog-id.fw.sql │ │ ├── 2c1c1918-add-catalog-id.rw.sql │ │ ├── 33b8836e-fix-auth_name-for-epsg-4326.fw.sql │ │ ├── 33b8836e-fix-auth_name-for-epsg-4326.rw.sql │ │ ├── 371c894c-allow-auth-columns-for-local-srs.fw.sql │ │ ├── 371c894c-allow-auth-columns-for-local-srs.rw.sql │ │ ├── 4c13911a-wkt-short.fw.sql │ │ └── 4c13911a-wkt-short.rw.sql │ ├── model.py │ ├── nodepkg │ │ ├── catalog-browse │ │ │ ├── CatalogBrowse.tsx │ │ │ └── index.ts │ │ ├── catalog-import │ │ │ ├── CatalogImport.tsx │ │ │ └── index.ts │ │ ├── client-settings.ts │ │ ├── package.json │ │ ├── srs-browse │ │ │ ├── SrsBrowse.tsx │ │ │ └── index.ts │ │ ├── srs-select │ │ │ ├── SrsSelect.tsx │ │ │ └── index.ts │ │ ├── srs-widget │ │ │ ├── SRSImportForm.tsx │ │ │ ├── SRSWidget.tsx │ │ │ └── index.ts │ │ ├── srsMessages.ts │ │ └── srsModel.ts │ ├── pyramid.py │ ├── test │ │ ├── __init__.py │ │ ├── data.py │ │ ├── test_api.py │ │ ├── test_model.py │ │ └── test_util.py │ ├── util.py │ └── view.py ├── static │ └── css │ │ ├── .gitignore │ │ ├── blocks │ │ ├── _icons.less │ │ ├── _links.less │ │ ├── _list.less │ │ └── _typography.less │ │ ├── layout.less │ │ ├── override-antd.less │ │ └── variables.less ├── svg_marker_library │ ├── __init__.py │ ├── api.py │ ├── component.py │ ├── icon │ │ └── resource │ │ │ └── svg_marker_library.svg │ ├── locale │ │ └── ru.po │ ├── migration │ │ ├── 2a69bb70-cleanup-marker-library.fw.sql │ │ └── 2a69bb70-cleanup-marker-library.rw.sql │ ├── model.py │ ├── nodepkg │ │ ├── package.json │ │ ├── resource-section │ │ │ ├── SvgMarkerLibraryResourceSection.tsx │ │ │ └── index.ts │ │ └── resource-widget │ │ │ ├── Store.ts │ │ │ ├── Widget.less │ │ │ ├── Widget.tsx │ │ │ └── index.ts │ ├── preset │ │ ├── README.md │ │ ├── accommodation │ │ │ ├── accommodation_alpinehut.svg │ │ │ ├── accommodation_bed_and_breakfast.svg │ │ │ ├── accommodation_camping.svg │ │ │ ├── accommodation_caravan_park.svg │ │ │ ├── accommodation_hotel.svg │ │ │ ├── accommodation_hotel2.svg │ │ │ ├── accommodation_house.svg │ │ │ ├── accommodation_shelter.svg │ │ │ ├── accommodation_shelter2.svg │ │ │ └── accommodation_youth_hostel.svg │ │ ├── amenity │ │ │ ├── amenity_bench.svg │ │ │ ├── amenity_court.svg │ │ │ ├── amenity_firestation.svg │ │ │ ├── amenity_firestation2.svg │ │ │ ├── amenity_firestation3.svg │ │ │ ├── amenity_fountain.svg │ │ │ ├── amenity_information.svg │ │ │ ├── amenity_library.svg │ │ │ ├── amenity_police.svg │ │ │ ├── amenity_police2.svg │ │ │ ├── amenity_post_box.svg │ │ │ ├── amenity_post_office.svg │ │ │ ├── amenity_prison.svg │ │ │ ├── amenity_recycling.svg │ │ │ ├── amenity_survey_point.svg │ │ │ ├── amenity_telephone.svg │ │ │ ├── amenity_toilets.svg │ │ │ ├── amenity_toilets_disabled.svg │ │ │ ├── amenity_toilets_men.svg │ │ │ ├── amenity_toilets_women.svg │ │ │ ├── amenity_waste_bin.svg │ │ │ ├── hostel.svg │ │ │ ├── hotel.svg │ │ │ ├── paint.svg │ │ │ ├── shelter.svg │ │ │ └── theme_park.svg │ │ ├── arrows │ │ │ ├── Arrow_01.svg │ │ │ ├── Arrow_02.svg │ │ │ ├── Arrow_03.svg │ │ │ ├── Arrow_04.svg │ │ │ ├── Arrow_05.svg │ │ │ ├── Arrow_06.svg │ │ │ ├── NorthArrow_01.svg │ │ │ ├── NorthArrow_02.svg │ │ │ ├── NorthArrow_03.svg │ │ │ ├── NorthArrow_04.svg │ │ │ ├── NorthArrow_05.svg │ │ │ ├── NorthArrow_06.svg │ │ │ ├── NorthArrow_07.svg │ │ │ ├── NorthArrow_08.svg │ │ │ ├── NorthArrow_09.svg │ │ │ ├── NorthArrow_10.svg │ │ │ └── NorthArrow_11.svg │ │ ├── backgrounds │ │ │ ├── background_circle.svg │ │ │ ├── background_forbidden.svg │ │ │ ├── background_octogon.svg │ │ │ ├── background_safety.svg │ │ │ ├── background_security.svg │ │ │ ├── background_security_02.svg │ │ │ ├── background_square.svg │ │ │ ├── background_square_rounded.svg │ │ │ ├── background_tilted_square.svg │ │ │ ├── background_tilted_square_rounded.svg │ │ │ └── background_triangle.svg │ │ ├── components │ │ │ └── component_indoor.svg │ │ ├── crosses │ │ │ ├── Cross1.svg │ │ │ ├── Cross2.svg │ │ │ ├── Cross4.svg │ │ │ ├── Cross5.svg │ │ │ ├── Cross6.svg │ │ │ ├── Star1.svg │ │ │ ├── Star2.svg │ │ │ └── Star3.svg │ │ ├── emergency │ │ │ ├── amenity=fire_station.svg │ │ │ ├── amenity=hospital.svg │ │ │ └── amenity=police.svg │ │ ├── entertainment │ │ │ ├── amenity=bar.svg │ │ │ ├── amenity=cafe.svg │ │ │ ├── amenity=cinema.svg │ │ │ ├── amenity=fast_food.svg │ │ │ ├── amenity=pub.svg │ │ │ ├── amenity=restaurant.svg │ │ │ └── amenity=theatre.svg │ │ ├── food │ │ │ ├── food_bar.svg │ │ │ ├── food_cafe.svg │ │ │ ├── food_drinkingtap.svg │ │ │ ├── food_fastfood.svg │ │ │ ├── food_fastfood2.svg │ │ │ ├── food_pub.svg │ │ │ └── food_restaurant.svg │ │ ├── gpsicons │ │ │ ├── anchor.svg │ │ │ ├── bank.svg │ │ │ ├── boat.svg │ │ │ ├── camera.svg │ │ │ ├── car.svg │ │ │ ├── city_building.svg │ │ │ ├── city_large.svg │ │ │ ├── city_medium.svg │ │ │ ├── city_small.svg │ │ │ ├── conveneince.svg │ │ │ ├── couple.svg │ │ │ ├── cross.svg │ │ │ ├── deer.svg │ │ │ ├── dollar.svg │ │ │ ├── fish.svg │ │ │ ├── flag.svg │ │ │ ├── food.svg │ │ │ ├── gas.svg │ │ │ ├── golf.svg │ │ │ ├── h.svg │ │ │ ├── house.svg │ │ │ ├── parachute.svg │ │ │ ├── parking.svg │ │ │ ├── phone.svg │ │ │ ├── plane.svg │ │ │ ├── plane_orange.svg │ │ │ ├── point.svg │ │ │ ├── question.svg │ │ │ ├── shipwreck.svg │ │ │ ├── skier.svg │ │ │ ├── skull.svg │ │ │ ├── swimmer.svg │ │ │ ├── table.svg │ │ │ ├── teepee.svg │ │ │ ├── tree.svg │ │ │ ├── walker.svg │ │ │ └── waypoint.svg │ │ ├── health │ │ │ ├── health_dentist.svg │ │ │ ├── health_doctors.svg │ │ │ ├── health_hospital.svg │ │ │ ├── health_hospital_emergency.svg │ │ │ ├── health_hospital_emergency2.svg │ │ │ ├── health_opticians.svg │ │ │ ├── health_pharmacy.svg │ │ │ └── health_veterinary.svg │ │ ├── landmark │ │ │ ├── amenity=place_of_worship.svg │ │ │ ├── amenity=school.svg │ │ │ ├── religion=buddhist.svg │ │ │ ├── religion=christian.svg │ │ │ ├── religion=hindu.svg │ │ │ ├── religion=jewish.svg │ │ │ ├── religion=muslim.svg │ │ │ ├── religion=pastafarian.svg │ │ │ ├── religion=sikh.svg │ │ │ └── tourism=museum.svg │ │ ├── landuse │ │ │ └── cemetery.svg │ │ ├── leisure │ │ │ ├── fishing.svg │ │ │ ├── leisure_centre.svg │ │ │ ├── marina.svg │ │ │ ├── slipway.svg │ │ │ ├── stadium.svg │ │ │ └── track.svg │ │ ├── money │ │ │ ├── money_atm.svg │ │ │ ├── money_atm2.svg │ │ │ ├── money_bank2.svg │ │ │ └── money_currency_exchange.svg │ │ ├── religion │ │ │ ├── place_of_worship.svg │ │ │ ├── place_of_worship_bahai.svg │ │ │ ├── place_of_worship_bahai3.svg │ │ │ ├── place_of_worship_buddhist.svg │ │ │ ├── place_of_worship_buddhist3.svg │ │ │ ├── place_of_worship_christian.svg │ │ │ ├── place_of_worship_christian3.svg │ │ │ ├── place_of_worship_hindu.svg │ │ │ ├── place_of_worship_hindu3.svg │ │ │ ├── place_of_worship_islamic.svg │ │ │ ├── place_of_worship_islamic3.svg │ │ │ ├── place_of_worship_jain.svg │ │ │ ├── place_of_worship_jain3.svg │ │ │ ├── place_of_worship_jewish.svg │ │ │ ├── place_of_worship_jewish3.svg │ │ │ ├── place_of_worship_shinto.svg │ │ │ ├── place_of_worship_shinto3.svg │ │ │ ├── place_of_worship_sikh.svg │ │ │ ├── place_of_worship_sikh3.svg │ │ │ └── place_of_worship_unknown3.svg │ │ ├── services │ │ │ ├── amenity=atm.svg │ │ │ ├── amenity=pharmacy,dispensing=yes.svg │ │ │ ├── amenity=pharmacy.svg │ │ │ ├── amenity=post_box.svg │ │ │ ├── amenity=recycling.svg │ │ │ ├── amenity=telephone.svg │ │ │ ├── shop=convenience.svg │ │ │ ├── shop=supermarket.svg │ │ │ └── tourism=hotel.svg │ │ ├── shopping │ │ │ ├── shopping_alcohol.svg │ │ │ ├── shopping_bakery.svg │ │ │ ├── shopping_bicycle.svg │ │ │ ├── shopping_book.svg │ │ │ ├── shopping_butcher.svg │ │ │ ├── shopping_car.svg │ │ │ ├── shopping_car_repair.svg │ │ │ ├── shopping_clothes.svg │ │ │ ├── shopping_confectionery.svg │ │ │ ├── shopping_convenience.svg │ │ │ ├── shopping_diy.svg │ │ │ ├── shopping_estateagent.svg │ │ │ ├── shopping_estateagent2.svg │ │ │ ├── shopping_fish.svg │ │ │ ├── shopping_garden_centre.svg │ │ │ ├── shopping_gift.svg │ │ │ ├── shopping_greengrocer.svg │ │ │ ├── shopping_hairdresser.svg │ │ │ ├── shopping_hifi.svg │ │ │ ├── shopping_jewelry.svg │ │ │ ├── shopping_laundrette.svg │ │ │ ├── shopping_mobile_phone.svg │ │ │ ├── shopping_motorcycle.svg │ │ │ ├── shopping_music.svg │ │ │ ├── shopping_pet.svg │ │ │ ├── shopping_pet2.svg │ │ │ ├── shopping_photo.svg │ │ │ ├── shopping_supermarket.svg │ │ │ ├── shopping_tackle.svg │ │ │ └── shopping_video_rental.svg │ │ ├── sport │ │ │ ├── 10pin.svg │ │ │ ├── 8ball_nicu_buculei_01.svg │ │ │ ├── athletics.svg │ │ │ ├── basketball.svg │ │ │ ├── bicycle.svg │ │ │ ├── canoe.svg │ │ │ ├── carting.svg │ │ │ ├── chess.svg │ │ │ ├── equestrian.svg │ │ │ ├── gymnastics.svg │ │ │ ├── iceskating.svg │ │ │ ├── motorracing.svg │ │ │ ├── multi.svg │ │ │ ├── shooting.svg │ │ │ ├── skiing.svg │ │ │ ├── soccer.svg │ │ │ ├── sport_archery.svg │ │ │ ├── sport_baseball.svg │ │ │ ├── sport_cricket.svg │ │ │ ├── sport_diving.svg │ │ │ ├── sport_golf.svg │ │ │ ├── sport_gym.svg │ │ │ ├── sport_gymnasium.svg │ │ │ ├── sport_gymnasium2.svg │ │ │ ├── sport_hillclimbing.svg │ │ │ ├── sport_horse_racing.svg │ │ │ ├── sport_iceskating.svg │ │ │ ├── sport_jetski.svg │ │ │ ├── sport_leisure_centre.svg │ │ │ ├── sport_motorracing.svg │ │ │ ├── sport_playground.svg │ │ │ ├── sport_sailing.svg │ │ │ ├── sport_skiing_crosscountry.svg │ │ │ ├── sport_skiing_downhill.svg │ │ │ ├── sport_snooker.svg │ │ │ ├── sport_soccer.svg │ │ │ ├── sport_swimming_indoor.svg │ │ │ ├── sport_swimming_outdoor.svg │ │ │ ├── sport_tennis.svg │ │ │ ├── sport_windsurfing.svg │ │ │ ├── swimming.svg │ │ │ ├── table_tennis.svg │ │ │ ├── tennis.svg │ │ │ └── volley_ball_angelo_gelmi_01.svg │ │ ├── symbol │ │ │ ├── blue-marker.svg │ │ │ ├── disability_accessibility.svg │ │ │ ├── disability_accessibility2.svg │ │ │ ├── disability_lowvision.svg │ │ │ ├── education_nursery.svg │ │ │ ├── education_school.svg │ │ │ ├── education_university.svg │ │ │ ├── fountain.svg │ │ │ ├── landuse_coniferous.svg │ │ │ ├── landuse_coniferous_and_deciduous.svg │ │ │ ├── landuse_deciduous.svg │ │ │ ├── landuse_grass.svg │ │ │ ├── landuse_hills.svg │ │ │ ├── landuse_quary.svg │ │ │ ├── landuse_scrub.svg │ │ │ ├── landuse_swamp.svg │ │ │ ├── poi_boundary_administrative.svg │ │ │ ├── poi_cave.svg │ │ │ ├── poi_embassy.svg │ │ │ ├── poi_embassy2.svg │ │ │ ├── poi_military_bunker.svg │ │ │ ├── poi_mine.svg │ │ │ ├── poi_mine_abandoned.svg │ │ │ ├── poi_peak.svg │ │ │ ├── poi_place_city.svg │ │ │ ├── poi_place_town.svg │ │ │ ├── poi_place_village.svg │ │ │ ├── poi_point_of_interest.svg │ │ │ ├── poi_tower_communications.svg │ │ │ ├── poi_tower_power.svg │ │ │ ├── poi_tower_water.svg │ │ │ ├── red-marker.svg │ │ │ └── water_tower.svg │ │ ├── territory_plan │ │ │ ├── Agriculture1.svg │ │ │ ├── Agriculture10.svg │ │ │ ├── Agriculture11.svg │ │ │ ├── Agriculture12.svg │ │ │ ├── Agriculture13.svg │ │ │ ├── Agriculture14.svg │ │ │ ├── Agriculture15.svg │ │ │ ├── Agriculture2.svg │ │ │ ├── Agriculture3.svg │ │ │ ├── Agriculture4.svg │ │ │ ├── Agriculture5.svg │ │ │ ├── Agriculture6.svg │ │ │ ├── Agriculture7.svg │ │ │ ├── Agriculture8.svg │ │ │ ├── Agriculture9.svg │ │ │ ├── AirTransportObj1.svg │ │ │ ├── AirTransportObj2.svg │ │ │ ├── AirTransportObj3.svg │ │ │ ├── AirTransportObj4.svg │ │ │ ├── AirTransportObj5.svg │ │ │ ├── AirTransportObj6.svg │ │ │ ├── AuthorityService1.svg │ │ │ ├── AuthorityService2.svg │ │ │ ├── AuthorityService3.svg │ │ │ ├── AuthorityService4.svg │ │ │ ├── AuthorityService5.svg │ │ │ ├── AuthorityService6.svg │ │ │ ├── AuthorityService7.svg │ │ │ ├── AutoService1.svg │ │ │ ├── AutoService2.svg │ │ │ ├── AutoService3.svg │ │ │ ├── AutoService4.svg │ │ │ ├── Cemetery1.svg │ │ │ ├── Cemetery2.svg │ │ │ ├── Cemetery3.svg │ │ │ ├── Cemetery4.svg │ │ │ ├── Culture1.svg │ │ │ ├── Culture2.svg │ │ │ ├── Culture3.svg │ │ │ ├── CustomControl1.svg │ │ │ ├── Education1.svg │ │ │ ├── Education2.svg │ │ │ ├── Education3.svg │ │ │ ├── Education4.svg │ │ │ ├── Education5.svg │ │ │ ├── Education6.svg │ │ │ ├── ElectricPowerStation1.svg │ │ │ ├── ElectricPowerStation10.svg │ │ │ ├── ElectricPowerStation11.svg │ │ │ ├── ElectricPowerStation12.svg │ │ │ ├── ElectricPowerStation13.svg │ │ │ ├── ElectricPowerStation14.svg │ │ │ ├── ElectricPowerStation15.svg │ │ │ ├── ElectricPowerStation16.svg │ │ │ ├── ElectricPowerStation17.svg │ │ │ ├── ElectricPowerStation18.svg │ │ │ ├── ElectricPowerStation19.svg │ │ │ ├── ElectricPowerStation2.svg │ │ │ ├── ElectricPowerStation20.svg │ │ │ ├── ElectricPowerStation21.svg │ │ │ ├── ElectricPowerStation22.svg │ │ │ ├── ElectricPowerStation23.svg │ │ │ ├── ElectricPowerStation3.svg │ │ │ ├── ElectricPowerStation4.svg │ │ │ ├── ElectricPowerStation5.svg │ │ │ ├── ElectricPowerStation6.svg │ │ │ ├── ElectricPowerStation7.svg │ │ │ ├── ElectricPowerStation8.svg │ │ │ ├── ElectricPowerStation9.svg │ │ │ ├── ElectricTransformer1.svg │ │ │ ├── ElectricTransformer10.svg │ │ │ ├── ElectricTransformer11.svg │ │ │ ├── ElectricTransformer12.svg │ │ │ ├── ElectricTransformer13.svg │ │ │ ├── ElectricTransformer14.svg │ │ │ ├── ElectricTransformer15.svg │ │ │ ├── ElectricTransformer16.svg │ │ │ ├── ElectricTransformer17.svg │ │ │ ├── ElectricTransformer18.svg │ │ │ ├── ElectricTransformer19.svg │ │ │ ├── ElectricTransformer2.svg │ │ │ ├── ElectricTransformer20.svg │ │ │ ├── ElectricTransformer21.svg │ │ │ ├── ElectricTransformer22.svg │ │ │ ├── ElectricTransformer23.svg │ │ │ ├── ElectricTransformer3.svg │ │ │ ├── ElectricTransformer4.svg │ │ │ ├── ElectricTransformer5.svg │ │ │ ├── ElectricTransformer6.svg │ │ │ ├── ElectricTransformer7.svg │ │ │ ├── ElectricTransformer8.svg │ │ │ ├── ElectricTransformer9.svg │ │ │ ├── EmergencyProtectionObj1.svg │ │ │ ├── EmergencyProtectionObj2.svg │ │ │ ├── EmergencyProtectionObj3.svg │ │ │ ├── EmergencyProtectionObj4.svg │ │ │ ├── EmergencyProtectionObj5.svg │ │ │ ├── EmergencyProtectionObj6.svg │ │ │ ├── EngProtectionObj1.svg │ │ │ ├── EngProtectionObj2.svg │ │ │ ├── EngProtectionObj3.svg │ │ │ ├── EngProtectionObj4.svg │ │ │ ├── EngProtectionObj5.svg │ │ │ ├── EnvDanger1.svg │ │ │ ├── EnvDanger2.svg │ │ │ ├── EnvMonitoring1.svg │ │ │ ├── GasFacility1.svg │ │ │ ├── GasFacility10.svg │ │ │ ├── GasFacility11.svg │ │ │ ├── GasFacility12.svg │ │ │ ├── GasFacility13.svg │ │ │ ├── GasFacility14.svg │ │ │ ├── GasFacility15.svg │ │ │ ├── GasFacility16.svg │ │ │ ├── GasFacility2.svg │ │ │ ├── GasFacility3.svg │ │ │ ├── GasFacility4.svg │ │ │ ├── GasFacility5.svg │ │ │ ├── GasFacility6.svg │ │ │ ├── GasFacility7.svg │ │ │ ├── GasFacility8.svg │ │ │ ├── GasFacility9.svg │ │ │ ├── Health1.svg │ │ │ ├── Health2.svg │ │ │ ├── Health3.svg │ │ │ ├── Health4.svg │ │ │ ├── Health5.svg │ │ │ ├── Health6.svg │ │ │ ├── Health7.svg │ │ │ ├── Health8.svg │ │ │ ├── Heritage1.svg │ │ │ ├── Heritage2.svg │ │ │ ├── Heritage3.svg │ │ │ ├── Heritage4.svg │ │ │ ├── HydraulicStructures1.svg │ │ │ ├── HydraulicStructures2.svg │ │ │ ├── HydraulicStructures3.svg │ │ │ ├── HydraulicStructures4.svg │ │ │ ├── HydraulicStructures5.svg │ │ │ ├── HydraulicStructures6.svg │ │ │ ├── Hydro5.svg │ │ │ ├── InvestmentZone1.svg │ │ │ ├── InvestmentZone2.svg │ │ │ ├── InvestmentZone3.svg │ │ │ ├── InvestmentZone4.svg │ │ │ ├── InvestmentZone5.svg │ │ │ ├── Manufacturing1.svg │ │ │ ├── Manufacturing10.svg │ │ │ ├── Manufacturing11.svg │ │ │ ├── Manufacturing2.svg │ │ │ ├── Manufacturing3.svg │ │ │ ├── Manufacturing4.svg │ │ │ ├── Manufacturing5.svg │ │ │ ├── Manufacturing6.svg │ │ │ ├── Manufacturing7.svg │ │ │ ├── Manufacturing8.svg │ │ │ ├── Manufacturing9.svg │ │ │ ├── MineralDep1.svg │ │ │ ├── MineralDep2.svg │ │ │ ├── MineralDep3.svg │ │ │ ├── MineralDep4.svg │ │ │ ├── MineralDep5.svg │ │ │ ├── MineralDep6.svg │ │ │ ├── MineralDep7.svg │ │ │ ├── NaturalRiskZone1.svg │ │ │ ├── NaturalRiskZone2.svg │ │ │ ├── NaturalRiskZone3.svg │ │ │ ├── NaturalRiskZone4.svg │ │ │ ├── NatureProtectArea5.svg │ │ │ ├── NatureProtectArea6.svg │ │ │ ├── NatureProtectArea7.svg │ │ │ ├── OilFacility1.svg │ │ │ ├── OilFacility10.svg │ │ │ ├── OilFacility11.svg │ │ │ ├── OilFacility12.svg │ │ │ ├── OilFacility2.svg │ │ │ ├── OilFacility3.svg │ │ │ ├── OilFacility4.svg │ │ │ ├── OilFacility5.svg │ │ │ ├── OilFacility6.svg │ │ │ ├── OilFacility7.svg │ │ │ ├── OilFacility8.svg │ │ │ ├── OilFacility9.svg │ │ │ ├── OtherObject1.svg │ │ │ ├── Prison1.svg │ │ │ ├── Public1.svg │ │ │ ├── Public2.svg │ │ │ ├── Public3.svg │ │ │ ├── Public4.svg │ │ │ ├── PublicTransportObj1.svg │ │ │ ├── PublicTransportObj2.svg │ │ │ ├── PublicTransportService1.svg │ │ │ ├── PublicTransportService2.svg │ │ │ ├── PublicTransportService3.svg │ │ │ ├── PublicTransportService4.svg │ │ │ ├── PublicTransportService5.svg │ │ │ ├── PublicTransportStops1.svg │ │ │ ├── PublicTransportStops2.svg │ │ │ ├── PublicTransportStops3.svg │ │ │ ├── PublicTransportStops4.svg │ │ │ ├── PublicTransportStops5.svg │ │ │ ├── PublicTransportStops6.svg │ │ │ ├── PublicTransportStops7.svg │ │ │ ├── RailwayFacility1.svg │ │ │ ├── RailwayFacility2.svg │ │ │ ├── RailwayFacility3.svg │ │ │ ├── RailwayFacility4.svg │ │ │ ├── RailwayFacility5.svg │ │ │ ├── Recreation1.svg │ │ │ ├── Recreation2.svg │ │ │ ├── Recreation3.svg │ │ │ ├── Recreation4.svg │ │ │ ├── Recreation5.svg │ │ │ ├── Resort1.svg │ │ │ ├── ResortArea1.svg │ │ │ ├── ServiceFacility1.svg │ │ │ ├── SewerFacility1.svg │ │ │ ├── SewerFacility2.svg │ │ │ ├── SewerFacility3.svg │ │ │ ├── SewerFacility4.svg │ │ │ ├── SewerFacility5.svg │ │ │ ├── Social1.svg │ │ │ ├── Social2.svg │ │ │ ├── Social3.svg │ │ │ ├── Social4.svg │ │ │ ├── Sport1.svg │ │ │ ├── Sport2.svg │ │ │ ├── TechnoRiskArea1.svg │ │ │ ├── TechnoRiskArea2.svg │ │ │ ├── TechnoRiskArea3.svg │ │ │ ├── TechnoRiskArea4.svg │ │ │ ├── TelecomFacility1.svg │ │ │ ├── TelecomFacility10.svg │ │ │ ├── TelecomFacility11.svg │ │ │ ├── TelecomFacility2.svg │ │ │ ├── TelecomFacility3.svg │ │ │ ├── TelecomFacility4.svg │ │ │ ├── TelecomFacility5.svg │ │ │ ├── TelecomFacility6.svg │ │ │ ├── TelecomFacility7.svg │ │ │ ├── TelecomFacility8.svg │ │ │ ├── TelecomFacility9.svg │ │ │ ├── ThermalFacility1.svg │ │ │ ├── ThermalFacility2.svg │ │ │ ├── ThermalFacility3.svg │ │ │ ├── ThermalFacility4.svg │ │ │ ├── TranspLogisticObj1.svg │ │ │ ├── TranspLogisticObj2.svg │ │ │ ├── TransportObj1.svg │ │ │ ├── TransportObj2.svg │ │ │ ├── TransportObj3.svg │ │ │ ├── TransportObj4.svg │ │ │ ├── TransportObj5.svg │ │ │ ├── TransportObj6.svg │ │ │ ├── WasteFacility1.svg │ │ │ ├── WasteFacility2.svg │ │ │ ├── WasteFacility3.svg │ │ │ ├── WasteFacility4.svg │ │ │ ├── WasteFacility5.svg │ │ │ ├── WasteFacility6.svg │ │ │ ├── WaterFacility1.svg │ │ │ ├── WaterFacility2.svg │ │ │ ├── WaterFacility3.svg │ │ │ ├── WaterFacility4.svg │ │ │ ├── WaterFacility5.svg │ │ │ ├── WaterFacility6.svg │ │ │ ├── WaterTransportObj1.svg │ │ │ ├── WaterTransportObj2.svg │ │ │ ├── WaterTransportObj3.svg │ │ │ ├── WaterTransportObj4.svg │ │ │ ├── WaterTransportObj5.svg │ │ │ ├── WaterTransportObj6.svg │ │ │ ├── WaterTransportObj7.svg │ │ │ ├── WaterTransportObj8.svg │ │ │ ├── WaterTransportObj9.svg │ │ │ ├── WildlifeProtection1.svg │ │ │ └── WildlifeProtection2.svg │ │ ├── tourism │ │ │ ├── caravan_park.svg │ │ │ ├── guest_house.svg │ │ │ ├── information.svg │ │ │ ├── motel.svg │ │ │ ├── museum.svg │ │ │ ├── picnic.svg │ │ │ ├── playground.svg │ │ │ ├── viewpoint.svg │ │ │ └── zoo.svg │ │ ├── tourist │ │ │ ├── tourist_archaeological.svg │ │ │ ├── tourist_archaeological2.svg │ │ │ ├── tourist_art_gallery.svg │ │ │ ├── tourist_art_gallery2.svg │ │ │ ├── tourist_battlefield.svg │ │ │ ├── tourist_beach.svg │ │ │ ├── tourist_casino.svg │ │ │ ├── tourist_castle.svg │ │ │ ├── tourist_cinema.svg │ │ │ ├── tourist_cinema2.svg │ │ │ ├── tourist_fountain.svg │ │ │ ├── tourist_memorial.svg │ │ │ ├── tourist_monument.svg │ │ │ ├── tourist_museum.svg │ │ │ ├── tourist_picnic.svg │ │ │ ├── tourist_ruin.svg │ │ │ ├── tourist_steam_train.svg │ │ │ ├── tourist_theatre.svg │ │ │ ├── tourist_view_point.svg │ │ │ ├── tourist_waterwheel.svg │ │ │ ├── tourist_windmill.svg │ │ │ ├── tourist_wreck.svg │ │ │ ├── tourist_zoo.svg │ │ │ └── tourisum_fountain.svg │ │ ├── transport │ │ │ ├── amenity=airport.svg │ │ │ ├── amenity=ferry_terminal.svg │ │ │ ├── amenity=parking.svg │ │ │ ├── amenity=taxi.svg │ │ │ ├── barrier_bollard.svg │ │ │ ├── barrier_enterance.svg │ │ │ ├── barrier_gate.svg │ │ │ ├── barrier_lift_gate.svg │ │ │ ├── barrier_stile.svg │ │ │ ├── barrier_toll_booth.svg │ │ │ ├── highway=bus_stop.svg │ │ │ ├── railway=station.svg │ │ │ ├── tram_stop.svg │ │ │ ├── transport_aerodrome.svg │ │ │ ├── transport_aerodrome2.svg │ │ │ ├── transport_airport.svg │ │ │ ├── transport_airport2.svg │ │ │ ├── transport_bus_station.svg │ │ │ ├── transport_bus_stop.svg │ │ │ ├── transport_bus_stop2.svg │ │ │ ├── transport_car_share.svg │ │ │ ├── transport_ford.svg │ │ │ ├── transport_fuel.svg │ │ │ ├── transport_fuel_lpg.svg │ │ │ ├── transport_lighthouse.svg │ │ │ ├── transport_marina.svg │ │ │ ├── transport_parking.svg │ │ │ ├── transport_parking_bicycle.svg │ │ │ ├── transport_parking_car.svg │ │ │ ├── transport_parking_car_paid.svg │ │ │ ├── transport_parking_disabled.svg │ │ │ ├── transport_parking_private.svg │ │ │ ├── transport_parking_private2.svg │ │ │ ├── transport_parking_private3.svg │ │ │ ├── transport_port.svg │ │ │ ├── transport_rental_bicycle.svg │ │ │ ├── transport_rental_car.svg │ │ │ ├── transport_roundabout_anticlockwise.svg │ │ │ ├── transport_roundabout_clockwise.svg │ │ │ ├── transport_taxi_rank.svg │ │ │ ├── transport_traffic_lights.svg │ │ │ ├── transport_train_station.svg │ │ │ ├── transport_train_station2.svg │ │ │ └── transport_tram_stop.svg │ │ └── wind_roses │ │ │ ├── WindRose_01.svg │ │ │ └── WindRose_02.svg │ ├── test │ │ ├── __init__.py │ │ ├── data │ │ │ ├── folder1 │ │ │ │ ├── marker1.svg │ │ │ │ ├── marker2.svg │ │ │ │ └── marker3.svg │ │ │ └── folder2 │ │ │ │ ├── marker1.svg │ │ │ │ └── marker2.svg │ │ └── test_lookup.py │ └── view.py ├── tileset │ ├── __init__.py │ ├── api.py │ ├── component.py │ ├── icon │ │ └── resource │ │ │ └── tileset.svg │ ├── locale │ │ └── ru.po │ ├── model.py │ ├── nodepkg │ │ ├── package.json │ │ └── resource-widget │ │ │ ├── Store.ts │ │ │ ├── Widget.less │ │ │ ├── Widget.tsx │ │ │ └── index.ts │ └── view.py ├── tmsclient │ ├── __init__.py │ ├── api.py │ ├── component.py │ ├── icon │ │ └── resource │ │ │ ├── tmsclient_connection.svg │ │ │ └── tmsclient_layer.svg │ ├── locale │ │ └── ru.po │ ├── migration │ │ ├── 2b6f2dd2-add-insecure-column.fw.sql │ │ ├── 2b6f2dd2-add-insecure-column.rw.sql │ │ ├── 2e9a67e5-add-auth-columns.fw.sql │ │ ├── 2e9a67e5-add-auth-columns.rw.sql │ │ ├── 37e63d4b-fix-enum.fw.sql │ │ └── 37e63d4b-fix-enum.rw.sql │ ├── model.py │ ├── nodepkg │ │ ├── package.json │ │ ├── tmsclient-connection │ │ │ ├── TmsClientConnectionStore.ts │ │ │ ├── TmsClientConnectionWidget.tsx │ │ │ └── index.ts │ │ └── tmsclient-layer │ │ │ ├── TmsClientLayerStore.ts │ │ │ ├── TmsClientLayerWidget.tsx │ │ │ └── index.ts │ ├── test │ │ ├── __init__.py │ │ ├── test_model.py │ │ └── test_util.py │ ├── tile_fetcher.py │ ├── util.py │ └── view.py ├── vector_layer │ ├── __init__.py │ ├── api.py │ ├── cli.py │ ├── component.py │ ├── feature_query.py │ ├── helper.py │ ├── icon │ │ └── resource │ │ │ └── vector_layer.svg │ ├── kind_of_data.py │ ├── locale │ │ └── ru.po │ ├── migration │ │ ├── 323570bd-geometry-type-length.fw.sql │ │ ├── 323570bd-geometry-type-length.rw.sql │ │ ├── 37e63f22-fix-enum.fw.sql │ │ ├── 37e63f22-fix-enum.rw.sql │ │ ├── 46005e79-fix-sequence-ownership.fw.sql │ │ └── 46005e79-fix-sequence-ownership.rw.sql │ ├── model.py │ ├── nodepkg │ │ ├── package.json │ │ └── resource-widget │ │ │ ├── Store.tsx │ │ │ ├── Widget.less │ │ │ ├── Widget.tsx │ │ │ └── index.ts │ ├── ogrloader.py │ ├── test │ │ ├── __init__.py │ │ ├── data │ │ │ ├── errors │ │ │ │ ├── corrupted.zip │ │ │ │ ├── empty-ring.geojson │ │ │ │ ├── empty.geojson │ │ │ │ ├── geom-collection.geojson │ │ │ │ ├── incomplete-linestring.geojson │ │ │ │ ├── incomplete-multilinestring.geojson │ │ │ │ ├── incomplete-multipolygon.geojson │ │ │ │ ├── incomplete-polygon.geojson │ │ │ │ ├── mixed-feature-geom.geojson │ │ │ │ ├── non-multi-geom.geojson │ │ │ │ ├── null-geom.geojson │ │ │ │ ├── out-of-bounds-linestring.geojson │ │ │ │ ├── out-of-bounds-point.geojson │ │ │ │ ├── pointm.csv │ │ │ │ ├── pointm.vrt │ │ │ │ ├── pointz.geojson │ │ │ │ ├── self-intersection.geojson │ │ │ │ ├── single-geom-collection.geojson │ │ │ │ └── unclosed-ring.geojson │ │ │ ├── geom-fld.geojson │ │ │ ├── id-empty.geojson │ │ │ ├── id-non-uniq.geojson │ │ │ ├── int64.geojson │ │ │ ├── layer-lon-lat.csv │ │ │ ├── layer-lon-lat.xlsx │ │ │ ├── layer.geojson │ │ │ ├── layer_for_filter.zip │ │ │ ├── pointz.geojson │ │ │ ├── shapefile-point-utf8.zip │ │ │ ├── shapefile-point-win1251.zip │ │ │ ├── two-layers.zip │ │ │ └── type.geojson │ │ ├── ref_ddl │ │ │ ├── add_fields.v=false.sql │ │ │ ├── add_fields.v=true.sql │ │ │ ├── convert_geom_column_type.sql │ │ │ ├── create.v=false.sql │ │ │ ├── create.v=true.sql │ │ │ ├── delete_fields.sql │ │ │ ├── drop.v=false.sql │ │ │ ├── drop.v=true.sql │ │ │ ├── versioning_disable.sql │ │ │ └── versioning_enable.sql │ │ ├── ref_dml │ │ │ ├── delete.v=false.sql │ │ │ ├── delete.v=true.sql │ │ │ ├── initfill.sql │ │ │ ├── insert.v=false.sql │ │ │ ├── insert.v=true.sql │ │ │ ├── query_changed_fids.sql │ │ │ ├── query_changes.sql │ │ │ ├── query_pit.sql │ │ │ ├── restore.wg=false.sql │ │ │ ├── restore.wg=true.sql │ │ │ ├── update.v=false.wg=false.sql │ │ │ ├── update.v=false.wg=true.sql │ │ │ ├── update.v=true.wg=false.sql │ │ │ └── update.v=true.wg=true.sql │ │ ├── test_data.py │ │ ├── test_filter.py │ │ ├── test_source_error.py │ │ ├── test_versioning.py │ │ └── test_vlschema.py │ ├── util.py │ ├── view.py │ └── vlschema.py ├── webmap │ ├── __init__.py │ ├── adapter.py │ ├── api.py │ ├── component.py │ ├── favorite.py │ ├── icon │ │ ├── display.svg │ │ ├── measure_area.svg │ │ ├── measure_distance.svg │ │ └── resource │ │ │ └── webmap.svg │ ├── locale │ │ └── ru.po │ ├── migration │ │ ├── 16969697-layer-draw-order.fw.sql │ │ ├── 16969697-layer-draw-order.rw.sql │ │ ├── 1ff5bf48-add-editable-column.fw.sql │ │ ├── 1ff5bf48-add-editable-column.rw.sql │ │ ├── 20802903-add-annotations-columns.fw.sql │ │ ├── 20802903-add-annotations-columns.rw.sql │ │ ├── 2cee4e63-add-extent_constrained-column.fw.sql │ │ ├── 2cee4e63-add-extent_constrained-column.rw.sql │ │ ├── 3206493e-add-yandex-geocoder.fw.sql │ │ ├── 3206493e-add-yandex-geocoder.rw.sql │ │ ├── 33b2c229-add-public-to-webmapannotation.fw.sql │ │ ├── 33b2c229-add-public-to-webmapannotation.rw.sql │ │ ├── 33d90e2c-layer-identifiable-column.fw.sql │ │ ├── 33d90e2c-layer-identifiable-column.rw.sql │ │ ├── 37e6401f-fix-enum.fw.sql │ │ ├── 37e6401f-fix-enum.rw.sql │ │ ├── 390b25de-jsonb-annotation-style.fw.sql │ │ ├── 390b25de-jsonb-annotation-style.rw.sql │ │ ├── 3a024e71-enable-geometry-info.fw.sql │ │ ├── 3a024e71-enable-geometry-info.rw.sql │ │ ├── 3abe311d-change-annotation_default-column.fw.sql │ │ ├── 3abe311d-change-annotation_default-column.rw.sql │ │ ├── 3cb1eabf-add-legend_symbols.fw.sql │ │ ├── 3cb1eabf-add-legend_symbols.rw.sql │ │ ├── 3e366d86-add-constraining-extent-column.fw.sql │ │ ├── 3e366d86-add-constraining-extent-column.rw.sql │ │ ├── 4315451d-remove-invalid-settings.fw.sql │ │ ├── 4315451d-remove-invalid-settings.rw.sql │ │ ├── 43176859-fix-boolean-settings.fw.sql │ │ ├── 43176859-fix-boolean-settings.rw.sql │ │ ├── 43b50af4-add-group-exclusive-column.fw.sql │ │ ├── 43b50af4-add-group-exclusive-column.rw.sql │ │ ├── 43cf2875-add-measure_srs_id.fw.sql │ │ ├── 43cf2875-add-measure_srs_id.rw.sql │ │ ├── 45999710-remove-webmap-display-permission.fw.sql │ │ ├── 45999710-remove-webmap-display-permission.rw.sql │ │ ├── 46cfda20-add-title.fw.sql │ │ ├── 46cfda20-add-title.rw.sql │ │ ├── 4a4ce85e-remove-popup_width-and-popup_height.fw.sql │ │ ├── 4a4ce85e-remove-popup_width-and-popup_height.rw.sql │ │ ├── 4a6a7a01-add-webmap-options.fw.sql │ │ └── 4a6a7a01-add-webmap-options.rw.sql │ ├── model.py │ ├── nodepkg │ │ ├── DisplayLayerAdapter.ts │ │ ├── client-settings.ts │ │ ├── clone-webmap │ │ │ ├── CloneWebmap.tsx │ │ │ ├── index.ts │ │ │ └── util │ │ │ │ ├── cloneResource.ts │ │ │ │ └── getUniqName.ts │ │ ├── compat │ │ │ ├── CustomItemFileWriteStore.ts │ │ │ ├── EventEmitter.ts │ │ │ ├── LoggedDeferred.ts │ │ │ ├── Watchable.ts │ │ │ ├── topic.ts │ │ │ ├── type.ts │ │ │ └── util │ │ │ │ ├── entrypointLoader.ts │ │ │ │ └── handlePostMessage.ts │ │ ├── component │ │ │ ├── SelectLegendSymbols.tsx │ │ │ └── index.ts │ │ ├── control-container │ │ │ ├── ControlContainer.css │ │ │ └── ControlContainer.ts │ │ ├── coordinates │ │ │ ├── formatter.ts │ │ │ ├── index.ts │ │ │ ├── parser.ts │ │ │ └── regex.ts │ │ ├── display-tiny │ │ │ ├── DisplayTinyPage.tsx │ │ │ └── index.ts │ │ ├── display │ │ │ ├── Display.ts │ │ │ ├── DisplayPage.tsx │ │ │ ├── DisplayWidget.css │ │ │ ├── DisplayWidget.less │ │ │ ├── DisplayWidget.tsx │ │ │ ├── component │ │ │ │ ├── MapPane.less │ │ │ │ ├── MapPane.tsx │ │ │ │ ├── NavigationMenu.less │ │ │ │ ├── NavigationMenu.tsx │ │ │ │ ├── PanelSwitcher.css │ │ │ │ └── PanelSwitcher.tsx │ │ │ ├── displayURLParams.ts │ │ │ └── index.ts │ │ ├── feature-highlighter │ │ │ └── FeatureHighlighter.ts │ │ ├── filter-extent-btn │ │ │ ├── FilterExtentBtn.tsx │ │ │ └── index.ts │ │ ├── icon │ │ │ └── index.ts │ │ ├── identification │ │ │ └── registry.ts │ │ ├── image-adapter │ │ │ ├── ImageAdapter.ts │ │ │ ├── createImagelayer.ts │ │ │ └── index.ts │ │ ├── items-widget │ │ │ ├── DrawOrder.less │ │ │ ├── DrawOrder.tsx │ │ │ ├── Item.ts │ │ │ ├── ItemsStore.ts │ │ │ ├── ItemsWidget.tsx │ │ │ └── index.ts │ │ ├── layer-opacity-slider │ │ │ ├── LayerOpacitySlider.less │ │ │ ├── LayerOpacitySlider.tsx │ │ │ └── index.ts │ │ ├── layer │ │ │ └── annotations │ │ │ │ ├── AnnotationFeature.ts │ │ │ │ ├── AnnotationsEditableLayer.ts │ │ │ │ ├── AnnotationsLayer.ts │ │ │ │ ├── AnnotationsPopup.css │ │ │ │ ├── AnnotationsPopup.ts │ │ │ │ └── util │ │ │ │ ├── createPopupContent.ts │ │ │ │ └── getPopupCoordinates.ts │ │ ├── layers-tree │ │ │ ├── DropdownActions.less │ │ │ ├── DropdownActions.tsx │ │ │ ├── LayersTree.less │ │ │ ├── LayersTree.tsx │ │ │ ├── Legend.less │ │ │ ├── Legend.tsx │ │ │ ├── LegendAction.tsx │ │ │ ├── hook │ │ │ │ ├── useDrag.ts │ │ │ │ └── useWebmapItems.tsx │ │ │ ├── index.ts │ │ │ └── util │ │ │ │ └── treeItems.tsx │ │ ├── map-component │ │ │ ├── MapComponent.less │ │ │ ├── MapComponent.tsx │ │ │ ├── NGWLayer.tsx │ │ │ ├── UrlLayer.tsx │ │ │ ├── context │ │ │ │ └── useMapContext.ts │ │ │ ├── control │ │ │ │ ├── AttributionControl.tsx │ │ │ │ ├── ButtonControl.tsx │ │ │ │ ├── MapControl.tsx │ │ │ │ ├── ToggleControl.tsx │ │ │ │ ├── ZoomControl.tsx │ │ │ │ └── index.ts │ │ │ ├── hook │ │ │ │ ├── useMapAdapter.ts │ │ │ │ ├── useMapControl.ts │ │ │ │ └── useNGWLayer.ts │ │ │ ├── index.ts │ │ │ └── test │ │ │ │ └── testentry.tsx │ │ ├── map-controls │ │ │ ├── control │ │ │ │ ├── InfoScale.ts │ │ │ │ ├── InitialExtent.ts │ │ │ │ ├── LinkToMainMap.ts │ │ │ │ ├── MyLocation.ts │ │ │ │ ├── SwipeControl.css │ │ │ │ ├── SwipeControl.ts │ │ │ │ └── editing │ │ │ │ │ ├── EditingToolbar.css │ │ │ │ │ └── EditingToolbar.ts │ │ │ ├── index.ts │ │ │ ├── map-controls.ts │ │ │ ├── map-tools.ts │ │ │ ├── tool │ │ │ │ ├── Identify.ts │ │ │ │ ├── Measure.css │ │ │ │ ├── Measure.ts │ │ │ │ ├── Swipe.ts │ │ │ │ ├── ToolBase.ts │ │ │ │ ├── ViewerInfo.ts │ │ │ │ ├── Zoom.css │ │ │ │ ├── Zoom.ts │ │ │ │ └── editing │ │ │ │ │ ├── CreateFeature.ts │ │ │ │ │ ├── DeleteFeature.ts │ │ │ │ │ └── ModifyFeature.ts │ │ │ ├── type.ts │ │ │ └── utils.ts │ │ ├── map-state-observer │ │ │ ├── MapStatesObserver.ts │ │ │ └── index.ts │ │ ├── map-toolbar │ │ │ ├── MapToolbar.css │ │ │ ├── MapToolbar.ts │ │ │ ├── MapToolbarItems.ts │ │ │ ├── ToggleControl.ts │ │ │ ├── WidgetBase.ts │ │ │ └── index.ts │ │ ├── map-viewer-info │ │ │ ├── MapViewerInfo.less │ │ │ ├── MapViewerInfo.tsx │ │ │ ├── hook │ │ │ │ └── useProjections.ts │ │ │ └── index.ts │ │ ├── ol-ext │ │ │ ├── ol-mapscale.ts │ │ │ ├── ol-popup.css │ │ │ └── ol-popup.ts │ │ ├── ol │ │ │ ├── MapStore.ts │ │ │ ├── control │ │ │ │ ├── Attribution.ts │ │ │ │ ├── ZoomControl.ts │ │ │ │ ├── createButtonControl.css │ │ │ │ ├── createButtonControl.ts │ │ │ │ ├── createControl.ts │ │ │ │ └── createToggleControl.ts │ │ │ ├── layer │ │ │ │ ├── CoreLayer.ts │ │ │ │ ├── Image.ts │ │ │ │ ├── OSM.ts │ │ │ │ ├── QuadKey.ts │ │ │ │ ├── Vector.ts │ │ │ │ └── XYZ.ts │ │ │ ├── panel-control │ │ │ │ ├── PanelControl.css │ │ │ │ └── PanelControl.ts │ │ │ └── util │ │ │ │ └── mapStartup.ts │ │ ├── package.json │ │ ├── panel │ │ │ ├── PanelManager.ts │ │ │ ├── PanelStore.ts │ │ │ ├── annotations │ │ │ │ ├── AnnotationsPanel.less │ │ │ │ ├── AnnotationsPanel.tsx │ │ │ │ └── plugin.tsx │ │ │ ├── bookmarks │ │ │ │ ├── BookmarksPanel.less │ │ │ │ ├── BookmarksPanel.tsx │ │ │ │ └── plugin.tsx │ │ │ ├── component │ │ │ │ ├── PanelContainer.less │ │ │ │ ├── PanelContainer.tsx │ │ │ │ ├── PanelRow.tsx │ │ │ │ ├── PanelSection.less │ │ │ │ ├── PanelSection.tsx │ │ │ │ ├── PanelTitle.less │ │ │ │ ├── PanelTitle.tsx │ │ │ │ ├── index.ts │ │ │ │ └── legacy.less │ │ │ ├── description │ │ │ │ ├── DescriptionPanel.less │ │ │ │ ├── DescriptionPanel.tsx │ │ │ │ ├── DescriptionStore.ts │ │ │ │ └── plugin.tsx │ │ │ ├── header │ │ │ │ ├── CloseButton.less │ │ │ │ ├── CloseButton.tsx │ │ │ │ ├── PanelHeader.less │ │ │ │ ├── PanelHeader.tsx │ │ │ │ └── index.ts │ │ │ ├── identify │ │ │ │ ├── CoordinatesSwitcher.less │ │ │ │ ├── CoordinatesSwitcher.tsx │ │ │ │ ├── FeatureEditButton.tsx │ │ │ │ ├── IdentifyPanel.less │ │ │ │ ├── IdentifyPanel.tsx │ │ │ │ ├── IdentifyStore.ts │ │ │ │ ├── KeyValueTable.less │ │ │ │ ├── KeyValueTable.tsx │ │ │ │ ├── component │ │ │ │ │ ├── FeatureInfoSection.tsx │ │ │ │ │ ├── FeatureSelector.tsx │ │ │ │ │ ├── FieldsTable.tsx │ │ │ │ │ └── RasterInfoSection.tsx │ │ │ │ ├── extensions.ts │ │ │ │ ├── fields.tsx │ │ │ │ ├── format.ts │ │ │ │ ├── identification.ts │ │ │ │ ├── index.ts │ │ │ │ ├── lookup.ts │ │ │ │ ├── plugin.tsx │ │ │ │ └── util │ │ │ │ │ └── identifyInfoToFeaturesInfo.ts │ │ │ ├── index.ts │ │ │ ├── layers │ │ │ │ ├── BasemapSelector.tsx │ │ │ │ ├── LayersDropdown.tsx │ │ │ │ ├── LayersPanel.less │ │ │ │ ├── LayersPanel.tsx │ │ │ │ └── plugin.tsx │ │ │ ├── print │ │ │ │ ├── PrintMapExport │ │ │ │ │ ├── PrintMapExport.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ └── legendToModel.ts │ │ │ │ ├── PrintPanel.less │ │ │ │ ├── PrintPanel.tsx │ │ │ │ ├── component │ │ │ │ │ ├── PrintElementsSettings.tsx │ │ │ │ │ ├── PrintPaperSettings.tsx │ │ │ │ │ ├── PrintScaleSettings.tsx │ │ │ │ │ ├── ScalesSelect.css │ │ │ │ │ └── ScalesSelect.tsx │ │ │ │ ├── hook │ │ │ │ │ └── usePrintMapLayout.ts │ │ │ │ ├── options.tsx │ │ │ │ ├── plugin.tsx │ │ │ │ └── util.ts │ │ │ ├── registry.ts │ │ │ ├── search │ │ │ │ ├── SearchPanel.less │ │ │ │ ├── SearchPanel.tsx │ │ │ │ └── plugin.tsx │ │ │ ├── share │ │ │ │ ├── SharePanel.less │ │ │ │ ├── SharePanel.tsx │ │ │ │ └── plugin.tsx │ │ │ └── styles │ │ │ │ └── panels.less │ │ ├── plugin │ │ │ ├── PluginBase.ts │ │ │ ├── feature-layer │ │ │ │ ├── FeatureLayerPlugin.tsx │ │ │ │ └── index.ts │ │ │ ├── layer-editor │ │ │ │ ├── LayerEditor.tsx │ │ │ │ ├── constant.ts │ │ │ │ ├── index.ts │ │ │ │ └── type.ts │ │ │ ├── layer-info │ │ │ │ ├── LayerInfoPlugin.tsx │ │ │ │ └── index.ts │ │ │ ├── layer-opacity │ │ │ │ ├── LayerOpacityPlugin.tsx │ │ │ │ └── index.ts │ │ │ ├── type.ts │ │ │ ├── zoom-to-layer │ │ │ │ ├── ZoomToLayerPlugin.tsx │ │ │ │ └── index.ts │ │ │ └── zoom-to-webmap │ │ │ │ ├── ZoomToWebmapPlugin.ts │ │ │ │ └── index.ts │ │ ├── preview-embedded │ │ │ ├── PreviewEmbedded.tsx │ │ │ └── index.ts │ │ ├── preview-map │ │ │ ├── PreviewMap.tsx │ │ │ └── index.ts │ │ ├── print-map │ │ │ ├── PrintMap.less │ │ │ ├── PrintMap.tsx │ │ │ ├── PrintMapStore.ts │ │ │ ├── PrintMapStyle.ts │ │ │ ├── hook │ │ │ │ └── usePrintMap.ts │ │ │ ├── index.ts │ │ │ ├── legend-print-map │ │ │ │ ├── LegendPrintMap.tsx │ │ │ │ └── index.ts │ │ │ ├── rnd-comp │ │ │ │ ├── RndComp.tsx │ │ │ │ └── index.ts │ │ │ ├── type.ts │ │ │ └── utils.ts │ │ ├── settings-widget │ │ │ ├── OptionsWidget.less │ │ │ ├── OptionsWidget.tsx │ │ │ ├── SettingStore.ts │ │ │ ├── SettingsWidget.tsx │ │ │ └── index.ts │ │ ├── settings │ │ │ ├── Settings.tsx │ │ │ ├── SettingsForm.tsx │ │ │ ├── index.ts │ │ │ └── select-options.ts │ │ ├── store │ │ │ ├── WebmapStore.ts │ │ │ ├── annotations │ │ │ │ ├── AnnotationsStore.ts │ │ │ │ └── index.ts │ │ │ └── index.ts │ │ ├── tile-adapter │ │ │ ├── TileAdapter.ts │ │ │ ├── createTileLayer.ts │ │ │ └── index.ts │ │ ├── type │ │ │ ├── CreateLayerOptions.ts │ │ │ ├── DisplayConfig.ts │ │ │ ├── TreeItems.ts │ │ │ └── index.ts │ │ ├── ui │ │ │ ├── annotation-dialog │ │ │ │ ├── AnnotationAccessType.css │ │ │ │ ├── AnnotationAccessType.tsx │ │ │ │ ├── AnnotationDialog.ts │ │ │ │ ├── AnnotationsModal.tsx │ │ │ │ ├── AnnotationsSettings.tsx │ │ │ │ ├── index.ts │ │ │ │ └── showAnnotationEditor.tsx │ │ │ ├── annotations-manager │ │ │ │ ├── AnnotationsManager.ts │ │ │ │ └── index.ts │ │ │ └── finish-editing-dialog │ │ │ │ ├── FinishEditingDialog.tsx │ │ │ │ ├── index.ts │ │ │ │ └── showFinishEditingDialog.ts │ │ ├── utils │ │ │ ├── URL.ts │ │ │ ├── UrlParams.ts │ │ │ ├── extent.ts │ │ │ ├── format-units.tsx │ │ │ ├── geometry-types.ts │ │ │ ├── index.ts │ │ │ ├── makeSingleton.ts │ │ │ ├── normalizeExtent.ts │ │ │ ├── permalink.ts │ │ │ └── symbolsIntervals.ts │ │ ├── webmap-feature-grid-tab │ │ │ ├── WebMapFeatureGridTab.tsx │ │ │ └── index.ts │ │ ├── webmap-tabs │ │ │ ├── WebMapTabs.tsx │ │ │ ├── WebMapTabsStore.ts │ │ │ └── index.ts │ │ └── zoom-to-filtered-btn │ │ │ ├── ZoomToFilteredBtn.tsx │ │ │ └── index.ts │ ├── option │ │ ├── __init__.py │ │ ├── api.py │ │ └── base.py │ ├── plugin │ │ ├── __init__.py │ │ ├── base.py │ │ ├── feature_layer.py │ │ ├── layer_editor.py │ │ ├── layer_info.py │ │ ├── layer_opacity.py │ │ ├── zoom_to_layer.py │ │ └── zoom_to_webmap.py │ ├── template │ │ ├── invalid_origin.mako │ │ └── print.mako │ ├── test │ │ ├── __init__.py │ │ ├── test_api.py │ │ ├── test_api_annotations.py │ │ ├── test_manage_annotations.py │ │ ├── test_webmap_extent.py │ │ └── test_webmaps_items.py │ ├── util.py │ └── view.py ├── wfsclient │ ├── __init__.py │ ├── api.py │ ├── component.py │ ├── icon │ │ └── resource │ │ │ ├── wfsclient_connection.svg │ │ │ └── wfsclient_layer.svg │ ├── locale │ │ └── ru.po │ ├── migration │ │ ├── 37e6416e-fix-enum.fw.sql │ │ ├── 37e6416e-fix-enum.rw.sql │ │ ├── 4892a21e-original-datatype.fw.sql │ │ └── 4892a21e-original-datatype.rw.sql │ ├── model.py │ ├── nodepkg │ │ ├── package.json │ │ ├── wfsclient-connection │ │ │ ├── WfsClientConnectionStore.ts │ │ │ ├── WfsClientConnectionWidget.tsx │ │ │ └── index.ts │ │ └── wfsclient-layer │ │ │ ├── WfsClientLayerStore.ts │ │ │ ├── WfsClientLayerWidget.tsx │ │ │ └── index.ts │ ├── test │ │ ├── __init__.py │ │ └── test_wfs.py │ └── view.py ├── wfsserver │ ├── __init__.py │ ├── api.py │ ├── component.py │ ├── icon │ │ └── resource │ │ │ └── wfsserver_service.svg │ ├── locale │ │ └── ru.po │ ├── migration │ │ ├── 05443ecd-add-maxfeatures-column.fw.sql │ │ ├── 05443ecd-add-maxfeatures-column.rw.sql │ │ ├── 28a17b5b-layer-keyname-unique-constraint.fw.sql │ │ └── 28a17b5b-layer-keyname-unique-constraint.rw.sql │ ├── model.py │ ├── nodepkg │ │ ├── package.json │ │ └── service-widget │ │ │ ├── Layer.ts │ │ │ ├── ServiceStore.ts │ │ │ ├── ServiceWidget.tsx │ │ │ └── index.ts │ ├── test │ │ ├── __init__.py │ │ ├── test_api.py │ │ ├── test_data.py │ │ ├── test_gdal.py │ │ ├── test_schema.py │ │ └── xsd │ │ │ ├── schemas.opengis.net │ │ │ ├── filter │ │ │ │ ├── 1.0.0 │ │ │ │ │ ├── expr.xsd │ │ │ │ │ ├── filter.xsd │ │ │ │ │ └── filterCapabilities.xsd │ │ │ │ ├── 1.1.0 │ │ │ │ │ ├── expr.xsd │ │ │ │ │ ├── filter.xsd │ │ │ │ │ ├── filterAll.xsd │ │ │ │ │ ├── filterCapabilities.xsd │ │ │ │ │ └── sort.xsd │ │ │ │ └── 2.0 │ │ │ │ │ ├── expr.xsd │ │ │ │ │ ├── filter.xsd │ │ │ │ │ ├── filterAll.xsd │ │ │ │ │ ├── filterCapabilities.xsd │ │ │ │ │ ├── query.xsd │ │ │ │ │ └── sort.xsd │ │ │ ├── gml │ │ │ │ ├── 2.1.2 │ │ │ │ │ ├── feature.xsd │ │ │ │ │ ├── geometry.xsd │ │ │ │ │ └── gml.xsd │ │ │ │ ├── 3.1.1 │ │ │ │ │ ├── base │ │ │ │ │ │ ├── basicTypes.xsd │ │ │ │ │ │ ├── coordinateOperations.xsd │ │ │ │ │ │ ├── coordinateReferenceSystems.xsd │ │ │ │ │ │ ├── coordinateSystems.xsd │ │ │ │ │ │ ├── coverage.xsd │ │ │ │ │ │ ├── dataQuality.xsd │ │ │ │ │ │ ├── datums.xsd │ │ │ │ │ │ ├── defaultStyle.xsd │ │ │ │ │ │ ├── dictionary.xsd │ │ │ │ │ │ ├── direction.xsd │ │ │ │ │ │ ├── dynamicFeature.xsd │ │ │ │ │ │ ├── feature.xsd │ │ │ │ │ │ ├── geometryAggregates.xsd │ │ │ │ │ │ ├── geometryBasic0d1d.xsd │ │ │ │ │ │ ├── geometryBasic2d.xsd │ │ │ │ │ │ ├── geometryComplexes.xsd │ │ │ │ │ │ ├── geometryPrimitives.xsd │ │ │ │ │ │ ├── gml.xsd │ │ │ │ │ │ ├── gmlBase.xsd │ │ │ │ │ │ ├── grids.xsd │ │ │ │ │ │ ├── measures.xsd │ │ │ │ │ │ ├── observation.xsd │ │ │ │ │ │ ├── referenceSystems.xsd │ │ │ │ │ │ ├── temporal.xsd │ │ │ │ │ │ ├── temporalReferenceSystems.xsd │ │ │ │ │ │ ├── temporalTopology.xsd │ │ │ │ │ │ ├── topology.xsd │ │ │ │ │ │ ├── units.xsd │ │ │ │ │ │ └── valueObjects.xsd │ │ │ │ │ └── smil │ │ │ │ │ │ ├── smil20-language.xsd │ │ │ │ │ │ └── smil20.xsd │ │ │ │ └── 3.2.1 │ │ │ │ │ ├── basicTypes.xsd │ │ │ │ │ ├── coordinateOperations.xsd │ │ │ │ │ ├── coordinateReferenceSystems.xsd │ │ │ │ │ ├── coordinateSystems.xsd │ │ │ │ │ ├── coverage.xsd │ │ │ │ │ ├── datums.xsd │ │ │ │ │ ├── deprecatedTypes.xsd │ │ │ │ │ ├── dictionary.xsd │ │ │ │ │ ├── direction.xsd │ │ │ │ │ ├── dynamicFeature.xsd │ │ │ │ │ ├── feature.xsd │ │ │ │ │ ├── geometryAggregates.xsd │ │ │ │ │ ├── geometryBasic0d1d.xsd │ │ │ │ │ ├── geometryBasic2d.xsd │ │ │ │ │ ├── geometryComplexes.xsd │ │ │ │ │ ├── geometryPrimitives.xsd │ │ │ │ │ ├── gml.xsd │ │ │ │ │ ├── gmlBase.xsd │ │ │ │ │ ├── grids.xsd │ │ │ │ │ ├── measures.xsd │ │ │ │ │ ├── observation.xsd │ │ │ │ │ ├── referenceSystems.xsd │ │ │ │ │ ├── temporal.xsd │ │ │ │ │ ├── temporalReferenceSystems.xsd │ │ │ │ │ ├── temporalTopology.xsd │ │ │ │ │ ├── topology.xsd │ │ │ │ │ ├── units.xsd │ │ │ │ │ └── valueObjects.xsd │ │ │ ├── iso │ │ │ │ └── 19139 │ │ │ │ │ └── 20070417 │ │ │ │ │ ├── gco │ │ │ │ │ ├── basicTypes.xsd │ │ │ │ │ ├── gco.xsd │ │ │ │ │ └── gcoBase.xsd │ │ │ │ │ ├── gmd │ │ │ │ │ ├── applicationSchema.xsd │ │ │ │ │ ├── citation.xsd │ │ │ │ │ ├── constraints.xsd │ │ │ │ │ ├── content.xsd │ │ │ │ │ ├── dataQuality.xsd │ │ │ │ │ ├── distribution.xsd │ │ │ │ │ ├── extent.xsd │ │ │ │ │ ├── freeText.xsd │ │ │ │ │ ├── gmd.xsd │ │ │ │ │ ├── identification.xsd │ │ │ │ │ ├── maintenance.xsd │ │ │ │ │ ├── metadataApplication.xsd │ │ │ │ │ ├── metadataEntity.xsd │ │ │ │ │ ├── metadataExtension.xsd │ │ │ │ │ ├── portrayalCatalogue.xsd │ │ │ │ │ ├── referenceSystem.xsd │ │ │ │ │ └── spatialRepresentation.xsd │ │ │ │ │ ├── gsr │ │ │ │ │ ├── gsr.xsd │ │ │ │ │ └── spatialReferencing.xsd │ │ │ │ │ ├── gss │ │ │ │ │ ├── geometry.xsd │ │ │ │ │ └── gss.xsd │ │ │ │ │ └── gts │ │ │ │ │ ├── gts.xsd │ │ │ │ │ └── temporalObjects.xsd │ │ │ ├── ows │ │ │ │ ├── 1.0.0 │ │ │ │ │ ├── ows19115subset.xsd │ │ │ │ │ ├── owsAll.xsd │ │ │ │ │ ├── owsCommon.xsd │ │ │ │ │ ├── owsDataIdentification.xsd │ │ │ │ │ ├── owsExceptionReport.xsd │ │ │ │ │ ├── owsGetCapabilities.xsd │ │ │ │ │ ├── owsOperationsMetadata.xsd │ │ │ │ │ ├── owsServiceIdentification.xsd │ │ │ │ │ └── owsServiceProvider.xsd │ │ │ │ └── 1.1.0 │ │ │ │ │ ├── ows19115subset.xsd │ │ │ │ │ ├── owsAll.xsd │ │ │ │ │ ├── owsCommon.xsd │ │ │ │ │ ├── owsContents.xsd │ │ │ │ │ ├── owsDataIdentification.xsd │ │ │ │ │ ├── owsDomainType.xsd │ │ │ │ │ ├── owsExceptionReport.xsd │ │ │ │ │ ├── owsGetCapabilities.xsd │ │ │ │ │ ├── owsGetResourceByID.xsd │ │ │ │ │ ├── owsInputOutputData.xsd │ │ │ │ │ ├── owsManifest.xsd │ │ │ │ │ ├── owsOperationsMetadata.xsd │ │ │ │ │ ├── owsServiceIdentification.xsd │ │ │ │ │ └── owsServiceProvider.xsd │ │ │ └── wfs │ │ │ │ ├── 1.0.0 │ │ │ │ ├── WFS-basic.xsd │ │ │ │ ├── WFS-capabilities.xsd │ │ │ │ ├── WFS-transaction.xsd │ │ │ │ └── wfs.xsd │ │ │ │ ├── 1.1.0 │ │ │ │ └── wfs.xsd │ │ │ │ └── 2.0 │ │ │ │ └── wfs.xsd │ │ │ └── www.w3.org │ │ │ ├── 1999 │ │ │ └── xlink.xsd │ │ │ ├── 2001 │ │ │ └── xml.xsd │ │ │ └── 2009 │ │ │ ├── 01 │ │ │ └── xml.xsd │ │ │ └── XMLSchema │ │ │ └── XMLSchema.xsd │ ├── util.py │ ├── view.py │ └── wfs_handler.py ├── wmsclient │ ├── __init__.py │ ├── component.py │ ├── icon │ │ └── resource │ │ │ ├── wmsclient_connection.svg │ │ │ └── wmsclient_layer.svg │ ├── locale │ │ └── ru.po │ ├── migration │ │ ├── 00dc6f80-version-constraint.fw.sql │ │ ├── 00dc6f80-version-constraint.rw.sql │ │ ├── 039ac0e2-authentication.fw.sql │ │ ├── 039ac0e2-authentication.rw.sql │ │ ├── 37e64383-fix-enum.fw.sql │ │ ├── 37e64383-fix-enum.rw.sql │ │ ├── 3df5a71f-jsonb-vendor-params.fw.sql │ │ └── 3df5a71f-jsonb-vendor-params.rw.sql │ ├── model.py │ ├── nodepkg │ │ ├── package.json │ │ ├── wmsclient-connection │ │ │ ├── WmsClientConnectionStore.ts │ │ │ ├── WmsClientConnectionWidget.tsx │ │ │ └── index.ts │ │ └── wmsclient-layer │ │ │ ├── WmsClientLayerStore.ts │ │ │ ├── WmsClientLayerWidget.tsx │ │ │ ├── component │ │ │ └── VendorParamsModal.tsx │ │ │ ├── index.ts │ │ │ ├── store │ │ │ └── VendorParamsStore.ts │ │ │ └── type.ts │ └── view.py ├── wmsserver │ ├── __init__.py │ ├── api.py │ ├── component.py │ ├── fonts │ │ ├── DejaVuSans.ttf │ │ ├── DejaVuSansMono.ttf │ │ └── LICENSE │ ├── icon │ │ └── resource │ │ │ └── wmsserver_service.svg │ ├── locale │ │ └── ru.po │ ├── migration │ │ ├── 2807b08b-layer-position.fw.sql │ │ ├── 2807b08b-layer-position.rw.sql │ │ ├── 3095291f-switch-scale-denom.fw.sql │ │ └── 3095291f-switch-scale-denom.rw.sql │ ├── model.py │ ├── nodepkg │ │ ├── package.json │ │ └── service-widget │ │ │ ├── Layer.ts │ │ │ ├── ServiceStore.ts │ │ │ ├── ServiceWidget.tsx │ │ │ └── index.ts │ ├── template │ │ └── get_feature_info_html.mako │ ├── test │ │ ├── __init__.py │ │ └── test_gdal.py │ └── view.py └── workaround.py ├── pyproject.toml ├── setup.cfg └── setup.py /.pre-commit-config.yaml: -------------------------------------------------------------------------------- 1 | repos: 2 | - repo: https://github.com/nextgis/nextgisweb_githook.git 3 | rev: "c15a6fb4e2b306a84e630d8dd9847b4594cf78ad" 4 | hooks: 5 | - id: ruff 6 | - id: black 7 | - id: eslint 8 | - id: prettier 9 | -------------------------------------------------------------------------------- /.prettierrc.cjs: -------------------------------------------------------------------------------- 1 | /** @type {import("prettier").Options} */ 2 | const config = { 3 | trailingComma: "es5", 4 | tabWidth: 4, 5 | quoteProps: "preserve", 6 | semi: true, 7 | proseWrap: "always", 8 | plugins: ["prettier-plugin-css-order"], 9 | cssDeclarationSorterKeepOverrides: false, 10 | }; 11 | 12 | module.exports = config; 13 | -------------------------------------------------------------------------------- /MANIFEST.in: -------------------------------------------------------------------------------- 1 | include *.txt *.ini *.cfg *.rst 2 | recursive-include nextgisweb *.ico *.png *.css *.gif *.jpg *.pt *.txt *.mak *.mako *.js *.html *.xml 3 | -------------------------------------------------------------------------------- /VERSION: -------------------------------------------------------------------------------- 1 | 5.1.0.dev14 -------------------------------------------------------------------------------- /doc/admin/toc.rst: -------------------------------------------------------------------------------- 1 | NextGIS Web administrator's guide 2 | ================================= 3 | 4 | .. toctree:: 5 | :maxdepth: 3 6 | 7 | install 8 | configure 9 | backup_restore 10 | upgrade -------------------------------------------------------------------------------- /doc/developer/index.rst: -------------------------------------------------------------------------------- 1 | .. sectionauthor:: Dmitry Baryshnikov 2 | 3 | .. include:: toc.rst 4 | 5 | Indices and tables 6 | ================== 7 | 8 | * :ref:`genindex` 9 | * :ref:`modindex` 10 | * :ref:`search` 11 | 12 | -------------------------------------------------------------------------------- /doc/internal/index.rst: -------------------------------------------------------------------------------- 1 | 2 | .. include:: toc.rst 3 | 4 | 5 | Indices and tables 6 | ================== 7 | 8 | * :ref:`genindex` 9 | * :ref:`modindex` 10 | * :ref:`search` 11 | 12 | -------------------------------------------------------------------------------- /doc/internal/toc.rst: -------------------------------------------------------------------------------- 1 | NextGIS Web internals 2 | ===================== 3 | 4 | .. toctree:: 5 | :maxdepth: 2 6 | 7 | component 8 | resource 9 | jsrealm 10 | error 11 | lunkwill 12 | i18n 13 | test 14 | versioning 15 | migration 16 | url_route 17 | apitype 18 | code_formatting 19 | -------------------------------------------------------------------------------- /doc/toc.rst: -------------------------------------------------------------------------------- 1 | .. sectionauthor:: Дмитрий Барышников 2 | .. NextGIS Web dev common TOC 3 | 4 | NextGIS Web for developers 5 | ============================================ 6 | 7 | .. toctree:: 8 | :maxdepth: 2 9 | 10 | ./developer/toc 11 | ./internal/toc 12 | ./admin/toc 13 | 14 | -------------------------------------------------------------------------------- /migration/2015-06-30-wmsclient-auth.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE wmsclient_connection ADD COLUMN username character varying; 2 | ALTER TABLE wmsclient_connection ADD COLUMN password character varying; 3 | -------------------------------------------------------------------------------- /migration/2015-09-21-wfsserver-max-features.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE wfsserver_layer ADD COLUMN maxfeatures integer; -------------------------------------------------------------------------------- /migration/2015-12-28-auth-group-register.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE auth_group ADD COLUMN register boolean; 2 | UPDATE auth_group SET register = FALSE; 3 | ALTER TABLE auth_group ALTER COLUMN register SET NOT NULL; 4 | -------------------------------------------------------------------------------- /migration/2017-02-13-wmsclient-connection-version-check.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE wmsclient_connection DROP CONSTRAINT wmsclient_connection_version_check; 2 | ALTER TABLE wmsclient_connection DROP CONSTRAINT wmsclient_connection_version_check1; 3 | ALTER TABLE wmsclient_connection ADD CONSTRAINT wmsclient_connection_version_check CHECK (version IN ('1.1.1', '1.3.0')); -------------------------------------------------------------------------------- /migration/2018-02-02-webap-draw_order.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE public.webmap ADD COLUMN draw_order_enabled boolean; 2 | ALTER TABLE public.webmap_item ADD COLUMN draw_order_position integer; -------------------------------------------------------------------------------- /migration/2018-09-11-resource-creation_date.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE public.resource ADD COLUMN creation_date timestamp without time zone; 2 | UPDATE public.resource SET creation_date = '1970-01-01'; 3 | ALTER TABLE public.resource ALTER COLUMN creation_date SET NOT NULL; -------------------------------------------------------------------------------- /migration/2018-12-16-postgis_connection-port.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE postgis_connection ADD COLUMN port integer; 2 | -------------------------------------------------------------------------------- /migration/2019-05-16-webmap-editable.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE public.webmap ADD COLUMN editable boolean DEFAULT FALSE; 2 | -------------------------------------------------------------------------------- /migration/2019-06-02-webmap-add-annotation.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE public.webmap ADD COLUMN annotation_enabled boolean DEFAULT FALSE; 2 | ALTER TABLE public.webmap ADD COLUMN annotation_default boolean DEFAULT FALSE; 3 | -------------------------------------------------------------------------------- /migration/2019-08-29-raster_layer-dtype.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE public.raster_layer ADD COLUMN dtype character varying; 2 | UPDATE public.raster_layer SET dtype = 'Byte'; 3 | ALTER TABLE public.raster_layer ALTER COLUMN dtype SET NOT NULL; -------------------------------------------------------------------------------- /migration/2020-01-15-auth_user-oauth_subject.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE public.auth_user ADD COLUMN oauth_subject character varying UNIQUE; 2 | -------------------------------------------------------------------------------- /migration/2020-06-16-last-activity.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE public.auth_user ADD COLUMN last_activity timestamp without time zone; 2 | -------------------------------------------------------------------------------- /migration/2020-06-22-wmsserver-layer-position.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE public.wmsserver_layer ADD COLUMN position integer; 2 | -------------------------------------------------------------------------------- /migration/2020-07-11-oauth-timestamp.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE auth_user ADD COLUMN oauth_tstamp timestamp without time zone; -------------------------------------------------------------------------------- /migration/2020-07-11-oauth-token.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE auth_oauth_token 2 | ( 3 | id character varying NOT NULL, 4 | exp timestamp without time zone NOT NULL, 5 | sub character varying NOT NULL, 6 | data character varying NOT NULL, 7 | CONSTRAINT auth_oauth_token_pkey PRIMARY KEY (id) 8 | ); 9 | 10 | COMMENT ON TABLE auth_oauth_token IS 'auth'; -------------------------------------------------------------------------------- /migration/2020-07-22-wfsserver_layer-keyname-unique.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE public.wfsserver_layer 2 | ADD CONSTRAINT wfsserver_layer_service_id_keyname_key UNIQUE (service_id, keyname); 3 | -------------------------------------------------------------------------------- /migration/2020-09-02-fileobj-unique.sql: -------------------------------------------------------------------------------- 1 | CREATE UNIQUE INDEX fileobj_uuid_component_idx ON fileobj 2 | USING btree (uuid, component); 3 | -------------------------------------------------------------------------------- /migration/2020-10-18-lookup_table.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE IF NOT EXISTS lookup_table 2 | ( 3 | id integer NOT NULL, 4 | val hstore, 5 | CONSTRAINT lookup_table_pkey PRIMARY KEY (id), 6 | CONSTRAINT lookup_table_id_fkey FOREIGN KEY (id) 7 | REFERENCES resource (id) 8 | ); 9 | 10 | COMMENT ON TABLE lookup_table IS 'lookup_table'; 11 | -------------------------------------------------------------------------------- /migration/2020-12-09-tmsclient_connection-verify.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE tmsclient_connection 2 | ADD COLUMN insecure boolean NOT NULL DEFAULT false; 3 | -------------------------------------------------------------------------------- /migration/2020-12-12-layer_field-unique.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE layer_field 2 | ADD CONSTRAINT layer_field_layer_id_keyname_key UNIQUE (layer_id, keyname); 3 | 4 | ALTER TABLE layer_field 5 | ADD CONSTRAINT layer_field_layer_id_display_name_key UNIQUE (layer_id, display_name); 6 | -------------------------------------------------------------------------------- /nextgisweb/__main__.py: -------------------------------------------------------------------------------- 1 | if __name__ == "__main__": 2 | from .script import main 3 | 4 | main() 5 | -------------------------------------------------------------------------------- /nextgisweb/audit/__init__.py: -------------------------------------------------------------------------------- 1 | from .component import AuditComponent 2 | from .tween import OnResponse 3 | -------------------------------------------------------------------------------- /nextgisweb/audit/backend/__init__.py: -------------------------------------------------------------------------------- 1 | from . import dbase, file 2 | from .base import BackendBase, is_backend_configured, registry, require_backend 3 | -------------------------------------------------------------------------------- /nextgisweb/audit/nodepkg/journal/index.ts: -------------------------------------------------------------------------------- 1 | import { Journal } from "./Journal"; 2 | 3 | export default Journal; 4 | -------------------------------------------------------------------------------- /nextgisweb/audit/nodepkg/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nextgisweb/audit", 3 | "version": "0.0.0", 4 | "type": "module" 5 | } 6 | -------------------------------------------------------------------------------- /nextgisweb/auth/migration/05778268-add-user-disabled-column.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "05778268" } ***/ 2 | 3 | ALTER TABLE auth_principal DROP COLUMN description; 4 | ALTER TABLE auth_user DROP COLUMN superuser; 5 | ALTER TABLE auth_user DROP COLUMN disabled; 6 | -------------------------------------------------------------------------------- /nextgisweb/auth/migration/073aa220-add-group-register-column.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "073aa220", "parents": ["05778268"], 3 | "date": "2015-12-28T00:00:00", 4 | "message": "Add group 'register' column" 5 | } ***/ 6 | 7 | ALTER TABLE auth_group ADD COLUMN register boolean; 8 | UPDATE auth_group SET register = FALSE; 9 | ALTER TABLE auth_group ALTER COLUMN register SET NOT NULL; -------------------------------------------------------------------------------- /nextgisweb/auth/migration/073aa220-add-group-register-column.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "073aa220" } ***/ 2 | 3 | ALTER TABLE auth_group DROP COLUMN register; -------------------------------------------------------------------------------- /nextgisweb/auth/migration/24d8973b-add-user-oauth_subject-column.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "24d8973b", "parents": ["073aa220"], 3 | "date": "2020-01-15T00:00:00", 4 | "message": "Add user 'oauth_subject' column" 5 | } ***/ 6 | 7 | ALTER TABLE auth_user ADD COLUMN oauth_subject character varying UNIQUE; -------------------------------------------------------------------------------- /nextgisweb/auth/migration/24d8973b-add-user-oauth_subject-column.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "24d8973b" } ***/ 2 | 3 | ALTER TABLE auth_user DROP COLUMN oauth_subject; -------------------------------------------------------------------------------- /nextgisweb/auth/migration/27e8ee61-last-activity-column.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "27e8ee61", "parents": ["24d8973b"], 3 | "date": "2020-06-16T00:00:00", 4 | "message": "Last activity column" 5 | } ***/ 6 | 7 | ALTER TABLE auth_user ADD COLUMN last_activity timestamp without time zone; -------------------------------------------------------------------------------- /nextgisweb/auth/migration/27e8ee61-last-activity-column.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "27e8ee61" } ***/ 2 | 3 | ALTER TABLE auth_user DROP COLUMN last_activity; -------------------------------------------------------------------------------- /nextgisweb/auth/migration/28691764-oauth-timestamp.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "28691764", "parents": ["27e8ee61"], 3 | "date": "2020-07-11T00:00:00", 4 | "message": "OAuth timestamp" 5 | } ***/ 6 | 7 | ALTER TABLE auth_user ADD COLUMN oauth_tstamp timestamp without time zone; -------------------------------------------------------------------------------- /nextgisweb/auth/migration/28691764-oauth-timestamp.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "28691764" } ***/ 2 | 3 | ALTER TABLE auth_user DROP COLUMN oauth_tstamp; -------------------------------------------------------------------------------- /nextgisweb/auth/migration/28691765-oauth-token.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "28691765" } ***/ 2 | 3 | DROP TABLE auth_oauth_token; -------------------------------------------------------------------------------- /nextgisweb/auth/migration/2d0ad4b8-add-auth_user_lower_keyname_idx.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "2d0ad4b8", "parents": ["28691765"], 3 | "date": "2021-02-27T07:12:23", 4 | "message": "Add auth_user_lower_keyname_idx" 5 | } ***/ 6 | 7 | CREATE UNIQUE INDEX auth_user_lower_keyname_idx ON auth_user (lower(keyname)); 8 | -------------------------------------------------------------------------------- /nextgisweb/auth/migration/2d0ad4b8-add-auth_user_lower_keyname_idx.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "2d0ad4b8" } ***/ 2 | 3 | DROP INDEX auth_user_lower_keyname_idx; 4 | -------------------------------------------------------------------------------- /nextgisweb/auth/migration/2eeb41fd-add-language-column.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "2eeb41fd", "parents": ["2d0ad4b8"], 3 | "date": "2021-06-01T00:23:32", 4 | "message": "Add language column" 5 | } ***/ 6 | 7 | ALTER TABLE auth_user ADD COLUMN language character varying; 8 | -------------------------------------------------------------------------------- /nextgisweb/auth/migration/2eeb41fd-add-language-column.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "2eeb41fd" } ***/ 2 | 3 | ALTER TABLE auth_user DROP COLUMN language; 4 | -------------------------------------------------------------------------------- /nextgisweb/auth/migration/3372ed9b-add-auth_principal_cls_lower_display_name_idx.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "3372ed9b" } ***/ 2 | 3 | DROP INDEX auth_principal_cls_lower_display_name_idx; 4 | -------------------------------------------------------------------------------- /nextgisweb/auth/migration/35f4315f-oauth-password-token-table.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "35f4315f" } ***/ 2 | 3 | DROP TABLE auth_oauth_password_token; 4 | -------------------------------------------------------------------------------- /nextgisweb/auth/migration/38dc8c21-user-alink-token.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "38dc8c21", "parents": ["35f4315f"], 3 | "date": "2022-10-10T12:31:24", 4 | "message": "User alink token" 5 | } ***/ 6 | 7 | ALTER TABLE auth_user ADD COLUMN alink_token character varying UNIQUE; 8 | -------------------------------------------------------------------------------- /nextgisweb/auth/migration/38dc8c21-user-alink-token.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "38dc8c21" } ***/ 2 | 3 | ALTER TABLE auth_user DROP COLUMN alink_token; 4 | -------------------------------------------------------------------------------- /nextgisweb/auth/migration/390b25ab-jsonb-token-data.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "390b25ab", "parents": ["38dc8c21"], 3 | "date": "2022-10-19T14:41:12", 4 | "message": "JSONB token data" 5 | } ***/ 6 | 7 | ALTER TABLE auth_oauth_token ALTER COLUMN data TYPE jsonb USING data::jsonb; 8 | -------------------------------------------------------------------------------- /nextgisweb/auth/migration/390b25ab-jsonb-token-data.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "390b25ab" } ***/ 2 | 3 | ALTER TABLE auth_oauth_token ALTER COLUMN data TYPE character varying; 4 | -------------------------------------------------------------------------------- /nextgisweb/auth/migration/39b20e77-group-oauth_mapping-column.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "39b20e77" } ***/ 2 | 3 | ALTER TABLE auth_group DROP COLUMN oauth_mapping; 4 | -------------------------------------------------------------------------------- /nextgisweb/auth/migration/435611dc-add-permissions-column.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "435611dc", "parents": ["3c756e1a"], 3 | "date": "2024-03-16T14:26:51", 4 | "message": "Add permissions column" 5 | } ***/ 6 | 7 | ALTER TABLE auth_principal 8 | ADD COLUMN permissions text[] NOT NULL DEFAULT ARRAY[]::TEXT[]; 9 | -------------------------------------------------------------------------------- /nextgisweb/auth/migration/435611dc-add-permissions-column.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "435611dc" } ***/ 2 | 3 | ALTER TABLE auth_principal DROP COLUMN permissions; 4 | -------------------------------------------------------------------------------- /nextgisweb/auth/migration/43b64d85-fix-system-group.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "43b64d85" } ***/ 2 | 3 | -- This migration fixes initialize_db 4 | -------------------------------------------------------------------------------- /nextgisweb/auth/nodepkg/component/index.ts: -------------------------------------------------------------------------------- 1 | export { PrincipalSelect } from "./principal-select"; 2 | export { PermissionSelect } from "./permission-select"; 3 | -------------------------------------------------------------------------------- /nextgisweb/auth/nodepkg/component/permission-select/index.ts: -------------------------------------------------------------------------------- 1 | export { PermissionSelect } from "./PermissionSelect"; 2 | -------------------------------------------------------------------------------- /nextgisweb/auth/nodepkg/component/principal-select/index.ts: -------------------------------------------------------------------------------- 1 | export { PrincipalSelect } from "./PrincipalSelect"; 2 | -------------------------------------------------------------------------------- /nextgisweb/auth/nodepkg/group-browse/index.ts: -------------------------------------------------------------------------------- 1 | import { GroupBrowse } from "./GroupBrowse"; 2 | 3 | export default GroupBrowse; 4 | -------------------------------------------------------------------------------- /nextgisweb/auth/nodepkg/group-widget/index.ts: -------------------------------------------------------------------------------- 1 | import { GroupWidget } from "./GroupWidget"; 2 | 3 | export default GroupWidget; 4 | -------------------------------------------------------------------------------- /nextgisweb/auth/nodepkg/icon.tsx: -------------------------------------------------------------------------------- 1 | export { default as SystemUserIcon } from "@nextgisweb/icon/material/attribution/fill"; 2 | export { default as AdministratorIcon } from "@nextgisweb/icon/material/local_police/fill"; 3 | export { default as RegularUserIcon } from "@nextgisweb/icon/material/person/fill"; 4 | export { default as GroupIcon } from "@nextgisweb/icon/material/groups/fill"; 5 | -------------------------------------------------------------------------------- /nextgisweb/auth/nodepkg/login-page/index.ts: -------------------------------------------------------------------------------- 1 | import { LoginPage } from "./LoginPage"; 2 | 3 | export default LoginPage; 4 | -------------------------------------------------------------------------------- /nextgisweb/auth/nodepkg/login/index.tsx: -------------------------------------------------------------------------------- 1 | export { LoginForm } from "./LoginForm"; 2 | export { LoginBox } from "./LoginBox"; 3 | export { loginModal } from "./loginModal"; 4 | -------------------------------------------------------------------------------- /nextgisweb/auth/nodepkg/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nextgisweb/auth", 3 | "version": "0.0.0", 4 | "type": "module" 5 | } 6 | -------------------------------------------------------------------------------- /nextgisweb/auth/nodepkg/session-invite/index.ts: -------------------------------------------------------------------------------- 1 | import { SessionInvite } from "./SessionInvite"; 2 | 3 | export default SessionInvite; 4 | -------------------------------------------------------------------------------- /nextgisweb/auth/nodepkg/settings-form/index.ts: -------------------------------------------------------------------------------- 1 | import { SettingsForm } from "./SettingsForm"; 2 | 3 | export default SettingsForm; 4 | -------------------------------------------------------------------------------- /nextgisweb/auth/nodepkg/store/index.ts: -------------------------------------------------------------------------------- 1 | export { authStore } from "./authStore"; 2 | -------------------------------------------------------------------------------- /nextgisweb/auth/nodepkg/user-browse/index.ts: -------------------------------------------------------------------------------- 1 | import { UserBrowse } from "./UserBrowse"; 2 | 3 | export default UserBrowse; 4 | -------------------------------------------------------------------------------- /nextgisweb/auth/nodepkg/user-browse/type.ts: -------------------------------------------------------------------------------- 1 | import type { ModalBrowseData } from "@nextgisweb/gui/model-browse/ModelBrowse"; 2 | 3 | export interface UserBrowseData extends ModalBrowseData { 4 | disabled?: boolean; 5 | system?: boolean; 6 | } 7 | -------------------------------------------------------------------------------- /nextgisweb/auth/nodepkg/user-widget/index.ts: -------------------------------------------------------------------------------- 1 | import { UserWidget } from "./UserWidget"; 2 | 3 | export default UserWidget; 4 | -------------------------------------------------------------------------------- /nextgisweb/basemap/__init__.py: -------------------------------------------------------------------------------- 1 | from .component import BasemapComponent 2 | from .model import BasemapLayer, BasemapWebMap 3 | -------------------------------------------------------------------------------- /nextgisweb/basemap/migration/314b36a0-add-copyright_-fields.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "314b36a0", "parents": ["00000000"], 3 | "date": "2021-09-27T14:37:19", 4 | "message": "Add copyright_* fields" 5 | } ***/ 6 | 7 | ALTER TABLE basemap_layer ADD COLUMN copyright_text text; 8 | ALTER TABLE basemap_layer ADD COLUMN copyright_url text; 9 | -------------------------------------------------------------------------------- /nextgisweb/basemap/migration/314b36a0-add-copyright_-fields.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "314b36a0" } ***/ 2 | 3 | ALTER TABLE basemap_layer DROP COLUMN copyright_text; 4 | ALTER TABLE basemap_layer DROP COLUMN copyright_url; -------------------------------------------------------------------------------- /nextgisweb/basemap/nodepkg/layer-widget/index.ts: -------------------------------------------------------------------------------- 1 | export { LayerStore as store } from "./LayerStore"; 2 | export { LayerWidget as widget } from "./LayerWidget"; 3 | -------------------------------------------------------------------------------- /nextgisweb/basemap/nodepkg/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nextgisweb/basemap", 3 | "version": "0.0.0", 4 | "type": "module" 5 | } 6 | -------------------------------------------------------------------------------- /nextgisweb/basemap/nodepkg/plugin/base-map/index.ts: -------------------------------------------------------------------------------- 1 | import { BaseMap } from "./BaseMap"; 2 | 3 | export default BaseMap; 4 | -------------------------------------------------------------------------------- /nextgisweb/basemap/nodepkg/webmap-widget/index.ts: -------------------------------------------------------------------------------- 1 | export { WebMapStore as store } from "./WebMapStore"; 2 | export { WebMapWidget as widget } from "./WebMapWidget"; 3 | -------------------------------------------------------------------------------- /nextgisweb/core/__init__.py: -------------------------------------------------------------------------------- 1 | from .backup import BackupBase, BackupMetadata 2 | from .component import CoreComponent 3 | from .model import Setting 4 | from .storage import KindOfData, StorageComponentMixin 5 | -------------------------------------------------------------------------------- /nextgisweb/core/cli/__init__.py: -------------------------------------------------------------------------------- 1 | from . import backup, migration, operation, stat_stor 2 | -------------------------------------------------------------------------------- /nextgisweb/core/migration/2e803d47-add-storage-tables.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "2e803d47" } ***/ 2 | 3 | DROP TABLE core_storage_stat_delta; 4 | DROP TABLE core_storage_stat_delta_total; 5 | DROP TABLE core_storage_stat_dimension; 6 | DROP TABLE core_storage_stat_dimension_total; 7 | 8 | DROP FUNCTION core_storage_stat_delta_after_insert(); 9 | -------------------------------------------------------------------------------- /nextgisweb/core/migration/38db8bab-jsonb-values.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "38db8bab", "parents": ["2e803d47"], 3 | "date": "2022-10-10T07:50:00", 4 | "message": "JSONB setting value" 5 | } ***/ 6 | 7 | ALTER TABLE setting ALTER COLUMN value TYPE jsonb USING value::jsonb; 8 | -------------------------------------------------------------------------------- /nextgisweb/core/migration/38db8bab-jsonb-values.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "38db8bab" } ***/ 2 | 3 | ALTER TABLE setting ALTER COLUMN value TYPE character varying; 4 | -------------------------------------------------------------------------------- /nextgisweb/core/util.py: -------------------------------------------------------------------------------- 1 | from humanize import naturalsize 2 | 3 | 4 | def format_size(value): 5 | return naturalsize(value, binary=True, format="%.0f") 6 | -------------------------------------------------------------------------------- /nextgisweb/env/compat.py: -------------------------------------------------------------------------------- 1 | import sys 2 | 3 | if sys.version_info < (3, 10): 4 | from importlib_metadata import entry_points 5 | else: 6 | from importlib.metadata import entry_points 7 | 8 | __all__ = ["entry_points"] 9 | -------------------------------------------------------------------------------- /nextgisweb/env/i18n/__init__.py: -------------------------------------------------------------------------------- 1 | from .extract import extraction_root 2 | -------------------------------------------------------------------------------- /nextgisweb/env/test/test_component.py: -------------------------------------------------------------------------------- 1 | from pathlib import Path 2 | 3 | from ..component import Component 4 | 5 | 6 | def test_attributes(): 7 | assert Component.package == "nextgisweb" 8 | assert Component.module == "nextgisweb.env" 9 | assert Component.root_path == Path(__file__).parent.parent 10 | assert Component.resource_path("test/__init__.py").is_file() 11 | -------------------------------------------------------------------------------- /nextgisweb/feature_attachment/__init__.py: -------------------------------------------------------------------------------- 1 | from .component import FeatureAttachmentComponent 2 | from .model import FeatureAttachment 3 | -------------------------------------------------------------------------------- /nextgisweb/feature_attachment/migration/3c7119ac-resource_id-feature_id-index.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "3c7119ac", "parents": ["00000000"], 3 | "date": "2023-04-07T07:29:41", 4 | "message": "resource_id, feature_id index" 5 | } ***/ 6 | 7 | CREATE INDEX feature_attachment_resource_id_feature_id_idx 8 | ON feature_attachment (resource_id, feature_id); 9 | -------------------------------------------------------------------------------- /nextgisweb/feature_attachment/migration/3c7119ac-resource_id-feature_id-index.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "3c7119ac" } ***/ 2 | 3 | DROP INDEX feature_attachment_resource_id_feature_id_idx; 4 | -------------------------------------------------------------------------------- /nextgisweb/feature_attachment/migration/3cab998c-add-keyname.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "3cab998c" } ***/ 2 | 3 | ALTER TABLE feature_attachment DROP CONSTRAINT feature_attachment_keyname_unique; 4 | 5 | ALTER TABLE feature_attachment DROP COLUMN keyname; -------------------------------------------------------------------------------- /nextgisweb/feature_attachment/migration/3f5e63e6-add-file_meta-column.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "3f5e63e6", "parents": ["3cab998c"], 3 | "date": "2023-08-31T11:24:04", 4 | "message": "Add file_meta column" 5 | } ***/ 6 | 7 | ALTER TABLE feature_attachment ADD COLUMN file_meta jsonb; 8 | -------------------------------------------------------------------------------- /nextgisweb/feature_attachment/migration/3f5e63e6-add-file_meta-column.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "3f5e63e6" } ***/ 2 | 3 | ALTER TABLE feature_attachment DROP COLUMN file_meta; 4 | -------------------------------------------------------------------------------- /nextgisweb/feature_attachment/migration/420c3c4e-versioning.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "420c3c4e" } ***/ 2 | 3 | DROP TABLE feature_attachment_et, feature_attachment_ht; 4 | -------------------------------------------------------------------------------- /nextgisweb/feature_attachment/nodepkg/attachment-bundle/ol-control/index.ts: -------------------------------------------------------------------------------- 1 | import AttachmentBundleControl from "./control"; 2 | 3 | export default AttachmentBundleControl; 4 | -------------------------------------------------------------------------------- /nextgisweb/feature_attachment/nodepkg/attachment-bundle/plugin/index.ts: -------------------------------------------------------------------------------- 1 | import BundleAttachmentPlugin from "./plugin"; 2 | 3 | export default BundleAttachmentPlugin; 4 | -------------------------------------------------------------------------------- /nextgisweb/feature_attachment/nodepkg/attachment-bundle/tab/index.ts: -------------------------------------------------------------------------------- 1 | import AttachmentsTab from "./AttachmentsTab"; 2 | 3 | export default AttachmentsTab; 4 | -------------------------------------------------------------------------------- /nextgisweb/feature_attachment/nodepkg/attachment-editor/util/isFileImage.ts: -------------------------------------------------------------------------------- 1 | export function isFileImage(file: File) { 2 | return file && file["type"].split("/")[0] === "image"; 3 | } 4 | -------------------------------------------------------------------------------- /nextgisweb/feature_attachment/nodepkg/attachment-form/AttachmentForm.less: -------------------------------------------------------------------------------- 1 | .ngw-feature-attachment-attachment-form { 2 | p { 3 | max-width: 50em; 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /nextgisweb/feature_attachment/nodepkg/attachment-form/index.ts: -------------------------------------------------------------------------------- 1 | import { AttachmentForm } from "./AttachmentForm"; 2 | 3 | export default AttachmentForm; 4 | -------------------------------------------------------------------------------- /nextgisweb/feature_attachment/nodepkg/attachment-table-view/plugin.ts: -------------------------------------------------------------------------------- 1 | /** @plugin */ 2 | import { registry } from "@nextgisweb/webmap/identification/registry"; 3 | 4 | registry.register(COMP_ID, () => import("./AttachmentTableView")); 5 | -------------------------------------------------------------------------------- /nextgisweb/feature_attachment/nodepkg/attachment-table/index.ts: -------------------------------------------------------------------------------- 1 | import { AttachmentTable } from "./AttachmentTable"; 2 | 3 | export default AttachmentTable; 4 | -------------------------------------------------------------------------------- /nextgisweb/feature_attachment/nodepkg/client-settings.ts: -------------------------------------------------------------------------------- 1 | import { fetchSettings } from "@nextgisweb/pyramid/settings"; 2 | 3 | export interface FeatureAttachmentSettings { 4 | webmap: { 5 | bundle: boolean; 6 | }; 7 | } 8 | 9 | export default await fetchSettings(COMP_ID); 10 | -------------------------------------------------------------------------------- /nextgisweb/feature_attachment/nodepkg/image-thumbnail/component/PhotospherePreview.less: -------------------------------------------------------------------------------- 1 | .psv-navbar { 2 | background-color: transparent; 3 | } -------------------------------------------------------------------------------- /nextgisweb/feature_attachment/nodepkg/image-thumbnail/index.ts: -------------------------------------------------------------------------------- 1 | import { ImageThumbnail } from "./ImageThumbnail"; 2 | 3 | export default ImageThumbnail; 4 | 5 | export { type ImageThumbnailProps } from "./ImageThumbnail"; 6 | -------------------------------------------------------------------------------- /nextgisweb/feature_attachment/nodepkg/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nextgisweb/feature-attachment", 3 | "version": "0.0.0", 4 | "type": "module", 5 | "dependencies": { 6 | "@photo-sphere-viewer/core": "^5.7.0" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /nextgisweb/feature_attachment/plugin.py: -------------------------------------------------------------------------------- 1 | from nextgisweb.jsrealm import jsentry 2 | from nextgisweb.webmap.plugin import WebmapPlugin 3 | 4 | 5 | class BundleAttachmentPlugin(WebmapPlugin): 6 | entry = jsentry("@nextgisweb/feature-attachment/attachment-bundle/plugin") 7 | 8 | @classmethod 9 | def is_supported(cls, webmap): 10 | return (cls.entry, dict()) 11 | -------------------------------------------------------------------------------- /nextgisweb/feature_attachment/test/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/feature_attachment/test/__init__.py -------------------------------------------------------------------------------- /nextgisweb/feature_attachment/test/data/panorama-image.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/feature_attachment/test/data/panorama-image.jpg -------------------------------------------------------------------------------- /nextgisweb/feature_description/__init__.py: -------------------------------------------------------------------------------- 1 | from .component import FeatureDescriptionComponent 2 | from .model import FeatureDescription 3 | -------------------------------------------------------------------------------- /nextgisweb/feature_description/component.py: -------------------------------------------------------------------------------- 1 | from nextgisweb.env import Component, require 2 | 3 | 4 | class FeatureDescriptionComponent(Component): 5 | @require("feature_layer") 6 | def initialize(self): 7 | from . import extension # noqa: F401 8 | 9 | def setup_pyramid(self, config): 10 | from . import api 11 | 12 | api.setup_pyramid(self, config) 13 | -------------------------------------------------------------------------------- /nextgisweb/feature_description/locale/ru.po: -------------------------------------------------------------------------------- 1 | #: amd/ngw-feature-description/DisplayWidget.js:7 2 | #: nodepkg/description-editor/plugin.ts:8 3 | #: nodepkg/description-view/DescriptionView.tsx:15 4 | msgid "Description" 5 | msgstr "Описание" 6 | 7 | #: util.py:19 8 | msgid "Invalid ZIP archive." 9 | msgstr "Некорректный ZIP-архив." 10 | -------------------------------------------------------------------------------- /nextgisweb/feature_description/migration/420c3c6c-versioning.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "420c3c6c" } ***/ 2 | 3 | DROP TABLE feature_description_et, feature_description_ht; 4 | -------------------------------------------------------------------------------- /nextgisweb/feature_description/nodepkg/description-view/plugin.ts: -------------------------------------------------------------------------------- 1 | /** @plugin */ 2 | import { registry } from "@nextgisweb/webmap/identification/registry"; 3 | 4 | registry.register(COMP_ID, () => import("./DescriptionView")); 5 | -------------------------------------------------------------------------------- /nextgisweb/feature_description/nodepkg/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nextgisweb/feature-description", 3 | "version": "0.0.0", 4 | "type": "module" 5 | } 6 | -------------------------------------------------------------------------------- /nextgisweb/feature_description/nodepkg/type.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/feature_description/nodepkg/type.ts -------------------------------------------------------------------------------- /nextgisweb/feature_description/test/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/feature_description/test/__init__.py -------------------------------------------------------------------------------- /nextgisweb/feature_layer/favorite.py: -------------------------------------------------------------------------------- 1 | from nextgisweb.env import gettext 2 | 3 | from nextgisweb.jsrealm import icon 4 | from nextgisweb.resource.favorite import from_route 5 | 6 | from_route("feature_layer.feature.browse", gettext("Feature table"), icon=icon("material/table")) 7 | -------------------------------------------------------------------------------- /nextgisweb/feature_layer/migration/0f7ab6a1-fix-datatype-constraint.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "0f7ab6a1" } ***/ 2 | 3 | SELECT 'NOP'; -------------------------------------------------------------------------------- /nextgisweb/feature_layer/migration/2b7e8ee6-layer-field-unique.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "2b7e8ee6" } ***/ 2 | 3 | ALTER TABLE layer_field DROP CONSTRAINT layer_field_layer_id_keyname_key; 4 | ALTER TABLE layer_field DROP CONSTRAINT layer_field_layer_id_display_name_key; -------------------------------------------------------------------------------- /nextgisweb/feature_layer/migration/2c3ce7cd-lookup_table_id-column.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "2c3ce7cd" } ***/ 2 | 3 | ALTER TABLE layer_field DROP CONSTRAINT layer_field_lookup_table_id_fkey; 4 | ALTER TABLE layer_field DROP COLUMN lookup_table_id; 5 | 6 | -------------------------------------------------------------------------------- /nextgisweb/feature_layer/migration/37e53073-fix-enum.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "37e53073", "parents": ["2cbdc86f"], 3 | "date": "2022-08-23T06:28:54", 4 | "message": "Fix enum" 5 | } ***/ 6 | 7 | ALTER TABLE layer_field DROP CONSTRAINT IF EXISTS layer_field_datatype_check; 8 | ALTER TABLE layer_field ALTER COLUMN datatype TYPE character varying(50); 9 | -------------------------------------------------------------------------------- /nextgisweb/feature_layer/migration/37e53073-fix-enum.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "37e53073" } ***/ 2 | 3 | -- This migration supplements old migration 4 | -------------------------------------------------------------------------------- /nextgisweb/feature_layer/migration/420c3c0b-versioning.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "420c3c0b" } ***/ 2 | 3 | DROP SEQUENCE feature_layer_vmeta_epoch_seq; 4 | DROP TABLE feature_layer_vobj, feature_layer_vmeta; 5 | -------------------------------------------------------------------------------- /nextgisweb/feature_layer/migration/42550420-transactions.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "42550420" } ***/ 2 | 3 | DROP TABLE feature_layer_transaction_result, feature_layer_transaction_operation, feature_layer_transaction; 4 | -------------------------------------------------------------------------------- /nextgisweb/feature_layer/migration/438055b2-add-text_search-column.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "438055b2", "parents": ["37e53073"], 3 | "date": "2024-03-24T20:19:01", 4 | "message": "Add text_search column" 5 | } ***/ 6 | 7 | ALTER TABLE layer_field ADD COLUMN text_search boolean NOT NULL DEFAULT true; 8 | ALTER TABLE layer_field ALTER COLUMN text_search DROP DEFAULT; 9 | -------------------------------------------------------------------------------- /nextgisweb/feature_layer/migration/438055b2-add-text_search-column.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "438055b2" } ***/ 2 | 3 | ALTER TABLE layer_field DROP COLUMN text_search; 4 | -------------------------------------------------------------------------------- /nextgisweb/feature_layer/nodepkg/attribute-editor/type.ts: -------------------------------------------------------------------------------- 1 | import type { NgwAttributeType } from "../type/FeatureItem"; 2 | 3 | /** This attributes for loading to NGW */ 4 | export type NgwAttributeValue = Record; 5 | 6 | /** This attributes for using in web */ 7 | export type AppAttributes = Record; 8 | -------------------------------------------------------------------------------- /nextgisweb/feature_layer/nodepkg/export-form/index.ts: -------------------------------------------------------------------------------- 1 | import { ExportForm } from "./ExportForm"; 2 | 3 | export default ExportForm; 4 | -------------------------------------------------------------------------------- /nextgisweb/feature_layer/nodepkg/feature-display-modal/index.ts: -------------------------------------------------------------------------------- 1 | export { FeatureDisplayModal } from "./FeatureDisplayModal"; 2 | -------------------------------------------------------------------------------- /nextgisweb/feature_layer/nodepkg/feature-display/FeatureDisplayWidget.less: -------------------------------------------------------------------------------- 1 | .ngw-feature-layer-display { 2 | display: flex; 3 | flex-direction: column; 4 | gap: 1em; 5 | height: 100%; 6 | 7 | > .ant-tabs { 8 | flex-grow: 1; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /nextgisweb/feature_layer/nodepkg/feature-display/index.ts: -------------------------------------------------------------------------------- 1 | import { FeatureDisplayWidget } from "./FeatureDisplayWidget"; 2 | 3 | export default FeatureDisplayWidget; 4 | -------------------------------------------------------------------------------- /nextgisweb/feature_layer/nodepkg/feature-editor-modal/index.ts: -------------------------------------------------------------------------------- 1 | export { FeatureEditorModal } from "./FeatureEditorModal"; 2 | -------------------------------------------------------------------------------- /nextgisweb/feature_layer/nodepkg/feature-editor/FeatureEditorWidget.less: -------------------------------------------------------------------------------- 1 | .ngw-feature-layer-editor { 2 | display: flex; 3 | flex-direction: column; 4 | gap: 1em; 5 | height: 100%; 6 | 7 | > .ant-tabs { 8 | flex-grow: 1; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /nextgisweb/feature_layer/nodepkg/feature-editor/constant.ts: -------------------------------------------------------------------------------- 1 | export const ATTRIBUTES_KEY = "attributes"; 2 | -------------------------------------------------------------------------------- /nextgisweb/feature_layer/nodepkg/feature-editor/index.ts: -------------------------------------------------------------------------------- 1 | import { FeatureEditorWidget } from "./FeatureEditorWidget"; 2 | 3 | export default FeatureEditorWidget; 4 | -------------------------------------------------------------------------------- /nextgisweb/feature_layer/nodepkg/feature-grid/constant.ts: -------------------------------------------------------------------------------- 1 | export const KEY_FIELD_ID = 0; 2 | export const LAST_CHANGED_FIELD_ID = -1; 3 | 4 | export const $FID: unique symbol = Symbol("$FID"); 5 | export const $VID: unique symbol = Symbol("$VID"); 6 | -------------------------------------------------------------------------------- /nextgisweb/feature_layer/nodepkg/feature-grid/index.ts: -------------------------------------------------------------------------------- 1 | import { FeatureGrid } from "./FeatureGrid"; 2 | 3 | export default FeatureGrid; 4 | -------------------------------------------------------------------------------- /nextgisweb/feature_layer/nodepkg/fields-widget/index.ts: -------------------------------------------------------------------------------- 1 | export { FieldsStore as store } from "./FieldsStore"; 2 | export { FieldsWidget as widget } from "./FieldsWidget"; 3 | -------------------------------------------------------------------------------- /nextgisweb/feature_layer/nodepkg/geometry-info/index.ts: -------------------------------------------------------------------------------- 1 | import { GeometryInfo } from "./GeometryInfo"; 2 | 3 | export default GeometryInfo; 4 | -------------------------------------------------------------------------------- /nextgisweb/feature_layer/nodepkg/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nextgisweb/feature-layer", 3 | "version": "0.0.0", 4 | "type": "module", 5 | "dependencies": { 6 | "react-draggable": "^4.4.5" 7 | } 8 | } -------------------------------------------------------------------------------- /nextgisweb/feature_layer/nodepkg/resource-section/index.ts: -------------------------------------------------------------------------------- 1 | export { FeatureLayerResourceSection as default } from "./FeatureLayerResourceSection"; 2 | -------------------------------------------------------------------------------- /nextgisweb/feature_layer/nodepkg/settings-widget/index.ts: -------------------------------------------------------------------------------- 1 | export { SettingStore as store } from "./SettingStore"; 2 | export { SettingsWidget as widget } from "./SettingsWidget"; 3 | -------------------------------------------------------------------------------- /nextgisweb/feature_layer/nodepkg/type/GeometryInfo.ts: -------------------------------------------------------------------------------- 1 | interface Extent { 2 | minX: number; 3 | minY: number; 4 | maxX: number; 5 | maxY: number; 6 | } 7 | 8 | export interface GeometryInfo { 9 | area: number; 10 | extent: Extent; 11 | length: number; 12 | type: string; 13 | } 14 | -------------------------------------------------------------------------------- /nextgisweb/feature_layer/nodepkg/type/index.ts: -------------------------------------------------------------------------------- 1 | import type { EditorStore, EditorStoreConstructorOptions } from "./EditorStore"; 2 | 3 | export * from "./FeatureItem"; 4 | 5 | export { EditorStore, EditorStoreConstructorOptions }; 6 | -------------------------------------------------------------------------------- /nextgisweb/feature_layer/test/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/feature_layer/test/__init__.py -------------------------------------------------------------------------------- /nextgisweb/feature_layer/test/ref_sql/after_insert.complex.sql: -------------------------------------------------------------------------------- 1 | INSERT INTO complex_et ( 2 | resource_id, 3 | feature_id, 4 | extension_id, 5 | version_id, 6 | version_op 7 | ) 8 | VALUES 9 | (:p_rid, :p_fid, :p_eid, :p_vid, :p_vop); 10 | -------------------------------------------------------------------------------- /nextgisweb/feature_layer/test/ref_sql/after_insert.simple.sql: -------------------------------------------------------------------------------- 1 | INSERT INTO simple_et ( 2 | resource_id, 3 | feature_id, 4 | version_id, 5 | version_op 6 | ) 7 | VALUES 8 | (:p_rid, :p_fid, :p_vid, :p_vop); 9 | -------------------------------------------------------------------------------- /nextgisweb/feature_layer/test/ref_sql/initfill.simple.sql: -------------------------------------------------------------------------------- 1 | INSERT INTO simple_et ( 2 | resource_id, 3 | feature_id, 4 | version_id, 5 | version_op 6 | ) 7 | SELECT 8 | simple.resource_id, 9 | simple.feature_id, 10 | :p_vid AS anon_1, 11 | :p_vop AS anon_2 12 | FROM simple 13 | WHERE 14 | simple.resource_id = :p_rid; 15 | -------------------------------------------------------------------------------- /nextgisweb/feature_layer/transaction/__init__.py: -------------------------------------------------------------------------------- 1 | from .model import FeatureLayerTransaction 2 | -------------------------------------------------------------------------------- /nextgisweb/file_storage/__init__.py: -------------------------------------------------------------------------------- 1 | from .component import FileStorageComponent 2 | from .model import FileObj 3 | -------------------------------------------------------------------------------- /nextgisweb/file_storage/migration/2978ca7f-fileobj-uuid-component-unique.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "2978ca7f", "parents": ["00000000"], 3 | "date": "2020-09-02T00:00:00", 4 | "message": "FileObj (uuid, component) unique" 5 | } ***/ 6 | 7 | CREATE UNIQUE INDEX fileobj_uuid_component_idx ON fileobj 8 | USING btree (uuid, component); -------------------------------------------------------------------------------- /nextgisweb/file_storage/migration/2978ca7f-fileobj-uuid-component-unique.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "2978ca7f" } ***/ 2 | 3 | DROP INDEX fileobj_uuid_component_idx; -------------------------------------------------------------------------------- /nextgisweb/file_storage/test/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/file_storage/test/__init__.py -------------------------------------------------------------------------------- /nextgisweb/file_upload/__init__.py: -------------------------------------------------------------------------------- 1 | from .component import FileUploadComponent 2 | from .model import FileUpload, FileUploadID, FileUploadRef 3 | -------------------------------------------------------------------------------- /nextgisweb/file_upload/cli.py: -------------------------------------------------------------------------------- 1 | from nextgisweb.env.cli import EnvCommand, comp_cli 2 | 3 | from .component import FileUploadComponent 4 | 5 | 6 | @comp_cli.command() 7 | def cleanup(self: EnvCommand, *, file_upload: FileUploadComponent): 8 | file_upload.cleanup() 9 | -------------------------------------------------------------------------------- /nextgisweb/file_upload/nodepkg/client-settings.ts: -------------------------------------------------------------------------------- 1 | import { fetchSettings } from "@nextgisweb/pyramid/settings"; 2 | 3 | export interface FileUploadSettings { 4 | maxSize: number; 5 | chunkSize: number; 6 | } 7 | 8 | export default await fetchSettings(COMP_ID); 9 | -------------------------------------------------------------------------------- /nextgisweb/file_upload/nodepkg/file-uploader/index.ts: -------------------------------------------------------------------------------- 1 | export { FileUploader } from "./FileUploader"; 2 | export { FileUploaderButton } from "./FileUploaderButton"; 3 | 4 | export * from "./type"; 5 | -------------------------------------------------------------------------------- /nextgisweb/file_upload/nodepkg/image-uploader/index.ts: -------------------------------------------------------------------------------- 1 | export { ImageUploader } from "./ImageUploader"; 2 | export * from "./type"; 3 | -------------------------------------------------------------------------------- /nextgisweb/file_upload/nodepkg/image-uploader/type.ts: -------------------------------------------------------------------------------- 1 | import type { FileUploaderProps } from "../file-uploader/type"; 2 | 3 | export interface ImageUploaderProps 4 | extends FileUploaderProps { 5 | image?: Blob | File | string | null; 6 | onClean?: () => void; 7 | } 8 | -------------------------------------------------------------------------------- /nextgisweb/file_upload/nodepkg/index.ts: -------------------------------------------------------------------------------- 1 | export { useFileUploader } from "./file-uploader/hook/useFileUploader"; 2 | export { fileUploader } from "./file-uploader/util/fileUploader"; 3 | export { ImageUploader } from "./image-uploader"; 4 | -------------------------------------------------------------------------------- /nextgisweb/file_upload/nodepkg/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nextgisweb/file-upload", 3 | "version": "0.0.0", 4 | "type": "module", 5 | "dependencies": { 6 | "tus-js-client": "^2.2.0" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /nextgisweb/file_upload/nodepkg/testentry/button.ts: -------------------------------------------------------------------------------- 1 | /** @testentry react */ 2 | import { FileUploaderButton } from "../file-uploader"; 3 | 4 | export default FileUploaderButton; 5 | -------------------------------------------------------------------------------- /nextgisweb/file_upload/nodepkg/testentry/file.ts: -------------------------------------------------------------------------------- 1 | /** @testentry react */ 2 | import { FileUploader } from "../file-uploader"; 3 | 4 | export default FileUploader; 5 | -------------------------------------------------------------------------------- /nextgisweb/file_upload/nodepkg/testentry/image.ts: -------------------------------------------------------------------------------- 1 | /** @testentry react */ 2 | import { ImageUploader } from "../image-uploader"; 3 | 4 | export default ImageUploader; 5 | -------------------------------------------------------------------------------- /nextgisweb/file_upload/view.py: -------------------------------------------------------------------------------- 1 | def setup_pyramid(comp, config): 2 | pass 3 | -------------------------------------------------------------------------------- /nextgisweb/gui/__init__.py: -------------------------------------------------------------------------------- 1 | from .component import GUIComponent 2 | from .util import REACT_RENDERER, react_renderer 3 | -------------------------------------------------------------------------------- /nextgisweb/gui/component.py: -------------------------------------------------------------------------------- 1 | from nextgisweb.env import Component 2 | 3 | 4 | class GUIComponent(Component): 5 | def setup_pyramid(self, config): 6 | from . import view 7 | 8 | view.setup_pyramid(self, config) 9 | -------------------------------------------------------------------------------- /nextgisweb/gui/nodepkg/action-toolbar/ActionToolbar.less: -------------------------------------------------------------------------------- 1 | .ngw-gui-action-toolbar { 2 | display: flex; 3 | gap: 8px; 4 | text-wrap: nowrap; 5 | 6 | .spacer { 7 | flex-grow: 1; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /nextgisweb/gui/nodepkg/action-toolbar/index.ts: -------------------------------------------------------------------------------- 1 | export { ActionToolbar } from "./ActionToolbar"; 2 | export * from "./type"; 3 | -------------------------------------------------------------------------------- /nextgisweb/gui/nodepkg/antd/date.ts: -------------------------------------------------------------------------------- 1 | import type dayjs from "@nextgisweb/gui/dayjs"; 2 | 3 | export const disableNonPositiveYears = (current: dayjs.Dayjs) => { 4 | return current && current.year() <= 0; 5 | }; 6 | -------------------------------------------------------------------------------- /nextgisweb/gui/nodepkg/antd/theme.ts: -------------------------------------------------------------------------------- 1 | import { theme } from "antd"; 2 | 3 | const { useToken } = theme; 4 | 5 | export { theme, useToken }; 6 | 7 | export type { AliasToken } from "antd/es/theme/interface"; 8 | -------------------------------------------------------------------------------- /nextgisweb/gui/nodepkg/arm/index.ts: -------------------------------------------------------------------------------- 1 | export { mapper } from "./mapper"; 2 | export { firstError } from "./util"; 3 | export { LotMV } from "./LotMV"; 4 | export * as validate from "./validate"; 5 | export type * from "./type"; 6 | -------------------------------------------------------------------------------- /nextgisweb/gui/nodepkg/arm/type.ts: -------------------------------------------------------------------------------- 1 | export type Validator = ( 2 | value: V, 3 | context: C 4 | ) => [true, undefined] | [false, string]; 5 | 6 | export type ErrorResult = string | true | false | undefined; 7 | -------------------------------------------------------------------------------- /nextgisweb/gui/nodepkg/buttons/index.ts: -------------------------------------------------------------------------------- 1 | export { CopyToClipboardButton } from "./CopyToClipboardButton"; 2 | -------------------------------------------------------------------------------- /nextgisweb/gui/nodepkg/component/code/index.ts: -------------------------------------------------------------------------------- 1 | export { Code } from "./Code"; 2 | export { useCodeMirror } from "./hook/useCodeMirror"; 3 | -------------------------------------------------------------------------------- /nextgisweb/gui/nodepkg/component/content-card/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./ContentCard"; 2 | -------------------------------------------------------------------------------- /nextgisweb/gui/nodepkg/component/extent-row/index.ts: -------------------------------------------------------------------------------- 1 | export { ExtentRow } from "./ExtentRow"; 2 | export type { ExtentRowValue } from "./ExtentRow"; 3 | -------------------------------------------------------------------------------- /nextgisweb/gui/nodepkg/component/language-select/index.ts: -------------------------------------------------------------------------------- 1 | export { LanguageSelect } from "./LanguageSelect"; 2 | export type { LanguageSelectProps } from "./LanguageSelect"; 3 | -------------------------------------------------------------------------------- /nextgisweb/gui/nodepkg/component/simple-table/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./SimpleTable"; 2 | -------------------------------------------------------------------------------- /nextgisweb/gui/nodepkg/component/tabs-label-badge/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./TabsLabelBadge"; 2 | -------------------------------------------------------------------------------- /nextgisweb/gui/nodepkg/component/text-editor/index.ts: -------------------------------------------------------------------------------- 1 | export { TextEditor } from "./TextEditor"; 2 | -------------------------------------------------------------------------------- /nextgisweb/gui/nodepkg/description/index.ts: -------------------------------------------------------------------------------- 1 | export { DescriptionHtml } from "./DescriptionHtml"; 2 | -------------------------------------------------------------------------------- /nextgisweb/gui/nodepkg/edi-table/EdiTableStore.ts: -------------------------------------------------------------------------------- 1 | import type { AnyObject } from "./type"; 2 | 3 | export interface EdiTableStore { 4 | rows: Row[]; 5 | placeholder?: Row | null; 6 | validate?: boolean; 7 | 8 | cloneRow?: (row: Row) => void; 9 | deleteRow: (row: Row) => void; 10 | moveRow?: (row: Row, index: number) => void; 11 | } 12 | -------------------------------------------------------------------------------- /nextgisweb/gui/nodepkg/edi-table/index.ts: -------------------------------------------------------------------------------- 1 | export { EdiTable } from "./EdiTable"; 2 | export { 3 | EdiTableKeyValueStore, 4 | EdiTableKeyValueRow, 5 | EdiTableKeyInput, 6 | EdiTableValueInput, 7 | } from "./EdiTableKeyValue"; 8 | 9 | export type { EdiTableStore } from "./EdiTableStore"; 10 | export type { EdiTableColumn, EdiTableColumnComponentProps } from "./type"; 11 | -------------------------------------------------------------------------------- /nextgisweb/gui/nodepkg/error/CodeLazy.tsx: -------------------------------------------------------------------------------- 1 | // React lazy() doesn't support named exports, thus we have to create this 2 | // wrapper module with the default export. 3 | import { Code } from "@nextgisweb/gui/component/code"; 4 | 5 | export default Code; 6 | -------------------------------------------------------------------------------- /nextgisweb/gui/nodepkg/error/index.ts: -------------------------------------------------------------------------------- 1 | export { ErrorModal, errorModal, errorModalUnlessAbort } from "./ErrorModal"; 2 | export type { ErrorModalProps } from "./ErrorModal"; 3 | export { ErrorPage } from "./ErrorPage"; 4 | export { extractError } from "./extractError"; 5 | export { isAbortError } from "./util"; 6 | -------------------------------------------------------------------------------- /nextgisweb/gui/nodepkg/fields-form/index.ts: -------------------------------------------------------------------------------- 1 | import { Form } from "@nextgisweb/gui/antd"; 2 | 3 | export { FieldsForm } from "./FieldsForm"; 4 | 5 | export * from "./type"; 6 | 7 | // Reexport shortcut 8 | const useForm = Form.useForm; 9 | export { useForm, Form }; 10 | -------------------------------------------------------------------------------- /nextgisweb/gui/nodepkg/fields-form/rules/KeynameRule.ts: -------------------------------------------------------------------------------- 1 | import { gettext } from "@nextgisweb/pyramid/i18n"; 2 | 3 | export const KeynameRule = { 4 | pattern: new RegExp(/^[A-Za-z][\w-]*$/g), 5 | message: gettext("The value entered is not valid"), 6 | }; 7 | -------------------------------------------------------------------------------- /nextgisweb/gui/nodepkg/hook/index.ts: -------------------------------------------------------------------------------- 1 | export { useEventListener } from "./useEventListener"; 2 | export { useKeydownListener } from "./useKeydownListener"; 3 | export { useObjectState } from "./useObjectState"; 4 | export { useThemeVariables } from "./useThemeVariables"; 5 | export { useUnsavedChanges } from "./useUnsavedChanges"; 6 | -------------------------------------------------------------------------------- /nextgisweb/gui/nodepkg/hook/usePrevious.ts: -------------------------------------------------------------------------------- 1 | import { useEffect, useRef } from "react"; 2 | 3 | export function usePrevious(value: T, initialValue?: T) { 4 | const ref = useRef(initialValue || value); 5 | useEffect(() => { 6 | ref.current = value; 7 | }); 8 | return ref.current; 9 | } 10 | -------------------------------------------------------------------------------- /nextgisweb/gui/nodepkg/mayout/index.tsx: -------------------------------------------------------------------------------- 1 | export { Lot } from "./Lot"; 2 | export { Area } from "./Area"; 3 | 4 | export type { LotProps } from "./Lot"; 5 | export type { AreaProps } from "./Area"; 6 | -------------------------------------------------------------------------------- /nextgisweb/gui/nodepkg/model-browse/index.ts: -------------------------------------------------------------------------------- 1 | export { ModelBrowse } from "./ModelBrowse"; 2 | -------------------------------------------------------------------------------- /nextgisweb/gui/nodepkg/model-form/index.ts: -------------------------------------------------------------------------------- 1 | export { ModelForm } from "./ModelForm"; 2 | 3 | export type { Model } from "./ModelForm"; 4 | -------------------------------------------------------------------------------- /nextgisweb/gui/nodepkg/model-logo-form/index.ts: -------------------------------------------------------------------------------- 1 | export { ModelLogoForm } from "./ModelLogoForm"; 2 | -------------------------------------------------------------------------------- /nextgisweb/gui/nodepkg/progress-modal/index.ts: -------------------------------------------------------------------------------- 1 | export { ProgressModal } from "./ProgressModal"; 2 | export { showProgressModal } from "./showProgressModal"; 3 | -------------------------------------------------------------------------------- /nextgisweb/gui/nodepkg/single-setting-form/index.ts: -------------------------------------------------------------------------------- 1 | export { SingleSettingForm } from "./SingleSettingForm"; 2 | -------------------------------------------------------------------------------- /nextgisweb/gui/nodepkg/svg-icon/SvgIcon.tsx: -------------------------------------------------------------------------------- 1 | import classNames from "classnames"; 2 | 3 | import type { SvgIconProps } from "./type"; 4 | 5 | export function SvgIcon({ icon, className, ...rest }: SvgIconProps) { 6 | return ( 7 | 8 | 9 | 10 | ); 11 | } 12 | -------------------------------------------------------------------------------- /nextgisweb/gui/nodepkg/svg-icon/index.ts: -------------------------------------------------------------------------------- 1 | export { SvgIcon } from "./SvgIcon"; 2 | export { SvgIconLink } from "./SvgIconLink"; 3 | -------------------------------------------------------------------------------- /nextgisweb/i18n/__init__.py: -------------------------------------------------------------------------------- 1 | from .localizer import Localizer, Translations 2 | -------------------------------------------------------------------------------- /nextgisweb/jsrealm/__init__.py: -------------------------------------------------------------------------------- 1 | from .component import JSRealmComponent 2 | from .entry import JSEntry, jsentry 3 | from .icon import Icon, icon 4 | from .tsgen import TSExport 5 | -------------------------------------------------------------------------------- /nextgisweb/jsrealm/i18n.py: -------------------------------------------------------------------------------- 1 | from nextgisweb.env.i18n import extraction_root 2 | 3 | extraction_nodepkg = extraction_root.dir(r"^nodepkg$", {"jsrealm"}) 4 | extraction_nodepkg.file(r"\.[jt]sx?$", "javascript") 5 | -------------------------------------------------------------------------------- /nextgisweb/jsrealm/nodepkg/ckeditor/index.d.ts: -------------------------------------------------------------------------------- 1 | declare module "@nextgisweb/ckeditor" { 2 | import type { Editor } from "@ckeditor/ckeditor5-editor-classic"; 3 | 4 | const value: { Editor: Editor }; 5 | export = value; 6 | } 7 | -------------------------------------------------------------------------------- /nextgisweb/jsrealm/nodepkg/ckeditor/index.less: -------------------------------------------------------------------------------- 1 | :root { 2 | --ck-font-face: var(--ngw-text-font-family); 3 | --ck-border-radius: 0px; 4 | --ck-color-base-border: var(--divider-color); 5 | } 6 | -------------------------------------------------------------------------------- /nextgisweb/jsrealm/nodepkg/icon/global.d.ts: -------------------------------------------------------------------------------- 1 | declare module "@nextgisweb/icon/*" { 2 | import type { IconComponent } from "@nextgisweb/icon"; 3 | 4 | const value: IconComponent; 5 | export = value; 6 | } 7 | -------------------------------------------------------------------------------- /nextgisweb/jsrealm/nodepkg/icon/index.ts: -------------------------------------------------------------------------------- 1 | import type { FC, SVGProps } from "react"; 2 | 3 | export type IconComponent = FC> & { id: string }; 4 | -------------------------------------------------------------------------------- /nextgisweb/jsrealm/nodepkg/icon/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nextgisweb/icon", 3 | "version": "0.0.0", 4 | "type": "module", 5 | "dependencies": { 6 | "@material-symbols/svg-500": "^0.20.0", 7 | "@mdi/svg": "^7.2.96" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /nextgisweb/jsrealm/nodepkg/jsrealm/entrypoint/registry.ts: -------------------------------------------------------------------------------- 1 | /** @registry */ 2 | import { pluginRegistry } from "../plugin"; 3 | 4 | interface Entrypoint { 5 | identity: string; 6 | value: (...args: []) => Promise; 7 | } 8 | 9 | export const registry = pluginRegistry(MODULE_NAME); 10 | -------------------------------------------------------------------------------- /nextgisweb/jsrealm/nodepkg/jsrealm/i18n/comp/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/jsrealm/nodepkg/jsrealm/i18n/comp/.gitkeep -------------------------------------------------------------------------------- /nextgisweb/jsrealm/nodepkg/jsrealm/i18n/lang/index.ts: -------------------------------------------------------------------------------- 1 | export const { antd } = await import(`./${ngwConfig.locale}.inc.ts`); 2 | -------------------------------------------------------------------------------- /nextgisweb/jsrealm/nodepkg/jsrealm/plugin/index.ts: -------------------------------------------------------------------------------- 1 | export { LoaderRegistry, loaderRegistry } from "./loader"; 2 | export { registry as meta } from "./meta"; 3 | export { PluginRegistry, pluginRegistry } from "./registry"; 4 | export type { ImportCallback } from "./type"; 5 | -------------------------------------------------------------------------------- /nextgisweb/jsrealm/nodepkg/jsrealm/plugin/meta.ts: -------------------------------------------------------------------------------- 1 | /** @registry */ 2 | import { loaderRegistry } from "./loader"; 3 | import type { BaseRegistry } from "./registry"; 4 | 5 | /** Registry of all registries for testing purposes */ 6 | export const registry = loaderRegistry( 7 | MODULE_NAME 8 | ); 9 | -------------------------------------------------------------------------------- /nextgisweb/jsrealm/nodepkg/jsrealm/plugin/testentry/plugin/bar.ts: -------------------------------------------------------------------------------- 1 | /** @plugin */ 2 | import { registry } from "@nextgisweb/jsrealm/plugin/testentry/registry"; 3 | 4 | registry.registerValue(COMP_ID, (what) => `bar:${what}`, { 5 | operation: "update", 6 | }); 7 | -------------------------------------------------------------------------------- /nextgisweb/jsrealm/nodepkg/jsrealm/plugin/testentry/plugin/foo.ts: -------------------------------------------------------------------------------- 1 | export default (what: string) => `foo:${what}`; 2 | -------------------------------------------------------------------------------- /nextgisweb/jsrealm/nodepkg/jsrealm/plugin/type.ts: -------------------------------------------------------------------------------- 1 | export type ImportCallback = (...args: []) => Promise<{ default: V }>; 2 | -------------------------------------------------------------------------------- /nextgisweb/jsrealm/nodepkg/jsrealm/testentry/entry/abs.ts: -------------------------------------------------------------------------------- 1 | export const named = "named"; 2 | export default "default"; 3 | -------------------------------------------------------------------------------- /nextgisweb/jsrealm/nodepkg/jsrealm/testentry/entry/rel.ts: -------------------------------------------------------------------------------- 1 | export const named = "named"; 2 | export default "default"; 3 | -------------------------------------------------------------------------------- /nextgisweb/jsrealm/nodepkg/jsrealm/testentry/index.ts: -------------------------------------------------------------------------------- 1 | import { TestEntries } from "./TestEntries"; 2 | 3 | export default TestEntries; 4 | -------------------------------------------------------------------------------- /nextgisweb/jsrealm/nodepkg/jsrealm/testentry/mod/abs.ts: -------------------------------------------------------------------------------- 1 | export const named = "named"; 2 | export default "default"; 3 | -------------------------------------------------------------------------------- /nextgisweb/jsrealm/nodepkg/jsrealm/testentry/mod/rel.ts: -------------------------------------------------------------------------------- 1 | export const named = "named"; 2 | export default "default"; 3 | -------------------------------------------------------------------------------- /nextgisweb/jsrealm/nodepkg/jsrealm/webpack/font-weight-fix.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | "loader": "string-replace-loader", 3 | options: { 4 | search: /font-weight:\s*(normal|bold)\b/g, 5 | replace(match, value) { 6 | return `font-weight: var(--ngw-text-font-weight-${value})`; 7 | }, 8 | }, 9 | }; 10 | -------------------------------------------------------------------------------- /nextgisweb/jsrealm/nodepkg/jsrealm/webpack/util.cjs: -------------------------------------------------------------------------------- 1 | function stripIndex(name) { 2 | return name.replace(/(?:\/index)?\.(js|tsx?)$/, ""); 3 | } 4 | 5 | module.exports = { stripIndex }; 6 | -------------------------------------------------------------------------------- /nextgisweb/layer/__init__.py: -------------------------------------------------------------------------------- 1 | from .component import LayerComponent 2 | from .interface import IBboxLayer 3 | from .model import SpatialLayerMixin 4 | -------------------------------------------------------------------------------- /nextgisweb/layer/component.py: -------------------------------------------------------------------------------- 1 | from nextgisweb.env import Component 2 | 3 | 4 | class LayerComponent(Component): 5 | def setup_pyramid(self, config): 6 | from . import api 7 | 8 | api.setup_pyramid(self, config) 9 | -------------------------------------------------------------------------------- /nextgisweb/layer/interface.py: -------------------------------------------------------------------------------- 1 | from zope.interface import Attribute 2 | 3 | from nextgisweb.resource import IResourceBase 4 | 5 | 6 | class IBboxLayer(IResourceBase): 7 | extent = Attribute(""" Bounding box (extent) of a layer """) 8 | -------------------------------------------------------------------------------- /nextgisweb/layer/locale/ru.po: -------------------------------------------------------------------------------- 1 | #: model.py:10 2 | msgid "Spatial reference system" 3 | msgstr "Система координат" 4 | -------------------------------------------------------------------------------- /nextgisweb/layer/model.py: -------------------------------------------------------------------------------- 1 | from nextgisweb.env import gettext 2 | 3 | from nextgisweb.spatial_ref_sys import SRSMixin 4 | 5 | 6 | class SpatialLayerMixin(SRSMixin): 7 | def get_info(self): 8 | s = super() 9 | return (s.get_info() if hasattr(s, "get_info") else ()) + ( 10 | (gettext("Spatial reference system"), self.srs.display_name), 11 | ) 12 | -------------------------------------------------------------------------------- /nextgisweb/layer/test/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/layer/test/__init__.py -------------------------------------------------------------------------------- /nextgisweb/layer_preview/__init__.py: -------------------------------------------------------------------------------- 1 | from .component import LayerPreviewComponent 2 | -------------------------------------------------------------------------------- /nextgisweb/layer_preview/favorite.py: -------------------------------------------------------------------------------- 1 | from nextgisweb.env import gettext 2 | 3 | from nextgisweb.jsrealm import icon 4 | from nextgisweb.resource.favorite import from_route 5 | 6 | from_route("layer_preview.map", gettext("Preview"), icon=icon("material/preview")) 7 | -------------------------------------------------------------------------------- /nextgisweb/layer_preview/locale/ru.po: -------------------------------------------------------------------------------- 1 | #: favorite.py:5 view.py:21 view.py:46 2 | msgid "Preview" 3 | msgstr "Просмотр" 4 | 5 | #: nodepkg/preview-layer/PreviewLayer.tsx:99 6 | msgid "Toggle basemap" 7 | msgstr "Переключить подложку" 8 | -------------------------------------------------------------------------------- /nextgisweb/layer_preview/nodepkg/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nextgisweb/layer-preview", 3 | "version": "0.0.0", 4 | "type": "module" 5 | } 6 | -------------------------------------------------------------------------------- /nextgisweb/layer_preview/nodepkg/preview-layer/index.ts: -------------------------------------------------------------------------------- 1 | import { PreviewLayer } from "./PreviewLayer"; 2 | 3 | export default PreviewLayer; 4 | -------------------------------------------------------------------------------- /nextgisweb/lib/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/lib/__init__.py -------------------------------------------------------------------------------- /nextgisweb/lib/apitype/test/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/lib/apitype/test/__init__.py -------------------------------------------------------------------------------- /nextgisweb/lib/clann/__init__.py: -------------------------------------------------------------------------------- 1 | from .cmd_grp import NS_CMD_GRP_ATTR, NS_PARSER_ATTR, ArgumentParser, Command, Group 2 | from .decorator import command, group 3 | from .param import arg, opt 4 | -------------------------------------------------------------------------------- /nextgisweb/lib/clann/test/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/lib/clann/test/__init__.py -------------------------------------------------------------------------------- /nextgisweb/lib/config/__init__.py: -------------------------------------------------------------------------------- 1 | from . import otype 2 | from .annotation import ( 3 | ConfigOptions, 4 | MissingAnnotationWarning, 5 | MissingDefaultError, 6 | Option, 7 | OptionAnnotations, 8 | ) 9 | from .otype import Choice, OptionType, SizeInBytes 10 | from .util import environ_to_key, key_to_environ, load_config 11 | -------------------------------------------------------------------------------- /nextgisweb/lib/config/test/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/lib/config/test/__init__.py -------------------------------------------------------------------------------- /nextgisweb/lib/dinject/__init__.py: -------------------------------------------------------------------------------- 1 | from .container import Container 2 | from .inject import inject 3 | -------------------------------------------------------------------------------- /nextgisweb/lib/dinject/test/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/lib/dinject/test/__init__.py -------------------------------------------------------------------------------- /nextgisweb/lib/geometry/test/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/lib/geometry/test/__init__.py -------------------------------------------------------------------------------- /nextgisweb/lib/i18n/__init__.py: -------------------------------------------------------------------------------- 1 | from .trstr import Translatable, TranslatableOrStr, TrStr, TrTpl, trstr_factory 2 | -------------------------------------------------------------------------------- /nextgisweb/lib/i18n/test/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/lib/i18n/test/__init__.py -------------------------------------------------------------------------------- /nextgisweb/lib/json/test/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/lib/json/test/__init__.py -------------------------------------------------------------------------------- /nextgisweb/lib/migration/__init__.py: -------------------------------------------------------------------------------- 1 | from .graph import MigrationGraph, OperationGraph, resolve 2 | from .migration import InitialMigration, Migration, MigrationKey 3 | from .operation import ForwardOperation, InstallOperation, RewindOperation, UninstallOperation 4 | from .registry import PythonModuleMigration, Registry, SQLScriptMigration 5 | from .revision import REVID_ZERO, revid 6 | -------------------------------------------------------------------------------- /nextgisweb/lib/migration/base.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/lib/migration/base.py -------------------------------------------------------------------------------- /nextgisweb/lib/migration/test/__init__.py: -------------------------------------------------------------------------------- 1 | __MIGRATION__ = dict( 2 | revision="2bfa061e", 3 | parents=("2bfa0530", "2bfa05b4"), 4 | ) 5 | -------------------------------------------------------------------------------- /nextgisweb/lib/migration/test/mformat/00000001.py: -------------------------------------------------------------------------------- 1 | """ { 2 | "revision": "00000001", "parents": ["00000000"] 3 | } """ 4 | 5 | 6 | def forward(context): 7 | pass 8 | 9 | 10 | def rewind(context): 11 | pass 12 | -------------------------------------------------------------------------------- /nextgisweb/lib/migration/test/mformat/00000002.py: -------------------------------------------------------------------------------- 1 | """ { 2 | "revision": "00000002", "parents": ["00000001"] 3 | } """ 4 | 5 | 6 | def forward(context): 7 | pass 8 | -------------------------------------------------------------------------------- /nextgisweb/lib/migration/test/mformat/00000003.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "00000003", "parents": ["00000002"], 3 | "dependencies": [ 4 | "foo==00000000", 5 | ["this", "bar==00000000"] 6 | ] 7 | } ***/ 8 | -------------------------------------------------------------------------------- /nextgisweb/lib/migration/test/mformat/00000003.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "00000003" } ***/ 2 | -------------------------------------------------------------------------------- /nextgisweb/lib/migration/test/registry/foo/2bfa0530.py: -------------------------------------------------------------------------------- 1 | """ { 2 | "revision": "2bfa0530", "parents": ["00000000"], 3 | "message": "Create table foo_a" 4 | } """ 5 | 6 | 7 | def forward(ctx): 8 | ctx.execute("CREATE TABLE foo_a (id INTEGER PRIMARY KEY);") 9 | 10 | 11 | def rewind(ctx): 12 | ctx.execute("DROP TABLE foo_a;") 13 | -------------------------------------------------------------------------------- /nextgisweb/lib/migration/test/registry/foo/2bfa05b4.py: -------------------------------------------------------------------------------- 1 | """ { 2 | "revision": "2bfa05b4", "parents": ["00000000"], 3 | "message": "Create table foo_b" 4 | } """ 5 | 6 | 7 | def forward(ctx): 8 | ctx.execute("CREATE TABLE foo_b (id INTEGER PRIMARY KEY);") 9 | 10 | 11 | def rewind(ctx): 12 | ctx.execute("DROP TABLE foo_b;") 13 | -------------------------------------------------------------------------------- /nextgisweb/lib/migration/test/registry/foo/2bfa061e.py: -------------------------------------------------------------------------------- 1 | """ { 2 | "revision": "2bfa061e", "parents": ["2bfa0530", "2bfa05b4"] 3 | } """ 4 | 5 | 6 | def forward(context): 7 | pass 8 | 9 | 10 | def rewind(context): 11 | pass 12 | -------------------------------------------------------------------------------- /nextgisweb/lib/migration/test/registry/foo/2bfa075a.py: -------------------------------------------------------------------------------- 1 | """ { 2 | "revision": "2bfa075a", "parents": ["2bfa06fe"] 3 | } """ 4 | 5 | 6 | def forward(ctx): 7 | pass 8 | 9 | 10 | def rewind(ctx): 11 | pass 12 | -------------------------------------------------------------------------------- /nextgisweb/lib/msext.py: -------------------------------------------------------------------------------- 1 | from msgspec import Meta 2 | 3 | DEPRECATED = Meta(extra_json_schema=dict(deprecated=True)) 4 | -------------------------------------------------------------------------------- /nextgisweb/lib/ogrhelper/test/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/lib/ogrhelper/test/__init__.py -------------------------------------------------------------------------------- /nextgisweb/lib/registry/test/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/lib/registry/test/__init__.py -------------------------------------------------------------------------------- /nextgisweb/lib/saext/geometry.py: -------------------------------------------------------------------------------- 1 | from sqlalchemy.types import UserDefinedType 2 | 3 | 4 | class Geometry(UserDefinedType): 5 | cache_ok = True 6 | 7 | def __init__(self, geometry_type: str, srid: int): 8 | self.geometry_type = geometry_type 9 | self.srid = srid 10 | 11 | def get_col_spec(self): 12 | return f"GEOMETRY({self.geometry_type}, {self.srid})" 13 | -------------------------------------------------------------------------------- /nextgisweb/lib/saext/uuid.py: -------------------------------------------------------------------------------- 1 | import sqlalchemy.dialects.postgresql as sa_pg 2 | 3 | 4 | class UUID(sa_pg.UUID): 5 | """SQLAclhemy-s PostgreSQL UUID wrapper with as_uuid=True by default""" 6 | 7 | def __init__(self, *args, **kwargs): 8 | if "as_uuid" not in kwargs: 9 | kwargs["as_uuid"] = True 10 | super().__init__(*args, **kwargs) 11 | -------------------------------------------------------------------------------- /nextgisweb/lib/safehtml/test/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/lib/safehtml/test/__init__.py -------------------------------------------------------------------------------- /nextgisweb/lookup_table/__init__.py: -------------------------------------------------------------------------------- 1 | from .component import LookupTableComponent 2 | from .model import LookupTable 3 | -------------------------------------------------------------------------------- /nextgisweb/lookup_table/component.py: -------------------------------------------------------------------------------- 1 | from nextgisweb.env import Component 2 | 3 | 4 | class LookupTableComponent(Component): 5 | def setup_pyramid(self, config): 6 | from . import view 7 | 8 | view.setup_pyramid(self, config) 9 | -------------------------------------------------------------------------------- /nextgisweb/lookup_table/nodepkg/component/lookup-select/index.ts: -------------------------------------------------------------------------------- 1 | export { LookupSelect, type LookupSelectProps } from "./LookupSelect"; 2 | -------------------------------------------------------------------------------- /nextgisweb/lookup_table/nodepkg/editor/EditorWidget.less: -------------------------------------------------------------------------------- 1 | .ngw-lookup-table-editor { 2 | display: flex; 3 | flex-direction: column; 4 | height: 100%; 5 | } 6 | -------------------------------------------------------------------------------- /nextgisweb/lookup_table/nodepkg/editor/index.ts: -------------------------------------------------------------------------------- 1 | export { EditorStore as store } from "./EditorStore"; 2 | export { EditorWidget as widget } from "./EditorWidget"; 3 | -------------------------------------------------------------------------------- /nextgisweb/lookup_table/nodepkg/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nextgisweb/lookup-table", 3 | "version": "0.0.0", 4 | "type": "module" 5 | } 6 | -------------------------------------------------------------------------------- /nextgisweb/lookup_table/nodepkg/resource-section/index.ts: -------------------------------------------------------------------------------- 1 | export { LookupTableResourceSection as default } from "./LookupTableResourceSection"; 2 | -------------------------------------------------------------------------------- /nextgisweb/lookup_table/test/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/lookup_table/test/__init__.py -------------------------------------------------------------------------------- /nextgisweb/ogcfserver/__init__.py: -------------------------------------------------------------------------------- 1 | from .component import OGCFServerComponent 2 | from .model import Collection, Service 3 | -------------------------------------------------------------------------------- /nextgisweb/ogcfserver/component.py: -------------------------------------------------------------------------------- 1 | from nextgisweb.env import Component 2 | 3 | 4 | class OGCFServerComponent(Component): 5 | def __init__(self, *args, **kwargs): 6 | super().__init__(*args, **kwargs) 7 | 8 | def setup_pyramid(self, config): 9 | from . import api, view 10 | 11 | api.setup_pyramid(self, config) 12 | view.setup_pyramid(self, config) 13 | -------------------------------------------------------------------------------- /nextgisweb/ogcfserver/nodepkg/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nextgisweb/ogcfserver", 3 | "version": "0.0.0", 4 | "type": "module" 5 | } 6 | -------------------------------------------------------------------------------- /nextgisweb/ogcfserver/nodepkg/service-widget/index.ts: -------------------------------------------------------------------------------- 1 | export { ServiceStore as store } from "./ServiceStore"; 2 | export { ServiceWidget as widget } from "./ServiceWidget"; 3 | -------------------------------------------------------------------------------- /nextgisweb/ogcfserver/test/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/ogcfserver/test/__init__.py -------------------------------------------------------------------------------- /nextgisweb/postgis/__init__.py: -------------------------------------------------------------------------------- 1 | from .component import PostgisComponent 2 | from .model import PostgisConnection, PostgisLayer 3 | -------------------------------------------------------------------------------- /nextgisweb/postgis/migration/32357124-geometry-type-length.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "32357124", "parents": ["00000000"], 3 | "date": "2021-11-12T07:11:45", 4 | "message": "Geometry type length" 5 | } ***/ 6 | 7 | ALTER TABLE postgis_layer ALTER COLUMN geometry_type TYPE character varying(16); 8 | -------------------------------------------------------------------------------- /nextgisweb/postgis/migration/32357124-geometry-type-length.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "32357124" } ***/ 2 | 3 | -- This migration supplements old migration 4 | -------------------------------------------------------------------------------- /nextgisweb/postgis/migration/37e639a6-fix-enum.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "37e639a6", "parents": ["32357124"], 3 | "date": "2022-08-23T11:19:53", 4 | "message": "Fix enum" 5 | } ***/ 6 | 7 | ALTER TABLE postgis_layer DROP CONSTRAINT IF EXISTS postgis_layer_geometry_type_check; 8 | ALTER TABLE postgis_layer ALTER COLUMN geometry_type TYPE character varying(50); 9 | -------------------------------------------------------------------------------- /nextgisweb/postgis/migration/37e639a6-fix-enum.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "37e639a6" } ***/ 2 | 3 | -- This migration supplements old migration 4 | -------------------------------------------------------------------------------- /nextgisweb/postgis/migration/4836e6df-ssl-mode.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "4836e6df", "parents": ["37e639a6"], 3 | "date": "2024-11-15T05:01:50", 4 | "message": "SSL mode" 5 | } ***/ 6 | 7 | ALTER TABLE postgis_connection ADD COLUMN sslmode character varying(50); 8 | -------------------------------------------------------------------------------- /nextgisweb/postgis/migration/4836e6df-ssl-mode.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "4836e6df" } ***/ 2 | 3 | ALTER TABLE postgis_connection DROP COLUMN sslmode; 4 | -------------------------------------------------------------------------------- /nextgisweb/postgis/nodepkg/connection-widget/index.ts: -------------------------------------------------------------------------------- 1 | export { ConnectionStore as store } from "./ConnectionStore"; 2 | export { ConnectionWidget as widget } from "./ConnectionWidget"; 3 | -------------------------------------------------------------------------------- /nextgisweb/postgis/nodepkg/diagnostics-widget/index.ts: -------------------------------------------------------------------------------- 1 | import { DiagnosticsWidget } from "./DiagnosticsWidget"; 2 | 3 | export default DiagnosticsWidget; 4 | -------------------------------------------------------------------------------- /nextgisweb/postgis/nodepkg/layer-widget/index.ts: -------------------------------------------------------------------------------- 1 | export { LayerStore as store } from "./LayerStore"; 2 | export { LayerWidget as widget } from "./LayerWidget"; 3 | -------------------------------------------------------------------------------- /nextgisweb/postgis/nodepkg/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nextgisweb/postgis", 3 | "version": "0.0.0", 4 | "type": "module" 5 | } 6 | -------------------------------------------------------------------------------- /nextgisweb/postgis/util.py: -------------------------------------------------------------------------------- 1 | from sqlalchemy.dialects.postgresql import dialect as pg_dialect 2 | 3 | 4 | def coltype_as_str(coltype): 5 | return coltype.compile(pg_dialect()) 6 | -------------------------------------------------------------------------------- /nextgisweb/pyramid/__init__.py: -------------------------------------------------------------------------------- 1 | from nextgisweb.lib.apitype import AsJSON, JSONType, XMLType 2 | 3 | from .component import PyramidComponent 4 | from .model import Session, SessionStore 5 | from .session import WebSession 6 | from .util import viewargs 7 | -------------------------------------------------------------------------------- /nextgisweb/pyramid/asset/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/pyramid/asset/favicon.ico -------------------------------------------------------------------------------- /nextgisweb/pyramid/asset/logo_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/pyramid/asset/logo_outline.png -------------------------------------------------------------------------------- /nextgisweb/pyramid/asset/nextgis.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/pyramid/asset/nextgis.png -------------------------------------------------------------------------------- /nextgisweb/pyramid/asset/nextgis_logo_s.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /nextgisweb/pyramid/asset/webgis-for-social.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/pyramid/asset/webgis-for-social.png -------------------------------------------------------------------------------- /nextgisweb/pyramid/i18n.py: -------------------------------------------------------------------------------- 1 | from nextgisweb.env.i18n import extraction_root 2 | 3 | extraction_template = extraction_root.dir(r"^template$", {"server"}) 4 | extraction_template.ignore(r"[/^]__pycache__$") 5 | extraction_template.file(r"\.mako$", "mako") 6 | -------------------------------------------------------------------------------- /nextgisweb/pyramid/icon/material.json: -------------------------------------------------------------------------------- 1 | [ 2 | "close", 3 | "content_copy" 4 | ] -------------------------------------------------------------------------------- /nextgisweb/pyramid/migration/368d12d1-settings-for-cache.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "368d12d1" } ***/ 2 | 3 | DELETE FROM setting 4 | WHERE component = 'pyramid' AND name in ('custom_css.ckey', 'logo.ckey', 'company_logo.ckey'); 5 | -------------------------------------------------------------------------------- /nextgisweb/pyramid/migration/39374be0-jsonb-session.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "39374be0", "parents": ["368d12d1"], 3 | "date": "2022-10-28T05:22:40", 4 | "message": "JSONB session" 5 | } ***/ 6 | 7 | ALTER TABLE pyramid_session_store ALTER COLUMN value TYPE jsonb USING value::jsonb; 8 | -------------------------------------------------------------------------------- /nextgisweb/pyramid/migration/39374be0-jsonb-session.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "39374be0" } ***/ 2 | 3 | ALTER TABLE pyramid_session_store ALTER COLUMN value TYPE character varying; 4 | -------------------------------------------------------------------------------- /nextgisweb/pyramid/migration/436507ae-store-mime-type-with-logo.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "436507ae", "parents": ["39374be0"], 3 | "date": "2024-03-19T12:29:10", 4 | "message": "Store MIME type with logo" 5 | } ***/ 6 | 7 | UPDATE setting 8 | SET value = jsonb_build_array('image/png', value) 9 | WHERE component = 'pyramid' AND name = 'logo'; 10 | -------------------------------------------------------------------------------- /nextgisweb/pyramid/migration/436507ae-store-mime-type-with-logo.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "436507ae" } ***/ 2 | 3 | UPDATE setting 4 | SET value = (jsonb_array_elements_text(value) ->> 1)::jsonb 5 | WHERE component = 'pyramid' AND name = 'logo'; 6 | -------------------------------------------------------------------------------- /nextgisweb/pyramid/nodepkg/api/cache.ts: -------------------------------------------------------------------------------- 1 | import { LoaderCache } from "@nextgisweb/pyramid/util/loader"; 2 | 3 | const cache = new LoaderCache(); 4 | 5 | export { cache }; 6 | -------------------------------------------------------------------------------- /nextgisweb/pyramid/nodepkg/api/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./route"; 2 | export * from "./request"; 3 | export * from "./error"; 4 | export * from "./LunkwillParam"; 5 | -------------------------------------------------------------------------------- /nextgisweb/pyramid/nodepkg/backup-browse/BackupBrowse.less: -------------------------------------------------------------------------------- 1 | .ngw-pyramid-backup-page { 2 | table { 3 | td.size, 4 | th.size { 5 | width: 0; 6 | text-align: end; 7 | white-space: nowrap; 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /nextgisweb/pyramid/nodepkg/backup-browse/index.ts: -------------------------------------------------------------------------------- 1 | import { BackupBrowse } from "./BackupBrowse"; 2 | 3 | export default BackupBrowse; 4 | -------------------------------------------------------------------------------- /nextgisweb/pyramid/nodepkg/control-panel/ControlPanel.tsx: -------------------------------------------------------------------------------- 1 | import type { DynMenuItem } from "@nextgisweb/pyramid/layout/dynmenu/type"; 2 | 3 | import { Dynmenu } from "../layout"; 4 | 5 | interface ControlPanelProps { 6 | items: DynMenuItem[]; 7 | } 8 | 9 | export function ControlPanel({ items }: ControlPanelProps) { 10 | return ; 11 | } 12 | -------------------------------------------------------------------------------- /nextgisweb/pyramid/nodepkg/control-panel/index.ts: -------------------------------------------------------------------------------- 1 | import { ControlPanel } from "./ControlPanel"; 2 | 3 | export default ControlPanel; 4 | -------------------------------------------------------------------------------- /nextgisweb/pyramid/nodepkg/cors-settings/index.ts: -------------------------------------------------------------------------------- 1 | import { CORSSettings } from "./CORSSettings"; 2 | 3 | export default CORSSettings; 4 | -------------------------------------------------------------------------------- /nextgisweb/pyramid/nodepkg/custom-css-form/index.ts: -------------------------------------------------------------------------------- 1 | import { CustomCSSForm } from "./CustomCSSForm"; 2 | 3 | export default CustomCSSForm; 4 | -------------------------------------------------------------------------------- /nextgisweb/pyramid/nodepkg/error-page/index.ts: -------------------------------------------------------------------------------- 1 | import { ErrorPage } from "./ErrorPage"; 2 | 3 | export default ErrorPage; 4 | -------------------------------------------------------------------------------- /nextgisweb/pyramid/nodepkg/fonts/index.ts: -------------------------------------------------------------------------------- 1 | import { FontsPanel } from "./FontsPanel"; 2 | 3 | export default FontsPanel; 4 | -------------------------------------------------------------------------------- /nextgisweb/pyramid/nodepkg/home-path/index.ts: -------------------------------------------------------------------------------- 1 | import { HomePath } from "./HomePath"; 2 | 3 | export default HomePath; 4 | -------------------------------------------------------------------------------- /nextgisweb/pyramid/nodepkg/hook/index.ts: -------------------------------------------------------------------------------- 1 | export { useRouteGet } from "./useRouteGet"; 2 | export { useRoute } from "./useRoute"; 3 | export { useAbortController } from "./useAbortController"; 4 | export { useCache } from "./useCache"; 5 | -------------------------------------------------------------------------------- /nextgisweb/pyramid/nodepkg/icon/index.ts: -------------------------------------------------------------------------------- 1 | import type { FC } from "react"; 2 | 3 | import "@nextgisweb/jsrealm/icon.inc"; 4 | 5 | export function iconHtml(icon: FC & { id: string }) { 6 | return ``; 7 | } 8 | -------------------------------------------------------------------------------- /nextgisweb/pyramid/nodepkg/layout/header/type.ts: -------------------------------------------------------------------------------- 1 | import type { FC } from "react"; 2 | 3 | import type { ImportCallback } from "@nextgisweb/jsrealm/plugin"; 4 | 5 | import type { MenuItem } from "../store"; 6 | 7 | export type HeaderComponent

= ImportCallback> | MenuItem; 8 | -------------------------------------------------------------------------------- /nextgisweb/pyramid/nodepkg/logo-form/index.ts: -------------------------------------------------------------------------------- 1 | import { LogoForm } from "./LogoForm"; 2 | 3 | export default LogoForm; 4 | -------------------------------------------------------------------------------- /nextgisweb/pyramid/nodepkg/metrics/MetricSettings.less: -------------------------------------------------------------------------------- 1 | .ngw-pyramid-analytics-settings { 2 | display: flex; 3 | flex-direction: column; 4 | gap: 12px; 5 | 6 | > .ant-tabs { 7 | > .ant-tabs-content-holder > .ant-tabs-content > .ant-tabs-tabpane { 8 | padding: 1em; 9 | height: 20em; 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /nextgisweb/pyramid/nodepkg/metrics/index.ts: -------------------------------------------------------------------------------- 1 | import { MetricsSettings } from "./MetricSettings"; 2 | 3 | export default MetricsSettings; 4 | -------------------------------------------------------------------------------- /nextgisweb/pyramid/nodepkg/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nextgisweb/pyramid", 3 | "version": "0.0.0", 4 | "type": "module", 5 | "dependencies": { 6 | "swagger-ui-react": "~5.16.2" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /nextgisweb/pyramid/nodepkg/settings.ts: -------------------------------------------------------------------------------- 1 | import { route } from "./api"; 2 | 3 | export async function fetchSettings(component: string) { 4 | return (await route("pyramid.settings").get({ 5 | query: { component: component as any }, 6 | cache: true, 7 | })) as T; 8 | } 9 | -------------------------------------------------------------------------------- /nextgisweb/pyramid/nodepkg/storage-summary/index.ts: -------------------------------------------------------------------------------- 1 | import { StorageSummary } from "./StorageSummary"; 2 | 3 | export default StorageSummary; 4 | -------------------------------------------------------------------------------- /nextgisweb/pyramid/nodepkg/swagger-ui/index.ts: -------------------------------------------------------------------------------- 1 | import { SwaggerUI } from "./SwaggerUI"; 2 | 3 | export default SwaggerUI; 4 | -------------------------------------------------------------------------------- /nextgisweb/pyramid/nodepkg/system-info/index.ts: -------------------------------------------------------------------------------- 1 | import { SystemInfo } from "./SystemInfo"; 2 | 3 | export default SystemInfo; 4 | -------------------------------------------------------------------------------- /nextgisweb/pyramid/nodepkg/system-name-form/index.ts: -------------------------------------------------------------------------------- 1 | import { SystemNameForm } from "./SystemNameForm"; 2 | 3 | export default SystemNameForm; 4 | -------------------------------------------------------------------------------- /nextgisweb/pyramid/nodepkg/util/index.ts: -------------------------------------------------------------------------------- 1 | import { RequestQueue } from "./queue"; 2 | 3 | export { tileLoadFunction, transparentImage } from "./tileLoadFunction"; 4 | export * from "./loader"; 5 | export * from "./abort"; 6 | 7 | const imageQueue = new RequestQueue({ debounce: 150, limit: 6 }); 8 | 9 | export { RequestQueue, imageQueue }; 10 | -------------------------------------------------------------------------------- /nextgisweb/pyramid/permission.py: -------------------------------------------------------------------------------- 1 | from nextgisweb.env import gettext 2 | 3 | from nextgisweb.auth import Permission 4 | 5 | _msg_cors = gettext("Cross-origin resource sharing (CORS)") 6 | cors_view = Permission("cors.view", _msg_cors, "view") 7 | cors_manage = Permission("cors.manage", _msg_cors, "manage") 8 | cors = (cors_view, cors_manage) 9 | -------------------------------------------------------------------------------- /nextgisweb/pyramid/template/test_exception_template.mako: -------------------------------------------------------------------------------- 1 | <%! from nextgisweb.pyramid.view import test_exception_transaction %> 2 | 3 | <%inherit file='nextgisweb:pyramid/template/plain.mako' /> 4 | 5 | <% test_exception_transaction(request) %> 6 | -------------------------------------------------------------------------------- /nextgisweb/pyramid/template/update.mako: -------------------------------------------------------------------------------- 1 | <%! from nextgisweb.pyramid.view import UPDATE_JSENTRY %> 2 | 3 | %if request.env.ngupdate_url: 4 | 7 | %endif 8 | -------------------------------------------------------------------------------- /nextgisweb/pyramid/test/test_openapi_json.py: -------------------------------------------------------------------------------- 1 | def test_openapi_json(ngw_webtest_app): 2 | # TODO: Add validaion 3 | ngw_webtest_app.get("/openapi.json") 4 | -------------------------------------------------------------------------------- /nextgisweb/pyramid/test/test_view.py: -------------------------------------------------------------------------------- 1 | import pytest 2 | 3 | 4 | @pytest.fixture(scope="function") 5 | def get(ngw_env, ngw_webtest_app): 6 | root = "/static/" + ngw_env.pyramid.static_key[1:] 7 | 8 | def test(name): 9 | ngw_webtest_app.get(f"{root}/{name}") 10 | 11 | return test 12 | 13 | 14 | def test_asset(get): 15 | get("asset/pyramid/nextgis.png") 16 | -------------------------------------------------------------------------------- /nextgisweb/pyramid/tomb/__init__.py: -------------------------------------------------------------------------------- 1 | from .config import Configurator, find_template 2 | from .inspect import iter_routes 3 | from .response import StaticFileResponse, UnsafeFileResponse 4 | from .util import is_json_type 5 | -------------------------------------------------------------------------------- /nextgisweb/pyramid/tomb/exception.py: -------------------------------------------------------------------------------- 1 | from nextgisweb.env import gettext 2 | 3 | from nextgisweb.core.exception import UserException 4 | 5 | 6 | class MalformedJSONBody(UserException): 7 | title = gettext("Malformed JSON body") 8 | message = gettext("The JSON body of the request is malformed or invalid.") 9 | http_status_code = 400 10 | -------------------------------------------------------------------------------- /nextgisweb/raster_layer/__init__.py: -------------------------------------------------------------------------------- 1 | from .component import RasterLayerComponent 2 | from .model import RasterLayer 3 | -------------------------------------------------------------------------------- /nextgisweb/raster_layer/kind_of_data.py: -------------------------------------------------------------------------------- 1 | from nextgisweb.env import gettext 2 | 3 | from nextgisweb.core import KindOfData 4 | 5 | 6 | class RasterLayerData(KindOfData): 7 | identity = "raster_layer" 8 | display_name = gettext("Rasters and pyramids") 9 | -------------------------------------------------------------------------------- /nextgisweb/raster_layer/migration/22100521-add-dtype-column.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "22100521" } ***/ 2 | 3 | ALTER TABLE raster_layer DROP COLUMN dtype; 4 | -------------------------------------------------------------------------------- /nextgisweb/raster_layer/migration/3260f32e-add-cog-column.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "3260f32e", "parents": ["2ea54a77"], 3 | "date": "2021-11-20T18:53:04", 4 | "message": "Add cog column" 5 | } ***/ 6 | 7 | ALTER TABLE raster_layer ADD COLUMN cog boolean; 8 | UPDATE raster_layer SET cog = FALSE; 9 | ALTER TABLE raster_layer ALTER COLUMN cog SET NOT NULL; 10 | -------------------------------------------------------------------------------- /nextgisweb/raster_layer/migration/3260f32e-add-cog-column.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "3260f32e" } ***/ 2 | 3 | ALTER TABLE raster_layer DROP COLUMN cog; 4 | -------------------------------------------------------------------------------- /nextgisweb/raster_layer/migration/4c303b5e-add-fileobj_pam_id-column.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "4c303b5e" } ***/ 2 | 3 | ALTER TABLE raster_layer DROP CONSTRAINT raster_layer_fileobj_pam_id_fkey; 4 | ALTER TABLE raster_layer DROP COLUMN fileobj_pam_id; 5 | -------------------------------------------------------------------------------- /nextgisweb/raster_layer/nodepkg/client-settings.ts: -------------------------------------------------------------------------------- 1 | import { fetchSettings } from "@nextgisweb/pyramid/settings"; 2 | 3 | export interface RasterLayerSettings { 4 | export_formats: { name: string; display_name: string }[]; 5 | cog_enabled: boolean; 6 | } 7 | 8 | export default await fetchSettings(COMP_ID); 9 | -------------------------------------------------------------------------------- /nextgisweb/raster_layer/nodepkg/editor-widget/index.ts: -------------------------------------------------------------------------------- 1 | import { EditorStore } from "./EditorStore"; 2 | import { EditorWidget } from "./EditorWidget"; 3 | 4 | export { EditorStore as store, EditorWidget as widget }; 5 | -------------------------------------------------------------------------------- /nextgisweb/raster_layer/nodepkg/export-form/index.ts: -------------------------------------------------------------------------------- 1 | import { ExportForm } from "./ExportForm"; 2 | 3 | export default ExportForm; 4 | -------------------------------------------------------------------------------- /nextgisweb/raster_layer/nodepkg/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nextgisweb/raster-layer", 3 | "version": "0.0.0", 4 | "type": "module" 5 | } 6 | -------------------------------------------------------------------------------- /nextgisweb/raster_layer/test/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/raster_layer/test/__init__.py -------------------------------------------------------------------------------- /nextgisweb/raster_layer/test/data/rounds.tif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/raster_layer/test/data/rounds.tif -------------------------------------------------------------------------------- /nextgisweb/raster_layer/test/data/sochi-aster-colorized.tif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/raster_layer/test/data/sochi-aster-colorized.tif -------------------------------------------------------------------------------- /nextgisweb/raster_layer/test/data/sochi-aster-dem.tif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/raster_layer/test/data/sochi-aster-dem.tif -------------------------------------------------------------------------------- /nextgisweb/raster_mosaic/__init__.py: -------------------------------------------------------------------------------- 1 | from .component import RasterMosaicComponent 2 | from .model import RasterMosaic 3 | -------------------------------------------------------------------------------- /nextgisweb/raster_mosaic/component.py: -------------------------------------------------------------------------------- 1 | from nextgisweb.env import Component 2 | 3 | from nextgisweb.raster_layer.workdir import WorkdirMixin 4 | 5 | 6 | class RasterMosaicComponent(Component, WorkdirMixin): 7 | def setup_pyramid(self, config): 8 | from . import api, view # noqa: F401 9 | 10 | api.setup_pyramid(self, config) 11 | -------------------------------------------------------------------------------- /nextgisweb/raster_mosaic/nodepkg/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nextgisweb/raster-mosaic", 3 | "version": "0.0.0", 4 | "type": "module" 5 | } 6 | -------------------------------------------------------------------------------- /nextgisweb/raster_mosaic/nodepkg/resource-widget/Widget.less: -------------------------------------------------------------------------------- 1 | .ngw-raster-mosaic-resource-widget { 2 | display: flex; 3 | flex-direction: column; 4 | height: 100%; 5 | 6 | > .ngw-gui-edi-table { 7 | flex-grow: 1; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /nextgisweb/raster_mosaic/nodepkg/resource-widget/index.ts: -------------------------------------------------------------------------------- 1 | export { Widget as widget } from "./Widget"; 2 | export { Store as store } from "./Store"; 3 | -------------------------------------------------------------------------------- /nextgisweb/raster_mosaic/view.py: -------------------------------------------------------------------------------- 1 | from nextgisweb.jsrealm import jsentry 2 | from nextgisweb.resource import Widget 3 | 4 | from .model import RasterMosaic 5 | 6 | 7 | class ItemWidget(Widget): 8 | resource = RasterMosaic 9 | operation = ("create", "update") 10 | amdmod = jsentry("@nextgisweb/raster-mosaic/resource-widget") 11 | -------------------------------------------------------------------------------- /nextgisweb/raster_style/__init__.py: -------------------------------------------------------------------------------- 1 | from .component import RasterStyleComponent 2 | from .model import RasterStyle 3 | -------------------------------------------------------------------------------- /nextgisweb/raster_style/component.py: -------------------------------------------------------------------------------- 1 | from nextgisweb.env import Component 2 | 3 | 4 | class RasterStyleComponent(Component): 5 | pass 6 | -------------------------------------------------------------------------------- /nextgisweb/raster_style/iconRaster.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/raster_style/iconRaster.png -------------------------------------------------------------------------------- /nextgisweb/raster_style/locale/ru.po: -------------------------------------------------------------------------------- 1 | #: model.py:40 2 | msgid "Raster style" 3 | msgstr "Растровый стиль" 4 | -------------------------------------------------------------------------------- /nextgisweb/render/empty_256x256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/render/empty_256x256.png -------------------------------------------------------------------------------- /nextgisweb/render/migration/37e63b62-fix-enum.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "37e63b62", "parents": ["00000000"], 3 | "date": "2022-08-23T11:21:47", 4 | "message": "Fix enum" 5 | } ***/ 6 | 7 | ALTER TABLE resource_tile_cache DROP CONSTRAINT IF EXISTS resource_tile_cache_seed_status_check; 8 | ALTER TABLE resource_tile_cache ALTER COLUMN seed_status TYPE character varying(50); 9 | -------------------------------------------------------------------------------- /nextgisweb/render/migration/37e63b62-fix-enum.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "37e63b62" } ***/ 2 | 3 | -- This migration supplements old migration 4 | -------------------------------------------------------------------------------- /nextgisweb/render/nodepkg/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nextgisweb/render", 3 | "version": "0.0.0", 4 | "type": "module" 5 | } 6 | -------------------------------------------------------------------------------- /nextgisweb/render/nodepkg/resource-section/legend-symbols/index.ts: -------------------------------------------------------------------------------- 1 | export { ResourceSectionLegendSymbols as default } from "./ResourceSectionLegendSymbols"; 2 | -------------------------------------------------------------------------------- /nextgisweb/render/nodepkg/tile-cache-widget/index.ts: -------------------------------------------------------------------------------- 1 | export { TileCacheStore as store } from "./TileCacheStore"; 2 | export { TileCacheWidget as widget } from "./TileCacheWidget"; 3 | -------------------------------------------------------------------------------- /nextgisweb/render/test/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/render/test/__init__.py -------------------------------------------------------------------------------- /nextgisweb/render/test/test_util.py: -------------------------------------------------------------------------------- 1 | from ..util import scale_range_intersection 2 | 3 | 4 | def test_scale_range_intersection(): 5 | sri = scale_range_intersection 6 | assert sri((None, None), (None, None)) == (None, None) 7 | assert sri((100_000, None), (None, 10_000)) == (100_000, 10_000) 8 | assert sri((100_000, 10_000), (200_000, 20_000)) == (100_000, 20_000) 9 | -------------------------------------------------------------------------------- /nextgisweb/resmeta/__init__.py: -------------------------------------------------------------------------------- 1 | from .component import ResMetaComponent 2 | from .model import ResourceMetadataItem 3 | -------------------------------------------------------------------------------- /nextgisweb/resmeta/component.py: -------------------------------------------------------------------------------- 1 | from nextgisweb.env import Component, require 2 | 3 | 4 | class ResMetaComponent(Component): 5 | @require("resource") 6 | def setup_pyramid(self, config): 7 | from . import view 8 | 9 | view.setup_pyramid(self, config) 10 | -------------------------------------------------------------------------------- /nextgisweb/resmeta/migration/35cf5bc3-bool-value-column.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "35cf5bc3", "parents": ["00000000"], 3 | "date": "2022-05-11T03:16:39", 4 | "message": "Bool value column" 5 | } ***/ 6 | 7 | ALTER TABLE resmeta_item ADD COLUMN vboolean boolean; 8 | -------------------------------------------------------------------------------- /nextgisweb/resmeta/migration/35cf5bc3-bool-value-column.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "35cf5bc3" } ***/ 2 | 3 | ALTER TABLE resmeta_item DROP COLUMN vboolean; 4 | -------------------------------------------------------------------------------- /nextgisweb/resmeta/nodepkg/editor/index.ts: -------------------------------------------------------------------------------- 1 | export { EditorStore as store } from "./EditorStore"; 2 | export { EditorWidget as widget } from "./EditorWidget"; 3 | -------------------------------------------------------------------------------- /nextgisweb/resmeta/nodepkg/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nextgisweb/resmeta", 3 | "version": "0.0.0", 4 | "type": "module" 5 | } 6 | -------------------------------------------------------------------------------- /nextgisweb/resmeta/nodepkg/resource-section/index.ts: -------------------------------------------------------------------------------- 1 | export { ResmetaResourceSection as default } from "./ResmetaResourceSection"; 2 | -------------------------------------------------------------------------------- /nextgisweb/resmeta/test/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/resmeta/test/__init__.py -------------------------------------------------------------------------------- /nextgisweb/resource/migration/45820e29-add-resource_favorite-table.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "45820e29" } ***/ 2 | 3 | DROP TABLE resource_favorite; -------------------------------------------------------------------------------- /nextgisweb/resource/migration/45960792-remove-metadata-scope.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "45960792", "parents": ["45820e29"], 3 | "date": "2024-07-06T22:53:04", 4 | "message": "Remove metadata scope" 5 | } ***/ 6 | 7 | DELETE FROM resource_acl_rule WHERE scope = 'metadata'; 8 | -------------------------------------------------------------------------------- /nextgisweb/resource/migration/45960792-remove-metadata-scope.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "45960792" } ***/ 2 | 3 | SELECT 1; 4 | -------------------------------------------------------------------------------- /nextgisweb/resource/migration/45f6d7cf-remove-datasctruct-permissions.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "45f6d7cf", "parents": ["45960792"], 3 | "date": "2024-07-25T20:07:48", 4 | "message": "Remove datasctruct permissions" 5 | } ***/ 6 | 7 | DELETE FROM resource_acl_rule WHERE scope = 'datastruct'; 8 | -------------------------------------------------------------------------------- /nextgisweb/resource/migration/45f6d7cf-remove-datasctruct-permissions.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "45f6d7cf" } ***/ 2 | 3 | SELECT 1; 4 | -------------------------------------------------------------------------------- /nextgisweb/resource/nodepkg/blueprint.ts: -------------------------------------------------------------------------------- 1 | import { route } from "@nextgisweb/pyramid/api"; 2 | 3 | const data = await route("resource.blueprint").get({ cache: true }); 4 | 5 | export const { resources, scopes, categories } = data; 6 | -------------------------------------------------------------------------------- /nextgisweb/resource/nodepkg/client-settings.ts: -------------------------------------------------------------------------------- 1 | import { fetchSettings } from "@nextgisweb/pyramid/settings"; 2 | import type { ResourceExport } from "@nextgisweb/resource/type/api"; 3 | 4 | export interface ResourceSettings { 5 | resource_export: ResourceExport; 6 | } 7 | 8 | export default await fetchSettings(COMP_ID); 9 | -------------------------------------------------------------------------------- /nextgisweb/resource/nodepkg/component/index.ts: -------------------------------------------------------------------------------- 1 | export { 2 | ResourceSelect, 3 | ResourceSelectMultiple, 4 | ResourceSelectRef, 5 | } from "./resource-select"; 6 | -------------------------------------------------------------------------------- /nextgisweb/resource/nodepkg/component/resource-picker/ResourcePickerChildren.less: -------------------------------------------------------------------------------- 1 | .ngw-resource-component-resource-picker-children { 2 | table > tbody > tr.ant-table-row > td.ant-table-cell.actions { 3 | vertical-align: middle; 4 | padding: 0; 5 | padding-inline-end: 12px; 6 | width: 0; 7 | white-space: nowrap; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /nextgisweb/resource/nodepkg/component/resource-picker/ResourcePickerModal.less: -------------------------------------------------------------------------------- 1 | .resource-picker-modal { 2 | .ant-modal-content { 3 | padding: 0; 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /nextgisweb/resource/nodepkg/component/resource-picker/hook/index.ts: -------------------------------------------------------------------------------- 1 | export { useFocusTablePicker } from "./useFocusTablePicker"; 2 | export { useResourcePicker } from "./useResourcePicker"; 3 | -------------------------------------------------------------------------------- /nextgisweb/resource/nodepkg/component/resource-picker/index.ts: -------------------------------------------------------------------------------- 1 | export { ResourcePickerStore } from "./store/ResourcePickerStore"; 2 | export { showResourcePicker } from "./showResourcePicker"; 3 | export { pickToFocusTable } from "./pickToFocusTable"; 4 | export * from "./hook"; 5 | -------------------------------------------------------------------------------- /nextgisweb/resource/nodepkg/component/resource-select/index.ts: -------------------------------------------------------------------------------- 1 | export { ResourceSelect } from "./ResourceSelect"; 2 | export { ResourceSelectMultiple } from "./ResourceSelectMultiple"; 3 | export { ResourceSelectRef } from "./ResourceSelectRef"; 4 | -------------------------------------------------------------------------------- /nextgisweb/resource/nodepkg/composite/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./CompositeWidget"; 2 | export type { CompositeStore } from "./CompositeStore"; 3 | -------------------------------------------------------------------------------- /nextgisweb/resource/nodepkg/delete-page/index.ts: -------------------------------------------------------------------------------- 1 | import { DeletePage } from "./DeletePage"; 2 | 3 | export default DeletePage; 4 | -------------------------------------------------------------------------------- /nextgisweb/resource/nodepkg/description-editor/index.ts: -------------------------------------------------------------------------------- 1 | import { DescriptionEditorStore } from "./DescriptionEditorStore"; 2 | import { DescriptionEditorWidget } from "./DescriptionEditorWidget"; 3 | 4 | export { DescriptionEditorStore as store, DescriptionEditorWidget as widget }; 5 | -------------------------------------------------------------------------------- /nextgisweb/resource/nodepkg/editor-widget/index.ts: -------------------------------------------------------------------------------- 1 | export { EditorWidget as widget } from "./EditorWidget"; 2 | export { EditorStore as store } from "./EditorStore"; 3 | -------------------------------------------------------------------------------- /nextgisweb/resource/nodepkg/effective-permissions/index.ts: -------------------------------------------------------------------------------- 1 | import { EffectivePermissions } from "./EffectivePermissions"; 2 | 3 | export default EffectivePermissions; 4 | -------------------------------------------------------------------------------- /nextgisweb/resource/nodepkg/effective-permissions/type.ts: -------------------------------------------------------------------------------- 1 | export interface PermissionDataItem { 2 | key: string; 3 | label: string; 4 | value: boolean; 5 | } 6 | 7 | export interface PermissionData { 8 | key: string; 9 | label: string; 10 | items: PermissionDataItem[]; 11 | } 12 | -------------------------------------------------------------------------------- /nextgisweb/resource/nodepkg/export-settings/index.ts: -------------------------------------------------------------------------------- 1 | import { ExportSettings } from "./ExportSettings"; 2 | 3 | export default ExportSettings; 4 | -------------------------------------------------------------------------------- /nextgisweb/resource/nodepkg/global.d.ts: -------------------------------------------------------------------------------- 1 | declare module "@nextgisweb/pyramid/type/config" { 2 | export interface NgwConfig extends NgwConfig { 3 | resourceFavorite: { 4 | identity: string; 5 | resource: { id: number }; 6 | current: number | null; 7 | } | null; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /nextgisweb/resource/nodepkg/json-view/index.ts: -------------------------------------------------------------------------------- 1 | import { JsonView } from "./JsonView"; 2 | 3 | export default JsonView; 4 | -------------------------------------------------------------------------------- /nextgisweb/resource/nodepkg/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nextgisweb/resource", 3 | "version": "0.0.0", 4 | "type": "module" 5 | } 6 | -------------------------------------------------------------------------------- /nextgisweb/resource/nodepkg/page/show/index.ts: -------------------------------------------------------------------------------- 1 | export { ResourcePageShow as default } from "./ResourcePageShow"; 2 | -------------------------------------------------------------------------------- /nextgisweb/resource/nodepkg/permissions-widget/index.tsx: -------------------------------------------------------------------------------- 1 | export { PermissionsWidget as widget } from "./PermissionsWidget"; 2 | export { PermissionsStore as store } from "./PermissionsStore"; 3 | -------------------------------------------------------------------------------- /nextgisweb/resource/nodepkg/resource-section/button/ResourceSectionButton.less: -------------------------------------------------------------------------------- 1 | .ngw-resource-section-button { 2 | display: flex; 3 | flex-direction: row; 4 | justify-content: space-between; 5 | align-items: center; 6 | gap: 12px; 7 | } 8 | -------------------------------------------------------------------------------- /nextgisweb/resource/nodepkg/resource-section/button/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./ResourceSectionButton"; 2 | -------------------------------------------------------------------------------- /nextgisweb/resource/nodepkg/resource-section/children/component/PreviewModal.less: -------------------------------------------------------------------------------- 1 | .map-preview-modal { 2 | width: fit-content; 3 | 4 | .ant-modal-content { 5 | padding: 0 !important; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /nextgisweb/resource/nodepkg/resource-section/children/index.ts: -------------------------------------------------------------------------------- 1 | export { ResourceSectionChildren as default } from "./ResourceSectionChildren"; 2 | -------------------------------------------------------------------------------- /nextgisweb/resource/nodepkg/resource-section/children/util/isDeleteAction.ts: -------------------------------------------------------------------------------- 1 | import type { ChildrenResourceAction } from "../type"; 2 | 3 | export function isDeleteAction(action: ChildrenResourceAction) { 4 | const { key } = action; 5 | return Array.isArray(key) && key[1] === "20-delete"; 6 | } 7 | -------------------------------------------------------------------------------- /nextgisweb/resource/nodepkg/resource-section/children/util/isPreviewAction.ts: -------------------------------------------------------------------------------- 1 | import type { ChildrenResourceAction } from "../type"; 2 | 3 | export function isPreviewAction(action: ChildrenResourceAction) { 4 | const { key } = action; 5 | return Array.isArray(key) && key[1] === "preview"; 6 | } 7 | -------------------------------------------------------------------------------- /nextgisweb/resource/nodepkg/resource-section/description/index.ts: -------------------------------------------------------------------------------- 1 | export { ResourceSectionDescription as default } from "./ResourceSectionDescription"; 2 | -------------------------------------------------------------------------------- /nextgisweb/resource/nodepkg/resource-section/external-access/index.ts: -------------------------------------------------------------------------------- 1 | export { ResourceSectionExternalAccess as default } from "./ResourceSectionExternalAccess"; 2 | -------------------------------------------------------------------------------- /nextgisweb/resource/nodepkg/resource-section/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./button"; 2 | export * from "./type"; 3 | -------------------------------------------------------------------------------- /nextgisweb/resource/nodepkg/resource-section/main/index.ts: -------------------------------------------------------------------------------- 1 | export { ResourceSectionMain as default } from "./ResourceSectionMain"; 2 | -------------------------------------------------------------------------------- /nextgisweb/resource/nodepkg/resources-filter/ResourcesFilter.less: -------------------------------------------------------------------------------- 1 | .ngw-resource-resource-filter-dropdown { 2 | .title { 3 | margin: 0; 4 | padding: 0 0 0 4px; 5 | width: 240px; 6 | overflow: hidden; 7 | text-overflow: ellipsis; 8 | white-space: nowrap; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /nextgisweb/resource/nodepkg/resources-filter/index.ts: -------------------------------------------------------------------------------- 1 | import { ResourcesFilter } from "./ResourcesFilter"; 2 | 3 | export type { ResourcesFilterPropsOnChange } from "./ResourcesFilter"; 4 | 5 | export default ResourcesFilter; 6 | -------------------------------------------------------------------------------- /nextgisweb/resource/nodepkg/type/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./EditorStore"; 2 | export * from "./EditorWidget"; 3 | -------------------------------------------------------------------------------- /nextgisweb/sentry/__init__.py: -------------------------------------------------------------------------------- 1 | from .component import SentryComponent 2 | -------------------------------------------------------------------------------- /nextgisweb/sentry/nodepkg/global.d.ts: -------------------------------------------------------------------------------- 1 | interface Window { 2 | // eslint-disable-next-line @typescript-eslint/consistent-type-imports 3 | ngwSentry?: import("@sentry/browser").BrowserClient | undefined; 4 | } 5 | -------------------------------------------------------------------------------- /nextgisweb/sentry/nodepkg/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nextgisweb/sentry", 3 | "version": "0.0.0", 4 | "type": "module", 5 | "dependencies": { 6 | "@sentry/browser": "~9.10.1" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /nextgisweb/sentry/view.py: -------------------------------------------------------------------------------- 1 | from nextgisweb.jsrealm import jsentry 2 | 3 | INIT_JSENTRY = jsentry("@nextgisweb/sentry/init") 4 | -------------------------------------------------------------------------------- /nextgisweb/sld/__init__.py: -------------------------------------------------------------------------------- 1 | from .component import SLDComponent 2 | from .model import SLD 3 | -------------------------------------------------------------------------------- /nextgisweb/sld/nodepkg/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nextgisweb/sld", 3 | "version": "0.0.0", 4 | "type": "module", 5 | "dependencies": { 6 | "@types/color": "^3.0.3", 7 | "geostyler-style": "^7.3.1", 8 | "geostyler-openlayers-parser": "^3.2.0", 9 | "color": "^4.2.3" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /nextgisweb/sld/nodepkg/style-editor/component/LinePatternPresetView.css: -------------------------------------------------------------------------------- 1 | .dash-sample-wrapper > .gs-symbolizer-olrenderer { 2 | border: none; 3 | width: 60px; 4 | height: 20px; 5 | } 6 | 7 | .line-preset-wrapper { 8 | display: flex; 9 | align-items: center; 10 | gap: 6px; 11 | } 12 | -------------------------------------------------------------------------------- /nextgisweb/sld/nodepkg/style-editor/component/TypeSelect/index.ts: -------------------------------------------------------------------------------- 1 | export { TypeSelect } from "./TypeSelect"; 2 | -------------------------------------------------------------------------------- /nextgisweb/sld/nodepkg/style-editor/index.ts: -------------------------------------------------------------------------------- 1 | export { StyleEditor } from "./StyleEditor"; 2 | -------------------------------------------------------------------------------- /nextgisweb/sld/nodepkg/style-editor/type/Style.ts: -------------------------------------------------------------------------------- 1 | import type { Rule, Style } from "@nextgisweb/sld/type/api"; 2 | 3 | export type Symbolizer = Rule["symbolizers"][0]; 4 | 5 | export type SymbolizerType = Exclude; 6 | 7 | export interface SLD { 8 | id: number; 9 | value: Style; 10 | } 11 | -------------------------------------------------------------------------------- /nextgisweb/sld/nodepkg/style-editor/type/index.ts: -------------------------------------------------------------------------------- 1 | import type { Symbolizer } from "geostyler-style"; 2 | 3 | export interface EditorProps { 4 | value: V; 5 | onChange?: (val: V) => void; 6 | } 7 | -------------------------------------------------------------------------------- /nextgisweb/sld/test/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/sld/test/__init__.py -------------------------------------------------------------------------------- /nextgisweb/social/__init__.py: -------------------------------------------------------------------------------- 1 | from .component import SocialComponent 2 | -------------------------------------------------------------------------------- /nextgisweb/social/component.py: -------------------------------------------------------------------------------- 1 | from nextgisweb.env import Component, require 2 | 3 | 4 | class SocialComponent(Component): 5 | @require("resource") 6 | def setup_pyramid(self, config): 7 | from . import api, view # noqa: F401 8 | 9 | api.setup_pyramid(self, config) 10 | -------------------------------------------------------------------------------- /nextgisweb/social/nodepkg/editor-widget/EditorWidget.less: -------------------------------------------------------------------------------- 1 | .ngw-social-editor-widget { 2 | padding: 1em; 3 | 4 | textarea { 5 | margin-top: 1em; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /nextgisweb/social/nodepkg/editor-widget/index.ts: -------------------------------------------------------------------------------- 1 | export { EditorStore as store } from "./EditorStore"; 2 | export { EditorWidget as widget } from "./EditorWidget"; 3 | -------------------------------------------------------------------------------- /nextgisweb/social/nodepkg/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nextgisweb/social", 3 | "version": "0.0.0", 4 | "type": "module" 5 | } 6 | -------------------------------------------------------------------------------- /nextgisweb/spatial_ref_sys/__init__.py: -------------------------------------------------------------------------------- 1 | from .component import SpatialRefSysComponent 2 | from .model import SRS, WKT_EPSG_3857, WKT_EPSG_4326, SRSMixin 3 | -------------------------------------------------------------------------------- /nextgisweb/spatial_ref_sys/migration/2c1c1918-add-catalog-id.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "2c1c1918", "parents": ["00000000"], 3 | "date": "2021-01-11T17:32:41", 4 | "message": "Add catalog id" 5 | } ***/ 6 | 7 | ALTER TABLE srs ADD COLUMN catalog_id integer; 8 | ALTER TABLE srs ADD CONSTRAINT srs_catalog_id_key UNIQUE (catalog_id); 9 | -------------------------------------------------------------------------------- /nextgisweb/spatial_ref_sys/migration/2c1c1918-add-catalog-id.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "2c1c1918" } ***/ 2 | 3 | ALTER TABLE public.srs DROP CONSTRAINT srs_catalog_id_key; 4 | ALTER TABLE public.srs DROP COLUMN catalog_id; 5 | -------------------------------------------------------------------------------- /nextgisweb/spatial_ref_sys/migration/33b8836e-fix-auth_name-for-epsg-4326.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "33b8836e", "parents": ["2c1c1918"], 3 | "date": "2022-01-26T19:19:31", 4 | "message": "Fix auth_name for EPSG:4326" 5 | } ***/ 6 | 7 | UPDATE srs SET auth_name = 'EPSG' WHERE id = 4326; 8 | -------------------------------------------------------------------------------- /nextgisweb/spatial_ref_sys/migration/33b8836e-fix-auth_name-for-epsg-4326.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "33b8836e" } ***/ 2 | 3 | -------------------------------------------------------------------------------- /nextgisweb/spatial_ref_sys/migration/371c894c-allow-auth-columns-for-local-srs.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "371c894c" } ***/ 2 | 3 | ALTER TABLE srs DROP CONSTRAINT IF EXISTS srs_id_auth_check; 4 | ALTER TABLE srs 5 | ADD CONSTRAINT srs_id_auth_check 6 | CHECK (auth_name IS NULL AND auth_srid IS NULL OR id < 990001); 7 | -------------------------------------------------------------------------------- /nextgisweb/spatial_ref_sys/nodepkg/catalog-browse/index.ts: -------------------------------------------------------------------------------- 1 | import { CatalogBrowse } from "./CatalogBrowse"; 2 | 3 | export default CatalogBrowse; 4 | -------------------------------------------------------------------------------- /nextgisweb/spatial_ref_sys/nodepkg/catalog-import/index.ts: -------------------------------------------------------------------------------- 1 | import { CatalogImport } from "./CatalogImport"; 2 | 3 | export default CatalogImport; 4 | -------------------------------------------------------------------------------- /nextgisweb/spatial_ref_sys/nodepkg/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nextgisweb/spatial-ref-sys", 3 | "version": "0.0.0", 4 | "type": "module", 5 | "dependencies": { 6 | "lodash-es": "^4.17.21" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /nextgisweb/spatial_ref_sys/nodepkg/srs-browse/index.ts: -------------------------------------------------------------------------------- 1 | import { SrsBrowse } from "./SrsBrowse"; 2 | 3 | export default SrsBrowse; 4 | -------------------------------------------------------------------------------- /nextgisweb/spatial_ref_sys/nodepkg/srs-select/index.ts: -------------------------------------------------------------------------------- 1 | import { SrsSelect } from "./SrsSelect"; 2 | 3 | export default SrsSelect; 4 | -------------------------------------------------------------------------------- /nextgisweb/spatial_ref_sys/nodepkg/srs-widget/index.ts: -------------------------------------------------------------------------------- 1 | import { SRSWidget } from "./SRSWidget"; 2 | 3 | export default SRSWidget; 4 | -------------------------------------------------------------------------------- /nextgisweb/spatial_ref_sys/nodepkg/srsMessages.ts: -------------------------------------------------------------------------------- 1 | import { gettext } from "@nextgisweb/pyramid/i18n"; 2 | 3 | export default function getMessages() { 4 | return { 5 | deleteConfirm: gettext("Delete SRS?"), 6 | deleteSuccess: gettext("SRS deleted"), 7 | }; 8 | } 9 | -------------------------------------------------------------------------------- /nextgisweb/spatial_ref_sys/nodepkg/srsModel.ts: -------------------------------------------------------------------------------- 1 | import type { Model } from "@nextgisweb/gui/model-browse/ModelBrowse"; 2 | 3 | export const model = "spatial_ref_sys"; 4 | 5 | export const modelObj: Model = { 6 | item: "spatial_ref_sys.item", 7 | collection: "spatial_ref_sys.collection", 8 | browse: "srs.browse", 9 | edit: "srs.edit", 10 | create: "srs.create", 11 | }; 12 | -------------------------------------------------------------------------------- /nextgisweb/spatial_ref_sys/test/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/spatial_ref_sys/test/__init__.py -------------------------------------------------------------------------------- /nextgisweb/static/css/.gitignore: -------------------------------------------------------------------------------- 1 | /include.less -------------------------------------------------------------------------------- /nextgisweb/static/css/blocks/_list.less: -------------------------------------------------------------------------------- 1 | .list { 2 | background-color: #fff; 3 | padding: 8px 0; 4 | font-size: 16px; 5 | list-style-type: none; 6 | } 7 | -------------------------------------------------------------------------------- /nextgisweb/static/css/override-antd.less: -------------------------------------------------------------------------------- 1 | // Ghost buttons with the href attribute are rendered as , so 2 | // remove text-decoration for such buttons. 3 | a.ant-btn { 4 | text-decoration: none; 5 | } 6 | -------------------------------------------------------------------------------- /nextgisweb/svg_marker_library/__init__.py: -------------------------------------------------------------------------------- 1 | from .component import SVGMarkerLibraryComponent 2 | from .model import SVGMarker, SVGMarkerLibrary 3 | -------------------------------------------------------------------------------- /nextgisweb/svg_marker_library/migration/2a69bb70-cleanup-marker-library.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "2a69bb70" } ***/ 2 | 3 | SELECT 'NOP'; 4 | -------------------------------------------------------------------------------- /nextgisweb/svg_marker_library/nodepkg/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nextgisweb/svg-marker-library", 3 | "version": "0.0.0", 4 | "type": "module" 5 | } 6 | -------------------------------------------------------------------------------- /nextgisweb/svg_marker_library/nodepkg/resource-section/index.ts: -------------------------------------------------------------------------------- 1 | export { SvgMarkerLibraryResourceSection as default } from "./SvgMarkerLibraryResourceSection"; 2 | -------------------------------------------------------------------------------- /nextgisweb/svg_marker_library/nodepkg/resource-widget/Widget.less: -------------------------------------------------------------------------------- 1 | .ngw-svg-marker-library-resource-widget { 2 | display: flex; 3 | flex-direction: column; 4 | height: 100%; 5 | 6 | > .archive { 7 | padding: 1em; 8 | line-height: 32px; 9 | } 10 | 11 | > .ngw-gui-edi-table { 12 | flex-grow: 1; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /nextgisweb/svg_marker_library/nodepkg/resource-widget/index.ts: -------------------------------------------------------------------------------- 1 | export { Widget as widget } from "./Widget"; 2 | export { Store as store } from "./Store"; 3 | -------------------------------------------------------------------------------- /nextgisweb/svg_marker_library/preset/README.md: -------------------------------------------------------------------------------- 1 | Sample [scour](https://github.com/scour-project/scour) params: 2 | 3 | ```bash 4 | $ scour \ 5 | --remove-descriptive-elements --indent=tab --enable-comment-stripping \ 6 | --strip-xml-space --enable-id-stripping --shorten-ids \ 7 | infile outfile 8 | ``` 9 | -------------------------------------------------------------------------------- /nextgisweb/svg_marker_library/preset/landuse/cemetery.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /nextgisweb/svg_marker_library/preset/territory_plan/ElectricPowerStation1.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /nextgisweb/svg_marker_library/preset/territory_plan/ElectricPowerStation3.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /nextgisweb/svg_marker_library/preset/territory_plan/ElectricTransformer1.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /nextgisweb/svg_marker_library/preset/territory_plan/ElectricTransformer10.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /nextgisweb/svg_marker_library/preset/territory_plan/ElectricTransformer11.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /nextgisweb/svg_marker_library/preset/territory_plan/ElectricTransformer12.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /nextgisweb/svg_marker_library/preset/territory_plan/ElectricTransformer13.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /nextgisweb/svg_marker_library/preset/territory_plan/ElectricTransformer14.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /nextgisweb/svg_marker_library/preset/territory_plan/ElectricTransformer15.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /nextgisweb/svg_marker_library/preset/territory_plan/ElectricTransformer16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /nextgisweb/svg_marker_library/preset/territory_plan/ElectricTransformer2.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /nextgisweb/svg_marker_library/test/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/svg_marker_library/test/__init__.py -------------------------------------------------------------------------------- /nextgisweb/svg_marker_library/test/data/folder1/marker1.svg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/svg_marker_library/test/data/folder1/marker1.svg -------------------------------------------------------------------------------- /nextgisweb/svg_marker_library/test/data/folder1/marker2.svg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/svg_marker_library/test/data/folder1/marker2.svg -------------------------------------------------------------------------------- /nextgisweb/svg_marker_library/test/data/folder1/marker3.svg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/svg_marker_library/test/data/folder1/marker3.svg -------------------------------------------------------------------------------- /nextgisweb/svg_marker_library/test/data/folder2/marker1.svg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/svg_marker_library/test/data/folder2/marker1.svg -------------------------------------------------------------------------------- /nextgisweb/svg_marker_library/test/data/folder2/marker2.svg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/svg_marker_library/test/data/folder2/marker2.svg -------------------------------------------------------------------------------- /nextgisweb/tileset/__init__.py: -------------------------------------------------------------------------------- 1 | from .component import TilesetComponent 2 | from .model import Tileset 3 | -------------------------------------------------------------------------------- /nextgisweb/tileset/nodepkg/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nextgisweb/tileset", 3 | "version": "0.0.0", 4 | "type": "module" 5 | } 6 | -------------------------------------------------------------------------------- /nextgisweb/tileset/nodepkg/resource-widget/Widget.less: -------------------------------------------------------------------------------- 1 | .ngw-tileset-resource-widget { 2 | padding: 1em; 3 | } 4 | -------------------------------------------------------------------------------- /nextgisweb/tileset/nodepkg/resource-widget/index.ts: -------------------------------------------------------------------------------- 1 | export { Widget as widget } from "./Widget"; 2 | export { Store as store } from "./Store"; 3 | -------------------------------------------------------------------------------- /nextgisweb/tileset/view.py: -------------------------------------------------------------------------------- 1 | from nextgisweb.jsrealm import jsentry 2 | from nextgisweb.resource import Widget 3 | 4 | from .model import Tileset 5 | 6 | 7 | class TilesetWidget(Widget): 8 | resource = Tileset 9 | operation = ("create", "update") 10 | amdmod = jsentry("@nextgisweb/tileset/resource-widget") 11 | 12 | 13 | def setup_pyramid(comp, config): 14 | pass 15 | -------------------------------------------------------------------------------- /nextgisweb/tmsclient/__init__.py: -------------------------------------------------------------------------------- 1 | from .component import TMSClientComponent 2 | from .model import SCHEME, Connection, Layer 3 | -------------------------------------------------------------------------------- /nextgisweb/tmsclient/migration/2b6f2dd2-add-insecure-column.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "2b6f2dd2", "parents": ["00000000"], 3 | "date": "2020-12-09T00:00:00", 4 | "message": "Add insecure column" 5 | } ***/ 6 | 7 | ALTER TABLE tmsclient_connection 8 | ADD COLUMN insecure boolean NOT NULL DEFAULT false; -------------------------------------------------------------------------------- /nextgisweb/tmsclient/migration/2b6f2dd2-add-insecure-column.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "2b6f2dd2" } ***/ 2 | 3 | ALTER TABLE tmsclient_connection 4 | DROP COLUMN insecure; -------------------------------------------------------------------------------- /nextgisweb/tmsclient/migration/2e9a67e5-add-auth-columns.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "2e9a67e5", "parents": ["2b6f2dd2"], 3 | "date": "2021-05-16T05:52:21", 4 | "message": "add-auth-columns" 5 | } ***/ 6 | 7 | ALTER TABLE tmsclient_connection ADD COLUMN username character varying; 8 | ALTER TABLE tmsclient_connection ADD COLUMN password character varying; 9 | -------------------------------------------------------------------------------- /nextgisweb/tmsclient/migration/2e9a67e5-add-auth-columns.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "2e9a67e5" } ***/ 2 | 3 | ALTER TABLE tmsclient_connection DROP COLUMN username; 4 | ALTER TABLE tmsclient_connection DROP COLUMN password; 5 | -------------------------------------------------------------------------------- /nextgisweb/tmsclient/migration/37e63d4b-fix-enum.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "37e63d4b" } ***/ 2 | 3 | -- This migration supplements old migration 4 | -------------------------------------------------------------------------------- /nextgisweb/tmsclient/nodepkg/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nextgisweb/tmsclient", 3 | "version": "0.0.0", 4 | "type": "module" 5 | } 6 | -------------------------------------------------------------------------------- /nextgisweb/tmsclient/nodepkg/tmsclient-connection/index.ts: -------------------------------------------------------------------------------- 1 | export { TmsClientConnectionStore as store } from "./TmsClientConnectionStore"; 2 | export { TmsClientConnectionWidget as widget } from "./TmsClientConnectionWidget"; 3 | -------------------------------------------------------------------------------- /nextgisweb/tmsclient/nodepkg/tmsclient-layer/index.ts: -------------------------------------------------------------------------------- 1 | export { TmsClientLayerStore as store } from "./TmsClientLayerStore"; 2 | export { TmsClientLayerWidget as widget } from "./TmsClientLayerWidget"; 3 | -------------------------------------------------------------------------------- /nextgisweb/tmsclient/test/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/tmsclient/test/__init__.py -------------------------------------------------------------------------------- /nextgisweb/vector_layer/__init__.py: -------------------------------------------------------------------------------- 1 | from .component import VectorLayerComponent 2 | from .model import VectorLayer, VectorLayerField, estimate_vector_layer_data 3 | -------------------------------------------------------------------------------- /nextgisweb/vector_layer/kind_of_data.py: -------------------------------------------------------------------------------- 1 | from nextgisweb.env import gettext 2 | 3 | from nextgisweb.core import KindOfData 4 | 5 | 6 | class VectorLayerData(KindOfData): 7 | identity = "vector_layer" 8 | display_name = gettext("Vector layer features") 9 | -------------------------------------------------------------------------------- /nextgisweb/vector_layer/migration/323570bd-geometry-type-length.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "323570bd", "parents": ["00000000"], 3 | "date": "2021-11-12T07:11:19", 4 | "message": "Geometry type length" 5 | } ***/ 6 | 7 | ALTER TABLE vector_layer ALTER COLUMN geometry_type TYPE character varying(16); 8 | -------------------------------------------------------------------------------- /nextgisweb/vector_layer/migration/323570bd-geometry-type-length.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "323570bd" } ***/ 2 | 3 | -- This migration supplements old migration 4 | -------------------------------------------------------------------------------- /nextgisweb/vector_layer/migration/37e63f22-fix-enum.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "37e63f22", "parents": ["323570bd"], 3 | "date": "2022-08-23T11:25:54", 4 | "message": "Fix enum" 5 | } ***/ 6 | 7 | ALTER TABLE vector_layer DROP CONSTRAINT IF EXISTS vector_layer_geometry_type_check; 8 | ALTER TABLE vector_layer ALTER COLUMN geometry_type TYPE character varying(50); 9 | -------------------------------------------------------------------------------- /nextgisweb/vector_layer/migration/37e63f22-fix-enum.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "37e63f22" } ***/ 2 | 3 | -- This migration supplements old migration 4 | -------------------------------------------------------------------------------- /nextgisweb/vector_layer/migration/46005e79-fix-sequence-ownership.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "46005e79" } ***/ 2 | 3 | SELECT 1; 4 | -------------------------------------------------------------------------------- /nextgisweb/vector_layer/nodepkg/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nextgisweb/vector-layer", 3 | "version": "0.0.0", 4 | "type": "module" 5 | } 6 | -------------------------------------------------------------------------------- /nextgisweb/vector_layer/nodepkg/resource-widget/index.ts: -------------------------------------------------------------------------------- 1 | export { Store as store } from "./Store"; 2 | export { Widget as widget } from "./Widget"; 3 | -------------------------------------------------------------------------------- /nextgisweb/vector_layer/test/data/errors/corrupted.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/vector_layer/test/data/errors/corrupted.zip -------------------------------------------------------------------------------- /nextgisweb/vector_layer/test/data/errors/empty.geojson: -------------------------------------------------------------------------------- 1 | { 2 | "type": "FeatureCollection", 3 | "name": "layer", 4 | "crs": { 5 | "type": "name", 6 | "properties": { 7 | "name": "urn:ogc:def:crs:OGC:1.3:CRS84" 8 | } 9 | }, 10 | "features": [ 11 | 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /nextgisweb/vector_layer/test/data/errors/pointm.csv: -------------------------------------------------------------------------------- 1 | WKT, VALUE 2 | POINT M (-1.00808524102513 -7.6777179007138 0), Foo 3 | POINT M (-60.9070958522917 32.1111061508624 0), Bar -------------------------------------------------------------------------------- /nextgisweb/vector_layer/test/data/errors/pointm.vrt: -------------------------------------------------------------------------------- 1 | 2 | 3 | pointm.csv 4 | 5 | wkbPointM 6 | WGS84 7 | 8 | 9 | -------------------------------------------------------------------------------- /nextgisweb/vector_layer/test/data/layer-lon-lat.csv: -------------------------------------------------------------------------------- 1 | lon,lat,int,real,date,time,datetime,string,unicode 2 | 1,2,-1,0.333333333333333,2001/01/01,23:59:59,2001/01/01 23:59:00,Foo bar,"Значимость этих проблем настолько очевидна, что реализация намеченных плановых заданий требуют определения и уточнения." 3 | -------------------------------------------------------------------------------- /nextgisweb/vector_layer/test/data/layer-lon-lat.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/vector_layer/test/data/layer-lon-lat.xlsx -------------------------------------------------------------------------------- /nextgisweb/vector_layer/test/data/layer_for_filter.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/vector_layer/test/data/layer_for_filter.zip -------------------------------------------------------------------------------- /nextgisweb/vector_layer/test/data/shapefile-point-utf8.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/vector_layer/test/data/shapefile-point-utf8.zip -------------------------------------------------------------------------------- /nextgisweb/vector_layer/test/data/shapefile-point-win1251.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/vector_layer/test/data/shapefile-point-win1251.zip -------------------------------------------------------------------------------- /nextgisweb/vector_layer/test/data/two-layers.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/vector_layer/test/data/two-layers.zip -------------------------------------------------------------------------------- /nextgisweb/vector_layer/test/ref_ddl/add_fields.v=false.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE ct ADD COLUMN fld_i INT, 2 | ADD COLUMN fld_d DATE; 3 | -------------------------------------------------------------------------------- /nextgisweb/vector_layer/test/ref_ddl/add_fields.v=true.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE ct ADD COLUMN fld_i INT, 2 | ADD COLUMN fld_d DATE; 3 | 4 | ALTER TABLE ht ADD COLUMN fld_i INT, 5 | ADD COLUMN fld_d DATE; 6 | -------------------------------------------------------------------------------- /nextgisweb/vector_layer/test/ref_ddl/convert_geom_column_type.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE ct ALTER COLUMN geom SET DATA TYPE GEOMETRY(MULTIPOINT, 3857) USING ST_Force2D(ST_Multi(geom)); 2 | -------------------------------------------------------------------------------- /nextgisweb/vector_layer/test/ref_ddl/create.v=false.sql: -------------------------------------------------------------------------------- 1 | CREATE SEQUENCE id_seqt START WITH 1 MINVALUE -2147483648; 2 | 3 | CREATE TABLE ct ( 4 | id INT NOT NULL, 5 | geom GEOMETRY(POINTZ, 3857), 6 | fld_i INT, 7 | fld_t TEXT, 8 | fld_d DATE, 9 | PRIMARY KEY (id) 10 | ); 11 | 12 | CREATE INDEX idx_ct_geom ON ct USING gist(geom); 13 | -------------------------------------------------------------------------------- /nextgisweb/vector_layer/test/ref_ddl/delete_fields.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE ct DROP COLUMN fld_i, DROP COLUMN fld_d; 2 | -------------------------------------------------------------------------------- /nextgisweb/vector_layer/test/ref_ddl/drop.v=false.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE ct; 2 | 3 | DROP SEQUENCE id_seqt; 4 | -------------------------------------------------------------------------------- /nextgisweb/vector_layer/test/ref_ddl/drop.v=true.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE ct DROP CONSTRAINT ct_id_fk; 2 | 3 | DROP TABLE ht; 4 | 5 | DROP TABLE et; 6 | 7 | DROP TABLE ct; 8 | 9 | DROP SEQUENCE id_seqt; 10 | -------------------------------------------------------------------------------- /nextgisweb/vector_layer/test/ref_ddl/versioning_disable.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE ct DROP CONSTRAINT ct_id_fk; 2 | 3 | DROP TABLE ht; 4 | 5 | DROP TABLE et; 6 | -------------------------------------------------------------------------------- /nextgisweb/vector_layer/test/ref_dml/delete.v=false.sql: -------------------------------------------------------------------------------- 1 | DELETE FROM ct 2 | WHERE 3 | ct.id = :id 4 | RETURNING ct.id; 5 | -------------------------------------------------------------------------------- /nextgisweb/vector_layer/test/ref_dml/initfill.sql: -------------------------------------------------------------------------------- 1 | INSERT INTO et ( 2 | fid, 3 | vid, 4 | vop 5 | ) 6 | SELECT 7 | ct.id, 8 | :vid AS vid, 9 | 'С' 10 | FROM ct; 11 | -------------------------------------------------------------------------------- /nextgisweb/vector_layer/test/ref_dml/insert.v=false.sql: -------------------------------------------------------------------------------- 1 | INSERT INTO ct ( 2 | id, 3 | geom, 4 | fld_i, 5 | fld_t, 6 | fld_d 7 | ) 8 | VALUES 9 | (nextval('id_seqt'), ST_GeomFromWKB(:geom, 3857), :fld_1, :fld_2, :fld_3) 10 | RETURNING ct.id; 11 | -------------------------------------------------------------------------------- /nextgisweb/vector_layer/test/ref_dml/update.v=false.wg=false.sql: -------------------------------------------------------------------------------- 1 | UPDATE ct SET fld_i = :fld_1, fld_t = :fld_2, fld_d = :fld_3 2 | WHERE 3 | ct.id = :id 4 | AND ( 5 | CAST(:fld_1 AS INT) IS DISTINCT FROM fld_i 6 | OR CAST(:fld_2 AS TEXT) IS DISTINCT FROM fld_t 7 | OR CAST(:fld_3 AS DATE) IS DISTINCT FROM fld_d 8 | ) 9 | RETURNING ct.id; 10 | -------------------------------------------------------------------------------- /nextgisweb/webmap/__init__.py: -------------------------------------------------------------------------------- 1 | from .adapter import WebMapAdapter 2 | from .component import WebMapComponent 3 | from .model import WebMap, WebMapItem, WebMapScope 4 | from .option import WebMapOption 5 | -------------------------------------------------------------------------------- /nextgisweb/webmap/migration/16969697-layer-draw-order.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "16969697", "parents": ["00000000"], 3 | "date": "2018-02-02T00:00:00", 4 | "message": "Layer draw order" 5 | } ***/ 6 | 7 | ALTER TABLE webmap 8 | ADD COLUMN draw_order_enabled boolean; 9 | 10 | ALTER TABLE webmap_item 11 | ADD COLUMN draw_order_position integer; -------------------------------------------------------------------------------- /nextgisweb/webmap/migration/16969697-layer-draw-order.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "16969697" } ***/ 2 | 3 | ALTER TABLE webmap DROP COLUMN draw_order_enabled; 4 | ALTER TABLE webmap_item DROP COLUMN draw_order_position; -------------------------------------------------------------------------------- /nextgisweb/webmap/migration/1ff5bf48-add-editable-column.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "1ff5bf48", "parents": ["16969697"], 3 | "date": "2019-05-16T00:00:00", 4 | "message": "Add editable column" 5 | } ***/ 6 | 7 | ALTER TABLE webmap 8 | ADD COLUMN editable boolean DEFAULT FALSE; 9 | -------------------------------------------------------------------------------- /nextgisweb/webmap/migration/1ff5bf48-add-editable-column.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "1ff5bf48" } ***/ 2 | 3 | ALTER TABLE webmap DROP COLUMN editable; -------------------------------------------------------------------------------- /nextgisweb/webmap/migration/20802903-add-annotations-columns.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "20802903" } ***/ 2 | 3 | ALTER TABLE webmap DROP COLUMN annotation_enabled; 4 | ALTER TABLE webmap DROP COLUMN annotation_default; -------------------------------------------------------------------------------- /nextgisweb/webmap/migration/2cee4e63-add-extent_constrained-column.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "2cee4e63", "parents": ["20802903"], 3 | "date": "2021-02-21T17:39:50", 4 | "message": "Add extent_constrained column" 5 | } ***/ 6 | 7 | ALTER TABLE public.webmap ADD COLUMN extent_constrained boolean; 8 | UPDATE public.webmap SET extent_constrained = False; 9 | -------------------------------------------------------------------------------- /nextgisweb/webmap/migration/2cee4e63-add-extent_constrained-column.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "2cee4e63" } ***/ 2 | 3 | ALTER TABLE public.webmap DROP COLUMN extent_constrained; 4 | -------------------------------------------------------------------------------- /nextgisweb/webmap/migration/3206493e-add-yandex-geocoder.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "3206493e" } ***/ 2 | 3 | DELETE 4 | FROM setting 5 | WHERE component = 'webmap' 6 | AND ( 7 | name = 'address_search_enabled' OR 8 | name = 'address_search_extent' OR 9 | name = 'address_geocoder' OR 10 | name = 'yandex_api_geocoder_key' 11 | ); 12 | -------------------------------------------------------------------------------- /nextgisweb/webmap/migration/33b2c229-add-public-to-webmapannotation.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "33b2c229" } ***/ 2 | 3 | ALTER TABLE public.webmap_annotation DROP CONSTRAINT user_id_fk; 4 | 5 | ALTER TABLE public.webmap_annotation 6 | DROP COLUMN "public", 7 | DROP COLUMN "user_id"; 8 | -------------------------------------------------------------------------------- /nextgisweb/webmap/migration/33d90e2c-layer-identifiable-column.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "33d90e2c", "parents": ["33b2c229"], 3 | "date": "2022-02-02T03:40:30", 4 | "message": "Layer identifiable column" 5 | } ***/ 6 | 7 | ALTER TABLE webmap_item ADD COLUMN layer_identifiable boolean; 8 | UPDATE webmap_item SET layer_identifiable = true WHERE item_type = 'layer' 9 | -------------------------------------------------------------------------------- /nextgisweb/webmap/migration/33d90e2c-layer-identifiable-column.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "33d90e2c" } ***/ 2 | 3 | ALTER TABLE webmap_item DROP COLUMN layer_identifiable; 4 | -------------------------------------------------------------------------------- /nextgisweb/webmap/migration/37e6401f-fix-enum.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "37e6401f", "parents": ["33d90e2c"], 3 | "date": "2022-08-23T11:26:59", 4 | "message": "Fix enum" 5 | } ***/ 6 | 7 | ALTER TABLE webmap_item DROP CONSTRAINT IF EXISTS webmap_item_item_type_check; 8 | ALTER TABLE webmap_item ALTER COLUMN item_type TYPE character varying(50); 9 | -------------------------------------------------------------------------------- /nextgisweb/webmap/migration/37e6401f-fix-enum.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "37e6401f" } ***/ 2 | 3 | -- This migration supplements old migration 4 | -------------------------------------------------------------------------------- /nextgisweb/webmap/migration/390b25de-jsonb-annotation-style.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "390b25de", "parents": ["37e6401f"], 3 | "date": "2022-10-19T14:41:25", 4 | "message": "JSONB annotation style" 5 | } ***/ 6 | 7 | ALTER TABLE webmap_annotation ALTER COLUMN style TYPE jsonb USING style::jsonb; 8 | -------------------------------------------------------------------------------- /nextgisweb/webmap/migration/390b25de-jsonb-annotation-style.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "390b25de" } ***/ 2 | 3 | ALTER TABLE webmap_annotation ALTER COLUMN style TYPE character varying; 4 | -------------------------------------------------------------------------------- /nextgisweb/webmap/migration/3a024e71-enable-geometry-info.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "3a024e71", "parents": ["390b25de"], 3 | "date": "2022-12-06T19:47:52", 4 | "message": "Enable geometry info" 5 | } ***/ 6 | 7 | INSERT INTO setting (component, "name", value) 8 | VALUES ('webmap', 'show_geometry_info', 'true') 9 | ON CONFLICT DO NOTHING; 10 | -------------------------------------------------------------------------------- /nextgisweb/webmap/migration/3a024e71-enable-geometry-info.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "3a024e71" } ***/ 2 | 3 | SELECT 1; -------------------------------------------------------------------------------- /nextgisweb/webmap/migration/3cb1eabf-add-legend_symbols.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "3cb1eabf", "parents": ["3abe311d"], 3 | "date": "2023-04-19T22:56:36", 4 | "message": "Add legend_symbols" 5 | } ***/ 6 | 7 | ALTER TABLE webmap ADD COLUMN legend_symbols character varying(50); 8 | ALTER TABLE webmap_item ADD COLUMN legend_symbols character varying(50); 9 | -------------------------------------------------------------------------------- /nextgisweb/webmap/migration/3cb1eabf-add-legend_symbols.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "3cb1eabf" } ***/ 2 | 3 | ALTER TABLE webmap DROP COLUMN legend_symbols; 4 | ALTER TABLE webmap_item DROP COLUMN legend_symbols; 5 | -------------------------------------------------------------------------------- /nextgisweb/webmap/migration/4315451d-remove-invalid-settings.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "4315451d" } ***/ 2 | -------------------------------------------------------------------------------- /nextgisweb/webmap/migration/43176859-fix-boolean-settings.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "43176859" } ***/ 2 | -------------------------------------------------------------------------------- /nextgisweb/webmap/migration/43b50af4-add-group-exclusive-column.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "43b50af4", "parents": ["43176859"], 3 | "date": "2024-04-04T03:04:38", 4 | "message": "Add group exclusive column" 5 | } ***/ 6 | 7 | ALTER TABLE webmap_item ADD COLUMN group_exclusive boolean; 8 | -------------------------------------------------------------------------------- /nextgisweb/webmap/migration/43b50af4-add-group-exclusive-column.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "43b50af4" } ***/ 2 | 3 | ALTER TABLE webmap_item DROP COLUMN group_exclusive; 4 | -------------------------------------------------------------------------------- /nextgisweb/webmap/migration/43cf2875-add-measure_srs_id.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "43cf2875" } ***/ 2 | 3 | -- TODO: Write code here and remove this placeholder line! 4 | 5 | ALTER TABLE webmap 6 | DROP CONSTRAINT IF EXISTS webmap_measure_srs_id_fkey; 7 | 8 | ALTER TABLE webmap 9 | DROP COLUMN IF EXISTS measure_srs_id; 10 | -------------------------------------------------------------------------------- /nextgisweb/webmap/migration/45999710-remove-webmap-display-permission.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "45999710", "parents": ["43cf2875"], 3 | "date": "2024-07-07T15:33:12", 4 | "message": "Remove webmap:display permission" 5 | } ***/ 6 | 7 | DELETE FROM resource_acl_rule WHERE scope='webmap' AND permission = 'display'; 8 | -------------------------------------------------------------------------------- /nextgisweb/webmap/migration/45999710-remove-webmap-display-permission.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "45999710" } ***/ 2 | 3 | SELECT 1; 4 | -------------------------------------------------------------------------------- /nextgisweb/webmap/migration/46cfda20-add-title.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "46cfda20", "parents": ["45999710"], 3 | "date": "2024-09-06T04:05:18", 4 | "message": "Add title" 5 | } ***/ 6 | 7 | ALTER TABLE webmap ADD COLUMN title character varying; 8 | -------------------------------------------------------------------------------- /nextgisweb/webmap/migration/46cfda20-add-title.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "46cfda20" } ***/ 2 | 3 | ALTER TABLE webmap DROP COLUMN title; 4 | -------------------------------------------------------------------------------- /nextgisweb/webmap/migration/4a4ce85e-remove-popup_width-and-popup_height.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "4a4ce85e" } ***/ 2 | 3 | SELECT 1; 4 | -------------------------------------------------------------------------------- /nextgisweb/webmap/migration/4a6a7a01-add-webmap-options.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "4a6a7a01", "parents": ["4a4ce85e"], 3 | "date": "2025-03-05T03:29:06", 4 | "message": "Add WebMap options" 5 | } ***/ 6 | 7 | ALTER TABLE webmap ADD COLUMN options jsonb; 8 | UPDATE webmap SET options = '{}'::jsonb; 9 | ALTER TABLE webmap ALTER COLUMN options SET NOT NULL; 10 | -------------------------------------------------------------------------------- /nextgisweb/webmap/migration/4a6a7a01-add-webmap-options.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "4a6a7a01" } ***/ 2 | 3 | ALTER TABLE webmap DROP COLUMN options; 4 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/clone-webmap/index.ts: -------------------------------------------------------------------------------- 1 | import { CloneWebmap } from "./CloneWebmap"; 2 | 3 | export default CloneWebmap; 4 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/component/index.ts: -------------------------------------------------------------------------------- 1 | export { SelectLegendSymbols } from "./SelectLegendSymbols"; 2 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/coordinates/index.ts: -------------------------------------------------------------------------------- 1 | import { parse } from "./parser"; 2 | 3 | export default parse; 4 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/display-tiny/index.ts: -------------------------------------------------------------------------------- 1 | import DisplayTinyPage from "./DisplayTinyPage"; 2 | 3 | export default DisplayTinyPage; 4 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/display/component/MapPane.less: -------------------------------------------------------------------------------- 1 | .ngw-webmap-display-map-pane { 2 | position: relative; 3 | width: 100%; 4 | height: 100%; 5 | 6 | --ol-foreground-color: var(--theme-color-primary); 7 | --ol-subtle-foreground-color: var(--theme-color-primary); 8 | } 9 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/display/component/PanelSwitcher.css: -------------------------------------------------------------------------------- 1 | .panel-switcher .ant-tabs-content, 2 | .panel-switcher .ant-tabs-tabpane { 3 | width: 100%; 4 | height: 100%; 5 | } 6 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/display/index.ts: -------------------------------------------------------------------------------- 1 | export { Display } from "./Display"; 2 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/filter-extent-btn/index.ts: -------------------------------------------------------------------------------- 1 | import { FilterExtentBtn } from "./FilterExtentBtn"; 2 | 3 | export default FilterExtentBtn; 4 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/icon/index.ts: -------------------------------------------------------------------------------- 1 | export { default as MeasureDistance } from "@nextgisweb/webmap/icon/measure_distance"; 2 | export { default as MeasureArea } from "@nextgisweb/webmap/icon/measure_area"; 3 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/image-adapter/index.ts: -------------------------------------------------------------------------------- 1 | import { ImageAdapter } from "./ImageAdapter"; 2 | 3 | export default ImageAdapter; 4 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/items-widget/index.ts: -------------------------------------------------------------------------------- 1 | export { ItemsStore as store } from "./ItemsStore"; 2 | export { ItemsWidget as widget } from "./ItemsWidget"; 3 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/layer-opacity-slider/LayerOpacitySlider.less: -------------------------------------------------------------------------------- 1 | .ngw-webmap-layer-opacity-slider { 2 | display: flex; 3 | align-items: center; 4 | gap: 5px; 5 | padding: 0 12px; 6 | 7 | > .ant-slider { 8 | flex-grow: 1; 9 | min-width: 15ch; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/layer-opacity-slider/index.ts: -------------------------------------------------------------------------------- 1 | import { LayerOpacitySlider } from "./LayerOpacitySlider"; 2 | 3 | export default LayerOpacitySlider; 4 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/layers-tree/DropdownActions.less: -------------------------------------------------------------------------------- 1 | .dropdown-content { 2 | box-shadow: 3 | 0 3px 6px -4px rgb(0 0 0 / 12%), 4 | 0 6px 16px 0 rgb(0 0 0 / 8%), 5 | 0 9px 28px 8px rgb(0 0 0 / 5%); 6 | background: #fff; 7 | } 8 | .dropdown-content .ant-dropdown-menu { 9 | box-shadow: none; 10 | } 11 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/layers-tree/index.ts: -------------------------------------------------------------------------------- 1 | import { LayersTree } from "./LayersTree"; 2 | 3 | export default LayersTree; 4 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/map-component/control/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./AttributionControl"; 2 | export * from "./ButtonControl"; 3 | export * from "./MapControl"; 4 | export * from "./ToggleControl"; 5 | export * from "./ZoomControl"; 6 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/map-controls/index.ts: -------------------------------------------------------------------------------- 1 | import { buildControls, getControls } from "./map-controls"; 2 | 3 | export { buildControls, getControls }; 4 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/map-controls/tool/Zoom.css: -------------------------------------------------------------------------------- 1 | .ol-dragzoom { 2 | border-color: rgb(7, 109, 191); 3 | } 4 | 5 | .viewer-info { 6 | display: inline-block; 7 | position: relative; 8 | top: -1px; 9 | left: -3px; 10 | z-index: 1; 11 | margin: 0; 12 | padding: 0; 13 | } 14 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/map-state-observer/index.ts: -------------------------------------------------------------------------------- 1 | import { MapStatesObserverSingleton } from "./MapStatesObserver"; 2 | 3 | export default MapStatesObserverSingleton; 4 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/map-toolbar/index.ts: -------------------------------------------------------------------------------- 1 | import { MapToolbar } from "./MapToolbar"; 2 | 3 | export default MapToolbar; 4 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/map-viewer-info/index.ts: -------------------------------------------------------------------------------- 1 | import { MapViewerInfo } from "./MapViewerInfo"; 2 | 3 | export default MapViewerInfo; 4 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/ol/control/Attribution.ts: -------------------------------------------------------------------------------- 1 | import Attr from "ol/control/Attribution"; 2 | import type { Options } from "ol/control/Attribution"; 3 | 4 | const OPTIONS = { 5 | collapsible: false, 6 | }; 7 | 8 | export class Attribution extends Attr { 9 | constructor(options: Options) { 10 | super({ ...OPTIONS, ...options }); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/ol/control/createButtonControl.css: -------------------------------------------------------------------------------- 1 | .custom-button-control { 2 | line-height: inherit!important; 3 | font-weight: normal!important; 4 | } 5 | 6 | .mapadapter-btn-ctrl button { 7 | font-size: 1.14em; 8 | font-weight: bold; 9 | } 10 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nextgisweb/webmap", 3 | "version": "0.0.0", 4 | "type": "module", 5 | "dependencies": { 6 | "html-to-image": "1.11.11", 7 | "react-rnd": "10.3.7" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/panel/description/DescriptionPanel.less: -------------------------------------------------------------------------------- 1 | .ngw-webmap-panel-description { 2 | > .ngw-webmap-panel-content { 3 | > .content { 4 | *:first-child { 5 | margin-block-start: 0; 6 | } 7 | 8 | *:last-child { 9 | margin-block-end: 0; 10 | } 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/panel/header/CloseButton.less: -------------------------------------------------------------------------------- 1 | .ngw-webmap-close-button { 2 | color: var(--icon-color); 3 | } 4 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/panel/header/index.ts: -------------------------------------------------------------------------------- 1 | export { PanelHeader } from "./PanelHeader"; 2 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/panel/identify/index.ts: -------------------------------------------------------------------------------- 1 | export * as default from "./IdentifyStore"; 2 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/panel/index.ts: -------------------------------------------------------------------------------- 1 | export { PanelStore } from "./PanelStore"; 2 | export type { 3 | PanelPlugin, 4 | PanelPluginWidgetProps as PanelWidgetProps, 5 | PanelPluginWidget, 6 | PanelPluginStore, 7 | } from "./registry"; 8 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/panel/print/PrintMapExport/index.ts: -------------------------------------------------------------------------------- 1 | export { PrintMapExport as default } from "./PrintMapExport"; 2 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/panel/print/PrintPanel.less: -------------------------------------------------------------------------------- 1 | .print-map-pane { 2 | position: absolute; 3 | right: 0; 4 | bottom: 0; 5 | z-index: 10; 6 | background-color: white; 7 | overflow: auto; 8 | } 9 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/panel/share/SharePanel.less: -------------------------------------------------------------------------------- 1 | .ant-select-item-option-content, 2 | .ant-select-selection-item-content, 3 | .ant-select-selection-item { 4 | .panel-title { 5 | display: grid; 6 | grid-template-columns: 20px auto; 7 | 8 | .icon { 9 | color: var(--primary); 10 | font-size: 14px; 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/plugin/feature-layer/index.ts: -------------------------------------------------------------------------------- 1 | import { FeatureLayerPlugin } from "./FeatureLayerPlugin"; 2 | 3 | export default FeatureLayerPlugin; 4 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/plugin/layer-editor/constant.ts: -------------------------------------------------------------------------------- 1 | export const EDITING_STATES = { 2 | CREATING: "creatingFeatures", 3 | MODIFYING: "modifyingFeatures", 4 | DELETING: "deletingFeatures", 5 | } as const; 6 | 7 | export const INTERACTION_KEYS = { 8 | DRAW: "draw", 9 | MODIFY: "modify", 10 | SNAP: "snap", 11 | } as const; 12 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/plugin/layer-editor/index.ts: -------------------------------------------------------------------------------- 1 | import { LayerEditor } from "./LayerEditor"; 2 | 3 | export default LayerEditor; 4 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/plugin/layer-info/index.ts: -------------------------------------------------------------------------------- 1 | import { LayerInfoPlugin } from "./LayerInfoPlugin"; 2 | 3 | export default LayerInfoPlugin; 4 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/plugin/layer-opacity/index.ts: -------------------------------------------------------------------------------- 1 | import { LayerOpacityPlugin } from "./LayerOpacityPlugin"; 2 | 3 | export default LayerOpacityPlugin; 4 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/plugin/zoom-to-layer/index.ts: -------------------------------------------------------------------------------- 1 | import { ZoomToLayerPlugin } from "./ZoomToLayerPlugin"; 2 | 3 | export default ZoomToLayerPlugin; 4 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/plugin/zoom-to-webmap/index.ts: -------------------------------------------------------------------------------- 1 | import { ZoomToWebmapPlugin } from "./ZoomToWebmapPlugin"; 2 | 3 | export default ZoomToWebmapPlugin; 4 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/preview-embedded/index.ts: -------------------------------------------------------------------------------- 1 | import { PreviewEmbedded } from "./PreviewEmbedded"; 2 | 3 | export default PreviewEmbedded; 4 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/preview-map/index.ts: -------------------------------------------------------------------------------- 1 | export { PreviewMap } from "./PreviewMap"; 2 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/print-map/index.ts: -------------------------------------------------------------------------------- 1 | export { PrintMap as default } from "./PrintMap"; 2 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/print-map/legend-print-map/index.ts: -------------------------------------------------------------------------------- 1 | export { LegendPrintMap as default } from "./LegendPrintMap"; 2 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/print-map/rnd-comp/index.ts: -------------------------------------------------------------------------------- 1 | export { RndComp as default } from "./RndComp"; 2 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/settings-widget/index.ts: -------------------------------------------------------------------------------- 1 | export { SettingStore as store } from "./SettingStore"; 2 | export { SettingsWidget as widget } from "./SettingsWidget"; 3 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/settings/index.ts: -------------------------------------------------------------------------------- 1 | import { Settings } from "./Settings"; 2 | 3 | export default Settings; 4 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/store/annotations/index.ts: -------------------------------------------------------------------------------- 1 | import { annotationsStore } from "./AnnotationsStore"; 2 | 3 | export default annotationsStore; 4 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/store/index.ts: -------------------------------------------------------------------------------- 1 | import { WebmapStore } from "./WebmapStore"; 2 | 3 | export default WebmapStore; 4 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/tile-adapter/index.ts: -------------------------------------------------------------------------------- 1 | import TileAdapter from "./TileAdapter"; 2 | 3 | export default TileAdapter; 4 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/type/CreateLayerOptions.ts: -------------------------------------------------------------------------------- 1 | export interface CreateLayerOptions { 2 | styleId: number; 3 | visibility?: boolean; 4 | transparency?: number | null; 5 | minResolution?: number | null; 6 | maxResolution?: number | null; 7 | id?: number; 8 | } 9 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/type/DisplayConfig.ts: -------------------------------------------------------------------------------- 1 | export type Entrypoint = 2 | | string 3 | | [midKey: string, loader: () => Promise<{ default: any }>]; 4 | export interface Mid { 5 | adapter: Entrypoint[]; 6 | plugin: Entrypoint[]; 7 | } 8 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/ui/annotation-dialog/index.ts: -------------------------------------------------------------------------------- 1 | export { AnnotationsDialog } from "./AnnotationDialog"; 2 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/ui/annotation-dialog/showAnnotationEditor.tsx: -------------------------------------------------------------------------------- 1 | import showModal from "@nextgisweb/gui/showModal"; 2 | 3 | import { AnnotationsModal } from "./AnnotationsModal"; 4 | import type { AnnotationsModalProps } from "./AnnotationsModal"; 5 | 6 | export function showAnnotationEditor(options: AnnotationsModalProps) { 7 | return showModal(AnnotationsModal, options); 8 | } 9 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/ui/annotations-manager/index.ts: -------------------------------------------------------------------------------- 1 | import { AnnotationsManager } from "./AnnotationsManager"; 2 | 3 | export default AnnotationsManager; 4 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/ui/finish-editing-dialog/index.ts: -------------------------------------------------------------------------------- 1 | export { showFinishEditingDialog } from "./showFinishEditingDialog"; 2 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/utils/index.ts: -------------------------------------------------------------------------------- 1 | export { formatMetersArea, formatMetersLength } from "./format-units"; 2 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/webmap-feature-grid-tab/index.ts: -------------------------------------------------------------------------------- 1 | import { WebMapFeatureGridTab } from "./WebMapFeatureGridTab"; 2 | 3 | export default WebMapFeatureGridTab; 4 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/webmap-tabs/index.ts: -------------------------------------------------------------------------------- 1 | export { WebMapTabs } from "./WebMapTabs"; 2 | export { WebMapTabsStore } from "./WebMapTabsStore"; 3 | -------------------------------------------------------------------------------- /nextgisweb/webmap/nodepkg/zoom-to-filtered-btn/index.ts: -------------------------------------------------------------------------------- 1 | import { ZoomToFilteredBtn } from "./ZoomToFilteredBtn"; 2 | 3 | export default ZoomToFilteredBtn; 4 | -------------------------------------------------------------------------------- /nextgisweb/webmap/plugin/__init__.py: -------------------------------------------------------------------------------- 1 | from .base import WebmapLayerPlugin, WebmapPlugin 2 | from .feature_layer import FeatureLayerPlugin 3 | from .layer_editor import LayerEditorPlugin 4 | from .layer_info import LayerInfoPlugin 5 | from .layer_opacity import LayerOpacityPlugin 6 | from .zoom_to_layer import ZoomToLayerPlugin 7 | from .zoom_to_webmap import ZoomToWebmapPlugin 8 | -------------------------------------------------------------------------------- /nextgisweb/webmap/plugin/base.py: -------------------------------------------------------------------------------- 1 | from nextgisweb.lib.registry import list_registry 2 | 3 | 4 | @list_registry 5 | class WebmapPlugin: 6 | pass 7 | 8 | 9 | @list_registry 10 | class WebmapLayerPlugin: 11 | pass 12 | -------------------------------------------------------------------------------- /nextgisweb/webmap/plugin/layer_opacity.py: -------------------------------------------------------------------------------- 1 | from nextgisweb.jsrealm import jsentry 2 | 3 | from .base import WebmapLayerPlugin 4 | 5 | 6 | class LayerOpacityPlugin(WebmapLayerPlugin): 7 | entry = jsentry("@nextgisweb/webmap/plugin/layer-opacity") 8 | 9 | @classmethod 10 | def is_layer_supported(cls, layer, webmap): 11 | return (cls.entry, dict()) 12 | -------------------------------------------------------------------------------- /nextgisweb/webmap/plugin/zoom_to_webmap.py: -------------------------------------------------------------------------------- 1 | from nextgisweb.jsrealm import jsentry 2 | 3 | from .base import WebmapLayerPlugin 4 | 5 | 6 | class ZoomToWebmapPlugin(WebmapLayerPlugin): 7 | entry = jsentry("@nextgisweb/webmap/plugin/zoom-to-webmap") 8 | 9 | @classmethod 10 | def is_layer_supported(cls, layer, webmap): 11 | return (cls.entry, dict()) 12 | -------------------------------------------------------------------------------- /nextgisweb/webmap/template/invalid_origin.mako: -------------------------------------------------------------------------------- 1 | <%inherit file='nextgisweb:pyramid/template/plain.mako' /> 2 | 3 |

${tr(gettext("Web map embedding is not allowed for %s in the Web GIS settings.")) % origin}

4 |

5 | ${tr(gettext("View the map on %s") % domain)} 6 |

-------------------------------------------------------------------------------- /nextgisweb/webmap/test/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/webmap/test/__init__.py -------------------------------------------------------------------------------- /nextgisweb/wfsclient/__init__.py: -------------------------------------------------------------------------------- 1 | from .component import WFSClientComponent 2 | from .model import WFSConnection, WFSLayer 3 | -------------------------------------------------------------------------------- /nextgisweb/wfsclient/migration/37e6416e-fix-enum.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "37e6416e" } ***/ 2 | 3 | -- This migration supplements old migration 4 | -------------------------------------------------------------------------------- /nextgisweb/wfsclient/migration/4892a21e-original-datatype.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "4892a21e" } ***/ 2 | 3 | ALTER TABLE layer_field_wfsclient_layer DROP COLUMN orig_datatype; 4 | -------------------------------------------------------------------------------- /nextgisweb/wfsclient/nodepkg/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nextgisweb/wfsclient", 3 | "version": "0.0.0", 4 | "type": "module" 5 | } 6 | -------------------------------------------------------------------------------- /nextgisweb/wfsclient/nodepkg/wfsclient-connection/index.ts: -------------------------------------------------------------------------------- 1 | export { WfsClientConnectionStore as store } from "./WfsClientConnectionStore"; 2 | export { WfsClientConnectionWidget as widget } from "./WfsClientConnectionWidget"; 3 | -------------------------------------------------------------------------------- /nextgisweb/wfsclient/nodepkg/wfsclient-layer/index.ts: -------------------------------------------------------------------------------- 1 | export { WfsClientLayerStore as store } from "./WfsClientLayerStore"; 2 | export { WfsClientLayerWidget as widget } from "./WfsClientLayerWidget"; 3 | -------------------------------------------------------------------------------- /nextgisweb/wfsserver/__init__.py: -------------------------------------------------------------------------------- 1 | from .component import WFSServerComponent 2 | from .model import Layer, Service 3 | from .wfs_handler import VERSION_DEFAULT, VERSION_SUPPORTED 4 | -------------------------------------------------------------------------------- /nextgisweb/wfsserver/migration/05443ecd-add-maxfeatures-column.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "05443ecd", "parents": ["00000000"], 3 | "date": "2015-09-21T00:00:00", 4 | "message": "Add maxfeatures column" 5 | } ***/ 6 | 7 | ALTER TABLE wfsserver_layer 8 | ADD COLUMN maxfeatures integer; -------------------------------------------------------------------------------- /nextgisweb/wfsserver/migration/05443ecd-add-maxfeatures-column.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "05443ecd" } ***/ 2 | 3 | ALTER TABLE wfsserver_layer DROP COLUMN maxfeatures; -------------------------------------------------------------------------------- /nextgisweb/wfsserver/migration/28a17b5b-layer-keyname-unique-constraint.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "28a17b5b", "parents": ["05443ecd"], 3 | "date": "2020-07-22T00:00:00", 4 | "message": "Layer keyname unique constraint" 5 | } ***/ 6 | 7 | ALTER TABLE wfsserver_layer 8 | ADD CONSTRAINT wfsserver_layer_service_id_keyname_key UNIQUE (service_id, keyname); -------------------------------------------------------------------------------- /nextgisweb/wfsserver/migration/28a17b5b-layer-keyname-unique-constraint.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "28a17b5b" } ***/ 2 | 3 | ALTER TABLE wfsserver_layer DROP CONSTRAINT wfsserver_layer_service_id_keyname_key; 4 | -------------------------------------------------------------------------------- /nextgisweb/wfsserver/nodepkg/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nextgisweb/wfsserver", 3 | "version": "0.0.0", 4 | "type": "module" 5 | } 6 | -------------------------------------------------------------------------------- /nextgisweb/wfsserver/nodepkg/service-widget/index.ts: -------------------------------------------------------------------------------- 1 | export { ServiceStore as store } from "./ServiceStore"; 2 | export { ServiceWidget as widget } from "./ServiceWidget"; 3 | -------------------------------------------------------------------------------- /nextgisweb/wfsserver/test/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/wfsserver/test/__init__.py -------------------------------------------------------------------------------- /nextgisweb/wmsclient/__init__.py: -------------------------------------------------------------------------------- 1 | from .component import WMSClientComponent 2 | from .model import WMS_VERSIONS, Connection, Layer 3 | -------------------------------------------------------------------------------- /nextgisweb/wmsclient/migration/00dc6f80-version-constraint.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "00dc6f80" } ***/ 2 | 3 | SELECT 'NOP'; 4 | -------------------------------------------------------------------------------- /nextgisweb/wmsclient/migration/039ac0e2-authentication.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "039ac0e2", "parents": ["00dc6f80"], 3 | "date": "2015-06-30T00:00:00", 4 | "message": "Authentication" 5 | } ***/ 6 | 7 | ALTER TABLE wmsclient_connection 8 | ADD COLUMN username character varying; 9 | ALTER TABLE wmsclient_connection 10 | ADD COLUMN password character varying; -------------------------------------------------------------------------------- /nextgisweb/wmsclient/migration/039ac0e2-authentication.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "039ac0e2" } ***/ 2 | 3 | ALTER TABLE wmsclient_connection DROP COLUMN username; 4 | ALTER TABLE wmsclient_connection DROP COLUMN password; -------------------------------------------------------------------------------- /nextgisweb/wmsclient/migration/37e64383-fix-enum.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "37e64383", "parents": ["039ac0e2"], 3 | "date": "2022-08-23T11:30:42", 4 | "message": "Fix enum" 5 | } ***/ 6 | 7 | ALTER TABLE wmsclient_connection DROP CONSTRAINT IF EXISTS wmsclient_connection_version_check; 8 | ALTER TABLE wmsclient_connection ALTER COLUMN version TYPE character varying(50); 9 | -------------------------------------------------------------------------------- /nextgisweb/wmsclient/migration/37e64383-fix-enum.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "37e64383" } ***/ 2 | 3 | -- This migration supplements old migration 4 | -------------------------------------------------------------------------------- /nextgisweb/wmsclient/nodepkg/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nextgisweb/wmsclient", 3 | "version": "0.0.0", 4 | "type": "module" 5 | } 6 | -------------------------------------------------------------------------------- /nextgisweb/wmsclient/nodepkg/wmsclient-connection/index.ts: -------------------------------------------------------------------------------- 1 | export { WmsClientConnectionStore as store } from "./WmsClientConnectionStore"; 2 | export { WmsClientConnectionWidget as widget } from "./WmsClientConnectionWidget"; 3 | -------------------------------------------------------------------------------- /nextgisweb/wmsclient/nodepkg/wmsclient-layer/index.ts: -------------------------------------------------------------------------------- 1 | export { WmsClientLayerStore as store } from "./WmsClientLayerStore"; 2 | export { WmsClientLayerWidget as widget } from "./WmsClientLayerWidget"; 3 | -------------------------------------------------------------------------------- /nextgisweb/wmsserver/__init__.py: -------------------------------------------------------------------------------- 1 | from .component import WMSServerComponent 2 | from .model import Layer, Service 3 | -------------------------------------------------------------------------------- /nextgisweb/wmsserver/component.py: -------------------------------------------------------------------------------- 1 | from nextgisweb.env import Component 2 | 3 | 4 | class WMSServerComponent(Component): 5 | def setup_pyramid(self, config): 6 | from . import api, view 7 | 8 | api.setup_pyramid(self, config) 9 | view.setup_pyramid(self, config) 10 | -------------------------------------------------------------------------------- /nextgisweb/wmsserver/fonts/DejaVuSans.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/wmsserver/fonts/DejaVuSans.ttf -------------------------------------------------------------------------------- /nextgisweb/wmsserver/fonts/DejaVuSansMono.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/wmsserver/fonts/DejaVuSansMono.ttf -------------------------------------------------------------------------------- /nextgisweb/wmsserver/migration/2807b08b-layer-position.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "2807b08b", "parents": ["00000000"], 3 | "date": "2020-06-22T00:00:00", 4 | "message": "Layer position" 5 | } ***/ 6 | 7 | ALTER TABLE wmsserver_layer 8 | ADD COLUMN position integer; 9 | -------------------------------------------------------------------------------- /nextgisweb/wmsserver/migration/2807b08b-layer-position.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "2807b08b" } ***/ 2 | 3 | ALTER TABLE wmsserver_layer DROP COLUMN position; 4 | -------------------------------------------------------------------------------- /nextgisweb/wmsserver/migration/3095291f-switch-scale-denom.fw.sql: -------------------------------------------------------------------------------- 1 | /*** { 2 | "revision": "3095291f", "parents": ["2807b08b"], 3 | "date": "2021-08-23T02:18:59", 4 | "message": "Switch scale denom" 5 | } ***/ 6 | 7 | UPDATE wmsserver_layer 8 | SET min_scale_denom = max_scale_denom, 9 | max_scale_denom = min_scale_denom; 10 | -------------------------------------------------------------------------------- /nextgisweb/wmsserver/migration/3095291f-switch-scale-denom.rw.sql: -------------------------------------------------------------------------------- 1 | /*** { "revision": "3095291f" } ***/ 2 | 3 | UPDATE wmsserver_layer 4 | SET min_scale_denom = max_scale_denom, 5 | max_scale_denom = min_scale_denom; 6 | -------------------------------------------------------------------------------- /nextgisweb/wmsserver/nodepkg/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nextgisweb/wmsserver", 3 | "version": "0.0.0", 4 | "type": "module" 5 | } 6 | -------------------------------------------------------------------------------- /nextgisweb/wmsserver/nodepkg/service-widget/index.ts: -------------------------------------------------------------------------------- 1 | export { ServiceStore as store } from "./ServiceStore"; 2 | export { ServiceWidget as widget } from "./ServiceWidget"; 3 | -------------------------------------------------------------------------------- /nextgisweb/wmsserver/test/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextgis/nextgisweb/d461416cf27e6a791dc450e664c1ab43ec0fb0e4/nextgisweb/wmsserver/test/__init__.py -------------------------------------------------------------------------------- /nextgisweb/workaround.py: -------------------------------------------------------------------------------- 1 | # ruff: noqa: F401 2 | 3 | # https://bugs.python.org/issue47082 4 | import numpy 5 | from backports.datetime_fromisoformat import MonkeyPatch 6 | 7 | MonkeyPatch.patch_fromisoformat() 8 | --------------------------------------------------------------------------------