]>
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 selectionToggleUnread(cdm_mode
) {
212 if (!xmlhttp_ready(xmlhttp_rpc
)) {
220 rows
= cdmGetSelectedArticles();
222 rows
= getSelectedTableRowIds("headlinesList", "RROW", "RCHK");
225 for (i
= 0; i
< rows
.length
; i
++) {
226 var row
= document
.getElementById("RROW-" + rows
[i
]);
228 var nc
= row
.className
;
229 nc
= nc
.replace("Unread", "");
230 nc
= nc
.replace("Selected", "");
232 if (row
.className
.match("Unread")) {
233 row
.className
= nc
+ "Selected";
235 row
.className
= nc
+ "UnreadSelected";
240 if (rows
.length
> 0) {
242 var query
= "backend.php?op=rpc&subop=catchupSelected&ids=" +
243 param_escape(rows
.toString()) + "&cmode=2";
245 xmlhttp_rpc
.open("GET", query
, true);
246 xmlhttp_rpc
.onreadystatechange
=all_counters_callback
;
247 xmlhttp_rpc
.send(null);
252 exception_error("selectionToggleUnread", e
);
256 function selectionToggleMarked(cdm_mode
) {
258 if (!xmlhttp_ready(xmlhttp_rpc
)) {
266 rows
= cdmGetSelectedArticles();
268 rows
= getSelectedTableRowIds("headlinesList", "RROW", "RCHK");
271 for (i
= 0; i
< rows
.length
; i
++) {
272 var row
= document
.getElementById("RROW-" + rows
[i
]);
273 var mark_img
= document
.getElementById("FMARKPIC-" + rows
[i
]);
275 if (row
&& mark_img
) {
277 if (mark_img
.alt
== "Set mark") {
278 mark_img
.src
= "images/mark_set.png";
279 mark_img
.alt
= "Reset mark";
280 mark_img
.setAttribute('onclick',
281 'javascript:toggleMark('+rows
[i
]+', false)');
284 mark_img
.src
= "images/mark_unset.png";
285 mark_img
.alt
= "Set mark";
286 mark_img
.setAttribute('onclick',
287 'javascript:toggleMark('+rows
[i
]+', true)');
292 if (rows
.length
> 0) {
294 var query
= "backend.php?op=rpc&subop=markSelected&ids=" +
295 param_escape(rows
.toString()) + "&cmode=2";
297 xmlhttp_rpc
.open("GET", query
, true);
298 xmlhttp_rpc
.onreadystatechange
=all_counters_callback
;
299 xmlhttp_rpc
.send(null);
304 exception_error("selectionToggleMarked", e
);
308 function cdmGetSelectedArticles() {
309 var sel_articles
= new Array();
310 var container
= document
.getElementById("headlinesContainer");
312 for (i
= 0; i
< container
.childNodes
.length
; i
++) {
313 var child
= container
.childNodes
[i
];
315 if (child
.id
.match("RROW-") && child
.className
.match("Selected")) {
316 var c_id
= child
.id
.replace("RROW-", "");
317 sel_articles
.push(c_id
);
324 // mode = all,none,unread
325 function cdmSelectArticles(mode
) {
326 var container
= document
.getElementById("headlinesContainer");
328 for (i
= 0; i
< container
.childNodes
.length
; i
++) {
329 var child
= container
.childNodes
[i
];
331 if (child
.id
.match("RROW-")) {
332 var aid
= child
.id
.replace("RROW-", "");
334 var cb
= document
.getElementById("RCHK-" + aid
);
337 if (!child
.className
.match("Selected")) {
338 child
.className
= child
.className
+ "Selected";
341 } else if (mode
== "unread") {
342 if (child
.className
.match("Unread") && !child
.className
.match("Selected")) {
343 child
.className
= child
.className
+ "Selected";
347 child
.className
= child
.className
.replace("Selected", "");
354 function catchupPage() {
355 selectTableRowsByIdPrefix('headlinesList', 'RROW-', 'RCHK-', true, 'Unread', true);
356 selectionToggleUnread();
357 selectTableRowsByIdPrefix('headlinesList', 'RROW-', 'RCHK-', false);
362 if (arguments
.callee
.done
) return;
363 arguments
.callee
.done
= true;
365 if (parent
.frames
["feeds-frame"]) {
366 document
.onkeydown
= hotkey_handler
;
369 var hw
= document
.getElementById("headlinesList").scrollHeight
;
370 var pw
= parent
.document
.getElementById("headlines").scrollHeight
;
373 var bt
= document
.getElementById("headlineActionsBottom");
374 bt
.className
= "headlinesSubToolbar";