Allow heading tags (h1-h6) in ContentSanitizer so news editor headings render

This commit is contained in:
2026-06-04 07:52:57 +02:00
parent 0b33a1b074
commit 15870ddb1f
191 changed files with 15453 additions and 1786 deletions

View File

@@ -1,7 +1,7 @@
import React, { useState, useMemo, useRef, useCallback, useEffect } from 'react'
import { usePage, Link } from '@inertiajs/react'
import StudioLayout from '../../Layouts/StudioLayout'
import RichTextEditor from '../../components/forum/RichTextEditor'
import UploadDescriptionEditor from '../../components/upload/UploadDescriptionEditor'
import TextInput from '../../components/ui/TextInput'
import Button from '../../components/ui/Button'
import Modal from '../../components/ui/Modal'
@@ -12,6 +12,7 @@ import TagPicker from '../../components/tags/TagPicker'
import SchedulePublishPicker from '../../components/upload/SchedulePublishPicker'
import ArtworkEvolutionSearchPicker from '../../components/artwork/ArtworkEvolutionSearchPicker'
import WorldSubmissionSelector from '../../components/worlds/WorldSubmissionSelector'
import { normalizeMarkdownLiteContent } from '../../utils/contentValidation'
const EDIT_SECTIONS = [
{ id: 'taxonomy', label: 'Category', hint: 'Content type and category path' },
@@ -302,7 +303,7 @@ export default function StudioArtworkEdit() {
const [categoryId, setCategoryId] = useState(artwork?.parent_category_id || null)
const [subCategoryId, setSubCategoryId] = useState(artwork?.sub_category_id || null)
const [title, setTitle] = useState(artwork?.title || '')
const [description, setDescription] = useState(artwork?.description || '')
const [description, setDescription] = useState(() => normalizeMarkdownLiteContent(artwork?.description || ''))
const [tagSlugs, setTagSlugs] = useState(() => (artwork?.tags || []).map((t) => t.slug || t.name))
const [visibility, setVisibility] = useState(artwork?.visibility || (artwork?.is_public ? 'public' : 'private'))
const [publishMode, setPublishMode] = useState(artwork?.publish_mode || (artwork?.artwork_status === 'scheduled' ? 'schedule' : 'now'))
@@ -522,7 +523,7 @@ export default function StudioArtworkEdit() {
const syncCurrentPayload = useCallback((current) => {
if (!current) return
setTitle(current.title || '')
setDescription(current.description || '')
setDescription(normalizeMarkdownLiteContent(current.description || ''))
setTagSlugs(Array.isArray(current.tags) ? current.tags : [])
setContentTypeId(current.content_type_id || null)
setCategoryId(current.category_id || null)
@@ -1473,13 +1474,13 @@ export default function StudioArtworkEdit() {
/>
<FormField label={<FieldLabel label="Description" actionLabel="Description" onAction={() => requestAiIntent('description')} disabled={aiAction !== ''} loading={aiAction === 'analyze' || aiAction === 'regenerate'} />} htmlFor="artwork-description">
<RichTextEditor
content={description}
<UploadDescriptionEditor
id="artwork-description"
value={description}
onChange={handleDescriptionChange}
placeholder="Describe your artwork, tools, inspiration…"
error={errors.description?.[0]}
minHeight={12}
autofocus={false}
rows={10}
/>
</FormField>