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