DragonWind/chrome-extension/popup.html

165 lines
8.6 KiB
HTML
Raw Permalink Normal View History

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8"/>
<title>Dragon Wind Upload</title>
<style>
*{margin:0;padding:0;box-sizing:border-box}
body{font-family:'Segoe UI',system-ui,sans-serif;background:#06080e;color:#e4e8f1;width:380px;min-height:300px;overflow-x:hidden}
:root{--dragon:#e05c1a;--dragon-bright:#ff7d3b;--accent:#2b5cff;--border:#1a2035;--bg-card:#10141f;--bg-sec:#0c1019;--text-dim:#4a5470;--success:#22c55e;--error:#ef4444}
.header{display:flex;align-items:center;gap:.65rem;padding:.9rem 1rem;border-bottom:1px solid var(--border);background:#08090f}
.header-logo{width:28px;height:28px;border-radius:6px}
.header-title{font-size:.95rem;font-weight:700;background:linear-gradient(135deg,var(--dragon),var(--dragon-bright));-webkit-background-clip:text;-webkit-text-fill-color:transparent}
.header-sub{font-size:.6rem;color:var(--text-dim);text-transform:uppercase;letter-spacing:.08em}
.header-right{margin-left:auto;display:flex;align-items:center;gap:.5rem}
.settings-btn{width:28px;height:28px;border:1px solid var(--border);border-radius:6px;background:transparent;color:var(--text-dim);cursor:pointer;font-size:.85rem;display:flex;align-items:center;justify-content:center;transition:all .15s}
.settings-btn:hover{border-color:#2a3555;color:#e4e8f1}
.body{padding:.85rem 1rem}
/* CONNECTION */
.conn-row{display:flex;align-items:center;gap:.5rem;margin-bottom:.85rem;padding:.5rem .7rem;background:var(--bg-card);border:1px solid var(--border);border-radius:8px}
.conn-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}
.conn-dot.green{background:var(--success);box-shadow:0 0 5px var(--success)}
.conn-dot.red{background:var(--error)}
.conn-dot.grey{background:var(--text-dim)}
.conn-label{font-size:.75rem;color:#7a85a0;flex:1}
.conn-server{font-size:.68rem;color:var(--text-dim);font-family:monospace;max-width:160px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* MODE SELECTOR */
.mode-row{display:flex;gap:.4rem;margin-bottom:.85rem}
.mode-btn{flex:1;padding:.45rem;border:1px solid var(--border);border-radius:8px;background:var(--bg-card);color:#7a85a0;cursor:pointer;font-size:.75rem;font-weight:600;transition:all .2s;text-align:center}
.mode-btn:hover{border-color:#2a3555}
.mode-btn.active-http{border-color:var(--accent);background:rgba(43,92,255,.12);color:var(--accent)}
.mode-btn.active-udp{border-color:var(--dragon-bright);background:rgba(224,92,26,.12);color:var(--dragon-bright)}
/* DROP ZONE */
.drop-zone{border:2px dashed var(--border);border-radius:10px;padding:1.25rem;text-align:center;cursor:pointer;transition:all .2s;background:var(--bg-card);margin-bottom:.85rem;position:relative}
.drop-zone:hover,.drop-zone.over{border-color:var(--dragon-bright);background:rgba(224,92,26,.08)}
.dz-icon{font-size:1.4rem;display:block;margin-bottom:.35rem}
.dz-label{font-size:.8rem;font-weight:600;color:#7a85a0;margin-bottom:.2rem}
.dz-sub{font-size:.68rem;color:var(--text-dim)}
#file-input{display:none}
/* FILE LIST */
.file-list{max-height:140px;overflow-y:auto;margin-bottom:.85rem;display:flex;flex-direction:column;gap:.3rem}
.file-item{display:flex;align-items:center;gap:.5rem;padding:.4rem .6rem;background:var(--bg-card);border:1px solid var(--border);border-radius:7px}
.fi-icon{font-size:.85rem;flex-shrink:0}
.fi-info{flex:1;min-width:0}
.fi-name{font-size:.75rem;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fi-size{font-size:.65rem;color:var(--text-dim);font-family:monospace}
.fi-status{font-size:.68rem;font-weight:600;flex-shrink:0}
.fi-status.pending{color:var(--text-dim)}
.fi-status.uploading{color:var(--accent)}
.fi-status.done{color:var(--success)}
.fi-status.error{color:var(--error)}
.fi-rm{background:none;border:none;color:var(--text-dim);cursor:pointer;font-size:.7rem;padding:.1rem .2rem;border-radius:3px}
.fi-rm:hover{color:var(--error);background:rgba(239,68,68,.1)}
.fi-prog{height:2px;background:var(--border);border-radius:1px;margin-top:.2rem}
.fi-prog-bar{height:100%;background:var(--accent);border-radius:1px;transition:width .3s}
.fi-prog-bar.udp{background:var(--dragon-bright)}
/* UPLOAD BTN */
.upload-btn{width:100%;padding:.65rem;font-size:.88rem;font-weight:700;color:#fff;border:none;border-radius:9px;cursor:pointer;transition:all .2s;background:linear-gradient(135deg,var(--dragon),var(--dragon-bright))}
.upload-btn:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 4px 16px rgba(224,92,26,.35)}
.upload-btn:disabled{opacity:.35;cursor:not-allowed;transform:none;box-shadow:none}
.upload-btn.http{background:linear-gradient(135deg,#1a3fc7,var(--accent))}
/* FOLDER SELECT */
.folder-row{display:flex;align-items:center;gap:.5rem;margin-bottom:.85rem}
.folder-label{font-size:.72rem;color:var(--text-dim);flex-shrink:0}
.folder-select{flex:1;padding:.35rem .6rem;background:var(--bg-sec);border:1px solid var(--border);border-radius:6px;color:#e4e8f1;font-size:.75rem;outline:none;cursor:pointer}
/* STATUS BAR */
.status-bar{padding:.45rem .7rem;border-radius:7px;font-size:.75rem;font-weight:600;margin-top:.5rem;display:none}
.status-bar.success{background:rgba(34,197,94,.1);color:var(--success);border:1px solid rgba(34,197,94,.2);display:block}
.status-bar.error{background:rgba(239,68,68,.1);color:var(--error);border:1px solid rgba(239,68,68,.2);display:block}
.status-bar.loading{background:rgba(43,92,255,.1);color:var(--accent);border:1px solid rgba(43,92,255,.2);display:block}
/* SETTINGS PANEL */
.settings-panel{display:none;padding:.85rem 1rem;border-top:1px solid var(--border)}
.settings-panel.open{display:block}
.settings-title{font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;color:var(--text-dim);margin-bottom:.7rem}
.setting-row{margin-bottom:.6rem}
.setting-label{font-size:.7rem;color:#7a85a0;margin-bottom:.25rem;display:block}
.setting-input{width:100%;padding:.38rem .6rem;background:var(--bg-sec);border:1px solid var(--border);border-radius:6px;color:#e4e8f1;font-size:.76rem;outline:none;font-family:monospace}
.setting-input:focus{border-color:var(--dragon)}
.save-btn{padding:.4rem 1rem;font-size:.75rem;font-weight:700;background:linear-gradient(135deg,var(--dragon),var(--dragon-bright));color:#fff;border:none;border-radius:7px;cursor:pointer;margin-top:.4rem}
</style>
</head>
<body>
<div class="header">
<img class="header-logo" src="images/icon-48.png" onerror="this.style.display='none'"/>
<div><div class="header-title">Dragon Wind</div><div class="header-sub">Broadcast Uploader</div></div>
<div class="header-right">
<button class="settings-btn" id="settings-toggle" title="Settings">⚙️</button>
</div>
</div>
<div class="body" id="main-body">
<!-- Connection Status -->
<div class="conn-row">
<div class="conn-dot grey" id="conn-dot"></div>
<span class="conn-label" id="conn-label">Connecting…</span>
<span class="conn-server" id="conn-server"></span>
</div>
<!-- Upload Mode -->
<div class="mode-row">
<button class="mode-btn active-http" id="btn-http">🔗 HTTP<br/><small>Reliable</small></button>
<button class="mode-btn" id="btn-udp">⚡ UDP<br/><small>Fast WAN</small></button>
</div>
<!-- Folder Selector -->
<div class="folder-row">
<span class="folder-label">Folder:</span>
<select class="folder-select" id="folder-select">
<option value="">Root</option>
</select>
</div>
<!-- Drop Zone -->
<div class="drop-zone" id="drop-zone">
<span class="dz-icon">📂</span>
<div class="dz-label">Drop files or click to browse</div>
<div class="dz-sub">Video, audio, image up to 50 GB</div>
</div>
<input id="file-input" type="file" multiple/>
<!-- File List -->
<div class="file-list" id="file-list"></div>
<!-- Upload Button -->
<button class="upload-btn http" id="upload-btn" disabled>Upload Files</button>
<!-- Status -->
<div class="status-bar" id="status-bar"></div>
</div>
<!-- Settings Panel -->
<div class="settings-panel" id="settings-panel">
<div class="settings-title">Dragon Wind Settings</div>
<div class="setting-row">
<label class="setting-label">Server URL</label>
<input class="setting-input" id="cfg-server" type="url" placeholder="http://localhost:3000"/>
</div>
<div class="setting-row">
<label class="setting-label">Username</label>
<input class="setting-input" id="cfg-user" type="text" placeholder="Admin"/>
</div>
<div class="setting-row">
<label class="setting-label">Password</label>
<input class="setting-input" id="cfg-pass" type="password" placeholder="password"/>
</div>
<button class="save-btn" id="save-btn">Save &amp; Connect</button>
<div class="status-bar" id="settings-status" style="margin-top:.5rem"></div>
</div>
<script src="popup.js"></script>
</body>
</html>