Skip to content

Commit ec1024e

Browse files
committed
feat: Major UI/UX improvements
- Add sorting (newest/oldest first) independent of filters - Implement lazy loading (50 papers per batch) for better performance - Add colorful venue badges for top conferences (NeurIPS, CVPR, ICLR, etc.) - Auto-extract code/project links from abstracts - Add BibTeX export functionality - Show real-time results count - Improve card layout with badge positioning - Add loading indicator with animation
1 parent ecb7e97 commit ec1024e

5 files changed

Lines changed: 2941 additions & 1144 deletions

File tree

UPDATES.md

Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
# DailyPaper 功能更新说明
2+
3+
## 🎉 已实现的新功能
4+
5+
### 1. ✅ 排序功能
6+
- **最新优先**:按发布日期降序排列(默认)
7+
- **最早优先**:按发布日期升序排列
8+
- 排序按钮独立于类别筛选,互不干扰
9+
10+
### 2. ✅ 懒加载(分页加载)
11+
- 首屏只加载 50 篇论文,DOM 轻量化
12+
- 滚动到底部自动加载更多(每次 50 篇)
13+
- 使用 IntersectionObserver 实现高性能监听
14+
- 显示"加载更多..."动画提示
15+
16+
### 3. ✅ Venue 徽章系统
17+
- **顶会彩色徽章**:NeurIPS、CVPR、ICCV、ICML、ICLR、ACL、EMNLP 等
18+
- **视觉区分**:不同会议使用不同渐变色
19+
- **位置优化**:徽章显示在论文卡片右上角
20+
- **预印本标记**:灰色徽章标注 Preprint
21+
22+
### 4. ✅ 代码链接自动提取
23+
- 从摘要中自动提取 `Code:``Project:` 链接
24+
- 自动识别 GitHub 链接
25+
- **绿色按钮**:Code 链接
26+
- **蓝色按钮**:Project 链接
27+
28+
### 5. ✅ 导出功能
29+
- **BibTeX 导出**:一键导出当前筛选结果
30+
- 自动生成引用格式
31+
- 包含标题、作者、年份、ArXiv ID 和 URL
32+
- 支持导出筛选/搜索后的结果
33+
34+
### 6. ✅ 结果统计
35+
- 实时显示当前筛选结果数量
36+
- "显示 X 篇论文"动态更新
37+
38+
## 🎨 界面优化
39+
40+
### 视觉改进
41+
- Venue 徽章渐变色设计
42+
- Code/Project 按钮配色优化
43+
- 加载指示器动画效果
44+
- 论文卡片顶部留出徽章空间
45+
46+
### 用户体验
47+
- 分组筛选器(发表状态、研究领域、排序方式)
48+
- 懒加载减少首屏加载时间
49+
- 平滑滚动和加载体验
50+
51+
## 📊 性能优化
52+
53+
### 加载性能
54+
- 首屏只渲染 50 个 DOM 节点(原来 540+)
55+
- 按需加载剩余内容
56+
- 使用 IntersectionObserver 而非 scroll 事件
57+
58+
### 筛选性能
59+
- 预先筛选和排序,不重复计算
60+
- 克隆节点而非重新生成 HTML
61+
- 减少 DOM 操作次数
62+
63+
## 🔧 技术实现
64+
65+
### 前端
66+
- IntersectionObserver API(懒加载)
67+
- 正则表达式提取代码链接
68+
- Blob API(文件下载)
69+
- CSS 渐变和动画
70+
71+
### 后端
72+
- Python 自动提取会议信息
73+
- 智能徽章分类系统
74+
- 链接提取算法
75+
76+
## 📝 使用说明
77+
78+
### 排序
79+
1. 点击"最新优先"查看最新论文
80+
2. 点击"最早优先"查看历史论文
81+
82+
### 筛选
83+
1. 选择发表状态(全部/已发表/预印本)
84+
2. 选择研究领域(CV/NLP/ML 等)
85+
3. 两种筛选可以组合使用
86+
87+
### 搜索
88+
- 在搜索框输入关键词
89+
- 支持搜索标题、作者、摘要
90+
91+
### 导出
92+
- 筛选/搜索你需要的论文
93+
- 点击"📥 导出结果"按钮
94+
- 自动下载 BibTeX 文件
95+
96+
### 查看代码
97+
- 如果论文有代码,会显示绿色"💻 Code"按钮
98+
- 如果论文有项目页面,会显示蓝色"🌐 Project"按钮
99+
100+
## 🚀 下一步可以实现
101+
102+
### 建议的功能(按优先级)
103+
1. **去重/合并版本**:同一论文多个版本合并
104+
2. **月度分片数据**`2025-10.json``2025-11.json`
105+
3. **CSV 导出**:除了 BibTeX,也支持 CSV 格式
106+
4. **更多排序选项**:按引用数、按相关度
107+
5. **标签云**:可视化热门研究方向
108+
6. **RSS 订阅**:生成 RSS feed
109+
110+
## ⚡ 快速测试
111+
112+
打开浏览器访问 `docs/index.html`,测试以下功能:
113+
- ✅ 滚动到底部,观察懒加载
114+
- ✅ 点击排序按钮,查看论文重新排列
115+
- ✅ 查看右上角的会议徽章颜色
116+
- ✅ 寻找带有 Code/Project 按钮的论文
117+
- ✅ 筛选几篇论文后点击导出
118+
119+
## 📌 注意事项
120+
121+
1. **懒加载**:首次打开只显示 50 篇,需要滚动加载更多
122+
2. **徽章颜色**:只有已发表的顶会论文才有彩色徽章
123+
3. **代码链接**:只有摘要中包含链接的论文才会显示按钮
124+
4. **导出功能**:导出的是当前筛选/搜索的结果,不是全部
125+
126+
## 🎯 实现进度
127+
128+
| 功能 | 状态 | 说明 |
129+
|------|------|------|
130+
| 排序功能 | ✅ 完成 | 最新/最早优先 |
131+
| 懒加载 | ✅ 完成 | 每次加载 50 篇 |
132+
| Venue 徽章 | ✅ 完成 | 顶会彩色标注 |
133+
| 代码链接提取 | ✅ 完成 | 自动识别并显示 |
134+
| BibTeX 导出 | ✅ 完成 | 一键下载 |
135+
| 去重合并 | ⏳ 待实现 | 需要修改数据处理逻辑 |
136+
| 数据分片 | ⏳ 待实现 | 需要修改存储结构 |
137+
| CSV 导出 | ⏳ 待实现 | 扩展导出功能 |
138+
139+
---
140+
141+
所有功能已经部署到本地,可以立即使用!🎉

docs/css/style.css

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,10 +121,44 @@ main {
121121
margin-top: 1rem;
122122
}
123123

124+
/* 结果信息栏 */
125+
.results-info {
126+
display: flex;
127+
justify-content: space-between;
128+
align-items: center;
129+
margin-top: 1rem;
130+
padding: 0.8rem;
131+
background: #f8f9fa;
132+
border-radius: 8px;
133+
}
134+
135+
#resultsCount {
136+
font-size: 0.9rem;
137+
color: #666;
138+
font-weight: 500;
139+
}
140+
141+
.export-btn {
142+
padding: 0.5rem 1rem;
143+
background: #667eea;
144+
color: white;
145+
border: none;
146+
border-radius: 6px;
147+
cursor: pointer;
148+
font-size: 0.9rem;
149+
transition: background 0.3s;
150+
}
151+
152+
.export-btn:hover {
153+
background: #5568d3;
154+
}
155+
124156
/* 论文卡片 */
125157
.paper-card {
158+
position: relative;
126159
background: white;
127160
padding: 1.5rem;
161+
padding-top: 2.5rem;
128162
margin-bottom: 1rem;
129163
border-radius: 10px;
130164
box-shadow: 0 2px 10px rgba(0,0,0,0.05);
@@ -136,6 +170,54 @@ main {
136170
box-shadow: 0 4px 20px rgba(0,0,0,0.1);
137171
}
138172

173+
/* Venue 徽章 */
174+
.venue-badge {
175+
position: absolute;
176+
top: 0.8rem;
177+
right: 0.8rem;
178+
padding: 0.3rem 0.8rem;
179+
border-radius: 4px;
180+
font-size: 0.75rem;
181+
font-weight: 600;
182+
text-transform: uppercase;
183+
letter-spacing: 0.5px;
184+
}
185+
186+
.venue-neurips {
187+
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
188+
color: white;
189+
}
190+
191+
.venue-cvpr, .venue-iccv, .venue-eccv {
192+
background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
193+
color: white;
194+
}
195+
196+
.venue-icml, .venue-iclr {
197+
background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%);
198+
color: white;
199+
}
200+
201+
.venue-acl, .venue-emnlp {
202+
background: linear-gradient(135deg, #43e97b 0%, #38f9d7 100%);
203+
color: white;
204+
}
205+
206+
.venue-aaai, .venue-ijcai {
207+
background: linear-gradient(135deg, #fa709a 0%, #fee140 100%);
208+
color: white;
209+
}
210+
211+
.venue-other {
212+
background: #e8f5e9;
213+
color: #2e7d32;
214+
}
215+
216+
.preprint {
217+
background: #f5f5f5;
218+
color: #757575;
219+
}
220+
139221
.paper-title {
140222
font-size: 1.3rem;
141223
margin-bottom: 0.8rem;
@@ -228,12 +310,29 @@ main {
228310
border-radius: 5px;
229311
font-size: 0.9rem;
230312
transition: background 0.3s;
313+
display: inline-block;
231314
}
232315

233316
.btn-link:hover {
234317
background: #5568d3;
235318
}
236319

320+
.btn-code {
321+
background: #28a745;
322+
}
323+
324+
.btn-code:hover {
325+
background: #218838;
326+
}
327+
328+
.btn-project {
329+
background: #17a2b8;
330+
}
331+
332+
.btn-project:hover {
333+
background: #138496;
334+
}
335+
237336
/* 底部 */
238337
footer {
239338
background: #333;
@@ -256,6 +355,31 @@ footer a {
256355
font-size: 1.1rem;
257356
}
258357

358+
/* 加载指示器 */
359+
.loading-indicator {
360+
text-align: center;
361+
padding: 2rem;
362+
color: #667eea;
363+
font-size: 1rem;
364+
font-weight: 500;
365+
}
366+
367+
.loading-indicator::after {
368+
content: '';
369+
display: inline-block;
370+
width: 20px;
371+
height: 20px;
372+
margin-left: 10px;
373+
border: 3px solid #667eea;
374+
border-radius: 50%;
375+
border-top-color: transparent;
376+
animation: spin 1s linear infinite;
377+
}
378+
379+
@keyframes spin {
380+
to { transform: rotate(360deg); }
381+
}
382+
259383
/* 响应式设计 */
260384
@media (max-width: 768px) {
261385
header h1 {

0 commit comments

Comments
 (0)