]> git.wh0rd.org - tt-rss.git/blame - js/prefs.js
some more eslint-related stuff
[tt-rss.git] / js / prefs.js
CommitLineData
4508e310
AD
1/* global dijit, __ */
2
3let init_params = [];
a7565293 4
8572e010
AD
5let hotkey_prefix = false;
6let hotkey_prefix_pressed = false;
7a09510c 7
8572e010 8let seq = "";
a998dbef 9
66665fba
AD
10function notify_callback2(transport, sticky) {
11 notify_info(transport.responseText, sticky);
60715b53
AD
12}
13
05185108 14function updateFeedList() {
16270276 15
424e28db
AD
16 const user_search = $("feed_search");
17 let search = "";
16270276
AD
18 if (user_search) { search = user_search.value; }
19
b4e75b2a 20 new Ajax.Request("backend.php", {
16270276 21 parameters: "?op=pref-feeds&search=" + param_escape(search),
fb5662de 22 onComplete: function(transport) {
cbe50c80
AD
23 dijit.byId('feedConfigTab').attr('content', transport.responseText);
24 selectTab("feedConfig", true);
25 notify("");
60715b53 26 } });
007bda35
AD
27}
28
f9c1f8b0 29function checkInactiveFeeds() {
1bfe1d7b
AD
30 new Ajax.Request("backend.php", {
31 parameters: "?op=pref-feeds&method=getinactivefeeds",
32 onComplete: function (transport) {
33 if (parseInt(transport.responseText) > 0) {
34 Element.show(dijit.byId("pref_feeds_inactive_btn").domNode);
35 }
36 }
37 });
f9c1f8b0 38}
373266eb 39
79ec0f2f 40function updateUsersList(sort_key) {
424e28db
AD
41 const user_search = $("user_search");
42 let search = "";
1bfe1d7b
AD
43 if (user_search) {
44 search = user_search.value;
45 }
fb5662de 46
424e28db
AD
47 const query = "?op=pref-users&sort=" +
48 param_escape(sort_key) +
1bfe1d7b 49 "&search=" + param_escape(search);
e6cb77a0 50
1bfe1d7b
AD
51 new Ajax.Request("backend.php", {
52 parameters: query,
53 onComplete: function (transport) {
54 dijit.byId('userConfigTab').attr('content', transport.responseText);
55 selectTab("userConfig", true)
56 notify("");
57 }
58 });
e6cb77a0
AD
59}
60
e6cb77a0 61function addUser() {
424e28db 62 const login = prompt(__("Please enter login:"), "");
e6cb77a0 63
1bfe1d7b
AD
64 if (login == null) {
65 return false;
66 }
fb5662de 67
1bfe1d7b
AD
68 if (login == "") {
69 alert(__("Can't create user: no login specified."));
70 return false;
71 }
fb5662de 72
1bfe1d7b 73 notify_progress("Adding user...");
fb5662de 74
424e28db 75 const query = "?op=pref-users&method=add&login=" +
1bfe1d7b 76 param_escape(login);
fb5662de 77
1bfe1d7b
AD
78 new Ajax.Request("backend.php", {
79 parameters: query,
80 onComplete: function (transport) {
81 notify_callback2(transport);
82 updateUsersList();
83 }
84 });
e6cb77a0 85
e6cb77a0
AD
86}
87
05185108 88function editUser(id) {
e6cb77a0 89
424e28db 90 const query = "backend.php?op=pref-users&method=edit&id=" +
1bfe1d7b 91 param_escape(id);
222a61c2 92
1bfe1d7b
AD
93 if (dijit.byId("userEditDlg"))
94 dijit.byId("userEditDlg").destroyRecursive();
222a61c2 95
ad04bbf8 96 var dialog = new dijit.Dialog({
1bfe1d7b
AD
97 id: "userEditDlg",
98 title: __("User Editor"),
99 style: "width: 600px",
100 execute: function () {
101 if (this.validate()) {
102 notify_progress("Saving data...", true);
222a61c2 103
424e28db 104 const query = dojo.formToQuery("user_edit_form");
e6cb77a0 105
1bfe1d7b
AD
106 new Ajax.Request("backend.php", {
107 parameters: query,
108 onComplete: function (transport) {
109 dialog.hide();
110 updateUsersList();
111 }
112 });
113 }
114 },
115 href: query
116 });
fb5662de 117
1bfe1d7b 118 dialog.show();
e6cb77a0
AD
119}
120
261226a3 121function editFilter(id) {
261226a3 122
424e28db 123 const query = "backend.php?op=pref-filters&method=edit&id=" + param_escape(id);
261226a3 124
1bfe1d7b
AD
125 if (dijit.byId("feedEditDlg"))
126 dijit.byId("feedEditDlg").destroyRecursive();
261226a3 127
1bfe1d7b
AD
128 if (dijit.byId("filterEditDlg"))
129 dijit.byId("filterEditDlg").destroyRecursive();
ec630524 130
ad04bbf8 131 var dialog = new dijit.Dialog({
1bfe1d7b
AD
132 id: "filterEditDlg",
133 title: __("Edit Filter"),
134 style: "width: 600px",
ec630524 135
1bfe1d7b 136 test: function () {
424e28db 137 const query = "backend.php?" + dojo.formToQuery("filter_edit_form") + "&savemode=test";
fb5662de 138
1bfe1d7b
AD
139 editFilterTest(query);
140 },
141 selectRules: function (select) {
142 $$("#filterDlg_Matches input[type=checkbox]").each(function (e) {
143 e.checked = select;
144 if (select)
145 e.parentNode.addClassName("Selected");
146 else
147 e.parentNode.removeClassName("Selected");
148 });
149 },
150 selectActions: function (select) {
151 $$("#filterDlg_Actions input[type=checkbox]").each(function (e) {
152 e.checked = select;
90e4e726 153
1bfe1d7b
AD
154 if (select)
155 e.parentNode.addClassName("Selected");
156 else
157 e.parentNode.removeClassName("Selected");
fb5662de 158
1bfe1d7b
AD
159 });
160 },
161 editRule: function (e) {
424e28db
AD
162 const li = e.parentNode;
163 const rule = li.getElementsByTagName("INPUT")[1].value;
1bfe1d7b
AD
164 addFilterRule(li, rule);
165 },
166 editAction: function (e) {
424e28db
AD
167 const li = e.parentNode;
168 const action = li.getElementsByTagName("INPUT")[1].value;
1bfe1d7b
AD
169 addFilterAction(li, action);
170 },
171 removeFilter: function () {
424e28db 172 const msg = __("Remove filter?");
1bfe1d7b
AD
173
174 if (confirm(msg)) {
175 this.hide();
90e4e726 176
1bfe1d7b 177 notify_progress("Removing filter...");
90e4e726 178
424e28db 179 const id = this.attr('value').id;
141fb6e3 180
424e28db 181 const query = "?op=pref-filters&method=remove&ids=" +
1bfe1d7b 182 param_escape(id);
141fb6e3 183
1bfe1d7b
AD
184 new Ajax.Request("backend.php", {
185 parameters: query,
186 onComplete: function (transport) {
187 updateFilterList();
188 }
189 });
190 }
191 },
192 addAction: function () {
193 addFilterAction();
194 },
195 addRule: function () {
196 addFilterRule();
197 },
198 deleteAction: function () {
199 $$("#filterDlg_Actions li[class*=Selected]").each(function (e) {
200 e.parentNode.removeChild(e)
201 });
202 },
203 deleteRule: function () {
204 $$("#filterDlg_Matches li[class*=Selected]").each(function (e) {
205 e.parentNode.removeChild(e)
206 });
207 },
208 execute: function () {
209 if (this.validate()) {
141fb6e3 210
1bfe1d7b 211 notify_progress("Saving data...", true);
6aff7845 212
424e28db 213 const query = dojo.formToQuery("filter_edit_form");
d90868d7 214
1bfe1d7b 215 console.log(query);
a998dbef 216
1bfe1d7b
AD
217 new Ajax.Request("backend.php", {
218 parameters: query,
219 onComplete: function (transport) {
220 dialog.hide();
221 updateFilterList();
222 }
223 });
224 }
225 },
226 href: query
227 });
a0d53889 228
1bfe1d7b 229 dialog.show();
a0d53889
AD
230}
231
1bfe1d7b 232
91ff844a 233function getSelectedLabels() {
424e28db
AD
234 const tree = dijit.byId("labelTree");
235 const items = tree.model.getCheckedItems();
236 const rv = [];
fb8b2153
AD
237
238 items.each(function(item) {
239 rv.push(tree.model.store.getValue(item, 'bare_id'));
240 });
241
242 return rv;
91ff844a 243}
48f0adb0 244
91ff844a 245function getSelectedUsers() {
e69fb880 246 return getSelectedTableRowIds("prefUserList");
a0d53889
AD
247}
248
83fe4d6d 249function getSelectedFeeds() {
424e28db
AD
250 const tree = dijit.byId("feedTree");
251 const items = tree.model.getCheckedItems();
252 const rv = [];
1985a5e0
AD
253
254 items.each(function(item) {
7c227bb3
AD
255 if (item.id[0].match("FEED:"))
256 rv.push(tree.model.store.getValue(item, 'bare_id'));
1985a5e0
AD
257 });
258
259 return rv;
91ff844a 260}
331900c6 261
fd26d5bf 262function getSelectedCategories() {
424e28db
AD
263 const tree = dijit.byId("feedTree");
264 const items = tree.model.getCheckedItems();
265 const rv = [];
fd26d5bf
AD
266
267 items.each(function(item) {
268 if (item.id[0].match("CAT:"))
269 rv.push(tree.model.store.getValue(item, 'bare_id'));
270 });
271
272 return rv;
273}
274
91ff844a 275function getSelectedFilters() {
424e28db
AD
276 const tree = dijit.byId("filterTree");
277 const items = tree.model.getCheckedItems();
278 const rv = [];
a740f4b5
AD
279
280 items.each(function(item) {
281 rv.push(tree.model.store.getValue(item, 'bare_id'));
282 });
283
284 return rv;
285
91ff844a 286}
331900c6 287
48f0adb0
AD
288function removeSelectedLabels() {
289
424e28db 290 const sel_rows = getSelectedLabels();
48f0adb0
AD
291
292 if (sel_rows.length > 0) {
293
424e28db 294 const ok = confirm(__("Remove selected labels?"));
48f0adb0 295
69668465 296 if (ok) {
42c32916 297 notify_progress("Removing selected labels...");
fb5662de 298
424e28db 299 const query = "?op=pref-labels&method=remove&ids="+
a796bfc1
AD
300 param_escape(sel_rows.toString());
301
b4e75b2a
AD
302 new Ajax.Request("backend.php", {
303 parameters: query,
a796bfc1 304 onComplete: function(transport) {
cbe50c80 305 updateLabelList();
a796bfc1
AD
306 } });
307
69668465 308 }
48f0adb0 309 } else {
89cb787e 310 alert(__("No labels are selected."));
48f0adb0 311 }
90ac84df
AD
312
313 return false;
48f0adb0
AD
314}
315
e6cb77a0
AD
316function removeSelectedUsers() {
317
424e28db 318 const sel_rows = getSelectedUsers();
fb5662de 319
1bfe1d7b 320 if (sel_rows.length > 0) {
fb5662de 321
424e28db 322 const ok = confirm(__("Remove selected users? Neither default admin nor your account will be removed."));
fb5662de 323
1bfe1d7b
AD
324 if (ok) {
325 notify_progress("Removing selected users...");
fb5662de 326
424e28db 327 const query = "?op=pref-users&method=remove&ids=" +
1bfe1d7b 328 param_escape(sel_rows.toString());
fb5662de 329
1bfe1d7b
AD
330 new Ajax.Request("backend.php", {
331 parameters: query,
332 onComplete: function (transport) {
333 updateUsersList();
334 }
335 });
fb5662de 336
69668465 337 }
e6cb77a0 338
1bfe1d7b
AD
339 } else {
340 alert(__("No users are selected."));
e6cb77a0 341 }
90ac84df
AD
342
343 return false;
e6cb77a0
AD
344}
345
48f0adb0
AD
346function removeSelectedFilters() {
347
424e28db 348 const sel_rows = getSelectedFilters();
fb5662de 349
1bfe1d7b 350 if (sel_rows.length > 0) {
fb5662de 351
424e28db 352 const ok = confirm(__("Remove selected filters?"));
fb5662de 353
1bfe1d7b
AD
354 if (ok) {
355 notify_progress("Removing selected filters...");
fb5662de 356
424e28db 357 const query = "?op=pref-filters&method=remove&ids=" +
1bfe1d7b 358 param_escape(sel_rows.toString());
fb5662de 359
1bfe1d7b
AD
360 new Ajax.Request("backend.php", {
361 parameters: query,
362 onComplete: function (transport) {
363 updateFilterList();
364 }
365 });
69668465 366 }
1bfe1d7b
AD
367 } else {
368 alert(__("No filters are selected."));
48f0adb0 369 }
90ac84df
AD
370
371 return false;
48f0adb0
AD
372}
373
83fe4d6d
AD
374function removeSelectedFeeds() {
375
424e28db 376 const sel_rows = getSelectedFeeds();
fb5662de 377
1bfe1d7b 378 if (sel_rows.length > 0) {
fb5662de 379
424e28db 380 const ok = confirm(__("Unsubscribe from selected feeds?"));
fb5662de 381
1bfe1d7b 382 if (ok) {
fb5662de 383
1bfe1d7b 384 notify_progress("Unsubscribing from selected feeds...", true);
b6a6e262 385
424e28db 386 const query = "?op=pref-feeds&method=remove&ids=" +
1bfe1d7b 387 param_escape(sel_rows.toString());
b6a6e262 388
1bfe1d7b 389 console.log(query);
fb5662de 390
1bfe1d7b
AD
391 new Ajax.Request("backend.php", {
392 parameters: query,
393 onComplete: function (transport) {
394 updateFeedList();
395 }
396 });
69668465 397 }
71ad3959 398
1bfe1d7b
AD
399 } else {
400 alert(__("No feeds are selected."));
71ad3959 401 }
fb5662de 402
90ac84df 403 return false;
71ad3959 404}
007bda35 405
e6cb77a0 406function editSelectedUser() {
424e28db 407 const rows = getSelectedUsers();
e6cb77a0
AD
408
409 if (rows.length == 0) {
f3977cf5 410 alert(__("No users are selected."));
e6cb77a0
AD
411 return;
412 }
413
414 if (rows.length > 1) {
f3977cf5 415 alert(__("Please select only one user."));
e6cb77a0
AD
416 return;
417 }
418
dbd9e2f1
AD
419 notify("");
420
e6cb77a0
AD
421 editUser(rows[0]);
422}
423
424function resetSelectedUserPass() {
e6cb77a0 425
424e28db 426 const rows = getSelectedUsers();
fb5662de 427
1bfe1d7b
AD
428 if (rows.length == 0) {
429 alert(__("No users are selected."));
430 return;
431 }
fb5662de 432
1bfe1d7b
AD
433 if (rows.length > 1) {
434 alert(__("Please select only one user."));
435 return;
436 }
fb5662de 437
424e28db 438 const ok = confirm(__("Reset password of selected user?"));
fb5662de 439
1bfe1d7b
AD
440 if (ok) {
441 notify_progress("Resetting password for selected user...");
fb5662de 442
424e28db 443 const id = rows[0];
fb5662de 444
424e28db 445 const query = "?op=pref-users&method=resetPass&id=" +
1bfe1d7b 446 param_escape(id);
fb5662de 447
1bfe1d7b
AD
448 new Ajax.Request("backend.php", {
449 parameters: query,
450 onComplete: function (transport) {
451 notify_info(transport.responseText, true);
452 }
453 });
fbf7d545 454
69668465 455 }
e6cb77a0
AD
456}
457
717f5e64 458function selectedUserDetails() {
e6cb77a0 459
424e28db 460 const rows = getSelectedUsers();
fb5662de 461
1bfe1d7b
AD
462 if (rows.length == 0) {
463 alert(__("No users are selected."));
464 return;
465 }
fb5662de 466
1bfe1d7b
AD
467 if (rows.length > 1) {
468 alert(__("Please select only one user."));
469 return;
470 }
fb5662de 471
424e28db 472 const id = rows[0];
d9afd9b2 473
424e28db 474 const query = "backend.php?op=pref-users&method=userdetails&id=" + id;
d9afd9b2 475
1bfe1d7b
AD
476 if (dijit.byId("userDetailsDlg"))
477 dijit.byId("userDetailsDlg").destroyRecursive();
d9afd9b2 478
ad04bbf8 479 var dialog = new dijit.Dialog({
1bfe1d7b
AD
480 id: "userDetailsDlg",
481 title: __("User details"),
482 style: "width: 600px",
483 execute: function () {
484 dialog.hide();
485 },
486 href: query
487 });
717f5e64 488
1bfe1d7b 489 dialog.show();
c6c3a07f
AD
490}
491
a0d53889
AD
492
493function editSelectedFilter() {
424e28db 494 const rows = getSelectedFilters();
a0d53889
AD
495
496 if (rows.length == 0) {
f3977cf5 497 alert(__("No filters are selected."));
a0d53889
AD
498 return;
499 }
500
501 if (rows.length > 1) {
f3977cf5 502 alert(__("Please select only one filter."));
a0d53889
AD
503 return;
504 }
505
dbd9e2f1
AD
506 notify("");
507
a0d53889
AD
508 editFilter(rows[0]);
509
510}
511
6aff7845 512function joinSelectedFilters() {
424e28db 513 const rows = getSelectedFilters();
6aff7845
AD
514
515 if (rows.length == 0) {
516 alert(__("No filters are selected."));
517 return;
518 }
519
424e28db 520 const ok = confirm(__("Combine selected filters?"));
6aff7845
AD
521
522 if (ok) {
523 notify_progress("Joining filters...");
524
424e28db 525 const query = "?op=pref-filters&method=join&ids="+
6aff7845
AD
526 param_escape(rows.toString());
527
528 console.log(query);
529
530 new Ajax.Request("backend.php", {
531 parameters: query,
532 onComplete: function(transport) {
533 updateFilterList();
534 } });
535 }
536}
a0d53889 537
508a81e1 538function editSelectedFeed() {
424e28db 539 const rows = getSelectedFeeds();
508a81e1
AD
540
541 if (rows.length == 0) {
f3977cf5 542 alert(__("No feeds are selected."));
508a81e1
AD
543 return;
544 }
545
546 if (rows.length > 1) {
1e5548db 547 return editSelectedFeeds();
508a81e1
AD
548 }
549
dbd9e2f1
AD
550 notify("");
551
951906dc 552 editFeed(rows[0], {});
91ff844a
AD
553
554}
555
758e1c4a 556function editSelectedFeeds() {
424e28db 557 const rows = getSelectedFeeds();
758e1c4a 558
1bfe1d7b
AD
559 if (rows.length == 0) {
560 alert(__("No feeds are selected."));
561 return;
562 }
05acc0d6 563
1bfe1d7b 564 notify_progress("Loading, please wait...");
05acc0d6 565
424e28db 566 const query = "backend.php?op=pref-feeds&method=editfeeds&ids=" +
1bfe1d7b 567 param_escape(rows.toString());
755c8f95 568
1bfe1d7b 569 console.log(query);
755c8f95 570
1bfe1d7b
AD
571 if (dijit.byId("feedEditDlg"))
572 dijit.byId("feedEditDlg").destroyRecursive();
755c8f95 573
1bfe1d7b
AD
574 new Ajax.Request("backend.php", {
575 parameters: query,
576 onComplete: function (transport) {
755c8f95 577
1bfe1d7b 578 notify("");
fb5662de 579
1bfe1d7b
AD
580 var dialog = new dijit.Dialog({
581 id: "feedEditDlg",
582 title: __("Edit Multiple Feeds"),
583 style: "width: 600px",
584 getChildByName: function (name) {
424e28db 585 let rv = null;
1bfe1d7b
AD
586 this.getChildren().each(
587 function (child) {
588 if (child.name == name) {
589 rv = child;
590 return;
755c8f95 591 }
1bfe1d7b
AD
592 });
593 return rv;
594 },
595 toggleField: function (checkbox, elem, label) {
596 this.getChildByName(elem).attr('disabled', !checkbox.checked);
597
598 if ($(label))
599 if (checkbox.checked)
600 $(label).removeClassName('insensitive');
601 else
602 $(label).addClassName('insensitive');
603
604 },
605 execute: function () {
606 if (this.validate() && confirm(__("Save changes to selected feeds?"))) {
424e28db 607 let query = dojo.objectToQuery(this.attr('value'));
1bfe1d7b
AD
608
609 /* Form.serialize ignores unchecked checkboxes */
610
611 if (!query.match("&private=") &&
612 this.getChildByName('private').attr('disabled') == false) {
613 query = query + "&private=false";
614 }
fb5662de 615
1bfe1d7b
AD
616 try {
617 if (!query.match("&cache_images=") &&
618 this.getChildByName('cache_images').attr('disabled') == false) {
619 query = query + "&cache_images=false";
755c8f95 620 }
1bfe1d7b
AD
621 } catch (e) {
622 }
05acc0d6 623
1bfe1d7b
AD
624 try {
625 if (!query.match("&hide_images=") &&
626 this.getChildByName('hide_images').attr('disabled') == false) {
627 query = query + "&hide_images=false";
755c8f95 628 }
1bfe1d7b
AD
629 } catch (e) {
630 }
dd04ea81 631
1bfe1d7b
AD
632 if (!query.match("&include_in_digest=") &&
633 this.getChildByName('include_in_digest').attr('disabled') == false) {
634 query = query + "&include_in_digest=false";
635 }
dd04ea81 636
1bfe1d7b
AD
637 if (!query.match("&always_display_enclosures=") &&
638 this.getChildByName('always_display_enclosures').attr('disabled') == false) {
639 query = query + "&always_display_enclosures=false";
640 }
fb5662de 641
1bfe1d7b
AD
642 if (!query.match("&mark_unread_on_update=") &&
643 this.getChildByName('mark_unread_on_update').attr('disabled') == false) {
644 query = query + "&mark_unread_on_update=false";
755c8f95 645 }
05acc0d6 646
1bfe1d7b 647 console.log(query);
05acc0d6 648
1bfe1d7b 649 notify_progress("Saving data...", true);
758e1c4a 650
1bfe1d7b
AD
651 new Ajax.Request("backend.php", {
652 parameters: query,
653 onComplete: function (transport) {
654 dialog.hide();
655 updateFeedList();
656 }
657 });
658 }
659 },
660 content: transport.responseText
661 });
758e1c4a 662
1bfe1d7b 663 dialog.show();
e1218480 664
1bfe1d7b
AD
665 }
666 });
667}
e1218480 668
1bfe1d7b
AD
669function opmlImportComplete(iframe) {
670 if (!iframe.contentDocument.body.innerHTML) return false;
671
672 Element.show(iframe);
673
674 notify('');
675
676 if (dijit.byId('opmlImportDlg'))
677 dijit.byId('opmlImportDlg').destroyRecursive();
678
424e28db 679 const content = iframe.contentDocument.body.innerHTML;
1bfe1d7b 680
424e28db 681 const dialog = new dijit.Dialog({
1bfe1d7b
AD
682 id: "opmlImportDlg",
683 title: __("OPML Import"),
684 style: "width: 600px",
685 onCancel: function () {
12b7b90c 686 window.location.reload();
1bfe1d7b
AD
687 },
688 execute: function () {
12b7b90c 689 window.location.reload();
1bfe1d7b
AD
690 },
691 content: content
692 });
e1218480 693
1bfe1d7b 694 dialog.show();
e1218480
AD
695}
696
b6a6e262 697function opmlImport() {
fb5662de 698
424e28db 699 const opml_file = $("opml_file");
9f311df6
AD
700
701 if (opml_file.value.length == 0) {
d2d75353 702 alert(__("Please choose an OPML file first."));
9f311df6
AD
703 return false;
704 } else {
4d7cd9ed 705 notify_progress("Importing, please wait...", true);
55f34b81
AD
706
707 Element.show("upload_iframe");
708
9f311df6
AD
709 return true;
710 }
711}
712
55f34b81 713
05acc0d6 714function updateFilterList() {
424e28db
AD
715 const user_search = $("filter_search");
716 let search = "";
310fa2dd
AD
717 if (user_search) { search = user_search.value; }
718
05acc0d6 719 new Ajax.Request("backend.php", {
310fa2dd 720 parameters: "?op=pref-filters&search=" + param_escape(search),
05acc0d6 721 onComplete: function(transport) {
66665fba
AD
722 dijit.byId('filterConfigTab').attr('content', transport.responseText);
723 notify("");
05acc0d6 724 } });
a0d53889
AD
725}
726
05acc0d6
AD
727function updateLabelList() {
728 new Ajax.Request("backend.php", {
729 parameters: "?op=pref-labels",
730 onComplete: function(transport) {
cbe50c80
AD
731 dijit.byId('labelConfigTab').attr('content', transport.responseText);
732 notify("");
05acc0d6 733 } });
48f0adb0
AD
734}
735
4255b24c 736function updatePrefsList() {
b4e75b2a 737 new Ajax.Request("backend.php", {
05acc0d6 738 parameters: "?op=pref-prefs",
fb5662de 739 onComplete: function(transport) {
cbe50c80
AD
740 dijit.byId('genConfigTab').attr('content', transport.responseText);
741 notify("");
e9802ead 742 } });
4255b24c
AD
743}
744
2cbdc95b
AD
745function updateSystemList() {
746 new Ajax.Request("backend.php", {
747 parameters: "?op=pref-system",
748 onComplete: function(transport) {
749 dijit.byId('systemConfigTab').attr('content', transport.responseText);
750 notify("");
751 } });
752}
753
05185108 754function selectTab(id, noupdate) {
1bfe1d7b
AD
755 if (!noupdate) {
756 notify_progress("Loading, please wait...");
d62796de 757
1bfe1d7b
AD
758 if (id == "feedConfig") {
759 updateFeedList();
760 } else if (id == "filterConfig") {
761 updateFilterList();
762 } else if (id == "labelConfig") {
763 updateLabelList();
764 } else if (id == "genConfig") {
765 updatePrefsList();
766 } else if (id == "userConfig") {
767 updateUsersList();
768 } else if (id == "systemConfig") {
769 updateSystemList();
f5a50b25 770 }
fb5662de 771
424e28db 772 const tab = dijit.byId(id + "Tab");
1bfe1d7b
AD
773 dijit.byId("pref-tabs").selectChild(tab);
774
a7565293 775 }
a7565293
AD
776}
777
a7565293 778function init_second_stage() {
1bfe1d7b
AD
779 document.onkeydown = pref_hotkey_handler;
780 loading_set_progress(50);
781 notify("");
b01b1b38 782
424e28db 783 let tab = getURLParam('tab');
b01b1b38 784
1bfe1d7b
AD
785 if (tab) {
786 tab = dijit.byId(tab + "Tab");
787 if (tab) dijit.byId("pref-tabs").selectChild(tab);
788 }
b01b1b38 789
424e28db 790 const method = getURLParam('method');
556e5b46 791
1bfe1d7b 792 if (method == 'editFeed') {
424e28db 793 const param = getURLParam('methodparam');
78935092 794
1bfe1d7b 795 window.setTimeout(function() { editFeed(param) }, 100);
b2caf812 796 }
1bfe1d7b
AD
797
798 setTimeout(hotkey_prefix_timeout, 5*1000);
a0d53889
AD
799}
800
007bda35 801function init() {
1bfe1d7b
AD
802 window.onerror = function (message, filename, lineno, colno, error) {
803 report_error(message, filename, lineno, colno, error);
804 };
805
806 require(["dojo/_base/kernel",
807 "dojo/ready",
808 "dojo/parser",
809 "dojo/_base/loader",
810 "dojo/_base/html",
811 "dijit/ColorPalette",
812 "dijit/Dialog",
813 "dijit/form/Button",
814 "dijit/form/CheckBox",
815 "dijit/form/DropDownButton",
816 "dijit/form/FilteringSelect",
12b7b90c 817 "dijit/form/MultiSelect",
1bfe1d7b
AD
818 "dijit/form/Form",
819 "dijit/form/RadioButton",
820 "dijit/form/ComboButton",
821 "dijit/form/Select",
822 "dijit/form/SimpleTextarea",
823 "dijit/form/TextBox",
824 "dijit/form/ValidationTextBox",
825 "dijit/InlineEditBox",
826 "dijit/layout/AccordionContainer",
827 "dijit/layout/AccordionPane",
828 "dijit/layout/BorderContainer",
829 "dijit/layout/ContentPane",
830 "dijit/layout/TabContainer",
831 "dijit/Menu",
832 "dijit/ProgressBar",
833 "dijit/Toolbar",
834 "dijit/Tree",
835 "dijit/tree/dndSource",
836 "dojo/data/ItemFileWriteStore",
a3e2f1a9
AD
837 "lib/CheckBoxStoreModel",
838 "lib/CheckBoxTree",
839 "fox/PrefFeedStore",
840 "fox/PrefFilterStore",
1bfe1d7b
AD
841 "fox/PrefFeedTree",
842 "fox/PrefFilterTree",
843 "fox/PrefLabelTree"], function (dojo, ready, parser) {
844
845 ready(function () {
846 try {
847 parser.parse();
848
849 loading_set_progress(50);
850
424e28db 851 const clientTzOffset = new Date().getTimezoneOffset() * 60;
e2ec66a8 852
1bfe1d7b
AD
853 new Ajax.Request("backend.php", {
854 parameters: {
855 op: "rpc", method: "sanityCheck",
856 clientTzOffset: clientTzOffset
857 },
858 onComplete: function (transport) {
859 backend_sanity_check_callback(transport);
860 }
fd539f28 861 });
1bfe1d7b
AD
862 } catch (e) {
863 exception_error(e);
864 }
865 });
866 });
007bda35 867}
b1895692 868
b652c1b7 869
1bfe1d7b 870function validatePrefsReset() {
424e28db 871 const ok = confirm(__("Reset to defaults?"));
b652c1b7 872
1bfe1d7b 873 if (ok) {
b652c1b7 874
424e28db 875 const query = "?op=pref-prefs&method=resetconfig";
1bfe1d7b 876 console.log(query);
e9802ead 877
1bfe1d7b
AD
878 new Ajax.Request("backend.php", {
879 parameters: query,
880 onComplete: function(transport) {
881 updatePrefsList();
882 notify_info(transport.responseText);
883 } });
b652c1b7 884
b652c1b7
AD
885 }
886
887 return false;
888
69668465 889}
f9cb39ac 890
d437c8cf 891function pref_hotkey_handler(e) {
b8cb4d08 892
1bfe1d7b 893 if (e.target.nodeName == "INPUT" || e.target.nodeName == "TEXTAREA") return;
18606807 894
424e28db
AD
895 let keycode = false;
896 let shift_key = false;
746dcf42 897
424e28db 898 const cmdline = $('cmdline');
78935092 899
1bfe1d7b
AD
900 try {
901 shift_key = e.shiftKey;
902 } catch (e) {
746dcf42 903
1bfe1d7b 904 }
746dcf42 905
1bfe1d7b
AD
906 if (window.event) {
907 keycode = window.event.keyCode;
908 } else if (e) {
909 keycode = e.which;
910 }
746dcf42 911
424e28db 912 let keychar = String.fromCharCode(keycode);
eec498c3 913
1bfe1d7b
AD
914 if (keycode == 27) { // escape
915 hotkey_prefix = false;
916 }
746dcf42 917
1bfe1d7b
AD
918 if (keycode == 16) return; // ignore lone shift
919 if (keycode == 17) return; // ignore lone ctrl
746dcf42 920
1bfe1d7b 921 if (!shift_key) keychar = keychar.toLowerCase();
b8cb4d08 922
1bfe1d7b 923 var hotkeys = getInitParam("hotkeys");
b8cb4d08 924
1bfe1d7b 925 if (!hotkey_prefix && hotkeys[0].indexOf(keychar) != -1) {
78935092 926
424e28db
AD
927 const date = new Date();
928 const ts = Math.round(date.getTime() / 1000);
78935092 929
1bfe1d7b
AD
930 hotkey_prefix = keychar;
931 hotkey_prefix_pressed = ts;
78935092 932
1bfe1d7b
AD
933 cmdline.innerHTML = keychar;
934 Element.show(cmdline);
78935092 935
1bfe1d7b
AD
936 return true;
937 }
746dcf42 938
1bfe1d7b 939 Element.hide(cmdline);
78935092 940
424e28db 941 let hotkey = keychar.search(/[a-zA-Z0-9]/) != -1 ? keychar : "(" + keycode + ")";
1bfe1d7b
AD
942 hotkey = hotkey_prefix ? hotkey_prefix + " " + hotkey : hotkey;
943 hotkey_prefix = false;
8d727bfc 944
424e28db 945 let hotkey_action = false;
1bfe1d7b 946 var hotkeys = getInitParam("hotkeys");
746dcf42 947
424e28db 948 for (const sequence in hotkeys[1]) {
1bfe1d7b
AD
949 if (sequence == hotkey) {
950 hotkey_action = hotkeys[1][sequence];
951 break;
746dcf42 952 }
1bfe1d7b 953 }
746dcf42 954
1bfe1d7b 955 switch (hotkey_action) {
b8cb4d08
AD
956 case "feed_subscribe":
957 quickAddFeed();
4ba1f8bb 958 return false;
b8cb4d08
AD
959 case "create_label":
960 addLabel();
4ba1f8bb 961 return false;
b8cb4d08
AD
962 case "create_filter":
963 quickAddFilter();
4ba1f8bb 964 return false;
b8cb4d08
AD
965 case "help_dialog":
966 //helpDialog("prefs");
967 return false;
968 default:
969 console.log("unhandled action: " + hotkey_action + "; hotkey: " + hotkey);
d437c8cf
AD
970 }
971}
972
5ef071e0 973function removeCategory(id, item) {
350468d0 974
424e28db 975 const ok = confirm(__("Remove category %s? Any nested feeds would be placed into Uncategorized.").replace("%s", item.name));
da1f74c9 976
1bfe1d7b 977 if (ok) {
424e28db 978 const query = "?op=pref-feeds&method=removeCat&ids=" +
1bfe1d7b 979 param_escape(id);
fb5662de 980
1bfe1d7b 981 notify_progress("Removing category...");
fb5662de 982
1bfe1d7b
AD
983 new Ajax.Request("backend.php", {
984 parameters: query,
985 onComplete: function (transport) {
986 notify('');
987 updateFeedList();
5ef071e0 988 }
1bfe1d7b 989 });
5ef071e0
AD
990 }
991}
fb5662de 992
fd26d5bf
AD
993function removeSelectedCategories() {
994
424e28db 995 const sel_rows = getSelectedCategories();
fd26d5bf
AD
996
997 if (sel_rows.length > 0) {
998
424e28db 999 const ok = confirm(__("Remove selected categories?"));
fd26d5bf
AD
1000
1001 if (ok) {
1002 notify_progress("Removing selected categories...");
1003
424e28db 1004 const query = "?op=pref-feeds&method=removeCat&ids="+
fd26d5bf
AD
1005 param_escape(sel_rows.toString());
1006
1007 new Ajax.Request("backend.php", {
1008 parameters: query,
1009 onComplete: function(transport) {
1010 updateFeedList();
1011 } });
1012
1013 }
1014 } else {
1015 alert(__("No categories are selected."));
1016 }
1017
1018 return false;
1019}
1020
5ef071e0 1021function createCategory() {
424e28db 1022 const title = prompt(__("Category title:"));
fb5662de 1023
1bfe1d7b 1024 if (title) {
da1f74c9 1025
1bfe1d7b 1026 notify_progress("Creating category...");
da1f74c9 1027
424e28db 1028 const query = "?op=pref-feeds&method=addCat&cat=" +
1bfe1d7b 1029 param_escape(title);
da1f74c9 1030
1bfe1d7b
AD
1031 new Ajax.Request("backend.php", {
1032 parameters: query,
1033 onComplete: function (transport) {
1034 notify('');
1035 updateFeedList();
1036 }
1037 });
a349077c 1038 }
9c483746 1039}
a3656a41 1040
8ffd2011 1041function showInactiveFeeds() {
424e28db 1042 const query = "backend.php?op=pref-feeds&method=inactiveFeeds";
8ffd2011 1043
1bfe1d7b
AD
1044 if (dijit.byId("inactiveFeedsDlg"))
1045 dijit.byId("inactiveFeedsDlg").destroyRecursive();
8ffd2011 1046
ad04bbf8 1047 var dialog = new dijit.Dialog({
1bfe1d7b
AD
1048 id: "inactiveFeedsDlg",
1049 title: __("Feeds without recent updates"),
1050 style: "width: 600px",
1051 getSelectedFeeds: function () {
1052 return getSelectedTableRowIds("prefInactiveFeedList");
1053 },
1054 removeSelected: function () {
424e28db 1055 const sel_rows = this.getSelectedFeeds();
8ffd2011 1056
1bfe1d7b 1057 console.log(sel_rows);
8ffd2011 1058
1bfe1d7b 1059 if (sel_rows.length > 0) {
424e28db 1060 const ok = confirm(__("Remove selected feeds?"));
8ffd2011 1061
1bfe1d7b
AD
1062 if (ok) {
1063 notify_progress("Removing selected feeds...", true);
8ffd2011 1064
424e28db 1065 const query = "?op=pref-feeds&method=remove&ids=" +
1bfe1d7b 1066 param_escape(sel_rows.toString());
8ffd2011 1067
1bfe1d7b
AD
1068 new Ajax.Request("backend.php", {
1069 parameters: query,
1070 onComplete: function (transport) {
1071 notify('');
1072 dialog.hide();
1073 updateFeedList();
1074 }
1075 });
8ffd2011 1076 }
8ffd2011 1077
1bfe1d7b
AD
1078 } else {
1079 alert(__("No feeds are selected."));
1080 }
1081 },
1082 execute: function () {
1083 if (this.validate()) {
1084 }
1085 },
1086 href: query
1087 });
8ffd2011 1088
1bfe1d7b 1089 dialog.show();
8ffd2011
AD
1090}
1091
ef7b7bbd 1092function opmlRegenKey() {
424e28db 1093 const ok = confirm(__("Replace current OPML publishing address with a new one?"));
ef7b7bbd 1094
1bfe1d7b 1095 if (ok) {
fb5662de 1096
1bfe1d7b 1097 notify_progress("Trying to change address...", true);
fb5662de 1098
424e28db 1099 const query = "?op=pref-feeds&method=regenOPMLKey";
fb5662de 1100
1bfe1d7b
AD
1101 new Ajax.Request("backend.php", {
1102 parameters: query,
1103 onComplete: function (transport) {
424e28db 1104 const reply = JSON.parse(transport.responseText);
91d16ff1 1105
424e28db 1106 const new_link = reply.link;
fb5662de 1107
424e28db 1108 const e = $('pub_opml_url');
fb5662de 1109
1bfe1d7b
AD
1110 if (new_link) {
1111 e.href = new_link;
1112 e.innerHTML = new_link;
fb5662de 1113
1bfe1d7b 1114 new Effect.Highlight(e);
ef7b7bbd 1115
1bfe1d7b 1116 notify('');
fb5662de 1117
1bfe1d7b
AD
1118 } else {
1119 notify_error("Could not change feed URL.");
1120 }
1121 }
1122 });
ef7b7bbd
MK
1123 }
1124 return false;
1125}
c4a36709 1126
b8776a07 1127function labelColorReset() {
424e28db 1128 const labels = getSelectedLabels();
b8776a07 1129
1bfe1d7b 1130 if (labels.length > 0) {
424e28db 1131 const ok = confirm(__("Reset selected labels to default colors?"));
b8776a07 1132
1bfe1d7b 1133 if (ok) {
424e28db 1134 const query = "?op=pref-labels&method=colorreset&ids=" +
1bfe1d7b 1135 param_escape(labels.toString());
f695cdb2 1136
1bfe1d7b
AD
1137 new Ajax.Request("backend.php", {
1138 parameters: query,
1139 onComplete: function (transport) {
1140 updateLabelList();
1141 }
1142 });
b8776a07
AD
1143 }
1144
1bfe1d7b
AD
1145 } else {
1146 alert(__("No labels are selected."));
b8776a07
AD
1147 }
1148}
1149
a5819bb3
AD
1150function inPreferences() {
1151 return true;
1152}
d9084cf2
AD
1153
1154function editProfiles() {
22988692 1155
1bfe1d7b
AD
1156 if (dijit.byId("profileEditDlg"))
1157 dijit.byId("profileEditDlg").destroyRecursive();
22988692 1158
424e28db 1159 const query = "backend.php?op=pref-prefs&method=editPrefProfiles";
22988692 1160
ad04bbf8 1161 var dialog = new dijit.Dialog({
1bfe1d7b
AD
1162 id: "profileEditDlg",
1163 title: __("Settings Profiles"),
1164 style: "width: 600px",
1165 getSelectedProfiles: function () {
1166 return getSelectedTableRowIds("prefFeedProfileList");
1167 },
1168 removeSelected: function () {
424e28db 1169 const sel_rows = this.getSelectedProfiles();
fb5662de 1170
1bfe1d7b 1171 if (sel_rows.length > 0) {
424e28db 1172 const ok = confirm(__("Remove selected profiles? Active and default profiles will not be removed."));
fb5662de 1173
1bfe1d7b
AD
1174 if (ok) {
1175 notify_progress("Removing selected profiles...", true);
fb5662de 1176
424e28db 1177 const query = "?op=rpc&method=remprofiles&ids=" +
1bfe1d7b 1178 param_escape(sel_rows.toString());
fb5662de 1179
1bfe1d7b
AD
1180 new Ajax.Request("backend.php", {
1181 parameters: query,
1182 onComplete: function (transport) {
1183 notify('');
1184 editProfiles();
1185 }
1186 });
fb5662de 1187
22988692 1188 }
fb5662de 1189
1bfe1d7b
AD
1190 } else {
1191 alert(__("No profiles are selected."));
1192 }
1193 },
1194 activateProfile: function () {
424e28db 1195 const sel_rows = this.getSelectedProfiles();
fb5662de 1196
1bfe1d7b 1197 if (sel_rows.length == 1) {
fb5662de 1198
424e28db 1199 const ok = confirm(__("Activate selected profile?"));
fb5662de 1200
1bfe1d7b
AD
1201 if (ok) {
1202 notify_progress("Loading, please wait...");
fb5662de 1203
424e28db 1204 const query = "?op=rpc&method=setprofile&id=" +
1bfe1d7b 1205 param_escape(sel_rows.toString());
fb5662de 1206
1bfe1d7b
AD
1207 new Ajax.Request("backend.php", {
1208 parameters: query,
1209 onComplete: function (transport) {
1210 window.location.reload();
1211 }
1212 });
fb5662de 1213 }
22988692 1214
1bfe1d7b
AD
1215 } else {
1216 alert(__("Please choose a profile to activate."));
1217 }
1218 },
1219 addProfile: function () {
1220 if (this.validate()) {
1221 notify_progress("Creating profile...", true);
22988692 1222
424e28db 1223 const query = "?op=rpc&method=addprofile&title=" +
1bfe1d7b 1224 param_escape(dialog.attr('value').newprofile);
22988692 1225
1bfe1d7b
AD
1226 new Ajax.Request("backend.php", {
1227 parameters: query,
1228 onComplete: function (transport) {
1229 notify('');
1230 editProfiles();
1231 }
1232 });
22988692 1233
1bfe1d7b
AD
1234 }
1235 },
1236 execute: function () {
1237 if (this.validate()) {
1238 }
1239 },
1240 href: query
1241 });
1242
1243 dialog.show();
d9084cf2
AD
1244}
1245
1246function activatePrefProfile() {
1247
424e28db 1248 const sel_rows = getSelectedFeedCats();
d9084cf2
AD
1249
1250 if (sel_rows.length == 1) {
1251
424e28db 1252 const ok = confirm(__("Activate selected profile?"));
d9084cf2
AD
1253
1254 if (ok) {
1255 notify_progress("Loading, please wait...");
fb5662de 1256
424e28db 1257 const query = "?op=rpc&method=setprofile&id="+
d9084cf2
AD
1258 param_escape(sel_rows.toString());
1259
1260 new Ajax.Request("backend.php", {
1261 parameters: query,
1262 onComplete: function(transport) {
1263 window.location.reload();
1264 } });
1265 }
1266
1267 } else {
1268 alert(__("Please choose a profile to activate."));
1269 }
1270
1271 return false;
1272}
1273
8d86f15f
AD
1274function clearFeedAccessKeys() {
1275
424e28db 1276 const ok = confirm(__("This will invalidate all previously generated feed URLs. Continue?"));
8d86f15f
AD
1277
1278 if (ok) {
1279 notify_progress("Clearing URLs...");
1280
424e28db 1281 const query = "?op=pref-feeds&method=clearKeys";
8d86f15f
AD
1282
1283 new Ajax.Request("backend.php", {
1284 parameters: query,
fb5662de 1285 onComplete: function(transport) {
8d86f15f
AD
1286 notify_info("Generated URLs cleared.");
1287 } });
1288 }
fb5662de 1289
8d86f15f
AD
1290 return false;
1291}
1292
a86ba0a6 1293function resetFilterOrder() {
1bfe1d7b 1294 notify_progress("Loading, please wait...");
a86ba0a6 1295
1bfe1d7b
AD
1296 new Ajax.Request("backend.php", {
1297 parameters: "?op=pref-filters&method=filtersortreset",
1298 onComplete: function (transport) {
1299 updateFilterList();
1300 }
1301 });
a86ba0a6
AD
1302}
1303
1304
1bfe1d7b
AD
1305function resetFeedOrder() {
1306 notify_progress("Loading, please wait...");
7b8a143f 1307
1bfe1d7b
AD
1308 new Ajax.Request("backend.php", {
1309 parameters: "?op=pref-feeds&method=feedsortreset",
1310 onComplete: function (transport) {
1311 updateFeedList();
1312 }
1313 });
7b8a143f
AD
1314}
1315
1316function resetCatOrder() {
1bfe1d7b 1317 notify_progress("Loading, please wait...");
7b8a143f 1318
1bfe1d7b
AD
1319 new Ajax.Request("backend.php", {
1320 parameters: "?op=pref-feeds&method=catsortreset",
1321 onComplete: function (transport) {
1322 updateFeedList();
1323 }
1324 });
7b8a143f
AD
1325}
1326
05185108 1327function editCat(id, item) {
424e28db 1328 const new_name = prompt(__('Rename category to:'), item.name);
7b8a143f 1329
1bfe1d7b 1330 if (new_name && new_name != item.name) {
7b8a143f 1331
1bfe1d7b 1332 notify_progress("Loading, please wait...");
7b8a143f 1333
1bfe1d7b 1334 new Ajax.Request("backend.php", {
7b8a143f 1335 parameters: {
fb5662de 1336 op: 'pref-feeds',
f30ef1fa 1337 method: 'renamecat',
7b8a143f
AD
1338 id: id,
1339 title: new_name,
1340 },
1bfe1d7b
AD
1341 onComplete: function (transport) {
1342 updateFeedList();
1343 }
1344 });
7b8a143f
AD
1345 }
1346}
fb8b2153 1347
05185108 1348function editLabel(id) {
424e28db 1349 const query = "backend.php?op=pref-labels&method=edit&id=" +
1bfe1d7b
AD
1350 param_escape(id);
1351
1352 if (dijit.byId("labelEditDlg"))
1353 dijit.byId("labelEditDlg").destroyRecursive();
1354
424e28db 1355 const dialog = new dijit.Dialog({
1bfe1d7b
AD
1356 id: "labelEditDlg",
1357 title: __("Label Editor"),
1358 style: "width: 600px",
1359 setLabelColor: function (id, fg, bg) {
1360
424e28db
AD
1361 let kind = '';
1362 let color = '';
1bfe1d7b
AD
1363
1364 if (fg && bg) {
1365 kind = 'both';
1366 } else if (fg) {
1367 kind = 'fg';
1368 color = fg;
1369 } else if (bg) {
1370 kind = 'bg';
1371 color = bg;
1372 }
fb5662de 1373
424e28db 1374 const query = "?op=pref-labels&method=colorset&kind=" + kind +
1bfe1d7b
AD
1375 "&ids=" + param_escape(id) + "&fg=" + param_escape(fg) +
1376 "&bg=" + param_escape(bg) + "&color=" + param_escape(color);
fb5662de 1377
1bfe1d7b 1378 // console.log(query);
fb5662de 1379
424e28db 1380 const e = $("LICID-" + id);
fb5662de 1381
1bfe1d7b
AD
1382 if (e) {
1383 if (fg) e.style.color = fg;
1384 if (bg) e.style.backgroundColor = bg;
1385 }
05acc0d6 1386
1bfe1d7b 1387 new Ajax.Request("backend.php", {parameters: query});
48b05a29 1388
1bfe1d7b
AD
1389 updateFilterList();
1390 },
1391 execute: function () {
1392 if (this.validate()) {
424e28db
AD
1393 const caption = this.attr('value').caption;
1394 const fg_color = this.attr('value').fg_color;
1395 const bg_color = this.attr('value').bg_color;
1396 const query = dojo.objectToQuery(this.attr('value'));
48b05a29 1397
1bfe1d7b
AD
1398 dijit.byId('labelTree').setNameById(id, caption);
1399 this.setLabelColor(id, fg_color, bg_color);
1400 this.hide();
fb8b2153 1401
1bfe1d7b
AD
1402 new Ajax.Request("backend.php", {
1403 parameters: query,
1404 onComplete: function (transport) {
1405 updateFilterList();
1406 }
1407 });
1408 }
1409 },
1410 href: query
1411 });
fb8b2153 1412
1bfe1d7b 1413 dialog.show();
fb8b2153 1414}
018caf6f 1415
88e4e597
AD
1416
1417function customizeCSS() {
424e28db 1418 const query = "backend.php?op=pref-prefs&method=customizeCSS";
88e4e597 1419
1bfe1d7b
AD
1420 if (dijit.byId("cssEditDlg"))
1421 dijit.byId("cssEditDlg").destroyRecursive();
88e4e597 1422
424e28db 1423 const dialog = new dijit.Dialog({
1bfe1d7b
AD
1424 id: "cssEditDlg",
1425 title: __("Customize stylesheet"),
1426 style: "width: 600px",
1427 execute: function () {
1428 notify_progress('Saving data...', true);
1429 new Ajax.Request("backend.php", {
1430 parameters: dojo.objectToQuery(this.attr('value')),
1431 onComplete: function (transport) {
1432 notify('');
1433 window.location.reload();
1434 }
1435 });
88e4e597 1436
1bfe1d7b
AD
1437 },
1438 href: query
1439 });
88e4e597 1440
1bfe1d7b 1441 dialog.show();
88e4e597 1442}
3d72afa1
AD
1443
1444function insertSSLserial(value) {
1bfe1d7b 1445 dijit.byId("SSL_CERT_SERIAL").attr('value', value);
3d72afa1 1446}
373266eb 1447
41f68571 1448function gotoExportOpml(filename, settings) {
424e28db 1449 const tmp = settings ? 1 : 0;
d75409bf 1450 document.location.href = "backend.php?op=opml&method=export&filename=" + filename + "&settings=" + tmp;
41f68571
AD
1451}
1452
1453
33f0fdd0 1454function batchSubscribe() {
424e28db 1455 const query = "backend.php?op=pref-feeds&method=batchSubscribe";
33f0fdd0 1456
1bfe1d7b
AD
1457 // overlapping widgets
1458 if (dijit.byId("batchSubDlg")) dijit.byId("batchSubDlg").destroyRecursive();
1459 if (dijit.byId("feedAddDlg")) dijit.byId("feedAddDlg").destroyRecursive();
33f0fdd0 1460
1bfe1d7b
AD
1461 var dialog = new dijit.Dialog({
1462 id: "batchSubDlg",
1463 title: __("Batch subscribe"),
1464 style: "width: 600px",
1465 execute: function () {
1466 if (this.validate()) {
1467 console.log(dojo.objectToQuery(this.attr('value')));
33f0fdd0 1468
1bfe1d7b 1469 notify_progress(__("Subscribing to feeds..."), true);
33f0fdd0 1470
1bfe1d7b
AD
1471 new Ajax.Request("backend.php", {
1472 parameters: dojo.objectToQuery(this.attr('value')),
1473 onComplete: function (transport) {
1474 notify("");
1475 updateFeedList();
1476 dialog.hide();
33f0fdd0 1477 }
1bfe1d7b
AD
1478 });
1479 }
1480 },
1481 href: query
1482 });
33f0fdd0 1483
1bfe1d7b 1484 dialog.show();
33f0fdd0 1485}
55f34b81 1486
1bfe1d7b
AD
1487function clearPluginData(name) {
1488 if (confirm(__("Clear stored data for this plugin?"))) {
f9ebb32c
AD
1489 notify_progress("Loading, please wait...");
1490
1491 new Ajax.Request("backend.php", {
1bfe1d7b 1492 parameters: "?op=pref-prefs&method=clearplugindata&name=" + param_escape(name),
f9ebb32c 1493 onComplete: function(transport) {
1bfe1d7b 1494 notify('');
f9ebb32c
AD
1495 updatePrefsList();
1496 } });
5d9abb1e
AD
1497 }
1498}
52e7b5a0
AD
1499
1500function clearSqlLog() {
1501
1502 if (confirm(__("Clear all messages in the error log?"))) {
1503
1504 notify_progress("Loading, please wait...");
424e28db 1505 const query = "?op=pref-system&method=clearLog";
52e7b5a0
AD
1506
1507 new Ajax.Request("backend.php", {
1508 parameters: query,
1509 onComplete: function(transport) {
1510 updateSystemList();
1511 } });
1512
1513 }
1514}
1515
ab235fc5
AD
1516function updateSelectedPrompt() {
1517 // no-op shim for toggleSelectedRow()
1518}
e2e24799 1519