diff --git a/src/lib/components/JSONEditor.svelte b/src/lib/components/JSONEditor.svelte index 100b92ed..efe5a4e5 100644 --- a/src/lib/components/JSONEditor.svelte +++ b/src/lib/components/JSONEditor.svelte @@ -10,7 +10,6 @@ import AbsolutePopup from './modals/popup/AbsolutePopup.svelte' import CodeMode from './modes/codemode/CodeMode.svelte' import TreeMode from './modes/treemode/TreeMode.svelte' - import { lodashQueryLanguage } from '$lib/plugins/query/lodashQueryLanguage' // TODO: document how to enable debugging in the readme: localStorage.debug="jsoneditor:*", then reload const debug = createDebug('jsoneditor:Main') @@ -39,7 +38,9 @@ export let queryLanguageId /** @type {(queryLanguageId: string) => void} */ - export let onChangeQueryLanguage + export let onChangeQueryLanguage = () => { + // no op by default + } /** @type {((content: Content, previousContent: Content, patchResult: JSONPatchResult | null) => void) | null} */ export let onChange = null @@ -276,6 +277,12 @@ return onRenderMenu(mode, updatedItems) || updatedItems } + + function handleChangeQueryLanguage(newQueryLanguageId) { + debug('handleChangeQueryLanguage', newQueryLanguageId) + queryLanguageId = newQueryLanguageId + onChangeQueryLanguage(newQueryLanguageId) + } @@ -293,7 +300,7 @@ {validator} {queryLanguages} {queryLanguageId} - {onChangeQueryLanguage} + onChangeQueryLanguage={handleChangeQueryLanguage} onChange={handleChangeText} onSwitchToTreeMode={handleSwitchToTreeMode} {onError} @@ -313,7 +320,7 @@ {validator} {queryLanguages} {queryLanguageId} - {onChangeQueryLanguage} + onChangeQueryLanguage={handleChangeQueryLanguage} {onError} onChange={handleChange} onRequestRepair={handleRequestRepair} diff --git a/src/lib/components/controls/selectQueryLanguage/SelectQueryLanguage.scss b/src/lib/components/controls/selectQueryLanguage/SelectQueryLanguage.scss new file mode 100644 index 00000000..35e6a24e --- /dev/null +++ b/src/lib/components/controls/selectQueryLanguage/SelectQueryLanguage.scss @@ -0,0 +1,31 @@ +@import '../../../styles'; + +.jse-select-query-language { + position: relative; + width: 32px; + + .jse-select-query-language-container { + position: absolute; + top: 0; + right: 0; + display: flex; + flex-direction: column; + box-shadow: $box-shadow; + + .jse-query-language { + @include jsoneditor-button; + + text-align: left; + padding: $padding 2 * $padding; + white-space: nowrap; + color: white; + background: $dark-gray; + + $gray-highlight: lighten($dark-gray, 5%); + + &:hover { + background: $gray-highlight; + } + } + } +} diff --git a/src/lib/components/controls/selectQueryLanguage/SelectQueryLanguage.svelte b/src/lib/components/controls/selectQueryLanguage/SelectQueryLanguage.svelte new file mode 100644 index 00000000..f53be35f --- /dev/null +++ b/src/lib/components/controls/selectQueryLanguage/SelectQueryLanguage.svelte @@ -0,0 +1,40 @@ + + +
+
+ {#each queryLanguages as queryLanguage} + + {/each} +
+
+ + diff --git a/src/lib/components/modals/Header.scss b/src/lib/components/modals/Header.scss index dfe0b47f..537cd3de 100644 --- a/src/lib/components/modals/Header.scss +++ b/src/lib/components/modals/Header.scss @@ -11,6 +11,7 @@ vertical-align: middle; } + button.config, button.close { border: none; background: transparent; diff --git a/src/lib/components/modals/TransformModal.svelte b/src/lib/components/modals/TransformModal.svelte index c68315ad..a91a1067 100644 --- a/src/lib/components/modals/TransformModal.svelte +++ b/src/lib/components/modals/TransformModal.svelte @@ -10,9 +10,13 @@ import { compileJSONPointer, getIn } from 'immutable-json-patch' import { stringifyPath } from '../../utils/pathUtils.js' import { truncate } from '../../utils/stringUtils.js' - import Header from './Header.svelte' import { transformModalState } from './transformModalState.js' import TransformWizard from './TransformWizard.svelte' + import TransformModalHeader from '$lib/components/modals/TransformModalHeader.svelte' + import AbsolutePopup from '$lib/components/modals/popup/AbsolutePopup.svelte' + import createDebug from 'debug' + + const debug = createDebug('jsoneditor:TransformModal') export let id = 'transform-modal-' + uniqueId() export let json @@ -25,17 +29,15 @@ export let queryLanguageId /** @type {(queryLanguageId: string) => void} */ - export let onChangeQueryLanguage // TODO: implement a dropdown to change the selected query language + export let onChangeQueryLanguage export let onTransform export let indentation = 2 $: selectedJson = getIn(json, selectedPath) - function getSelectedQueryLanguage() { - // TODO: log a console warning when the queryLanguage is not found - return queryLanguages.find((item) => item.id === queryLanguageId) || queryLanguages[0] - } + $: selectedQueryLanguage = + queryLanguages.find((item) => item.id === queryLanguageId) || queryLanguages[0] const { close } = getContext('simple-modal') @@ -43,7 +45,9 @@ const state = transformModalState[stateId] || {} - let query = state.query || getSelectedQueryLanguage().createQuery(json, {}) + let query + $: query = state.query || selectedQueryLanguage.createQuery(json, {}) // FIXME: should apply wizard + let previewHasError = false let preview = '' @@ -64,7 +68,8 @@ function previewTransform(json, query) { try { - const jsonTransformed = getSelectedQueryLanguage().executeQuery(json, query) + debug('previewTransform', { query, selectedQueryLanguage }) + const jsonTransformed = selectedQueryLanguage.executeQuery(json, query) preview = truncate(JSON.stringify(jsonTransformed, null, indentation), MAX_PREVIEW_CHARACTERS) previewHasError = false @@ -82,7 +87,8 @@ function handleTransform() { try { - const jsonTransformed = getSelectedQueryLanguage().executeQuery(selectedJson, query) + debug('handleTransform', { query }) + const jsonTransformed = selectedQueryLanguage.executeQuery(selectedJson, query) onTransform([ { @@ -124,66 +130,78 @@ function focus(element) { element.focus() } + + function handleChangeQueryLanguage(newQueryLanguageId) { + debug('handleChangeQueryLanguage', newQueryLanguageId) + queryLanguageId = newQueryLanguageId + onChangeQueryLanguage(newQueryLanguageId) + }
-
-
-
- {@html getSelectedQueryLanguage().description} -
- -
Path
- + - -
- -
- {#if showWizard} - {#if Array.isArray(selectedJson)} - - {:else} - (Only available for arrays, not for objects) +
+
+ {@html selectedQueryLanguage.description} +
+ +
Path
+ + +
+ +
+ {#if showWizard} + {#if Array.isArray(selectedJson)} + + {:else} + (Only available for arrays, not for objects) + {/if} {/if} - {/if} - -
Query
-