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