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