feat(blog): add admin endpoint for blog details and cache invalidation
- Implemented `adminDetail()` method in `BlogController` to retrieve blog posts of any status for admin editing. - Introduced `BlogCacheInvalidator` service to handle cache invalidation after blog create/update/delete actions. - Updated existing methods in `BlogController` and `RepresentationBlogController` to call cache invalidation on blog modifications. - Enhanced `BlogFormPage` and `RepresentationBlogFormPage` to utilize the new admin endpoint for fetching blog data. - Added tests for `BlogCacheInvalidator` to ensure proper functionality and error handling. - Updated documentation to reflect new API endpoint and cache invalidation behavior.
This commit is contained in:
@@ -966,3 +966,66 @@ html, body { max-width: 100%; overflow-x: hidden; }
|
||||
میشود تا ساعت دوتایی نشود — مثل مبدأ tauri که فقط یک ClockField دارد. */
|
||||
.time-input-plain::-webkit-calendar-picker-indicator { display: none; }
|
||||
.time-input-plain { appearance: none; -webkit-appearance: none; }
|
||||
|
||||
/* ── CKEditor 5 ────────────────────────────────────────────────────────────
|
||||
ادیتور همهٔ رنگهایش را از متغیرهای --ck-color-* خودش میگیرد و پیشفرض آنها
|
||||
روشن است؛ بدون این نگاشت، ادیتور در [data-theme="dark"] سفید میماند. */
|
||||
.ck-rtl { direction: rtl; }
|
||||
.ck-rtl .ck.ck-editor__editable { min-height: 320px; }
|
||||
|
||||
/* .ck-body-wrapper هم لازم است: بالنِ لینک و جدول به <body> منتقل میشوند و
|
||||
بیرون از .ck-editor قرار میگیرند، پس متغیرها به آنها ارث نمیرسد. */
|
||||
.ck.ck-editor,
|
||||
.ck-body-wrapper {
|
||||
--ck-color-base-background: var(--surface);
|
||||
--ck-color-base-foreground: var(--surface-2);
|
||||
--ck-color-base-text: var(--text);
|
||||
--ck-color-base-border: var(--border);
|
||||
--ck-color-base-active: var(--primary);
|
||||
--ck-color-base-active-focus: var(--primary-600);
|
||||
--ck-color-text: var(--text);
|
||||
--ck-color-toolbar-background: var(--surface-2);
|
||||
--ck-color-toolbar-border: var(--border);
|
||||
--ck-color-button-default-background: transparent;
|
||||
--ck-color-button-default-hover-background: var(--surface-3);
|
||||
--ck-color-button-default-active-background: var(--surface-3);
|
||||
--ck-color-button-on-background: var(--primary-soft);
|
||||
--ck-color-button-on-hover-background: var(--primary-soft2);
|
||||
--ck-color-button-on-color: var(--primary);
|
||||
--ck-color-dropdown-panel-background: var(--surface);
|
||||
--ck-color-dropdown-panel-border: var(--border);
|
||||
--ck-color-list-background: var(--surface);
|
||||
--ck-color-list-button-hover-background: var(--surface-3);
|
||||
--ck-color-list-button-on-background: var(--primary-soft);
|
||||
--ck-color-list-button-on-text: var(--primary);
|
||||
--ck-color-panel-background: var(--surface);
|
||||
--ck-color-panel-border: var(--border);
|
||||
--ck-color-input-background: var(--surface);
|
||||
--ck-color-input-border: var(--border);
|
||||
--ck-color-input-text: var(--text);
|
||||
--ck-color-input-disabled-background: var(--surface-2);
|
||||
--ck-color-labeled-field-label-background: var(--surface);
|
||||
--ck-color-split-button-hover-background: var(--surface-3);
|
||||
--ck-color-split-button-hover-border: var(--border-2);
|
||||
--ck-color-tooltip-background: var(--surface-3);
|
||||
--ck-color-tooltip-text: var(--text);
|
||||
--ck-color-editable-blur-selection: var(--surface-3);
|
||||
--ck-border-radius: var(--r-sm);
|
||||
}
|
||||
.ck.ck-editor__editable_inline { background: var(--surface); color: var(--text); }
|
||||
.ck.ck-editor__editable_inline.ck-focused {
|
||||
border-color: var(--primary);
|
||||
box-shadow: 0 0 0 4px var(--ring);
|
||||
}
|
||||
.ck.ck-content blockquote { border-inline-start: 3px solid var(--border-2); color: var(--text-2); }
|
||||
.ck.ck-content a { color: var(--primary); }
|
||||
.ck.ck-content :is(h2, h3, h4, h5, strong) { color: var(--text); }
|
||||
.ck.ck-content :is(table td, table th) { border-color: var(--border); }
|
||||
.ck.ck-content table th { background: var(--surface-2); }
|
||||
|
||||
/* آیکونهای SVG ادیتور fill ثابت دارند؛ بدون currentColor در دارکمود دیده نمیشوند. */
|
||||
[data-theme="dark"] .ck.ck-button,
|
||||
[data-theme="dark"] .ck.ck-button .ck-button__label { color: var(--text-2); }
|
||||
[data-theme="dark"] .ck.ck-icon,
|
||||
[data-theme="dark"] .ck.ck-icon :is(path, polygon, rect, circle, ellipse) { fill: currentColor; }
|
||||
[data-theme="dark"] .ck.ck-button.ck-on .ck-icon :is(path, polygon, rect, circle, ellipse) { fill: var(--primary); }
|
||||
|
||||
Reference in New Issue
Block a user