From 8ddc2a789391c0bb0d949362215ffcc1f9553e91 Mon Sep 17 00:00:00 2001 From: frauch Date: Mon, 10 Feb 2025 15:09:13 +0100 Subject: [PATCH 01/11] add export functionality stop propagation of click event and adjust layout enable geojson export Adjust Layout of export checkbox export button only when export allowed make export method overridable refactor adjust geometryexport --- .../Resources/public/TableRenderer.js | 99 ++++++++++++------- .../public/mapbender.element.digitizer.js | 21 +++- .../Resources/public/toolset.js | 57 ++++++++++- .../Resources/translations/messages.de.yaml | 4 + .../views/Element/Digitizer.html.twig | 7 ++ 5 files changed, 148 insertions(+), 40 deletions(-) diff --git a/src/Mapbender/DigitizerBundle/Resources/public/TableRenderer.js b/src/Mapbender/DigitizerBundle/Resources/public/TableRenderer.js index cb397950..056724b4 100644 --- a/src/Mapbender/DigitizerBundle/Resources/public/TableRenderer.js +++ b/src/Mapbender/DigitizerBundle/Resources/public/TableRenderer.js @@ -2,22 +2,32 @@ "use strict"; Mapbender.Digitizer = Mapbender.Digitizer || {}; + Mapbender.Digitizer.TableRenderer = function() { + // Call parent constructor Mapbender.DataManager.TableRenderer.apply(this, arguments); + + // Initialize an array to store checked row IDs + this.selectedFeatures = []; }; - Mapbender.Digitizer.TableRenderer.prototype = Object.create(Mapbender.DataManager.TableRenderer.prototype); - Object.assign(Mapbender.Digitizer.TableRenderer.prototype, { - constructor: Mapbender.Digitizer.TableRenderer - }); + + // Inherit from DataManager.TableRenderer + Mapbender.Digitizer.TableRenderer.prototype = + Object.create(Mapbender.DataManager.TableRenderer.prototype); Object.assign(Mapbender.Digitizer.TableRenderer.prototype, { + constructor: Mapbender.Digitizer.TableRenderer, + render: function(schema) { var table = Mapbender.DataManager.TableRenderer.prototype.render.call(this, schema); this.registerEvents(schema, $(table)); return table; }, + registerEvents: function(schema, $table) { var widget = this.owner; + + // Hover highlight $table.on('mouseenter mouseleave', 'tbody > tr', function(event) { var hover = event.handleObj.origType === 'mouseenter'; var feature = $(this).data().item; @@ -25,11 +35,11 @@ feature.set('hover', hover); } }); + + // Row click => zoom to feature $table.on('click', 'tbody > tr', function (e) { - // Do nothing if click hit an interaction button; return true to allow other handlers var $target = $(e.target); - var $parentsAndSelf = $target.parentsUntil(this).add($target); - if ($parentsAndSelf.filter('.button,.btn').length) { + if ($target.is('.row-checkbox')) { return true; } var feature = $(this).data().item; @@ -37,36 +47,64 @@ widget.zoomToFeature(schema, feature); } }); - this.registerButtonEvents(schema, $table); + + + // Existing buttons + this.registerButtonEvents(schema, $table); }, + registerButtonEvents: function(schema, $table) { var self = this; + + $table.on('click', 'tbody > tr .-fn-check-for-export', function(e) { + e.stopPropagation(); + var $row = $(this).closest('tr'); + var feature = $row.data('item'); + if (!feature) { return; } + // Toggle selected state, maintain selectedFeatures array + var idx = self.selectedFeatures.indexOf(feature); + var selected = (idx >= 0); + if (selected) { + self.selectedFeatures.splice(idx, 1); + $('i.fa', this).removeClass('fa-check-square-o').addClass('fa-square-o'); + } else { + self.selectedFeatures.push(feature); + $('i.fa', this).removeClass('fa-square-o').addClass('fa-check-square-o'); + } + }); + + // Save $table.on('click', 'tbody > tr .-fn-save', function(event) { - // Avoid calling row click handlers (may zoom to feature or open the edit dialog, depending on schema config) event.stopPropagation(); var data = $(this).closest('tr').data(); if (data.schema && data.item) { - self.owner._saveItem(data.schema, data.item).fail(function(){ - self.owner._afterFailedSave(data.schema,data.item); - }); + self.owner._saveItem(data.schema, data.item) + .fail(function(){ + self.owner._afterFailedSave(data.schema, data.item); + }); } }); + + // Toggle visibility $table.on('click', 'tbody > tr .-fn-toggle-visibility', function(event) { - // Avoid calling row click handlers (may zoom to feature or open the edit dialog, depending on schema config) event.stopPropagation(); var $tr = $(this).closest('tr'); var feature = $tr.data().item; feature.set('hidden', !feature.get('hidden')); self.updateButtonStates_($tr.get(0), feature); }); + + // Edit style $table.on('click', 'tbody > tr .-fn-edit-style', function(event) { + event.stopPropagation(); var data = $(this).closest('tr').data(); if (data.schema && data.item) { self.owner.openStyleEditor(data.schema, data.item); } }); + + // Copy $table.on('click', 'tbody > tr .-fn-copy', function(event) { - // Avoid calling row click handlers (may already try to zoom to feature, or open the edit dialog, depending on schema config) event.stopPropagation(); var data = $(this).closest('tr').data(); if (data.schema && data.item) { @@ -74,33 +112,29 @@ } }); }, + onRowCreation: function(tableSchema, tr, feature) { Mapbender.DataManager.TableRenderer.prototype.onRowCreation.apply(this, arguments); - // Place table row into feature data for quick access (synchronized highlighting etc) + // Link table row with feature feature.set('table-row', tr); // Inline save buttons start out disabled $('.-fn-save', tr).prop('disabled', !feature.get('dirty')); this.registerFeatureEvents(feature); }, + registerFeatureEvents: function(feature) { - // Avoid registering same event handlers on the same feature multiple times if (feature.get('table-events')) { return; } - // @todo: track across multiple tables - var self = this; - // Update interaction buttons when "hidden" and "dirty" values change feature.on(ol.ObjectEventType.PROPERTYCHANGE, function(event) { var feature = event.target; var tr = feature && feature.get('table-row'); if (tr) { switch (event.key) { default: - // do nothing break; case 'dirty': - // Page to feature on initial modification if (feature.get('dirty')) { self.showRow(tr); } @@ -113,7 +147,6 @@ break; } - if (event.key === 'dirty' && feature.get('dirty')) { self.showRow(tr); } @@ -122,34 +155,28 @@ }); feature.set('table-events', true); }, - /** - * @param {Object} feature - * @param {Boolean} show to automatically update pagination - */ + refreshRow: function(feature, show) { Mapbender.DataManager.TableRenderer.prototype.refreshRow.apply(this, arguments); - var tr = feature && feature.get('table-row'); if (tr) { this.updateButtonStates_(tr, feature); } }, + updateButtonStates_: function(tr, feature) { var hidden = !!feature.get('hidden'); - var tooltip; - if (hidden) { - tooltip = Mapbender.trans('mb.digitizer.feature.visibility.toggleon') - } else { - tooltip = Mapbender.trans('mb.digitizer.feature.visibility.toggleoff') - } + var tooltip = hidden + ? Mapbender.trans('mb.digitizer.feature.visibility.toggleon') + : Mapbender.trans('mb.digitizer.feature.visibility.toggleoff'); var $visibilityButton = $('.-fn-toggle-visibility', tr); - // Support both icon class ON button (legacy misuse) and icon markup INSIDE button transparently + // Handle icon class toggling var $visibilityIcon = $visibilityButton.children().add($visibilityButton).filter('.fa'); $visibilityIcon .toggleClass('fa-eye-slash', hidden) .toggleClass('fa-eye', !hidden) - .attr('title', tooltip) - ; + .attr('title', tooltip); + $('.-fn-save', tr).prop('disabled', !feature.get('dirty')); if (!!feature.get('dirty')) { diff --git a/src/Mapbender/DigitizerBundle/Resources/public/mapbender.element.digitizer.js b/src/Mapbender/DigitizerBundle/Resources/public/mapbender.element.digitizer.js index 711e01d9..0fdd4919 100644 --- a/src/Mapbender/DigitizerBundle/Resources/public/mapbender.element.digitizer.js +++ b/src/Mapbender/DigitizerBundle/Resources/public/mapbender.element.digitizer.js @@ -422,7 +422,8 @@ schema.allowDigitize && schema.allowEdit && '-fn-save', schema.copy && schema.copy.enable && '-fn-copy', schema.allowCustomStyle && '-fn-edit-style', - schema.allowChangeVisibility && '-fn-toggle-visibility' + schema.allowChangeVisibility && '-fn-toggle-visibility', + schema.allowGeometryExport && '-fn-check-for-export' ]); return codes.filter(function(x) { return !!x; }); }, @@ -478,6 +479,7 @@ return this._super(schema).then(function(features) { self.queuedRefresh_[schema.schemaName] = false; self.renderer.replaceFeatures(schema, features); + self.tableRenderer.selectedFeatures = []; return features; }); }, @@ -796,6 +798,23 @@ adjustStyle: function(schema, feature) { }, + createExportData: function(geojson) { + + var geojsonstring = JSON.stringify(geojson); + this._downloadBlob(geojsonstring, 'application/json', 'export.geojson'); + }, + + _downloadBlob: function(data, mimeType, filename) { + let blob = (data instanceof Blob) ? data : new Blob([data], { type: mimeType }); + let url = URL.createObjectURL(blob); + let tempLink = document.createElement('a'); + tempLink.href = url; + tempLink.download = filename; + document.body.appendChild(tempLink); + tempLink.click(); + document.body.removeChild(tempLink); + }, + __formatting_dummy: null }); diff --git a/src/Mapbender/DigitizerBundle/Resources/public/toolset.js b/src/Mapbender/DigitizerBundle/Resources/public/toolset.js index df6cbac7..6cde1970 100644 --- a/src/Mapbender/DigitizerBundle/Resources/public/toolset.js +++ b/src/Mapbender/DigitizerBundle/Resources/public/toolset.js @@ -71,7 +71,7 @@ return (!seen[toolSpec.type]) && self.checkToolAccess_(subSchemas[s], toolSpec.type) && -1 !== validNames.indexOf(toolSpec.type) - ; + ; }); for (var t = 0; t < subSchemaTools.length; ++t) { var toolSpec = subSchemaTools[t]; @@ -102,10 +102,22 @@ .append($icon) .data({ schema: btnSchema - }) - ; + }); buttons.push($button); } + + if (schema.allowGeometryExport || this.owner.expandCombination(schema).some(subSchema => subSchema.allowGeometryExport)) { + var $exportBtnIcon = $('').addClass('fa fa-download'); + var $exportBtn = $(' @@ -17,6 +21,7 @@ title="{{ 'mb.digitizer.feature.save.title' | trans }}"> {{- block('delete_button') -}} {%- endblock -%} + {%- block toolset -%}
@@ -24,6 +29,7 @@
{{- parent() -}} {%- endblock -%} + {%- block toolset_buttons -%} {{- parent() -}} {%- endblock -%} + {%- block toolset_groups -%} {{- parent() -}}
From 69884ab1c32ff52c9d3c1704c6f6564754de50ef Mon Sep 17 00:00:00 2001 From: Felix Rauch Date: Mon, 17 Feb 2025 15:33:58 +0100 Subject: [PATCH 02/11] Update CHANGELOG.md --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 697d1d89..c7e7656d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## next release +* Enable export of geometries as geojson by using the attribute "allowGeometryExport" (PR#137) + + ## 2.0.3 * updateMultiple now returns a Promise; TableRenderer includes addOrRefreshRow for automatic feature handling post-AJAX call; unique namespace ID for unsaved features enables updates post-AJAX; oldGeometry set after successful updateMultiple call. ([PR#133](https://github.com/mapbender/mapbender-digitizer/pull/133)) * prevent Draw Donut On Non-Digitizer Features ([PR#120](https://github.com/mapbender/mapbender-digitizer/pull/120)) From 340e5803a8c03874dff685a8a4049ebe6f47b2bb Mon Sep 17 00:00:00 2001 From: Felix Rauch Date: Mon, 17 Feb 2025 15:34:38 +0100 Subject: [PATCH 03/11] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c7e7656d..fa85c1d3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,5 @@ ## next release -* Enable export of geometries as geojson by using the attribute "allowGeometryExport" (PR#137) +* Enable export of geometries as geojson by using the attribute "allowGeometryExport" (PR#137 (https://github.com/mapbender/mapbender-digitizer/pull/137)) ## 2.0.3 From 37d3062233268d06e5d01cdf99ef17f0e5ed3c41 Mon Sep 17 00:00:00 2001 From: Thorsten Hack Date: Tue, 18 Feb 2025 18:30:04 +0100 Subject: [PATCH 04/11] Fix link in changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fa85c1d3..b8861ff9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,5 @@ ## next release -* Enable export of geometries as geojson by using the attribute "allowGeometryExport" (PR#137 (https://github.com/mapbender/mapbender-digitizer/pull/137)) +* Enable export of geometries as geojson by using the attribute "allowGeometryExport" ([PR#137](https://github.com/mapbender/mapbender-digitizer/pull/137)) ## 2.0.3 From 8019482ad94937d2b7ea395ac6a9faa360f60e7d Mon Sep 17 00:00:00 2001 From: Thorsten Hack Date: Tue, 18 Feb 2025 18:41:05 +0100 Subject: [PATCH 05/11] Add Font Awesome 6 styling for sort icons --- .../Resources/styles/dataManager.element.scss | 36 ++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/src/Mapbender/DataManagerBundle/Resources/styles/dataManager.element.scss b/src/Mapbender/DataManagerBundle/Resources/styles/dataManager.element.scss index 62cb2b92..82123a97 100644 --- a/src/Mapbender/DataManagerBundle/Resources/styles/dataManager.element.scss +++ b/src/Mapbender/DataManagerBundle/Resources/styles/dataManager.element.scss @@ -157,7 +157,7 @@ $buttonActiveTextColor: #fff !default; .ui-dialog-titlebar-close { &:before { content: "\f00d"; // =.fa-times - font-family: "FontAwesome", "Font Awesome 5 Free", "Font Awesome 5 Pro"; + font-family: "FontAwesome", "Font Awesome 6 Free", "Font Awesome 6 Pro", "Font Awesome 5 Free", "Font Awesome 5 Pro"; } .ui-button-icon { @@ -334,3 +334,37 @@ $buttonActiveTextColor: #fff !default; margin-right: 0.5em; } } + + +.data-manager-dialog, .mb-element-data-manager { + .sorting, .sorting_asc, .sorting_desc { + cursor: pointer; + } + + .sorting:before, .sorting_asc:before, .sorting_desc:after { + display: inline-block !important; + min-width: 1.4em; // Prevent width change on sorting state change + font-family: var(--fa-style-family, "Font Awesome 6 Free"); + font-weight: var(--fa-style, 900); + line-height: 1; + transform: translateY(1px); + right: 1em !important; + } + + .sorting:before { + content: "\f0dc" !important; // = .fa-sort / .fa-unsorted + opacity: 1 !important; + } + + .sorting_asc:before { + content: "\f160" !important; // = .fa-sort-amount-asc + } + + .sorting_desc:after { + content: "\f161" !important; // = .fa-sort-amount-desc + } + + .sorting:after, .sorting_asc:after, .sorting_desc:before { + content: "" !important; + } +} From 6395c08dbd7bb5f76f35ad7a44c1cc2b870f3664 Mon Sep 17 00:00:00 2001 From: frauch Date: Wed, 19 Feb 2025 11:32:24 +0100 Subject: [PATCH 06/11] adjust layout of export checkbox --- .../DigitizerBundle/Resources/public/TableRenderer.js | 6 +++--- .../Resources/public/mapbender.element.digitizer.js | 2 +- .../Resources/views/Element/Digitizer.html.twig | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Mapbender/DigitizerBundle/Resources/public/TableRenderer.js b/src/Mapbender/DigitizerBundle/Resources/public/TableRenderer.js index 056724b4..22747dcb 100644 --- a/src/Mapbender/DigitizerBundle/Resources/public/TableRenderer.js +++ b/src/Mapbender/DigitizerBundle/Resources/public/TableRenderer.js @@ -50,7 +50,7 @@ // Existing buttons - this.registerButtonEvents(schema, $table); + this.registerButtonEvents(schema, $table); }, registerButtonEvents: function(schema, $table) { @@ -66,10 +66,10 @@ var selected = (idx >= 0); if (selected) { self.selectedFeatures.splice(idx, 1); - $('i.fa', this).removeClass('fa-check-square-o').addClass('fa-square-o'); + $('i', this).removeClass('fa-check-square').addClass('fa-square'); } else { self.selectedFeatures.push(feature); - $('i.fa', this).removeClass('fa-square-o').addClass('fa-check-square-o'); + $('i', this).removeClass('fa-square').addClass('fa-check-square'); } }); diff --git a/src/Mapbender/DigitizerBundle/Resources/public/mapbender.element.digitizer.js b/src/Mapbender/DigitizerBundle/Resources/public/mapbender.element.digitizer.js index 0fdd4919..af138b46 100644 --- a/src/Mapbender/DigitizerBundle/Resources/public/mapbender.element.digitizer.js +++ b/src/Mapbender/DigitizerBundle/Resources/public/mapbender.element.digitizer.js @@ -799,7 +799,7 @@ }, createExportData: function(geojson) { - + var geojsonstring = JSON.stringify(geojson); this._downloadBlob(geojsonstring, 'application/json', 'export.geojson'); }, diff --git a/src/Mapbender/DigitizerBundle/Resources/views/Element/Digitizer.html.twig b/src/Mapbender/DigitizerBundle/Resources/views/Element/Digitizer.html.twig index 765f6f62..befad491 100644 --- a/src/Mapbender/DigitizerBundle/Resources/views/Element/Digitizer.html.twig +++ b/src/Mapbender/DigitizerBundle/Resources/views/Element/Digitizer.html.twig @@ -1,8 +1,8 @@ {%- extends '@MapbenderDataManager/Element/DataManager.html.twig' -%} {%- block table_buttons -%} - +
{%- endblock -%} From 1ed4631ad1b63e7a473cefade0f6061b1f90c73e Mon Sep 17 00:00:00 2001 From: frauch Date: Wed, 19 Feb 2025 14:30:51 +0100 Subject: [PATCH 09/11] remove trailing tbody > tr --- .../DigitizerBundle/Resources/public/TableRenderer.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Mapbender/DigitizerBundle/Resources/public/TableRenderer.js b/src/Mapbender/DigitizerBundle/Resources/public/TableRenderer.js index 22747dcb..4bd988fa 100644 --- a/src/Mapbender/DigitizerBundle/Resources/public/TableRenderer.js +++ b/src/Mapbender/DigitizerBundle/Resources/public/TableRenderer.js @@ -56,7 +56,7 @@ registerButtonEvents: function(schema, $table) { var self = this; - $table.on('click', 'tbody > tr .-fn-check-for-export', function(e) { + $table.on('click', '.-fn-check-for-export', function(e) { e.stopPropagation(); var $row = $(this).closest('tr'); var feature = $row.data('item'); @@ -74,7 +74,7 @@ }); // Save - $table.on('click', 'tbody > tr .-fn-save', function(event) { + $table.on('click', '.-fn-save', function(event) { event.stopPropagation(); var data = $(this).closest('tr').data(); if (data.schema && data.item) { @@ -86,7 +86,7 @@ }); // Toggle visibility - $table.on('click', 'tbody > tr .-fn-toggle-visibility', function(event) { + $table.on('click', '.-fn-toggle-visibility', function(event) { event.stopPropagation(); var $tr = $(this).closest('tr'); var feature = $tr.data().item; @@ -95,7 +95,7 @@ }); // Edit style - $table.on('click', 'tbody > tr .-fn-edit-style', function(event) { + $table.on('click', '.-fn-edit-style', function(event) { event.stopPropagation(); var data = $(this).closest('tr').data(); if (data.schema && data.item) { @@ -104,7 +104,7 @@ }); // Copy - $table.on('click', 'tbody > tr .-fn-copy', function(event) { + $table.on('click', '.-fn-copy', function(event) { event.stopPropagation(); var data = $(this).closest('tr').data(); if (data.schema && data.item) { From fb63adc92d2a910a620f3b3c9e7fad0bf5bb9cf8 Mon Sep 17 00:00:00 2001 From: frauch Date: Wed, 19 Feb 2025 14:33:26 +0100 Subject: [PATCH 10/11] add Translations --- .../DigitizerBundle/Resources/translations/messages.en.yaml | 3 +++ .../DigitizerBundle/Resources/translations/messages.es.yaml | 3 +++ .../DigitizerBundle/Resources/translations/messages.it.yaml | 3 +++ .../DigitizerBundle/Resources/translations/messages.pt.yaml | 5 ++++- .../DigitizerBundle/Resources/translations/messages.ru.yaml | 3 +++ 5 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/Mapbender/DigitizerBundle/Resources/translations/messages.en.yaml b/src/Mapbender/DigitizerBundle/Resources/translations/messages.en.yaml index e95cc3b3..91a00666 100644 --- a/src/Mapbender/DigitizerBundle/Resources/translations/messages.en.yaml +++ b/src/Mapbender/DigitizerBundle/Resources/translations/messages.en.yaml @@ -13,6 +13,9 @@ mb.digitizer: revert.geometry: Revert geometry changes intersection.error: Self-intersection in geometry not allowed feature: + export: + check: 'Select for export' + notFound: 'No objects selected for export' remove: title: 'Remove feature' zoomTo: 'Zoom to feature' diff --git a/src/Mapbender/DigitizerBundle/Resources/translations/messages.es.yaml b/src/Mapbender/DigitizerBundle/Resources/translations/messages.es.yaml index acb57db2..721c37b9 100644 --- a/src/Mapbender/DigitizerBundle/Resources/translations/messages.es.yaml +++ b/src/Mapbender/DigitizerBundle/Resources/translations/messages.es.yaml @@ -12,6 +12,9 @@ mb.digitizer: edit.geometry: Editar geometrías revert.geometry: Revertir los cambios en la geometría feature: + export: + check: 'Seleccionar para exportar' + notFound: 'No se han seleccionado objetos para exportar' remove: title: 'Eliminar' zoomTo: 'Zoom al objeto ' diff --git a/src/Mapbender/DigitizerBundle/Resources/translations/messages.it.yaml b/src/Mapbender/DigitizerBundle/Resources/translations/messages.it.yaml index d0baa37a..f2d99b10 100644 --- a/src/Mapbender/DigitizerBundle/Resources/translations/messages.it.yaml +++ b/src/Mapbender/DigitizerBundle/Resources/translations/messages.it.yaml @@ -12,6 +12,9 @@ mb.digitizer: edit.geometry: Modifica geometria revert.geometry: Annulla modifica geometria feature: + export: + check: 'Seleziona per esportare' + notFound: 'Nessun oggetto selezionato per l''esportazione' remove: title: 'Rimuovi' zoomTo: 'Ingrandisci' diff --git a/src/Mapbender/DigitizerBundle/Resources/translations/messages.pt.yaml b/src/Mapbender/DigitizerBundle/Resources/translations/messages.pt.yaml index 401c2ba5..bfe524f4 100644 --- a/src/Mapbender/DigitizerBundle/Resources/translations/messages.pt.yaml +++ b/src/Mapbender/DigitizerBundle/Resources/translations/messages.pt.yaml @@ -12,6 +12,9 @@ mb.digitizer: revert.geometry: Reverter alteração na geometria intersection.error: Geometria inválida feature: + export: + check: Selecionar para exportar + notFound: Nenhum objeto selecionado para exportar remove: title: Excluir zoomTo: Aproximar @@ -46,7 +49,7 @@ mb.digitizer: opacity: Opacidade pointRadius: Tamanho do ponto (pixels) strokeColor: Cor da linha - strokeWidth: Espessura da linha + strokeWidth: Espessura da linha lineCap: Extremidades da linha round: Arredondado square: Quadrado diff --git a/src/Mapbender/DigitizerBundle/Resources/translations/messages.ru.yaml b/src/Mapbender/DigitizerBundle/Resources/translations/messages.ru.yaml index b34c0927..3e5307b4 100644 --- a/src/Mapbender/DigitizerBundle/Resources/translations/messages.ru.yaml +++ b/src/Mapbender/DigitizerBundle/Resources/translations/messages.ru.yaml @@ -6,6 +6,9 @@ mb.digitizer: delete: Удалить save: Сохранить feature: + export: + check: 'Выбрать для экспорта' + notFound: 'Объекты для экспорта не выбраны' remove: title: 'Удалить' zoomTo: 'Zoom to' From fcd2ce8a6d33acaeb49534e5f5d8b5d4c6322eed Mon Sep 17 00:00:00 2001 From: frauch Date: Wed, 19 Feb 2025 14:35:23 +0100 Subject: [PATCH 11/11] fix two missing translations in russian --- .../DigitizerBundle/Resources/translations/messages.ru.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Mapbender/DigitizerBundle/Resources/translations/messages.ru.yaml b/src/Mapbender/DigitizerBundle/Resources/translations/messages.ru.yaml index 3e5307b4..8c6fc22d 100644 --- a/src/Mapbender/DigitizerBundle/Resources/translations/messages.ru.yaml +++ b/src/Mapbender/DigitizerBundle/Resources/translations/messages.ru.yaml @@ -11,12 +11,12 @@ mb.digitizer: notFound: 'Объекты для экспорта не выбраны' remove: title: 'Удалить' - zoomTo: 'Zoom to' + zoomTo: 'Приблизить к объекту' edit: 'Редактировать' attributes: 'Атрибуты' save: title: 'Сохранить' - print: 'Print' + print: 'Печать' class: title: Сбор данных (Digitizer) description: Сбор и редактирование данных