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