1 /* ---------------------------------------------------------------------------
2 * Copyright (C) 2008 Georgia Public Library Service
3 * Bill Erickson <erickson@esilibrary.com>
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License
7 * as published by the Free Software Foundation; either version 2
8 * of the License, or (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 * ---------------------------------------------------------------------------
19 * General purpose, static utility functions
22 if(!dojo._hasResource["openils.Util"]) {
23 dojo._hasResource["openils.Util"] = true;
24 dojo.provide("openils.Util");
25 dojo.require('openils.Event');
26 dojo.declare('openils.Util', null, {});
30 * Wrapper for dojo.addOnLoad that verifies a valid login session is active
31 * before adding the function to the onload set
33 openils.Util.addOnLoad = function(func, noSes) {
36 dojo.require('openils.User');
37 if(!openils.User.authtoken)
40 console.log("adding onload " + func.name);
46 * Returns true if the provided array contains the specified value
48 openils.Util.arrayContains = function(arr, val) {
49 for(var i = 0; arr && i < arr.length; i++) {
57 * Given a HTML select object, returns the currently selected value
59 openils.Util.selectorValue = function(sel) {
61 var idx = sel.selectedIndex;
62 if(idx < 0) return null;
63 var o = sel.options[idx];
65 if(v == null) v = o.innerHTML;
70 * Returns the character code of the provided (or current window) event
72 openils.Util.getCharCode = function(evt) {
73 evt = (evt) ? evt : ((window.event) ? event : null);
75 return (evt.charCode ? evt.charCode :
76 ((evt.which) ? evt.which : evt.keyCode ));
82 * Registers a handler for when the Enter key is pressed while
83 * the provided DOM node has focus.
85 openils.Util.registerEnterHandler = function(domNode, func) {
86 if(!(domNode && func)) return;
87 domNode.onkeydown = function(evt) {
88 var code = openils.Util.getCharCode(evt);
89 if(code == 13 || code == 3)
96 * Parses opensrf response objects to see if they contain
97 * data and/or an ILS event. This only calls request.recv()
98 * once, so in a streaming context, it's necessary to loop on
100 * @param r The OpenSRF Request object
101 * @param eventOK If true, any found events will be returned as responses.
102 * If false, they will be treated as error conditions and their content will
103 * be alerted if openils.Util.alertEvent is set to true. Also, if eventOk is
104 * false, the response content will be null when an event is encountered.
105 * @param isList If true, assume the response will be a list of data and
106 * check the 1st item in the list for event-ness instead of the list itself.
108 openils.Util.alertEvent = true;
109 openils.Util.readResponse = function(r, eventOk, isList) {
111 if(msg == null) return msg;
112 var val = msg.content();
114 if(isList && dojo.isArray(val))
116 if(e = openils.Event.parse(testval)) {
117 if(eventOk) return e;
118 console.log(e.toString());
119 if(openils.Util.alertEvent)
128 * Given a DOM node, adds the provided class to the node
130 openils.Util.addCSSClass = function(node, cls) {
131 if(!(node && cls)) return;
132 var className = node.className;
135 node.className = cls;
139 var classList = className.split(/\s+/);
142 for (var i = 0; i < classList.length; i++) {
143 if(classList[i] == cls) return;
144 if(classList[i] != null)
145 newName += classList[i] + " ";
149 node.className = newName;
153 * Given a DOM node, removes the provided class from the CSS class
156 openils.Util.removeCSSClass = function(node, cls) {
157 if(!(node && cls && node.className)) return;
158 var classList = node.className.split(/\s+/);
160 for(var i = 0; i < classList.length; i++) {
161 if (classList[i] != cls) {
163 className = classList[i];
165 className += ' ' + classList[i];
168 node.className = className;
171 openils.Util.objectSort = function(list, field) {
172 if(dojo.isArray(list)) {
173 if(!field) field = 'id';
176 if(a[field]() > b[field]()) return 1;