]> git.wh0rd.org - tt-rss.git/blame - js/prefs.js
wip: filter async testing
[tt-rss.git] / js / prefs.js
CommitLineData
a7565293
AD
1var init_params = new Array();
2
746dcf42 3var hotkey_prefix = false;
78935092 4var hotkey_prefix_pressed = false;
7a09510c 5
a998dbef
AD
6var seq = "";
7
66665fba
AD
8function notify_callback2(transport, sticky) {
9 notify_info(transport.responseText, sticky);
60715b53
AD
10}
11
b83c7545 12function updateFeedList(sort_key) {
16270276
AD
13
14 var user_search = $("feed_search");
15 var search = "";
16 if (user_search) { search = user_search.value; }
17
b4e75b2a 18 new Ajax.Request("backend.php", {
16270276 19 parameters: "?op=pref-feeds&search=" + param_escape(search),
fb5662de 20 onComplete: function(transport) {
cbe50c80
AD
21 dijit.byId('feedConfigTab').attr('content', transport.responseText);
22 selectTab("feedConfig", true);
23 notify("");
60715b53 24 } });
007bda35
AD
25}
26
f9c1f8b0
AD
27function checkInactiveFeeds() {
28 try {
29 new Ajax.Request("backend.php", {
30 parameters: "?op=pref-feeds&method=getinactivefeeds",
31 onComplete: function(transport) {
32 if (parseInt(transport.responseText) > 0) {
33 Element.show(dijit.byId("pref_feeds_inactive_btn").domNode);
34 }
35 } });
36
37 } catch (e) {
38 exception_error("checkInactiveFeeds", e);
39 }
40}
373266eb 41
79ec0f2f 42function updateUsersList(sort_key) {
fbf7d545 43 try {
acac8448 44 var user_search = $("user_search");
fbf7d545
AD
45 var search = "";
46 if (user_search) { search = user_search.value; }
fb5662de 47
b4e75b2a 48 var query = "?op=pref-users&sort="
fbf7d545
AD
49 + param_escape(sort_key) +
50 "&search=" + param_escape(search);
fb5662de 51
b4e75b2a
AD
52 new Ajax.Request("backend.php", {
53 parameters: query,
fb5662de 54 onComplete: function(transport) {
66665fba
AD
55 dijit.byId('userConfigTab').attr('content', transport.responseText);
56 selectTab("userConfig", true)
57 notify("");
fbf7d545 58 } });
e6cb77a0 59
fbf7d545
AD
60 } catch (e) {
61 exception_error("updateUsersList", e);
62 }
e6cb77a0
AD
63}
64
e6cb77a0
AD
65function addUser() {
66
fbf7d545 67 try {
e6cb77a0 68
eb70b777 69 var login = prompt(__("Please enter login:"), "");
fb5662de
AD
70
71 if (login == null) {
eb70b777
AD
72 return false;
73 }
fb5662de 74
eb70b777
AD
75 if (login == "") {
76 alert(__("Can't create user: no login specified."));
77 return false;
fbf7d545 78 }
fb5662de 79
eb70b777 80 notify_progress("Adding user...");
fb5662de 81
f30ef1fa 82 var query = "?op=pref-users&method=add&login=" +
eb70b777 83 param_escape(login);
fb5662de 84
b4e75b2a
AD
85 new Ajax.Request("backend.php", {
86 parameters: query,
fb5662de 87 onComplete: function(transport) {
66665fba
AD
88 notify_callback2(transport);
89 updateUsersList();
eb70b777 90 } });
e6cb77a0 91
fbf7d545
AD
92 } catch (e) {
93 exception_error("addUser", e);
e6cb77a0 94 }
e6cb77a0
AD
95}
96
a998dbef 97function editUser(id, event) {
e6cb77a0 98
163723c4 99 try {
222a61c2 100 var query = "backend.php?op=pref-users&method=edit&id=" +
163723c4
AD
101 param_escape(id);
102
222a61c2
AD
103 if (dijit.byId("userEditDlg"))
104 dijit.byId("userEditDlg").destroyRecursive();
105
106 dialog = new dijit.Dialog({
107 id: "userEditDlg",
108 title: __("User Editor"),
109 style: "width: 600px",
110 execute: function() {
111 if (this.validate()) {
222a61c2
AD
112 notify_progress("Saving data...", true);
113
114 var query = dojo.formToQuery("user_edit_form");
115
116 new Ajax.Request("backend.php", {
117 parameters: query,
118 onComplete: function(transport) {
119 dialog.hide();
120 updateUsersList();
121 }});
122 }
123 },
124 href: query});
125
126 dialog.show();
e6cb77a0 127
163723c4
AD
128 } catch (e) {
129 exception_error("editUser", e);
130 }
fb5662de 131
e6cb77a0
AD
132}
133
8a097fa3 134function editFilter(id) {
163723c4 135 try {
a0d53889 136
f30ef1fa 137 var query = "backend.php?op=pref-filters&method=edit&id=" + param_escape(id);
4cd30111
AD
138
139 if (dijit.byId("feedEditDlg"))
140 dijit.byId("feedEditDlg").destroyRecursive();
6068d33b 141
d90868d7
AD
142 if (dijit.byId("filterEditDlg"))
143 dijit.byId("filterEditDlg").destroyRecursive();
144
145 dialog = new dijit.Dialog({
146 id: "filterEditDlg",
147 title: __("Edit Filter"),
148 style: "width: 600px",
a007c18d 149
4e02f582
AD
150 test: function() {
151 var query = "backend.php?" + dojo.formToQuery("filter_edit_form") + "&savemode=test";
152
153 if (dijit.byId("filterTestDlg"))
154 dijit.byId("filterTestDlg").destroyRecursive();
155
156 var test_dlg = new dijit.Dialog({
157 id: "filterTestDlg",
158 title: "Test Filter",
159 style: "width: 600px",
a007c18d
AD
160 results: 0,
161 max_offset: 10000,
162 getTestResults: function(query, offset) {
163 var updquery = query + "&offset=" + offset;
164
165 console.log("getTestResults:" + offset);
166 //console.log(updquery);
167
168 new Ajax.Request("backend.php", {
169 parameters: updquery,
170 onComplete: function (transport) {
171
172 console.log(transport.responseText);
173
174 var result = JSON.parse(transport.responseText);
175
176 console.log("R:" + result);
177
178 //console.log("<<< " + transport.responseText);
179
180 if (result && dijit.byId("filterTestDlg") && dijit.byId("filterTestDlg").open) {
181 test_dlg.results += result.size();
182
183 $("prefFilterProgressMsg").innerHTML = __("Looking for articles (%d)...".replace("%d", offset));
184
185 console.log(offset + " " + test_dlg.max_offset);
186
187 for (var i = 0; i < result.size(); i++) {
188 $("prefFilterTestResultList").innerHTML += result[i];
189 }
190
191 if (test_dlg.results < 30 && offset < test_dlg.max_offset) {
192 window.setTimeout(function() {
193 //console.log("blaargh");
194
195 test_dlg.getTestResults(query, offset + 30);
196 }, 0);
197 } else {
198
199 // all done
200
201 }
202
203 } else {
204 console.log("can't parse results object / dialog closed");
205 }
206
207 } });
208 },
4e02f582
AD
209 href: query});
210
a007c18d
AD
211 dojo.connect(test_dlg, "onShow", null, function(e) {
212 test_dlg.getTestResults(query, 0);
213 });
214
4e02f582
AD
215 test_dlg.show();
216 },
ec630524
AD
217 selectRules: function(select) {
218 $$("#filterDlg_Matches input[type=checkbox]").each(function(e) {
219 e.checked = select;
220 if (select)
221 e.parentNode.addClassName("Selected");
222 else
223 e.parentNode.removeClassName("Selected");
224 });
225 },
226 selectActions: function(select) {
227 $$("#filterDlg_Actions input[type=checkbox]").each(function(e) {
228 e.checked = select;
229
230 if (select)
231 e.parentNode.addClassName("Selected");
232 else
233 e.parentNode.removeClassName("Selected");
234
235 });
236 },
6aff7845
AD
237 editRule: function(e) {
238 var li = e.parentNode;
239 var rule = li.getElementsByTagName("INPUT")[1].value;
240 addFilterRule(li, rule);
241 },
242 editAction: function(e) {
243 var li = e.parentNode;
244 var action = li.getElementsByTagName("INPUT")[1].value;
245 addFilterAction(li, action);
246 },
90e4e726 247 removeFilter: function() {
6aff7845 248 var msg = __("Remove filter?");
fb5662de 249
90e4e726
AD
250 if (confirm(msg)) {
251 this.hide();
252
253 notify_progress("Removing filter...");
fb5662de 254
90e4e726
AD
255 var id = this.attr('value').id;
256
f30ef1fa 257 var query = "?op=pref-filters&method=remove&ids="+
90e4e726
AD
258 param_escape(id);
259
260 new Ajax.Request("backend.php", {
261 parameters: query,
262 onComplete: function(transport) {
263 updateFilterList();
264 } });
265 }
266 },
6aff7845
AD
267 addAction: function() { addFilterAction(); },
268 addRule: function() { addFilterRule(); },
269 deleteAction: function() {
270 $$("#filterDlg_Actions li.[class*=Selected]").each(function(e) { e.parentNode.removeChild(e) });
271 },
272 deleteRule: function() {
273 $$("#filterDlg_Matches li.[class*=Selected]").each(function(e) { e.parentNode.removeChild(e) });
5593784a 274 },
d90868d7
AD
275 execute: function() {
276 if (this.validate()) {
141fb6e3 277
6aff7845 278 notify_progress("Saving data...", true);
141fb6e3 279
6aff7845 280 var query = dojo.formToQuery("filter_edit_form");
141fb6e3 281
6aff7845
AD
282 console.log(query);
283
284 new Ajax.Request("backend.php", {
141fb6e3 285 parameters: query,
d90868d7 286 onComplete: function(transport) {
6aff7845
AD
287 dialog.hide();
288 updateFilterList();
289 }});
d90868d7
AD
290 }
291 },
292 href: query});
293
294 dialog.show();
a998dbef 295
a0d53889 296
163723c4
AD
297 } catch (e) {
298 exception_error("editFilter", e);
299 }
a0d53889
AD
300}
301
91ff844a 302function getSelectedLabels() {
fb8b2153
AD
303 var tree = dijit.byId("labelTree");
304 var items = tree.model.getCheckedItems();
305 var rv = [];
306
307 items.each(function(item) {
308 rv.push(tree.model.store.getValue(item, 'bare_id'));
309 });
310
311 return rv;
91ff844a 312}
48f0adb0 313
91ff844a 314function getSelectedUsers() {
e69fb880 315 return getSelectedTableRowIds("prefUserList");
a0d53889
AD
316}
317
83fe4d6d 318function getSelectedFeeds() {
1985a5e0
AD
319 var tree = dijit.byId("feedTree");
320 var items = tree.model.getCheckedItems();
321 var rv = [];
322
323 items.each(function(item) {
7c227bb3
AD
324 if (item.id[0].match("FEED:"))
325 rv.push(tree.model.store.getValue(item, 'bare_id'));
1985a5e0
AD
326 });
327
328 return rv;
91ff844a 329}
331900c6 330
fd26d5bf
AD
331function getSelectedCategories() {
332 var tree = dijit.byId("feedTree");
333 var items = tree.model.getCheckedItems();
334 var rv = [];
335
336 items.each(function(item) {
337 if (item.id[0].match("CAT:"))
338 rv.push(tree.model.store.getValue(item, 'bare_id'));
339 });
340
341 return rv;
342}
343
91ff844a 344function getSelectedFilters() {
a740f4b5
AD
345 var tree = dijit.byId("filterTree");
346 var items = tree.model.getCheckedItems();
347 var rv = [];
348
349 items.each(function(item) {
350 rv.push(tree.model.store.getValue(item, 'bare_id'));
351 });
352
353 return rv;
354
91ff844a 355}
331900c6 356
48f0adb0
AD
357function removeSelectedLabels() {
358
48f0adb0
AD
359 var sel_rows = getSelectedLabels();
360
361 if (sel_rows.length > 0) {
362
f56e3080 363 var ok = confirm(__("Remove selected labels?"));
48f0adb0 364
69668465 365 if (ok) {
42c32916 366 notify_progress("Removing selected labels...");
fb5662de 367
f30ef1fa 368 var query = "?op=pref-labels&method=remove&ids="+
a796bfc1
AD
369 param_escape(sel_rows.toString());
370
b4e75b2a
AD
371 new Ajax.Request("backend.php", {
372 parameters: query,
a796bfc1 373 onComplete: function(transport) {
cbe50c80 374 updateLabelList();
a796bfc1
AD
375 } });
376
69668465 377 }
48f0adb0 378 } else {
89cb787e 379 alert(__("No labels are selected."));
48f0adb0 380 }
90ac84df
AD
381
382 return false;
48f0adb0
AD
383}
384
e6cb77a0
AD
385function removeSelectedUsers() {
386
fbf7d545 387 try {
e6cb77a0 388
fbf7d545 389 var sel_rows = getSelectedUsers();
fb5662de 390
fbf7d545 391 if (sel_rows.length > 0) {
fb5662de 392
50e7dd7d 393 var ok = confirm(__("Remove selected users? Neither default admin nor your account will be removed."));
fb5662de 394
fbf7d545
AD
395 if (ok) {
396 notify_progress("Removing selected users...");
fb5662de 397
f30ef1fa 398 var query = "?op=pref-users&method=remove&ids="+
fbf7d545 399 param_escape(sel_rows.toString());
fb5662de 400
b4e75b2a
AD
401 new Ajax.Request("backend.php", {
402 parameters: query,
fb5662de 403 onComplete: function(transport) {
66665fba 404 updateUsersList();
fbf7d545 405 } });
fb5662de 406
fbf7d545 407 }
fb5662de 408
fbf7d545
AD
409 } else {
410 alert(__("No users are selected."));
69668465 411 }
e6cb77a0 412
fbf7d545
AD
413 } catch (e) {
414 exception_error("removeSelectedUsers", e);
e6cb77a0 415 }
90ac84df
AD
416
417 return false;
e6cb77a0
AD
418}
419
48f0adb0
AD
420function removeSelectedFilters() {
421
23e51f40 422 try {
48f0adb0 423
23e51f40 424 var sel_rows = getSelectedFilters();
fb5662de 425
23e51f40 426 if (sel_rows.length > 0) {
fb5662de 427
23e51f40 428 var ok = confirm(__("Remove selected filters?"));
fb5662de 429
23e51f40
AD
430 if (ok) {
431 notify_progress("Removing selected filters...");
fb5662de 432
f30ef1fa 433 var query = "?op=pref-filters&method=remove&ids="+
23e51f40 434 param_escape(sel_rows.toString());
fb5662de 435
b4e75b2a
AD
436 new Ajax.Request("backend.php", {
437 parameters: query,
23e51f40 438 onComplete: function(transport) {
687d246b
AD
439 updateFilterList();
440 } });
23e51f40
AD
441 }
442 } else {
443 alert(__("No filters are selected."));
69668465 444 }
23e51f40
AD
445
446 } catch (e) {
447 exception_error("removeSelectedFilters", e);
48f0adb0 448 }
90ac84df
AD
449
450 return false;
48f0adb0
AD
451}
452
453
83fe4d6d
AD
454function removeSelectedFeeds() {
455
a796bfc1 456 try {
69668465 457
a796bfc1 458 var sel_rows = getSelectedFeeds();
fb5662de 459
a796bfc1 460 if (sel_rows.length > 0) {
fb5662de 461
a796bfc1 462 var ok = confirm(__("Unsubscribe from selected feeds?"));
fb5662de 463
a796bfc1 464 if (ok) {
fb5662de 465
b6a6e262 466 notify_progress("Unsubscribing from selected feeds...", true);
fb5662de 467
f30ef1fa 468 var query = "?op=pref-feeds&method=remove&ids="+
a796bfc1 469 param_escape(sel_rows.toString());
b6a6e262 470
84c7b824 471 console.log(query);
b6a6e262 472
b4e75b2a
AD
473 new Ajax.Request("backend.php", {
474 parameters: query,
a796bfc1 475 onComplete: function(transport) {
b6a6e262 476 updateFeedList();
a796bfc1
AD
477 } });
478 }
fb5662de 479
a796bfc1
AD
480 } else {
481 alert(__("No feeds are selected."));
69668465 482 }
71ad3959 483
a796bfc1
AD
484 } catch (e) {
485 exception_error("removeSelectedFeeds", e);
71ad3959 486 }
fb5662de 487
90ac84df 488 return false;
71ad3959 489}
007bda35 490
c4a36709
AD
491function clearSelectedFeeds() {
492
c4a36709
AD
493 var sel_rows = getSelectedFeeds();
494
495 if (sel_rows.length > 1) {
496 alert(__("Please select only one feed."));
497 return;
498 }
499
500 if (sel_rows.length > 0) {
501
502 var ok = confirm(__("Erase all non-starred articles in selected feed?"));
503
504 if (ok) {
505 notify_progress("Clearing selected feed...");
506 clearFeedArticles(sel_rows[0]);
507 }
508
509 } else {
510
511 alert(__("No feeds are selected."));
512
513 }
fb5662de 514
c4a36709
AD
515 return false;
516}
517
e88a65f4
AD
518function purgeSelectedFeeds() {
519
e88a65f4
AD
520 var sel_rows = getSelectedFeeds();
521
522 if (sel_rows.length > 0) {
523
524 var pr = prompt(__("How many days of articles to keep (0 - use default)?"), "0");
525
526 if (pr != undefined) {
527 notify_progress("Purging selected feed...");
528
f30ef1fa 529 var query = "?op=rpc&method=purge&ids="+
e88a65f4
AD
530 param_escape(sel_rows.toString()) + "&days=" + pr;
531
84c7b824 532 console.log(query);
e88a65f4 533
b4e75b2a
AD
534 new Ajax.Request("prefs.php", {
535 parameters: query,
e88a65f4
AD
536 onComplete: function(transport) {
537 notify('');
538 } });
539 }
540
541 } else {
542
543 alert(__("No feeds are selected."));
544
545 }
fb5662de 546
e88a65f4
AD
547 return false;
548}
549
e6cb77a0
AD
550function editSelectedUser() {
551 var rows = getSelectedUsers();
552
553 if (rows.length == 0) {
f3977cf5 554 alert(__("No users are selected."));
e6cb77a0
AD
555 return;
556 }
557
558 if (rows.length > 1) {
f3977cf5 559 alert(__("Please select only one user."));
e6cb77a0
AD
560 return;
561 }
562
dbd9e2f1
AD
563 notify("");
564
e6cb77a0
AD
565 editUser(rows[0]);
566}
567
568function resetSelectedUserPass() {
e6cb77a0 569
fbf7d545 570 try {
e6cb77a0 571
fbf7d545 572 var rows = getSelectedUsers();
fb5662de 573
fbf7d545
AD
574 if (rows.length == 0) {
575 alert(__("No users are selected."));
576 return;
577 }
fb5662de 578
fbf7d545
AD
579 if (rows.length > 1) {
580 alert(__("Please select only one user."));
581 return;
582 }
fb5662de 583
fbf7d545 584 var ok = confirm(__("Reset password of selected user?"));
fb5662de 585
fbf7d545
AD
586 if (ok) {
587 notify_progress("Resetting password for selected user...");
fb5662de 588
fbf7d545 589 var id = rows[0];
fb5662de 590
f30ef1fa 591 var query = "?op=pref-users&method=resetPass&id=" +
fbf7d545 592 param_escape(id);
fb5662de 593
b4e75b2a
AD
594 new Ajax.Request("backend.php", {
595 parameters: query,
fb5662de 596 onComplete: function(transport) {
478d4067 597 notify_info(transport.responseText, true);
fbf7d545 598 } });
fb5662de 599
fbf7d545
AD
600 }
601
602 } catch (e) {
603 exception_error("resetSelectedUserPass", e);
69668465 604 }
e6cb77a0
AD
605}
606
717f5e64 607function selectedUserDetails() {
e6cb77a0 608
350468d0 609 try {
717f5e64 610
350468d0 611 var rows = getSelectedUsers();
fb5662de 612
350468d0
AD
613 if (rows.length == 0) {
614 alert(__("No users are selected."));
615 return;
616 }
fb5662de 617
350468d0
AD
618 if (rows.length > 1) {
619 alert(__("Please select only one user."));
620 return;
621 }
fb5662de 622
350468d0 623 var id = rows[0];
fb5662de 624
d9afd9b2
AD
625 var query = "backend.php?op=pref-users&method=userdetails&id=" + id;
626
627 if (dijit.byId("userDetailsDlg"))
628 dijit.byId("userDetailsDlg").destroyRecursive();
629
630 dialog = new dijit.Dialog({
631 id: "userDetailsDlg",
632 title: __("User details"),
633 style: "width: 600px",
634 execute: function() {
635 dialog.hide();
636 },
637 href: query});
638
639 dialog.show();
717f5e64 640
350468d0
AD
641 } catch (e) {
642 exception_error("selectedUserDetails", e);
717f5e64 643 }
c6c3a07f
AD
644}
645
a0d53889
AD
646
647function editSelectedFilter() {
648 var rows = getSelectedFilters();
649
650 if (rows.length == 0) {
f3977cf5 651 alert(__("No filters are selected."));
a0d53889
AD
652 return;
653 }
654
655 if (rows.length > 1) {
f3977cf5 656 alert(__("Please select only one filter."));
a0d53889
AD
657 return;
658 }
659
dbd9e2f1
AD
660 notify("");
661
a0d53889
AD
662 editFilter(rows[0]);
663
664}
665
6aff7845
AD
666function joinSelectedFilters() {
667 var rows = getSelectedFilters();
668
669 if (rows.length == 0) {
670 alert(__("No filters are selected."));
671 return;
672 }
673
674 var ok = confirm(__("Combine selected filters?"));
675
676 if (ok) {
677 notify_progress("Joining filters...");
678
679 var query = "?op=pref-filters&method=join&ids="+
680 param_escape(rows.toString());
681
682 console.log(query);
683
684 new Ajax.Request("backend.php", {
685 parameters: query,
686 onComplete: function(transport) {
687 updateFilterList();
688 } });
689 }
690}
a0d53889 691
508a81e1
AD
692function editSelectedFeed() {
693 var rows = getSelectedFeeds();
694
695 if (rows.length == 0) {
f3977cf5 696 alert(__("No feeds are selected."));
508a81e1
AD
697 return;
698 }
699
700 if (rows.length > 1) {
1e5548db 701 return editSelectedFeeds();
508a81e1
AD
702 }
703
dbd9e2f1
AD
704 notify("");
705
951906dc 706 editFeed(rows[0], {});
91ff844a
AD
707
708}
709
758e1c4a
AD
710function editSelectedFeeds() {
711
350468d0
AD
712 try {
713 var rows = getSelectedFeeds();
fb5662de 714
350468d0
AD
715 if (rows.length == 0) {
716 alert(__("No feeds are selected."));
717 return;
718 }
fb5662de 719
755c8f95 720 notify_progress("Loading, please wait...");
fb5662de 721
f30ef1fa 722 var query = "backend.php?op=pref-feeds&method=editfeeds&ids=" +
350468d0 723 param_escape(rows.toString());
758e1c4a 724
755c8f95
AD
725 console.log(query);
726
05acc0d6
AD
727 if (dijit.byId("feedEditDlg"))
728 dijit.byId("feedEditDlg").destroyRecursive();
729
755c8f95
AD
730 new Ajax.Request("backend.php", {
731 parameters: query,
732 onComplete: function(transport) {
05acc0d6 733
755c8f95
AD
734 notify("");
735
736 var dialog = new dijit.Dialog({
737 id: "feedEditDlg",
738 title: __("Edit Multiple Feeds"),
739 style: "width: 600px",
740 getChildByName: function (name) {
e331188f 741 var rv = null;
755c8f95
AD
742 this.getChildren().each(
743 function(child) {
744 if (child.name == name) {
745 rv = child;
746 return;
747 }
748 });
749 return rv;
750 },
751 toggleField: function (checkbox, elem, label) {
752 this.getChildByName(elem).attr('disabled', !checkbox.checked);
753
754 if ($(label))
755 if (checkbox.checked)
756 $(label).removeClassName('insensitive');
757 else
758 $(label).addClassName('insensitive');
759
760 },
761 execute: function() {
762 if (this.validate() && confirm(__("Save changes to selected feeds?"))) {
763 var query = dojo.objectToQuery(this.attr('value'));
764
765 /* Form.serialize ignores unchecked checkboxes */
766
755c8f95
AD
767 if (!query.match("&private=") &&
768 this.getChildByName('private').attr('disabled') == false) {
769 query = query + "&private=false";
770 }
fb5662de 771
755c8f95
AD
772 try {
773 if (!query.match("&cache_images=") &&
774 this.getChildByName('cache_images').attr('disabled') == false) {
775 query = query + "&cache_images=false";
776 }
777 } catch (e) { }
fb5662de 778
bfd61d3f
AD
779 try {
780 if (!query.match("&hide_images=") &&
781 this.getChildByName('hide_images').attr('disabled') == false) {
782 query = query + "&hide_images=false";
783 }
784 } catch (e) { }
785
755c8f95
AD
786 if (!query.match("&include_in_digest=") &&
787 this.getChildByName('include_in_digest').attr('disabled') == false) {
788 query = query + "&include_in_digest=false";
789 }
fb5662de 790
755c8f95
AD
791 if (!query.match("&always_display_enclosures=") &&
792 this.getChildByName('always_display_enclosures').attr('disabled') == false) {
793 query = query + "&always_display_enclosures=false";
794 }
05acc0d6 795
755c8f95
AD
796 if (!query.match("&mark_unread_on_update=") &&
797 this.getChildByName('mark_unread_on_update').attr('disabled') == false) {
798 query = query + "&mark_unread_on_update=false";
799 }
dd04ea81 800
755c8f95 801 console.log(query);
dd04ea81 802
755c8f95 803 notify_progress("Saving data...", true);
fb5662de 804
755c8f95
AD
805 new Ajax.Request("backend.php", {
806 parameters: query,
807 onComplete: function(transport) {
808 dialog.hide();
809 updateFeedList();
e331188f 810 }});
755c8f95
AD
811 }
812 },
813 content: transport.responseText});
05acc0d6 814
755c8f95 815 dialog.show();
05acc0d6 816
755c8f95 817 } });
758e1c4a 818
350468d0
AD
819 } catch (e) {
820 exception_error("editSelectedFeeds", e);
758e1c4a 821 }
758e1c4a
AD
822}
823
e1218480
AD
824function opmlImportComplete(iframe) {
825 try {
826 if (!iframe.contentDocument.body.innerHTML) return false;
827
55f34b81
AD
828 Element.show(iframe);
829
e1218480
AD
830 notify('');
831
832 if (dijit.byId('opmlImportDlg'))
833 dijit.byId('opmlImportDlg').destroyRecursive();
834
835 var content = iframe.contentDocument.body.innerHTML;
836
837 dialog = new dijit.Dialog({
838 id: "opmlImportDlg",
839 title: __("OPML Import"),
840 style: "width: 600px",
841 onCancel: function() {
fb5662de 842 updateFeedList();
34aa9e20
AD
843 updateFilterList();
844 updateLabelList();
845 },
846 execute: function() {
847 updateFeedList();
848 updateFilterList();
849 updateLabelList();
850 this.hide();
e1218480
AD
851 },
852 content: content});
853
854 dialog.show();
855
856 } catch (e) {
857 exception_error("opmlImportComplete", e);
858 }
859}
860
b6a6e262 861function opmlImport() {
fb5662de 862
acac8448 863 var opml_file = $("opml_file");
9f311df6
AD
864
865 if (opml_file.value.length == 0) {
d2d75353 866 alert(__("Please choose an OPML file first."));
9f311df6
AD
867 return false;
868 } else {
4d7cd9ed 869 notify_progress("Importing, please wait...", true);
55f34b81
AD
870
871 Element.show("upload_iframe");
872
9f311df6
AD
873 return true;
874 }
875}
876
55f34b81 877
05acc0d6 878function updateFilterList() {
310fa2dd
AD
879 var user_search = $("filter_search");
880 var search = "";
881 if (user_search) { search = user_search.value; }
882
05acc0d6 883 new Ajax.Request("backend.php", {
310fa2dd 884 parameters: "?op=pref-filters&search=" + param_escape(search),
05acc0d6 885 onComplete: function(transport) {
66665fba
AD
886 dijit.byId('filterConfigTab').attr('content', transport.responseText);
887 notify("");
05acc0d6 888 } });
a0d53889
AD
889}
890
05acc0d6
AD
891function updateLabelList() {
892 new Ajax.Request("backend.php", {
893 parameters: "?op=pref-labels",
894 onComplete: function(transport) {
cbe50c80
AD
895 dijit.byId('labelConfigTab').attr('content', transport.responseText);
896 notify("");
05acc0d6 897 } });
48f0adb0
AD
898}
899
4255b24c 900function updatePrefsList() {
b4e75b2a 901 new Ajax.Request("backend.php", {
05acc0d6 902 parameters: "?op=pref-prefs",
fb5662de 903 onComplete: function(transport) {
cbe50c80
AD
904 dijit.byId('genConfigTab').attr('content', transport.responseText);
905 notify("");
e9802ead 906 } });
4255b24c
AD
907}
908
2cbdc95b
AD
909function updateSystemList() {
910 new Ajax.Request("backend.php", {
911 parameters: "?op=pref-system",
912 onComplete: function(transport) {
913 dijit.byId('systemConfigTab').attr('content', transport.responseText);
914 notify("");
915 } });
916}
917
f30ef1fa 918function selectTab(id, noupdate, method) {
b2caf812 919 try {
b2caf812 920 if (!noupdate) {
9e31e1b9 921 notify_progress("Loading, please wait...");
d15f8675 922
b2caf812
AD
923 if (id == "feedConfig") {
924 updateFeedList();
925 } else if (id == "filterConfig") {
926 updateFilterList();
927 } else if (id == "labelConfig") {
928 updateLabelList();
929 } else if (id == "genConfig") {
930 updatePrefsList();
931 } else if (id == "userConfig") {
932 updateUsersList();
2cbdc95b
AD
933 } else if (id == "systemConfig") {
934 updateSystemList();
b2caf812 935 }
d62796de
AD
936
937 var tab = dijit.byId(id + "Tab");
938 dijit.byId("pref-tabs").selectChild(tab);
939
f5a50b25 940 }
fb5662de 941
b2caf812
AD
942 } catch (e) {
943 exception_error("selectTab", e);
a7565293 944 }
a7565293
AD
945}
946
a7565293 947function init_second_stage() {
b2caf812 948 try {
4da47970 949
d437c8cf 950 document.onkeydown = pref_hotkey_handler;
fcc36744 951 loading_set_progress(50);
d62796de
AD
952 notify("");
953
556e5b46 954 dojo.addOnLoad(function() {
a8328019 955 var tab = getURLParam('tab');
556e5b46 956
a8328019
AD
957 if (tab) {
958 tab = dijit.byId(tab + "Tab");
959 if (tab) dijit.byId("pref-tabs").selectChild(tab);
960 }
b01b1b38 961
f30ef1fa 962 var method = getURLParam('method');
b01b1b38 963
f30ef1fa
AD
964 if (method == 'editFeed') {
965 var param = getURLParam('methodparam');
b01b1b38
AD
966
967 window.setTimeout('editFeed(' + param + ')', 100);
968 }
05acc0d6 969 });
556e5b46 970
78935092
AD
971 setTimeout("hotkey_prefix_timeout()", 5*1000);
972
b2caf812
AD
973 } catch (e) {
974 exception_error("init_second_stage", e);
975 }
a0d53889
AD
976}
977
007bda35 978function init() {
e2ec66a8 979
7719618b 980 try {
1985a5e0 981 dojo.registerModulePath("lib", "..");
107d0cf3 982 dojo.registerModulePath("fox", "../../js/");
1985a5e0 983
1354d172
AD
984 dojo.require("dijit.ColorPalette");
985 dojo.require("dijit.Dialog");
986 dojo.require("dijit.form.Button");
987 dojo.require("dijit.form.CheckBox");
988 dojo.require("dijit.form.DropDownButton");
989 dojo.require("dijit.form.FilteringSelect");
990 dojo.require("dijit.form.Form");
991 dojo.require("dijit.form.RadioButton");
992 dojo.require("dijit.form.Select");
993 dojo.require("dijit.form.SimpleTextarea");
994 dojo.require("dijit.form.TextBox");
995 dojo.require("dijit.form.ValidationTextBox");
996 dojo.require("dijit.InlineEditBox");
997 dojo.require("dijit.layout.AccordionContainer");
998 dojo.require("dijit.layout.BorderContainer");
999 dojo.require("dijit.layout.ContentPane");
1000 dojo.require("dijit.layout.TabContainer");
1001 dojo.require("dijit.Menu");
1002 dojo.require("dijit.ProgressBar");
1003 dojo.require("dijit.ProgressBar");
1004 dojo.require("dijit.Toolbar");
1005 dojo.require("dijit.Tree");
1006 dojo.require("dijit.tree.dndSource");
1007 dojo.require("dojo.data.ItemFileWriteStore");
1008
1985a5e0 1009 dojo.require("lib.CheckBoxTree");
2148e0d5 1010 dojo.require("fox.PrefFeedTree");
a740f4b5 1011 dojo.require("fox.PrefFilterTree");
fb8b2153 1012 dojo.require("fox.PrefLabelTree");
fcf70c51 1013
a089699c
AD
1014 dojo.parser.parse();
1015
df1c35f4
AD
1016 dojo.addOnLoad(function() {
1017 loading_set_progress(50);
fbf7d545 1018
6bfc97da
AD
1019 var clientTzOffset = new Date().getTimezoneOffset() * 60;
1020
df1c35f4 1021 new Ajax.Request("backend.php", {
6bfc97da
AD
1022 parameters: {op: "rpc", method: "sanityCheck",
1023 clientTzOffset: clientTzOffset },
fb5662de 1024 onComplete: function(transport) {
df1c35f4
AD
1025 backend_sanity_check_callback(transport);
1026 } });
1027 });
a7565293 1028
7719618b
AD
1029 } catch (e) {
1030 exception_error("init", e);
e2ec66a8 1031 }
007bda35 1032}
b1895692 1033
69668465 1034function validatePrefsReset() {
b652c1b7
AD
1035 try {
1036 var ok = confirm(__("Reset to defaults?"));
1037
1038 if (ok) {
1039
1395083e 1040 query = "?op=pref-prefs&method=resetconfig";
84c7b824 1041 console.log(query);
b652c1b7 1042
e9802ead
AD
1043 new Ajax.Request("backend.php", {
1044 parameters: query,
fb5662de 1045 onComplete: function(transport) {
bf878338
AD
1046 updatePrefsList();
1047 notify_info(transport.responseText);
e9802ead
AD
1048 } });
1049
b652c1b7
AD
1050 }
1051
1052 } catch (e) {
d9084cf2 1053 exception_error("validatePrefsReset", e);
b652c1b7
AD
1054 }
1055
1056 return false;
1057
69668465 1058}
f9cb39ac 1059
d437c8cf
AD
1060function pref_hotkey_handler(e) {
1061 try {
b8cb4d08 1062
e33b0b80 1063 if (e.target.nodeName == "INPUT" || e.target.nodeName == "TEXTAREA") return;
18606807 1064
e331188f 1065 var keycode = false;
746dcf42
AD
1066 var shift_key = false;
1067
78935092
AD
1068 var cmdline = $('cmdline');
1069
746dcf42
AD
1070 try {
1071 shift_key = e.shiftKey;
1072 } catch (e) {
1073
1074 }
1075
d437c8cf
AD
1076 if (window.event) {
1077 keycode = window.event.keyCode;
1078 } else if (e) {
1079 keycode = e.which;
1080 }
746dcf42 1081
eec498c3
AD
1082 var keychar = String.fromCharCode(keycode);
1083
746dcf42 1084 if (keycode == 27) { // escape
746dcf42 1085 hotkey_prefix = false;
fb5662de 1086 }
746dcf42 1087
746dcf42 1088 if (keycode == 16) return; // ignore lone shift
49c6c279 1089 if (keycode == 17) return; // ignore lone ctrl
746dcf42 1090
b8cb4d08
AD
1091 if (!shift_key) keychar = keychar.toLowerCase();
1092
1093 var hotkeys = getInitParam("hotkeys");
1094
1095 if (!hotkey_prefix && hotkeys[0].indexOf(keychar) != -1) {
78935092
AD
1096
1097 var date = new Date();
1098 var ts = Math.round(date.getTime() / 1000);
1099
b8cb4d08 1100 hotkey_prefix = keychar;
78935092
AD
1101 hotkey_prefix_pressed = ts;
1102
1103 cmdline.innerHTML = keychar;
1104 Element.show(cmdline);
1105
b8cb4d08 1106 return true;
746dcf42
AD
1107 }
1108
78935092
AD
1109 Element.hide(cmdline);
1110
b8cb4d08
AD
1111 var hotkey = keychar.search(/[a-zA-Z0-9]/) != -1 ? keychar : "(" + keycode + ")";
1112 hotkey = hotkey_prefix ? hotkey_prefix + " " + hotkey : hotkey;
1113 hotkey_prefix = false;
8d727bfc 1114
b8cb4d08
AD
1115 var hotkey_action = false;
1116 var hotkeys = getInitParam("hotkeys");
746dcf42 1117
b8cb4d08
AD
1118 for (sequence in hotkeys[1]) {
1119 if (sequence == hotkey) {
1120 hotkey_action = hotkeys[1][sequence];
1121 break;
746dcf42
AD
1122 }
1123 }
1124
b8cb4d08
AD
1125 switch (hotkey_action) {
1126 case "feed_subscribe":
1127 quickAddFeed();
4ba1f8bb 1128 return false;
b8cb4d08
AD
1129 case "create_label":
1130 addLabel();
4ba1f8bb 1131 return false;
b8cb4d08
AD
1132 case "create_filter":
1133 quickAddFilter();
4ba1f8bb 1134 return false;
b8cb4d08
AD
1135 case "help_dialog":
1136 //helpDialog("prefs");
1137 return false;
1138 default:
1139 console.log("unhandled action: " + hotkey_action + "; hotkey: " + hotkey);
d437c8cf 1140 }
d437c8cf
AD
1141
1142 } catch (e) {
b8cb4d08 1143 exception_error("hotkey_handler", e);
d437c8cf
AD
1144 }
1145}
1146
5ef071e0 1147function removeCategory(id, item) {
a349077c 1148 try {
350468d0 1149
5ef071e0 1150 var ok = confirm(__("Remove category %s? Any nested feeds would be placed into Uncategorized.").replace("%s", item.name));
da1f74c9 1151
5ef071e0 1152 if (ok) {
28537341 1153 var query = "?op=pref-feeds&method=removeCat&ids="+
5ef071e0 1154 param_escape(id);
fb5662de 1155
5ef071e0 1156 notify_progress("Removing category...");
fb5662de 1157
5ef071e0
AD
1158 new Ajax.Request("backend.php", {
1159 parameters: query,
1160 onComplete: function(transport) {
1161 notify('');
1162 updateFeedList();
1163 } });
1164 }
fb5662de 1165
5ef071e0
AD
1166 } catch (e) {
1167 exception_error("removeCategory", e);
1168 }
1169}
fb5662de 1170
fd26d5bf
AD
1171function removeSelectedCategories() {
1172
1173 var sel_rows = getSelectedCategories();
1174
1175 if (sel_rows.length > 0) {
1176
1177 var ok = confirm(__("Remove selected categories?"));
1178
1179 if (ok) {
1180 notify_progress("Removing selected categories...");
1181
1182 var query = "?op=pref-feeds&method=removeCat&ids="+
1183 param_escape(sel_rows.toString());
1184
1185 new Ajax.Request("backend.php", {
1186 parameters: query,
1187 onComplete: function(transport) {
1188 updateFeedList();
1189 } });
1190
1191 }
1192 } else {
1193 alert(__("No categories are selected."));
1194 }
1195
1196 return false;
1197}
1198
5ef071e0
AD
1199function createCategory() {
1200 try {
1201 var title = prompt(__("Category title:"));
fb5662de 1202
5ef071e0 1203 if (title) {
da1f74c9 1204
5ef071e0 1205 notify_progress("Creating category...");
da1f74c9 1206
28537341 1207 var query = "?op=pref-feeds&method=addCat&cat=" +
5ef071e0 1208 param_escape(title);
da1f74c9 1209
5ef071e0
AD
1210 new Ajax.Request("backend.php", {
1211 parameters: query,
1212 onComplete: function(transport) {
1213 notify('');
1214 updateFeedList();
1215 } });
1216 }
5ba53dde 1217
a349077c 1218 } catch (e) {
5ef071e0 1219 exception_error("createCategory", e);
a349077c 1220 }
9c483746 1221}
a3656a41 1222
8ffd2011
AD
1223function showInactiveFeeds() {
1224 try {
bc6fa236 1225 var query = "backend.php?op=pref-feeds&method=inactiveFeeds";
8ffd2011
AD
1226
1227 if (dijit.byId("inactiveFeedsDlg"))
1228 dijit.byId("inactiveFeedsDlg").destroyRecursive();
1229
1230 dialog = new dijit.Dialog({
1231 id: "inactiveFeedsDlg",
1232 title: __("Feeds without recent updates"),
1233 style: "width: 600px",
1234 getSelectedFeeds: function() {
1235 return getSelectedTableRowIds("prefInactiveFeedList");
1236 },
1237 removeSelected: function() {
1238 var sel_rows = this.getSelectedFeeds();
1239
1240 console.log(sel_rows);
1241
1242 if (sel_rows.length > 0) {
1243 var ok = confirm(__("Remove selected feeds?"));
1244
1245 if (ok) {
1246 notify_progress("Removing selected feeds...", true);
1247
f30ef1fa 1248 var query = "?op=pref-feeds&method=remove&ids="+
8ffd2011
AD
1249 param_escape(sel_rows.toString());
1250
1251 new Ajax.Request("backend.php", {
1252 parameters: query,
1253 onComplete: function(transport) {
1254 notify('');
1255 dialog.hide();
1256 updateFeedList();
1257 } });
1258 }
1259
1260 } else {
1261 alert(__("No feeds are selected."));
1262 }
1263 },
1264 execute: function() {
1265 if (this.validate()) {
1266 }
1267 },
1268 href: query});
1269
1270 dialog.show();
1271
1272 } catch (e) {
1273 exception_error("showInactiveFeeds", e);
1274 }
1275
1276}
1277
ef7b7bbd
MK
1278function opmlRegenKey() {
1279
1280 try {
1281 var ok = confirm(__("Replace current OPML publishing address with a new one?"));
fb5662de 1282
ef7b7bbd 1283 if (ok) {
fb5662de 1284
ef7b7bbd 1285 notify_progress("Trying to change address...", true);
fb5662de 1286
195187c4 1287 var query = "?op=pref-feeds&method=regenOPMLKey";
fb5662de 1288
ef7b7bbd
MK
1289 new Ajax.Request("backend.php", {
1290 parameters: query,
1291 onComplete: function(transport) {
91d16ff1
AD
1292 var reply = JSON.parse(transport.responseText);
1293
1294 var new_link = reply.link;
fb5662de 1295
ef7b7bbd 1296 var e = $('pub_opml_url');
fb5662de 1297
ef7b7bbd 1298 if (new_link) {
91d16ff1
AD
1299 e.href = new_link;
1300 e.innerHTML = new_link;
fb5662de 1301
ef7b7bbd
MK
1302 new Effect.Highlight(e);
1303
1304 notify('');
fb5662de 1305
ef7b7bbd
MK
1306 } else {
1307 notify_error("Could not change feed URL.");
1308 }
1309 } });
1310 }
1311 } catch (e) {
1312 exception_error("opmlRegenKey", e);
1313 }
1314 return false;
1315}
c4a36709
AD
1316
1317function feedActionChange() {
1318 try {
acac8448 1319 var chooser = $("feedActionChooser");
c4a36709
AD
1320 var opid = chooser[chooser.selectedIndex].value;
1321
1322 chooser.selectedIndex = 0;
1323 feedActionGo(opid);
1324 } catch (e) {
1325 exception_error("feedActionChange", e);
1326 }
1327}
1328
fb5662de 1329function feedActionGo(op) {
c4a36709
AD
1330 try {
1331 if (op == "facEdit") {
cd935c42
AD
1332
1333 var rows = getSelectedFeeds();
1334
1335 if (rows.length > 1) {
1336 editSelectedFeeds();
1337 } else {
1338 editSelectedFeed();
1339 }
c4a36709
AD
1340 }
1341
1342 if (op == "facClear") {
1343 clearSelectedFeeds();
1344 }
1345
1346 if (op == "facPurge") {
1347 purgeSelectedFeeds();
1348 }
1349
e88a65f4
AD
1350 if (op == "facEditCats") {
1351 editFeedCats();
1352 }
1353
fee840fb
AD
1354 if (op == "facRescore") {
1355 rescoreSelectedFeeds();
1356 }
1357
c4a36709
AD
1358 if (op == "facUnsubscribe") {
1359 removeSelectedFeeds();
1360 }
1361
1362 } catch (e) {
1363 exception_error("feedActionGo", e);
1364
1365 }
1366}
1367
1368function clearFeedArticles(feed_id) {
1369
1370 notify_progress("Clearing feed...");
1371
f30ef1fa 1372 var query = "?op=pref-feeds&quiet=1&method=clear&id=" + feed_id;
c4a36709 1373
b4e75b2a
AD
1374 new Ajax.Request("backend.php", {
1375 parameters: query,
c4a36709
AD
1376 onComplete: function(transport) {
1377 notify('');
1378 } });
1379
1380 return false;
1381}
1382
fee840fb
AD
1383function rescoreSelectedFeeds() {
1384
fee840fb
AD
1385 var sel_rows = getSelectedFeeds();
1386
1387 if (sel_rows.length > 0) {
1388
ef1b0366
AD
1389 //var ok = confirm(__("Rescore last 100 articles in selected feeds?"));
1390 var ok = confirm(__("Rescore articles in selected feeds?"));
fee840fb
AD
1391
1392 if (ok) {
3df4869b 1393 notify_progress("Rescoring selected feeds...", true);
fb5662de 1394
f30ef1fa 1395 var query = "?op=pref-feeds&method=rescore&quiet=1&ids="+
60715b53
AD
1396 param_escape(sel_rows.toString());
1397
b4e75b2a
AD
1398 new Ajax.Request("backend.php", {
1399 parameters: query,
60715b53
AD
1400 onComplete: function(transport) {
1401 notify_callback2(transport);
1402 } });
1403
fee840fb
AD
1404 }
1405 } else {
1406 alert(__("No feeds are selected."));
1407 }
1408
1409 return false;
1410}
c4a36709 1411
95a948a5 1412function rescore_all_feeds() {
60715b53 1413 var ok = confirm(__("Rescore all articles? This operation may take a lot of time."));
95a948a5 1414
60715b53
AD
1415 if (ok) {
1416 notify_progress("Rescoring feeds...", true);
95a948a5 1417
f30ef1fa 1418 var query = "?op=pref-feeds&method=rescoreAll&quiet=1";
60715b53 1419
b4e75b2a
AD
1420 new Ajax.Request("backend.php", {
1421 parameters: query,
60715b53
AD
1422 onComplete: function(transport) {
1423 notify_callback2(transport);
1424 } });
1425 }
a80b05ea 1426}
a44db887 1427
b8776a07
AD
1428function labelColorReset() {
1429 try {
1430 var labels = getSelectedLabels();
1431
f695cdb2
AD
1432 if (labels.length > 0) {
1433 var ok = confirm(__("Reset selected labels to default colors?"));
b8776a07 1434
f695cdb2 1435 if (ok) {
cbe50c80 1436 var query = "?op=pref-labels&method=colorreset&ids="+
f695cdb2 1437 param_escape(labels.toString());
b8776a07 1438
f695cdb2
AD
1439 new Ajax.Request("backend.php", {
1440 parameters: query,
1441 onComplete: function(transport) {
cbe50c80 1442 updateLabelList();
b8776a07 1443 } });
f695cdb2
AD
1444 }
1445
1446 } else {
1447 alert(__("No labels are selected."));
b8776a07
AD
1448 }
1449
1450 } catch (e) {
1451 exception_error("labelColorReset", e);
1452 }
1453}
1454
b6ba48c1 1455
a5819bb3
AD
1456function inPreferences() {
1457 return true;
1458}
d9084cf2
AD
1459
1460function editProfiles() {
22988692
AD
1461 try {
1462
1463 if (dijit.byId("profileEditDlg"))
1464 dijit.byId("profileEditDlg").destroyRecursive();
1465
9d76e754 1466 var query = "backend.php?op=pref-prefs&method=editPrefProfiles";
22988692
AD
1467
1468 dialog = new dijit.Dialog({
1469 id: "profileEditDlg",
1470 title: __("Settings Profiles"),
1471 style: "width: 600px",
1472 getSelectedProfiles: function() {
1473 return getSelectedTableRowIds("prefFeedProfileList");
1474 },
1475 removeSelected: function() {
1476 var sel_rows = this.getSelectedProfiles();
fb5662de
AD
1477
1478 if (sel_rows.length > 0) {
22988692 1479 var ok = confirm(__("Remove selected profiles? Active and default profiles will not be removed."));
fb5662de 1480
22988692
AD
1481 if (ok) {
1482 notify_progress("Removing selected profiles...", true);
fb5662de 1483
f30ef1fa 1484 var query = "?op=rpc&method=remprofiles&ids="+
22988692 1485 param_escape(sel_rows.toString());
fb5662de 1486
22988692
AD
1487 new Ajax.Request("backend.php", {
1488 parameters: query,
1489 onComplete: function(transport) {
1490 notify('');
1491 editProfiles();
1492 } });
fb5662de 1493
22988692 1494 }
fb5662de
AD
1495
1496 } else {
1497 alert(__("No profiles are selected."));
22988692
AD
1498 }
1499 },
1500 activateProfile: function() {
1501 var sel_rows = this.getSelectedProfiles();
fb5662de 1502
22988692 1503 if (sel_rows.length == 1) {
fb5662de 1504
22988692 1505 var ok = confirm(__("Activate selected profile?"));
fb5662de 1506
22988692
AD
1507 if (ok) {
1508 notify_progress("Loading, please wait...");
fb5662de 1509
f30ef1fa 1510 var query = "?op=rpc&method=setprofile&id="+
22988692 1511 param_escape(sel_rows.toString());
fb5662de 1512
22988692
AD
1513 new Ajax.Request("backend.php", {
1514 parameters: query,
1515 onComplete: function(transport) {
1516 window.location.reload();
1517 } });
1518 }
fb5662de 1519
22988692
AD
1520 } else {
1521 alert(__("Please choose a profile to activate."));
fb5662de
AD
1522 }
1523 },
22988692
AD
1524 addProfile: function() {
1525 if (this.validate()) {
1526 notify_progress("Creating profile...", true);
1527
f30ef1fa 1528 var query = "?op=rpc&method=addprofile&title=" +
22988692
AD
1529 param_escape(dialog.attr('value').newprofile);
1530
1531 new Ajax.Request("backend.php", {
1532 parameters: query,
1533 onComplete: function(transport) {
1534 notify('');
1535 editProfiles();
1536 } });
1537
1538 }
1539 },
1540 execute: function() {
1541 if (this.validate()) {
1542 }
1543 },
1544 href: query});
1545
1546 dialog.show();
1547 } catch (e) {
1548 exception_error("editProfiles", e);
1549 }
d9084cf2
AD
1550}
1551
1552function activatePrefProfile() {
1553
1554 var sel_rows = getSelectedFeedCats();
1555
1556 if (sel_rows.length == 1) {
1557
1558 var ok = confirm(__("Activate selected profile?"));
1559
1560 if (ok) {
1561 notify_progress("Loading, please wait...");
fb5662de 1562
f30ef1fa 1563 var query = "?op=rpc&method=setprofile&id="+
d9084cf2
AD
1564 param_escape(sel_rows.toString());
1565
1566 new Ajax.Request("backend.php", {
1567 parameters: query,
1568 onComplete: function(transport) {
1569 window.location.reload();
1570 } });
1571 }
1572
1573 } else {
1574 alert(__("Please choose a profile to activate."));
1575 }
1576
1577 return false;
1578}
1579
8d86f15f
AD
1580function clearFeedAccessKeys() {
1581
1582 var ok = confirm(__("This will invalidate all previously generated feed URLs. Continue?"));
1583
1584 if (ok) {
1585 notify_progress("Clearing URLs...");
1586
195187c4 1587 var query = "?op=pref-feeds&method=clearKeys";
8d86f15f
AD
1588
1589 new Ajax.Request("backend.php", {
1590 parameters: query,
fb5662de 1591 onComplete: function(transport) {
8d86f15f
AD
1592 notify_info("Generated URLs cleared.");
1593 } });
1594 }
fb5662de 1595
8d86f15f
AD
1596 return false;
1597}
1598
a86ba0a6
AD
1599function resetFilterOrder() {
1600 try {
1601 notify_progress("Loading, please wait...");
1602
1603 new Ajax.Request("backend.php", {
1604 parameters: "?op=pref-filters&method=filtersortreset",
1605 onComplete: function(transport) {
1606 updateFilterList();
1607 } });
1608
1609
1610 } catch (e) {
1611 exception_error("resetFilterOrder");
1612 }
1613}
1614
1615
7b8a143f
AD
1616function resetFeedOrder() {
1617 try {
1618 notify_progress("Loading, please wait...");
1619
1620 new Ajax.Request("backend.php", {
f30ef1fa 1621 parameters: "?op=pref-feeds&method=feedsortreset",
7b8a143f 1622 onComplete: function(transport) {
fb5662de 1623 updateFeedList();
7b8a143f
AD
1624 } });
1625
1626
1627 } catch (e) {
1628 exception_error("resetFeedOrder");
1629 }
1630}
1631
1632function resetCatOrder() {
1633 try {
1634 notify_progress("Loading, please wait...");
1635
1636 new Ajax.Request("backend.php", {
f30ef1fa 1637 parameters: "?op=pref-feeds&method=catsortreset",
7b8a143f 1638 onComplete: function(transport) {
fb5662de 1639 updateFeedList();
7b8a143f
AD
1640 } });
1641
1642
1643 } catch (e) {
1644 exception_error("resetCatOrder");
1645 }
1646}
1647
1648function editCat(id, item, event) {
1649 try {
1650 var new_name = prompt(__('Rename category to:'), item.name);
1651
1652 if (new_name && new_name != item.name) {
1653
1654 notify_progress("Loading, please wait...");
1655
1656 new Ajax.Request("backend.php", {
1657 parameters: {
fb5662de 1658 op: 'pref-feeds',
f30ef1fa 1659 method: 'renamecat',
7b8a143f
AD
1660 id: id,
1661 title: new_name,
1662 },
1663 onComplete: function(transport) {
fb5662de 1664 updateFeedList();
7b8a143f
AD
1665 } });
1666 }
1667
1668 } catch (e) {
1669 exception_error("editCat", e);
1670 }
1671}
fb8b2153
AD
1672
1673function editLabel(id, event) {
1674 try {
f30ef1fa 1675 var query = "backend.php?op=pref-labels&method=edit&id=" +
fb8b2153
AD
1676 param_escape(id);
1677
48b05a29
AD
1678 if (dijit.byId("labelEditDlg"))
1679 dijit.byId("labelEditDlg").destroyRecursive();
1680
1681 dialog = new dijit.Dialog({
1682 id: "labelEditDlg",
1683 title: __("Label Editor"),
1684 style: "width: 600px",
05acc0d6
AD
1685 setLabelColor: function(id, fg, bg) {
1686
1687 var kind = '';
1688 var color = '';
fb5662de 1689
05acc0d6
AD
1690 if (fg && bg) {
1691 kind = 'both';
1692 } else if (fg) {
1693 kind = 'fg';
1694 color = fg;
1695 } else if (bg) {
1696 kind = 'bg';
1697 color = bg;
1698 }
fb5662de 1699
cbe50c80 1700 var query = "?op=pref-labels&method=colorset&kind="+kind+
fb5662de 1701 "&ids=" + param_escape(id) + "&fg=" + param_escape(fg) +
05acc0d6 1702 "&bg=" + param_escape(bg) + "&color=" + param_escape(color);
fb5662de 1703
05acc0d6 1704 // console.log(query);
fb5662de 1705
05acc0d6 1706 var e = $("LICID-" + id);
fb5662de
AD
1707
1708 if (e) {
05acc0d6
AD
1709 if (fg) e.style.color = fg;
1710 if (bg) e.style.backgroundColor = bg;
1711 }
fb5662de 1712
05acc0d6
AD
1713 new Ajax.Request("backend.php", { parameters: query });
1714
1715 updateFilterList();
1716 },
48b05a29
AD
1717 execute: function() {
1718 if (this.validate()) {
48b05a29
AD
1719 var caption = this.attr('value').caption;
1720 var fg_color = this.attr('value').fg_color;
1721 var bg_color = this.attr('value').bg_color;
1722 var query = dojo.objectToQuery(this.attr('value'));
1723
1724 dijit.byId('labelTree').setNameById(id, caption);
05acc0d6 1725 this.setLabelColor(id, fg_color, bg_color);
48b05a29
AD
1726 this.hide();
1727
1728 new Ajax.Request("backend.php", {
1729 parameters: query,
1730 onComplete: function(transport) {
fb5662de 1731 updateFilterList();
48b05a29
AD
1732 } });
1733 }
1734 },
1735 href: query});
fb8b2153 1736
48b05a29 1737 dialog.show();
fb8b2153
AD
1738
1739 } catch (e) {
1740 exception_error("editLabel", e);
1741 }
1742}
018caf6f 1743
88e4e597
AD
1744
1745function customizeCSS() {
1746 try {
00e34741 1747 var query = "backend.php?op=pref-prefs&method=customizeCSS";
88e4e597
AD
1748
1749 if (dijit.byId("cssEditDlg"))
1750 dijit.byId("cssEditDlg").destroyRecursive();
1751
1752 dialog = new dijit.Dialog({
1753 id: "cssEditDlg",
1754 title: __("Customize stylesheet"),
1755 style: "width: 600px",
1756 execute: function() {
1757 notify_progress('Saving data...', true);
1758 new Ajax.Request("backend.php", {
1759 parameters: dojo.objectToQuery(this.attr('value')),
fb5662de 1760 onComplete: function(transport) {
88e4e597
AD
1761 notify('');
1762 window.location.reload();
1763 } });
1764
1765 },
1766 href: query});
1767
1768 dialog.show();
1769
1770 } catch (e) {
1771 exception_error("customizeCSS", e);
1772 }
1773}
3d72afa1
AD
1774
1775function insertSSLserial(value) {
1776 try {
1777 dijit.byId("SSL_CERT_SERIAL").attr('value', value);
1778 } catch (e) {
1779 exception_error("insertSSLcerial", e);
1780 }
1781}
373266eb 1782
41f68571
AD
1783function gotoExportOpml(filename, settings) {
1784 tmp = settings ? 1 : 0;
d75409bf 1785 document.location.href = "backend.php?op=opml&method=export&filename=" + filename + "&settings=" + tmp;
41f68571
AD
1786}
1787
1788
33f0fdd0
AD
1789function batchSubscribe() {
1790 try {
201bb1ca 1791 var query = "backend.php?op=pref-feeds&method=batchSubscribe";
33f0fdd0 1792
c714cee7
AD
1793 // overlapping widgets
1794 if (dijit.byId("batchSubDlg")) dijit.byId("batchSubDlg").destroyRecursive();
1795 if (dijit.byId("feedAddDlg")) dijit.byId("feedAddDlg").destroyRecursive();
33f0fdd0
AD
1796
1797 var dialog = new dijit.Dialog({
1798 id: "batchSubDlg",
1799 title: __("Batch subscribe"),
1800 style: "width: 600px",
1801 execute: function() {
1802 if (this.validate()) {
1803 console.log(dojo.objectToQuery(this.attr('value')));
1804
1805 notify_progress(__("Subscribing to feeds..."), true);
1806
1807 new Ajax.Request("backend.php", {
1808 parameters: dojo.objectToQuery(this.attr('value')),
1809 onComplete: function(transport) {
4b298c86
AD
1810 notify("");
1811 updateFeedList();
1812 dialog.hide();
33f0fdd0
AD
1813 } });
1814 }
1815 },
1816 href: query});
1817
1818 dialog.show();
1819 } catch (e) {
1820 exception_error("batchSubscribe", e);
1821 }
1822}
55f34b81 1823
27211afe 1824
f9ebb32c
AD
1825function toggleAdvancedPrefs() {
1826 try {
1827 notify_progress("Loading, please wait...");
1828
1829 new Ajax.Request("backend.php", {
1830 parameters: "?op=pref-prefs&method=toggleadvanced",
1831 onComplete: function(transport) {
1832 updatePrefsList();
1833 } });
1834
1835 } catch (e) {
1836 exception_error("toggleAdvancedPrefs", e);
1837 }
1838}
5d9abb1e
AD
1839
1840function clearPluginData(name) {
1841 try {
1842 if (confirm(__("Clear stored data for this plugin?"))) {
1843 notify_progress("Loading, please wait...");
1844
1845 new Ajax.Request("backend.php", {
1846 parameters: "?op=pref-prefs&method=clearplugindata&name=" + param_escape(name),
1847 onComplete: function(transport) {
1848 notify('');
1849 updatePrefsList();
1850 } });
1851 }
1852 } catch (e) {
1853 exception_error("clearPluginData", e);
1854 }
1855}
52e7b5a0
AD
1856
1857function clearSqlLog() {
1858
1859 if (confirm(__("Clear all messages in the error log?"))) {
1860
1861 notify_progress("Loading, please wait...");
1862 var query = "?op=pref-system&method=clearLog";
1863
1864 new Ajax.Request("backend.php", {
1865 parameters: query,
1866 onComplete: function(transport) {
1867 updateSystemList();
1868 } });
1869
1870 }
1871}
1872
1873