feat: 站点单页、时间线导入与行级 BBCode 短代码

首页右栏接入单页入口与公告置顶/全部页;Markdown 编辑器支持可视化时间线与 Git 导入;隐藏块改为 [hide]/[timeline] 命名闭合,并修复单页/公告 GORM 更新只改 updated_at 的问题。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-09-17 19:52:06 +08:00
parent 2aacf99a49
commit a83276060f
52 changed files with 5073 additions and 648 deletions

View File

@@ -1629,6 +1629,23 @@ body {
background: var(--panel-2) !important;
color: var(--ink) !important;
}
.j13-md-menu-item:disabled,
.j13-md-menu-item[aria-disabled="true"] {
opacity: 0.45;
cursor: not-allowed;
color: var(--ink-3) !important;
}
.j13-md-menu-item:disabled:hover,
.j13-md-menu-item[aria-disabled="true"]:hover {
background: transparent !important;
color: var(--ink-3) !important;
}
.j13-md-menu-item-hint {
margin-left: auto;
font-size: 11.5px;
font-weight: 500;
color: var(--ink-3);
}
.j13-md-popover button[role="menuitem"]:focus-visible,
.j13-md-menu-item:focus-visible {
outline: 2px solid var(--accent);
@@ -3773,12 +3790,24 @@ a.j13-mention-token:hover {
.j13-anno-tag.is-red { background: rgba(200, 40, 30, 0.1); color: #c8281e; }
.j13-anno-tag.is-purple { background: rgba(109, 71, 192, 0.12); color: #6d47c0; }
.j13-anno-tag.is-gray { background: rgba(82, 96, 122, 0.13); color: #52607a; }
.j13-anno-tag.is-teal { background: rgba(15, 118, 110, 0.12); color: #0f766e; }
.j13-anno-tag.is-cyan { background: rgba(14, 116, 144, 0.12); color: #0e7490; }
.j13-anno-tag.is-pink { background: rgba(190, 24, 93, 0.11); color: #be185d; }
.j13-anno-tag.is-amber { background: rgba(180, 83, 9, 0.12); color: #b45309; }
.j13-anno-tag.is-indigo { background: rgba(67, 56, 202, 0.12); color: #4338ca; }
.j13-anno-tag.is-rose { background: rgba(190, 18, 60, 0.11); color: #be123c; }
.dark .j13-anno-tag.is-blue { background: rgba(169, 184, 255, 0.18); color: #a9b8ff; }
.dark .j13-anno-tag.is-green { background: rgba(88, 209, 138, 0.16); color: #58d18a; }
.dark .j13-anno-tag.is-orange { background: rgba(240, 135, 90, 0.17); color: #f0875a; }
.dark .j13-anno-tag.is-red { background: rgba(255, 107, 96, 0.16); color: #ff6b60; }
.dark .j13-anno-tag.is-purple { background: rgba(192, 168, 245, 0.18); color: #c0a8f5; }
.dark .j13-anno-tag.is-gray { background: rgba(170, 182, 207, 0.17); color: #aab6cf; }
.dark .j13-anno-tag.is-teal { background: rgba(94, 234, 212, 0.16); color: #5eead4; }
.dark .j13-anno-tag.is-cyan { background: rgba(103, 232, 249, 0.16); color: #67e8f9; }
.dark .j13-anno-tag.is-pink { background: rgba(251, 113, 133, 0.16); color: #fb7185; }
.dark .j13-anno-tag.is-amber { background: rgba(252, 211, 77, 0.16); color: #fcd34d; }
.dark .j13-anno-tag.is-indigo { background: rgba(165, 180, 252, 0.18); color: #a5b4fc; }
.dark .j13-anno-tag.is-rose { background: rgba(251, 113, 133, 0.16); color: #fb7185; }
/* 后台颜色选择器圆点 */
.j13-anno-dot {
@@ -3801,12 +3830,134 @@ a.j13-mention-token:hover {
.j13-anno-dot.is-red { background: #c8281e; }
.j13-anno-dot.is-purple { background: #6d47c0; }
.j13-anno-dot.is-gray { background: #52607a; }
.j13-anno-dot.is-teal { background: #0f766e; }
.j13-anno-dot.is-cyan { background: #0e7490; }
.j13-anno-dot.is-pink { background: #be185d; }
.j13-anno-dot.is-amber { background: #b45309; }
.j13-anno-dot.is-indigo { background: #4338ca; }
.j13-anno-dot.is-rose { background: #be123c; }
.dark .j13-anno-dot.is-blue { background: #a9b8ff; }
.dark .j13-anno-dot.is-green { background: #58d18a; }
.dark .j13-anno-dot.is-orange { background: #f0875a; }
.dark .j13-anno-dot.is-red { background: #ff6b60; }
.dark .j13-anno-dot.is-purple { background: #c0a8f5; }
.dark .j13-anno-dot.is-gray { background: #aab6cf; }
.dark .j13-anno-dot.is-teal { background: #5eead4; }
.dark .j13-anno-dot.is-cyan { background: #67e8f9; }
.dark .j13-anno-dot.is-pink { background: #fb7185; }
.dark .j13-anno-dot.is-amber { background: #fcd34d; }
.dark .j13-anno-dot.is-indigo { background: #a5b4fc; }
.dark .j13-anno-dot.is-rose { background: #fb7185; }
/* ----- 正文时间线(更新树) ----- */
.j13-timeline {
margin: 1.1rem 0;
padding: 0.15rem 0;
}
.j13-timeline-day {
margin-bottom: 1.15rem;
}
.j13-timeline-day:last-child {
margin-bottom: 0;
}
.j13-timeline-day-label {
font-size: 12.5px;
font-weight: 600;
letter-spacing: 0.02em;
color: var(--ink-3);
margin-bottom: 0.55rem;
font-variant-numeric: tabular-nums;
}
.j13-timeline-items {
list-style: none;
margin: 0;
padding: 0 0 0 0.85rem;
border-left: 2px solid var(--line);
display: flex;
flex-direction: column;
gap: 0.75rem;
}
.j13-timeline-item {
position: relative;
padding-left: 0.95rem;
}
.j13-timeline-dot {
position: absolute;
left: -0.85rem;
top: 0.45rem;
width: 0.55rem;
height: 0.55rem;
border-radius: 999px;
background: var(--accent);
border: 2px solid var(--panel);
box-shadow: 0 0 0 1px var(--line);
transform: translateX(-50%);
}
.j13-timeline-card {
min-width: 0;
}
.j13-timeline-head {
display: flex;
align-items: flex-start;
gap: 0.45rem;
}
.j13-timeline-title {
margin: 0;
font-size: 14.5px;
font-weight: 650;
line-height: 1.45;
color: var(--ink);
}
.j13-timeline-src {
flex-shrink: 0;
margin-top: 0.15rem;
color: var(--ink-3);
}
.j13-timeline-src:hover {
color: var(--accent);
}
.j13-timeline-body {
margin-top: 0.35rem;
font-size: 13.5px;
line-height: 1.65;
color: var(--ink-2);
}
.j13-timeline-body > :first-child { margin-top: 0; }
.j13-timeline-body > :last-child { margin-bottom: 0; }
/* 时间线编辑器 */
.j13-tl-import {
padding: 0.85rem 0.95rem;
border-radius: 10px;
background: var(--tint);
border: 1px solid var(--line);
}
.j13-tl-urls,
.j13-tl-field,
.j13-tl-select {
width: 100%;
border: 1px solid var(--line-2);
border-radius: 8px;
background: var(--panel);
color: var(--ink);
font-size: 13px;
padding: 0.45rem 0.6rem;
}
.j13-tl-urls {
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
resize: vertical;
min-height: 4.5rem;
}
.j13-tl-select {
width: auto;
padding: 0.25rem 0.45rem;
}
.j13-tl-edit-card {
padding: 0.75rem;
border-radius: 10px;
border: 1px solid var(--line);
background: var(--panel);
}
/* ----- 分页 ----- */
.pager-btn {