diff --git a/frontend/src/components/TableOfContents.tsx b/frontend/src/components/TableOfContents.tsx index a56c56c..b5973a1 100644 --- a/frontend/src/components/TableOfContents.tsx +++ b/frontend/src/components/TableOfContents.tsx @@ -120,7 +120,9 @@ export function TableOfContents({ items, title = 'فهرست مطالب', classN onClick={(event) => go(event, item.id)} aria-current={isActive ? 'location' : undefined} className={`block w-full text-start text-sm font-light leading-8 transition-colors duration-200 ease-lux ${ - item.level === 3 ? 'ps-4 text-[13px]' : '' + // H3 زیرمجموعهٔ H2 است: تورفتگی واضح‌تر و یک پله کوچک‌تر؛ با ps-4 + // تفاوتش با H2 فقط ۴ پیکسل بود و به چشم نمی‌آمد. + item.level === 3 ? 'ps-6 text-[13px]' : '' } ${ isActive ? 'font-normal text-copper' diff --git a/frontend/src/components/admin/ArticleEditor.tsx b/frontend/src/components/admin/ArticleEditor.tsx index a5e9cf9..c91cdaf 100644 --- a/frontend/src/components/admin/ArticleEditor.tsx +++ b/frontend/src/components/admin/ArticleEditor.tsx @@ -311,12 +311,15 @@ export function ArticleEditor({ doc, onChange, contentKey }: ArticleEditorProps) setUploading(true) await runSave(async () => { const { url } = await adminApi.upload(file, name) - // نام پیش‌فرض از نام فایل ساخته می‌شود و در نبود آن، مقدار پیش‌فرض ثابت می‌ماند - const defaultAlt = file.name.replace(/\.[^.]+$/, '').replace(/[-_]+/g, ' ').trim() + // «نام تصویر»ای که کاربر پیش از بارگذاری نوشته، همان Alt تصویر می‌شود؛ + // در نبود آن نام فایل و در نبود آن مقدار پیش‌فرض — تا نیازی به اصلاح دستی + // در جعبهٔ زیر تصویر نباشد. + const typedName = (name ?? '').trim() + const fileAlt = file.name.replace(/\.[^.]+$/, '').replace(/[-_]+/g, ' ').trim() editor .chain() .focus() - .setImage({ src: url, alt: defaultAlt || DEFAULT_IMAGE_ALT }) + .setImage({ src: url, alt: typedName || fileAlt || DEFAULT_IMAGE_ALT }) .run() }) setUploading(false) diff --git a/frontend/src/index.css b/frontend/src/index.css index 976394c..56b144a 100644 --- a/frontend/src/index.css +++ b/frontend/src/index.css @@ -151,19 +151,18 @@ html[lang='en'] .article-body h3 { } /* تیترها و فهرست‌ها هم‌تراز نمی‌شوند — فقط متن پاراگراف تراز می‌شود - (تیتر کوتاه با justify کشیده و بدقلق می‌شود و فهرست نقطه‌گذاری‌اش به‌هم می‌ریزد). */ + (تیتر کوتاه با justify کشیده و بدقلق می‌شود و فهرست نقطه‌گذاری‌اش به‌هم می‌ریزد). + کپشن عمداً در این فهرست نیست: کپشن تصویر همیشه وسط‌چین است (قاعدهٔ پایین‌تر). */ [data-dir='rtl'] .article-body h1, [data-dir='rtl'] .article-body h2, [data-dir='rtl'] .article-body h3, -[data-dir='rtl'] .article-body li, -[data-dir='rtl'] .article-body figcaption { +[data-dir='rtl'] .article-body li { text-align: right; } [data-dir='ltr'] .article-body h1, [data-dir='ltr'] .article-body h2, [data-dir='ltr'] .article-body h3, -[data-dir='ltr'] .article-body li, -[data-dir='ltr'] .article-body figcaption { +[data-dir='ltr'] .article-body li { text-align: left; } [data-dir='ltr'] .article-body h1 { @@ -283,6 +282,10 @@ html[lang='en'] .article-body h3 { /* تراز از جهت بلوک پیروی می‌کند — در مقاله انگلیسی چپ و در فارسی راست */ text-align: start; } +/* متن کپشن در ویرایشگر هم وسط‌چین است تا با خروجی سایت یکی باشد */ +[data-wysiwyg] .article-figure__caption input[type='text'] { + text-align: center; +} [data-wysiwyg] .article-figure-node.is-selected .article-figure { outline: 1px dashed rgba(213, 135, 76, 0.8); outline-offset: 3px;