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