From 095776719ce53d08041fdd4269121405886f1bd6 Mon Sep 17 00:00:00 2001 From: MV88 Date: Wed, 28 Jun 2023 16:04:37 +0200 Subject: [PATCH 01/13] #9254 Template Viewer image parametric parsing --- .../fragments/settings/FeatureInfoEditor.jsx | 148 +++++++++--------- .../TOC/fragments/settings/MarkDownImage.jsx | 64 ++++++++ .../data/identify/viewers/TemplateViewer.jsx | 18 ++- .../settings/CompactRichTextEditor.jsx | 11 +- web/client/themes/default/less/map-views.less | 4 +- 5 files changed, 165 insertions(+), 80 deletions(-) create mode 100644 web/client/components/TOC/fragments/settings/MarkDownImage.jsx diff --git a/web/client/components/TOC/fragments/settings/FeatureInfoEditor.jsx b/web/client/components/TOC/fragments/settings/FeatureInfoEditor.jsx index 00a5005a43..faca2c3036 100644 --- a/web/client/components/TOC/fragments/settings/FeatureInfoEditor.jsx +++ b/web/client/components/TOC/fragments/settings/FeatureInfoEditor.jsx @@ -6,97 +6,99 @@ * LICENSE file in the root directory of this source tree. */ +import React, { useState } from 'react'; import PropTypes from 'prop-types'; -import React from 'react'; -import ReactQuill from '../../../../libs/quill/react-quill-suspense'; import Message from '../../../I18N/Message'; import Portal from '../../../misc/Portal'; import ResizableModal from '../../../misc/ResizableModal'; +import CompactRichTextEditor from '../../../mapviews/settings/CompactRichTextEditor'; +import withDebounceOnCallback from '../../../misc/enhancers/withDebounceOnCallback'; +import { htmlToDraftJSEditorState, draftJSEditorStateToHtml } from '../../../../utils/EditorUtils'; +import MarkDownImage from './MarkDownImage'; +const DescriptionEditor = withDebounceOnCallback('onEditorStateChange', 'editorState')(CompactRichTextEditor); /** * Component for rendering FeatureInfoEditor a modal editor to modify format template * @memberof components.TOC.fragments.settings * @name FeatureInfoEditor * @class - * @prop {object} element data of the current selected node - * @prop {bool} showEditor show/hide modal - * @prop {funciotn} onShowEditor called when click on close buttons - * @prop {function} onChange called when text in editor has been changed - * @prop {bool} enableIFrameModule enable iframe in editor, default true + * @prop {Object} element data of the current selected node + * @prop {Boolean} showEditor show/hide modal + * @prop {Function} onShowEditor called when click on close buttons + * @prop {Function} onChange called when text in editor has been changed + * @prop {Boolean} enableIFrameModule enable iframe in editor, default true */ -class FeatureInfoEditor extends React.Component { +const FeatureInfoEditor = ({ + element, + showEditor, + onShowEditor, + onChange, + enableIFrameModule +}) => { - static propTypes = { - showEditor: PropTypes.bool, - element: PropTypes.object, - onChange: PropTypes.func, - onShowEditor: PropTypes.func, - enableIFrameModule: PropTypes.bool, - onReady: PropTypes.func + const [editorState, setEditorState] = useState(htmlToDraftJSEditorState(element?.featureInfo?.template || '')); + const onClose = () => { + onShowEditor(!showEditor); + onChange('featureInfo', { + ...(element && element.featureInfo || {}), + template: draftJSEditorStateToHtml(editorState) + }); }; + return ( + + } + size="lg" + showFullscreen + clickOutEnabled={false} + onClose={onClose} + buttons={[ + { + bsStyle: 'primary', + text: , + onClick: onClose + } + ]}> +
+ { + const previousHTML = draftJSEditorStateToHtml(editorState); + const newHTML = draftJSEditorStateToHtml(newEditorState); + if (newHTML !== previousHTML) { + onChange({ template: draftJSEditorStateToHtml(newEditorState) }); + setEditorState(newEditorState); + } + }} + toolbarCustomButtons={[]} + /> +
+
+
+ ); - static defaultProps = { - showEditor: false, - element: {}, - enableIFrameModule: false, - onChange: () => {}, - onShowEditor: () => {} - }; +}; - state = { - template: ' ' - }; +FeatureInfoEditor.propTypes = { + showEditor: PropTypes.bool, + element: PropTypes.object, + onChange: PropTypes.func, + onShowEditor: PropTypes.func, + enableIFrameModule: PropTypes.bool +}; - UNSAFE_componentWillMount() { - this.setState({ - template: this.props.element && this.props.element.featureInfo && this.props.element.featureInfo.template || ' ' - }); - } +FeatureInfoEditor.defaultProps = { + showEditor: false, + element: {}, + enableIFrameModule: false, + onChange: () => {}, + onShowEditor: () => {} +}; - render() { - const { showEditor, enableIFrameModule = true, onReady = () => {} } = this.props; - return ( - - } - size="lg" - showFullscreen - clickOutEnabled={false} - onClose={() => this.close()} - buttons={[ - { - bsStyle: 'primary', - text: , - onClick: () => this.close() - } - ]}> -
- { if (quill) { this.quill = quill; onReady(quill); } } } - modules={(toolbarConfig) => enableIFrameModule ? { - resizeModule: {}, - toolbar: toolbarConfig - } : {}} - defaultValue={this.state.template} - onChange={template => this.setState({ template })}/> -
-
-
- ); - } - - close = () => { - this.props.onShowEditor(!this.props.showEditor); - this.props.onChange('featureInfo', { - ...(this.props.element && this.props.element.featureInfo || {}), - template: this.state.template - }); - }; -} export default FeatureInfoEditor; diff --git a/web/client/components/TOC/fragments/settings/MarkDownImage.jsx b/web/client/components/TOC/fragments/settings/MarkDownImage.jsx new file mode 100644 index 0000000000..950d1cabf8 --- /dev/null +++ b/web/client/components/TOC/fragments/settings/MarkDownImage.jsx @@ -0,0 +1,64 @@ +/* + * Copyright 2023, GeoSolutions Sas. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +import React from 'react'; +import PropTypes from 'prop-types'; +import { EditorState, Modifier } from 'draft-js'; +import {Glyphicon, Tooltip, OverlayTrigger} from 'react-bootstrap'; + +/** + * Component used in the react-draft-wysiwyg for wrapping the selected text with + * @param {Object} editorState state object of the draft-js lib + * @param {Function} onChange triggered to update text content change event in the editor + */ +const MarkDownImage = ({ + editorState, + onChange +}) => { + + const onClick = () => { + + const selectionState = editorState.getSelection(); + const anchorKey = selectionState.getAnchorKey(); + const currentContent = editorState.getCurrentContent(); + const currentContentBlock = currentContent.getBlockForKey(anchorKey); + const start = selectionState.getStartOffset(); + const end = selectionState.getEndOffset(); + const selectedText = currentContentBlock.getText().slice(start, end); + const contentState = Modifier.replaceText( + currentContent, + selectionState, + `![image](${selectedText})`, + editorState.getCurrentInlineStyle() + ); + onChange(EditorState.push(editorState, contentState, 'insert-characters')); + }; + const tooltip = ( + { + "Transform selected text into Markdown Url ![]()" + // [ ] localize + } + ); + + return ( + +
+
+ +
+
+
+ ); +}; + +export default MarkDownImage; + +MarkDownImage.propTypes = { + editorState: PropTypes.object, + onChange: PropTypes.func +}; diff --git a/web/client/components/data/identify/viewers/TemplateViewer.jsx b/web/client/components/data/identify/viewers/TemplateViewer.jsx index eba8fa2db7..55338ae033 100644 --- a/web/client/components/data/identify/viewers/TemplateViewer.jsx +++ b/web/client/components/data/identify/viewers/TemplateViewer.jsx @@ -7,19 +7,24 @@ */ import React from 'react'; - +import MarkdownIt from 'markdown-it'; +import unescape from 'lodash/unescape'; import { template } from 'lodash'; +import PropTypes from 'prop-types'; + import { getCleanTemplate } from '../../../../utils/TemplateUtils'; import HtmlRenderer from '../../../misc/HtmlRenderer'; import Message from '../../../I18N/Message'; -export default ({layer = {}, response}) => ( +const md = new MarkdownIt().enable('image'); + +const TemplateViewer = ({layer = {}, response}) => (
{response.features.map((feature, i) => { const cleanTemplate = getCleanTemplate(layer.featureInfo && layer.featureInfo.template || '', feature, /\$\{.*?\}/g, 2, 1); let html = ""; try { - html = template(cleanTemplate)(feature); + html = unescape(md.render(template(cleanTemplate)(feature))); } catch (e) { console.error(e); return (
@@ -33,3 +38,10 @@ export default ({layer = {}, response}) => ( )}
); + +export default TemplateViewer; + +TemplateViewer.propTypes = { + response: PropTypes.object, + layer: PropTypes.object +}; diff --git a/web/client/components/mapviews/settings/CompactRichTextEditor.jsx b/web/client/components/mapviews/settings/CompactRichTextEditor.jsx index c0d3ec9ab7..b96fd7ec3d 100644 --- a/web/client/components/mapviews/settings/CompactRichTextEditor.jsx +++ b/web/client/components/mapviews/settings/CompactRichTextEditor.jsx @@ -6,11 +6,12 @@ * LICENSE file in the root directory of this source tree. */ +import PropTypes from 'prop-types'; import React from 'react'; import 'react-draft-wysiwyg/dist/react-draft-wysiwyg.css'; import { Editor } from 'react-draft-wysiwyg'; -import { DEFAULT_FONT_FAMILIES } from '../../../utils/GeoStoryUtils'; import embed from 'embed-video'; +import { DEFAULT_FONT_FAMILIES } from '../../../utils/GeoStoryUtils'; export const resizeBase64Image = (src, options) => { return new Promise((resolve, reject) => { @@ -43,6 +44,7 @@ export const resizeBase64Image = (src, options) => { function CompactRichTextEditor({ wrapperClassName = 'ms-compact-text-editor', + toolbarOptions, ...props }) { @@ -52,7 +54,7 @@ function CompactRichTextEditor({ editorStyle={{ minHeight: 200 }} wrapperClassName={wrapperClassName} toolbar={{ - options: ['fontFamily', 'blockType', 'inline', 'textAlign', 'list', 'link', 'colorPicker', 'remove', 'image', 'embedded'], + options: toolbarOptions || ['fontFamily', 'blockType', 'inline', 'textAlign', 'list', 'link', 'colorPicker', 'remove', 'image', 'embedded'], image: { urlEnabled: true, // disable the upload at the moment @@ -123,3 +125,8 @@ function CompactRichTextEditor({ } export default CompactRichTextEditor; + +CompactRichTextEditor.propTypes = { + toolbarOptions: PropTypes.array, + wrapperClassName: PropTypes.string +}; diff --git a/web/client/themes/default/less/map-views.less b/web/client/themes/default/less/map-views.less index b354ba823f..364858160f 100644 --- a/web/client/themes/default/less/map-views.less +++ b/web/client/themes/default/less/map-views.less @@ -17,7 +17,7 @@ .border-color-var(@theme-vars[main-border-color]); } } - + .ms-map-views { .ms-map-views-wrapper { .background-color-var(@theme-vars[main-bg]); @@ -90,9 +90,9 @@ .rdw-editor-toolbar { position: sticky; z-index: 20; - top: 30px; } .rdw-editor-main { + height: auto; padding: 0 4px; iframe { aspect-ratio: 16 / 9; From 19196e3f42db8ee3fb9632dda74b519abf05a59e Mon Sep 17 00:00:00 2001 From: MV88 Date: Wed, 28 Jun 2023 16:05:06 +0200 Subject: [PATCH 02/13] add markdown-it lib --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 3ef95b4243..5c882511d5 100644 --- a/package.json +++ b/package.json @@ -210,6 +210,7 @@ "leaflet.nontiledlayer": "1.0.7", "lodash": "4.17.21", "lrucache": "1.0.3", + "markdown-it": "13.0.1", "md5": "2.3.0", "moment": "2.21.0", "node-geo-distance": "1.2.0", From 9e1ee1d7b2c073ab713668025e7dbe929b96c643 Mon Sep 17 00:00:00 2001 From: MV88 Date: Wed, 28 Jun 2023 16:31:27 +0200 Subject: [PATCH 03/13] fix test --- .../__tests__/FeatureInfoEditor-test.jsx | 68 ------------------- 1 file changed, 68 deletions(-) diff --git a/web/client/components/TOC/fragments/settings/__tests__/FeatureInfoEditor-test.jsx b/web/client/components/TOC/fragments/settings/__tests__/FeatureInfoEditor-test.jsx index 95bdd42b4f..5f4f2ecf17 100644 --- a/web/client/components/TOC/fragments/settings/__tests__/FeatureInfoEditor-test.jsx +++ b/web/client/components/TOC/fragments/settings/__tests__/FeatureInfoEditor-test.jsx @@ -9,7 +9,6 @@ import expect from 'expect'; import React from 'react'; import ReactDOM from 'react-dom'; -import TestUtils from 'react-dom/test-utils'; import FeatureInfoEditor from '../FeatureInfoEditor'; @@ -31,71 +30,4 @@ describe("test FeatureInfoEditor", () => { expect(modalEditor.length).toBe(1); }); - it('test rendering close x', (done) => { - - const template = '

html

'; - - ReactDOM.render( { - try { - // edit template - const editor = quill.getEditor(); - editor.clipboard.dangerouslyPasteHTML(template); - const btns = document.getElementsByClassName('ms-header-btn'); - expect(btns.length).toBe(2); - TestUtils.Simulate.click(btns[1]); - } catch (e) { - done(e); - } - }} - onShowEditor={(value) => { - expect(value).toBe(false); - }} - onChange={(key, value) => { - if (value.template === template) { - expect(key).toBe('featureInfo'); - expect(value).toEqual({ template }); - done(); - } - }} - showEditor/>, document.getElementById("container")); - - const modalEditor = document.getElementsByClassName('ms-resizable-modal'); - expect(modalEditor.length).toBe(1); - - }); - - it('test rendering close button', (done) => { - - const template = '

html

'; - - ReactDOM.render( { - try { - // edit template - const editor = quill.getEditor(); - editor.clipboard.dangerouslyPasteHTML(template); - const btns = document.getElementsByClassName('btn'); - expect(btns.length).toBe(1); - TestUtils.Simulate.click(btns[0]); - } catch (e) { - done(e); - } - }} - onShowEditor={(value) => { - expect(value).toBe(false); - }} - onChange={(key, value) => { - if (value.template === template) { - expect(key).toBe('featureInfo'); - expect(value).toEqual({ template }); - done(); - } - }} - showEditor - />, document.getElementById("container")); - const modalEditor = document.getElementsByClassName('ms-resizable-modal'); - expect(modalEditor.length).toBe(1); - }); - }); From 623a6dc96a30753b728438bedc1ad6ea2e09a42e Mon Sep 17 00:00:00 2001 From: MV88 Date: Thu, 29 Jun 2023 12:29:54 +0200 Subject: [PATCH 04/13] fix a non localized message --- .../components/TOC/fragments/settings/MarkDownImage.jsx | 6 ++---- web/client/translations/data.de-DE.json | 3 ++- web/client/translations/data.en-US.json | 3 ++- web/client/translations/data.es-ES.json | 3 ++- web/client/translations/data.fr-FR.json | 3 ++- web/client/translations/data.it-IT.json | 3 ++- 6 files changed, 12 insertions(+), 9 deletions(-) diff --git a/web/client/components/TOC/fragments/settings/MarkDownImage.jsx b/web/client/components/TOC/fragments/settings/MarkDownImage.jsx index 950d1cabf8..58dfab4768 100644 --- a/web/client/components/TOC/fragments/settings/MarkDownImage.jsx +++ b/web/client/components/TOC/fragments/settings/MarkDownImage.jsx @@ -10,6 +10,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import { EditorState, Modifier } from 'draft-js'; import {Glyphicon, Tooltip, OverlayTrigger} from 'react-bootstrap'; +import Message from '../../../I18N/Message'; /** * Component used in the react-draft-wysiwyg for wrapping the selected text with @@ -39,10 +40,7 @@ const MarkDownImage = ({ onChange(EditorState.push(editorState, contentState, 'insert-characters')); }; const tooltip = ( - { - "Transform selected text into Markdown Url ![]()" - // [ ] localize - } + ); return ( diff --git a/web/client/translations/data.de-DE.json b/web/client/translations/data.de-DE.json index 60ea2a1699..12b35e1491 100644 --- a/web/client/translations/data.de-DE.json +++ b/web/client/translations/data.de-DE.json @@ -166,7 +166,8 @@ "bottom": "Unten", "top": "Oben", "editLayerName": "Ebenennamen bearbeiten", - "confirmLayerName": "Bestätigen Sie die Änderung des Ebenennamens" + "confirmLayerName": "Bestätigen Sie die Änderung des Ebenennamens", + "markDownImage": "Ausgewählten Text in Markdown-URL umwandeln ![]()" }, "legendOptions": { "title": "Legende", diff --git a/web/client/translations/data.en-US.json b/web/client/translations/data.en-US.json index b059ef8663..57b79c37e7 100644 --- a/web/client/translations/data.en-US.json +++ b/web/client/translations/data.en-US.json @@ -166,7 +166,8 @@ "bottom": "Bottom", "top": "Top", "editLayerName": "Edit layer name", - "confirmLayerName": "Confirm layer name change" + "confirmLayerName": "Confirm layer name change", + "markDownImage": "Transform selected text into Markdown Url ![]()" }, "legendOptions": { "title": "Legend", diff --git a/web/client/translations/data.es-ES.json b/web/client/translations/data.es-ES.json index 46a21e669d..8e91d23904 100644 --- a/web/client/translations/data.es-ES.json +++ b/web/client/translations/data.es-ES.json @@ -163,7 +163,8 @@ "bottom": "Bottom", "top": "Cima", "editLayerName": "Editar el nombre de la capa", - "confirmLayerName": "Confirmar cambio de nombre de capa" + "confirmLayerName": "Confirmar cambio de nombre de capa", + "markDownImage": "Transformar texto seleccionado en Markdown Url ![]()" }, "legendOptions": { "title": "Leyenda", diff --git a/web/client/translations/data.fr-FR.json b/web/client/translations/data.fr-FR.json index 069f16d956..27ed053243 100644 --- a/web/client/translations/data.fr-FR.json +++ b/web/client/translations/data.fr-FR.json @@ -166,7 +166,8 @@ "bottom": "Bas", "top": "Haut", "editLayerName": "Modifier le nom du calque", - "confirmLayerName": "Confirmer le changement de nom du calque" + "confirmLayerName": "Confirmer le changement de nom du calque", + "markDownImage": "Transformer le texte sélectionné en URL Markdown ![]()" }, "legendOptions": { "title": "Légende", diff --git a/web/client/translations/data.it-IT.json b/web/client/translations/data.it-IT.json index e9e39b77c3..bedf516be5 100644 --- a/web/client/translations/data.it-IT.json +++ b/web/client/translations/data.it-IT.json @@ -166,7 +166,8 @@ "bottom": "Sotto", "top": "Sopra", "editLayerName": "Modifica il nome del livello", - "confirmLayerName": "Conferma la modifica del nome del livello" + "confirmLayerName": "Conferma la modifica del nome del livello", + "markDownImage": "Trasforma il testo seleziona in un MarkDown Url ![]()" }, "legendOptions": { "title": "Legenda", From c6d16a74c5abfcd82f24e02ad75b7678ef85aad6 Mon Sep 17 00:00:00 2001 From: MV88 Date: Mon, 3 Jul 2023 16:15:02 +0200 Subject: [PATCH 05/13] Clean up of markdown rule --- package.json | 1 - .../fragments/settings/FeatureInfoEditor.jsx | 3 - .../TOC/fragments/settings/MarkDownImage.jsx | 62 ------------------- .../data/identify/viewers/TemplateViewer.jsx | 5 +- 4 files changed, 1 insertion(+), 70 deletions(-) delete mode 100644 web/client/components/TOC/fragments/settings/MarkDownImage.jsx diff --git a/package.json b/package.json index 5c882511d5..3ef95b4243 100644 --- a/package.json +++ b/package.json @@ -210,7 +210,6 @@ "leaflet.nontiledlayer": "1.0.7", "lodash": "4.17.21", "lrucache": "1.0.3", - "markdown-it": "13.0.1", "md5": "2.3.0", "moment": "2.21.0", "node-geo-distance": "1.2.0", diff --git a/web/client/components/TOC/fragments/settings/FeatureInfoEditor.jsx b/web/client/components/TOC/fragments/settings/FeatureInfoEditor.jsx index faca2c3036..0069e2f102 100644 --- a/web/client/components/TOC/fragments/settings/FeatureInfoEditor.jsx +++ b/web/client/components/TOC/fragments/settings/FeatureInfoEditor.jsx @@ -15,7 +15,6 @@ import ResizableModal from '../../../misc/ResizableModal'; import CompactRichTextEditor from '../../../mapviews/settings/CompactRichTextEditor'; import withDebounceOnCallback from '../../../misc/enhancers/withDebounceOnCallback'; import { htmlToDraftJSEditorState, draftJSEditorStateToHtml } from '../../../../utils/EditorUtils'; -import MarkDownImage from './MarkDownImage'; const DescriptionEditor = withDebounceOnCallback('onEditorStateChange', 'editorState')(CompactRichTextEditor); /** @@ -75,13 +74,11 @@ const FeatureInfoEditor = ({ setEditorState(newEditorState); } }} - toolbarCustomButtons={[]} />
); - }; FeatureInfoEditor.propTypes = { diff --git a/web/client/components/TOC/fragments/settings/MarkDownImage.jsx b/web/client/components/TOC/fragments/settings/MarkDownImage.jsx deleted file mode 100644 index 58dfab4768..0000000000 --- a/web/client/components/TOC/fragments/settings/MarkDownImage.jsx +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright 2023, GeoSolutions Sas. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. - */ - -import React from 'react'; -import PropTypes from 'prop-types'; -import { EditorState, Modifier } from 'draft-js'; -import {Glyphicon, Tooltip, OverlayTrigger} from 'react-bootstrap'; -import Message from '../../../I18N/Message'; - -/** - * Component used in the react-draft-wysiwyg for wrapping the selected text with - * @param {Object} editorState state object of the draft-js lib - * @param {Function} onChange triggered to update text content change event in the editor - */ -const MarkDownImage = ({ - editorState, - onChange -}) => { - - const onClick = () => { - - const selectionState = editorState.getSelection(); - const anchorKey = selectionState.getAnchorKey(); - const currentContent = editorState.getCurrentContent(); - const currentContentBlock = currentContent.getBlockForKey(anchorKey); - const start = selectionState.getStartOffset(); - const end = selectionState.getEndOffset(); - const selectedText = currentContentBlock.getText().slice(start, end); - const contentState = Modifier.replaceText( - currentContent, - selectionState, - `![image](${selectedText})`, - editorState.getCurrentInlineStyle() - ); - onChange(EditorState.push(editorState, contentState, 'insert-characters')); - }; - const tooltip = ( - - ); - - return ( - -
-
- -
-
-
- ); -}; - -export default MarkDownImage; - -MarkDownImage.propTypes = { - editorState: PropTypes.object, - onChange: PropTypes.func -}; diff --git a/web/client/components/data/identify/viewers/TemplateViewer.jsx b/web/client/components/data/identify/viewers/TemplateViewer.jsx index 55338ae033..4aa249de90 100644 --- a/web/client/components/data/identify/viewers/TemplateViewer.jsx +++ b/web/client/components/data/identify/viewers/TemplateViewer.jsx @@ -7,8 +7,6 @@ */ import React from 'react'; -import MarkdownIt from 'markdown-it'; -import unescape from 'lodash/unescape'; import { template } from 'lodash'; import PropTypes from 'prop-types'; @@ -16,7 +14,6 @@ import { getCleanTemplate } from '../../../../utils/TemplateUtils'; import HtmlRenderer from '../../../misc/HtmlRenderer'; import Message from '../../../I18N/Message'; -const md = new MarkdownIt().enable('image'); const TemplateViewer = ({layer = {}, response}) => (
@@ -24,7 +21,7 @@ const TemplateViewer = ({layer = {}, response}) => ( const cleanTemplate = getCleanTemplate(layer.featureInfo && layer.featureInfo.template || '', feature, /\$\{.*?\}/g, 2, 1); let html = ""; try { - html = unescape(md.render(template(cleanTemplate)(feature))); + html = template(cleanTemplate)(feature); } catch (e) { console.error(e); return (
From f82b7c604ecf0ada0cfc55816d724deccc491cc6 Mon Sep 17 00:00:00 2001 From: Matteo V Date: Wed, 5 Jul 2023 11:28:23 +0200 Subject: [PATCH 06/13] Update web/client/translations/data.de-DE.json Co-authored-by: Lorenzo Natali --- web/client/translations/data.de-DE.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/web/client/translations/data.de-DE.json b/web/client/translations/data.de-DE.json index 12b35e1491..60ea2a1699 100644 --- a/web/client/translations/data.de-DE.json +++ b/web/client/translations/data.de-DE.json @@ -166,8 +166,7 @@ "bottom": "Unten", "top": "Oben", "editLayerName": "Ebenennamen bearbeiten", - "confirmLayerName": "Bestätigen Sie die Änderung des Ebenennamens", - "markDownImage": "Ausgewählten Text in Markdown-URL umwandeln ![]()" + "confirmLayerName": "Bestätigen Sie die Änderung des Ebenennamens" }, "legendOptions": { "title": "Legende", From 62f3e617efc89a187e571e91427ebff6a06a157f Mon Sep 17 00:00:00 2001 From: Matteo V Date: Wed, 5 Jul 2023 11:30:05 +0200 Subject: [PATCH 07/13] Update web/client/components/mapviews/settings/CompactRichTextEditor.jsx Co-authored-by: Lorenzo Natali --- .../components/mapviews/settings/CompactRichTextEditor.jsx | 5 ----- 1 file changed, 5 deletions(-) diff --git a/web/client/components/mapviews/settings/CompactRichTextEditor.jsx b/web/client/components/mapviews/settings/CompactRichTextEditor.jsx index b96fd7ec3d..3879d96b88 100644 --- a/web/client/components/mapviews/settings/CompactRichTextEditor.jsx +++ b/web/client/components/mapviews/settings/CompactRichTextEditor.jsx @@ -125,8 +125,3 @@ function CompactRichTextEditor({ } export default CompactRichTextEditor; - -CompactRichTextEditor.propTypes = { - toolbarOptions: PropTypes.array, - wrapperClassName: PropTypes.string -}; From 297902166fc5c3260233ec2a7ad4e7ee39637d2d Mon Sep 17 00:00:00 2001 From: Matteo V Date: Wed, 5 Jul 2023 11:30:13 +0200 Subject: [PATCH 08/13] Update web/client/translations/data.it-IT.json Co-authored-by: Lorenzo Natali --- web/client/translations/data.it-IT.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/web/client/translations/data.it-IT.json b/web/client/translations/data.it-IT.json index bedf516be5..e9e39b77c3 100644 --- a/web/client/translations/data.it-IT.json +++ b/web/client/translations/data.it-IT.json @@ -166,8 +166,7 @@ "bottom": "Sotto", "top": "Sopra", "editLayerName": "Modifica il nome del livello", - "confirmLayerName": "Conferma la modifica del nome del livello", - "markDownImage": "Trasforma il testo seleziona in un MarkDown Url ![]()" + "confirmLayerName": "Conferma la modifica del nome del livello" }, "legendOptions": { "title": "Legenda", From b5e05d0427bc9e116ad05ead2428f3e34cb6c449 Mon Sep 17 00:00:00 2001 From: Matteo V Date: Wed, 5 Jul 2023 11:30:18 +0200 Subject: [PATCH 09/13] Update web/client/translations/data.fr-FR.json Co-authored-by: Lorenzo Natali --- web/client/translations/data.fr-FR.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/web/client/translations/data.fr-FR.json b/web/client/translations/data.fr-FR.json index 27ed053243..069f16d956 100644 --- a/web/client/translations/data.fr-FR.json +++ b/web/client/translations/data.fr-FR.json @@ -166,8 +166,7 @@ "bottom": "Bas", "top": "Haut", "editLayerName": "Modifier le nom du calque", - "confirmLayerName": "Confirmer le changement de nom du calque", - "markDownImage": "Transformer le texte sélectionné en URL Markdown ![]()" + "confirmLayerName": "Confirmer le changement de nom du calque" }, "legendOptions": { "title": "Légende", From 1a9243fde590e8e4b5c862bc44f255fbe4162778 Mon Sep 17 00:00:00 2001 From: Matteo V Date: Wed, 5 Jul 2023 11:30:29 +0200 Subject: [PATCH 10/13] Update web/client/translations/data.en-US.json Co-authored-by: Lorenzo Natali --- web/client/translations/data.en-US.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/web/client/translations/data.en-US.json b/web/client/translations/data.en-US.json index 57b79c37e7..b059ef8663 100644 --- a/web/client/translations/data.en-US.json +++ b/web/client/translations/data.en-US.json @@ -166,8 +166,7 @@ "bottom": "Bottom", "top": "Top", "editLayerName": "Edit layer name", - "confirmLayerName": "Confirm layer name change", - "markDownImage": "Transform selected text into Markdown Url ![]()" + "confirmLayerName": "Confirm layer name change" }, "legendOptions": { "title": "Legend", From 19067da4e471a80c055127e88a6d4b62ffbedde9 Mon Sep 17 00:00:00 2001 From: Matteo V Date: Wed, 5 Jul 2023 11:30:46 +0200 Subject: [PATCH 11/13] Update web/client/components/TOC/fragments/settings/FeatureInfoEditor.jsx Co-authored-by: Lorenzo Natali --- .../TOC/fragments/settings/FeatureInfoEditor.jsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/web/client/components/TOC/fragments/settings/FeatureInfoEditor.jsx b/web/client/components/TOC/fragments/settings/FeatureInfoEditor.jsx index 0069e2f102..832e955fcf 100644 --- a/web/client/components/TOC/fragments/settings/FeatureInfoEditor.jsx +++ b/web/client/components/TOC/fragments/settings/FeatureInfoEditor.jsx @@ -22,11 +22,11 @@ const DescriptionEditor = withDebounceOnCallback('onEditorStateChange', 'editorS * @memberof components.TOC.fragments.settings * @name FeatureInfoEditor * @class - * @prop {Object} element data of the current selected node - * @prop {Boolean} showEditor show/hide modal - * @prop {Function} onShowEditor called when click on close buttons - * @prop {Function} onChange called when text in editor has been changed - * @prop {Boolean} enableIFrameModule enable iframe in editor, default true + * @prop {object} element data of the current selected node + * @prop {boolean} showEditor show/hide modal + * @prop {function} onShowEditor called when click on close buttons + * @prop {function} onChange called when text in editor has been changed + * @prop {boolean} enableIFrameModule enable iframe in editor, default true */ const FeatureInfoEditor = ({ From 4888ede4dfcef6de4acda0c54c87242e9233a468 Mon Sep 17 00:00:00 2001 From: Matteo V Date: Wed, 5 Jul 2023 11:30:57 +0200 Subject: [PATCH 12/13] Update web/client/translations/data.es-ES.json Co-authored-by: Lorenzo Natali --- web/client/translations/data.es-ES.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/web/client/translations/data.es-ES.json b/web/client/translations/data.es-ES.json index 8e91d23904..46a21e669d 100644 --- a/web/client/translations/data.es-ES.json +++ b/web/client/translations/data.es-ES.json @@ -163,8 +163,7 @@ "bottom": "Bottom", "top": "Cima", "editLayerName": "Editar el nombre de la capa", - "confirmLayerName": "Confirmar cambio de nombre de capa", - "markDownImage": "Transformar texto seleccionado en Markdown Url ![]()" + "confirmLayerName": "Confirmar cambio de nombre de capa" }, "legendOptions": { "title": "Leyenda", From dbdb2bc78a5621ab44d406852ff937c8158a838b Mon Sep 17 00:00:00 2001 From: Matteo V Date: Wed, 5 Jul 2023 12:00:53 +0200 Subject: [PATCH 13/13] Update web/client/components/mapviews/settings/CompactRichTextEditor.jsx --- .../components/mapviews/settings/CompactRichTextEditor.jsx | 1 - 1 file changed, 1 deletion(-) diff --git a/web/client/components/mapviews/settings/CompactRichTextEditor.jsx b/web/client/components/mapviews/settings/CompactRichTextEditor.jsx index 3879d96b88..c862d8ea69 100644 --- a/web/client/components/mapviews/settings/CompactRichTextEditor.jsx +++ b/web/client/components/mapviews/settings/CompactRichTextEditor.jsx @@ -6,7 +6,6 @@ * LICENSE file in the root directory of this source tree. */ -import PropTypes from 'prop-types'; import React from 'react'; import 'react-draft-wysiwyg/dist/react-draft-wysiwyg.css'; import { Editor } from 'react-draft-wysiwyg';