페이지 HTML 링크 속성 정규화
This commit is contained in:
@@ -46,6 +46,15 @@ const htmlCursorRange = reactive({
|
||||
end: 0
|
||||
})
|
||||
|
||||
/**
|
||||
* HTML 태그 내부의 스마트 따옴표를 표준 따옴표로 정규화한다.
|
||||
* @param {string} value - 원본 HTML
|
||||
* @returns {string} 정규화된 HTML
|
||||
*/
|
||||
const normalizeHtmlTagQuotes = (value) => String(value || '').replace(/<[^>]*>/g, (tag) => tag
|
||||
.replace(/[“”]/g, '"')
|
||||
.replace(/[‘’]/g, "'"))
|
||||
|
||||
const defaultHtmlDocument = `<!doctype html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
@@ -376,6 +385,28 @@ const insertTextAtHtmlCursor = async (text) => {
|
||||
htmlCursorRange.end = nextCursor
|
||||
}
|
||||
|
||||
/**
|
||||
* HTML textarea 붙여넣기 값을 정규화해 삽입한다.
|
||||
* @param {ClipboardEvent} event - 붙여넣기 이벤트
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
const handleHtmlEditorPaste = async (event) => {
|
||||
if (form.renderMode !== 'html_document') {
|
||||
return
|
||||
}
|
||||
|
||||
const text = event.clipboardData?.getData('text/plain') ?? ''
|
||||
const normalizedText = normalizeHtmlTagQuotes(text)
|
||||
|
||||
if (text === normalizedText) {
|
||||
return
|
||||
}
|
||||
|
||||
event.preventDefault()
|
||||
rememberHtmlCursor()
|
||||
await insertTextAtHtmlCursor(normalizedText)
|
||||
}
|
||||
|
||||
/**
|
||||
* HTML 기본 문서 골격을 현재 본문에 채운다.
|
||||
* @returns {Promise<void>}
|
||||
@@ -491,7 +522,7 @@ const createPayload = () => ({
|
||||
slug: pageSlug.value,
|
||||
status: form.status,
|
||||
renderMode: form.renderMode,
|
||||
content: form.content,
|
||||
content: form.renderMode === 'html_document' ? normalizeHtmlTagQuotes(form.content) : form.content,
|
||||
featuredImage: form.listingImage.trim() || null,
|
||||
isListed: Boolean(form.isListed),
|
||||
isFeatured: Boolean(form.isListed && form.isFeatured),
|
||||
@@ -506,6 +537,10 @@ const createPayload = () => ({
|
||||
* @returns {void}
|
||||
*/
|
||||
const submitPage = () => {
|
||||
if (form.renderMode === 'html_document') {
|
||||
form.content = normalizeHtmlTagQuotes(form.content)
|
||||
}
|
||||
|
||||
emit('submit', createPayload())
|
||||
}
|
||||
|
||||
@@ -608,6 +643,7 @@ defineExpose({
|
||||
@input="rememberHtmlCursor"
|
||||
@keydown="handleHtmlEditorKeydown"
|
||||
@keyup="rememberHtmlCursor"
|
||||
@paste="handleHtmlEditorPaste"
|
||||
@select="rememberHtmlCursor"
|
||||
:placeholder="defaultHtmlDocument"
|
||||
/>
|
||||
|
||||
Reference in New Issue
Block a user