]> git.wh0rd.org - tt-rss.git/blame - prefs.js
pref-users: shorten new user input field
[tt-rss.git] / prefs.js
CommitLineData
007bda35
AD
1var xmlhttp = false;
2
91ff844a 3var active_feed_cat = false;
48f0adb0 4var active_label = false;
f5a50b25 5var active_tab = false;
c6232e43 6var feed_to_expand = false;
f5a50b25 7
a58069db 8var xmlhttp = Ajax.getTransport();
007bda35 9
a7565293
AD
10var init_params = new Array();
11
e513a74a 12var caller_subop = false;
7a09510c 13var sanity_check_done = false;
746dcf42 14var hotkey_prefix = false;
7a09510c 15
288487e4
AD
16function infobox_callback() {
17 if (xmlhttp.readyState == 4) {
18 infobox_callback2(xmlhttp);
19 }
20}
21
22function infobox_submit_callback() {
23 if (xmlhttp.readyState == 4) {
24 infobox_submit_callback2(xmlhttp);
25 }
26}
27
28
e4f4b46f 29function replace_pubkey_callback() {
c6232e43
AD
30 if (xmlhttp.readyState == 4) {
31 try {
e4f4b46f
AD
32 var link = document.getElementById("pubGenAddress");
33
34 if (xmlhttp.responseXML) {
35
945c243e
AD
36 var new_link = xmlhttp.responseXML.getElementsByTagName("link")[0];
37
38 if (new_link) {
39 link.href = new_link.firstChild.nodeValue;
e635d56a 40 //link.innerHTML = new_link.firstChild.nodeValue;
945c243e 41
3076c7b8
AD
42 new Effect.Highlight(link);
43
e635d56a 44 notify_info("Published feed URL changed.");
945c243e 45 } else {
e635d56a 46 notify_error("Could not change feed URL.");
945c243e 47 }
e4f4b46f
AD
48
49 } else {
e635d56a 50 notify_error("Could not change feed URL.");
e4f4b46f 51 }
c6232e43 52 } catch (e) {
e4f4b46f 53 exception_error("replace_pubkey_callback", e);
c6232e43
AD
54 }
55 }
945c243e 56}
c6232e43 57
e4f4b46f 58function expand_feed_callback() {
bc0ed820
AD
59 if (xmlhttp.readyState == 4) {
60 try {
e4f4b46f 61 var container = document.getElementById("BRDET-" + feed_to_expand);
bc0ed820 62 container.innerHTML=xmlhttp.responseText;
34a01a20 63// container.style.display = "block";
051c4d56 64 Effect.Appear(container, {duration : 0.5});
bc0ed820 65 } catch (e) {
e4f4b46f 66 exception_error("expand_feed_callback", e);
bc0ed820
AD
67 }
68 }
69}
70
007bda35 71function feedlist_callback() {
007bda35 72 if (xmlhttp.readyState == 4) {
47c6c988
AD
73 try {
74 var container = document.getElementById('prefContent');
75 container.innerHTML=xmlhttp.responseText;
a7f22b70 76 selectTab("feedConfig", true);
e513a74a
AD
77
78 if (caller_subop) {
79 var tuple = caller_subop.split(":");
80 if (tuple[0] == 'editFeed') {
81 window.setTimeout('editFeed('+tuple[1]+')', 100);
82 }
83
84 caller_subop = false;
85 }
23943c9b
AD
86 if (typeof correctPNG != 'undefined') {
87 correctPNG();
88 }
7f74a9da 89 notify("");
08827aaf
AD
90 remove_splash();
91
47c6c988
AD
92 } catch (e) {
93 exception_error("feedlist_callback", e);
961513a3 94 }
007bda35
AD
95 }
96}
97
442d77f1
AD
98/* stub for subscription dialog */
99
288487e4 100function dlg_frefresh_callback(transport) {
442d77f1 101
288487e4
AD
102 try {
103 var container = document.getElementById('prefContent');
104 container.innerHTML=transport.responseText;
105 selectTab("feedConfig", true);
442d77f1 106
288487e4
AD
107 if (caller_subop) {
108 var tuple = caller_subop.split(":");
109 if (tuple[0] == 'editFeed') {
110 window.setTimeout('editFeed('+tuple[1]+')', 100);
111 }
442d77f1 112
288487e4 113 caller_subop = false;
442d77f1 114 }
288487e4
AD
115 if (typeof correctPNG != 'undefined') {
116 correctPNG();
117 }
118 notify("");
119 } catch (e) {
120 exception_error("feedlist_callback", e);
442d77f1 121 }
288487e4 122
442d77f1
AD
123}
124
a0d53889 125function filterlist_callback() {
f5a50b25 126 var container = document.getElementById('prefContent');
a0d53889
AD
127 if (xmlhttp.readyState == 4) {
128 container.innerHTML=xmlhttp.responseText;
23943c9b
AD
129 if (typeof correctPNG != 'undefined') {
130 correctPNG();
131 }
7f74a9da 132 notify("");
08827aaf 133 remove_splash();
a0d53889
AD
134 }
135}
136
48f0adb0 137function labellist_callback() {
ceb30ba4
AD
138
139 try {
140
141 var container = document.getElementById('prefContent');
142 if (xmlhttp.readyState == 4) {
143 closeInfoBox();
144 container.innerHTML=xmlhttp.responseText;
145
146 if (document.getElementById("prefLabelList")) {
147 var elems = document.getElementById("prefLabelList").getElementsByTagName("SPAN");
148
149 for (var i = 0; i < elems.length; i++) {
150 if (elems[i].id && elems[i].id.match("LILT-")) {
151
152 var id = elems[i].id.replace("LILT-", "");
153 new Ajax.InPlaceEditor(elems[i],
154 'backend.php?op=pref-labels&subop=save&id=' + id);
155 }
156 }
48f0adb0 157 }
ceb30ba4
AD
158
159 if (typeof correctPNG != 'undefined') {
160 correctPNG();
48f0adb0 161 }
ceb30ba4
AD
162 notify("");
163 remove_splash();
48f0adb0 164 }
ceb30ba4
AD
165
166 } catch (e) {
167 exception_error("labellist_callback", e);
48f0adb0
AD
168 }
169}
4255b24c 170
c6232e43
AD
171function feed_browser_callback() {
172 var container = document.getElementById('prefContent');
173 if (xmlhttp.readyState == 4) {
174 container.innerHTML=xmlhttp.responseText;
7f74a9da 175 notify("");
08827aaf 176 remove_splash();
c6232e43
AD
177 }
178}
179
e6cb77a0
AD
180function userlist_callback() {
181 var container = document.getElementById('prefContent');
182 if (xmlhttp.readyState == 4) {
183 container.innerHTML=xmlhttp.responseText;
7f74a9da 184 notify("");
08827aaf 185 remove_splash();
e6cb77a0
AD
186 }
187}
188
4255b24c
AD
189function prefslist_callback() {
190 var container = document.getElementById('prefContent');
191 if (xmlhttp.readyState == 4) {
4255b24c 192 container.innerHTML=xmlhttp.responseText;
7f74a9da 193 notify("");
08827aaf 194 remove_splash();
4255b24c
AD
195 }
196}
197
b1895692
AD
198function gethelp_callback() {
199 var container = document.getElementById('prefHelpBox');
200 if (xmlhttp.readyState == 4) {
201
202 container.innerHTML = xmlhttp.responseText;
203 container.style.display = "block";
204
205 }
206}
4255b24c 207
0e091d38 208function notify_callback() {
0e091d38 209 if (xmlhttp.readyState == 4) {
42c32916
AD
210 notify_info(xmlhttp.responseText);
211 }
0e091d38
AD
212}
213
b652c1b7
AD
214function prefs_reset_callback() {
215 if (xmlhttp.readyState == 4) {
216 notify_info(xmlhttp.responseText);
217 selectTab();
218 }
219}
220
d95bd220
AD
221
222function changepass_callback() {
42395d28
AD
223 try {
224 if (xmlhttp.readyState == 4) {
225
226 if (xmlhttp.responseText.indexOf("ERROR: ") == 0) {
227 notify_error(xmlhttp.responseText.replace("ERROR: ", ""));
228 } else {
229 notify_info(xmlhttp.responseText);
230 var warn = document.getElementById("default_pass_warning");
231 if (warn) warn.style.display = "none";
232 }
233
234 document.forms['change_pass_form'].reset();
d95bd220 235
42395d28
AD
236 }
237 } catch (e) {
238 exception_error("changepass_callback", e);
239 }
d95bd220
AD
240}
241
11f083e7
AD
242function infobox_feed_cat_callback() {
243 if (xmlhttp.readyState == 4) {
244 try {
245
246 infobox_callback();
247
248 if (document.getElementById("prefFeedCatList")) {
249 var elems = document.getElementById("prefFeedCatList").getElementsByTagName("SPAN");
250
251 for (var i = 0; i < elems.length; i++) {
252 if (elems[i].id && elems[i].id.match("FCATT-")) {
253 var cat_id = elems[i].id.replace("FCATT-", "");
254
255 new Ajax.InPlaceEditor(elems[i],
256 'backend.php?op=pref-feeds&subop=editCats&action=save&cid=' + cat_id);
257 }
258 }
259 }
260
261 } catch (e) {
262 exception_error("infobox_feed_cat_callback", e);
263 }
264 }
265}
266
b83c7545 267function updateFeedList(sort_key) {
007bda35 268
c0e5a40e 269 if (!xmlhttp_ready(xmlhttp)) {
508a81e1
AD
270 printLockingError();
271 return
272 }
273
f932bc9f
AD
274 var feed_search = document.getElementById("feed_search");
275 var search = "";
276 if (feed_search) { search = feed_search.value; }
277
400b60d8
AD
278 var slat = document.getElementById("show_last_article_times");
279
280 var slat_checked = false;
281 if (slat) {
282 slat_checked = slat.checked;
283 }
284
b83c7545 285 xmlhttp.open("GET", "backend.php?op=pref-feeds" +
f932bc9f 286 "&sort=" + param_escape(sort_key) +
400b60d8 287 "&slat=" + param_escape(slat_checked) +
f932bc9f 288 "&search=" + param_escape(search), true);
007bda35
AD
289 xmlhttp.onreadystatechange=feedlist_callback;
290 xmlhttp.send(null);
291
292}
293
79ec0f2f 294function updateUsersList(sort_key) {
e6cb77a0
AD
295
296 if (!xmlhttp_ready(xmlhttp)) {
297 printLockingError();
298 return
299 }
300
a5bd7bf0
AD
301 var user_search = document.getElementById("user_search");
302 var search = "";
303 if (user_search) { search = user_search.value; }
304
79ec0f2f 305 xmlhttp.open("GET", "backend.php?op=pref-users&sort="
a5bd7bf0
AD
306 + param_escape(sort_key) +
307 "&search=" + param_escape(search), true);
e6cb77a0
AD
308 xmlhttp.onreadystatechange=userlist_callback;
309 xmlhttp.send(null);
310
311}
312
48f0adb0
AD
313function addLabel() {
314
ceb30ba4
AD
315 try {
316
48f0adb0
AD
317 if (!xmlhttp_ready(xmlhttp)) {
318 printLockingError();
319 return
320 }
321
ceb30ba4 322 var caption = prompt(__("Please enter label caption:"), "");
48f0adb0 323
ceb30ba4 324 if (caption == "") {
89cb787e 325 alert(__("Can't create label: missing caption."));
f156fd00 326 return false;
de435974
AD
327 }
328
6068d33b
AD
329 // we can be called from some other tab
330 active_tab = "labelConfig";
331
ceb30ba4
AD
332 var query = "caption=" + param_escape(caption);
333
f156fd00
AD
334 xmlhttp.open("GET", "backend.php?op=pref-labels&subop=add&" + query, true);
335 xmlhttp.onreadystatechange=infobox_submit_callback;
336 xmlhttp.send(null);
ceb30ba4
AD
337
338 } catch (e) {
339 exception_error("addLabel", e);
340 }
de435974 341}
48f0adb0 342
71ad3959
AD
343function addFeed() {
344
c0e5a40e 345 if (!xmlhttp_ready(xmlhttp)) {
508a81e1
AD
346 printLockingError();
347 return
348 }
349
331900c6
AD
350 var link = document.getElementById("fadd_link");
351
83fe4d6d 352 if (link.value.length == 0) {
f3977cf5 353 alert(__("Error: No feed URL given."));
605f7d46 354 } else if (!isValidURL(link.value)) {
f3977cf5 355 alert(__("Error: Invalid feed URL."));
331900c6 356 } else {
42c32916 357 notify_progress("Adding feed...");
331900c6 358
e513a74a 359 xmlhttp.open("GET", "backend.php?op=pref-feeds&subop=add&from=tt-rss&feed_url=" +
331900c6
AD
360 param_escape(link.value), true);
361 xmlhttp.onreadystatechange=feedlist_callback;
362 xmlhttp.send(null);
363
364 link.value = "";
365
366 }
367
368}
369
91ff844a
AD
370function addFeedCat() {
371
372 if (!xmlhttp_ready(xmlhttp)) {
373 printLockingError();
374 return
375 }
376
377 var cat = document.getElementById("fadd_cat");
378
379 if (cat.value.length == 0) {
f3977cf5 380 alert(__("Can't add category: no name specified."));
91ff844a 381 } else {
42c32916 382 notify_progress("Adding feed category...");
91ff844a 383
9c483746 384 xmlhttp.open("GET", "backend.php?op=pref-feeds&subop=editCats&action=add&cat=" +
91ff844a 385 param_escape(cat.value), true);
9c483746 386 xmlhttp.onreadystatechange=infobox_callback;
91ff844a
AD
387 xmlhttp.send(null);
388
389 link.value = "";
390
391 }
392
393}
e6cb77a0
AD
394function addUser() {
395
396 if (!xmlhttp_ready(xmlhttp)) {
397 printLockingError();
398 return
399 }
400
401 var sqlexp = document.getElementById("uadd_box");
402
403 if (sqlexp.value.length == 0) {
89cb787e 404 alert(__("Can't add user: no login specified."));
e6cb77a0 405 } else {
42c32916 406 notify_progress("Adding user...");
e6cb77a0
AD
407
408 xmlhttp.open("GET", "backend.php?op=pref-users&subop=add&login=" +
409 param_escape(sqlexp.value), true);
410
411 xmlhttp.onreadystatechange=userlist_callback;
412 xmlhttp.send(null);
413
414 sqlexp.value = "";
415 }
416
417}
418
48f0adb0
AD
419function editLabel(id) {
420
421 if (!xmlhttp_ready(xmlhttp)) {
422 printLockingError();
423 return
424 }
425
6068d33b
AD
426 disableHotkeys();
427
9e31e1b9
AD
428 notify_progress("Loading, please wait...");
429
38bb1ceb 430// document.getElementById("label_create_btn").disabled = true;
f156fd00 431
48f0adb0
AD
432 active_label = id;
433
a4dbc524
AD
434 selectTableRowsByIdPrefix('prefLabelList', 'LILRR-', 'LICHK-', false);
435 selectTableRowById('LILRR-'+id, 'LICHK-'+id, true);
436
48f0adb0
AD
437 xmlhttp.open("GET", "backend.php?op=pref-labels&subop=edit&id=" +
438 param_escape(id), true);
a4dbc524 439 xmlhttp.onreadystatechange=infobox_callback;
48f0adb0
AD
440 xmlhttp.send(null);
441
442}
443
e6cb77a0
AD
444function editUser(id) {
445
446 if (!xmlhttp_ready(xmlhttp)) {
447 printLockingError();
448 return
449 }
450
6068d33b
AD
451 disableHotkeys();
452
9e31e1b9
AD
453 notify_progress("Loading, please wait...");
454
3c5783b7
AD
455 selectTableRowsByIdPrefix('prefUserList', 'UMRR-', 'UMCHK-', false);
456 selectTableRowById('UMRR-'+id, 'UMCHK-'+id, true);
e6cb77a0
AD
457
458 xmlhttp.open("GET", "backend.php?op=pref-users&subop=edit&id=" +
459 param_escape(id), true);
3c5783b7 460 xmlhttp.onreadystatechange=infobox_callback;
e6cb77a0
AD
461 xmlhttp.send(null);
462
463}
464
a0d53889
AD
465function editFilter(id) {
466
467 if (!xmlhttp_ready(xmlhttp)) {
468 printLockingError();
469 return
470 }
471
6068d33b
AD
472 disableHotkeys();
473
9e31e1b9
AD
474 notify_progress("Loading, please wait...");
475
38bb1ceb 476// document.getElementById("create_filter_btn").disabled = true;
4220b0bd 477
07164479
AD
478 selectTableRowsByIdPrefix('prefFilterList', 'FILRR-', 'FICHK-', false);
479 selectTableRowById('FILRR-'+id, 'FICHK-'+id, true);
a0d53889 480
07164479
AD
481 xmlhttp.open("GET", "backend.php?op=pref-filters&subop=edit&id=" + param_escape(id), true);
482 xmlhttp.onreadystatechange=infobox_callback;
a0d53889 483 xmlhttp.send(null);
a0d53889
AD
484}
485
331900c6
AD
486function editFeed(feed) {
487
508a81e1
AD
488// notify("Editing feed...");
489
c0e5a40e 490 if (!xmlhttp_ready(xmlhttp)) {
508a81e1
AD
491 printLockingError();
492 return
493 }
331900c6 494
6068d33b
AD
495 disableHotkeys();
496
9e31e1b9
AD
497 notify_progress("Loading, please wait...");
498
38bb1ceb 499/* document.getElementById("subscribe_to_feed_btn").disabled = true;
a349077c
AD
500
501 try {
502 document.getElementById("top25_feeds_btn").disabled = true;
503 } catch (e) {
504 // this button is not always available, no-op if not found
38bb1ceb 505 } */
a349077c 506
673d54ca 507 // clean selection from all rows & select row being edited
0ea4fb50 508 selectTableRowsByIdPrefix('prefFeedList', 'FEEDR-', 'FRCHK-', false);
6c12c809 509 selectTableRowById('FEEDR-'+feed, 'FRCHK-'+feed, true);
0ea4fb50
AD
510
511 xmlhttp.open("GET", "backend.php?op=pref-feeds&subop=editfeed&id=" +
3c5783b7 512 param_escape(feed), true);
0ea4fb50
AD
513
514 xmlhttp.onreadystatechange=infobox_callback;
331900c6
AD
515 xmlhttp.send(null);
516
517}
518
91ff844a 519function editFeedCat(cat) {
48f0adb0 520
91ff844a
AD
521 if (!xmlhttp_ready(xmlhttp)) {
522 printLockingError();
523 return
48f0adb0
AD
524 }
525
6068d33b
AD
526 disableHotkeys();
527
9e31e1b9
AD
528 notify_progress("Loading, please wait...");
529
91ff844a 530 active_feed_cat = cat;
e6cb77a0 531
9c483746 532 xmlhttp.open("GET", "backend.php?op=pref-feeds&subop=editCats&action=edit&id=" +
91ff844a 533 param_escape(cat), true);
9c483746 534 xmlhttp.onreadystatechange=infobox_callback;
91ff844a 535 xmlhttp.send(null);
e6cb77a0 536
e6cb77a0
AD
537}
538
91ff844a
AD
539function getSelectedLabels() {
540 return getSelectedTableRowIds("prefLabelList", "LILRR");
541}
48f0adb0 542
91ff844a
AD
543function getSelectedUsers() {
544 return getSelectedTableRowIds("prefUserList", "UMRR");
a0d53889
AD
545}
546
83fe4d6d 547function getSelectedFeeds() {
91ff844a
AD
548 return getSelectedTableRowIds("prefFeedList", "FEEDR");
549}
331900c6 550
91ff844a
AD
551function getSelectedFilters() {
552 return getSelectedTableRowIds("prefFilterList", "FILRR");
553}
331900c6 554
91ff844a
AD
555function getSelectedFeedCats() {
556 return getSelectedTableRowIds("prefFeedCatList", "FCATR");
83fe4d6d
AD
557}
558
c0ae0fdb
AD
559function getSelectedFeedsFromBrowser() {
560
561 var list = document.getElementById("browseFeedList");
562 if (!list) list = document.getElementById("browseBigFeedList");
563
564 var selected = new Array();
565
566 for (i = 0; i < list.childNodes.length; i++) {
567 var child = list.childNodes[i];
568 if (child.id && child.id.match("FBROW-")) {
569 var id = child.id.replace("FBROW-", "");
570
571 var cb = document.getElementById("FBCHK-" + id);
572
573 if (cb.checked) {
574 selected.push(id);
575 }
576 }
577 }
578
579 return selected;
580}
581
48f0adb0
AD
582function removeSelectedLabels() {
583
584 if (!xmlhttp_ready(xmlhttp)) {
585 printLockingError();
586 return
587 }
588
589 var sel_rows = getSelectedLabels();
590
591 if (sel_rows.length > 0) {
592
f56e3080 593 var ok = confirm(__("Remove selected labels?"));
48f0adb0 594
69668465 595 if (ok) {
42c32916 596 notify_progress("Removing selected labels...");
69668465
AD
597
598 xmlhttp.open("GET", "backend.php?op=pref-labels&subop=remove&ids="+
599 param_escape(sel_rows.toString()), true);
600 xmlhttp.onreadystatechange=labellist_callback;
601 xmlhttp.send(null);
602 }
48f0adb0 603 } else {
89cb787e 604 alert(__("No labels are selected."));
48f0adb0 605 }
90ac84df
AD
606
607 return false;
48f0adb0
AD
608}
609
e6cb77a0
AD
610function removeSelectedUsers() {
611
612 if (!xmlhttp_ready(xmlhttp)) {
613 printLockingError();
614 return
615 }
616
617 var sel_rows = getSelectedUsers();
618
619 if (sel_rows.length > 0) {
620
f56e3080 621 var ok = confirm(__("Remove selected users?"));
e6cb77a0 622
69668465 623 if (ok) {
42c32916 624 notify_progress("Removing selected users...");
69668465
AD
625
626 xmlhttp.open("GET", "backend.php?op=pref-users&subop=remove&ids="+
627 param_escape(sel_rows.toString()), true);
628 xmlhttp.onreadystatechange=userlist_callback;
629 xmlhttp.send(null);
630 }
e6cb77a0
AD
631
632 } else {
89cb787e 633 alert(__("No users are selected."));
e6cb77a0 634 }
90ac84df
AD
635
636 return false;
e6cb77a0
AD
637}
638
48f0adb0
AD
639function removeSelectedFilters() {
640
641 if (!xmlhttp_ready(xmlhttp)) {
642 printLockingError();
643 return
644 }
645
646 var sel_rows = getSelectedFilters();
647
648 if (sel_rows.length > 0) {
649
f56e3080 650 var ok = confirm(__("Remove selected filters?"));
48f0adb0 651
69668465 652 if (ok) {
42c32916 653 notify_progress("Removing selected filters...");
69668465
AD
654
655 xmlhttp.open("GET", "backend.php?op=pref-filters&subop=remove&ids="+
656 param_escape(sel_rows.toString()), true);
657 xmlhttp.onreadystatechange=filterlist_callback;
658 xmlhttp.send(null);
659 }
48f0adb0 660 } else {
89cb787e 661 alert(__("No filters are selected."));
48f0adb0 662 }
90ac84df
AD
663
664 return false;
48f0adb0
AD
665}
666
667
83fe4d6d
AD
668function removeSelectedFeeds() {
669
c0e5a40e 670 if (!xmlhttp_ready(xmlhttp)) {
508a81e1
AD
671 printLockingError();
672 return
673 }
674
83fe4d6d
AD
675 var sel_rows = getSelectedFeeds();
676
331900c6
AD
677 if (sel_rows.length > 0) {
678
f56e3080 679 var ok = confirm(__("Unsubscribe from selected feeds?"));
331900c6 680
69668465
AD
681 if (ok) {
682
42c32916 683 notify_progress("Unsubscribing from selected feeds...");
69668465
AD
684
685 xmlhttp.open("GET", "backend.php?op=pref-feeds&subop=remove&ids="+
686 param_escape(sel_rows.toString()), true);
687 xmlhttp.onreadystatechange=feedlist_callback;
688 xmlhttp.send(null);
689 }
71ad3959 690
71ad3959 691 } else {
331900c6 692
89cb787e 693 alert(__("No feeds are selected."));
331900c6 694
71ad3959 695 }
90ac84df
AD
696
697 return false;
71ad3959 698}
007bda35 699
c4a36709
AD
700function clearSelectedFeeds() {
701
702 if (!xmlhttp_ready(xmlhttp)) {
703 printLockingError();
704 return
705 }
706
707 var sel_rows = getSelectedFeeds();
708
709 if (sel_rows.length > 1) {
710 alert(__("Please select only one feed."));
711 return;
712 }
713
714 if (sel_rows.length > 0) {
715
716 var ok = confirm(__("Erase all non-starred articles in selected feed?"));
717
718 if (ok) {
719 notify_progress("Clearing selected feed...");
720 clearFeedArticles(sel_rows[0]);
721 }
722
723 } else {
724
725 alert(__("No feeds are selected."));
726
727 }
728
729 return false;
730}
731
e88a65f4
AD
732function purgeSelectedFeeds() {
733
734 if (!xmlhttp_ready(xmlhttp)) {
735 printLockingError();
736 return
737 }
738
739 var sel_rows = getSelectedFeeds();
740
741 if (sel_rows.length > 0) {
742
743 var pr = prompt(__("How many days of articles to keep (0 - use default)?"), "0");
744
745 if (pr != undefined) {
746 notify_progress("Purging selected feed...");
747
748 var query = "backend.php?op=rpc&subop=purge&ids="+
749 param_escape(sel_rows.toString()) + "&days=" + pr;
750
751 debug(query);
752
753 new Ajax.Request(query, {
754 onComplete: function(transport) {
755 notify('');
756 } });
757 }
758
759 } else {
760
761 alert(__("No feeds are selected."));
762
763 }
764
765 return false;
766}
767
91ff844a
AD
768function removeSelectedFeedCats() {
769
770 if (!xmlhttp_ready(xmlhttp)) {
771 printLockingError();
772 return
773 }
774
775 var sel_rows = getSelectedFeedCats();
776
777 if (sel_rows.length > 0) {
778
f56e3080 779 var ok = confirm(__("Remove selected categories?"));
91ff844a 780
69668465 781 if (ok) {
42c32916 782 notify_progress("Removing selected categories...");
69668465 783
9c483746 784 xmlhttp.open("GET", "backend.php?op=pref-feeds&subop=editCats&action=remove&ids="+
69668465 785 param_escape(sel_rows.toString()), true);
9c483746 786 xmlhttp.onreadystatechange=infobox_callback;
69668465
AD
787 xmlhttp.send(null);
788 }
91ff844a
AD
789
790 } else {
791
89cb787e 792 alert(__("No categories are selected."));
91ff844a
AD
793
794 }
795
90ac84df 796 return false;
91ff844a
AD
797}
798
508a81e1
AD
799function feedEditCancel() {
800
c0e5a40e 801 if (!xmlhttp_ready(xmlhttp)) {
508a81e1
AD
802 printLockingError();
803 return
804 }
805
a349077c 806 try {
57f734c8 807 document.getElementById("subscribe_to_feed_btn").disabled = false;
a349077c
AD
808 document.getElementById("top25_feeds_btn").disabled = false;
809 } catch (e) {
810 // this button is not always available, no-op if not found
811 }
812
327a3bbe
AD
813 closeInfoBox();
814
673d54ca 815 selectPrefRows('feed', false); // cleanup feed selection
508a81e1 816
90ac84df 817 return false;
508a81e1
AD
818}
819
91ff844a
AD
820function feedCatEditCancel() {
821
822 if (!xmlhttp_ready(xmlhttp)) {
823 printLockingError();
824 return
825 }
826
827 active_feed_cat = false;
828
0ceded7a 829// notify("Operation cancelled.");
91ff844a 830
9c483746
AD
831 xmlhttp.open("GET", "backend.php?op=pref-feeds&subop=editCats", true);
832 xmlhttp.onreadystatechange=infobox_callback;
91ff844a
AD
833 xmlhttp.send(null);
834
90ac84df 835 return false;
91ff844a
AD
836}
837
603c27f8
AD
838function feedEditSave() {
839
47c6c988 840 try {
47c6c988
AD
841
842 if (!xmlhttp_ready(xmlhttp)) {
843 printLockingError();
844 return
845 }
ad815c71 846
14f69488 847 // FIXME: add parameter validation
e3c99f3b 848
14f69488 849 var query = Form.serialize("edit_feed_form");
b0da3a7b 850
42c32916 851 notify_progress("Saving feed...");
673d54ca 852
47c6c988
AD
853 xmlhttp.open("POST", "backend.php", true);
854 xmlhttp.onreadystatechange=feedlist_callback;
855 xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
14f69488
AD
856 xmlhttp.send(query);
857
59a543f0
AD
858 closeInfoBox();
859
c14b5566
AD
860 return false;
861
47c6c988
AD
862 } catch (e) {
863 exception_error("feedEditSave", e);
b0da3a7b 864 }
508a81e1
AD
865}
866
5ddadb4c
AD
867function feedCatEditSave() {
868
869 if (!xmlhttp_ready(xmlhttp)) {
870 printLockingError();
871 return
872 }
873
42c32916 874 notify_progress("Saving category...");
5ddadb4c 875
0666e120
AD
876 var query = Form.serialize("feed_cat_edit_form");
877
878 xmlhttp.open("GET", "backend.php?" + query, true);
9c483746 879 xmlhttp.onreadystatechange=infobox_callback;
5ddadb4c
AD
880 xmlhttp.send(null);
881
882 active_feed_cat = false;
883
90ac84df 884 return false;
5ddadb4c
AD
885}
886
48f0adb0
AD
887function labelEditCancel() {
888
889 if (!xmlhttp_ready(xmlhttp)) {
890 printLockingError();
891 return
892 }
893
57f734c8
AD
894 try {
895 document.getElementById("label_create_btn").disabled = false;
896 selectPrefRows('label', false); // cleanup feed selection
897 } catch (e) { }
f156fd00 898
48f0adb0
AD
899 active_label = false;
900
50bad812
AD
901 closeInfoBox();
902
90ac84df 903 return false;
48f0adb0
AD
904}
905
e6cb77a0
AD
906function userEditCancel() {
907
908 if (!xmlhttp_ready(xmlhttp)) {
909 printLockingError();
910 return
911 }
912
3c5783b7 913 selectPrefRows('user', false); // cleanup feed selection
3c5783b7 914 closeInfoBox();
90ac84df
AD
915
916 return false;
e6cb77a0 917}
48f0adb0 918
a0d53889
AD
919function filterEditCancel() {
920
921 if (!xmlhttp_ready(xmlhttp)) {
922 printLockingError();
923 return
924 }
4220b0bd 925
57f734c8
AD
926 try {
927 document.getElementById("create_filter_btn").disabled = false;
928 selectPrefRows('filter', false); // cleanup feed selection
929 } catch (e) { }
930
07164479 931 closeInfoBox();
90ac84df
AD
932
933 return false;
a0d53889
AD
934}
935
48f0adb0
AD
936function labelEditSave() {
937
938 var label = active_label;
939
940 if (!xmlhttp_ready(xmlhttp)) {
941 printLockingError();
942 return
943 }
944
9ee3ac59 945/* if (!is_opera()) {
48f0adb0 946
7c620da8
AD
947 var sql_exp = document.forms["label_edit_form"].sql_exp.value;
948 var description = document.forms["label_edit_form"].description.value;
949
950 if (sql_exp.length == 0) {
951 alert("SQL Expression cannot be blank.");
952 return false;
953 }
954
955 if (description.length == 0) {
956 alert("Caption field cannot be blank.");
957 return false;
958 }
9ee3ac59 959 } */
48f0adb0 960
50bad812
AD
961 closeInfoBox();
962
42c32916 963 notify_progress("Saving label...");
dbd9e2f1 964
48f0adb0
AD
965 active_label = false;
966
f3120e5a
AD
967 query = Form.serialize("label_edit_form");
968
50bad812 969 xmlhttp.open("GET", "backend.php?" + query, true);
48f0adb0
AD
970 xmlhttp.onreadystatechange=labellist_callback;
971 xmlhttp.send(null);
972
90ac84df 973 return false;
48f0adb0
AD
974}
975
e6cb77a0
AD
976function userEditSave() {
977
e6cb77a0
AD
978 if (!xmlhttp_ready(xmlhttp)) {
979 printLockingError();
980 return
981 }
982
3c5783b7 983 var login = document.forms["user_edit_form"].login.value;
e6cb77a0
AD
984
985 if (login.length == 0) {
89cb787e 986 alert(__("Login field cannot be blank."));
e6cb77a0
AD
987 return;
988 }
3c5783b7 989
42c32916 990 notify_progress("Saving user...");
4220b0bd
AD
991
992 closeInfoBox();
993
3c5783b7
AD
994 var query = Form.serialize("user_edit_form");
995
996 xmlhttp.open("GET", "backend.php?" + query, true);
dbd9e2f1 997 xmlhttp.onreadystatechange=userlist_callback;
e6cb77a0 998 xmlhttp.send(null);
90ac84df
AD
999
1000 return false;
e6cb77a0
AD
1001}
1002
1003
a0d53889
AD
1004function filterEditSave() {
1005
a0d53889
AD
1006 if (!xmlhttp_ready(xmlhttp)) {
1007 printLockingError();
1008 return
1009 }
1010
9ee3ac59 1011/* if (!is_opera()) {
7c620da8
AD
1012 var reg_exp = document.forms["filter_edit_form"].reg_exp.value;
1013
1014 if (reg_exp.length == 0) {
1015 alert("Filter expression field cannot be blank.");
1016 return;
1017 }
9ee3ac59 1018 } */
a0d53889 1019
42c32916 1020 notify_progress("Saving filter...");
a0d53889 1021
7e939457 1022 var query = Form.serialize("filter_edit_form");
dbd9e2f1 1023
07164479
AD
1024 closeInfoBox();
1025
4220b0bd
AD
1026 document.getElementById("create_filter_btn").disabled = false;
1027
7e939457 1028 xmlhttp.open("GET", "backend.php?" + query, true);
a0d53889 1029 xmlhttp.onreadystatechange=filterlist_callback;
7e939457 1030 xmlhttp.send(null);
a0d53889 1031
90ac84df 1032 return false;
a0d53889
AD
1033}
1034
48f0adb0
AD
1035function editSelectedLabel() {
1036 var rows = getSelectedLabels();
a0d53889 1037
48f0adb0 1038 if (rows.length == 0) {
f3977cf5 1039 alert(__("No labels are selected."));
48f0adb0 1040 return;
a0d53889
AD
1041 }
1042
48f0adb0 1043 if (rows.length > 1) {
f3977cf5 1044 alert(__("Please select only one label."));
48f0adb0
AD
1045 return;
1046 }
a0d53889 1047
dbd9e2f1
AD
1048 notify("");
1049
48f0adb0 1050 editLabel(rows[0]);
a0d53889 1051
a0d53889
AD
1052}
1053
e6cb77a0
AD
1054function editSelectedUser() {
1055 var rows = getSelectedUsers();
1056
1057 if (rows.length == 0) {
f3977cf5 1058 alert(__("No users are selected."));
e6cb77a0
AD
1059 return;
1060 }
1061
1062 if (rows.length > 1) {
f3977cf5 1063 alert(__("Please select only one user."));
e6cb77a0
AD
1064 return;
1065 }
1066
dbd9e2f1
AD
1067 notify("");
1068
e6cb77a0
AD
1069 editUser(rows[0]);
1070}
1071
1072function resetSelectedUserPass() {
1073 var rows = getSelectedUsers();
1074
1075 if (rows.length == 0) {
f3977cf5 1076 alert(__("No users are selected."));
e6cb77a0
AD
1077 return;
1078 }
1079
1080 if (rows.length > 1) {
f3977cf5 1081 alert(__("Please select only one user."));
e6cb77a0
AD
1082 return;
1083 }
1084
f3977cf5 1085 var ok = confirm(__("Reset password of selected user?"));
e6cb77a0 1086
69668465 1087 if (ok) {
42c32916 1088 notify_progress("Resetting password for selected user...");
69668465
AD
1089
1090 var id = rows[0];
1091
1092 xmlhttp.open("GET", "backend.php?op=pref-users&subop=resetPass&id=" +
1093 param_escape(id), true);
1094 xmlhttp.onreadystatechange=userlist_callback;
1095 xmlhttp.send(null);
1096 }
e6cb77a0
AD
1097}
1098
717f5e64 1099function selectedUserDetails() {
e6cb77a0 1100
1a7572cb
AD
1101 if (!xmlhttp_ready(xmlhttp)) {
1102 printLockingError();
1103 return
1104 }
1105
717f5e64
AD
1106 var rows = getSelectedUsers();
1107
1108 if (rows.length == 0) {
f3977cf5 1109 alert(__("No users are selected."));
717f5e64
AD
1110 return;
1111 }
1112
1113 if (rows.length > 1) {
f3977cf5 1114 alert(__("Please select only one user."));
717f5e64
AD
1115 return;
1116 }
1117
0077a65c 1118 notify_progress("Loading, please wait...");
717f5e64 1119
0077a65c 1120 var id = rows[0];
dbd9e2f1 1121
5a437c88 1122 xmlhttp.open("GET", "backend.php?op=pref-users&subop=user-details&id=" + id, true);
c6c3a07f
AD
1123 xmlhttp.onreadystatechange=infobox_callback;
1124 xmlhttp.send(null);
1125
1126}
1127
1128function selectedFeedDetails() {
1129
1130 if (!xmlhttp_ready(xmlhttp)) {
1131 printLockingError();
1132 return
1133 }
1134
1135 var rows = getSelectedFeeds();
1136
1137 if (rows.length == 0) {
f3977cf5 1138 alert(__("No feeds are selected."));
c6c3a07f
AD
1139 return;
1140 }
1141
01b3e191 1142 if (rows.length > 1) {
f3977cf5 1143 alert(__("Please select only one feed."));
01b3e191
AD
1144 return;
1145 }
c6c3a07f 1146
df268d47 1147// var id = rows[0];
c6c3a07f 1148
dbd9e2f1
AD
1149 notify("");
1150
df268d47
AD
1151 xmlhttp.open("GET", "backend.php?op=feed-details&id=" +
1152 param_escape(rows.toString()), true);
c6c3a07f 1153 xmlhttp.onreadystatechange=infobox_callback;
1a7572cb 1154 xmlhttp.send(null);
717f5e64
AD
1155
1156}
a0d53889
AD
1157
1158function editSelectedFilter() {
1159 var rows = getSelectedFilters();
1160
1161 if (rows.length == 0) {
f3977cf5 1162 alert(__("No filters are selected."));
a0d53889
AD
1163 return;
1164 }
1165
1166 if (rows.length > 1) {
f3977cf5 1167 alert(__("Please select only one filter."));
a0d53889
AD
1168 return;
1169 }
1170
dbd9e2f1
AD
1171 notify("");
1172
a0d53889
AD
1173 editFilter(rows[0]);
1174
1175}
1176
1177
508a81e1
AD
1178function editSelectedFeed() {
1179 var rows = getSelectedFeeds();
1180
1181 if (rows.length == 0) {
f3977cf5 1182 alert(__("No feeds are selected."));
508a81e1
AD
1183 return;
1184 }
1185
1186 if (rows.length > 1) {
f3977cf5 1187 alert(__("Please select one feed."));
508a81e1
AD
1188 return;
1189 }
1190
dbd9e2f1
AD
1191 notify("");
1192
508a81e1 1193 editFeed(rows[0]);
91ff844a
AD
1194
1195}
1196
758e1c4a
AD
1197function editSelectedFeeds() {
1198
1199 if (!xmlhttp_ready(xmlhttp)) {
1200 printLockingError();
1201 return
1202 }
1203
1204 var rows = getSelectedFeeds();
1205
1206 if (rows.length == 0) {
1207 alert(__("No feeds are selected."));
1208 return;
1209 }
1210
1211 notify("");
1212
1213 disableHotkeys();
1214
1215 notify_progress("Loading, please wait...");
1216
1217 xmlhttp.open("GET", "backend.php?op=pref-feeds&subop=editfeeds&ids=" +
1218 param_escape(rows.toString()), true);
1219
1220 xmlhttp.onreadystatechange=infobox_callback;
1221 xmlhttp.send(null);
1222
1223}
1224
91ff844a
AD
1225function editSelectedFeedCat() {
1226 var rows = getSelectedFeedCats();
1227
1228 if (rows.length == 0) {
f3977cf5 1229 alert(__("No categories are selected."));
91ff844a
AD
1230 return;
1231 }
1232
1233 if (rows.length > 1) {
f3977cf5 1234 alert(__("Please select only one category."));
91ff844a
AD
1235 return;
1236 }
1237
1238 notify("");
1239
1240 editFeedCat(rows[0]);
508a81e1
AD
1241
1242}
1243
eec498c3 1244function piggie(enable) {
13ad9102 1245 if (enable) {
d437c8cf 1246 debug("I LOVEDED IT!");
1cac3c31 1247 var piggie = document.getElementById("piggie");
33377ef3 1248
537625c6
AD
1249 Element.show(piggie);
1250 Position.Center(piggie);
1251 Effect.Puff(piggie);
1252
508a81e1 1253 }
508a81e1
AD
1254}
1255
9f311df6
AD
1256function validateOpmlImport() {
1257
1258 var opml_file = document.getElementById("opml_file");
1259
1260 if (opml_file.value.length == 0) {
f3977cf5 1261 alert(__("No OPML file to upload."));
9f311df6
AD
1262 return false;
1263 } else {
1264 return true;
1265 }
1266}
1267
0e317f9d 1268function updateFilterList(sort_key) {
a0d53889
AD
1269
1270 if (!xmlhttp_ready(xmlhttp)) {
1271 printLockingError();
1272 return
1273 }
1274
9c87d75c
AD
1275 var filter_search = document.getElementById("filter_search");
1276 var search = "";
1277 if (filter_search) { search = filter_search.value; }
1278
e161a2cc 1279 xmlhttp.open("GET", "backend.php?op=pref-filters&sort=" +
9c87d75c
AD
1280 param_escape(sort_key) +
1281 "&search=" + param_escape(search), true);
a0d53889
AD
1282 xmlhttp.onreadystatechange=filterlist_callback;
1283 xmlhttp.send(null);
1284
1285}
1286
e161a2cc 1287function updateLabelList(sort_key) {
48f0adb0
AD
1288
1289 if (!xmlhttp_ready(xmlhttp)) {
1290 printLockingError();
1291 return
1292 }
1293
112d2aec
AD
1294 var label_search = document.getElementById("label_search");
1295 var search = "";
1296 if (label_search) { search = label_search.value; }
1297
e161a2cc 1298 xmlhttp.open("GET", "backend.php?op=pref-labels&sort=" +
112d2aec
AD
1299 param_escape(sort_key) +
1300 "&search=" + param_escape(search), true);
48f0adb0
AD
1301 xmlhttp.onreadystatechange=labellist_callback;
1302 xmlhttp.send(null);
48f0adb0
AD
1303}
1304
4255b24c
AD
1305function updatePrefsList() {
1306
1307 if (!xmlhttp_ready(xmlhttp)) {
1308 printLockingError();
1309 return
1310 }
1311
4255b24c
AD
1312 xmlhttp.open("GET", "backend.php?op=pref-prefs", true);
1313 xmlhttp.onreadystatechange=prefslist_callback;
1314 xmlhttp.send(null);
1315
1316}
1317
e513a74a 1318function selectTab(id, noupdate, subop) {
a7f22b70
AD
1319
1320// alert(id);
48f0adb0 1321
b2caf812 1322 if (!id) id = active_tab;
7f74a9da 1323
b2caf812 1324 try {
59a543f0 1325
b2caf812
AD
1326 if (!xmlhttp_ready(xmlhttp)) {
1327 printLockingError();
1328 return
a7f22b70 1329 }
f5a50b25 1330
a422968f
AD
1331 try {
1332 var c = document.getElementById('prefContent');
1333 c.scrollTop = 0;
1334 } catch (e) { };
1335
b2caf812 1336 if (!noupdate) {
f5a50b25 1337
b2caf812
AD
1338 debug("selectTab: " + id + "(NU: " + noupdate + ")");
1339
9e31e1b9 1340 notify_progress("Loading, please wait...");
b2caf812
AD
1341
1342 // close active infobox if needed
1343 closeInfoBox();
1344
1345 // clean up all current selections, just in case
1346 active_feed_cat = false;
1347 active_label = false;
d15f8675
AD
1348
1349// Effect.Fade("prefContent", {duration: 1, to: 0.01,
1350// queue: { position:'end', scope: 'FEED_TAB', limit: 1 } } );
1351
b2caf812
AD
1352 if (id == "feedConfig") {
1353 updateFeedList();
1354 } else if (id == "filterConfig") {
1355 updateFilterList();
1356 } else if (id == "labelConfig") {
1357 updateLabelList();
1358 } else if (id == "genConfig") {
1359 updatePrefsList();
1360 } else if (id == "userConfig") {
1361 updateUsersList();
1362 } else if (id == "feedBrowser") {
1363 updateBigFeedBrowser();
1364 }
f5a50b25 1365 }
6068d33b
AD
1366
1367 /* clean selection from all tabs */
b2caf812 1368
6068d33b
AD
1369 var tabs_holder = document.getElementById("prefTabs");
1370 var tab = tabs_holder.firstChild;
1371
1372 while (tab) {
1373 if (tab.className && tab.className.match("prefsTabSelected")) {
b2caf812
AD
1374 tab.className = "prefsTab";
1375 }
6068d33b 1376 tab = tab.nextSibling;
f5a50b25 1377 }
6068d33b
AD
1378
1379 /* mark new tab as selected */
1380
b2caf812
AD
1381 tab = document.getElementById(id + "Tab");
1382
1383 if (tab) {
1384 if (!tab.className.match("Selected")) {
1385 tab.className = tab.className + "Selected";
1386 }
1387 }
1388
b2caf812 1389 active_tab = id;
f5a50b25 1390
b2caf812
AD
1391 } catch (e) {
1392 exception_error("selectTab", e);
a7565293 1393 }
a7565293
AD
1394}
1395
1396function backend_sanity_check_callback() {
f5a50b25 1397
a7565293
AD
1398 if (xmlhttp.readyState == 4) {
1399
1400 try {
7a09510c
AD
1401
1402 if (sanity_check_done) {
81352b54
AD
1403 fatalError(11, "Sanity check request received twice. This can indicate "+
1404 "presence of Firebug or some other disrupting extension. "+
1405 "Please disable it and try again.");
7a09510c
AD
1406 return;
1407 }
1408
a7565293
AD
1409 if (!xmlhttp.responseXML) {
1410 fatalError(3, "[D001, Received reply is not XML]: " + xmlhttp.responseText);
1411 return;
1412 }
1413
1414 var reply = xmlhttp.responseXML.firstChild.firstChild;
1415
1416 if (!reply) {
1417 fatalError(3, "[D002, Invalid RPC reply]: " + xmlhttp.responseText);
1418 return;
1419 }
1420
1421 var error_code = reply.getAttribute("error-code");
1422
1423 if (error_code && error_code != 0) {
1424 return fatalError(error_code, reply.getAttribute("error-msg"));
1425 }
1426
1427 debug("sanity check ok");
1428
1429 var params = reply.nextSibling;
1430
1431 if (params) {
1432 debug('reading init-params...');
1433 var param = params.firstChild;
1434
1435 while (param) {
1436 var k = param.getAttribute("key");
1437 var v = param.getAttribute("value");
1438 debug(k + " => " + v);
1439 init_params[k] = v;
1440 param = param.nextSibling;
1441 }
1442 }
1443
7a09510c
AD
1444 sanity_check_done = true;
1445
a7565293
AD
1446 init_second_stage();
1447
1448 } catch (e) {
1449 exception_error("backend_sanity_check_callback", e);
1450 }
1451 }
1452}
1453
1454function init_second_stage() {
1455
b2caf812
AD
1456 try {
1457 active_tab = getInitParam("prefs_active_tab");
fe8d2059 1458 if (!active_tab || active_tab == '0') active_tab = "genConfig";
4da47970 1459
d437c8cf
AD
1460 document.onkeydown = pref_hotkey_handler;
1461
e513a74a
AD
1462 var tab = getURLParam('tab');
1463
1464 caller_subop = getURLParam('subop');
1465
1466 if (tab) {
1467 active_tab = tab;
1468 }
1469
b2caf812
AD
1470 if (navigator.userAgent.match("Opera")) {
1471 setTimeout("selectTab()", 500);
1472 } else {
1473 selectTab(active_tab);
1474 }
1475 notify("");
08827aaf
AD
1476
1477 loading_set_progress(60);
1478
b2caf812
AD
1479 } catch (e) {
1480 exception_error("init_second_stage", e);
1481 }
a0d53889
AD
1482}
1483
007bda35 1484function init() {
e2ec66a8 1485
7719618b
AD
1486 try {
1487
97dcd654
AD
1488 if (arguments.callee.done) return;
1489 arguments.callee.done = true;
1490
a7565293 1491 if (getURLParam('debug')) {
8836613c 1492 Element.show("debug_output");
a7565293
AD
1493 debug('debug mode activated');
1494 }
1495
7719618b
AD
1496 // IE kludge
1497 if (!xmlhttp) {
1498 document.getElementById("prefContent").innerHTML =
1499 "<b>Fatal error:</b> This program needs XmlHttpRequest " +
1500 "to function properly. Your browser doesn't seem to support it.";
1501 return;
1502 }
4da47970 1503
08827aaf
AD
1504 loading_set_progress(30);
1505
a7565293
AD
1506 xmlhttp.open("GET", "backend.php?op=rpc&subop=sanityCheck", true);
1507 xmlhttp.onreadystatechange=backend_sanity_check_callback;
1508 xmlhttp.send(null);
1509
7719618b
AD
1510 } catch (e) {
1511 exception_error("init", e);
e2ec66a8 1512 }
007bda35 1513}
b1895692 1514
f932bc9f
AD
1515function categorizeSelectedFeeds() {
1516
1517 if (!xmlhttp_ready(xmlhttp)) {
1518 printLockingError();
1519 return
1520 }
1521
1522 var sel_rows = getSelectedFeeds();
1523
1524 var cat_sel = document.getElementById("sfeed_set_fcat");
79f3553b 1525 var cat_id = cat_sel[cat_sel.selectedIndex].value;
f932bc9f
AD
1526
1527 if (sel_rows.length > 0) {
1528
42c32916 1529 notify_progress("Changing category of selected feeds...");
f932bc9f
AD
1530
1531 xmlhttp.open("GET", "backend.php?op=pref-feeds&subop=categorize&ids="+
1532 param_escape(sel_rows.toString()) + "&cat_id=" + param_escape(cat_id), true);
1533 xmlhttp.onreadystatechange=feedlist_callback;
1534 xmlhttp.send(null);
1535
1536 } else {
1537
f3977cf5 1538 alert(__("No feeds are selected."));
f932bc9f
AD
1539
1540 }
1541
1542}
69668465
AD
1543
1544function validatePrefsReset() {
b652c1b7
AD
1545 try {
1546 var ok = confirm(__("Reset to defaults?"));
1547
1548 if (ok) {
1549
1550 var query = Form.serialize("pref_prefs_form");
1551 query = query + "&subop=reset-config";
1552 debug(query);
1553
1554 xmlhttp.open("POST", "backend.php", true);
1555 xmlhttp.onreadystatechange=prefs_reset_callback;
1556 xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
1557 xmlhttp.send(query);
1558 }
1559
1560 } catch (e) {
1561 exception_error("validatePrefsSave", e);
1562 }
1563
1564 return false;
1565
69668465 1566}
f9cb39ac 1567
6311acbe 1568function browseFeeds(limit) {
f9cb39ac
AD
1569
1570 xmlhttp.open("GET", "backend.php?op=pref-feeds&subop=browse", true);
1571 xmlhttp.onreadystatechange=infobox_callback;
1572 xmlhttp.send(null);
1573
1574}
a0476535
AD
1575
1576function feedBrowserSubscribe() {
1577 try {
a0476535 1578
c0ae0fdb 1579 var selected = getSelectedFeedsFromBrowser();
a0476535
AD
1580
1581 if (selected.length > 0) {
1582 closeInfoBox();
1583 xmlhttp.open("GET", "backend.php?op=pref-feeds&subop=massSubscribe&ids="+
1584 param_escape(selected.toString()), true);
1585 xmlhttp.onreadystatechange=feedlist_callback;
1586 xmlhttp.send(null);
1587 } else {
89cb787e 1588 alert(__("No feeds are selected."));
a0476535
AD
1589 }
1590
1591 } catch (e) {
1592 exception_error("feedBrowserSubscribe", e);
1593 }
1594}
c6232e43 1595
ce8de904
AD
1596function updateBigFeedBrowserBtn() {
1597 notify_progress("Loading, please wait...");
1598 return updateBigFeedBrowser();
1599}
1600
1601function updateBigFeedBrowser(limit, from_button) {
c6232e43
AD
1602
1603 if (!xmlhttp_ready(xmlhttp)) {
1604 printLockingError();
1605 return
1606 }
1607
6311acbe
AD
1608 var query = "backend.php?op=pref-feed-browser";
1609
1610 var limit_sel = document.getElementById("feedBrowserLimit");
1611
1612 if (limit_sel) {
1613 var limit = limit_sel[limit_sel.selectedIndex].value;
1614 query = query + "&limit=" + param_escape(limit);
1615 }
1616
1617 xmlhttp.open("GET", query, true);
c6232e43
AD
1618 xmlhttp.onreadystatechange=feed_browser_callback;
1619 xmlhttp.send(null);
c6232e43
AD
1620}
1621
c2b2aee0 1622function browserToggleExpand(id) {
c6232e43
AD
1623 try {
1624/* if (feed_to_expand && feed_to_expand != id) {
1625 var d = document.getElementById("BRDET-" + feed_to_expand);
1626 d.style.display = "none";
1627 } */
c2b2aee0 1628
ff725e9b
AD
1629 if (!xmlhttp_ready(xmlhttp)) {
1630 printLockingError();
1631 return
1632 }
1633
051c4d56
AD
1634/* if (feed_to_expand && id != feed_to_expand) {
1635 Effect.Fade('BRDET-' + feed_to_expand, {duration : 0.5});
1636 } */
c2b2aee0 1637
051c4d56 1638 var d = document.getElementById("BRDET-" + id);
c6232e43 1639
34a01a20 1640 if (Element.visible(d)) {
051c4d56 1641 Effect.Fade(d, {duration : 0.5});
34a01a20 1642 } else {
c2b2aee0 1643 feed_to_expand = id;
c6232e43 1644
c2b2aee0
AD
1645 xmlhttp.open("GET", "backend.php?op=pref-feed-browser&subop=details&id="
1646 + param_escape(id), true);
1647 xmlhttp.onreadystatechange=expand_feed_callback;
1648 xmlhttp.send(null);
1649 }
c6232e43
AD
1650
1651 } catch (e) {
34a01a20 1652 exception_error("browserToggleExpand", e);
c6232e43
AD
1653 }
1654}
64dc5976 1655
ce3bf408
AD
1656function selectPrefRows(kind, select) {
1657
1658 if (kind) {
1659 var opbarid = false;
1660 var nchk = false;
1661 var nrow = false;
1662 var lname = false;
1663
1664 if (kind == "feed") {
1665 opbarid = "feedOpToolbar";
1666 nrow = "FEEDR-";
1667 nchk = "FRCHK-";
1668 lname = "prefFeedList";
1669 } else if (kind == "fcat") {
1670 opbarid = "catOpToolbar";
1671 nrow = "FCATR-";
9c483746 1672 nchk = "FCCHK-";
ce3bf408
AD
1673 lname = "prefFeedCatList";
1674 } else if (kind == "filter") {
1675 opbarid = "filterOpToolbar";
1676 nrow = "FILRR-";
1677 nchk = "FICHK-";
1678 lname = "prefFilterList";
1679 } else if (kind == "label") {
1680 opbarid = "labelOpToolbar";
1681 nrow = "LILRR-";
a4dbc524 1682 nchk = "LICHK-";
ce3bf408
AD
1683 lname = "prefLabelList";
1684 } else if (kind == "user") {
1685 opbarid = "userOpToolbar";
1686 nrow = "UMRR-";
1687 nchk = "UMCHK-";
1688 lname = "prefUserList";
1689 }
1690
1691 if (opbarid) {
1692 selectTableRowsByIdPrefix(lname, nrow, nchk, select);
1693 disableContainerChildren(opbarid, !select);
1694 }
1695
1696 }
1697}
1698
1699
1700function toggleSelectPrefRow(sender, kind) {
1701
1702 toggleSelectRow(sender);
1703
1704 if (kind) {
1705 var opbarid = false;
1706 var nsel = -1;
1707
1708 if (kind == "feed") {
1709 opbarid = "feedOpToolbar";
1710 nsel = getSelectedFeeds();
1711 } else if (kind == "fcat") {
1712 opbarid = "catOpToolbar";
1713 nsel = getSelectedFeedCats();
1714 } else if (kind == "filter") {
1715 opbarid = "filterOpToolbar";
1716 nsel = getSelectedFilters();
1717 } else if (kind == "label") {
1718 opbarid = "labelOpToolbar";
1719 nsel = getSelectedLabels();
1720 } else if (kind == "user") {
1721 opbarid = "userOpToolbar";
1722 nsel = getSelectedUsers();
1723 }
1724
1725 if (opbarid && nsel != -1) {
1726 disableContainerChildren(opbarid, nsel == false);
1727 }
1728
1729 }
1730}
1731
c0ae0fdb
AD
1732function toggleSelectFBListRow(sender) {
1733 toggleSelectListRow(sender);
1734 disableContainerChildren("fbrOpToolbar", getSelectedFeedsFromBrowser() == 0);
1735}
d437c8cf
AD
1736
1737var seq = "";
1738
1739function pref_hotkey_handler(e) {
1740 try {
1741
1742 var keycode;
746dcf42
AD
1743 var shift_key = false;
1744
1745 try {
1746 shift_key = e.shiftKey;
1747 } catch (e) {
1748
1749 }
1750
d437c8cf
AD
1751 if (window.event) {
1752 keycode = window.event.keyCode;
1753 } else if (e) {
1754 keycode = e.which;
1755 }
746dcf42 1756
eec498c3
AD
1757 var keychar = String.fromCharCode(keycode);
1758
746dcf42
AD
1759 if (keycode == 27) { // escape
1760 if (Element.visible("hotkey_help_overlay")) {
1761 Element.hide("hotkey_help_overlay");
1762 }
1763 hotkey_prefix = false;
1764 closeInfoBox();
1765 }
1766
1767 if (!hotkeys_enabled) {
1768 debug("hotkeys disabled");
1769 return;
1770 }
1771
1772 if (keycode == 16) return; // ignore lone shift
1773
6068d33b
AD
1774 if ((keycode == 67 || keycode == 71) && !hotkey_prefix) {
1775 hotkey_prefix = keycode;
eec498c3 1776 debug("KP: PREFIX=" + keycode + " CHAR=" + keychar);
6068d33b
AD
1777 return;
1778 }
1779
746dcf42
AD
1780 if (Element.visible("hotkey_help_overlay")) {
1781 Element.hide("hotkey_help_overlay");
1782 }
1783
d437c8cf
AD
1784 if (keycode == 13 || keycode == 27) {
1785 seq = "";
1786 } else {
1787 seq = seq + "" + keycode;
1788 }
1789
746dcf42 1790 /* Global hotkeys */
d437c8cf 1791
746dcf42
AD
1792 if (!hotkey_prefix) {
1793
1794 if (keycode == 68 && shift_key) { // d
8836613c
AD
1795 if (!Element.visible("debug_output")) {
1796 Element.show("debug_output");
746dcf42
AD
1797 debug('debug mode activated');
1798 } else {
8836613c 1799 Element.hide("debug_output");
746dcf42 1800 }
746dcf42
AD
1801 return;
1802 }
1803
eec498c3 1804 if ((keycode == 191 || keychar == '?') && shift_key) { // ?
746dcf42 1805 if (!Element.visible("hotkey_help_overlay")) {
86deaa0e
AD
1806 //Element.show("hotkey_help_overlay");
1807 Effect.Appear("hotkey_help_overlay", {duration : 0.3});
746dcf42
AD
1808 } else {
1809 Element.hide("hotkey_help_overlay");
1810 }
eec498c3 1811 return false;
746dcf42
AD
1812 }
1813
eec498c3 1814 if (keycode == 191 || keychar == '/') { // /
477402d8
AD
1815 var search_boxes = new Array("label_search",
1816 "feed_search", "filter_search", "user_search");
1817
1818 for (var i = 0; i < search_boxes.length; i++) {
1819 var elem = document.getElementById(search_boxes[i]);
1820 if (elem) {
eec498c3
AD
1821 focus_element(search_boxes[i]);
1822 return false;
477402d8
AD
1823 }
1824 }
477402d8 1825 }
6068d33b
AD
1826 }
1827
1828 /* Prefix c */
1829
1830 if (hotkey_prefix == 67) { // c
1831 hotkey_prefix = false;
1832
1833 if (keycode == 70) { // f
eec498c3
AD
1834 displayDlg("quickAddFilter");
1835 return false;
6068d33b
AD
1836 }
1837
1838 if (keycode == 83) { // s
eec498c3
AD
1839 displayDlg("quickAddFeed");
1840 return false;
6068d33b
AD
1841 }
1842
ceb30ba4 1843/* if (keycode == 76) { // l
eec498c3
AD
1844 displayDlg("quickAddLabel");
1845 return false;
ceb30ba4 1846 } */
6068d33b
AD
1847
1848 if (keycode == 85) { // u
1849 // no-op
1850 }
1851
57f734c8 1852 if (keycode == 67) { // c
eec498c3
AD
1853 editFeedCats();
1854 return false;
57f734c8
AD
1855 }
1856
a80b05ea 1857 if (keycode == 84 && shift_key) { // T
eec498c3
AD
1858 browseFeeds();
1859 return false;
a80b05ea
AD
1860 }
1861
6068d33b
AD
1862 }
1863
1864 /* Prefix g */
1865
1866 if (hotkey_prefix == 71) { // g
1867
1868 hotkey_prefix = false;
1869
1870 if (keycode == 49 && document.getElementById("genConfigTab")) { // 1
746dcf42 1871 selectTab("genConfig");
eec498c3 1872 return false;
746dcf42
AD
1873 }
1874
1875 if (keycode == 50 && document.getElementById("feedConfigTab")) { // 2
eec498c3
AD
1876 selectTab("feedConfig");
1877 return false;
746dcf42
AD
1878 }
1879
1880 if (keycode == 51 && document.getElementById("feedBrowserTab")) { // 3
eec498c3
AD
1881 selectTab("feedBrowser");
1882 return false;
746dcf42
AD
1883 }
1884
1885 if (keycode == 52 && document.getElementById("filterConfigTab")) { // 4
eec498c3
AD
1886 selectTab("filterConfig");
1887 return false;
746dcf42
AD
1888 }
1889
1890 if (keycode == 53 && document.getElementById("labelConfigTab")) { // 5
eec498c3
AD
1891 selectTab("labelConfig");
1892 return false;
746dcf42
AD
1893 }
1894
1895 if (keycode == 54 && document.getElementById("userConfigTab")) { // 6
eec498c3
AD
1896 selectTab("userConfig");
1897 return false;
746dcf42
AD
1898 }
1899
8d727bfc
AD
1900 if (keycode == 88) { // x
1901 return gotoMain();
1902 }
1903
746dcf42
AD
1904 }
1905
1906 if (document.getElementById("piggie")) {
1907
1908 if (seq.match("807371717369")) {
1909 seq = "";
eec498c3 1910 piggie(true);
746dcf42 1911 } else {
eec498c3 1912 piggie(false);
746dcf42
AD
1913 }
1914 }
1915
1916 if (hotkey_prefix) {
eec498c3 1917 debug("KP: PREFIX=" + hotkey_prefix + " CODE=" + keycode + " CHAR=" + keychar);
d437c8cf 1918 } else {
eec498c3 1919 debug("KP: CODE=" + keycode + " CHAR=" + keychar);
d437c8cf 1920 }
d437c8cf
AD
1921
1922 } catch (e) {
1923 exception_error("pref_hotkey_handler", e);
1924 }
1925}
1926
9c483746
AD
1927function editFeedCats() {
1928 if (!xmlhttp_ready(xmlhttp)) {
1929 printLockingError();
1930 return
1931 }
1932
a349077c
AD
1933 document.getElementById("subscribe_to_feed_btn").disabled = true;
1934
1935 try {
1936 document.getElementById("top25_feeds_btn").disabled = true;
1937 } catch (e) {
1938 // this button is not always available, no-op if not found
1939 }
1940
9c483746 1941 xmlhttp.open("GET", "backend.php?op=pref-feeds&subop=editCats", true);
11f083e7 1942 xmlhttp.onreadystatechange=infobox_feed_cat_callback;
9c483746
AD
1943 xmlhttp.send(null);
1944}
a3656a41
AD
1945
1946function showFeedsWithErrors() {
1947 displayDlg('feedUpdateErrors');
1948}
073ca0e6 1949
d95bd220
AD
1950function changeUserPassword() {
1951
1952 try {
1953
1954 if (!xmlhttp_ready(xmlhttp)) {
1955 printLockingError();
1956 return false;
1957 }
1958
ae661a8c
AD
1959 var f = document.forms["change_pass_form"];
1960
1961 if (f) {
1962 if (f.OLD_PASSWORD.value == "") {
1963 new Effect.Highlight(f.OLD_PASSWORD);
1964 notify_error("Old password cannot be blank.");
1965 return false;
1966 }
1967
1968 if (f.NEW_PASSWORD.value == "") {
1969 new Effect.Highlight(f.NEW_PASSWORD);
1970 notify_error("New password cannot be blank.");
1971 return false;
1972 }
1973
1974 if (f.CONFIRM_PASSWORD.value == "") {
1975 new Effect.Highlight(f.CONFIRM_PASSWORD);
1976 notify_error("Entered passwords do not match.");
1977 return false;
1978 }
1979
1980 if (f.CONFIRM_PASSWORD.value != f.NEW_PASSWORD.value) {
1981 new Effect.Highlight(f.CONFIRM_PASSWORD);
1982 new Effect.Highlight(f.NEW_PASSWORD);
1983 notify_error("Entered passwords do not match.");
1984 return false;
1985 }
1986
1987 }
1988
d95bd220
AD
1989 var query = Form.serialize("change_pass_form");
1990
1991 notify_progress("Trying to change password...");
1992
1993 xmlhttp.open("POST", "backend.php", true);
1994 xmlhttp.onreadystatechange=changepass_callback;
1995 xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
1996 xmlhttp.send(query);
1997
1998 } catch (e) {
1999 exception_error("changeUserPassword", e);
2000 }
2001
2002 return false;
2003}
073ca0e6 2004
42395d28
AD
2005function changeUserEmail() {
2006
2007 try {
2008
2009 if (!xmlhttp_ready(xmlhttp)) {
2010 printLockingError();
2011 return false;
2012 }
2013
2014 var query = Form.serialize("change_email_form");
2015
2016 notify_progress("Trying to change e-mail...");
2017
2018 xmlhttp.open("POST", "backend.php", true);
2019 xmlhttp.onreadystatechange=notify_callback;
2020 xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
2021 xmlhttp.send(query);
2022
2023 } catch (e) {
2024 exception_error("changeUserPassword", e);
2025 }
2026
2027 return false;
2028
2029}
400b60d8
AD
2030
2031function feedlistToggleSLAT() {
2032 notify_progress("Loading, please wait...");
2033 updateFeedList()
2034}
bc0ed820 2035
e4f4b46f
AD
2036function pubRegenKey() {
2037
bc0ed820
AD
2038 if (!xmlhttp_ready(xmlhttp)) {
2039 printLockingError();
e4f4b46f 2040 return false;
bc0ed820
AD
2041 }
2042
f56e3080 2043 var ok = confirm(__("Replace current publishing address with a new one?"));
bc0ed820 2044
e4f4b46f
AD
2045 if (ok) {
2046
2047 notify_progress("Trying to change address...");
2048
945c243e 2049 xmlhttp.open("GET", "backend.php?op=rpc&subop=regenPubKey");
e4f4b46f
AD
2050 xmlhttp.onreadystatechange=replace_pubkey_callback;
2051 xmlhttp.send(null);
2052 }
2053
2054 return false;
945c243e 2055}
b652c1b7 2056
e635d56a
AD
2057function pubToClipboard() {
2058
2059 try {
2060
2061 if (!xmlhttp_ready(xmlhttp)) {
2062 printLockingError();
2063 return false;
2064 }
2065
2066 var link = document.getElementById("pubGenAddress");
2067 alert(link.href);
2068
2069 } catch (e) {
2070 exception_error("pubToClipboard", e);
2071 }
2072
2073 return false;
2074}
2075
b652c1b7
AD
2076function validatePrefsSave() {
2077 try {
2078
2079 var ok = confirm(__("Save current configuration?"));
2080
2081 if (ok) {
2082
2083 var query = Form.serialize("pref_prefs_form");
2084 query = query + "&subop=save-config";
2085 debug(query);
2086
2087 xmlhttp.open("POST", "backend.php", true);
2088 xmlhttp.onreadystatechange=notify_callback;
2089 xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
2090 xmlhttp.send(query);
2091 }
2092
2093 } catch (e) {
2094 exception_error("validatePrefsSave", e);
2095 }
2096
2097 return false;
2098}
c4a36709
AD
2099
2100function feedActionChange() {
2101 try {
2102 var chooser = document.getElementById("feedActionChooser");
2103 var opid = chooser[chooser.selectedIndex].value;
2104
2105 chooser.selectedIndex = 0;
2106 feedActionGo(opid);
2107 } catch (e) {
2108 exception_error("feedActionChange", e);
2109 }
2110}
2111
2112function feedActionGo(op) {
2113 try {
2114 if (op == "facEdit") {
cd935c42
AD
2115
2116 var rows = getSelectedFeeds();
2117
2118 if (rows.length > 1) {
2119 editSelectedFeeds();
2120 } else {
2121 editSelectedFeed();
2122 }
c4a36709
AD
2123 }
2124
2125 if (op == "facClear") {
2126 clearSelectedFeeds();
2127 }
2128
2129 if (op == "facPurge") {
2130 purgeSelectedFeeds();
2131 }
2132
e88a65f4
AD
2133 if (op == "facEditCats") {
2134 editFeedCats();
2135 }
2136
fee840fb
AD
2137 if (op == "facRescore") {
2138 rescoreSelectedFeeds();
2139 }
2140
c4a36709
AD
2141 if (op == "facUnsubscribe") {
2142 removeSelectedFeeds();
2143 }
2144
2145 } catch (e) {
2146 exception_error("feedActionGo", e);
2147
2148 }
2149}
2150
2151function clearFeedArticles(feed_id) {
2152
2153 notify_progress("Clearing feed...");
2154
2155 var query = "backend.php?op=pref-feeds&quiet=1&subop=clear&id=" + feed_id;
2156
2157 new Ajax.Request(query, {
2158 onComplete: function(transport) {
2159 notify('');
2160 } });
2161
2162 return false;
2163}
2164
fee840fb
AD
2165function rescoreSelectedFeeds() {
2166
2167 if (!xmlhttp_ready(xmlhttp)) {
2168 printLockingError();
2169 return
2170 }
2171
2172 var sel_rows = getSelectedFeeds();
2173
2174 if (sel_rows.length > 0) {
2175
ef1b0366
AD
2176 //var ok = confirm(__("Rescore last 100 articles in selected feeds?"));
2177 var ok = confirm(__("Rescore articles in selected feeds?"));
fee840fb
AD
2178
2179 if (ok) {
3df4869b 2180 notify_progress("Rescoring selected feeds...", true);
fee840fb
AD
2181
2182 xmlhttp.open("GET", "backend.php?op=pref-feeds&subop=rescore&quiet=1&ids="+
2183 param_escape(sel_rows.toString()), true);
2184 xmlhttp.onreadystatechange=notify_callback;
2185 xmlhttp.send(null);
2186 }
2187 } else {
2188 alert(__("No feeds are selected."));
2189 }
2190
2191 return false;
2192}
c4a36709 2193
95a948a5
AD
2194function rescore_all_feeds() {
2195 var ok = confirm(__("Rescore all articles? This operation may take a lot of time."));
2196
2197 if (ok) {
3df4869b 2198 notify_progress("Rescoring feeds...", true);
95a948a5
AD
2199
2200 xmlhttp.open("GET", "backend.php?op=pref-feeds&subop=rescoreAll&quiet=1", true);
2201 xmlhttp.onreadystatechange=notify_callback;
2202 xmlhttp.send(null);
2203 }
a80b05ea 2204}
a44db887
AD
2205
2206function removeFilter(id, title) {
2207
2208 if (!xmlhttp_ready(xmlhttp)) {
2209 printLockingError();
2210 return
2211 }
2212
2213 var msg = __("Remove filter %s?").replace("%s", title);
2214
2215 var ok = confirm(msg);
2216
2217 if (ok) {
2218 closeInfoBox();
2219
2220 notify_progress("Removing filter...");
2221
2222 xmlhttp.open("GET", "backend.php?op=pref-filters&subop=remove&ids="+
2223 param_escape(id), true);
2224 xmlhttp.onreadystatechange=filterlist_callback;
2225 xmlhttp.send(null);
2226 }
2227
2228 return false;
2229}
2230
c8d5dcfe
AD
2231function unsubscribeFeed(id, title) {
2232
2233 if (!xmlhttp_ready(xmlhttp)) {
2234 printLockingError();
2235 return
2236 }
2237
2238 var msg = __("Unsubscribe from %s?").replace("%s", title);
2239
2240 var ok = confirm(msg);
2241
2242 if (ok) {
2243 closeInfoBox();
2244
2245 notify_progress("Removing feed...");
2246
2247 xmlhttp.open("GET", "backend.php?op=pref-feeds&subop=remove&ids="+
2248 param_escape(id), true);
2249 xmlhttp.onreadystatechange=filterlist_callback;
2250 xmlhttp.send(null);
2251 }
2252
2253 return false;
2254
2255 return false;
2256
2257}
2258
758e1c4a
AD
2259function feedsEditSave() {
2260 try {
2261
2262 if (!xmlhttp_ready(xmlhttp)) {
2263 printLockingError();
2264 return
2265 }
2266
cd935c42 2267 var ok = confirm(__("Save changes to selected feeds?"));
758e1c4a 2268
b0f015a2
AD
2269 if (ok) {
2270
5d538f4f
AD
2271 var f = document.forms["batch_edit_feed_form"];
2272
b0f015a2 2273 var query = Form.serialize("batch_edit_feed_form");
5d538f4f
AD
2274
2275 /* Form.serialize ignores unchecked checkboxes */
2276
cd935c42 2277 if (!query.match("&hidden=") &&
5d538f4f
AD
2278 f.hidden.disabled == false) {
2279 query = query + "&hidden=false";
2280 }
2281
cd935c42 2282 if (!query.match("&rtl_content=") &&
5d538f4f
AD
2283 f.rtl_content.disabled == false) {
2284 query = query + "&rtl_content=false";
2285 }
2286
cd935c42 2287 if (!query.match("&private=") &&
5d538f4f
AD
2288 f.private.disabled == false) {
2289 query = query + "&private=false";
2290 }
2291
cd935c42 2292 if (!query.match("&cache_images=") &&
5d538f4f
AD
2293 f.cache_images.disabled == false) {
2294 query = query + "&cache_images=false";
2295 }
2296
cd935c42 2297 if (!query.match("&include_in_digest=") &&
5d538f4f
AD
2298 f.include_in_digest.disabled == false) {
2299 query = query + "&include_in_digest=false";
2300 }
b0f015a2
AD
2301
2302 closeInfoBox();
2303
2304 notify_progress("Saving feeds...");
2305
2306 xmlhttp.open("POST", "backend.php", true);
2307 xmlhttp.onreadystatechange=feedlist_callback;
2308 xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
2309 xmlhttp.send(query);
2310 }
758e1c4a
AD
2311
2312 return false;
2313 } catch (e) {
2314 exception_error("feedsEditSave", e);
2315 }
2316}
2317
2318function batchFeedsToggleField(cb, elem, label) {
2319 try {
2320 var f = document.forms["batch_edit_feed_form"];
2321 var l = document.getElementById(label);
2322
2323 if (cb.checked) {
2324 f[elem].disabled = false;
2325
2326 if (l) {
2327 l.className = "";
2328 };
2329
2330// new Effect.Highlight(f[elem], {duration: 1, startcolor: "#fff7d5",
2331// queue: { position:'end', scope: 'BPEFQ', limit: 1 } } );
2332
2333 } else {
2334 f[elem].disabled = true;
2335
2336 if (l) {
2337 l.className = "insensitive";
2338 };
2339
2340 }
2341 } catch (e) {
2342 exception_error("batchFeedsToggleField", e);
2343 }
2344}
2345