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