]>
git.wh0rd.org - tt-rss.git/blob - viewfeed.js
1 var active_post_id
= false;
3 var xmlhttp_rpc
= false;
6 /*@if (@_jscript_version >= 5)
7 // JScript gives us Conditional compilation, we can cope with old IE versions.
8 // and security blocked creation of the objects.
10 xmlhttp_rpc = new ActiveXObject("Msxml2.XMLHTTP");
13 xmlhttp_rpc = new ActiveXObject("Microsoft.XMLHTTP");
20 if (!xmlhttp_rpc
&& typeof XMLHttpRequest
!='undefined') {
21 xmlhttp_rpc
= new XMLHttpRequest();
24 function view(id
, feed_id
) {
26 parent
.debug("loading article: " + id
+ "/" + feed_id
);
28 var f_document
= parent
.frames
["feeds-frame"].document
;
29 var h_document
= document
;
30 var m_document
= parent
.document
;
34 var crow
= h_document
.getElementById("RROW-" + id
);
36 crow
.className
= crow
.className
.replace("Unread", "");
38 cleanSelected("headlinesList");
40 var upd_img_pic
= h_document
.getElementById("FUPDPIC-" + id
);
43 upd_img_pic
.src
= "images/blank_icon.gif";
47 setActiveFeedId(feed_id
);
49 var content
= m_document
.getElementById("content-frame");
51 content
.src
= "backend.php?op=view&id=" + param_escape(id
) +
52 "&feed=" + param_escape(feed_id
);
54 selectTableRowsByIdPrefix('headlinesList', 'RROW-', 'RCHK-', false);
55 markHeadline(active_post_id
);
59 function toggleMark(id
) {
61 var f_document
= parent
.frames
["feeds-frame"].document
;
63 if (!xmlhttp_ready(xmlhttp_rpc
)) {
68 var query
= "backend.php?op=rpc&id=" + id
+ "&subop=mark";
70 var mark_img
= document
.getElementById("FMARKPIC-" + id
);
71 var vfeedu
= f_document
.getElementById("FEEDU--1");
72 var crow
= document
.getElementById("RROW-" + id
);
74 if (mark_img
.alt
!= "Reset mark") {
75 mark_img
.src
= "images/mark_set.png";
76 mark_img
.alt
= "Reset mark";
77 mark_img
.setAttribute('onclick', 'javascript:toggleMark('+id
+')');
78 query
= query
+ "&mark=1";
80 if (vfeedu
&& crow
.className
.match("Unread")) {
81 vfeedu
.innerHTML
= (+vfeedu
.innerHTML
) + 1;
85 mark_img
.src
= "images/mark_unset.png";
86 mark_img
.alt
= "Set mark";
87 mark_img
.setAttribute('onclick', 'javascript:toggleMark('+id
+')');
88 query
= query
+ "&mark=0";
90 if (vfeedu
&& crow
.className
.match("Unread")) {
91 vfeedu
.innerHTML
= (+vfeedu
.innerHTML
) - 1;
96 var vfeedctr
= f_document
.getElementById("FEEDCTR--1");
97 var vfeedr
= f_document
.getElementById("FEEDR--1");
99 if (vfeedu
&& vfeedctr
) {
100 if ((+vfeedu
.innerHTML
) > 0) {
101 if (crow
.className
.match("Unread") && !vfeedr
.className
.match("Unread")) {
102 vfeedr
.className
= vfeedr
.className
+ "Unread";
103 vfeedctr
.className
= "odd";
106 vfeedctr
.className
= "invisible";
107 vfeedr
.className
= vfeedr
.className
.replace("Unread", "");
111 xmlhttp_rpc
.open("GET", query
, true);
112 xmlhttp_rpc
.onreadystatechange
=rpc_pnotify_callback
;
113 xmlhttp_rpc
.send(null);
117 function moveToPost(mode
) {
119 // check for combined mode
120 if (!document
.getElementById("headlinesList"))
123 var rows
= getVisibleHeadlineIds();
128 if (active_post_id
== false) {
129 next_id
= getFirstVisibleHeadlineId();
130 prev_id
= getLastVisibleHeadlineId();
132 for (var i
= 0; i
< rows
.length
; i
++) {
133 if (rows
[i
] == active_post_id
) {
140 if (mode
== "next") {
141 if (next_id
!= undefined) {
142 view(next_id
, getActiveFeedId());
146 if (mode
== "prev") {
147 if ( prev_id
!= undefined) {
148 view(prev_id
, getActiveFeedId());
153 function viewfeed(id
) {
154 var f
= parent
.frames
["feeds-frame"];
158 function localHotkeyHandler(keycode
) {
160 if (keycode
== 78 || keycode
== 40) { // n, down
161 return moveToPost('next');
164 if (keycode
== 80 || keycode
== 38) { // p, up
165 return moveToPost('prev');
168 if (keycode
== 65) { // a
169 return parent
.toggleDispRead();
172 if (keycode
== 85) { // u
173 if (parent
.getActiveFeedId()) {
174 return parent
.viewfeed(parent
.getActiveFeedId(), 0, "ForceUpdate");
178 if (keycode
== 82) { // r
179 return parent
.scheduleFeedUpdate(true);
182 var f_doc
= parent
.frames
["feeds-frame"].document
;
183 var feedlist
= f_doc
.getElementById('feedList');
185 if (keycode
== 74) { // j
186 var feed
= getActiveFeedId();
187 var new_feed
= getRelativeFeedId(feedlist
, feed
, 'prev');
188 if (new_feed
) viewfeed(new_feed
, 0, '');
191 if (keycode
== 75) { // k
192 var feed
= getActiveFeedId();
193 var new_feed
= getRelativeFeedId(feedlist
, feed
, 'next');
194 if (new_feed
) viewfeed(new_feed
, 0, '');
198 // if (keycode == 85) {
199 // return viewfeed(active_feed_id, active_offset, "ForceUpdate");
202 if (keycode
== 83) { // s
203 selectionToggleMarked();
206 // alert("KC: " + keycode);
210 function toggleUnread(id
, cmode
) {
212 if (!xmlhttp_ready(xmlhttp_rpc
)) {
217 var row
= document
.getElementById("RROW-" + id
);
219 var nc
= row
.className
;
220 nc
= nc
.replace("Unread", "");
221 nc
= nc
.replace("Selected", "");
223 if (row
.className
.match("Unread")) {
226 row
.className
= nc
+ "Unread";
229 if (!cmode
) cmode
= 2;
231 var query
= "backend.php?op=rpc&subop=catchupSelected&ids=" +
232 param_escape(id
) + "&cmode=" + param_escape(cmode
);
234 xmlhttp_rpc
.open("GET", query
, true);
235 xmlhttp_rpc
.onreadystatechange
=all_counters_callback
;
236 xmlhttp_rpc
.send(null);
242 exception_error("toggleUnread", e
);
246 function selectionToggleUnread(cdm_mode
) {
248 if (!xmlhttp_ready(xmlhttp_rpc
)) {
256 rows
= cdmGetSelectedArticles();
258 rows
= getSelectedTableRowIds("headlinesList", "RROW", "RCHK");
261 for (i
= 0; i
< rows
.length
; i
++) {
262 var row
= document
.getElementById("RROW-" + rows
[i
]);
264 var nc
= row
.className
;
265 nc
= nc
.replace("Unread", "");
266 nc
= nc
.replace("Selected", "");
268 if (row
.className
.match("Unread")) {
269 row
.className
= nc
+ "Selected";
271 row
.className
= nc
+ "UnreadSelected";
276 if (rows
.length
> 0) {
278 var query
= "backend.php?op=rpc&subop=catchupSelected&ids=" +
279 param_escape(rows
.toString()) + "&cmode=2";
281 xmlhttp_rpc
.open("GET", query
, true);
282 xmlhttp_rpc
.onreadystatechange
=all_counters_callback
;
283 xmlhttp_rpc
.send(null);
288 exception_error("selectionToggleUnread", e
);
292 function selectionToggleMarked(cdm_mode
) {
294 if (!xmlhttp_ready(xmlhttp_rpc
)) {
302 rows
= cdmGetSelectedArticles();
304 rows
= getSelectedTableRowIds("headlinesList", "RROW", "RCHK");
307 for (i
= 0; i
< rows
.length
; i
++) {
308 var row
= document
.getElementById("RROW-" + rows
[i
]);
309 var mark_img
= document
.getElementById("FMARKPIC-" + rows
[i
]);
311 if (row
&& mark_img
) {
313 if (mark_img
.alt
== "Set mark") {
314 mark_img
.src
= "images/mark_set.png";
315 mark_img
.alt
= "Reset mark";
316 mark_img
.setAttribute('onclick',
317 'javascript:toggleMark('+rows
[i
]+', false)');
320 mark_img
.src
= "images/mark_unset.png";
321 mark_img
.alt
= "Set mark";
322 mark_img
.setAttribute('onclick',
323 'javascript:toggleMark('+rows
[i
]+', true)');
328 if (rows
.length
> 0) {
330 var query
= "backend.php?op=rpc&subop=markSelected&ids=" +
331 param_escape(rows
.toString()) + "&cmode=2";
333 xmlhttp_rpc
.open("GET", query
, true);
334 xmlhttp_rpc
.onreadystatechange
=all_counters_callback
;
335 xmlhttp_rpc
.send(null);
340 exception_error("selectionToggleMarked", e
);
344 function cdmGetSelectedArticles() {
345 var sel_articles
= new Array();
346 var container
= document
.getElementById("headlinesContainer");
348 for (i
= 0; i
< container
.childNodes
.length
; i
++) {
349 var child
= container
.childNodes
[i
];
351 if (child
.id
.match("RROW-") && child
.className
.match("Selected")) {
352 var c_id
= child
.id
.replace("RROW-", "");
353 sel_articles
.push(c_id
);
360 // mode = all,none,unread
361 function cdmSelectArticles(mode
) {
362 var container
= document
.getElementById("headlinesContainer");
364 for (i
= 0; i
< container
.childNodes
.length
; i
++) {
365 var child
= container
.childNodes
[i
];
367 if (child
.id
.match("RROW-")) {
368 var aid
= child
.id
.replace("RROW-", "");
370 var cb
= document
.getElementById("RCHK-" + aid
);
373 if (!child
.className
.match("Selected")) {
374 child
.className
= child
.className
+ "Selected";
377 } else if (mode
== "unread") {
378 if (child
.className
.match("Unread") && !child
.className
.match("Selected")) {
379 child
.className
= child
.className
+ "Selected";
383 child
.className
= child
.className
.replace("Selected", "");
390 function catchupPage() {
391 selectTableRowsByIdPrefix('headlinesList', 'RROW-', 'RCHK-', true, 'Unread', true);
392 selectionToggleUnread();
393 selectTableRowsByIdPrefix('headlinesList', 'RROW-', 'RCHK-', false);
398 if (arguments
.callee
.done
) return;
399 arguments
.callee
.done
= true;
401 if (parent
.frames
["feeds-frame"]) {
402 document
.onkeydown
= hotkey_handler
;
405 var hw
= document
.getElementById("headlinesList").scrollHeight
;
406 var pw
= parent
.document
.getElementById("headlines").scrollHeight
;
409 var bt
= document
.getElementById("headlineActionsBottom");
410 bt
.className
= "headlinesSubToolbar";