Subversion Repositories Applications.papyrus

Rev

Rev 1318 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1318 Rev 1422
1
/*
1
/*
2
	Copyright (c) 2004-2006, The Dojo Foundation
2
	Copyright (c) 2004-2006, The Dojo Foundation
3
	All Rights Reserved.
3
	All Rights Reserved.
4
 
4
 
5
	Licensed under the Academic Free License version 2.1 or above OR the
5
	Licensed under the Academic Free License version 2.1 or above OR the
6
	modified BSD license. For more information on Dojo licensing, see:
6
	modified BSD license. For more information on Dojo licensing, see:
7
 
7
 
8
		http://dojotoolkit.org/community/licensing.shtml
8
		http://dojotoolkit.org/community/licensing.shtml
9
*/
9
*/
-
 
10
 
-
 
11
 
10
 
12
 
11
dojo.provide("dojo.svg");
13
dojo.provide("dojo.svg");
12
dojo.require("dojo.lang.common");
14
dojo.require("dojo.lang.common");
13
dojo.require("dojo.dom");
15
dojo.require("dojo.dom");
14
dojo.mixin(dojo.svg, dojo.dom);
16
dojo.mixin(dojo.svg, dojo.dom);
15
dojo.svg.graphics = dojo.svg.g = new function (d) {
17
dojo.svg.graphics = dojo.svg.g = new function (d) {
16
	this.suspend = function () {
18
	this.suspend = function () {
17
		try {
19
		try {
18
			d.documentElement.suspendRedraw(0);
20
			d.documentElement.suspendRedraw(0);
19
		}
21
		}
20
		catch (e) {
22
		catch (e) {
21
		}
23
		}
22
	};
24
	};
23
	this.resume = function () {
25
	this.resume = function () {
24
		try {
26
		try {
25
			d.documentElement.unsuspendRedraw(0);
27
			d.documentElement.unsuspendRedraw(0);
26
		}
28
		}
27
		catch (e) {
29
		catch (e) {
28
		}
30
		}
29
	};
31
	};
30
	this.force = function () {
32
	this.force = function () {
31
		try {
33
		try {
32
			d.documentElement.forceRedraw();
34
			d.documentElement.forceRedraw();
33
		}
35
		}
34
		catch (e) {
36
		catch (e) {
35
		}
37
		}
36
	};
38
	};
37
}(document);
39
}(document);
38
dojo.svg.animations = dojo.svg.anim = new function (d) {
40
dojo.svg.animations = dojo.svg.anim = new function (d) {
39
	this.arePaused = function () {
41
	this.arePaused = function () {
40
		try {
42
		try {
41
			return d.documentElement.animationsPaused();
43
			return d.documentElement.animationsPaused();
42
		}
44
		}
43
		catch (e) {
45
		catch (e) {
44
			return false;
46
			return false;
45
		}
47
		}
46
	};
48
	};
47
	this.pause = function () {
49
	this.pause = function () {
48
		try {
50
		try {
49
			d.documentElement.pauseAnimations();
51
			d.documentElement.pauseAnimations();
50
		}
52
		}
51
		catch (e) {
53
		catch (e) {
52
		}
54
		}
53
	};
55
	};
54
	this.resume = function () {
56
	this.resume = function () {
55
		try {
57
		try {
56
			d.documentElement.unpauseAnimations();
58
			d.documentElement.unpauseAnimations();
57
		}
59
		}
58
		catch (e) {
60
		catch (e) {
59
		}
61
		}
60
	};
62
	};
61
}(document);
63
}(document);
62
dojo.svg.toCamelCase = function (selector) {
64
dojo.svg.toCamelCase = function (selector) {
63
	var arr = selector.split("-"), cc = arr[0];
65
	var arr = selector.split("-"), cc = arr[0];
64
	for (var i = 1; i < arr.length; i++) {
66
	for (var i = 1; i < arr.length; i++) {
65
		cc += arr[i].charAt(0).toUpperCase() + arr[i].substring(1);
67
		cc += arr[i].charAt(0).toUpperCase() + arr[i].substring(1);
66
	}
68
	}
67
	return cc;
69
	return cc;
68
};
70
};
69
dojo.svg.toSelectorCase = function (selector) {
71
dojo.svg.toSelectorCase = function (selector) {
70
	return selector.replace(/([A-Z])/g, "-$1").toLowerCase();
72
	return selector.replace(/([A-Z])/g, "-$1").toLowerCase();
71
};
73
};
72
dojo.svg.getStyle = function (node, cssSelector) {
74
dojo.svg.getStyle = function (node, cssSelector) {
73
	return document.defaultView.getComputedStyle(node, cssSelector);
75
	return document.defaultView.getComputedStyle(node, cssSelector);
74
};
76
};
75
dojo.svg.getNumericStyle = function (node, cssSelector) {
77
dojo.svg.getNumericStyle = function (node, cssSelector) {
76
	return parseFloat(dojo.svg.getStyle(node, cssSelector));
78
	return parseFloat(dojo.svg.getStyle(node, cssSelector));
77
};
79
};
78
dojo.svg.getOpacity = function (node) {
80
dojo.svg.getOpacity = function (node) {
79
	return Math.min(1, dojo.svg.getNumericStyle(node, "fill-opacity"));
81
	return Math.min(1, dojo.svg.getNumericStyle(node, "fill-opacity"));
80
};
82
};
81
dojo.svg.setOpacity = function (node, opacity) {
83
dojo.svg.setOpacity = function (node, opacity) {
82
	node.setAttributeNS(this.xmlns.svg, "fill-opacity", opacity);
84
	node.setAttributeNS(this.xmlns.svg, "fill-opacity", opacity);
83
	node.setAttributeNS(this.xmlns.svg, "stroke-opacity", opacity);
85
	node.setAttributeNS(this.xmlns.svg, "stroke-opacity", opacity);
84
};
86
};
85
dojo.svg.clearOpacity = function (node) {
87
dojo.svg.clearOpacity = function (node) {
86
	node.setAttributeNS(this.xmlns.svg, "fill-opacity", "1.0");
88
	node.setAttributeNS(this.xmlns.svg, "fill-opacity", "1.0");
87
	node.setAttributeNS(this.xmlns.svg, "stroke-opacity", "1.0");
89
	node.setAttributeNS(this.xmlns.svg, "stroke-opacity", "1.0");
88
};
90
};
89
dojo.svg.getCoords = function (node) {
91
dojo.svg.getCoords = function (node) {
90
	if (node.getBBox) {
92
	if (node.getBBox) {
91
		var box = node.getBBox();
93
		var box = node.getBBox();
92
		return {x:box.x, y:box.y};
94
		return {x:box.x, y:box.y};
93
	}
95
	}
94
	return null;
96
	return null;
95
};
97
};
96
dojo.svg.setCoords = function (node, coords) {
98
dojo.svg.setCoords = function (node, coords) {
97
	var p = dojo.svg.getCoords();
99
	var p = dojo.svg.getCoords();
98
	if (!p) {
100
	if (!p) {
99
		return;
101
		return;
100
	}
102
	}
101
	var dx = p.x - coords.x;
103
	var dx = p.x - coords.x;
102
	var dy = p.y - coords.y;
104
	var dy = p.y - coords.y;
103
	dojo.svg.translate(node, dx, dy);
105
	dojo.svg.translate(node, dx, dy);
104
};
106
};
105
dojo.svg.getDimensions = function (node) {
107
dojo.svg.getDimensions = function (node) {
106
	if (node.getBBox) {
108
	if (node.getBBox) {
107
		var box = node.getBBox();
109
		var box = node.getBBox();
108
		return {width:box.width, height:box.height};
110
		return {width:box.width, height:box.height};
109
	}
111
	}
110
	return null;
112
	return null;
111
};
113
};
112
dojo.svg.setDimensions = function (node, dim) {
114
dojo.svg.setDimensions = function (node, dim) {
113
	if (node.width) {
115
	if (node.width) {
114
		node.width.baseVal.value = dim.width;
116
		node.width.baseVal.value = dim.width;
115
		node.height.baseVal.value = dim.height;
117
		node.height.baseVal.value = dim.height;
116
	} else {
118
	} else {
117
		if (node.r) {
119
		if (node.r) {
118
			node.r.baseVal.value = Math.min(dim.width, dim.height) / 2;
120
			node.r.baseVal.value = Math.min(dim.width, dim.height) / 2;
119
		} else {
121
		} else {
120
			if (node.rx) {
122
			if (node.rx) {
121
				node.rx.baseVal.value = dim.width / 2;
123
				node.rx.baseVal.value = dim.width / 2;
122
				node.ry.baseVal.value = dim.height / 2;
124
				node.ry.baseVal.value = dim.height / 2;
123
			}
125
			}
124
		}
126
		}
125
	}
127
	}
126
};
128
};
127
dojo.svg.translate = function (node, dx, dy) {
129
dojo.svg.translate = function (node, dx, dy) {
128
	if (node.transform && node.ownerSVGElement && node.ownerSVGElement.createSVGTransform) {
130
	if (node.transform && node.ownerSVGElement && node.ownerSVGElement.createSVGTransform) {
129
		var t = node.ownerSVGElement.createSVGTransform();
131
		var t = node.ownerSVGElement.createSVGTransform();
130
		t.setTranslate(dx, dy);
132
		t.setTranslate(dx, dy);
131
		node.transform.baseVal.appendItem(t);
133
		node.transform.baseVal.appendItem(t);
132
	}
134
	}
133
};
135
};
134
dojo.svg.scale = function (node, scaleX, scaleY) {
136
dojo.svg.scale = function (node, scaleX, scaleY) {
135
	if (!scaleY) {
137
	if (!scaleY) {
136
		var scaleY = scaleX;
138
		var scaleY = scaleX;
137
	}
139
	}
138
	if (node.transform && node.ownerSVGElement && node.ownerSVGElement.createSVGTransform) {
140
	if (node.transform && node.ownerSVGElement && node.ownerSVGElement.createSVGTransform) {
139
		var t = node.ownerSVGElement.createSVGTransform();
141
		var t = node.ownerSVGElement.createSVGTransform();
140
		t.setScale(scaleX, scaleY);
142
		t.setScale(scaleX, scaleY);
141
		node.transform.baseVal.appendItem(t);
143
		node.transform.baseVal.appendItem(t);
142
	}
144
	}
143
};
145
};
144
dojo.svg.rotate = function (node, ang, cx, cy) {
146
dojo.svg.rotate = function (node, ang, cx, cy) {
145
	if (node.transform && node.ownerSVGElement && node.ownerSVGElement.createSVGTransform) {
147
	if (node.transform && node.ownerSVGElement && node.ownerSVGElement.createSVGTransform) {
146
		var t = node.ownerSVGElement.createSVGTransform();
148
		var t = node.ownerSVGElement.createSVGTransform();
147
		if (cx == null) {
149
		if (cx == null) {
148
			t.setMatrix(t.matrix.rotate(ang));
150
			t.setMatrix(t.matrix.rotate(ang));
149
		} else {
151
		} else {
150
			t.setRotate(ang, cx, cy);
152
			t.setRotate(ang, cx, cy);
151
		}
153
		}
152
		node.transform.baseVal.appendItem(t);
154
		node.transform.baseVal.appendItem(t);
153
	}
155
	}
154
};
156
};
155
dojo.svg.skew = function (node, ang, axis) {
157
dojo.svg.skew = function (node, ang, axis) {
156
	var dir = axis || "x";
158
	var dir = axis || "x";
157
	if (node.transform && node.ownerSVGElement && node.ownerSVGElement.createSVGTransform) {
159
	if (node.transform && node.ownerSVGElement && node.ownerSVGElement.createSVGTransform) {
158
		var t = node.ownerSVGElement.createSVGTransform();
160
		var t = node.ownerSVGElement.createSVGTransform();
159
		if (dir != "x") {
161
		if (dir != "x") {
160
			t.setSkewY(ang);
162
			t.setSkewY(ang);
161
		} else {
163
		} else {
162
			t.setSkewX(ang);
164
			t.setSkewX(ang);
163
		}
165
		}
164
		node.transform.baseVal.appendItem(t);
166
		node.transform.baseVal.appendItem(t);
165
	}
167
	}
166
};
168
};
167
dojo.svg.flip = function (node, axis) {
169
dojo.svg.flip = function (node, axis) {
168
	var dir = axis || "x";
170
	var dir = axis || "x";
169
	if (node.transform && node.ownerSVGElement && node.ownerSVGElement.createSVGTransform) {
171
	if (node.transform && node.ownerSVGElement && node.ownerSVGElement.createSVGTransform) {
170
		var t = node.ownerSVGElement.createSVGTransform();
172
		var t = node.ownerSVGElement.createSVGTransform();
171
		t.setMatrix((dir != "x") ? t.matrix.flipY() : t.matrix.flipX());
173
		t.setMatrix((dir != "x") ? t.matrix.flipY() : t.matrix.flipX());
172
		node.transform.baseVal.appendItem(t);
174
		node.transform.baseVal.appendItem(t);
173
	}
175
	}
174
};
176
};
175
dojo.svg.invert = function (node) {
177
dojo.svg.invert = function (node) {
176
	if (node.transform && node.ownerSVGElement && node.ownerSVGElement.createSVGTransform) {
178
	if (node.transform && node.ownerSVGElement && node.ownerSVGElement.createSVGTransform) {
177
		var t = node.ownerSVGElement.createSVGTransform();
179
		var t = node.ownerSVGElement.createSVGTransform();
178
		t.setMatrix(t.matrix.inverse());
180
		t.setMatrix(t.matrix.inverse());
179
		node.transform.baseVal.appendItem(t);
181
		node.transform.baseVal.appendItem(t);
180
	}
182
	}
181
};
183
};
182
dojo.svg.applyMatrix = function (node, a, b, c, d, e, f) {
184
dojo.svg.applyMatrix = function (node, a, b, c, d, e, f) {
183
	if (node.transform && node.ownerSVGElement && node.ownerSVGElement.createSVGTransform) {
185
	if (node.transform && node.ownerSVGElement && node.ownerSVGElement.createSVGTransform) {
184
		var m;
186
		var m;
185
		if (b) {
187
		if (b) {
186
			var m = node.ownerSVGElement.createSVGMatrix();
188
			var m = node.ownerSVGElement.createSVGMatrix();
187
			m.a = a;
189
			m.a = a;
188
			m.b = b;
190
			m.b = b;
189
			m.c = c;
191
			m.c = c;
190
			m.d = d;
192
			m.d = d;
191
			m.e = e;
193
			m.e = e;
192
			m.f = f;
194
			m.f = f;
193
		} else {
195
		} else {
194
			m = a;
196
			m = a;
195
		}
197
		}
196
		var t = node.ownerSVGElement.createSVGTransform();
198
		var t = node.ownerSVGElement.createSVGTransform();
197
		t.setMatrix(m);
199
		t.setMatrix(m);
198
		node.transform.baseVal.appendItem(t);
200
		node.transform.baseVal.appendItem(t);
199
	}
201
	}
200
};
202
};
201
dojo.svg.group = function (nodes) {
203
dojo.svg.group = function (nodes) {
202
	var p = nodes.item(0).parentNode;
204
	var p = nodes.item(0).parentNode;
203
	var g = document.createElementNS(this.xmlns.svg, "g");
205
	var g = document.createElementNS(this.xmlns.svg, "g");
204
	for (var i = 0; i < nodes.length; i++) {
206
	for (var i = 0; i < nodes.length; i++) {
205
		g.appendChild(nodes.item(i));
207
		g.appendChild(nodes.item(i));
206
	}
208
	}
207
	p.appendChild(g);
209
	p.appendChild(g);
208
	return g;
210
	return g;
209
};
211
};
210
dojo.svg.ungroup = function (g) {
212
dojo.svg.ungroup = function (g) {
211
	var p = g.parentNode;
213
	var p = g.parentNode;
212
	while (g.childNodes.length > 0) {
214
	while (g.childNodes.length > 0) {
213
		p.appendChild(g.childNodes.item(0));
215
		p.appendChild(g.childNodes.item(0));
214
	}
216
	}
215
	p.removeChild(g);
217
	p.removeChild(g);
216
};
218
};
217
dojo.svg.getGroup = function (node) {
219
dojo.svg.getGroup = function (node) {
218
	var a = this.getAncestors(node);
220
	var a = this.getAncestors(node);
219
	for (var i = 0; i < a.length; i++) {
221
	for (var i = 0; i < a.length; i++) {
220
		if (a[i].nodeType == this.ELEMENT_NODE && a[i].nodeName.toLowerCase() == "g") {
222
		if (a[i].nodeType == this.ELEMENT_NODE && a[i].nodeName.toLowerCase() == "g") {
221
			return a[i];
223
			return a[i];
222
		}
224
		}
223
	}
225
	}
224
	return null;
226
	return null;
225
};
227
};
226
dojo.svg.bringToFront = function (node) {
228
dojo.svg.bringToFront = function (node) {
227
	var n = this.getGroup(node) || node;
229
	var n = this.getGroup(node) || node;
228
	n.ownerSVGElement.appendChild(n);
230
	n.ownerSVGElement.appendChild(n);
229
};
231
};
230
dojo.svg.sendToBack = function (node) {
232
dojo.svg.sendToBack = function (node) {
231
	var n = this.getGroup(node) || node;
233
	var n = this.getGroup(node) || node;
232
	n.ownerSVGElement.insertBefore(n, n.ownerSVGElement.firstChild);
234
	n.ownerSVGElement.insertBefore(n, n.ownerSVGElement.firstChild);
233
};
235
};
234
dojo.svg.bringForward = function (node) {
236
dojo.svg.bringForward = function (node) {
235
	var n = this.getGroup(node) || node;
237
	var n = this.getGroup(node) || node;
236
	if (this.getLastChildElement(n.parentNode) != n) {
238
	if (this.getLastChildElement(n.parentNode) != n) {
237
		this.insertAfter(n, this.getNextSiblingElement(n), true);
239
		this.insertAfter(n, this.getNextSiblingElement(n), true);
238
	}
240
	}
239
};
241
};
240
dojo.svg.sendBackward = function (node) {
242
dojo.svg.sendBackward = function (node) {
241
	var n = this.getGroup(node) || node;
243
	var n = this.getGroup(node) || node;
242
	if (this.getFirstChildElement(n.parentNode) != n) {
244
	if (this.getFirstChildElement(n.parentNode) != n) {
243
		this.insertBefore(n, this.getPreviousSiblingElement(n), true);
245
		this.insertBefore(n, this.getPreviousSiblingElement(n), true);
244
	}
246
	}
245
};
247
};
246
dojo.svg.createNodesFromText = function (txt, wrap) {
248
dojo.svg.createNodesFromText = function (txt, wrap) {
247
	var docFrag = (new DOMParser()).parseFromString(txt, "text/xml").normalize();
249
	var docFrag = (new DOMParser()).parseFromString(txt, "text/xml").normalize();
248
	if (wrap) {
250
	if (wrap) {
249
		return [docFrag.firstChild.cloneNode(true)];
251
		return [docFrag.firstChild.cloneNode(true)];
250
	}
252
	}
251
	var nodes = [];
253
	var nodes = [];
252
	for (var x = 0; x < docFrag.childNodes.length; x++) {
254
	for (var x = 0; x < docFrag.childNodes.length; x++) {
253
		nodes.push(docFrag.childNodes.item(x).cloneNode(true));
255
		nodes.push(docFrag.childNodes.item(x).cloneNode(true));
254
	}
256
	}
255
	return nodes;
257
	return nodes;
256
};
258
};
257
 
259