]> git.pond.sub.org Git - eow/blob - static/dojo-release-1.1.1/dojox/grid/_grid/lib.js
add Dojo 1.1.1
[eow] / static / dojo-release-1.1.1 / dojox / grid / _grid / lib.js
1 if(!dojo._hasResource["dojox.grid._grid.lib"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
2 dojo._hasResource["dojox.grid._grid.lib"] = true;
3 dojo.provide("dojox.grid._grid.lib");
4 // summary: grid utility library
5 dojo.mixin(dojox.grid,{
6
7         na: '...',
8
9         nop: function(){
10                 // summary: a null function?
11         },
12
13         getTdIndex: function(td){
14                 return td.cellIndex >=0 ? td.cellIndex : dojo.indexOf(td.parentNode.cells, td);
15         },
16         
17         getTrIndex: function(tr){
18                 return tr.rowIndex >=0 ? tr.rowIndex : dojo.indexOf(tr.parentNode.childNodes, tr);
19         },
20         
21         getTr: function(rowOwner, index){
22                 return rowOwner && ((rowOwner.rows||0)[index] || rowOwner.childNodes[index]);
23         },
24         
25         getTd: function(rowOwner, rowIndex, cellIndex){
26                 return (dojox.grid.getTr(inTable, rowIndex)||0)[cellIndex];
27         },
28         
29         findTable: function(node){
30                 for (var n=node; n && n.tagName!='TABLE'; n=n.parentNode);
31                 return n;
32         },
33         
34         ascendDom: function(inNode, inWhile){
35                 for (var n=inNode; n && inWhile(n); n=n.parentNode);
36                 return n;
37         },
38         
39         makeNotTagName: function(inTagName){
40                 var name = inTagName.toUpperCase();
41                 return function(node){ return node.tagName != name; };
42         },
43         
44         fire: function(ob, ev, args){
45                 var fn = ob && ev && ob[ev];
46                 return fn && (args ? fn.apply(ob, args) : ob[ev]());
47         },
48         
49         // from lib.js
50         setStyleText: function(inNode, inStyleText){
51                 if(inNode.style.cssText == undefined){
52                         inNode.setAttribute("style", inStyleText);
53                 }else{
54                         inNode.style.cssText = inStyleText;
55                 }
56         },
57         
58         getStyleText: function(inNode, inStyleText){
59                 return (inNode.style.cssText == undefined ? inNode.getAttribute("style") : inNode.style.cssText);
60         },
61         
62         setStyle: function(inElement, inStyle, inValue){
63                 if(inElement && inElement.style[inStyle] != inValue){
64                         inElement.style[inStyle] = inValue;
65                 }
66         },
67         
68         setStyleHeightPx: function(inElement, inHeight){
69                 if(inHeight >= 0){
70                         dojox.grid.setStyle(inElement, 'height', inHeight + 'px');
71                 }
72         },
73         
74         mouseEvents: [ 'mouseover', 'mouseout', /*'mousemove',*/ 'mousedown', 'mouseup', 'click', 'dblclick', 'contextmenu' ],
75
76         keyEvents: [ 'keyup', 'keydown', 'keypress' ],
77
78         funnelEvents: function(inNode, inObject, inMethod, inEvents){
79                 var evts = (inEvents ? inEvents : dojox.grid.mouseEvents.concat(dojox.grid.keyEvents));
80                 for (var i=0, l=evts.length; i<l; i++){
81                         dojo.connect(inNode, 'on' + evts[i], inObject, inMethod);
82                 }
83         },
84
85         removeNode: function(inNode){
86                 inNode = dojo.byId(inNode);
87                 inNode && inNode.parentNode && inNode.parentNode.removeChild(inNode);
88                 return inNode;
89         },
90         
91         getScrollbarWidth: function(){
92                 if(this._scrollBarWidth){
93                         return this._scrollBarWidth;
94                 }
95                 this._scrollBarWidth = 18;
96                 try{
97                         var e = document.createElement("div");
98                         e.style.cssText = "top:0;left:0;width:100px;height:100px;overflow:scroll;position:absolute;visibility:hidden;";
99                         document.body.appendChild(e);
100                         this._scrollBarWidth = e.offsetWidth - e.clientWidth;
101                         document.body.removeChild(e);
102                         delete e;
103                 }catch (ex){}
104                 return this._scrollBarWidth;
105         },
106         
107         // needed? dojo has _getProp
108         getRef: function(name, create, context){
109                 var obj=context||dojo.global, parts=name.split("."), prop=parts.pop();
110                 for(var i=0, p; obj&&(p=parts[i]); i++){
111                         obj = (p in obj ? obj[p] : (create ? obj[p]={} : undefined));
112                 }
113                 return { obj: obj, prop: prop }; 
114         },
115         
116         getProp: function(name, create, context){
117                 with(dojox.grid.getRef(name, create, context)){
118                         return (obj)&&(prop)&&(prop in obj ? obj[prop] : (create ? obj[prop]={} : undefined));
119                 }
120         },
121         
122         indexInParent: function(inNode){
123                 var i=0, n, p=inNode.parentNode;
124                 while((n = p.childNodes[i++])){
125                         if(n == inNode){
126                                 return i - 1;
127                         }
128                 }
129                 return -1;
130         },
131         
132         cleanNode: function(inNode){
133                 if(!inNode){
134                         return;
135                 }
136                 var filter = function(inW){
137                         return inW.domNode && dojo.isDescendant(inW.domNode, inNode, true);
138                 }
139                 var ws = dijit.registry.filter(filter);
140                 for(var i=0, w; (w=ws[i]); i++){
141                         w.destroy();
142                 }
143                 delete ws;
144         },
145         
146         getTagName: function(inNodeOrId){
147                 var node = dojo.byId(inNodeOrId);
148                 return (node && node.tagName ? node.tagName.toLowerCase() : '');
149         },
150         
151         nodeKids: function(inNode, inTag){
152                 var result = [];
153                 var i=0, n;
154                 while((n = inNode.childNodes[i++])){
155                         if(dojox.grid.getTagName(n) == inTag){
156                                 result.push(n);
157                         }
158                 }
159                 return result;
160         },
161         
162         divkids: function(inNode){
163                 return dojox.grid.nodeKids(inNode, 'div');
164         },
165         
166         focusSelectNode: function(inNode){
167                 try{
168                         dojox.grid.fire(inNode, "focus");
169                         dojox.grid.fire(inNode, "select");
170                 }catch(e){// IE sux bad
171                 }
172         },
173         
174         whenIdle: function(/*inContext, inMethod, args ...*/){
175                 setTimeout(dojo.hitch.apply(dojo, arguments), 0);
176         },
177         
178         arrayCompare: function(inA, inB){
179                 for(var i=0,l=inA.length; i<l; i++){
180                         if(inA[i] != inB[i]){return false;}
181                 }
182                 return (inA.length == inB.length);
183         },
184         
185         arrayInsert: function(inArray, inIndex, inValue){
186                 if(inArray.length <= inIndex){
187                         inArray[inIndex] = inValue;
188                 }else{
189                         inArray.splice(inIndex, 0, inValue);
190                 }
191         },
192         
193         arrayRemove: function(inArray, inIndex){
194                 inArray.splice(inIndex, 1);
195         },
196         
197         arraySwap: function(inArray, inI, inJ){
198                 var cache = inArray[inI];
199                 inArray[inI] = inArray[inJ];
200                 inArray[inJ] = cache;
201         },
202         
203         initTextSizePoll: function(inInterval) {
204                 var f = document.createElement("div");
205                 with (f.style) {
206                         top = "0px";
207                         left = "0px";
208                         position = "absolute";
209                         visibility = "hidden";
210                 }
211                 f.innerHTML = "TheQuickBrownFoxJumpedOverTheLazyDog";
212                 document.body.appendChild(f);
213                 var fw = f.offsetWidth;
214                 var job = function() {
215                         if (f.offsetWidth != fw) {
216                                 fw = f.offsetWidth;
217                                 dojox.grid.textSizeChanged();
218                         }
219                 }
220                 window.setInterval(job, inInterval||200);
221                 dojox.grid.initTextSizePoll = dojox.grid.nop;
222         },
223         
224         textSizeChanged: function() {
225
226         }
227 });
228
229 dojox.grid.jobs = {
230
231         cancel: function(inHandle){
232                 if(inHandle){
233                         window.clearTimeout(inHandle);
234                 }
235         },
236
237         jobs: [],
238
239         job: function(inName, inDelay, inJob){
240                 dojox.grid.jobs.cancelJob(inName);
241                 var job = function(){
242                         delete dojox.grid.jobs.jobs[inName];
243                         inJob();
244                 }
245                 dojox.grid.jobs.jobs[inName] = setTimeout(job, inDelay);
246         },
247
248         cancelJob: function(inName){
249                 dojox.grid.jobs.cancel(dojox.grid.jobs.jobs[inName]);
250         }
251
252 }
253
254 }