diff --git a/packages/app-frontend/src/features/inspector/DataField.vue b/packages/app-frontend/src/features/inspector/DataField.vue index 3f4265ec6..d8813beb1 100644 --- a/packages/app-frontend/src/features/inspector/DataField.vue +++ b/packages/app-frontend/src/features/inspector/DataField.vue @@ -143,6 +143,11 @@ > {{ $t('DataField.contextMenu.copyValue') }} + + {{ $t('DataField.contextMenu.storeGlobal') }} @@ -212,7 +217,8 @@ import { isPlainObject, sortByKey, openInEditor, - copyToClipboard + copyToClipboard, + storeAsGlobal } from '@utils/util' import { formattedValue, valueType } from '@front/util/format' @@ -430,6 +436,10 @@ export default { copyToClipboard(this.field.value) }, + storeAsGlobal () { + storeAsGlobal(this.field.value) + }, + onClick (event) { // Cancel if target is interactive if (event.target.tagName === 'INPUT' || event.target.className.includes('button')) { diff --git a/packages/app-frontend/src/locales/en.js b/packages/app-frontend/src/locales/en.js index d211f749a..71d55b1f2 100644 --- a/packages/app-frontend/src/locales/en.js +++ b/packages/app-frontend/src/locales/en.js @@ -37,7 +37,8 @@ export default { } }, contextMenu: { - copyValue: 'Copy Value' + copyValue: 'Copy Value', + storeGlobal: 'Store as global' }, quickEdit: { number: { diff --git a/packages/shared-utils/src/util.ts b/packages/shared-utils/src/util.ts index ba297b8d3..a357d478f 100644 --- a/packages/shared-utils/src/util.ts +++ b/packages/shared-utils/src/util.ts @@ -650,3 +650,20 @@ export function copyToClipboard (state) { document.execCommand('copy') document.body.removeChild(dummyTextArea) } + +let globalCount = 0 +export function storeAsGlobal (state) { + const target = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : {} + + const name = 'vueTemp' + + let i = 0 // prevent infinite loop + let varName = name + globalCount + do { + ++globalCount + varName = name + globalCount + } while (!!target[varName] || (++i) > 500) + + target[varName] = state + console.log(varName, state) +}