diff --git a/app/src/components/v-form/form-field.vue b/app/src/components/v-form/form-field.vue
index 6edb708b8b..e028607e83 100644
--- a/app/src/components/v-form/form-field.vue
+++ b/app/src/components/v-form/form-field.vue
@@ -54,7 +54,7 @@
-
+
{{ validationMessage }}
@@ -66,7 +66,6 @@
import { useI18n } from 'vue-i18n';
import { defineComponent, PropType, computed, ref } from 'vue';
import { Field } from '@/types/';
-import { md } from '@/utils/md';
import FormFieldLabel from './form-field-label.vue';
import FormFieldMenu from './form-field-menu.vue';
import FormFieldInterface from './form-field-interface.vue';
@@ -158,7 +157,7 @@ export default defineComponent({
}
});
- return { t, isDisabled, md, internalValue, emitValue, showRaw, rawValue, validationMessage, isEdited };
+ return { t, isDisabled, internalValue, emitValue, showRaw, rawValue, validationMessage, isEdited };
function emitValue(value: any) {
if (
diff --git a/app/src/components/v-form/v-form.vue b/app/src/components/v-form/v-form.vue
index 002b1e3ecf..33496a80ae 100644
--- a/app/src/components/v-form/v-form.vue
+++ b/app/src/components/v-form/v-form.vue
@@ -64,7 +64,6 @@ import { defineComponent, PropType, computed, ref, provide } from 'vue';
import { useFieldsStore } from '@/stores/';
import { Field, FieldRaw } from '@/types';
import { clone, cloneDeep, isNil, merge, omit } from 'lodash';
-import { md } from '@/utils/md';
import useFormFields from '@/composables/use-form-fields';
import { ValidationError } from '@/types';
import { useElementSize } from '@/composables/use-element-size';
@@ -180,7 +179,6 @@ export default defineComponent({
batchActiveFields,
toggleBatchField,
unsetValue,
- md,
unknownValidationErrors,
firstEditableFieldIndex,
isNil,
diff --git a/app/src/directives/markdown.ts b/app/src/directives/markdown.ts
new file mode 100644
index 0000000000..ee27e0281c
--- /dev/null
+++ b/app/src/directives/markdown.ts
@@ -0,0 +1,10 @@
+import { Directive } from 'vue';
+import { md } from '@/utils/md';
+
+const Markdown: Directive = {
+ beforeMount(el, binding) {
+ el.innerHTML = md(binding.value ?? '');
+ },
+};
+
+export default Markdown;
diff --git a/app/src/directives/register.ts b/app/src/directives/register.ts
index 8aed568aa0..7144e4e646 100644
--- a/app/src/directives/register.ts
+++ b/app/src/directives/register.ts
@@ -2,9 +2,11 @@ import { App } from 'vue';
import ClickOutside from './click-outside/click-outside';
import Focus from './focus/focus';
import Tooltip from './tooltip/tooltip';
+import Markdown from './markdown';
export function registerDirectives(app: App): void {
app.directive('focus', Focus);
app.directive('tooltip', Tooltip);
app.directive('click-outside', ClickOutside);
+ app.directive('md', Markdown);
}
diff --git a/app/src/interfaces/input-rich-text-md/input-rich-text-md.vue b/app/src/interfaces/input-rich-text-md/input-rich-text-md.vue
index 54ecc3c23b..aedf850877 100644
--- a/app/src/interfaces/input-rich-text-md/input-rich-text-md.vue
+++ b/app/src/interfaces/input-rich-text-md/input-rich-text-md.vue
@@ -129,7 +129,7 @@
-
+
@@ -155,7 +155,6 @@ import 'codemirror/addon/display/placeholder.js';
import { applyEdit, CustomSyntax, Alteration } from './edits';
import { getPublicURL } from '@/utils/get-root-path';
-import { md } from '@/utils/md';
import { addTokenToURL } from '@/api';
import escapeStringRegexp from 'escape-string-regexp';
import useShortcut from '@/composables/use-shortcut';
@@ -232,7 +231,7 @@ export default defineComponent({
}
);
- const html = computed(() => {
+ const markdownString = computed(() => {
let mdString = props.value || '';
if (!props.imageToken) {
@@ -246,9 +245,7 @@ export default defineComponent({
}
}
- const html = md(mdString);
-
- return html;
+ return mdString;
});
const table = reactive({
@@ -274,7 +271,7 @@ export default defineComponent({
codemirrorEl,
edit,
view,
- html,
+ markdownString,
table,
onImageUpload,
imageDialogOpen,
diff --git a/app/src/interfaces/presentation-notice/presentation-notice.vue b/app/src/interfaces/presentation-notice/presentation-notice.vue
index 1bfb1d9827..861ff783fd 100644
--- a/app/src/interfaces/presentation-notice/presentation-notice.vue
+++ b/app/src/interfaces/presentation-notice/presentation-notice.vue
@@ -1,14 +1,13 @@
diff --git a/app/src/modules/activity/routes/collection.vue b/app/src/modules/activity/routes/collection.vue
index 981f12d5d0..6e31e82843 100644
--- a/app/src/modules/activity/routes/collection.vue
+++ b/app/src/modules/activity/routes/collection.vue
@@ -24,7 +24,7 @@
-
+
@@ -38,7 +38,6 @@ import { defineComponent, computed, ref, reactive } from 'vue';
import ActivityNavigation from '../components/navigation.vue';
import usePreset from '@/composables/use-preset';
import { useLayout } from '@/composables/use-layout';
-import { md } from '@/utils/md';
import FilterSidebarDetail from '@/views/private/components/filter-sidebar-detail';
import LayoutSidebarDetail from '@/views/private/components/layout-sidebar-detail';
import SearchInput from '@/views/private/components/search-input';
@@ -72,7 +71,7 @@ export default defineComponent({
})
);
- return { t, breadcrumb, md, layout, layoutOptions, layoutQuery, searchQuery, filters };
+ return { t, breadcrumb, layout, layoutOptions, layoutQuery, searchQuery, filters };
function useBreadcrumb() {
const breadcrumb = computed(() => {
diff --git a/app/src/modules/collections/routes/collection.vue b/app/src/modules/collections/routes/collection.vue
index 10f22d8860..269b65d454 100644
--- a/app/src/modules/collections/routes/collection.vue
+++ b/app/src/modules/collections/routes/collection.vue
@@ -210,14 +210,8 @@
@@ -255,7 +249,6 @@ import SearchInput from '@/views/private/components/search-input';
import BookmarkAdd from '@/views/private/components/bookmark-add';
import BookmarkEdit from '@/views/private/components/bookmark-edit';
import { useRouter } from 'vue-router';
-import { md } from '@/utils/md';
import { usePermissionsStore, useUserStore } from '@/stores';
import DrawerBatch from '@/views/private/components/drawer-batch';
import { unexpectedError } from '@/utils/unexpected-error';
@@ -386,7 +379,6 @@ export default defineComponent({
editingBookmark,
editBookmark,
breadcrumb,
- md,
clearFilters,
confirmArchive,
archive,
diff --git a/app/src/modules/collections/routes/item.vue b/app/src/modules/collections/routes/item.vue
index f4e253eb92..ee8f559705 100644
--- a/app/src/modules/collections/routes/item.vue
+++ b/app/src/modules/collections/routes/item.vue
@@ -172,7 +172,7 @@
-
+
-
+
@@ -53,8 +53,6 @@ import useNavigation, { NavItem } from '../composables/use-navigation';
import { useRouter } from 'vue-router';
import { useUserStore } from '@/stores';
-import { md } from '@/utils/md';
-
export default defineComponent({
name: 'CollectionsOverview',
components: {
@@ -92,7 +90,7 @@ export default defineComponent({
const isAdmin = computed(() => userStore.currentUser?.role.admin_access === true);
- return { t, tableHeaders, navItems, navigateToCollection, isAdmin, md };
+ return { t, tableHeaders, navItems, navigateToCollection, isAdmin };
function navigateToCollection(navItem: NavItem) {
router.push(navItem.to);
diff --git a/app/src/modules/docs/components/markdown.vue b/app/src/modules/docs/components/markdown.vue
index d903539fbf..38c7ded51e 100644
--- a/app/src/modules/docs/components/markdown.vue
+++ b/app/src/modules/docs/components/markdown.vue
@@ -1,4 +1,5 @@
+
diff --git a/app/src/modules/docs/routes/static.vue b/app/src/modules/docs/routes/static.vue
index ed451b1354..364ff3f332 100644
--- a/app/src/modules/docs/routes/static.vue
+++ b/app/src/modules/docs/routes/static.vue
@@ -7,7 +7,7 @@
-
+ {{ title }}
@@ -20,7 +20,7 @@
-
+
@@ -31,7 +31,6 @@ import { useI18n } from 'vue-i18n';
import { defineComponent, defineAsyncComponent, ref, computed, watch } from 'vue';
import { useRoute, RouteLocation } from 'vue-router';
import DocsNavigation from '../components/navigation.vue';
-import { md } from '@/utils/md';
const Markdown = defineAsyncComponent(() => import('../components/markdown.vue'));
@@ -84,7 +83,7 @@ export default defineComponent({
{ immediate: true, flush: 'post' }
);
- return { t, route, markdown, title, markdownWithoutTitle, md };
+ return { t, route, markdown, title, markdownWithoutTitle };
},
});
diff --git a/app/src/modules/files/components/file-info-sidebar-detail.vue b/app/src/modules/files/components/file-info-sidebar-detail.vue
index 0571c3b1ea..9816cdbf21 100644
--- a/app/src/modules/files/components/file-info-sidebar-detail.vue
+++ b/app/src/modules/files/components/file-info-sidebar-detail.vue
@@ -112,7 +112,7 @@
-
+
@@ -121,7 +121,6 @@ import { useI18n } from 'vue-i18n';
import { defineComponent, computed, ref, watch } from 'vue';
import readableMimeType from '@/utils/readable-mime-type';
import bytes from 'bytes';
-import { md } from '@/utils/md';
import localizedFormat from '@/utils/localized-format';
import api, { addTokenToURL } from '@/api';
import { getRootPath } from '@/utils/get-root-path';
@@ -167,7 +166,6 @@ export default defineComponent({
userCreated,
userModified,
folder,
- md,
folderLink,
getRootPath,
fileLink,
diff --git a/app/src/modules/files/routes/collection.vue b/app/src/modules/files/routes/collection.vue
index a0e09a4008..7b9149d7a0 100644
--- a/app/src/modules/files/routes/collection.vue
+++ b/app/src/modules/files/routes/collection.vue
@@ -135,7 +135,7 @@
-
+
@@ -160,7 +160,6 @@ import FilterSidebarDetail from '@/views/private/components/filter-sidebar-detai
import LayoutSidebarDetail from '@/views/private/components/layout-sidebar-detail';
import AddFolder from '../components/add-folder.vue';
import SearchInput from '@/views/private/components/search-input';
-import { md } from '@/utils/md';
import FolderPicker from '../components/folder-picker.vue';
import emitter, { Events } from '@/events';
import { useRouter } from 'vue-router';
@@ -314,7 +313,6 @@ export default defineComponent({
layout,
filtersWithFolderAndType,
searchQuery,
- md,
moveToDialogActive,
moveToFolder,
moving,
diff --git a/app/src/modules/settings/routes/data-model/collections/collections.vue b/app/src/modules/settings/routes/data-model/collections/collections.vue
index 2e9d12ba22..53f04c8567 100644
--- a/app/src/modules/settings/routes/data-model/collections/collections.vue
+++ b/app/src/modules/settings/routes/data-model/collections/collections.vue
@@ -87,7 +87,7 @@
-
+
@@ -105,7 +105,6 @@ import { useRouter } from 'vue-router';
import { sortBy } from 'lodash';
import CollectionOptions from './components/collection-options.vue';
import CollectionsFilter from './components/collections-filter.vue';
-import { md } from '@/utils/md';
const activeTypes = ref(['visible', 'hidden', 'unmanaged']);
@@ -143,7 +142,7 @@ export default defineComponent({
const { items } = useItems();
- return { t, tableHeaders, items, openCollection, activeTypes, md };
+ return { t, tableHeaders, items, openCollection, activeTypes };
function useItems() {
const visible = computed(() => {
diff --git a/app/src/modules/settings/routes/data-model/fields/fields.vue b/app/src/modules/settings/routes/data-model/fields/fields.vue
index fd5c2d2ffa..320bc09a15 100644
--- a/app/src/modules/settings/routes/data-model/fields/fields.vue
+++ b/app/src/modules/settings/routes/data-model/fields/fields.vue
@@ -77,7 +77,7 @@
-
+
@@ -93,7 +93,6 @@ import FieldsManagement from './components/fields-management.vue';
import useItem from '@/composables/use-item';
import { useRouter } from 'vue-router';
import { useCollectionsStore, useFieldsStore } from '@/stores';
-import { md } from '@/utils/md';
export default defineComponent({
components: { SettingsNavigation, FieldsManagement },
@@ -151,7 +150,6 @@ export default defineComponent({
deleteAndQuit,
saveAndQuit,
hasEdits,
- md,
};
async function deleteAndQuit() {
diff --git a/app/src/modules/settings/routes/presets/collection/components/presets-info-sidebar-detail.vue b/app/src/modules/settings/routes/presets/collection/components/presets-info-sidebar-detail.vue
index 8443dca1fe..2ab2a2b52a 100644
--- a/app/src/modules/settings/routes/presets/collection/components/presets-info-sidebar-detail.vue
+++ b/app/src/modules/settings/routes/presets/collection/components/presets-info-sidebar-detail.vue
@@ -13,7 +13,7 @@
-
+
@@ -21,7 +21,6 @@
import { useI18n } from 'vue-i18n';
import { defineComponent, ref } from 'vue';
import api from '@/api';
-import { md } from '@/utils/md';
import { unexpectedError } from '@/utils/unexpected-error';
export default defineComponent({
@@ -34,7 +33,7 @@ export default defineComponent({
fetchCounts();
- return { t, bookmarksCount, presetsCount, md };
+ return { t, bookmarksCount, presetsCount };
async function fetchCounts() {
loading.value = true;
diff --git a/app/src/modules/settings/routes/presets/item.vue b/app/src/modules/settings/routes/presets/item.vue
index 804e6597a4..1aee1999fc 100644
--- a/app/src/modules/settings/routes/presets/item.vue
+++ b/app/src/modules/settings/routes/presets/item.vue
@@ -78,7 +78,7 @@
-
+