]>
Commit | Line | Data |
---|---|---|
c174bcdf | 1 | var SCHEMA_VERSION = 9; |
b871dd06 | 2 | |
25d99353 AD |
3 | var offline_mode = false; |
4 | var store = false; | |
5 | var localServer = false; | |
6 | var db = false; | |
7 | ||
4681834e AD |
8 | function view_offline(id, feed_id) { |
9 | try { | |
10 | ||
11 | enableHotkeys(); | |
12 | showArticleInHeadlines(id); | |
13 | ||
1b27261c AD |
14 | db.execute("UPDATE articles SET unread = 0 WHERE id = ?", [id]); |
15 | ||
16 | var rs = db.execute("SELECT * FROM articles WHERE id = ?", [id]); | |
17 | ||
18 | if (rs.isValidRow()) { | |
19 | ||
20 | var tmp = "<div class=\"postReply\">"; | |
21 | ||
22 | tmp += "<div class=\"postHeader\" onmouseover=\"enable_resize(true)\" "+ | |
23 | "onmouseout=\"enable_resize(false)\">"; | |
24 | ||
25 | tmp += "<div class=\"postDate\">"+rs.fieldByName("updated")+"</div>"; | |
26 | ||
27 | if (rs.fieldByName("link") != "") { | |
28 | tmp += "<div clear='both'><a target=\"_blank\" "+ | |
29 | "href=\"" + rs.fieldByName("link") + "\">" + | |
30 | rs.fieldByName("title") + "</a></div>"; | |
31 | } else { | |
32 | tmp += "<div clear='both'>" + rs.fieldByName("title") + "</div>"; | |
33 | } | |
4681834e | 34 | |
3ab18266 | 35 | /* tmp += "<div style='float : right'> "+ |
1b27261c AD |
36 | "<img src='images/tag.png' class='tagsPic' alt='Tags' title='Tags'>"; |
37 | tmp += rs.fieldByName("tags"); | |
3ab18266 | 38 | tmp += "</div>"; */ |
1b27261c | 39 | |
424fc145 | 40 | /* tmp += "<div clear='both'>"+ |
12aa4007 AD |
41 | "<a target=\"_blank\" "+ |
42 | "href=\"" + rs.fieldByName("comments") + "\">" + | |
424fc145 | 43 | __("comments") + "</a></div>"; */ |
1b27261c AD |
44 | |
45 | tmp += "</div>"; | |
46 | ||
47 | tmp += "<div class=\"postContent\">" | |
48 | tmp += rs.fieldByName("content"); | |
49 | tmp += "</div>"; | |
50 | ||
51 | tmp += "</div>"; | |
52 | ||
53 | render_article(tmp); | |
54 | update_local_feedlist_counters(); | |
55 | } | |
4681834e | 56 | |
03c96380 AD |
57 | rs.close(); |
58 | ||
4681834e AD |
59 | return false; |
60 | ||
61 | } catch (e) { | |
62 | exception_error("view_offline", e); | |
63 | } | |
64 | } | |
65 | ||
66 | function viewfeed_offline(feed_id, subop, is_cat, subop_param, skip_history, offset) { | |
67 | try { | |
68 | notify(''); | |
69 | ||
70 | if (!offset) offset = 0; | |
71 | ||
0e923da4 AD |
72 | if (offset > 0) { |
73 | _feed_cur_page = parseInt(offset); | |
74 | if (_infscroll_request_sent) { | |
75 | return; | |
76 | } | |
77 | } else { | |
78 | _feed_cur_page = 0; | |
79 | _infscroll_disable = 0; | |
80 | } | |
81 | ||
82 | if (getActiveFeedId() != feed_id) { | |
83 | _feed_cur_page = 0; | |
84 | active_post_id = 0; | |
85 | _infscroll_disable = 0; | |
86 | } | |
87 | ||
4681834e AD |
88 | loading_set_progress(100); |
89 | ||
90 | clean_feed_selections(); | |
91 | ||
92 | setActiveFeedId(feed_id, is_cat); | |
93 | ||
94 | if (!is_cat) { | |
95 | var feedr = document.getElementById("FEEDR-" + feed_id); | |
96 | if (feedr && !feedr.className.match("Selected")) { | |
97 | feedr.className = feedr.className + "Selected"; | |
98 | } | |
99 | } else { | |
100 | var feedr = document.getElementById("FCAT-" + feed_id); | |
101 | if (feedr && !feedr.className.match("Selected")) { | |
102 | feedr.className = feedr.className + "Selected"; | |
103 | } | |
104 | } | |
105 | ||
106 | disableContainerChildren("headlinesToolbar", false); | |
107 | Form.enable("main_toolbar_form"); | |
108 | ||
109 | var f = document.getElementById("headlines-frame"); | |
110 | try { | |
111 | if (reply.offset == 0) { | |
112 | debug("resetting headlines scrollTop"); | |
113 | f.scrollTop = 0; | |
114 | } | |
115 | } catch (e) { }; | |
116 | ||
117 | ||
4681834e AD |
118 | var tmp = ""; |
119 | ||
88a66534 | 120 | var feed_title = get_local_feed_title(feed_id); |
4681834e | 121 | |
88a66534 | 122 | if (feed_title) { |
4681834e AD |
123 | |
124 | if (offset == 0) { | |
125 | tmp += "<div id=\"headlinesContainer\">"; | |
126 | ||
127 | tmp += "<div class=\"headlinesSubToolbar\">"; | |
128 | tmp += "<div id=\"subtoolbar_ftitle\">"; | |
129 | tmp += feed_title; | |
130 | tmp += "</div>"; | |
131 | ||
779ba075 AD |
132 | var sel_all_link; |
133 | var sel_unread_link; | |
134 | var sel_none_link; | |
135 | var sel_inv_link; | |
136 | ||
137 | if (document.getElementById("content-frame")) { | |
138 | sel_all_link = "javascript:selectTableRowsByIdPrefix('headlinesList', 'RROW-', 'RCHK-', true, '', true)"; | |
139 | sel_unread_link = "javascript:selectTableRowsByIdPrefix('headlinesList', 'RROW-', 'RCHK-', true, 'Unread', true)"; | |
140 | sel_none_link = "javascript:selectTableRowsByIdPrefix('headlinesList', 'RROW-', 'RCHK-', false)"; | |
141 | sel_inv_link = "javascript:invertHeadlineSelection()"; | |
142 | } else { | |
143 | sel_all_link = "javascript:cdmSelectArticles('all')"; | |
144 | sel_unread_link = "javascript:cdmSelectArticles('unread')"; | |
145 | sel_none_link = "javascript:cdmSelectArticles('none')"; | |
146 | sel_inv_link = "javascript:invertHeadlineSelection()"; | |
147 | } | |
4681834e AD |
148 | |
149 | tmp += __('Select:')+ | |
150 | " <a href=\""+sel_all_link+"\">"+__('All')+"</a>, "+ | |
151 | "<a href=\""+sel_unread_link+"\">"+__('Unread')+"</a>, "+ | |
152 | "<a href=\""+sel_inv_link+"\">"+__('Invert')+"</a>, "+ | |
153 | "<a href=\""+sel_none_link+"\">"+__('None')+"</a>"; | |
154 | ||
155 | tmp += " "; | |
156 | ||
157 | tmp += "</div>"; | |
158 | ||
159 | tmp += "<div id=\"headlinesInnerContainer\" onscroll=\"headlines_scroll_handler()\">"; | |
779ba075 AD |
160 | if (document.getElementById("content-frame")) { |
161 | tmp += "<table class=\"headlinesList\" id=\"headlinesList\" cellspacing=\"0\">"; | |
162 | } | |
4681834e AD |
163 | |
164 | } | |
165 | ||
4681834e AD |
166 | var limit = 30; |
167 | ||
168 | var toolbar_form = document.forms["main_toolbar_form"]; | |
169 | ||
170 | var limit = toolbar_form.limit[toolbar_form.limit.selectedIndex].value; | |
171 | var view_mode = toolbar_form.view_mode[toolbar_form.view_mode.selectedIndex].value; | |
172 | ||
173 | var limit_qpart = ""; | |
174 | var strategy_qpart = ""; | |
175 | var mode_qpart = ""; | |
e491d06d | 176 | var offset_qpart = ""; |
4681834e AD |
177 | |
178 | if (limit != 0) { | |
179 | limit_qpart = "LIMIT " + limit; | |
180 | } | |
181 | ||
182 | if (view_mode == "all_articles") { | |
183 | mode_qpart = "1"; | |
184 | } else if (view_mode == "adaptive") { | |
185 | if (get_local_feed_unread(feed_id) > 0) { | |
186 | mode_qpart = "unread = 1"; | |
187 | } else { | |
188 | mode_qpart = "1"; | |
189 | } | |
190 | } else if (view_mode == "marked") { | |
191 | mode_qpart = "marked = 1"; | |
192 | } else if (view_mode == "unread") { | |
193 | mode_qpart = "unread = 1"; | |
194 | } else { | |
195 | mode_qpart = "1"; | |
196 | } | |
197 | ||
79645416 AD |
198 | var ext_tables_qpart = ""; |
199 | ||
4681834e AD |
200 | if (feed_id > 0) { |
201 | strategy_qpart = "feed_id = " + feed_id; | |
202 | } else if (feed_id == -1) { | |
203 | strategy_qpart = "marked = 1"; | |
204 | } else if (feed_id == -4) { | |
205 | strategy_qpart = "1"; | |
88a66534 AD |
206 | } else if (feed_id < -10) { |
207 | var label_id = -11 - feed_id; | |
79645416 AD |
208 | strategy_qpart = "article_labels.id = articles.id AND label_id = " + label_id; |
209 | ext_tables_qpart = ",article_labels"; | |
e491d06d AD |
210 | } |
211 | ||
212 | if (offset > 0) { | |
213 | offset_qpart = "OFFSET " + (offset*30); | |
214 | } else { | |
215 | offset_qpart = ""; | |
216 | } | |
4681834e | 217 | |
851ce414 | 218 | var query = "SELECT *,feeds.title AS feed_title "+ |
79645416 AD |
219 | "FROM articles,feeds"+ext_tables_qpart+" "+ |
220 | "WHERE " + | |
851ce414 | 221 | "feed_id = feeds.id AND " + |
4681834e AD |
222 | strategy_qpart + |
223 | " AND " + mode_qpart + | |
224 | " ORDER BY updated DESC "+ | |
e491d06d AD |
225 | limit_qpart + " " + |
226 | offset_qpart; | |
4681834e AD |
227 | |
228 | var rs = db.execute(query); | |
229 | ||
e491d06d | 230 | var line_num = offset*30; |
4681834e | 231 | |
851ce414 AD |
232 | var real_feed_id = feed_id; |
233 | ||
4681834e AD |
234 | while (rs.isValidRow()) { |
235 | ||
236 | var id = rs.fieldByName("id"); | |
237 | var feed_id = rs.fieldByName("feed_id"); | |
238 | ||
851ce414 AD |
239 | var entry_feed_title = false; |
240 | ||
241 | if (real_feed_id < 0) { | |
242 | entry_feed_title = rs.fieldByName("feed_title"); | |
243 | } | |
244 | ||
4681834e AD |
245 | var marked_pic; |
246 | ||
247 | var row_class = (line_num % 2) ? "even" : "odd"; | |
248 | ||
249 | if (rs.fieldByName("unread") == "1") { | |
250 | row_class += "Unread"; | |
251 | } | |
6da82466 AD |
252 | |
253 | var labels = get_local_article_labels(id); | |
254 | ||
255 | debug(labels); | |
256 | ||
257 | var labels_str = "<span id=\"HLLCTR-"+id+"\">"; | |
258 | labels_str += format_article_labels(labels, id); | |
259 | labels_str += "</span>"; | |
260 | ||
4681834e AD |
261 | if (rs.fieldByName("marked") == "1") { |
262 | marked_pic = "<img id=\"FMPIC-"+id+"\" "+ | |
263 | "src=\"images/mark_set.png\" class=\"markedPic\""+ | |
264 | "alt=\"Unstar article\" onclick='javascript:tMark("+id+")'>"; | |
265 | } else { | |
266 | marked_pic = "<img id=\"FMPIC-"+id+"\" "+ | |
267 | "src=\"images/mark_unset.png\" class=\"markedPic\""+ | |
268 | "alt=\"Star article\" onclick='javascript:tMark("+id+")'>"; | |
269 | } | |
270 | ||
271 | var mouseover_attrs = "onmouseover='postMouseIn($id)' "+ | |
272 | "onmouseout='postMouseOut($id)'"; | |
779ba075 AD |
273 | |
274 | var content_preview = truncate_string(strip_tags(rs.fieldByName("content")), | |
275 | 100); | |
4681834e | 276 | |
779ba075 | 277 | if (document.getElementById("content-frame")) { |
4681834e | 278 | |
779ba075 AD |
279 | tmp += "<tr class='"+row_class+"' id='RROW-"+id+"' "+mouseover_attrs+">"; |
280 | ||
281 | tmp += "<td class='hlUpdPic'> </td>"; | |
4681834e | 282 | |
779ba075 AD |
283 | tmp += "<td class='hlSelectRow'>"+ |
284 | "<input type=\"checkbox\" onclick=\"tSR(this)\" id=\"RCHK-"+id+"\"></td>"; | |
285 | ||
286 | tmp += "<td class='hlMarkedPic'>"+marked_pic+"</td>"; | |
287 | ||
288 | tmp += "<td onclick='view("+id+","+feed_id+")' "+ | |
289 | "class='hlContent' valign='middle'>"; | |
290 | ||
851ce414 | 291 | tmp += "<a target=\"_blank\" id=\"RTITLE-"+id+"\" href=\"" + |
779ba075 AD |
292 | rs.fieldByName("link") + "\"" + |
293 | "onclick=\"return view("+id+","+feed_id+");\">"+ | |
294 | rs.fieldByName("title"); | |
4681834e | 295 | |
779ba075 AD |
296 | tmp += "<span class=\"contentPreview\"> - "+content_preview+"</span>"; |
297 | ||
298 | tmp += "</a>"; | |
851ce414 | 299 | |
6da82466 AD |
300 | tmp += labels_str; |
301 | ||
851ce414 AD |
302 | if (entry_feed_title) { |
303 | tmp += " <span class=\"hlFeed\">"+ | |
304 | "(<a href='javascript:viewfeed("+feed_id+ | |
305 | ")'>"+entry_feed_title+"</a>)</span>"; | |
306 | } | |
307 | ||
779ba075 | 308 | tmp += "</td>"; |
d07f08e8 | 309 | |
779ba075 | 310 | tmp += "<td class=\"hlUpdated\" onclick='view("+id+","+feed_id+")'>"+ |
d07f08e8 AD |
311 | "<nobr>"+rs.fieldByName("updated").substring(0,16)+ |
312 | "</nobr></td>"; | |
779ba075 AD |
313 | |
314 | tmp += "</tr>"; | |
315 | } else { | |
4681834e | 316 | |
779ba075 AD |
317 | var add_class = ""; |
318 | ||
319 | if (rs.fieldByName("unread") == "1") { | |
320 | add_class = "Unread"; | |
321 | } | |
322 | ||
323 | tmp += "<div class=\"cdmArticle"+add_class+"\" id=\"RROW-"+id+"\" "+ | |
324 | mouseover_attrs+"'>"; | |
325 | ||
d07f08e8 AD |
326 | feed_icon_img = "<img class=\"tinyFeedIcon\" src=\""+ |
327 | getInitParam("icons_url")+"/"+feed_id+".ico\" alt=\"\">"; | |
328 | cdm_feed_icon = "<span style=\"cursor : pointer\" "+ | |
329 | "onclick=\"viewfeed("+feed_id+")\">"+feed_icon_img+"</span>"; | |
330 | ||
779ba075 AD |
331 | tmp += "<div class=\"cdmHeader\">"; |
332 | tmp += "<div class=\"articleUpdated\">"+ | |
d07f08e8 AD |
333 | rs.fieldByName("updated").substring(0,16)+ |
334 | " "+cdm_feed_icon+"</div>"; | |
779ba075 AD |
335 | |
336 | tmp += "<span id=\"RTITLE-"+id+"\" class=\"titleWrap\">"+ | |
337 | "<a class=\"title\" onclick=\"javascript:toggleUnread("+id+", 0)\""+ | |
338 | "target=\"_blank\" href=\""+rs.fieldByName("link")+ | |
339 | "\">"+rs.fieldByName("title")+"</a>"; | |
851ce414 | 340 | |
6da82466 AD |
341 | tmp += labels_str; |
342 | ||
851ce414 AD |
343 | if (entry_feed_title) { |
344 | tmp += " (<a href='javascript:viewfeed("+feed_id+ | |
345 | ")'>"+entry_feed_title+"</a>)"; | |
346 | } | |
347 | ||
779ba075 AD |
348 | tmp += "</span></div>"; |
349 | ||
350 | tmp += "<div class=\"cdmContent\" onclick=\"cdmClicked("+id+")\""+ | |
351 | "id=\"CICD-"+id+"\">"; | |
352 | tmp += rs.fieldByName("content"); | |
353 | tmp += "<br clear='both'>" | |
354 | tmp += "</div>"; | |
355 | ||
356 | tmp += "<div class=\"cdmFooter\"><span class='s0'>"; | |
357 | tmp += __("Select:")+ | |
358 | " <input type=\"checkbox\" "+ | |
359 | "onclick=\"toggleSelectRowById(this, 'RROW-"+id+"')\" "+ | |
360 | "class=\"feedCheckBox\" id=\"RCHK-"+id+"\">"; | |
361 | ||
362 | tmp += "</span><span class='s1'>"+marked_pic+"</span> "; | |
363 | ||
3ab18266 | 364 | /* tmp += "<span class='s1'>"+ |
779ba075 AD |
365 | "<img class='tagsPic' src='images/tag.png' alt='Tags' title='Tags'>"+ |
366 | "<span id=\"ATSTR-"+id+"\">"+rs.fieldByName("tags")+"</span>"+ | |
3ab18266 | 367 | "</span>"; */ |
779ba075 AD |
368 | |
369 | tmp += "<span class='s2'>Toggle: <a class=\"cdmToggleLink\""+ | |
370 | "href=\"javascript:toggleUnread("+id+")\">"+ | |
371 | "Unread</a></span>"; | |
372 | tmp += "</div>"; | |
373 | ||
374 | tmp += "</div>"; | |
375 | } | |
4681834e AD |
376 | |
377 | rs.next(); | |
378 | line_num++; | |
379 | } | |
03c96380 | 380 | |
0e923da4 AD |
381 | if (line_num - offset*30 < 30) { |
382 | _infscroll_disable = 1; | |
383 | } | |
384 | ||
03c96380 | 385 | rs.close(); |
4681834e AD |
386 | |
387 | if (offset == 0) { | |
388 | tmp += "</table>"; | |
76d20f5f AD |
389 | |
390 | if (line_num - offset*30 == 0) { | |
391 | tmp += "<div class='whiteBox'>" + | |
392 | __("No articles found to display.") + | |
393 | "</div>"; | |
394 | } | |
4681834e AD |
395 | tmp += "</div></div>"; |
396 | } | |
397 | ||
398 | if (offset == 0) { | |
e491d06d | 399 | var container = document.getElementById("headlines-frame"); |
4681834e AD |
400 | container.innerHTML = tmp; |
401 | } else { | |
402 | var ids = getSelectedArticleIds2(); | |
403 | ||
e491d06d AD |
404 | var container = document.getElementById("headlinesList"); |
405 | container.innerHTML = container.innerHTML + tmp; | |
4681834e AD |
406 | |
407 | for (var i = 0; i < ids.length; i++) { | |
408 | markHeadline(ids[i]); | |
409 | } | |
410 | } | |
411 | } | |
412 | ||
413 | remove_splash(); | |
414 | ||
0e923da4 | 415 | _infscroll_request_sent = 0; |
4681834e AD |
416 | |
417 | } catch (e) { | |
418 | exception_error("viewfeed_offline", e); | |
419 | } | |
420 | } | |
421 | ||
422 | function render_offline_feedlist() { | |
423 | try { | |
1c980681 | 424 | var cats_enabled = getInitParam("enable_feed_cats") == "1"; |
d6416405 | 425 | |
4681834e AD |
426 | var tmp = "<ul class=\"feedList\" id=\"feedList\">"; |
427 | ||
428 | var unread = get_local_feed_unread(-4); | |
429 | ||
430 | global_unread = unread; | |
431 | updateTitle(); | |
432 | ||
d6416405 | 433 | if (cats_enabled) { |
c2726c96 | 434 | tmp += printCategoryHeader(-1, is_local_cat_collapsed(-1), false); |
d6416405 AD |
435 | } |
436 | ||
4681834e AD |
437 | tmp += printFeedEntry(-4, __("All articles"), "feed", unread, |
438 | "images/tag.png"); | |
439 | ||
440 | var unread = get_local_feed_unread(-1); | |
441 | ||
442 | tmp += printFeedEntry(-1, __("Starred articles"), "feed", unread, | |
443 | "images/mark_set.png"); | |
444 | ||
d6416405 AD |
445 | if (cats_enabled) { |
446 | tmp += "</ul></li>"; | |
447 | } else { | |
448 | tmp += "<li><hr/></li>"; | |
449 | } | |
4681834e | 450 | |
c2726c96 AD |
451 | if (cats_enabled) { |
452 | tmp += printCategoryHeader(-2, is_local_cat_collapsed(-2), false); | |
453 | } | |
454 | ||
455 | var rs = db.execute("SELECT id,caption "+ | |
456 | "FROM labels "+ | |
457 | "ORDER BY caption"); | |
458 | ||
459 | while (rs.isValidRow()) { | |
460 | var id = -11 - parseInt(rs.field(0)); | |
461 | var caption = rs.field(1); | |
462 | var unread = get_local_feed_unread(id); | |
463 | ||
464 | tmp += printFeedEntry(id, caption, "feed", unread, | |
465 | "images/label.png"); | |
466 | ||
467 | rs.next(); | |
468 | } | |
469 | ||
470 | rs.close(); | |
471 | ||
472 | if (cats_enabled) { | |
473 | tmp += "</ul></li>"; | |
474 | } else { | |
475 | tmp += "<li><hr/></li>"; | |
476 | } | |
477 | ||
f4c11347 | 478 | /* var rs = db.execute("SELECT feeds.id,feeds.title,has_icon,COUNT(articles.id) "+ |
4681834e AD |
479 | "FROM feeds LEFT JOIN articles ON (feed_id = feeds.id) "+ |
480 | "WHERE unread = 1 OR unread IS NULL GROUP BY feeds.id "+ | |
f4c11347 AD |
481 | "ORDER BY feeds.title"); */ |
482 | ||
d6416405 AD |
483 | var order_by = "feeds.title"; |
484 | ||
485 | if (cats_enabled) order_by = "categories.title," + order_by; | |
486 | ||
487 | var rs = db.execute("SELECT "+ | |
488 | "feeds.id,feeds.title,has_icon,cat_id,collapsed "+ | |
489 | "FROM feeds,categories WHERE cat_id = categories.id "+ | |
490 | "ORDER BY "+order_by); | |
491 | ||
492 | var tmp_cat_id = -1; | |
4681834e AD |
493 | |
494 | while (rs.isValidRow()) { | |
495 | ||
496 | var id = rs.field(0); | |
497 | var title = rs.field(1); | |
498 | var has_icon = rs.field(2); | |
f4c11347 | 499 | var unread = get_local_feed_unread(id); |
d6416405 AD |
500 | var cat_id = rs.field(3); |
501 | var cat_hidden = rs.field(4); | |
502 | ||
503 | if (cat_id != tmp_cat_id && cats_enabled) { | |
504 | if (tmp_cat_id != -1) { | |
505 | tmp += "</ul></li>"; | |
506 | } | |
507 | tmp += printCategoryHeader(cat_id, cat_hidden, false); | |
508 | tmp_cat_id = cat_id; | |
509 | } | |
4681834e AD |
510 | |
511 | var icon = ""; | |
512 | ||
513 | if (has_icon) { | |
514 | icon = "icons/" + id + ".ico"; | |
515 | } | |
516 | ||
4681834e AD |
517 | var feed_icon = ""; |
518 | ||
519 | var row_class = "feed"; | |
520 | ||
521 | if (unread > 0) { | |
522 | row_class += "Unread"; | |
523 | fctr_class = "feedCtrHasUnread"; | |
524 | } else { | |
525 | fctr_class = "feedCtrNoUnread"; | |
526 | } | |
527 | ||
528 | tmp += printFeedEntry(id, title, "feed", unread, icon); | |
529 | ||
530 | rs.next(); | |
531 | } | |
532 | ||
03c96380 AD |
533 | rs.close(); |
534 | ||
983a6a9c AD |
535 | if (cats_enabled) { |
536 | tmp += "</ul>"; | |
537 | } | |
538 | ||
4681834e AD |
539 | tmp += "</ul>"; |
540 | ||
541 | render_feedlist(tmp); | |
542 | } catch (e) { | |
543 | exception_error("render_offline_feedlist", e); | |
544 | } | |
545 | } | |
546 | ||
547 | function init_offline() { | |
548 | try { | |
549 | offline_mode = true; | |
550 | ||
551 | Element.hide("dispSwitchPrompt"); | |
552 | Element.hide("feedBrowserPrompt"); | |
4681834e | 553 | |
69ea0cdd AD |
554 | Element.hide("topLinksOnline"); |
555 | Element.show("topLinksOffline"); | |
556 | ||
80b1c238 | 557 | var tb_form = document.getElementById("main_toolbar_form"); |
80b1c238 AD |
558 | Element.hide(tb_form.update); |
559 | ||
3c6d3586 AD |
560 | var chooser = document.getElementById("quickMenuChooser"); |
561 | chooser.disabled = true; | |
562 | ||
3034277a AD |
563 | var rs = db.execute("SELECT key, value FROM init_params"); |
564 | ||
565 | while (rs.isValidRow()) { | |
566 | init_params[rs.field(0)] = rs.field(1); | |
567 | rs.next(); | |
568 | } | |
569 | ||
570 | rs.close(); | |
4681834e | 571 | |
b15e516e AD |
572 | var rs = db.execute("SELECT COUNT(*) FROM feeds"); |
573 | ||
574 | var num_feeds = 0; | |
575 | ||
576 | if (rs.isValidRow()) { | |
577 | num_feeds = rs.field(0); | |
578 | } | |
579 | ||
580 | rs.close(); | |
581 | ||
582 | if (num_feeds == 0) { | |
583 | remove_splash(); | |
584 | return fatalError(0, | |
585 | __("Data for offline browsing has not been downloaded yet.")); | |
586 | } | |
587 | ||
4681834e | 588 | render_offline_feedlist(); |
10003c4c | 589 | init_second_stage(); |
b15e516e AD |
590 | window.setTimeout("viewfeed(-4)", 50); |
591 | ||
4681834e AD |
592 | } catch (e) { |
593 | exception_error("init_offline", e); | |
594 | } | |
595 | } | |
596 | ||
597 | function offline_download_parse(stage, transport) { | |
598 | try { | |
599 | if (transport.responseXML) { | |
600 | ||
601 | if (stage == 0) { | |
602 | ||
603 | var feeds = transport.responseXML.getElementsByTagName("feed"); | |
604 | ||
605 | if (feeds.length > 0) { | |
606 | db.execute("DELETE FROM feeds"); | |
607 | } | |
608 | ||
609 | for (var i = 0; i < feeds.length; i++) { | |
610 | var id = feeds[i].getAttribute("id"); | |
611 | var has_icon = feeds[i].getAttribute("has_icon"); | |
612 | var title = feeds[i].firstChild.nodeValue; | |
d8781c91 AD |
613 | var cat_id = feeds[i].getAttribute("cat_id"); |
614 | ||
615 | db.execute("INSERT INTO feeds (id,title,has_icon,cat_id)"+ | |
75aa83ec | 616 | "VALUES (?,?,?,?)", |
d8781c91 | 617 | [id, title, has_icon, cat_id]); |
4681834e | 618 | } |
75aa83ec AD |
619 | |
620 | var cats = transport.responseXML.getElementsByTagName("category"); | |
621 | ||
622 | if (feeds.length > 0) { | |
623 | db.execute("DELETE FROM categories"); | |
624 | } | |
625 | ||
626 | for (var i = 0; i < cats.length; i++) { | |
627 | var id = cats[i].getAttribute("id"); | |
628 | var collapsed = cats[i].getAttribute("collapsed"); | |
629 | var title = cats[i].firstChild.nodeValue; | |
630 | ||
631 | db.execute("INSERT INTO categories (id,title,collapsed)"+ | |
632 | "VALUES (?,?,?)", | |
633 | [id, title, collapsed]); | |
634 | } | |
635 | ||
ed22888b AD |
636 | var labels = transport.responseXML.getElementsByTagName("label"); |
637 | ||
638 | if (labels.length > 0) { | |
639 | db.execute("DELETE FROM labels"); | |
640 | } | |
641 | ||
642 | for (var i = 0; i < labels.length; i++) { | |
643 | var id = labels[i].getAttribute("id"); | |
644 | var fg_color = labels[i].getAttribute("fg_color"); | |
645 | var bg_color = labels[i].getAttribute("bg_color"); | |
646 | var caption = labels[i].firstChild.nodeValue; | |
647 | ||
648 | db.execute("INSERT INTO labels (id,caption,fg_color,bg_color)"+ | |
649 | "VALUES (?,?,?,?)", | |
650 | [id, caption, fg_color, bg_color]); | |
651 | } | |
652 | ||
3e52ab08 | 653 | window.setTimeout("update_offline_data("+(stage+1)+")", 10*1000); |
4681834e AD |
654 | } else { |
655 | ||
656 | var articles = transport.responseXML.getElementsByTagName("article"); | |
657 | ||
3e52ab08 AD |
658 | var limit = transport.responseXML.getElementsByTagName("limit")[0]; |
659 | ||
660 | if (limit) { | |
661 | limit = limit.getAttribute("value"); | |
662 | } else { | |
663 | limit = 0; | |
664 | } | |
665 | ||
4681834e AD |
666 | var articles_found = 0; |
667 | ||
668 | for (var i = 0; i < articles.length; i++) { | |
669 | var a = eval("("+articles[i].firstChild.nodeValue+")"); | |
670 | articles_found++; | |
671 | if (a) { | |
672 | ||
673 | var date = new Date(); | |
674 | var ts = Math.round(date.getTime() / 1000); | |
675 | ||
676 | db.execute("DELETE FROM articles WHERE id = ?", [a.id]); | |
c2726c96 AD |
677 | db.execute("DELETE FROM article_labels WHERE id = ?", [a.id]); |
678 | ||
4681834e AD |
679 | db.execute("INSERT INTO articles "+ |
680 | "(id, feed_id, title, link, guid, updated, content, "+ | |
3034277a AD |
681 | "unread, marked, tags, added, comments) "+ |
682 | "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", | |
4681834e | 683 | [a.id, a.feed_id, a.title, a.link, a.guid, a.updated, |
3034277a AD |
684 | a.content, a.unread, a.marked, a.tags, ts, |
685 | a.comments]); | |
4681834e | 686 | |
c2726c96 AD |
687 | if (a.labels.length > 0) { |
688 | for (var j = 0; j < a.labels.length; j++) { | |
689 | label_local_add_article(a.id, a.labels[j][0]); | |
690 | } | |
691 | } | |
692 | ||
4681834e AD |
693 | } |
694 | } | |
695 | ||
3e52ab08 AD |
696 | debug("downloaded articles: " + articles_found + " limit: " + limit); |
697 | ||
698 | if (articles_found >= limit) { | |
699 | window.setTimeout("update_offline_data("+(stage+1)+")", 10*1000); | |
700 | debug("update_offline_data: done " + stage); | |
4681834e AD |
701 | } else { |
702 | window.setTimeout("update_offline_data(0)", 1800*1000); | |
3e52ab08 | 703 | debug("update_offline_data: finished"); |
4681834e AD |
704 | |
705 | var date = new Date(); | |
706 | var ts = Math.round(date.getTime() / 1000); | |
707 | ||
708 | db.execute("DELETE FROM articles WHERE added < ? - 2592000", [ts]); | |
709 | ||
710 | } | |
711 | } | |
712 | ||
f45c85f9 | 713 | // notify(''); |
b2319311 | 714 | |
4681834e AD |
715 | } |
716 | } catch (e) { | |
717 | exception_error("offline_download_parse", e); | |
718 | } | |
719 | } | |
720 | ||
721 | function update_offline_data(stage) { | |
722 | try { | |
723 | ||
724 | if (!stage) stage = 0; | |
823ff6aa | 725 | if (offline_mode) return; |
4681834e AD |
726 | |
727 | debug("update_offline_data: stage " + stage); | |
728 | ||
f45c85f9 | 729 | // notify_progress("Updating offline data... (" + stage +")", true); |
4681834e AD |
730 | |
731 | var query = "backend.php?op=rpc&subop=download&stage=" + stage; | |
732 | ||
733 | var rs = db.execute("SELECT MAX(id), MIN(id) FROM articles"); | |
03c96380 | 734 | |
4681834e AD |
735 | if (rs.isValidRow() && rs.field(0)) { |
736 | var offline_dl_max_id = rs.field(0); | |
737 | var offline_dl_min_id = rs.field(1); | |
738 | ||
739 | query = query + "&cidt=" + offline_dl_max_id; | |
740 | query = query + "&cidb=" + offline_dl_min_id; | |
741 | } | |
742 | ||
03c96380 AD |
743 | rs.close(); |
744 | ||
4681834e AD |
745 | new Ajax.Request(query, { |
746 | onComplete: function(transport) { | |
747 | offline_download_parse(stage, transport); | |
4681834e AD |
748 | } }); |
749 | ||
750 | } catch (e) { | |
751 | exception_error("initiate_offline_download", e); | |
752 | } | |
753 | } | |
754 | ||
d6416405 | 755 | function set_feedlist_counter(id, ctr, is_cat) { |
4681834e AD |
756 | try { |
757 | ||
758 | var feedctr = document.getElementById("FEEDCTR-" + id); | |
759 | var feedu = document.getElementById("FEEDU-" + id); | |
760 | var feedr = document.getElementById("FEEDR-" + id); | |
761 | ||
d6416405 AD |
762 | if (is_cat) { |
763 | var catctr = document.getElementById("FCATCTR-" + id); | |
764 | if (catctr) { | |
765 | catctr.innerHTML = "(" + ctr + ")"; | |
766 | if (ctr > 0) { | |
767 | catctr.className = "catCtrHasUnread"; | |
768 | } else { | |
769 | catctr.className = "catCtrNoUnread"; | |
770 | } | |
771 | } | |
772 | } else if (feedctr && feedu && feedr) { | |
4681834e AD |
773 | |
774 | var row_needs_hl = (ctr > 0 && ctr > parseInt(feedu.innerHTML)); | |
775 | ||
776 | feedu.innerHTML = ctr; | |
777 | ||
778 | if (ctr > 0) { | |
779 | feedctr.className = "feedCtrHasUnread"; | |
780 | if (!feedr.className.match("Unread")) { | |
781 | var is_selected = feedr.className.match("Selected"); | |
782 | ||
783 | feedr.className = feedr.className.replace("Selected", ""); | |
784 | feedr.className = feedr.className.replace("Unread", ""); | |
785 | ||
786 | feedr.className = feedr.className + "Unread"; | |
787 | ||
788 | if (is_selected) { | |
789 | feedr.className = feedr.className + "Selected"; | |
790 | } | |
791 | ||
792 | } | |
793 | ||
794 | if (row_needs_hl) { | |
795 | new Effect.Highlight(feedr, {duration: 1, startcolor: "#fff7d5", | |
796 | queue: { position:'end', scope: 'EFQ-' + id, limit: 1 } } ); | |
797 | } | |
798 | } else { | |
799 | feedctr.className = "feedCtrNoUnread"; | |
800 | feedr.className = feedr.className.replace("Unread", ""); | |
801 | } | |
802 | } | |
803 | ||
804 | } catch (e) { | |
805 | exception_error("set_feedlist_counter", e); | |
806 | } | |
807 | } | |
808 | ||
809 | function update_local_feedlist_counters() { | |
810 | try { | |
f4c11347 | 811 | if (!offline_mode) return; |
4681834e | 812 | |
f4c11347 | 813 | /* var rs = db.execute("SELECT feeds.id,COUNT(articles.id) "+ |
4681834e AD |
814 | "FROM feeds LEFT JOIN articles ON (feed_id = feeds.id) "+ |
815 | "WHERE unread = 1 OR unread IS NULL GROUP BY feeds.id "+ | |
f4c11347 AD |
816 | "ORDER BY feeds.title"); */ |
817 | ||
d6416405 | 818 | var rs = db.execute("SELECT id FROM feeds "+ |
f4c11347 | 819 | "ORDER BY title"); |
4681834e AD |
820 | |
821 | while (rs.isValidRow()) { | |
822 | var id = rs.field(0); | |
f4c11347 | 823 | var ctr = get_local_feed_unread(id); |
d6416405 AD |
824 | set_feedlist_counter(id, ctr, false); |
825 | rs.next(); | |
826 | } | |
4681834e | 827 | |
d6416405 AD |
828 | rs.close(); |
829 | ||
830 | var rs = db.execute("SELECT cat_id,SUM(unread) "+ | |
831 | "FROM articles, feeds WHERE feeds.id = feed_id GROUP BY cat_id"); | |
4681834e | 832 | |
d6416405 AD |
833 | while (rs.isValidRow()) { |
834 | var id = rs.field(0); | |
835 | var ctr = rs.field(1); | |
836 | set_feedlist_counter(id, ctr, true); | |
4681834e AD |
837 | rs.next(); |
838 | } | |
839 | ||
03c96380 AD |
840 | rs.close(); |
841 | ||
c174bcdf AD |
842 | set_feedlist_counter(-2, get_local_category_unread(-2), true); |
843 | ||
4681834e AD |
844 | set_feedlist_counter(-4, get_local_feed_unread(-4)); |
845 | set_feedlist_counter(-1, get_local_feed_unread(-1)); | |
846 | ||
88a66534 AD |
847 | var rs = db.execute("SELECT id FROM labels"); |
848 | ||
849 | while (rs.isValidRow()) { | |
850 | var id = -11 - rs.field(0); | |
851 | var ctr = get_local_feed_unread(id); | |
852 | set_feedlist_counter(id, ctr, false); | |
853 | rs.next(); | |
854 | } | |
855 | ||
856 | rs.close(); | |
857 | ||
4681834e AD |
858 | hideOrShowFeeds(getInitParam("hide_read_feeds") == 1); |
859 | ||
860 | global_unread = get_local_feed_unread(-4); | |
861 | updateTitle(); | |
862 | ||
863 | } catch (e) { | |
864 | exception_error("update_local_feedlist_counters", e); | |
865 | } | |
866 | } | |
774b8df8 AD |
867 | |
868 | function get_local_feed_unread(id) { | |
869 | try { | |
870 | var rs; | |
871 | ||
872 | if (id == -4) { | |
873 | rs = db.execute("SELECT SUM(unread) FROM articles"); | |
874 | } else if (id == -1) { | |
875 | rs = db.execute("SELECT SUM(unread) FROM articles WHERE marked = 1"); | |
88a66534 | 876 | } else if (id > 0) { |
774b8df8 | 877 | rs = db.execute("SELECT SUM(unread) FROM articles WHERE feed_id = ?", [id]); |
88a66534 AD |
878 | } else if (id < -10) { |
879 | var label_id = -11 - id; | |
880 | rs = db.execute("SELECT SUM(unread) FROM articles,article_labels "+ | |
881 | "WHERE article_labels.id = articles.id AND label_id = ?", [label_id]); | |
774b8df8 AD |
882 | } |
883 | ||
03c96380 AD |
884 | var a = false; |
885 | ||
774b8df8 | 886 | if (rs.isValidRow()) { |
03c96380 | 887 | a = rs.field(0); |
774b8df8 | 888 | } else { |
03c96380 | 889 | a = 0; |
774b8df8 AD |
890 | } |
891 | ||
03c96380 AD |
892 | rs.close(); |
893 | ||
894 | return a; | |
895 | ||
774b8df8 AD |
896 | } catch (e) { |
897 | exception_error("get_local_feed_unread", e); | |
898 | } | |
899 | } | |
900 | ||
25d99353 AD |
901 | function init_gears() { |
902 | try { | |
903 | ||
904 | if (window.google && google.gears) { | |
905 | localServer = google.gears.factory.create("beta.localserver"); | |
906 | store = localServer.createManagedStore("tt-rss"); | |
907 | db = google.gears.factory.create('beta.database'); | |
908 | db.open('tt-rss'); | |
909 | ||
910 | db.execute("CREATE TABLE IF NOT EXISTS version (schema_version text)"); | |
911 | ||
912 | var rs = db.execute("SELECT schema_version FROM version"); | |
913 | ||
914 | var version = ""; | |
915 | ||
916 | if (rs.isValidRow()) { | |
917 | version = rs.field(0); | |
918 | } | |
919 | ||
3034277a AD |
920 | rs.close(); |
921 | ||
25d99353 | 922 | if (version != SCHEMA_VERSION) { |
3034277a | 923 | db.execute("DROP TABLE IF EXISTS init_params"); |
b871dd06 AD |
924 | db.execute("DROP TABLE IF EXISTS cache"); |
925 | db.execute("DROP TABLE IF EXISTS feeds"); | |
d8781c91 | 926 | db.execute("DROP TABLE IF EXISTS categories"); |
ed22888b AD |
927 | db.execute("DROP TABLE IF EXISTS labels"); |
928 | db.execute("DROP TABLE IF EXISTS article_labels"); | |
b871dd06 | 929 | db.execute("DROP TABLE IF EXISTS articles"); |
c174bcdf AD |
930 | db.execute("DROP INDEX IF EXISTS article_labels_label_id_idx"); |
931 | db.execute("DROP INDEX IF EXISTS articles_unread_idx"); | |
932 | db.execute("DROP INDEX IF EXISTS articles_feed_id_idx"); | |
3034277a AD |
933 | db.execute("DROP TABLE IF EXISTS version"); |
934 | db.execute("CREATE TABLE IF NOT EXISTS version (schema_version text)"); | |
25d99353 AD |
935 | db.execute("INSERT INTO version (schema_version) VALUES (?)", |
936 | [SCHEMA_VERSION]); | |
937 | } | |
938 | ||
3034277a AD |
939 | db.execute("CREATE TABLE IF NOT EXISTS init_params (key text, value text)"); |
940 | ||
25d99353 | 941 | db.execute("CREATE TABLE IF NOT EXISTS cache (id text, article text, param text, added text)"); |
d8781c91 | 942 | db.execute("CREATE TABLE IF NOT EXISTS feeds (id integer, title text, has_icon integer, cat_id integer)"); |
75aa83ec | 943 | db.execute("CREATE TABLE IF NOT EXISTS categories (id integer, title text, collapsed integer)"); |
ed22888b AD |
944 | db.execute("CREATE TABLE IF NOT EXISTS labels (id integer, caption text, fg_color text, bg_color text)"); |
945 | db.execute("CREATE TABLE IF NOT EXISTS article_labels (id integer, label_id integer)"); | |
b871dd06 | 946 | db.execute("CREATE TABLE IF NOT EXISTS articles (id integer, feed_id integer, title text, link text, guid text, updated text, content text, tags text, unread text, marked text, added text, comments text)"); |
c174bcdf AD |
947 | |
948 | db.execute("CREATE INDEX IF NOT EXISTS articles_unread_idx ON articles(unread)"); | |
949 | db.execute("CREATE INDEX IF NOT EXISTS article_labels_label_id_idx ON article_labels(label_id)"); | |
950 | db.execute("CREATE INDEX IF NOT EXISTS articles_feed_id_idx ON articles(feed_id)"); | |
779ba075 | 951 | |
779ba075 | 952 | db.execute("DELETE FROM cache WHERE id LIKE 'F:%' OR id LIKE 'C:%'"); |
69ea0cdd AD |
953 | |
954 | Element.show("restartOfflinePic"); | |
955 | ||
25d99353 AD |
956 | } |
957 | ||
958 | cache_expire(); | |
959 | ||
960 | } catch (e) { | |
961 | exception_error("init_gears", e); | |
962 | } | |
963 | } | |
964 | ||
69ea0cdd AD |
965 | function gotoOffline() { |
966 | window.location.href = "tt-rss.php?offline=1"; | |
967 | } | |
968 | ||
969 | function gotoOnline() { | |
970 | window.location.href = "tt-rss.php"; | |
971 | } | |
774b8df8 | 972 | |
c26aa9f0 AD |
973 | function local_collapse_cat(id) { |
974 | try { | |
975 | if (db) { | |
976 | db.execute("UPDATE categories SET collapsed = NOT collapsed WHERE id = ?", | |
977 | [id]); | |
978 | } | |
979 | } catch (e) { | |
980 | exception_error("local_collapse_cat", e); | |
981 | } | |
982 | } | |
d6416405 AD |
983 | |
984 | function get_local_category_title(id) { | |
985 | try { | |
986 | var rs = db.execute("SELECT title FROM categories WHERE id = ?", [id]); | |
987 | var tmp = ""; | |
988 | ||
989 | if (rs.isValidRow()) { | |
990 | tmp = rs.field(0); | |
991 | } | |
992 | ||
993 | rs.close(); | |
994 | ||
995 | return tmp; | |
996 | ||
997 | } catch (e) { | |
998 | exception_error("get_local_category_title", e); | |
999 | } | |
1000 | } | |
1001 | ||
1002 | function get_local_category_unread(id) { | |
1003 | try { | |
c174bcdf AD |
1004 | var rs = false; |
1005 | ||
1006 | if (id >= 0) { | |
1007 | rs = db.execute("SELECT SUM(unread) FROM articles, feeds "+ | |
1008 | "WHERE feeds.id = feed_id AND cat_id = ?", [id]); | |
1009 | } else if (id == -2) { | |
1010 | rs = db.execute("SELECT SUM(unread) FROM article_labels, articles "+ | |
1011 | "where article_labels.id = articles.id"); | |
1012 | } else { | |
1013 | return 0; | |
1014 | } | |
d6416405 AD |
1015 | |
1016 | var tmp = 0; | |
1017 | ||
1018 | if (rs.isValidRow()) { | |
1019 | tmp = rs.field(0); | |
1020 | } | |
1021 | ||
1022 | rs.close(); | |
1023 | ||
1024 | return tmp; | |
1025 | ||
1026 | } catch (e) { | |
1027 | exception_error("get_local_category_unread", e); | |
1028 | } | |
1029 | } | |
1030 | ||
1031 | function printCategoryHeader(cat_id, hidden, can_browse) { | |
1032 | try { | |
1033 | if (hidden == undefined) hidden = false; | |
1034 | if (can_browse == undefined) can_browse = false; | |
1035 | ||
1036 | var tmp_category = get_local_category_title(cat_id); | |
1037 | var tmp = ""; | |
1038 | ||
1039 | var cat_unread = get_local_category_unread(cat_id); | |
1040 | ||
1041 | var holder_style = ""; | |
1042 | var ellipsis = ""; | |
1043 | ||
1044 | if (hidden) { | |
1045 | holder_style = "display:none;"; | |
1046 | ellipsis = "…"; | |
1047 | } | |
1048 | ||
1049 | var catctr_class = (cat_unread > 0) ? "catCtrHasUnread" : "catCtrNoUnread"; | |
1050 | ||
1051 | var browse_cat_link = ""; | |
1052 | var inner_title_class = "catTitleNL"; | |
1053 | ||
1054 | if (can_browse) { | |
1055 | browse_cat_link = "onclick=\"javascript:viewCategory($cat_id)\""; | |
1056 | inner_title_class = "catTitle"; | |
1057 | } | |
1058 | ||
1059 | var cat_class = "feedCat"; | |
1060 | ||
1061 | tmp += "<li class=\""+cat_class+"\" id=\"FCAT-"+cat_id+"\">"+ | |
1062 | "<img onclick=\"toggleCollapseCat("+cat_id+")\" class=\"catCollapse\""+ | |
1063 | " title=\""+__('Click to collapse category')+"\""+ | |
1064 | " src=\"images/cat-collapse.png\"><span class=\""+inner_title_class+"\" "+ | |
1065 | " id=\"FCATN-"+cat_id+"\" "+browse_cat_link+ | |
1066 | "\">"+tmp_category+"</span>"; | |
1067 | ||
1068 | tmp += "<span id=\"FCAP-"+cat_id+"\">"; | |
1069 | ||
1070 | tmp += " <span id=\"FCATCTR-"+cat_id+"\" "+ | |
1071 | "class=\""+catctr_class+"\">("+cat_unread+")</span> "+ellipsis; | |
1072 | ||
1073 | tmp += "</span>"; | |
1074 | ||
1075 | tmp += "<ul class=\"feedCatList\" id=\"FCATLIST-"+cat_id+"\" "+ | |
1076 | "style='"+holder_style+"'>"; | |
1077 | ||
1078 | return tmp; | |
1079 | } catch (e) { | |
1080 | exception_error("printCategoryHeader", e); | |
1081 | } | |
1082 | } | |
1083 | ||
c2726c96 AD |
1084 | function is_local_cat_collapsed(id) { |
1085 | try { | |
1086 | ||
1087 | var rs = db.execute("SELECT collapsed FROM categories WHERE id = ?", [id]); | |
1088 | var cat_hidden = 0; | |
1089 | ||
1090 | if (rs.isValidRow()) { | |
1091 | cat_hidden = rs.field(0); | |
1092 | } | |
1093 | ||
1094 | rs.close(); | |
1095 | ||
1096 | return cat_hidden == "1"; | |
1097 | ||
1098 | } catch (e) { | |
1099 | exception_error("is_local_cat_collapsed", e); | |
1100 | } | |
1101 | } | |
1102 | ||
6da82466 AD |
1103 | function get_local_article_labels(id) { |
1104 | try { | |
1105 | var rs = db.execute("SELECT DISTINCT label_id,caption,fg_color,bg_color "+ | |
1106 | "FROM labels, article_labels "+ | |
1107 | "WHERE labels.id = label_id AND article_labels.id = ?", [id]); | |
1108 | ||
1109 | var tmp = new Array(); | |
1110 | ||
1111 | while (rs.isValidRow()) { | |
1112 | var e = new Array(); | |
1113 | ||
1114 | e[0] = rs.field(0); | |
1115 | e[1] = rs.field(1); | |
1116 | e[2] = rs.field(2); | |
1117 | e[3] = rs.field(3); | |
1118 | ||
1119 | tmp.push(e); | |
1120 | ||
1121 | rs.next(); | |
1122 | } | |
1123 | ||
1124 | return tmp; | |
1125 | ||
1126 | } catch (e) { | |
1127 | exception_error("get_local_article_labels", e); | |
1128 | } | |
1129 | } | |
1130 | ||
c2726c96 AD |
1131 | function label_local_add_article(id, label_id) { |
1132 | try { | |
1133 | debug("label_local_add_article " + id + " => " + label_id); | |
1134 | ||
1135 | var rs = db.execute("SELECT COUNT(id) FROM article_labels WHERE "+ | |
1136 | "id = ? AND label_id = ?", [id, label_id]); | |
1137 | var check = rs.field(0); | |
1138 | ||
1139 | if (rs.isValidRow()) { | |
1140 | var check = rs.field(0); | |
1141 | } | |
1142 | rs.close(); | |
1143 | ||
1144 | if (check == 0) { | |
1145 | db.execute("INSERT INTO article_labels (id, label_id) VALUES "+ | |
1146 | "(?,?)", [id, label_id]); | |
1147 | } | |
1148 | ||
1149 | } catch (e) { | |
1150 | exception_error("label_local_add_article", e); | |
1151 | } | |
1152 | } | |
88a66534 AD |
1153 | |
1154 | function get_local_feed_title(id) { | |
1155 | try { | |
1156 | ||
1157 | var feed_title = "Unknown feed: " + id; | |
1158 | ||
1159 | if (id > 0) { | |
1160 | var rs = db.execute("SELECT title FROM feeds WHERE id = ?", [id]); | |
1161 | ||
1162 | if (rs.isValidRow()) { | |
1163 | feed_title = rs.field(0); | |
1164 | } | |
1165 | ||
1166 | rs.close(); | |
1167 | } else if (id == -1) { | |
1168 | feed_title = __("Starred articles"); | |
1169 | } else if (id == -4) { | |
1170 | feed_title = __("All articles"); | |
1171 | } else if (id < -10) { | |
1172 | ||
1173 | var label_id = -11 - id; | |
1174 | ||
1175 | var rs = db.execute("SELECT caption FROM labels WHERE id = ?", [label_id]); | |
1176 | ||
1177 | if (rs.isValidRow()) { | |
1178 | feed_title = rs.field(0); | |
1179 | } | |
1180 | ||
1181 | rs.close(); | |
1182 | } | |
1183 | ||
1184 | return feed_title; | |
1185 | ||
1186 | } catch (e) { | |
1187 | exception_error("get_local_feed_title", e); | |
1188 | } | |
1189 | } | |
6da82466 AD |
1190 | |
1191 | function format_article_labels(labels, id) { | |
1192 | try { | |
1193 | ||
1194 | var labels_str = ""; | |
1195 | ||
1196 | if (!labels) return ""; | |
1197 | ||
1198 | for (var i = 0; i < labels.length; i++) { | |
1199 | var l = labels[i]; | |
1200 | ||
1201 | labels_str += "<span class='hlLabelRef' "+ | |
1202 | "style='color : "+l[2]+"; background-color : "+l[3]+"'>"+l[1]+"</span>"; | |
1203 | } | |
1204 | ||
1205 | return labels_str; | |
1206 | ||
1207 | } catch (e) { | |
1208 | exception_error("format_article_labels", e); | |
1209 | } | |
1210 | } | |
1211 |