release: bump version to 0.76.4
This commit is contained in:
@@ -8,6 +8,20 @@ This project follows the repository versioning rule:
|
||||
- `improvement` -> `+0.0.1`(bugfix + 小功能混合)
|
||||
- `bugfix` -> `+0.0.1`
|
||||
|
||||
## [0.76.4] — 2026-10-01
|
||||
|
||||
Released: 2026-10-01
|
||||
|
||||
### Highlights
|
||||
- 修正 breaking 新闻状态显示:ticker 仅在当前滚动到 breaking 新闻时变红,展开面板始终保持蓝色。
|
||||
|
||||
### Added / Fixed / Improved
|
||||
- 选中、焦点、关闭动画与 breaking 数据状态彻底分离,关闭新闻栏不再留下橙色边线。
|
||||
- breaking 新闻按过期时间重新计算,单条新闻卡片继续保留自身 breaking 红色样式。
|
||||
- 增加 ticker breaking 状态单测和浏览器关闭/重开验证。
|
||||
|
||||
---
|
||||
|
||||
## [0.76.3] — 2026-10-01
|
||||
|
||||
Released: 2026-10-01
|
||||
|
||||
@@ -16,12 +16,13 @@
|
||||
## Current Version
|
||||
|
||||
- `main` 当前主线历史推导到:`0.16.5`
|
||||
- `dev` 当前开发分支历史推导到:`0.76.3`
|
||||
- `dev` 当前开发分支历史推导到:`0.76.4`
|
||||
|
||||
## Timeline
|
||||
|
||||
| Version | Type | Branch | Commit | Summary |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| `0.76.4` | bugfix | `dev` | `v0.76.4` | 修正 breaking 新闻 ticker 与面板状态边界,当前滚动到 breaking 项时才显示红色 |
|
||||
| `0.76.3` | bugfix | `dev` | `v0.76.3` | 修复新闻栏关闭后残留 breaking 橙色边线,分离 ticker、面板、选择和过期状态 |
|
||||
| `0.76.2` | bugfix | `dev` | `v0.76.2` | 优化光缆密集区卫星点拾取,统一点状对象与线缆候选排序并补齐回归验证 |
|
||||
| `0.76.1` | bugfix | `dev` | `v0.76.1` | 修复选中 BGP 事件静态光晕地表遮挡,统一事件锚点显隐与前景偏移,清理中间态逻辑并补齐验证 |
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "planet-frontend",
|
||||
"version": "0.76.3",
|
||||
"version": "0.76.4",
|
||||
"private": true,
|
||||
"packageManager": "bun@1",
|
||||
"dependencies": {
|
||||
|
||||
@@ -499,7 +499,6 @@
|
||||
|
||||
.earth-news-hud.has-breaking-watch,
|
||||
.earth-mobile-news-board.has-breaking-watch {
|
||||
background: linear-gradient(180deg, rgba(72, 53, 26, 0.94), rgba(28, 24, 18, 0.96));
|
||||
box-shadow:
|
||||
0 0 0 1px rgba(255, 213, 128, 0.08) inset,
|
||||
0 18px 46px rgba(156, 106, 20, 0.12);
|
||||
@@ -507,7 +506,6 @@
|
||||
|
||||
.earth-news-hud.has-breaking-breaking,
|
||||
.earth-mobile-news-board.has-breaking-breaking {
|
||||
background: linear-gradient(180deg, rgba(82, 44, 28, 0.94), rgba(32, 22, 18, 0.96));
|
||||
box-shadow:
|
||||
0 0 0 1px rgba(255, 166, 102, 0.14) inset,
|
||||
0 18px 48px rgba(185, 89, 32, 0.16);
|
||||
@@ -515,7 +513,6 @@
|
||||
|
||||
.earth-news-hud.has-breaking-critical,
|
||||
.earth-mobile-news-board.has-breaking-critical {
|
||||
background: linear-gradient(180deg, rgba(76, 32, 38, 0.94), rgba(30, 18, 24, 0.96));
|
||||
box-shadow:
|
||||
0 0 0 1px rgba(255, 118, 118, 0.18) inset,
|
||||
0 18px 52px rgba(172, 43, 43, 0.18);
|
||||
|
||||
@@ -62,6 +62,7 @@ let morphTimer = null;
|
||||
let morphFrame = null;
|
||||
let panelPhase = "closed";
|
||||
let breakingExpiryTimer = null;
|
||||
let tickerBreakingTimer = null;
|
||||
let newsRealtimeSocket = null;
|
||||
let newsRealtimeReconnectTimer = null;
|
||||
let activeNewsCategoryFilters = null;
|
||||
@@ -413,20 +414,8 @@ function normalizeBreakingScope(scope) {
|
||||
function applyNewsBreakingShellState(nextPayload) {
|
||||
if (breakingExpiryTimer !== null) window.clearTimeout(breakingExpiryTimer);
|
||||
breakingExpiryTimer = null;
|
||||
const { level, expiresAt } = getNewsBreakingState(nextPayload);
|
||||
document
|
||||
.querySelectorAll(".earth-news-hud, .earth-mobile-news-board")
|
||||
.forEach((element) => {
|
||||
if (!(element instanceof HTMLElement)) return;
|
||||
element.classList.remove(
|
||||
"has-breaking-watch",
|
||||
"has-breaking-breaking",
|
||||
"has-breaking-critical",
|
||||
);
|
||||
if (level !== "none") {
|
||||
element.classList.add(`has-breaking-${level}`);
|
||||
}
|
||||
});
|
||||
const { expiresAt } = getNewsBreakingState(nextPayload);
|
||||
scheduleTickerBreakingWatcher();
|
||||
if (expiresAt !== null) {
|
||||
breakingExpiryTimer = window.setTimeout(() => {
|
||||
breakingExpiryTimer = null;
|
||||
@@ -738,6 +727,7 @@ function renderTicker(nextPayload) {
|
||||
}
|
||||
|
||||
if (items.length === 0) {
|
||||
stopTickerBreakingWatcher();
|
||||
tickerTrack.textContent = translateText("正在准备全球态势新闻...");
|
||||
tickerTrack.style.removeProperty("--news-ticker-duration");
|
||||
return;
|
||||
@@ -745,23 +735,69 @@ function renderTicker(nextPayload) {
|
||||
|
||||
const visibleItems = getDisplayableNewsItems(items).slice(0, 6);
|
||||
if (visibleItems.length === 0) {
|
||||
stopTickerBreakingWatcher();
|
||||
tickerTrack.textContent = translateText("当前新闻类型没有可显示新闻...");
|
||||
tickerTrack.style.removeProperty("--news-ticker-duration");
|
||||
return;
|
||||
}
|
||||
const tickerItems = [...visibleItems, ...visibleItems];
|
||||
tickerTrack.innerHTML = tickerItems
|
||||
.map((item) => `
|
||||
<span class="earth-news-ticker__item" data-news-id="${escapeTickerText(item.id || "")}">
|
||||
.map((item) => {
|
||||
const breakingLevel = isBreakingActive(item) ? normalizeBreakingLevel(item.breaking_level) : "none";
|
||||
const breakingClass = breakingLevel === "none" ? "" : ` earth-news-ticker__item--breaking-${breakingLevel}`;
|
||||
return `
|
||||
<span class="earth-news-ticker__item${breakingClass}" data-news-id="${escapeTickerText(item.id || "")}" data-breaking-level="${breakingLevel}">
|
||||
<span class="earth-news-ticker__source">${escapeTickerText(getNewsSourceNameLabel({
|
||||
id: item.source_id,
|
||||
name: item.source || item.feed_name || "NEWS",
|
||||
}))}</span>
|
||||
<span>${escapeTickerText(getNewsDisplaySummary(item))}</span>
|
||||
</span>
|
||||
`)
|
||||
`;
|
||||
})
|
||||
.join("");
|
||||
tickerTrack.style.setProperty("--news-ticker-duration", `${Math.max(22, visibleItems.length * 7)}s`);
|
||||
scheduleTickerBreakingWatcher();
|
||||
}
|
||||
|
||||
function stopTickerBreakingWatcher() {
|
||||
if (tickerBreakingTimer !== null) window.clearTimeout(tickerBreakingTimer);
|
||||
tickerBreakingTimer = null;
|
||||
document.getElementById("desktop-news-ticker")?.classList.remove(
|
||||
"has-breaking-watch",
|
||||
"has-breaking-breaking",
|
||||
"has-breaking-critical",
|
||||
);
|
||||
}
|
||||
|
||||
function updateTickerBreakingState() {
|
||||
const ticker = document.getElementById("desktop-news-ticker");
|
||||
const viewport = ticker?.querySelector(".earth-news-ticker__viewport");
|
||||
const items = viewport ? [...viewport.querySelectorAll(".earth-news-ticker__item")] : [];
|
||||
if (!(ticker instanceof HTMLElement) || !(viewport instanceof HTMLElement) || items.length === 0) {
|
||||
stopTickerBreakingWatcher();
|
||||
return;
|
||||
}
|
||||
const viewportRect = viewport.getBoundingClientRect();
|
||||
const viewportCenter = viewportRect.left + viewportRect.width / 2;
|
||||
let best = null;
|
||||
for (const item of items) {
|
||||
const rect = item.getBoundingClientRect();
|
||||
const overlap = Math.max(0, Math.min(rect.right, viewportRect.right) - Math.max(rect.left, viewportRect.left));
|
||||
if (overlap <= 0) continue;
|
||||
const distance = Math.abs((rect.left + rect.right) / 2 - viewportCenter);
|
||||
if (!best || overlap > best.overlap || (overlap === best.overlap && distance < best.distance)) {
|
||||
best = { overlap, distance, level: normalizeBreakingLevel(item.dataset.breakingLevel) };
|
||||
}
|
||||
}
|
||||
ticker.classList.remove("has-breaking-watch", "has-breaking-breaking", "has-breaking-critical");
|
||||
if (best?.level && best.level !== "none") ticker.classList.add(`has-breaking-${best.level}`);
|
||||
tickerBreakingTimer = window.setTimeout(updateTickerBreakingState, 120);
|
||||
}
|
||||
|
||||
function scheduleTickerBreakingWatcher() {
|
||||
stopTickerBreakingWatcher();
|
||||
tickerBreakingTimer = window.setTimeout(updateTickerBreakingState, 0);
|
||||
}
|
||||
|
||||
function renderEmptyState(message) {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[project]
|
||||
name = "planet"
|
||||
version = "0.76.3"
|
||||
version = "0.76.4"
|
||||
description = "智能星球计划 - 态势感知系统"
|
||||
requires-python = ">=3.14"
|
||||
dependencies = [
|
||||
|
||||
Reference in New Issue
Block a user