1 | <?php |
||
2 | |||
3 | set_include_path(dirname(__FILE__)."/include".PATH_SEPARATOR. |
||
4 | get_include_path()); |
||
5 | |||
6 | require_once "autoload.php"; |
||
7 | require_once "sessions.php"; |
||
8 | require_once "functions.php"; |
||
9 | require_once "sanity_check.php"; |
||
10 | require_once "config.php"; |
||
11 | require_once "db-prefs.php"; |
||
12 | |||
13 | if (!init_plugins()) { |
||
14 | return; |
||
15 | } |
||
16 | |||
17 | login_sequence(); |
||
18 | |||
19 | header('Content-Type: text/html; charset=utf-8'); |
||
20 | |||
21 | ?> |
||
22 | <!DOCTYPE html> |
||
23 | <html> |
||
24 | <head> |
||
25 | <title>Tiny Tiny RSS</title> |
||
26 | <meta name="viewport" content="initial-scale=1,width=device-width" /> |
||
27 | |||
28 | <?php if ($_SESSION["uid"]) { |
||
29 | $theme = get_pref("USER_CSS_THEME", false, false); |
||
30 | if ($theme && theme_exists("$theme")) { |
||
31 | echo stylesheet_tag(get_theme_path($theme), 'theme_css'); |
||
32 | } |
||
33 | } |
||
34 | |||
35 | print_user_stylesheet() |
||
36 | |||
37 | ?> |
||
38 | <style type="text/css"> |
||
39 | <?php |
||
40 | foreach (PluginHost::getInstance()->get_plugins() as $n => $p) { |
||
41 | if (method_exists($p, "get_css")) { |
||
42 | echo $p->get_css(); |
||
43 | } |
||
44 | } |
||
45 | ?> |
||
46 | </style> |
||
47 | |||
48 | <link rel="shortcut icon" type="image/png" href="images/favicon.png"/> |
||
49 | <link rel="icon" type="image/png" sizes="72x72" href="images/favicon-72px.png" /> |
||
50 | |||
51 | <script> |
||
52 | dojoConfig = { |
||
53 | async: true, |
||
54 | cacheBust: "<?php echo get_scripts_timestamp(); ?>", |
||
55 | packages: [ |
||
56 | { name: "fox", location: "../../js" }, |
||
57 | ] |
||
58 | }; |
||
59 | </script> |
||
60 | |||
61 | <?php |
||
62 | foreach (array("lib/prototype.js", |
||
63 | "lib/scriptaculous/scriptaculous.js?load=effects,controls", |
||
64 | "lib/dojo/dojo.js", |
||
65 | "lib/dojo/tt-rss-layer.js", |
||
66 | "js/tt-rss.js", |
||
67 | "js/common.js", |
||
68 | "errors.php?mode=js") as $jsfile) { |
||
69 | |||
70 | echo javascript_tag($jsfile); |
||
71 | |||
72 | } ?> |
||
73 | |||
74 | <script type="text/javascript"> |
||
75 | require({cache:{}}); |
||
76 | </script> |
||
77 | |||
78 | <script type="text/javascript"> |
||
79 | <?php |
||
80 | foreach (PluginHost::getInstance()->get_plugins() as $n => $p) { |
||
81 | if (method_exists($p, "get_js")) { |
||
82 | $script = $p->get_js(); |
||
83 | |||
84 | if ($script) { |
||
85 | echo "try { |
||
86 | $script |
||
87 | } catch (e) { |
||
88 | console.warn('failed to initialize plugin JS: $n', e); |
||
89 | }"; |
||
90 | } |
||
91 | } |
||
92 | } |
||
93 | |||
94 | init_js_translations(); |
||
95 | ?> |
||
96 | </script> |
||
97 | |||
98 | <style type="text/css"> |
||
99 | @media (prefers-color-scheme: dark) { |
||
100 | body { |
||
101 | background : #303030; |
||
102 | } |
||
103 | } |
||
104 | |||
105 | body.css_loading * { |
||
106 | display : none; |
||
107 | } |
||
108 | </style> |
||
109 | |||
110 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> |
||
111 | <meta name="referrer" content="no-referrer"/> |
||
112 | </head> |
||
113 | |||
114 | <body class="flat ttrss_main ttrss_index css_loading"> |
||
115 | |||
116 | <div id="overlay" style="display : block"> |
||
117 | <div id="overlay_inner"> |
||
118 | <?php echo __("Loading, please wait...") ?> |
||
119 | <div dojoType="dijit.ProgressBar" places="0" style="width : 300px" id="loading_bar" |
||
120 | progress="0" maximum="100"> |
||
121 | </div> |
||
122 | <noscript><br/><?php print_error('Javascript is disabled. Please enable it.') ?></noscript> |
||
123 | </div> |
||
124 | </div> |
||
125 | |||
126 | <div id="notify" class="notify"></div> |
||
127 | <div id="cmdline" style="display : none"></div> |
||
128 | |||
129 | <div id="main" dojoType="dijit.layout.BorderContainer"> |
||
130 | <div id="feeds-holder" dojoType="dijit.layout.ContentPane" region="leading" style="width : 20%" splitter="true"> |
||
131 | <div id="feedlistLoading"> |
||
132 | <img src='images/indicator_tiny.gif'/> |
||
133 | <?php echo __("Loading, please wait..."); ?></div> |
||
134 | <?php |
||
135 | foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_FEED_TREE) as $p) { |
||
0 ignored issues
–
show
Comprehensibility
Bug
introduced
by
![]() |
|||
136 | echo $p->hook_feed_tree(); |
||
137 | } |
||
138 | ?> |
||
139 | <div id="feedTree"></div> |
||
140 | </div> |
||
141 | |||
142 | <div dojoType="dijit.layout.BorderContainer" region="center" id="content-wrap"> |
||
143 | <div id="toolbar-frame" dojoType="dijit.layout.ContentPane" region="top"> |
||
144 | <div id="toolbar" dojoType="fox.Toolbar"> |
||
145 | |||
146 | <i class="material-icons net-alert" style="display : none" |
||
147 | title="<?php echo __("Communication problem with server.") ?>">error_outline</i> |
||
148 | |||
149 | <i class="material-icons log-alert" style="display : none" |
||
150 | title="<?php echo __("Recent entries found in event log.") ?>">warning</i> |
||
151 | |||
152 | <i id="updates-available" class="material-icons icon-new-version" style="display : none" |
||
153 | title="<?php echo __('Updates are available from Git.') ?>">new_releases</i> |
||
154 | |||
155 | <?php |
||
156 | foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_MAIN_TOOLBAR_BUTTON) as $p) { |
||
157 | echo $p->hook_main_toolbar_button(); |
||
158 | } |
||
159 | ?> |
||
160 | |||
161 | <form id="toolbar-headlines" action="" style="order : 10" onsubmit='return false'> |
||
162 | |||
163 | </form> |
||
164 | |||
165 | <form id="toolbar-main" action="" style="order : 20" onsubmit='return false'> |
||
166 | |||
167 | <select name="view_mode" title="<?php echo __('Show articles') ?>" |
||
168 | onchange="App.onViewModeChanged()" |
||
169 | dojoType="fox.form.Select"> |
||
170 | <option selected="selected" value="adaptive"><?php echo __('Adaptive') ?></option> |
||
171 | <option value="all_articles"><?php echo __('All Articles') ?></option> |
||
172 | <option value="marked"><?php echo __('Starred') ?></option> |
||
173 | <option value="published"><?php echo __('Published') ?></option> |
||
174 | <option value="unread"><?php echo __('Unread') ?></option> |
||
175 | <option value="has_note"><?php echo __('With Note') ?></option> |
||
176 | <!-- <option value="noscores"><?php echo __('Ignore Scoring') ?></option> --> |
||
177 | </select> |
||
178 | |||
179 | <select title="<?php echo __('Sort articles') ?>" |
||
180 | onchange="App.onViewModeChanged()" |
||
181 | dojoType="fox.form.Select" name="order_by"> |
||
182 | |||
183 | <option selected="selected" value="default"><?php echo __('Default') ?></option> |
||
184 | <option value="feed_dates"><?php echo __('Newest first') ?></option> |
||
185 | <option value="date_reverse"><?php echo __('Oldest first') ?></option> |
||
186 | <option value="title"><?php echo __('Title') ?></option> |
||
187 | </select> |
||
188 | |||
189 | <div dojoType="fox.form.ComboButton" onclick="Feeds.catchupCurrent()"> |
||
190 | <span><?php echo __('Mark as read') ?></span> |
||
191 | <div dojoType="dijit.DropDownMenu"> |
||
192 | <div dojoType="dijit.MenuItem" onclick="Feeds.catchupCurrent('1day')"> |
||
193 | <?php echo __('Older than one day') ?> |
||
194 | </div> |
||
195 | <div dojoType="dijit.MenuItem" onclick="Feeds.catchupCurrent('1week')"> |
||
196 | <?php echo __('Older than one week') ?> |
||
197 | </div> |
||
198 | <div dojoType="dijit.MenuItem" onclick="Feeds.catchupCurrent('2week')"> |
||
199 | <?php echo __('Older than two weeks') ?> |
||
200 | </div> |
||
201 | </div> |
||
202 | </div> |
||
203 | |||
204 | </form> |
||
205 | |||
206 | <div class="action-chooser" style="order : 30"> |
||
207 | |||
208 | <?php |
||
209 | foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_TOOLBAR_BUTTON) as $p) { |
||
210 | echo $p->hook_toolbar_button(); |
||
211 | } |
||
212 | ?> |
||
213 | |||
214 | <div dojoType="fox.form.DropDownButton" class="action-button" title="<?php echo __('Actions...') ?>"> |
||
215 | <span><i class="material-icons">menu</i></span> |
||
216 | <div dojoType="dijit.Menu" style="display: none"> |
||
217 | <div dojoType="dijit.MenuItem" onclick="App.onActionSelected('qmcPrefs')"><?php echo __('Preferences...') ?></div> |
||
218 | <div dojoType="dijit.MenuItem" onclick="App.onActionSelected('qmcSearch')"><?php echo __('Search...') ?></div> |
||
219 | <div dojoType="dijit.MenuItem" disabled="1"><?php echo __('Feed actions:') ?></div> |
||
220 | <div dojoType="dijit.MenuItem" onclick="App.onActionSelected('qmcAddFeed')"><?php echo __('Subscribe to feed...') ?></div> |
||
221 | <div dojoType="dijit.MenuItem" onclick="App.onActionSelected('qmcEditFeed')"><?php echo __('Edit this feed...') ?></div> |
||
222 | <div dojoType="dijit.MenuItem" onclick="App.onActionSelected('qmcRemoveFeed')"><?php echo __('Unsubscribe') ?></div> |
||
223 | <div dojoType="dijit.MenuItem" disabled="1"><?php echo __('All feeds:') ?></div> |
||
224 | <div dojoType="dijit.MenuItem" onclick="App.onActionSelected('qmcCatchupAll')"><?php echo __('Mark as read') ?></div> |
||
225 | <div dojoType="dijit.MenuItem" onclick="App.onActionSelected('qmcShowOnlyUnread')"><?php echo __('(Un)hide read feeds') ?></div> |
||
226 | <div dojoType="dijit.MenuItem" disabled="1"><?php echo __('Other actions:') ?></div> |
||
227 | <div dojoType="dijit.MenuItem" onclick="App.onActionSelected('qmcToggleWidescreen')"><?php echo __('Toggle widescreen mode') ?></div> |
||
228 | <div dojoType="dijit.MenuItem" onclick="App.onActionSelected('qmcHKhelp')"><?php echo __('Keyboard shortcuts help') ?></div> |
||
229 | |||
230 | <?php |
||
231 | foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_ACTION_ITEM) as $p) { |
||
232 | echo $p->hook_action_item(); |
||
233 | } |
||
234 | ?> |
||
235 | |||
236 | <?php if (!$_SESSION["hide_logout"]) { ?> |
||
237 | <div dojoType="dijit.MenuItem" onclick="App.onActionSelected('qmcLogout')"><?php echo __('Logout') ?></div> |
||
238 | <?php } ?> |
||
239 | </div> |
||
240 | </div> |
||
241 | </div> |
||
242 | </div> <!-- toolbar --> |
||
243 | </div> <!-- toolbar pane --> |
||
244 | <div id="headlines-wrap-inner" dojoType="dijit.layout.BorderContainer" region="center"> |
||
245 | <div id="floatingTitle" style="display : none"></div> |
||
246 | <div id="headlines-frame" dojoType="dijit.layout.ContentPane" tabindex="0" |
||
247 | region="center"> |
||
248 | <div id="headlinesInnerContainer"> |
||
249 | <div class="whiteBox"><?php echo __('Loading, please wait...') ?></div> |
||
250 | </div> |
||
251 | </div> |
||
252 | <div id="content-insert" dojoType="dijit.layout.ContentPane" region="bottom" |
||
253 | style="height : 50%" splitter="true"></div> |
||
254 | </div> |
||
255 | </div> |
||
256 | </div> |
||
257 | |||
258 | </body> |
||
259 | </html> |
||
260 |