diff --git a/app/assets/css/main.css b/app/assets/css/main.css index 67e1d1b..8c5769f 100755 --- a/app/assets/css/main.css +++ b/app/assets/css/main.css @@ -15,6 +15,21 @@ --color-green-800: #016538; --color-green-900: #0A5331; --color-green-950: #052E16; + + --color-carpablue: #2C4EA2; + --color-carpagreen: #6B8E23; + --color-carpared: #ff0000; +} + +/* Colors for Typesense rich text */ +.red { + color: #C00000 !important; +} +.purple { + color: #7030A0 !important; +} +.blue { + color: #0070C0 !important; } /* Search match highlighting --------------------------------------------- */ diff --git a/app/components/estudiosTypensense/EstudiosTypensenseDetail.vue b/app/components/estudiosTypensense/EstudiosTypensenseDetail.vue index 0136f7e..eb27d46 100644 --- a/app/components/estudiosTypensense/EstudiosTypensenseDetail.vue +++ b/app/components/estudiosTypensense/EstudiosTypensenseDetail.vue @@ -830,18 +830,25 @@ function highlightTextNodes(root: HTMLElement, terms: string[]): number {
-
+
-
-
- +
+
+
+ class="paragraph-html text-sm leading-relaxed text-gray-800 dark:text-gray-200" + v-html="hit.document.raw" + />
diff --git a/app/components/inbox/InboxActivity.vue b/app/components/inbox/InboxActivity.vue index 0642732..b73559a 100755 --- a/app/components/inbox/InboxActivity.vue +++ b/app/components/inbox/InboxActivity.vue @@ -305,7 +305,15 @@ async function renderBody() { const el = bodyContainer.value if (!el) return - const raw = props.activity?.body + // const raw = props.activity?.body + let raw = props.activity?.body || '' + if (raw) { + raw = raw + .replaceAll('#00ccff', '#0070C0') + .replaceAll('#FF0000', '#C00000') + .replaceAll('#333399', '#7030A0') + } + el.innerHTML = raw ? ((fixLink(raw) as string) || '') : '' if (scrollContainer.value) scrollContainer.value.scrollTop = 0 diff --git a/app/layouts/default.vue b/app/layouts/default.vue index 634a47c..5b7fdf7 100755 --- a/app/layouts/default.vue +++ b/app/layouts/default.vue @@ -36,13 +36,13 @@ const links = computed(() => { }, { label: t("nav.bible_studies_ts"), - icon: 'i-lucide-database', + icon: 'ph:books', to: '/estudios-typensense', onSelect: () => { open.value = false } }, { label: t("nav.conferences_ts"), - icon: 'i-lucide-database', + icon: 'ph:books', to: '/conferencias-typensense', onSelect: () => { open.value = false } }, diff --git a/app/pages/actividades.vue b/app/pages/actividades.vue index 282eb37..7191233 100755 --- a/app/pages/actividades.vue +++ b/app/pages/actividades.vue @@ -72,7 +72,6 @@ async function runSearch(q: string, page = 1, append = false) { const name = (err as { name?: string })?.name if (name === 'AbortError') return if (seq !== searchSeq) return - console.error('Meilisearch error', err) errorMsg.value = (err as Error)?.message || 'Error al buscar.' if (!append) { hits.value = [] diff --git a/app/utils/textUtilities.ts b/app/utils/textUtilities.ts new file mode 100644 index 0000000..dd552d7 --- /dev/null +++ b/app/utils/textUtilities.ts @@ -0,0 +1,16 @@ +const toast = useToast() + +/* Copy to Clipboard */ +export async function copyToClipboard(textToCopy: string, type: string) { + try { + await navigator.clipboard.writeText(textToCopy) + toast.add({ + title: 'Texto copiado!', + description: `${textToCopy}`, + icon: 'ph-clipboard-text', + color: type == 'activities' ? 'success' : 'info' + }) + } catch (err) { + console.error('Failed to copy: ', err) + } +} \ No newline at end of file