opnform-host-nginx/client/composables/useParseMention.js

40 lines
1.2 KiB
JavaScript

import { FormSubmissionFormatter } from '~/components/forms/components/FormSubmissionFormatter'
export function useParseMention(content, mentionsAllowed, form, formData) {
if (!mentionsAllowed || !form || !formData) {
return content
}
const formatter = new FormSubmissionFormatter(form, formData).setOutputStringsOnly()
const formattedData = formatter.getFormattedData()
// Create a new DOMParser
const parser = new DOMParser()
// Parse the content as HTML
const doc = parser.parseFromString(content, 'text/html')
// Find all elements with mention attribute
const mentionElements = doc.querySelectorAll('[mention], [mention=""]')
mentionElements.forEach(element => {
const fieldId = element.getAttribute('mention-field-id')
const fallback = element.getAttribute('mention-fallback')
const value = formattedData[fieldId]
if (value) {
if (Array.isArray(value)) {
element.textContent = value.join(', ')
} else {
element.textContent = value
}
} else if (fallback) {
element.textContent = fallback
} else {
element.remove()
}
})
// Return the processed HTML content
return doc.body.innerHTML
}