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