| 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 |
|
| 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">⚙</button> |
| 31 |
</div> |
| 32 |
</header> |
| 33 |
|
| 34 |
|
| 35 |
<main class="main"> |
| 36 |
|
| 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 |
|
| 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 |
|
| 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">×</button> |
| 78 |
</div> |
| 79 |
<article id="item-detail" class="item-detail"></article> |
| 80 |
</aside> |
| 81 |
</main> |
| 82 |
|
| 83 |
|
| 84 |
<div id="toast-container" class="toast-container" role="alert" aria-live="polite"></div> |
| 85 |
|
| 86 |
|
| 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 |
|
| 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">×</button> |
| 108 |
</div> |
| 109 |
<div id="modal-body" class="modal-body"></div> |
| 110 |
</div> |
| 111 |
</div> |
| 112 |
</div> |
| 113 |
|
| 114 |
|
| 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 |
|