Skip to main content

max / balanced_breakfast

6.8 KB · 137 lines History Blame Raw
1 <!DOCTYPE html>
2 <html lang="en">
3 <head>
4 <meta charset="UTF-8">
5 <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover">
6 <title>Balanced Breakfast</title>
7 <link rel="stylesheet" href="css/styles.css">
8 </head>
9 <body>
10 <div id="app">
11 <!-- Header -->
12 <header class="header">
13 <h1>Balanced Breakfast</h1>
14 <div class="header-actions">
15 <label for="search-input" class="sr-only">Search items</label>
16 <input type="text" id="search-input" placeholder="Search... (/) | ? for help" class="search-input">
17 <span id="search-spinner" class="search-spinner" aria-hidden="true"></span>
18 <label for="sort-select" class="sr-only">Sort order</label>
19 <button id="unread-toggle" class="btn btn-small" title="Show unread only (U)" aria-pressed="false">Unread</button>
20 <select id="sort-select" class="sort-select" title="Sort order (S)">
21 <option value="chronological">Newest First</option>
22 <option value="score">By Score</option>
23 <option value="unread">Unread First</option>
24 <option value="starred">Starred First</option>
25 </select>
26 <button id="mark-all-read-btn" class="btn btn-small" title="Mark all as read (Shift+A)">Mark All Read</button>
27 <button id="refresh-btn" class="btn btn-primary" title="Refresh all feeds (R)">Refresh</button>
28 <button id="add-feed-btn" class="btn btn-success" title="Add a new feed source">+ Add Feed</button>
29 <button id="help-btn" class="btn btn-small" title="Keyboard shortcuts (?)" aria-label="Help">?</button>
30 <button id="settings-btn" class="btn btn-small" title="Settings" aria-label="Settings">&#9881;</button>
31 </div>
32 </header>
33
34 <!-- Main content -->
35 <main class="main">
36 <!-- Sources sidebar -->
37 <aside class="sidebar">
38 <h2>Sources</h2>
39 <nav aria-label="Feed sources">
40 <ul id="sources-list" class="sources-list">
41 <li class="source-item active" data-source="">
42 <span class="source-name">All</span>
43 <span class="source-count">0</span>
44 </li>
45 </ul>
46 </nav>
47 <div id="saved-articles-btn" class="sidebar-saved" title="Saved Articles">
48 <span class="source-name">Saved Articles</span>
49 <span id="saved-count" class="source-count">0</span>
50 </div>
51 <div class="sidebar-footer">
52 <button id="sync-settings-btn" class="btn btn-small" title="Cloud Sync Settings">Sync</button>
53 </div>
54 </aside>
55
56 <!-- Items list -->
57 <section class="items-panel">
58 <div id="mobile-search-bar" class="mobile-search-bar">
59 <input type="text" id="mobile-search-input" placeholder="Search..." class="mobile-search-input">
60 <select id="mobile-sort-select" class="mobile-sort-select">
61 <option value="chronological">Newest</option>
62 <option value="score">Score</option>
63 <option value="unread">Unread</option>
64 <option value="starred">Starred</option>
65 </select>
66 </div>
67 <ul id="items-list" class="items-list" aria-live="polite"></ul>
68 <div id="load-more" class="load-more" style="display: none;">
69 <button id="load-more-btn" class="btn">Load More</button>
70 </div>
71 </section>
72
73 <!-- Item detail panel -->
74 <aside class="detail-panel" id="detail-panel">
75 <div class="detail-header">
76 <button id="save-detail" class="btn btn-small" aria-label="Add to Reading List" title="Add to Reading List">Bookmark</button>
77 <button id="close-detail" class="btn btn-small" aria-label="Close">&times;</button>
78 </div>
79 <article id="item-detail" class="item-detail"></article>
80 </aside>
81 </main>
82
83 <!-- Toast notifications -->
84 <div id="toast-container" class="toast-container" role="alert" aria-live="polite"></div>
85
86 <!-- Mobile tab bar -->
87 <nav id="mobile-tab-bar" class="mobile-tab-bar" role="tablist">
88 <button class="mobile-tab active" data-tab="feed" role="tab" aria-selected="true">Feed</button>
89 <button class="mobile-tab" data-tab="saved" role="tab" aria-selected="false">Reading List</button>
90 <button class="mobile-tab" data-tab="sources" role="tab" aria-selected="false">Sources</button>
91 <button class="mobile-tab mobile-tab-create" id="mobile-create-btn" aria-label="Add feed">+</button>
92 <button class="mobile-tab mobile-tab-more" id="mobile-more-btn">More</button>
93 </nav>
94 <div id="mobile-more-popover" class="mobile-more-popover">
95 <button data-action="settings">Settings</button>
96 <button data-action="sync">Sync</button>
97 <button data-action="import">Import OPML</button>
98 <button data-action="export">Export OPML</button>
99 <button data-action="shortcuts">Shortcuts</button>
100 </div>
101
102 <!-- Modal overlay -->
103 <div id="modal-overlay" class="modal-overlay">
104 <div class="modal-content" role="dialog" aria-modal="true" aria-labelledby="modal-title">
105 <div class="modal-header">
106 <h2 id="modal-title">Modal</h2>
107 <button id="close-modal" class="btn btn-small" aria-label="Close">&times;</button>
108 </div>
109 <div id="modal-body" class="modal-body"></div>
110 </div>
111 </div>
112 </div>
113
114 <!-- Scripts in dependency order -->
115 <script src="js/bb.js"></script>
116 <script src="js/themes.js"></script>
117 <script src="js/utils.js"></script>
118 <script src="js/state.js"></script>
119 <script src="js/api.js"></script>
120 <script src="js/query-state.js"></script>
121 <script src="js/components.js"></script>
122 <script src="js/query-feeds.js"></script>
123 <script src="js/sources.js"></script>
124 <script src="js/items.js"></script>
125 <script src="js/detail.js"></script>
126 <script src="js/bookmarks.js"></script>
127 <script src="js/feeds.js"></script>
128 <script src="js/settings-sync.js"></script>
129 <script src="js/shared-updater.js"></script>
130 <script src="js/updater.js"></script>
131 <script src="js/navigation.js"></script>
132 <script src="js/touch.js"></script>
133 <script src="js/mobile.js"></script>
134 <script src="js/app.js"></script>
135 </body>
136 </html>
137