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