-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
93 lines (77 loc) · 3.88 KB
/
index.html
File metadata and controls
93 lines (77 loc) · 3.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
<meta name="theme-color" content="#0a0a0a">
<meta name="description" content="RSVP Speed Reader with ORP highlighting">
<!-- Security Headers -->
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' https://cdnjs.cloudflare.com; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' data:; connect-src 'self' https://api.countapi.xyz; worker-src 'self';">
<meta http-equiv="X-Frame-Options" content="DENY">
<meta http-equiv="X-Content-Type-Options" content="nosniff">
<meta name="referrer" content="strict-origin-when-cross-origin">
<title>RSVP Reader</title>
<link rel="manifest" href="manifest.json">
<link rel="icon" type="image/svg+xml"
href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>📖</text></svg>">
<link rel="stylesheet" href="index.css">
</head>
<body>
<div id="app">
<!-- File Upload Screen -->
<div id="upload-screen" class="screen active">
<h1>RSVP<span class="accent">.</span></h1>
<p class="tagline">Speed read anything</p>
<div id="drop-zone">
<div class="drop-icon">📄</div>
<p>Drop file here</p>
<p class="formats">PDF • DOCX • EPUB • TXT • MD</p>
<input type="file" id="file-input" accept=".pdf,.docx,.epub,.txt,.md,.text,.markdown" hidden>
<button id="browse-btn" class="btn">Browse Files</button>
</div>
<div id="loading" class="hidden">
<div class="spinner"></div>
<p>Processing...</p>
</div>
<div id="visit-counter" class="visit-counter">
<span id="visit-count">Loading...</span> readers
</div>
</div>
<!-- Reader Screen -->
<div id="reader-screen" class="screen">
<div id="word-container">
<div id="word-display">
<span id="word-before"></span><span id="word-orp"></span><span id="word-after"></span>
</div>
<div id="orp-marker">▲</div>
</div>
<div id="progress-container">
<div id="progress-bar"></div>
<span id="progress-text">0%</span>
</div>
<div id="stats-container" class="hidden">
<div id="stats-display">
<span id="time-remaining">--:--</span> • <span id="words-remaining">0/0 words</span>
</div>
</div>
<div id="controls">
<button id="back-btn" class="ctrl-btn" title="Back 10 words">◀◀</button>
<button id="play-btn" class="ctrl-btn play" title="Play/Pause">▶</button>
<button id="forward-btn" class="ctrl-btn" title="Forward 10 words">▶▶</button>
<div id="wpm-control">
<input type="range" id="wpm-slider" min="100" max="1000" value="150" step="25">
<span id="wpm-display">150 WPM</span>
</div>
<button id="stats-toggle-btn" class="ctrl-btn" title="Toggle reading time">🕐</button>
<button id="close-btn" class="ctrl-btn" title="Close">✕</button>
</div>
</div>
</div>
<!-- External Libraries (CDN) -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/3.11.174/pdf.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/mammoth/1.6.0/mammoth.browser.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js"></script>
<!-- App Modules -->
<script type="module" src="app.js"></script>
</body>
</html>