]> git.wh0rd.org - tt-rss.git/blame_incremental - prefs.js
do not reset alt attribute when changing back feedlist icon from progressbar
[tt-rss.git] / prefs.js
... / ...
CommitLineData
1var active_feed_cat = false;
2var active_tab = false;
3
4var init_params = new Array();
5
6var caller_subop = false;
7var sanity_check_done = false;
8var hotkey_prefix = false;
9
10var color_picker_active = false;
11var selection_disabled = false;
12var mouse_is_down = false;
13
14function replace_pubkey_callback(transport) {
15 try {
16 var link = $("pubGenAddress");
17
18 if (transport.responseXML) {
19
20 var new_link = transport.responseXML.getElementsByTagName("link")[0];
21
22 if (new_link) {
23 link.href = new_link.firstChild.nodeValue;
24 //link.innerHTML = new_link.firstChild.nodeValue;
25
26 new Effect.Highlight(link);
27
28 notify_info("Published feed URL changed.");
29 } else {
30 notify_error("Could not change feed URL.");
31 }
32
33 } else {
34 notify_error("Could not change feed URL.");
35 }
36 } catch (e) {
37 exception_error("replace_pubkey_callback", e);
38 }
39}
40
41function feedlist_callback2(transport) {
42
43 try {
44
45 var container = $('prefContent');
46 container.innerHTML=transport.responseText;
47 selectTab("feedConfig", true);
48
49 if (caller_subop) {
50 var tuple = caller_subop.split(":");
51 if (tuple[0] == 'editFeed') {
52 window.setTimeout('editFeed('+tuple[1]+')', 100);
53 }
54
55 caller_subop = false;
56 }
57 if (typeof correctPNG != 'undefined') {
58 correctPNG();
59 }
60 notify("");
61 remove_splash();
62
63 } catch (e) {
64 exception_error("feedlist_callback2", e);
65 }
66}
67
68/* stub for subscription dialog */
69
70function dlg_frefresh_callback(transport) {
71 return feedlist_callback2(transport);
72}
73
74function filterlist_callback2(transport) {
75 var container = $('prefContent');
76 container.innerHTML=transport.responseText;
77 if (typeof correctPNG != 'undefined') {
78 correctPNG();
79 }
80 notify("");
81 remove_splash();
82}
83
84function init_label_inline_editor() {
85 try {
86 if ($("prefLabelList")) {
87 var elems = $("prefLabelList").getElementsByTagName("SPAN");
88
89 for (var i = 0; i < elems.length; i++) {
90 if (elems[i].id && elems[i].id.match("LILT-")) {
91
92 var id = elems[i].id.replace("LILT-", "");
93
94 new Ajax.InPlaceEditor(elems[i],
95 'backend.php?op=pref-labels&subop=save&id=' + id,
96 {cols: 20, rows: 1});
97
98 }
99 }
100 }
101
102 } catch (e) {
103 exception_error("init_label_inline_editor", e);
104 }
105}
106
107function labellist_callback2(transport) {
108
109 try {
110
111 var container = $('prefContent');
112 closeInfoBox();
113 container.innerHTML=transport.responseText;
114
115 init_label_inline_editor();
116
117 if (typeof correctPNG != 'undefined') {
118 correctPNG();
119 }
120 notify("");
121 remove_splash();
122
123 } catch (e) {
124 exception_error("labellist_callback2", e);
125 }
126}
127
128function userlist_callback2(transport) {
129 try {
130 var container = $('prefContent');
131 if (transport.readyState == 4) {
132 container.innerHTML=transport.responseText;
133 notify("");
134 remove_splash();
135 }
136 } catch (e) {
137 exception_error("userlist_callback2", e);
138 }
139}
140
141function prefslist_callback2(transport) {
142 try {
143 var container = $('prefContent');
144 container.innerHTML=transport.responseText;
145 notify("");
146 remove_splash();
147 } catch (e) {
148 exception_error("prefslist_callback2", e);
149 }
150}
151
152function notify_callback2(transport) {
153 notify_info(transport.responseText);
154}
155
156function prefs_reset_callback2(transport) {
157 try {
158 notify_info(transport.responseText);
159 selectTab();
160 } catch (e) {
161 exception_error("prefs_reset_callback2", e);
162 }
163}
164
165
166function changepass_callback2(transport) {
167 try {
168
169 if (transport.responseText.indexOf("ERROR: ") == 0) {
170 notify_error(transport.responseText.replace("ERROR: ", ""));
171 } else {
172 notify_info(transport.responseText);
173 var warn = $("default_pass_warning");
174 if (warn) warn.style.display = "none";
175 }
176
177 document.forms['change_pass_form'].reset();
178
179 } catch (e) {
180 exception_error("changepass_callback2", e);
181 }
182}
183
184function init_cat_inline_editor() {
185 try {
186
187 if ($("prefFeedCatList")) {
188 var elems = $("prefFeedCatList").getElementsByTagName("SPAN");
189
190 for (var i = 0; i < elems.length; i++) {
191 if (elems[i].id && elems[i].id.match("FCATT-")) {
192 var cat_id = elems[i].id.replace("FCATT-", "");
193 new Ajax.InPlaceEditor(elems[i],
194 'backend.php?op=pref-feeds&subop=editCats&action=save&cid=' + cat_id);
195 }
196 }
197 }
198
199 } catch (e) {
200 exception_error("init_cat_inline_editor", e);
201 }
202}
203
204function infobox_feed_cat_callback2(transport) {
205 try {
206 infobox_callback2(transport);
207 init_cat_inline_editor();
208 } catch (e) {
209 exception_error("infobox_feed_cat_callback2", e);
210 }
211}
212
213function updateFeedList(sort_key) {
214
215 try {
216
217 var feed_search = $("feed_search");
218 var search = "";
219 if (feed_search) { search = feed_search.value; }
220
221 var slat = $("show_last_article_times");
222
223 var slat_checked = false;
224 if (slat) {
225 slat_checked = slat.checked;
226 }
227
228 var query = "backend.php?op=pref-feeds" +
229 "&sort=" + param_escape(sort_key) +
230 "&slat=" + param_escape(slat_checked) +
231 "&search=" + param_escape(search);
232
233 new Ajax.Request(query, {
234 onComplete: function(transport) {
235 feedlist_callback2(transport);
236 } });
237 } catch (e) {
238 exception_error("updateFeedList", e);
239 }
240}
241
242function updateUsersList(sort_key) {
243
244 try {
245
246 var user_search = $("user_search");
247 var search = "";
248 if (user_search) { search = user_search.value; }
249
250 var query = "backend.php?op=pref-users&sort="
251 + param_escape(sort_key) +
252 "&search=" + param_escape(search);
253
254 new Ajax.Request(query, {
255 onComplete: function(transport) {
256 userlist_callback2(transport);
257 } });
258
259 } catch (e) {
260 exception_error("updateUsersList", e);
261 }
262}
263
264function addLabel() {
265
266 try {
267
268 var caption = prompt(__("Please enter label caption:"), "");
269
270 if (caption == null) {
271 return false;
272 }
273
274 if (caption == "") {
275 alert(__("Can't create label: missing caption."));
276 return false;
277 }
278
279 // we can be called from some other tab
280 active_tab = "labelConfig";
281
282 query = "backend.php?op=pref-labels&subop=add&caption=" +
283 param_escape(caption);
284
285 new Ajax.Request(query, {
286 onComplete: function(transport) {
287 infobox_submit_callback2(transport);
288 } });
289
290 } catch (e) {
291 exception_error("addLabel", e);
292 }
293}
294
295function addFeed() {
296
297 try {
298
299 var link = $("fadd_link");
300
301 if (link.value.length == 0) {
302 alert(__("Error: No feed URL given."));
303 } else if (!isValidURL(link.value)) {
304 alert(__("Error: Invalid feed URL."));
305 } else {
306 notify_progress("Adding feed...");
307
308 var query = "backend.php?op=pref-feeds&subop=add&from=tt-rss&feed_url=" +
309 param_escape(link.value);
310
311 new Ajax.Request(query, {
312 onComplete: function(transport) {
313 feedlist_callback2(transport);
314 } });
315
316 link.value = "";
317
318 }
319
320 } catch (e) {
321 exception_error("addFeed", e);
322 }
323
324}
325
326function addFeedCat() {
327
328 var cat = $("fadd_cat");
329
330 if (cat.value.length == 0) {
331 alert(__("Can't add category: no name specified."));
332 } else {
333 notify_progress("Adding feed category...");
334
335 var query = "backend.php?op=pref-feeds&subop=editCats&action=add&cat=" +
336 param_escape(cat.value);
337
338 new Ajax.Request(query, {
339 onComplete: function(transport) {
340 infobox_feed_cat_callback2(transport);
341 } });
342
343 link.value = "";
344
345 }
346}
347
348function addUser() {
349
350 try {
351
352 var login = prompt(__("Please enter login:"), "");
353
354 if (login == null) {
355 return false;
356 }
357
358 if (login == "") {
359 alert(__("Can't create user: no login specified."));
360 return false;
361 }
362
363 notify_progress("Adding user...");
364
365 var query = "backend.php?op=pref-users&subop=add&login=" +
366 param_escape(login);
367
368 new Ajax.Request(query, {
369 onComplete: function(transport) {
370 userlist_callback2(transport);
371 } });
372
373 } catch (e) {
374 exception_error("addUser", e);
375 }
376}
377
378function editUser(id) {
379
380 try {
381
382 disableHotkeys();
383
384 notify_progress("Loading, please wait...");
385
386 selectTableRowsByIdPrefix('prefUserList', 'UMRR-', 'UMCHK-', false);
387 selectTableRowById('UMRR-'+id, 'UMCHK-'+id, true);
388
389 disableContainerChildren("userOpToolbar", false);
390
391 var query = "backend.php?op=pref-users&subop=edit&id=" +
392 param_escape(id);
393
394 new Ajax.Request(query, {
395 onComplete: function(transport) {
396 infobox_callback2(transport);
397 } });
398
399 } catch (e) {
400 exception_error("editUser", e);
401 }
402
403}
404
405function editFilter(id) {
406
407 try {
408
409 disableHotkeys();
410
411 notify_progress("Loading, please wait...");
412
413 disableContainerChildren("filterOpToolbar", false);
414
415 selectTableRowsByIdPrefix('prefFilterList', 'FILRR-', 'FICHK-', false);
416 selectTableRowById('FILRR-'+id, 'FICHK-'+id, true);
417
418 var query = "backend.php?op=pref-filters&subop=edit&id=" +
419 param_escape(id);
420
421 new Ajax.Request(query, {
422 onComplete: function(transport) {
423 infobox_callback2(transport);
424 } });
425 } catch (e) {
426 exception_error("editFilter", e);
427 }
428}
429
430function editFeed(feed) {
431
432 try {
433
434 disableHotkeys();
435
436 notify_progress("Loading, please wait...");
437
438 // clean selection from all rows & select row being edited
439 selectTableRowsByIdPrefix('prefFeedList', 'FEEDR-', 'FRCHK-', false);
440 selectTableRowById('FEEDR-'+feed, 'FRCHK-'+feed, true);
441
442 disableContainerChildren("feedOpToolbar", false);
443
444 var query = "backend.php?op=pref-feeds&subop=editfeed&id=" +
445 param_escape(feed);
446
447 new Ajax.Request(query, {
448 onComplete: function(transport) {
449 infobox_callback2(transport);
450 } });
451
452 } catch (e) {
453 exception_error("editFeed", e);
454 }
455}
456
457function getSelectedLabels() {
458 return getSelectedTableRowIds("prefLabelList", "LILRR");
459}
460
461function getSelectedUsers() {
462 return getSelectedTableRowIds("prefUserList", "UMRR");
463}
464
465function getSelectedFeeds() {
466 return getSelectedTableRowIds("prefFeedList", "FEEDR");
467}
468
469function getSelectedFilters() {
470 return getSelectedTableRowIds("prefFilterList", "FILRR");
471}
472
473function getSelectedFeedCats() {
474 return getSelectedTableRowIds("prefFeedCatList", "FCATR");
475}
476
477
478function removeSelectedLabels() {
479
480 var sel_rows = getSelectedLabels();
481
482 if (sel_rows.length > 0) {
483
484 var ok = confirm(__("Remove selected labels?"));
485
486 if (ok) {
487 notify_progress("Removing selected labels...");
488
489 var query = "backend.php?op=pref-labels&subop=remove&ids="+
490 param_escape(sel_rows.toString());
491
492 new Ajax.Request(query, {
493 onComplete: function(transport) {
494 labellist_callback2(transport);
495 } });
496
497 }
498 } else {
499 alert(__("No labels are selected."));
500 }
501
502 return false;
503}
504
505function removeSelectedUsers() {
506
507 try {
508
509 var sel_rows = getSelectedUsers();
510
511 if (sel_rows.length > 0) {
512
513 var ok = confirm(__("Remove selected users?"));
514
515 if (ok) {
516 notify_progress("Removing selected users...");
517
518 var query = "backend.php?op=pref-users&subop=remove&ids="+
519 param_escape(sel_rows.toString());
520
521 new Ajax.Request(query, {
522 onComplete: function(transport) {
523 userlist_callback2(transport);
524 } });
525
526 }
527
528 } else {
529 alert(__("No users are selected."));
530 }
531
532 } catch (e) {
533 exception_error("removeSelectedUsers", e);
534 }
535
536 return false;
537}
538
539function removeSelectedFilters() {
540
541 try {
542
543 var sel_rows = getSelectedFilters();
544
545 if (sel_rows.length > 0) {
546
547 var ok = confirm(__("Remove selected filters?"));
548
549 if (ok) {
550 notify_progress("Removing selected filters...");
551
552 var query = "backend.php?op=pref-filters&subop=remove&ids="+
553 param_escape(sel_rows.toString());
554
555 new Ajax.Request(query, {
556 onComplete: function(transport) {
557 filterlist_callback2(transport);
558 } });
559
560 }
561 } else {
562 alert(__("No filters are selected."));
563 }
564
565 } catch (e) {
566 exception_error("removeSelectedFilters", e);
567 }
568
569 return false;
570}
571
572
573function removeSelectedFeeds() {
574
575 try {
576
577 var sel_rows = getSelectedFeeds();
578
579 if (sel_rows.length > 0) {
580
581 var ok = confirm(__("Unsubscribe from selected feeds?"));
582
583 if (ok) {
584
585 notify_progress("Unsubscribing from selected feeds...");
586
587 var query = "backend.php?op=pref-feeds&subop=remove&ids="+
588 param_escape(sel_rows.toString());
589
590 new Ajax.Request(query, {
591 onComplete: function(transport) {
592 feedlist_callback2(transport);
593 } });
594 }
595
596 } else {
597 alert(__("No feeds are selected."));
598 }
599
600 } catch (e) {
601 exception_error("removeSelectedFeeds", e);
602 }
603
604 return false;
605}
606
607function clearSelectedFeeds() {
608
609 var sel_rows = getSelectedFeeds();
610
611 if (sel_rows.length > 1) {
612 alert(__("Please select only one feed."));
613 return;
614 }
615
616 if (sel_rows.length > 0) {
617
618 var ok = confirm(__("Erase all non-starred articles in selected feed?"));
619
620 if (ok) {
621 notify_progress("Clearing selected feed...");
622 clearFeedArticles(sel_rows[0]);
623 }
624
625 } else {
626
627 alert(__("No feeds are selected."));
628
629 }
630
631 return false;
632}
633
634function purgeSelectedFeeds() {
635
636 var sel_rows = getSelectedFeeds();
637
638 if (sel_rows.length > 0) {
639
640 var pr = prompt(__("How many days of articles to keep (0 - use default)?"), "0");
641
642 if (pr != undefined) {
643 notify_progress("Purging selected feed...");
644
645 var query = "backend.php?op=rpc&subop=purge&ids="+
646 param_escape(sel_rows.toString()) + "&days=" + pr;
647
648 debug(query);
649
650 new Ajax.Request(query, {
651 onComplete: function(transport) {
652 notify('');
653 } });
654 }
655
656 } else {
657
658 alert(__("No feeds are selected."));
659
660 }
661
662 return false;
663}
664
665function removeSelectedFeedCats() {
666
667 var sel_rows = getSelectedFeedCats();
668
669 if (sel_rows.length > 0) {
670
671 var ok = confirm(__("Remove selected categories?"));
672
673 if (ok) {
674 notify_progress("Removing selected categories...");
675
676 var query = "backend.php?op=pref-feeds&subop=editCats&action=remove&ids="+
677 param_escape(sel_rows.toString());
678
679 new Ajax.Request(query, {
680 onComplete: function(transport) {
681 infobox_feed_cat_callback2(transport);
682 } });
683
684 }
685
686 } else {
687
688 alert(__("No categories are selected."));
689
690 }
691
692 return false;
693}
694
695function feedEditCancel() {
696
697 try {
698 $("subscribe_to_feed_btn").disabled = false;
699 $("top25_feeds_btn").disabled = false;
700 } catch (e) {
701 // this button is not always available, no-op if not found
702 }
703
704 closeInfoBox();
705
706 selectPrefRows('feed', false); // cleanup feed selection
707
708 return false;
709}
710
711function feedEditSave() {
712
713 try {
714
715 // FIXME: add parameter validation
716
717 var query = Form.serialize("edit_feed_form");
718
719 notify_progress("Saving feed...");
720
721 new Ajax.Request("backend.php", {
722 parameters: query,
723 onComplete: function(transport) {
724 feedlist_callback2(transport);
725 } });
726
727 closeInfoBox();
728
729 return false;
730
731 } catch (e) {
732 exception_error("feedEditSave", e);
733 }
734}
735
736function userEditCancel() {
737
738 selectPrefRows('user', false); // cleanup feed selection
739 closeInfoBox();
740
741 return false;
742}
743
744function filterEditCancel() {
745
746 try {
747 $("create_filter_btn").disabled = false;
748 selectPrefRows('filter', false); // cleanup feed selection
749 } catch (e) { }
750
751 closeInfoBox();
752
753 return false;
754}
755
756function userEditSave() {
757
758 try {
759
760 var login = document.forms["user_edit_form"].login.value;
761
762 if (login.length == 0) {
763 alert(__("Login field cannot be blank."));
764 return;
765 }
766
767 notify_progress("Saving user...");
768
769 closeInfoBox();
770
771 var query = Form.serialize("user_edit_form");
772
773 new Ajax.Request("backend.php", {
774 parameters: query,
775 onComplete: function(transport) {
776 userlist_callback2(transport);
777 } });
778
779 } catch (e) {
780 exception_error("userEditSave", e);
781 }
782
783 return false;
784
785}
786
787
788function filterEditSave() {
789
790 try {
791
792 notify_progress("Saving filter...");
793
794 var query = "backend.php?" + Form.serialize("filter_edit_form");
795
796 closeInfoBox();
797
798 $("create_filter_btn").disabled = false;
799
800 new Ajax.Request(query, {
801 onComplete: function(transport) {
802 filterlist_callback2(transport);
803 } });
804
805 } catch (e) {
806 exception_error("filterEditSave", e);
807 }
808
809 return false;
810}
811
812
813function editSelectedUser() {
814 var rows = getSelectedUsers();
815
816 if (rows.length == 0) {
817 alert(__("No users are selected."));
818 return;
819 }
820
821 if (rows.length > 1) {
822 alert(__("Please select only one user."));
823 return;
824 }
825
826 notify("");
827
828 editUser(rows[0]);
829}
830
831function resetSelectedUserPass() {
832
833 try {
834
835 var rows = getSelectedUsers();
836
837 if (rows.length == 0) {
838 alert(__("No users are selected."));
839 return;
840 }
841
842 if (rows.length > 1) {
843 alert(__("Please select only one user."));
844 return;
845 }
846
847 var ok = confirm(__("Reset password of selected user?"));
848
849 if (ok) {
850 notify_progress("Resetting password for selected user...");
851
852 var id = rows[0];
853
854 var query = "backend.php?op=pref-users&subop=resetPass&id=" +
855 param_escape(id);
856
857 new Ajax.Request(query, {
858 onComplete: function(transport) {
859 userlist_callback2(transport);
860 } });
861
862 }
863
864 } catch (e) {
865 exception_error("resetSelectedUserPass", e);
866 }
867}
868
869function selectedUserDetails() {
870
871 try {
872
873 var rows = getSelectedUsers();
874
875 if (rows.length == 0) {
876 alert(__("No users are selected."));
877 return;
878 }
879
880 if (rows.length > 1) {
881 alert(__("Please select only one user."));
882 return;
883 }
884
885 notify_progress("Loading, please wait...");
886
887 var id = rows[0];
888
889 var query = "backend.php?op=pref-users&subop=user-details&id=" + id;
890
891 new Ajax.Request(query, {
892 onComplete: function(transport) {
893 infobox_callback2(transport);
894 } });
895 } catch (e) {
896 exception_error("selectedUserDetails", e);
897 }
898}
899
900
901function editSelectedFilter() {
902 var rows = getSelectedFilters();
903
904 if (rows.length == 0) {
905 alert(__("No filters are selected."));
906 return;
907 }
908
909 if (rows.length > 1) {
910 alert(__("Please select only one filter."));
911 return;
912 }
913
914 notify("");
915
916 editFilter(rows[0]);
917
918}
919
920
921function editSelectedFeed() {
922 var rows = getSelectedFeeds();
923
924 if (rows.length == 0) {
925 alert(__("No feeds are selected."));
926 return;
927 }
928
929 if (rows.length > 1) {
930 alert(__("Please select one feed."));
931 return;
932 }
933
934 notify("");
935
936 editFeed(rows[0]);
937
938}
939
940function editSelectedFeeds() {
941
942 try {
943 var rows = getSelectedFeeds();
944
945 if (rows.length == 0) {
946 alert(__("No feeds are selected."));
947 return;
948 }
949
950 notify("");
951
952 disableHotkeys();
953
954 notify_progress("Loading, please wait...");
955
956 var query = "backend.php?op=pref-feeds&subop=editfeeds&ids=" +
957 param_escape(rows.toString());
958
959 new Ajax.Request(query, {
960 onComplete: function(transport) {
961 infobox_callback2(transport);
962 } });
963
964 } catch (e) {
965 exception_error("editSelectedFeeds", e);
966 }
967}
968
969function piggie(enable) {
970 if (enable) {
971 debug("I LOVEDED IT!");
972 var piggie = $("piggie");
973
974 Element.show(piggie);
975 Position.Center(piggie);
976 Effect.Puff(piggie);
977
978 }
979}
980
981function validateOpmlImport() {
982
983 var opml_file = $("opml_file");
984
985 if (opml_file.value.length == 0) {
986 alert(__("No OPML file to upload."));
987 return false;
988 } else {
989 return true;
990 }
991}
992
993function updateFilterList(sort_key) {
994 try {
995
996 var filter_search = $("filter_search");
997 var search = "";
998 if (filter_search) { search = filter_search.value; }
999
1000 var query = "backend.php?op=pref-filters&sort=" +
1001 param_escape(sort_key) +
1002 "&search=" + param_escape(search);
1003
1004 new Ajax.Request(query, {
1005 onComplete: function(transport) {
1006 filterlist_callback2(transport);
1007 } });
1008
1009 } catch (e) {
1010 exception_error("updateFilterList", e);
1011 }
1012
1013}
1014
1015function updateLabelList(sort_key) {
1016
1017 try {
1018
1019 var label_search = $("label_search");
1020 var search = "";
1021 if (label_search) { search = label_search.value; }
1022
1023 var query = "backend.php?op=pref-labels&sort=" +
1024 param_escape(sort_key) +
1025 "&search=" + param_escape(search);
1026
1027 new Ajax.Request(query, {
1028 onComplete: function(transport) {
1029 labellist_callback2(transport);
1030 } });
1031
1032 } catch (e) {
1033 exception_error("updateLabelList", e);
1034 }
1035}
1036
1037function updatePrefsList() {
1038
1039 var query = "backend.php?op=pref-prefs";
1040
1041 new Ajax.Request(query, {
1042 onComplete: function(transport) {
1043 prefslist_callback2(transport);
1044 } });
1045
1046}
1047
1048function selectTab(id, noupdate, subop) {
1049
1050// alert(id);
1051
1052 if (!id) id = active_tab;
1053
1054 try {
1055
1056 try {
1057 if (id != active_tab) {
1058 var c = $('prefContent');
1059 c.scrollTop = 0;
1060 }
1061 } catch (e) { };
1062
1063 if (!noupdate) {
1064
1065 debug("selectTab: " + id + "(NU: " + noupdate + ")");
1066
1067 notify_progress("Loading, please wait...");
1068
1069 // close active infobox if needed
1070 closeInfoBox();
1071
1072 // clean up all current selections, just in case
1073 active_feed_cat = false;
1074
1075// Effect.Fade("prefContent", {duration: 1, to: 0.01,
1076// queue: { position:'end', scope: 'FEED_TAB', limit: 1 } } );
1077
1078 if (id == "feedConfig") {
1079 updateFeedList();
1080 } else if (id == "filterConfig") {
1081 updateFilterList();
1082 } else if (id == "labelConfig") {
1083 updateLabelList();
1084 } else if (id == "genConfig") {
1085 updatePrefsList();
1086 } else if (id == "userConfig") {
1087 updateUsersList();
1088 }
1089 }
1090
1091 /* clean selection from all tabs */
1092
1093 var tabs_holder = $("prefTabs");
1094 var tab = tabs_holder.firstChild;
1095
1096 while (tab) {
1097 if (tab.className && tab.className.match("prefsTabSelected")) {
1098 tab.className = "prefsTab";
1099 }
1100 tab = tab.nextSibling;
1101 }
1102
1103 /* mark new tab as selected */
1104
1105 tab = $(id + "Tab");
1106
1107 if (tab) {
1108 if (!tab.className.match("Selected")) {
1109 tab.className = tab.className + "Selected";
1110 }
1111 }
1112
1113 active_tab = id;
1114
1115 } catch (e) {
1116 exception_error("selectTab", e);
1117 }
1118}
1119
1120function backend_sanity_check_callback2(transport) {
1121
1122 try {
1123
1124 if (sanity_check_done) {
1125 fatalError(11, "Sanity check request received twice. This can indicate "+
1126 "presence of Firebug or some other disrupting extension. "+
1127 "Please disable it and try again.");
1128 return;
1129 }
1130
1131 if (!transport.responseXML) {
1132 fatalError(3, "Sanity Check: Received reply is not XML",
1133 transport.responseText);
1134 return;
1135 }
1136
1137 var reply = transport.responseXML.firstChild.firstChild;
1138
1139 if (!reply) {
1140 fatalError(3, "Sanity Check: Invalid RPC reply", transport.responseText);
1141 return;
1142 }
1143
1144 var error_code = reply.getAttribute("error-code");
1145
1146 if (error_code && error_code != 0) {
1147 return fatalError(error_code, reply.getAttribute("error-msg"));
1148 }
1149
1150 debug("sanity check ok");
1151
1152 var params = reply.nextSibling;
1153
1154 if (params) {
1155 debug('reading init-params...');
1156 var param = params.firstChild;
1157
1158 while (param) {
1159 var k = param.getAttribute("key");
1160 var v = param.getAttribute("value");
1161 debug(k + " => " + v);
1162 init_params[k] = v;
1163 param = param.nextSibling;
1164 }
1165 }
1166
1167 sanity_check_done = true;
1168
1169 init_second_stage();
1170
1171 } catch (e) {
1172 exception_error("backend_sanity_check_callback", e);
1173 }
1174}
1175
1176function init_second_stage() {
1177
1178 try {
1179 active_tab = getInitParam("prefs_active_tab");
1180 if (!$(active_tab+"Tab")) active_tab = "genConfig";
1181 if (!active_tab || active_tab == '0') active_tab = "genConfig";
1182
1183 document.onkeydown = pref_hotkey_handler;
1184 document.onmousedown = mouse_down_handler;
1185 document.onmouseup = mouse_up_handler;
1186
1187 var tab = getURLParam('tab');
1188
1189 caller_subop = getURLParam('subop');
1190
1191 if (getURLParam("subopparam")) {
1192 caller_subop = caller_subop + ":" + getURLParam("subopparam");
1193 }
1194
1195 if (tab) {
1196 active_tab = tab;
1197 }
1198
1199 if (navigator.userAgent.match("Opera")) {
1200 setTimeout("selectTab()", 500);
1201 } else {
1202 selectTab(active_tab);
1203 }
1204 notify("");
1205
1206 loading_set_progress(60);
1207
1208 } catch (e) {
1209 exception_error("init_second_stage", e);
1210 }
1211}
1212
1213function init() {
1214
1215 try {
1216
1217 if (arguments.callee.done) return;
1218 arguments.callee.done = true;
1219
1220 if (getURLParam('debug')) {
1221 Element.show("debug_output");
1222 debug('debug mode activated');
1223 }
1224
1225 loading_set_progress(30);
1226
1227 var query = "backend.php?op=rpc&subop=sanityCheck";
1228
1229 new Ajax.Request(query, {
1230 onComplete: function(transport) {
1231 backend_sanity_check_callback2(transport);
1232 } });
1233
1234 } catch (e) {
1235 exception_error("init", e);
1236 }
1237}
1238
1239function categorizeSelectedFeeds() {
1240
1241 var sel_rows = getSelectedFeeds();
1242
1243 var cat_sel = $("sfeed_set_fcat");
1244 var cat_id = cat_sel[cat_sel.selectedIndex].value;
1245
1246 if (sel_rows.length > 0) {
1247
1248 notify_progress("Changing category of selected feeds...");
1249
1250 var query = "backend.php?op=pref-feeds&subop=categorize&ids="+
1251 param_escape(sel_rows.toString()) + "&cat_id=" + param_escape(cat_id);
1252
1253 new Ajax.Request(query, {
1254 onComplete: function(transport) {
1255 feedlist_callback2(transport);
1256 } });
1257
1258 } else {
1259
1260 alert(__("No feeds are selected."));
1261
1262 }
1263
1264}
1265
1266function validatePrefsReset() {
1267 try {
1268 var ok = confirm(__("Reset to defaults?"));
1269
1270 if (ok) {
1271
1272 var query = Form.serialize("pref_prefs_form");
1273 query = query + "&subop=reset-config";
1274 debug(query);
1275
1276 new Ajax.Request("backend.php", {
1277 parameters: query,
1278 onComplete: function(transport) {
1279 prefs_reset_callback2(transport);
1280 } });
1281
1282 }
1283
1284 } catch (e) {
1285 exception_error("validatePrefsSave", e);
1286 }
1287
1288 return false;
1289
1290}
1291
1292function feedBrowserSubscribe() {
1293 try {
1294
1295 var selected = getSelectedFeedsFromBrowser();
1296
1297 if (selected.length > 0) {
1298 closeInfoBox();
1299
1300 var query = "backend.php?op=pref-feeds&subop=massSubscribe&ids="+
1301 param_escape(selected.toString());
1302
1303 new Ajax.Request(query, {
1304 onComplete: function(transport) {
1305 feedlist_callback2(transport);
1306 } });
1307
1308 } else {
1309 alert(__("No feeds are selected."));
1310 }
1311
1312 } catch (e) {
1313 exception_error("feedBrowserSubscribe", e);
1314 }
1315}
1316
1317function updateBigFeedBrowserBtn() {
1318 notify_progress("Loading, please wait...");
1319 return updateBigFeedBrowser();
1320}
1321
1322function selectPrefRows(kind, select) {
1323
1324 if (kind) {
1325 var opbarid = false;
1326 var nchk = false;
1327 var nrow = false;
1328 var lname = false;
1329
1330 if (kind == "feed") {
1331 opbarid = "feedOpToolbar";
1332 nrow = "FEEDR-";
1333 nchk = "FRCHK-";
1334 lname = "prefFeedList";
1335 } else if (kind == "fcat") {
1336 opbarid = "catOpToolbar";
1337 nrow = "FCATR-";
1338 nchk = "FCCHK-";
1339 lname = "prefFeedCatList";
1340 } else if (kind == "filter") {
1341 opbarid = "filterOpToolbar";
1342 nrow = "FILRR-";
1343 nchk = "FICHK-";
1344 lname = "prefFilterList";
1345 } else if (kind == "label") {
1346 opbarid = "labelOpToolbar";
1347 nrow = "LILRR-";
1348 nchk = "LICHK-";
1349 lname = "prefLabelList";
1350 } else if (kind == "user") {
1351 opbarid = "userOpToolbar";
1352 nrow = "UMRR-";
1353 nchk = "UMCHK-";
1354 lname = "prefUserList";
1355 }
1356
1357 if (opbarid) {
1358 selectTableRowsByIdPrefix(lname, nrow, nchk, select);
1359 disableContainerChildren(opbarid, !select);
1360 }
1361
1362 }
1363}
1364
1365
1366function toggleSelectPrefRow(sender, kind) {
1367
1368 toggleSelectRow(sender);
1369
1370 if (kind) {
1371 var opbarid = false;
1372 var nsel = -1;
1373
1374 if (kind == "feed") {
1375 opbarid = "feedOpToolbar";
1376 nsel = getSelectedFeeds();
1377 } else if (kind == "fcat") {
1378 opbarid = "catOpToolbar";
1379 nsel = getSelectedFeedCats();
1380 } else if (kind == "filter") {
1381 opbarid = "filterOpToolbar";
1382 nsel = getSelectedFilters();
1383 } else if (kind == "label") {
1384 opbarid = "labelOpToolbar";
1385 nsel = getSelectedLabels();
1386 } else if (kind == "user") {
1387 opbarid = "userOpToolbar";
1388 nsel = getSelectedUsers();
1389 }
1390
1391 if (opbarid && nsel != -1) {
1392 disableContainerChildren(opbarid, nsel == false);
1393 }
1394
1395 }
1396}
1397
1398function toggleSelectFBListRow(sender) {
1399 toggleSelectListRow(sender);
1400 disableContainerChildren("fbrOpToolbar", getSelectedFeedsFromBrowser() == 0);
1401}
1402
1403var seq = "";
1404
1405function pref_hotkey_handler(e) {
1406 try {
1407
1408 var keycode;
1409 var shift_key = false;
1410
1411 try {
1412 shift_key = e.shiftKey;
1413 } catch (e) {
1414
1415 }
1416
1417 if (window.event) {
1418 keycode = window.event.keyCode;
1419 } else if (e) {
1420 keycode = e.which;
1421 }
1422
1423 var keychar = String.fromCharCode(keycode);
1424
1425 if (keycode == 27) { // escape
1426 if (Element.visible("hotkey_help_overlay")) {
1427 Element.hide("hotkey_help_overlay");
1428 }
1429 colorPickerHideAll();
1430 hotkey_prefix = false;
1431 closeInfoBox();
1432 }
1433
1434 if (!hotkeys_enabled) {
1435 debug("hotkeys disabled");
1436 return;
1437 }
1438
1439 if (keycode == 16) return; // ignore lone shift
1440
1441 if ((keycode == 67 || keycode == 71) && !hotkey_prefix) {
1442 hotkey_prefix = keycode;
1443 debug("KP: PREFIX=" + keycode + " CHAR=" + keychar);
1444 return;
1445 }
1446
1447 if (Element.visible("hotkey_help_overlay")) {
1448 Element.hide("hotkey_help_overlay");
1449 }
1450
1451 if (keycode == 13 || keycode == 27) {
1452 seq = "";
1453 } else {
1454 seq = seq + "" + keycode;
1455 }
1456
1457 /* Global hotkeys */
1458
1459 if (!hotkey_prefix) {
1460
1461 if (keycode == 68 && shift_key) { // d
1462 if (!Element.visible("debug_output")) {
1463 Element.show("debug_output");
1464 debug('debug mode activated');
1465 } else {
1466 Element.hide("debug_output");
1467 }
1468 return;
1469 }
1470
1471 if ((keycode == 191 || keychar == '?') && shift_key) { // ?
1472 if (!Element.visible("hotkey_help_overlay")) {
1473 //Element.show("hotkey_help_overlay");
1474 Effect.Appear("hotkey_help_overlay", {duration : 0.3});
1475 } else {
1476 Element.hide("hotkey_help_overlay");
1477 }
1478 return false;
1479 }
1480
1481 if (keycode == 191 || keychar == '/') { // /
1482 var search_boxes = new Array("label_search",
1483 "feed_search", "filter_search", "user_search", "feed_browser_search");
1484
1485 for (var i = 0; i < search_boxes.length; i++) {
1486 var elem = $(search_boxes[i]);
1487 if (elem) {
1488 focus_element(search_boxes[i]);
1489 return false;
1490 }
1491 }
1492 }
1493 }
1494
1495 /* Prefix c */
1496
1497 if (hotkey_prefix == 67) { // c
1498 hotkey_prefix = false;
1499
1500 if (keycode == 70) { // f
1501 displayDlg("quickAddFilter");
1502 return false;
1503 }
1504
1505 if (keycode == 83) { // s
1506 displayDlg("quickAddFeed");
1507 return false;
1508 }
1509
1510/* if (keycode == 76) { // l
1511 displayDlg("quickAddLabel");
1512 return false;
1513 } */
1514
1515 if (keycode == 85) { // u
1516 // no-op
1517 }
1518
1519 if (keycode == 67) { // c
1520 editFeedCats();
1521 return false;
1522 }
1523
1524 if (keycode == 84 && shift_key) { // T
1525 browseFeeds();
1526 return false;
1527 }
1528
1529 }
1530
1531 /* Prefix g */
1532
1533 if (hotkey_prefix == 71) { // g
1534
1535 hotkey_prefix = false;
1536
1537 if (keycode == 49 && $("genConfigTab")) { // 1
1538 selectTab("genConfig");
1539 return false;
1540 }
1541
1542 if (keycode == 50 && $("feedConfigTab")) { // 2
1543 selectTab("feedConfig");
1544 return false;
1545 }
1546
1547 if (keycode == 51 && $("filterConfigTab")) { // 4
1548 selectTab("filterConfig");
1549 return false;
1550 }
1551
1552 if (keycode == 52 && $("labelConfigTab")) { // 5
1553 selectTab("labelConfig");
1554 return false;
1555 }
1556
1557 if (keycode == 53 && $("userConfigTab")) { // 6
1558 selectTab("userConfig");
1559 return false;
1560 }
1561
1562 if (keycode == 88) { // x
1563 return gotoMain();
1564 }
1565
1566 }
1567
1568 if ($("piggie")) {
1569
1570 if (seq.match("807371717369")) {
1571 seq = "";
1572 piggie(true);
1573 } else {
1574 piggie(false);
1575 }
1576 }
1577
1578 if (hotkey_prefix) {
1579 debug("KP: PREFIX=" + hotkey_prefix + " CODE=" + keycode + " CHAR=" + keychar);
1580 } else {
1581 debug("KP: CODE=" + keycode + " CHAR=" + keychar);
1582 }
1583
1584 } catch (e) {
1585 exception_error("pref_hotkey_handler", e);
1586 }
1587}
1588
1589function editFeedCats() {
1590 try {
1591 $("subscribe_to_feed_btn").disabled = true;
1592
1593 try {
1594 $("top25_feeds_btn").disabled = true;
1595 } catch (e) {
1596 // this button is not always available, no-op if not found
1597 }
1598
1599 var query = "backend.php?op=pref-feeds&subop=editCats";
1600
1601 new Ajax.Request(query, {
1602 onComplete: function(transport) {
1603 infobox_feed_cat_callback2(transport);
1604 } });
1605 } catch (e) {
1606 exception_error("editFeedCats", e);
1607 }
1608}
1609
1610function showFeedsWithErrors() {
1611 displayDlg('feedUpdateErrors');
1612}
1613
1614function changeUserPassword() {
1615
1616 try {
1617
1618 var f = document.forms["change_pass_form"];
1619
1620 if (f) {
1621 if (f.OLD_PASSWORD.value == "") {
1622 new Effect.Highlight(f.OLD_PASSWORD);
1623 notify_error("Old password cannot be blank.");
1624 return false;
1625 }
1626
1627 if (f.NEW_PASSWORD.value == "") {
1628 new Effect.Highlight(f.NEW_PASSWORD);
1629 notify_error("New password cannot be blank.");
1630 return false;
1631 }
1632
1633 if (f.CONFIRM_PASSWORD.value == "") {
1634 new Effect.Highlight(f.CONFIRM_PASSWORD);
1635 notify_error("Entered passwords do not match.");
1636 return false;
1637 }
1638
1639 if (f.CONFIRM_PASSWORD.value != f.NEW_PASSWORD.value) {
1640 new Effect.Highlight(f.CONFIRM_PASSWORD);
1641 new Effect.Highlight(f.NEW_PASSWORD);
1642 notify_error("Entered passwords do not match.");
1643 return false;
1644 }
1645
1646 }
1647
1648 var query = Form.serialize("change_pass_form");
1649
1650 notify_progress("Trying to change password...");
1651
1652 new Ajax.Request("backend.php", {
1653 parameters: query,
1654 onComplete: function(transport) {
1655 changepass_callback2(transport);
1656 } });
1657
1658
1659 } catch (e) {
1660 exception_error("changeUserPassword", e);
1661 }
1662
1663 return false;
1664}
1665
1666function changeUserEmail() {
1667
1668 try {
1669
1670 var query = Form.serialize("change_email_form");
1671
1672 notify_progress("Trying to change e-mail...");
1673
1674 new Ajax.Request("backend.php", {
1675 parameters: query,
1676 onComplete: function(transport) {
1677 notify_callback2(transport);
1678 } });
1679
1680 } catch (e) {
1681 exception_error("changeUserPassword", e);
1682 }
1683
1684 return false;
1685
1686}
1687
1688function feedlistToggleSLAT() {
1689 notify_progress("Loading, please wait...");
1690 updateFeedList()
1691}
1692
1693function pubRegenKey() {
1694
1695 var ok = confirm(__("Replace current publishing address with a new one?"));
1696
1697 if (ok) {
1698
1699 notify_progress("Trying to change address...");
1700
1701 var query = "backend.php?op=rpc&subop=regenPubKey";
1702
1703 new Ajax.Request(query, {
1704 onComplete: function(transport) {
1705 replace_pubkey_callback(transport);
1706 } });
1707
1708 }
1709
1710 return false;
1711}
1712
1713function validatePrefsSave() {
1714 try {
1715
1716 var ok = confirm(__("Save current configuration?"));
1717
1718 if (ok) {
1719
1720 var query = Form.serialize("pref_prefs_form");
1721 query = query + "&subop=save-config";
1722 debug(query);
1723
1724 new Ajax.Request("backend.php", {
1725 parameters: query,
1726 onComplete: function(transport) {
1727 notify_callback2(transport);
1728 } });
1729
1730 }
1731
1732 } catch (e) {
1733 exception_error("validatePrefsSave", e);
1734 }
1735
1736 return false;
1737}
1738
1739function feedActionChange() {
1740 try {
1741 var chooser = $("feedActionChooser");
1742 var opid = chooser[chooser.selectedIndex].value;
1743
1744 chooser.selectedIndex = 0;
1745 feedActionGo(opid);
1746 } catch (e) {
1747 exception_error("feedActionChange", e);
1748 }
1749}
1750
1751function feedActionGo(op) {
1752 try {
1753 if (op == "facEdit") {
1754
1755 var rows = getSelectedFeeds();
1756
1757 if (rows.length > 1) {
1758 editSelectedFeeds();
1759 } else {
1760 editSelectedFeed();
1761 }
1762 }
1763
1764 if (op == "facClear") {
1765 clearSelectedFeeds();
1766 }
1767
1768 if (op == "facPurge") {
1769 purgeSelectedFeeds();
1770 }
1771
1772 if (op == "facEditCats") {
1773 editFeedCats();
1774 }
1775
1776 if (op == "facRescore") {
1777 rescoreSelectedFeeds();
1778 }
1779
1780 if (op == "facUnsubscribe") {
1781 removeSelectedFeeds();
1782 }
1783
1784 } catch (e) {
1785 exception_error("feedActionGo", e);
1786
1787 }
1788}
1789
1790function clearFeedArticles(feed_id) {
1791
1792 notify_progress("Clearing feed...");
1793
1794 var query = "backend.php?op=pref-feeds&quiet=1&subop=clear&id=" + feed_id;
1795
1796 new Ajax.Request(query, {
1797 onComplete: function(transport) {
1798 notify('');
1799 } });
1800
1801 return false;
1802}
1803
1804function rescoreSelectedFeeds() {
1805
1806 var sel_rows = getSelectedFeeds();
1807
1808 if (sel_rows.length > 0) {
1809
1810 //var ok = confirm(__("Rescore last 100 articles in selected feeds?"));
1811 var ok = confirm(__("Rescore articles in selected feeds?"));
1812
1813 if (ok) {
1814 notify_progress("Rescoring selected feeds...", true);
1815
1816 var query = "backend.php?op=pref-feeds&subop=rescore&quiet=1&ids="+
1817 param_escape(sel_rows.toString());
1818
1819 new Ajax.Request(query, {
1820 onComplete: function(transport) {
1821 notify_callback2(transport);
1822 } });
1823
1824 }
1825 } else {
1826 alert(__("No feeds are selected."));
1827 }
1828
1829 return false;
1830}
1831
1832function rescore_all_feeds() {
1833 var ok = confirm(__("Rescore all articles? This operation may take a lot of time."));
1834
1835 if (ok) {
1836 notify_progress("Rescoring feeds...", true);
1837
1838 var query = "backend.php?op=pref-feeds&subop=rescoreAll&quiet=1";
1839
1840 new Ajax.Request(query, {
1841 onComplete: function(transport) {
1842 notify_callback2(transport);
1843 } });
1844 }
1845}
1846
1847function removeFilter(id, title) {
1848
1849 try {
1850
1851 var msg = __("Remove filter %s?").replace("%s", title);
1852
1853 var ok = confirm(msg);
1854
1855 if (ok) {
1856 closeInfoBox();
1857
1858 notify_progress("Removing filter...");
1859
1860 var query = "backend.php?op=pref-filters&subop=remove&ids="+
1861 param_escape(id);
1862
1863 new Ajax.Request(query, {
1864 onComplete: function(transport) {
1865 filterlist_callback2(transport);
1866 } });
1867
1868 }
1869
1870 } catch (e) {
1871 exception_error("removeFilter", e);
1872 }
1873
1874 return false;
1875}
1876
1877function unsubscribeFeed(id, title) {
1878
1879 try {
1880
1881 var msg = __("Unsubscribe from %s?").replace("%s", title);
1882
1883 var ok = confirm(msg);
1884
1885 if (ok) {
1886 closeInfoBox();
1887
1888 notify_progress("Removing feed...");
1889
1890 var query = "backend.php?op=pref-feeds&subop=remove&ids="+
1891 param_escape(id);
1892
1893 new Ajax.Request(query, {
1894 onComplete: function(transport) {
1895 feedlist_callback2(transport);
1896 } });
1897 }
1898
1899 } catch (e) {
1900 exception_error("unsubscribeFeed", e);
1901 }
1902
1903 return false;
1904
1905}
1906
1907function feedsEditSave() {
1908 try {
1909
1910 var ok = confirm(__("Save changes to selected feeds?"));
1911
1912 if (ok) {
1913
1914 var f = document.forms["batch_edit_feed_form"];
1915
1916 var query = Form.serialize("batch_edit_feed_form");
1917
1918 /* Form.serialize ignores unchecked checkboxes */
1919
1920 if (!query.match("&hidden=") &&
1921 f.hidden.disabled == false) {
1922 query = query + "&hidden=false";
1923 }
1924
1925 if (!query.match("&rtl_content=") &&
1926 f.rtl_content.disabled == false) {
1927 query = query + "&rtl_content=false";
1928 }
1929
1930 if (!query.match("&private=") &&
1931 f.private.disabled == false) {
1932 query = query + "&private=false";
1933 }
1934
1935 if (!query.match("&cache_images=") &&
1936 f.cache_images.disabled == false) {
1937 query = query + "&cache_images=false";
1938 }
1939
1940 if (!query.match("&include_in_digest=") &&
1941 f.include_in_digest.disabled == false) {
1942 query = query + "&include_in_digest=false";
1943 }
1944
1945 closeInfoBox();
1946
1947 notify_progress("Saving feeds...");
1948
1949 new Ajax.Request("backend.php", {
1950 parameters: query,
1951 onComplete: function(transport) {
1952 feedlist_callback2(transport);
1953 } });
1954
1955 }
1956
1957 return false;
1958 } catch (e) {
1959 exception_error("feedsEditSave", e);
1960 }
1961}
1962
1963function batchFeedsToggleField(cb, elem, label) {
1964 try {
1965 var f = document.forms["batch_edit_feed_form"];
1966 var l = $(label);
1967
1968 if (cb.checked) {
1969 f[elem].disabled = false;
1970
1971 if (l) {
1972 l.className = "";
1973 };
1974
1975// new Effect.Highlight(f[elem], {duration: 1, startcolor: "#fff7d5",
1976// queue: { position:'end', scope: 'BPEFQ', limit: 1 } } );
1977
1978 } else {
1979 f[elem].disabled = true;
1980
1981 if (l) {
1982 l.className = "insensitive";
1983 };
1984
1985 }
1986 } catch (e) {
1987 exception_error("batchFeedsToggleField", e);
1988 }
1989}
1990
1991function labelColorReset() {
1992 try {
1993 var labels = getSelectedLabels();
1994
1995 var ok = confirm(__("Reset label colors to default?"));
1996
1997 if (ok) {
1998
1999 var query = "backend.php?op=pref-labels&subop=color-reset&ids="+
2000 param_escape(labels.toString());
2001
2002 new Ajax.Request(query, {
2003 onComplete: function(transport) {
2004 labellist_callback2(transport);
2005 } });
2006 }
2007
2008 } catch (e) {
2009 exception_error("labelColorReset", e);
2010 }
2011}
2012
2013function labelColorAsk(id, kind) {
2014 try {
2015
2016 var p = null
2017
2018 if (kind == "fg") {
2019 p = prompt(__("Please enter new label foreground color:"));
2020 } else {
2021 p = prompt(__("Please enter new label background color:"));
2022 }
2023
2024 if (p != null) {
2025
2026 var query = "backend.php?op=pref-labels&subop=color-set&kind=" + kind +
2027 "&ids="+ param_escape(id) + "&color=" + param_escape(p);
2028
2029 selectPrefRows('label', false);
2030
2031 var e = $("LICID-" + id);
2032
2033 if (e) {
2034 if (kind == "fg") {
2035 e.style.color = p
2036 } else {
2037 e.style.backgroundColor = p;
2038 }
2039 }
2040
2041 new Ajax.Request(query);
2042 }
2043
2044 } catch (e) {
2045 exception_error("labelColorReset", e);
2046 }
2047}
2048
2049
2050function colorPicker(id, fg, bg) {
2051 try {
2052 var picker = $("colorPicker-" + id);
2053
2054 if (picker) Element.show(picker);
2055
2056 } catch (e) {
2057 exception_error("colorPicker", e);
2058 }
2059}
2060
2061function colorPickerHideAll() {
2062 try {
2063 if ($("prefLabelList")) {
2064
2065 var elems = $("prefLabelList").getElementsByTagName("DIV");
2066
2067 for (var i = 0; i < elems.length; i++) {
2068 if (elems[i].id && elems[i].id.match("colorPicker-")) {
2069 Element.hide(elems[i]);
2070 }
2071 }
2072 }
2073
2074 } catch (e) {
2075 exception_error("colorPickerHideAll", e);
2076 }
2077}
2078
2079function colorPickerDo(id, fg, bg) {
2080 try {
2081
2082 var query = "backend.php?op=pref-labels&subop=color-set&kind=both"+
2083 "&ids=" + param_escape(id) + "&fg=" + param_escape(fg) +
2084 "&bg=" + param_escape(bg);
2085
2086 var e = $("LICID-" + id);
2087
2088 if (e) {
2089 e.style.color = fg;
2090 e.style.backgroundColor = bg;
2091 }
2092
2093 new Ajax.Request(query);
2094
2095 } catch (e) {
2096 exception_error("colorPickerDo", e);
2097 }
2098}
2099
2100function colorPickerActive(b) {
2101 color_picker_active = b;
2102}
2103
2104function mouse_down_handler(e) {
2105 try {
2106
2107 /* do not prevent right click */
2108 if (e && e.button && e.button == 2) return;
2109
2110 if (selection_disabled) {
2111 document.onselectstart = function() { return false; };
2112 return false;
2113 }
2114
2115 } catch (e) {
2116 exception_error("mouse_down_handler", e);
2117 }
2118}
2119
2120function mouse_up_handler(e) {
2121 try {
2122 mouse_is_down = false;
2123
2124 if (!selection_disabled) {
2125 document.onselectstart = null;
2126 }
2127
2128 if (!color_picker_active) {
2129 colorPickerHideAll();
2130 }
2131
2132 } catch (e) {
2133 exception_error("mouse_up_handler", e);
2134 }
2135}
2136