|
@@ -16,47 +16,85 @@
|
|
|
@change="updateData({ timeout: +$event })"
|
|
|
/>
|
|
|
<prism-editor
|
|
|
- v-if="!showCodeModal"
|
|
|
+ v-if="!state.showCodeModal"
|
|
|
:model-value="data.code"
|
|
|
:highlight="highlighter('javascript')"
|
|
|
readonly
|
|
|
class="p-4 max-h-80"
|
|
|
- @click="showCodeModal = true"
|
|
|
+ @click="state.showCodeModal = true"
|
|
|
/>
|
|
|
- <ui-modal
|
|
|
- v-model="showCodeModal"
|
|
|
- :title="t('workflow.blocks.javascript-code.modal')"
|
|
|
- content-class="max-w-3xl"
|
|
|
- >
|
|
|
- <prism-editor
|
|
|
- v-model="code"
|
|
|
- class="py-4"
|
|
|
- :highlight="highlighter('javascript')"
|
|
|
- line-numbers
|
|
|
- style="height: calc(100vh - 12rem)"
|
|
|
- />
|
|
|
- <p class="mt-1">
|
|
|
- {{ t('workflow.blocks.javascript-code.availabeFuns') }}
|
|
|
- </p>
|
|
|
- <p class="space-x-1">
|
|
|
- <a
|
|
|
- v-for="func in availableFuncs"
|
|
|
- :key="func.id"
|
|
|
- :href="`https://github.com/Kholid060/automa/wiki/Blocks#${func.id}`"
|
|
|
- target="_blank"
|
|
|
- rel="noopener"
|
|
|
- class="inline-block"
|
|
|
- >
|
|
|
- <code>
|
|
|
- {{ func.name }}
|
|
|
- </code>
|
|
|
- </a>
|
|
|
- </p>
|
|
|
+ <ui-modal v-model="state.showCodeModal" content-class="max-w-3xl">
|
|
|
+ <template #header>
|
|
|
+ <ui-tabs v-model="state.activeTab" class="border-none">
|
|
|
+ <ui-tab value="code">
|
|
|
+ {{ t('workflow.blocks.javascript-code.modal.tabs.code') }}
|
|
|
+ </ui-tab>
|
|
|
+ <ui-tab value="preloadScript">
|
|
|
+ {{ t('workflow.blocks.javascript-code.modal.tabs.preloadScript') }}
|
|
|
+ </ui-tab>
|
|
|
+ </ui-tabs>
|
|
|
+ </template>
|
|
|
+ <ui-tab-panels
|
|
|
+ v-model="state.activeTab"
|
|
|
+ class="overflow-auto"
|
|
|
+ style="height: calc(100vh - 9rem)"
|
|
|
+ >
|
|
|
+ <ui-tab-panel value="code" class="h-full">
|
|
|
+ <prism-editor
|
|
|
+ v-model="state.code"
|
|
|
+ :highlight="highlighter('javascript')"
|
|
|
+ line-numbers
|
|
|
+ class="py-4 overflow-auto"
|
|
|
+ style="height: 87%"
|
|
|
+ />
|
|
|
+ <p class="mt-1">
|
|
|
+ {{ t('workflow.blocks.javascript-code.availabeFuncs') }}
|
|
|
+ </p>
|
|
|
+ <p class="space-x-1">
|
|
|
+ <a
|
|
|
+ v-for="func in availableFuncs"
|
|
|
+ :key="func.id"
|
|
|
+ :href="`https://github.com/Kholid060/automa/wiki/Blocks#${func.id}`"
|
|
|
+ target="_blank"
|
|
|
+ rel="noopener"
|
|
|
+ class="inline-block"
|
|
|
+ >
|
|
|
+ <code>
|
|
|
+ {{ func.name }}
|
|
|
+ </code>
|
|
|
+ </a>
|
|
|
+ </p>
|
|
|
+ </ui-tab-panel>
|
|
|
+ <ui-tab-panel value="preloadScript">
|
|
|
+ <div
|
|
|
+ v-for="(script, index) in state.preloadScripts"
|
|
|
+ :key="index"
|
|
|
+ class="flex items-center mt-4"
|
|
|
+ >
|
|
|
+ <v-remixicon
|
|
|
+ name="riDeleteBin7Line"
|
|
|
+ class="mr-2 cursor-pointer"
|
|
|
+ @click="state.preloadScripts.splice(index, 1)"
|
|
|
+ />
|
|
|
+ <ui-input
|
|
|
+ v-model="state.preloadScripts[index].src"
|
|
|
+ placeholder="http://example.com/script.js"
|
|
|
+ class="flex-1 mr-4"
|
|
|
+ />
|
|
|
+ <ui-checkbox v-model="state.preloadScripts[index].removeAfterExec">
|
|
|
+ {{ t('workflow.blocks.javascript-code.removeAfterExec') }}
|
|
|
+ </ui-checkbox>
|
|
|
+ </div>
|
|
|
+ <ui-button variant="accent" class="w-20 mt-4" @click="addScript">
|
|
|
+ {{ t('common.add') }}
|
|
|
+ </ui-button>
|
|
|
+ </ui-tab-panel>
|
|
|
+ </ui-tab-panels>
|
|
|
</ui-modal>
|
|
|
</div>
|
|
|
</template>
|
|
|
<script setup>
|
|
|
-import { ref, watch } from 'vue';
|
|
|
+import { watch, reactive } from 'vue';
|
|
|
import { PrismEditor } from 'vue-prism-editor';
|
|
|
import { useI18n } from 'vue-i18n';
|
|
|
import { highlighter } from '@/lib/prism';
|
|
@@ -77,16 +115,33 @@ const availableFuncs = [
|
|
|
{ name: 'automaResetTimeout', id: 'automaresettimeout' },
|
|
|
];
|
|
|
|
|
|
-const code = ref(props.data.code);
|
|
|
-const showCodeModal = ref(false);
|
|
|
+const state = reactive({
|
|
|
+ activeTab: 'code',
|
|
|
+ code: `${props.data.code}`,
|
|
|
+ preloadScripts: [...(props.data.preloadScripts || [])],
|
|
|
+ showCodeModal: false,
|
|
|
+});
|
|
|
|
|
|
function updateData(value) {
|
|
|
emit('update:data', { ...props.data, ...value });
|
|
|
}
|
|
|
+function addScript() {
|
|
|
+ state.preloadScripts.push({ src: '', removeAfterExec: true });
|
|
|
+}
|
|
|
|
|
|
-watch(code, (value) => {
|
|
|
- updateData({ code: value });
|
|
|
-});
|
|
|
+watch(
|
|
|
+ () => state.code,
|
|
|
+ (value) => {
|
|
|
+ updateData({ code: value });
|
|
|
+ }
|
|
|
+);
|
|
|
+watch(
|
|
|
+ () => state.preloadScripts,
|
|
|
+ (value) => {
|
|
|
+ updateData({ preloadScripts: value });
|
|
|
+ },
|
|
|
+ { deep: true }
|
|
|
+);
|
|
|
</script>
|
|
|
<style scoped>
|
|
|
code {
|