]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/web/opac/skin/kcls-wire/js/misc.js
kill a lot of inline styling, add some more js stubs, fix a bug in advanced.tt2
[working/Evergreen.git] / Open-ILS / web / opac / skin / kcls-wire / js / misc.js
1 /* Some really basic utils copied mostly from old opac js:
2  * opac_utils.js, utils.js, misc.js (kcls). */
3 function _stub() { alert("XXX disconnected"); } /* for in progress work */
4
5 function $(id) { return document.getElementById(id); }
6 function $n(root, nodeName, attr) {
7     return findNodeByName(root, nodeName, attr);
8 }
9
10 function findNodeByName(root, nodeName, /* defaults to "name" */attr) {
11     if (!root || !nodeName) return null;
12     if (root.nodeType != 1) return null;
13     if (!attr) attr = "name";
14     if (root.getAttribute(attr) == nodeName || root[attr] == nodeName)
15         return root;
16
17     for (var i = 0; i != root.childNodes.length; i++) {
18         var n = findNodeByName(root.childNodes[i], nodeName);
19         if (n) return n;
20     }
21
22     return null;
23 }
24
25 function swapCSSClass(obj, old, newc) {
26         removeCSSClass(obj, old);
27         addCSSClass(obj, newc);
28 }
29
30 function addCSSClass(e,c) {
31     /* XXX I've seen much simpler implementation of this idea that just
32      * do a regexp replace on e.className.  Any reason why we're making
33      * it so hard here? I could see the justification if there's a certain
34      * browser that doesn't cooperate. */
35         if(!e || !c) return;
36
37         var css_class_string = e.className;
38         var css_class_array;
39
40         if(css_class_string)
41                 css_class_array = css_class_string.split(/\s+/);
42
43         var string_ip = ""; /*strip out nulls*/
44         for (var css_class in css_class_array) {
45                 if (css_class_array[css_class] == c) { return; }
46                 if(css_class_array[css_class] !=null)
47                         string_ip += css_class_array[css_class] + " ";
48         }
49         string_ip += c;
50         e.className = string_ip;
51 }
52
53 function removeCSSClass(e, c) {
54         if(!e || !c) return;
55
56         var css_class_string = '';
57
58         var css_class_array = e.className;
59         if( css_class_array )
60                 css_class_array = css_class_array.split(/\s+/);
61
62         var first = 1;
63         for (var css_class in css_class_array) {
64                 if (css_class_array[css_class] != c) {
65                         if (first == 1) {
66                                 css_class_string = css_class_array[css_class];
67                                 first = 0;
68                         } else {
69                                 css_class_string = css_class_string + ' ' +
70                                         css_class_array[css_class];
71                         }
72                 }
73         }
74         e.className = css_class_string;
75 }
76
77 function hideMe(obj) { addCSSClass(obj, "hide_me"); }
78 function unHideMe(obj) { removeCSSClass(obj, "hide_me"); }
79
80 function swapTabs(el) {
81     if (!el) return;
82
83     var tabs = [];
84     for (var i = 0; i < el.parentNode.childNodes.length; i++) {
85         var node = el.parentNode.childNodes[i];
86         if (node.nodeType == 1 && node.nodeName.toLowerCase() == "a")
87             tabs.push(node);
88     }
89
90     for (var n = 0; n < tabs.length; n++) {
91         var i = tabs[n];
92         if (i == el) {
93             unHideMe($(i.rel));
94             i.style.background = "url('/opac/skin/kcls/graphics/" +
95                 i.id + "_on.gif') no-repeat bottom";
96         } else {
97             hideMe($(i.rel));
98             i.style.background = "url('/opac/skin/kcls/graphics/" +
99                 i.id + "_off.gif') no-repeat bottom";
100         }
101     }
102 }
103
104
105 /* Returns the character code pressed that caused the event. */
106 function grabCharCode(evt) {
107     // OLD CODE: evt = (evt) ? evt : ((window.event) ? event : null);
108     evt = evt || window.event || event || null;
109     if (evt) {
110     // OLD CODE: return (evt.charCode ? evt.charCode : ((evt.which) ? evt.which : evt.keyCode));
111         return evt.which || evt.charCode || evt.keyCode;
112     } else {
113         return -1;
114     }
115 }
116
117 /* returns true if the user pressed enter */
118 function userPressedEnter(evt) {
119     var code = grabCharCode(evt);
120     return (code == 13 || code == 3);
121 }
122
123 function setEnterFunc(node, func) {
124     if (!(node && func)) return;
125     node.onkeydown = function(evt) {
126         if (userPressedEnter(evt)) func();
127     };
128 }
129
130 function advAddGblRow() {
131     var tbody = $("adv_global_tbody");
132     var newrow = $("adv_global_trow").cloneNode(true);
133     tbody.insertBefore(newrow, $("adv_global_addrow"));
134     var input = $n(newrow, "term");
135     input.value = "";
136     setEnterFunc(input, _stub); /* XXX TODO make a real form and get rid of this? */
137     $n(newrow, 'type').focus();
138 }
139
140 var rdetailShowExtra = _stub; /* XXX TODO reimplement without JS? */
141 var cnBrowsePrev = _stub;
142 var cnBrowseNext = _stub;
143 var rdetailNewBookbag = _stub; /* XXX TODO reimplement without JS? */
144 var addMyList = _stub; /* XXX TODO we probably still need this one */
145 var listSaveAction = _stub; /* XXX TODO we probably still need this one */
146 var expandBoxes = _stub; /* XXX TODO possibly reimplement or replace */
147 var iForgotMyPassword = _stub; /* XXX TODO possibly reimplement or replace */
148 var switchSubPage = _stub;
149 var myOPACRenewSelected = _stub;
150 var myOPACCreateBookbag = _stub;
151 var myOPACSavePrefs = _stub;
152 var myOPACUpdatePhone = _stub;  /* XXX TODOD myOPACUpdate*() and the buttons where
153                                    the handlers are used should probably go
154                                    away completely */
155 var myOPACUpdateUsername = _stub;
156 var myOPACUpdatePassword = _stub;
157 var myOPACUpdateEmail = _stub;
158 var myOPACUpdateHomeOU = _stub;
159 var myopacDoHoldAction = _stub;
160 var myopacApplyThawDate = _stub;
161 var showCachedList = _stub;
162 var searchBarSubmit = _stub;
163 var sortHolds = _stub; /* XXX TODO There was a method for sorting loaded holds
164                           in the DOM without reloading the page, but it was
165                           reliant on fieldmapper and some stock dojo
166                           libraries.  Could be reimplemented without deps
167                           if deemed worthwhile. */
168 var showDetailedResults = _stub; /* XXX TODO for an old onchange handler that
169                                 toggled between simple and detailed results
170                                 in the rresults page.  */
171 var checkAll = _stub;
172 var sortChecked = _stub;
173 var sortCheckedHist = _stub;
174 var showPaymentForm = _stub;
175 var showFinesDiv = _stub;
176 var fadeOut = _stub;    /* XXX TODO what the heck? not seen anywhere */