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,{
10 // summary: a null function?
13 getTdIndex: function(td){
14 return td.cellIndex >=0 ? td.cellIndex : dojo.indexOf(td.parentNode.cells, td);
17 getTrIndex: function(tr){
18 return tr.rowIndex >=0 ? tr.rowIndex : dojo.indexOf(tr.parentNode.childNodes, tr);
21 getTr: function(rowOwner, index){
22 return rowOwner && ((rowOwner.rows||0)[index] || rowOwner.childNodes[index]);
25 getTd: function(rowOwner, rowIndex, cellIndex){
26 return (dojox.grid.getTr(inTable, rowIndex)||0)[cellIndex];
29 findTable: function(node){
30 for (var n=node; n && n.tagName!='TABLE'; n=n.parentNode);
34 ascendDom: function(inNode, inWhile){
35 for (var n=inNode; n && inWhile(n); n=n.parentNode);
39 makeNotTagName: function(inTagName){
40 var name = inTagName.toUpperCase();
41 return function(node){ return node.tagName != name; };
44 fire: function(ob, ev, args){
45 var fn = ob && ev && ob[ev];
46 return fn && (args ? fn.apply(ob, args) : ob[ev]());
50 setStyleText: function(inNode, inStyleText){
51 if(inNode.style.cssText == undefined){
52 inNode.setAttribute("style", inStyleText);
54 inNode.style.cssText = inStyleText;
58 getStyleText: function(inNode, inStyleText){
59 return (inNode.style.cssText == undefined ? inNode.getAttribute("style") : inNode.style.cssText);
62 setStyle: function(inElement, inStyle, inValue){
63 if(inElement && inElement.style[inStyle] != inValue){
64 inElement.style[inStyle] = inValue;
68 setStyleHeightPx: function(inElement, inHeight){
70 dojox.grid.setStyle(inElement, 'height', inHeight + 'px');
74 mouseEvents: [ 'mouseover', 'mouseout', /*'mousemove',*/ 'mousedown', 'mouseup', 'click', 'dblclick', 'contextmenu' ],
76 keyEvents: [ 'keyup', 'keydown', 'keypress' ],
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);
85 removeNode: function(inNode){
86 inNode = dojo.byId(inNode);
87 inNode && inNode.parentNode && inNode.parentNode.removeChild(inNode);
91 getScrollbarWidth: function(){
92 if(this._scrollBarWidth){
93 return this._scrollBarWidth;
95 this._scrollBarWidth = 18;
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);
104 return this._scrollBarWidth;
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));
113 return { obj: obj, prop: prop };
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));
122 indexInParent: function(inNode){
123 var i=0, n, p=inNode.parentNode;
124 while((n = p.childNodes[i++])){
132 cleanNode: function(inNode){
136 var filter = function(inW){
137 return inW.domNode && dojo.isDescendant(inW.domNode, inNode, true);
139 var ws = dijit.registry.filter(filter);
140 for(var i=0, w; (w=ws[i]); i++){
146 getTagName: function(inNodeOrId){
147 var node = dojo.byId(inNodeOrId);
148 return (node && node.tagName ? node.tagName.toLowerCase() : '');
151 nodeKids: function(inNode, inTag){
154 while((n = inNode.childNodes[i++])){
155 if(dojox.grid.getTagName(n) == inTag){
162 divkids: function(inNode){
163 return dojox.grid.nodeKids(inNode, 'div');
166 focusSelectNode: function(inNode){
168 dojox.grid.fire(inNode, "focus");
169 dojox.grid.fire(inNode, "select");
170 }catch(e){// IE sux bad
174 whenIdle: function(/*inContext, inMethod, args ...*/){
175 setTimeout(dojo.hitch.apply(dojo, arguments), 0);
178 arrayCompare: function(inA, inB){
179 for(var i=0,l=inA.length; i<l; i++){
180 if(inA[i] != inB[i]){return false;}
182 return (inA.length == inB.length);
185 arrayInsert: function(inArray, inIndex, inValue){
186 if(inArray.length <= inIndex){
187 inArray[inIndex] = inValue;
189 inArray.splice(inIndex, 0, inValue);
193 arrayRemove: function(inArray, inIndex){
194 inArray.splice(inIndex, 1);
197 arraySwap: function(inArray, inI, inJ){
198 var cache = inArray[inI];
199 inArray[inI] = inArray[inJ];
200 inArray[inJ] = cache;
203 initTextSizePoll: function(inInterval) {
204 var f = document.createElement("div");
208 position = "absolute";
209 visibility = "hidden";
211 f.innerHTML = "TheQuickBrownFoxJumpedOverTheLazyDog";
212 document.body.appendChild(f);
213 var fw = f.offsetWidth;
214 var job = function() {
215 if (f.offsetWidth != fw) {
217 dojox.grid.textSizeChanged();
220 window.setInterval(job, inInterval||200);
221 dojox.grid.initTextSizePoll = dojox.grid.nop;
224 textSizeChanged: function() {
231 cancel: function(inHandle){
233 window.clearTimeout(inHandle);
239 job: function(inName, inDelay, inJob){
240 dojox.grid.jobs.cancelJob(inName);
241 var job = function(){
242 delete dojox.grid.jobs.jobs[inName];
245 dojox.grid.jobs.jobs[inName] = setTimeout(job, inDelay);
248 cancelJob: function(inName){
249 dojox.grid.jobs.cancel(dojox.grid.jobs.jobs[inName]);