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