Files
flowdeck/extension/popup.html
T
bruno 0b251649e5
FlowDeck CI / lint (push) Successful in 1m11s
FlowDeck CI / test (push) Failing after 8m32s
FlowDeck CI / docker (push) Skipped
feat: v6.2.0 Web Clipper — extension navigateur (capture article/selection/bookmark/screenshot)
- Service app/services/web_clipper.py: sanitize HTML, html->blocks, extraction article, creation page workspace-aware, rate limit 50/h, device registration
- Router app/routers/web_clipper.py: POST /api/v2/web-clipper/clip, GET /status, POST /auth/verify, GET/DELETE /devices, GET /extensions (download page), auth via session ou Bearer (api_tokens / extension_devices)
- Migration 19: extension_devices + extension_clips (+ indexes)
- Extension Manifest V3: content.js (floating button, selection), background.js (clip + contextMenus), popup.html/js, clipper.css, icons
- Settings UI: onglet Extensions (liste devices, revoke, test clip, liens download), page /extensions
- Tests: 16 tests web_clipper (sanitize, blocks, article/bookmark/selection/screenshot, bearer, rate-limit, devices, extensions page)
- Bump version 6.1.0 -> 6.2.0
2026-09-19 23:26:03 -04:00

52 lines
2.4 KiB
HTML

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<style>
*{box-sizing:border-box;margin:0;padding:0}
body{font-family:system-ui,sans-serif;width:340px;padding:16px;background:#191919;color:#e0e0e0}
h2{font-size:15px;margin-bottom:6px}
.desc{font-size:12px;color:#999;margin-bottom:12px;line-height:1.4}
label{font-size:11px;color:#999;text-transform:uppercase;letter-spacing:.5px;display:block;margin-top:10px;margin-bottom:4px}
input{width:100%;background:#2a2a2a;border:1px solid #3a3a3a;border-radius:6px;color:#fff;padding:8px 10px;font-size:13px;outline:none}
input:focus{border-color:#2383E2}
.btn{width:100%;margin-top:12px;padding:9px;border:none;border-radius:6px;font-size:13px;font-weight:600;cursor:pointer}
.btn-primary{background:#2383E2;color:#fff}
.btn-secondary{background:#2a2a2a;color:#ccc;border:1px solid #3a3a3a}
.btn:active{opacity:.9}
.row{display:flex;gap:8px;margin-top:10px}
.row .btn{flex:1}
.status{margin-top:10px;padding:8px 10px;border-radius:6px;font-size:12px;display:none}
.status.ok{background:rgba(46,160,67,.15);color:#2ea043;display:block}
.status.err{background:rgba(224,62,62,.15);color:#e03e3e;display:block}
.status.warn{background:rgba(217,115,13,.15);color:#d9730d;display:block}
.small{font-size:11px;color:#777;margin-top:6px}
a{color:#2383E2;text-decoration:none}
</style>
</head>
<body>
<h2>📌 FlowDeck Clipper</h2>
<p class="desc">Capture any page into FlowDeck in one click.</p>
<div class="row">
<button class="btn btn-primary" id="clipArticle">Clip article</button>
<button class="btn btn-secondary" id="clipBookmark">Bookmark</button>
</div>
<button class="btn btn-secondary" id="clipSelection" style="margin-top:8px;">Clip selection</button>
<label>FlowDeck server URL</label>
<input id="serverUrl" placeholder="http://localhost:8080">
<label>Bearer token <span style="text-transform:none;color:#666">(Settings → API tokens)</span></label>
<input id="token" placeholder="fd_... or fd_clip_..." type="password">
<div style="display:flex;gap:6px;margin-top:6px">
<button class="btn btn-secondary" id="save" style="flex:1;padding:7px;font-size:12px;">Save</button>
<button class="btn btn-secondary" id="verify" style="flex:1;padding:7px;font-size:12px;">Verify</button>
</div>
<div id="status" class="status"></div>
<p class="small">Need a token? Open <a href="#" id="openFlowDeck">FlowDeck → Settings → API tokens</a> or <a href="#" id="openExtensions">Extensions</a>.</p>
<script src="popup.js"></script>
</body>
</html>