Started widgets
All checks were successful
Build and Deploy Nuxt / build (push) Successful in 32s

This commit is contained in:
2026-04-29 21:22:25 +02:00
parent e6d66529e3
commit ffb23b08eb
4 changed files with 48 additions and 7 deletions

View File

@@ -135,9 +135,7 @@ watch(Campaign, () => {
</button> </button>
<div v-if="!sidebarCollapsed" class="sidebar-copy"> <div v-if="!sidebarCollapsed" class="sidebar-copy">
<span class="sidebar-eyebrow">Campaign Notes</span> <!-- Aqui posar buttons -->
<strong class="sidebar-title">{{ campaignName }}</strong>
<span class="sidebar-meta">{{ notes.length }} note<span v-if="notes.length !== 1">s</span></span>
</div> </div>
</div> </div>

View File

@@ -1,10 +1,11 @@
<script setup> <script setup>
import { marked } from 'marked'; import { marked } from 'marked';
import { onMounted, onUnmounted, ref } from 'vue'; import { onMounted, onUnmounted, ref, createApp } from 'vue';
import ToastManager from '~/components/managers/ToastManager.vue'; import ToastManager from '~/components/managers/ToastManager.vue';
import { emitter } from '~/services/Emitter'; import { emitter } from '~/services/Emitter';
import Server from '~/services/Server'; import Server from '~/services/Server';
import { DisplayToast } from '~/services/Toaster'; import { DisplayToast } from '~/services/Toaster';
import TestWidget from '../widgets/TestWidget.vue';
// import { GetNote, GetContent } from '@/services/Content'; // import { GetNote, GetContent } from '@/services/Content';
const props = defineProps(['text', 'title', 'noteKey']); const props = defineProps(['text', 'title', 'noteKey']);
@@ -19,20 +20,58 @@ function closeNote(){
emitter.emit('delete-note', props.noteKey); emitter.emit('delete-note', props.noteKey);
} }
// MARKED
const renderer = new marked.Renderer();
renderer.paragraph = (token) => {
const text = token.text || '';
if (text.startsWith(':::my-component')) {
return `<div class="vue-component" data-component="TestWidget"></div>`;
}
return `<p>${text}</p>`;
};
marked.setOptions({
renderer: renderer,
});
const compiledMarkdown = computed(() => { const compiledMarkdown = computed(() => {
return marked.parse(sourceText.value); return marked.parse(sourceText.value);
}); });
watch(sourceText, (newText) => { function mountComponents() {
displayText.value = compiledMarkdown.value; const nodes = document.querySelectorAll('.vue-component');
setTimeout(() => setupCallout(), 0); nodes.forEach(el => {
const app = createApp(TestWidget, { /* props */ });
app.mount(el);
console.log("Mounted a component")
});
console.log("Huh")
}
///
function update(){
displayText.value = compiledMarkdown.value;
setTimeout(() => {
setupCallout()
mountComponents();
}, 0);
}
watch(sourceText, (newText) => {
// update();
}); });
onMounted(() => { onMounted(() => {
sourceText.value = props.text; sourceText.value = props.text;
// window.addEventListener('keydown', handleKeydown); // window.addEventListener('keydown', handleKeydown);
setTimeout(() => setupCallout(), 0); setTimeout(() => setupCallout(), 0);
update();
}); });
onUnmounted(() => { onUnmounted(() => {
@@ -44,6 +83,7 @@ function handleKeydown(e) {
if ((e.ctrlKey || e.metaKey) && e.key.toLowerCase() === 'e') { if ((e.ctrlKey || e.metaKey) && e.key.toLowerCase() === 'e') {
e.preventDefault(); // prevent browser default behavior e.preventDefault(); // prevent browser default behavior
editingMode.value = !editingMode.value; editingMode.value = !editingMode.value;
if(!editingMode.value) update();
return; return;
} }

View File

@@ -0,0 +1,3 @@
<template>
<h2>This is a test widget</h2>
</template>

View File