134 lines
6.6 KiB
HTML
134 lines
6.6 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="zh-CN">
|
||
<head>
|
||
<meta charset="UTF-8" />
|
||
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:;" />
|
||
<title>剪贴板历史</title>
|
||
<link rel="stylesheet" href="themes/fonts.css" />
|
||
<link rel="stylesheet" href="themes/tokens.css" />
|
||
<link rel="stylesheet" href="themes/themes.css" />
|
||
<link rel="stylesheet" href="themes/accents.css" />
|
||
<link rel="stylesheet" href="styles.css" />
|
||
<script src="theme-boot.js"></script>
|
||
</head>
|
||
<body>
|
||
<div id="root">
|
||
<!-- 拖动区 -->
|
||
<header id="drag-bar">
|
||
<img id="app-icon" alt="" />
|
||
<h1 id="title">剪贴板历史</h1>
|
||
<span id="ipc-status" class="ipc-dot" title="IPC 订阅状态" aria-label="IPC 状态"></span>
|
||
<span class="spacer"></span>
|
||
<button id="refresh-btn" class="icon-btn" title="刷新 (F5)" aria-label="刷新">
|
||
<svg viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
|
||
<path d="M14 8a6 6 0 0 0-10.5-4L2 5.5"/>
|
||
<polyline points="2 2 2 5.5 5.5 5.5"/>
|
||
<path d="M2 8a6 6 0 0 0 10.5 4L14 10.5"/>
|
||
<polyline points="14 14 14 10.5 10.5 10.5"/>
|
||
</svg>
|
||
</button>
|
||
<button id="settings-btn" class="icon-btn" title="设置" aria-label="设置">
|
||
<svg viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
|
||
<path d="M12.33 10.5L14.4 9.1L14.4 6.9L12.33 5.5L12.2 3L10.2 1.9L8 3L5.8 1.9L3.8 3L3.7 5.5L1.6 6.9L1.6 9.1L3.7 10.5L3.8 13L5.8 14.1L8 13L10.2 14.1L12.2 13Z"/>
|
||
<circle cx="8" cy="8" r="2"/>
|
||
</svg>
|
||
</button>
|
||
<button id="pin-btn" class="icon-btn" title="窗口置顶" aria-label="窗口置顶" aria-pressed="true">
|
||
<svg viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
|
||
<line x1="8" y1="11.3" x2="8" y2="14.7"/>
|
||
<path d="M3.3 11.3h9.4v-1.2a1.3 1.3 0 0 0-.7-1.2l-1.2-.6a1.3 1.3 0 0 1-.7-1.2V4a1.7 1.7 0 0 0-3.4 0v3.1a1.3 1.3 0 0 1-.7 1.2l-1.2.6a1.3 1.3 0 0 0-.7 1.2Z"/>
|
||
</svg>
|
||
</button>
|
||
<button id="close-btn" class="icon-btn" title="关闭 (Esc)" aria-label="关闭">
|
||
<svg viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
|
||
<path d="M3.5 3.5l9 9M12.5 3.5l-9 9"/>
|
||
</svg>
|
||
</button>
|
||
</header>
|
||
|
||
<!-- Tab 栏 -->
|
||
<nav id="tabs">
|
||
<button class="tab active" data-tab="history" type="button">历史<span class="tab-count" id="history-count">0</span></button>
|
||
<button class="tab" data-tab="favorites" type="button">收藏<span class="tab-count" id="fav-count">0</span></button>
|
||
</nav>
|
||
|
||
<!-- 搜索 -->
|
||
<div id="search-row">
|
||
<div id="search-wrap">
|
||
<svg id="search-icon" viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
|
||
<circle cx="7" cy="7" r="4.5"/>
|
||
<path d="m13.5 13.5-3-3"/>
|
||
</svg>
|
||
<input id="search" type="text" placeholder="搜索剪贴板内容…" autocomplete="off" spellcheck="false" />
|
||
<button id="search-clear" type="button" title="清空搜索" aria-label="清空搜索">
|
||
<svg viewBox="0 0 16 16" width="12" height="12" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
|
||
<circle cx="8" cy="8" r="6"/>
|
||
<path d="M5.5 5.5l5 5M10.5 5.5l-5 5"/>
|
||
</svg>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- 列表 -->
|
||
<main id="list-wrap">
|
||
<ul id="list"></ul>
|
||
<div id="empty" class="hidden">
|
||
<svg class="empty-icon" viewBox="0 0 64 64" width="56" height="56" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
|
||
<rect x="22" y="12" width="20" height="8" rx="2"/>
|
||
<rect x="14" y="18" width="36" height="34" rx="4"/>
|
||
<path d="M22 30h20M22 36h14M22 42h10"/>
|
||
</svg>
|
||
<p class="empty-title">还没有剪贴板记录</p>
|
||
<p class="muted">复制一段文本或图片,就会自动出现在这里</p>
|
||
</div>
|
||
</main>
|
||
|
||
<!-- 状态栏 -->
|
||
<footer id="status">
|
||
<span id="status-left">就绪</span>
|
||
<span class="shortcuts">
|
||
<kbd>↑</kbd><kbd>↓</kbd> 选择
|
||
<span class="dot">·</span>
|
||
<kbd>1</kbd>–<kbd>9</kbd> / <kbd>Enter</kbd> 复制
|
||
<span class="dot">·</span>
|
||
<kbd>Esc</kbd> 关闭
|
||
</span>
|
||
</footer>
|
||
</div>
|
||
|
||
<!-- 单条卡片模板 -->
|
||
<template id="card-tpl">
|
||
<li class="card" tabindex="0">
|
||
<div class="card-head">
|
||
<span class="slot hidden"></span>
|
||
<span class="time"></span>
|
||
<span class="badge type"></span>
|
||
<span class="spacer"></span>
|
||
<button class="action fav" title="收藏" aria-label="收藏">
|
||
<svg viewBox="0 0 16 16" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
|
||
<path d="M8 1.8l1.95 4.05 4.45.6-3.25 3.1.8 4.45L8 11.9l-3.95 2.1.8-4.45L1.6 6.45l4.45-.6z"/>
|
||
</svg>
|
||
</button>
|
||
<button class="action copy" title="复制 (Enter)" aria-label="复制">
|
||
<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
|
||
<rect x="5" y="5" width="8" height="9" rx="1.5"/>
|
||
<path d="M3 11V3.5A1.5 1.5 0 0 1 4.5 2H10"/>
|
||
</svg>
|
||
<span>复制</span>
|
||
</button>
|
||
<button class="action delete" title="删除" aria-label="删除">
|
||
<svg viewBox="0 0 16 16" width="13" height="13" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
|
||
<path d="M3 4.5h10M6.5 4.5V3a1 1 0 0 1 1-1h1a1 1 0 0 1 1 1v1.5M4.5 4.5l.6 9a1.5 1.5 0 0 0 1.5 1.4h2.8a1.5 1.5 0 0 0 1.5-1.4l.6-9"/>
|
||
</svg>
|
||
</button>
|
||
</div>
|
||
<div class="card-body">
|
||
<p class="text-preview"></p>
|
||
<img class="image-preview hidden" alt="" />
|
||
</div>
|
||
</li>
|
||
</template>
|
||
|
||
<script src="renderer.js"></script>
|
||
</body>
|
||
</html> |