13
25
var animations = new Array(); // running animators
28
function registerInstance(instance) {
29
var corr = instance.correspondingElement;
30
var instList = corr.instanceList;
32
instList = new Array();
33
corr.instanceList = instList;
35
instList.push(instance);
36
var children = instance.childNodes;
37
for(var i=0; i<children.length ;i++)
38
registerInstance(children.item(i));
17
42
* if declarative animations are not supported,
18
43
* the document animations are fetched and registered
24
49
var svgs = document.getElementsByTagNameNS(svgns,"svg");
25
50
if (svgs.length==0)
28
// because events are not dispatched to used elements in gecko
29
53
var uses = document.getElementsByTagNameNS(svgns,"use");
30
var newIds = new Object();
31
54
for(var i=uses.length-1; i>=0 ;i--) {
32
55
var use = uses.item(i);
33
var href = use.getAttributeNS(xlinkns, "href");
34
var ref = document.getElementById(href.substring(1));
35
var clone = ref.cloneNode(true);
36
var suff = "workaroundUseBug"+i;
37
var all = clone.getElementsByTagName("*");
42
var newId = oldId+suff;
43
newIds[oldId] = newId;
44
clone.setAttribute("id", newId);
47
clone.setAttribute("id", useId);
48
for(var j=0; j<all.length ;j++) {
52
var newId = oldId+suff;
53
newIds[oldId] = newId;
54
elem.setAttribute("id", newId);
56
if(use.instanceRoot) {
57
registerInstance(use.instanceRoot);
63
// because events are not dispatched to used elements in gecko
64
var uses = document.getElementsByTagNameNS(svgns,"use");
65
var newIds = new Object();
66
for(var i=uses.length-1; i>=0 ;i--) {
67
var use = uses.item(i);
68
var href = use.getAttributeNS(xlinkns, "href");
69
var ref = document.getElementById(href.substring(1));
70
var clone = ref.cloneNode(true);
71
var suff = "workaroundUseBug"+i;
72
var all = clone.getElementsByTagName("*");
77
var newId = oldId+suff;
78
newIds[oldId] = newId;
79
clone.setAttribute("id", newId);
82
clone.setAttribute("id", useId);
83
for(var j=0; j<all.length ;j++) {
87
var newId = oldId+suff;
88
newIds[oldId] = newId;
89
elem.setAttribute("id", newId);
92
for(var j=0; j<all.length ;j++) {
94
var href = elem.getAttributeNS(xlinkns, "href");
95
if (href && newIds[href.substring(1)])
96
elem.setAttributeNS(xlinkns, "href", newIds[href.substring(1)]);
97
var begin = elem.getAttribute("begin");
99
for(var oldId in newIds) {
100
if(newIds.hasOwnProperty(oldId))
101
begin = begin.replace(oldId+".", newIds[oldId]+".");
103
//console.log(begin);
104
elem.setAttribute("begin", begin);
106
var end = elem.getAttribute("end");
108
for(var oldId in newIds) {
109
if(newIds.hasOwnProperty(oldId))
110
end = end.replace(oldId+".", newIds[oldId]+".");
112
elem.setAttribute("end", end);
116
if(use.hasAttribute("opacity"))
117
clone.setAttribute("opacity", use.getAttribute("opacity"));
118
if(use.hasAttribute("transform"))
119
clone.setAttribute("transform", use.getAttribute("transform"));
120
if(use.hasAttribute("display"))
121
clone.setAttribute("display", use.getAttribute("display"));
122
use.parentNode.insertBefore(clone,use);
123
use.parentNode.removeChild(use);
126
var all = document.getElementsByTagName("*");
57
127
for(var j=0; j<all.length ;j++) {
58
128
var elem = all[j];
59
129
var href = elem.getAttributeNS(xlinkns, "href");
77
147
elem.setAttribute("end", end);
81
if(use.hasAttribute("opacity"))
82
clone.setAttribute("opacity", use.getAttribute("opacity"));
83
if(use.hasAttribute("transform"))
84
clone.setAttribute("transform", use.getAttribute("transform"));
85
if(use.hasAttribute("display"))
86
clone.setAttribute("display", use.getAttribute("display"));
87
use.parentNode.insertBefore(clone,use);
88
use.parentNode.removeChild(use);
91
var all = document.getElementsByTagName("*");
92
for(var j=0; j<all.length ;j++) {
94
var href = elem.getAttributeNS(xlinkns, "href");
95
if (href && newIds[href.substring(1)])
96
elem.setAttributeNS(xlinkns, "href", newIds[href.substring(1)]);
97
var begin = elem.getAttribute("begin");
99
for(var oldId in newIds) {
100
if(newIds.hasOwnProperty(oldId))
101
begin = begin.replace(oldId+".", newIds[oldId]+".");
103
//console.log(begin);
104
elem.setAttribute("begin", begin);
106
var end = elem.getAttribute("end");
108
for(var oldId in newIds) {
109
if(newIds.hasOwnProperty(oldId))
110
end = end.replace(oldId+".", newIds[oldId]+".");
112
elem.setAttribute("end", end);
117
152
var animates = document.getElementsByTagNameNS(svgns,"*");
118
153
for(var j=0; j<animates.length ;j++) {
208
243
if(element==null)
210
245
var event = time.substring(io+1);
211
//console.log(element);
213
var call = function() {func.call(me, offset)};
247
var call = funk(func, me, offset);
214
248
element.addEventListener(event, call, false);
249
if (element.instanceList) {
250
for(var j=0; j<element.instanceList.length ;j++) {
251
if(element.instanceList[j].addEventListener)
252
element.instanceList[j].addEventListener(event, call, false);
216
256
time = toMillis(time);
217
257
func.call(me, time);
299
this.startTime = new Date();
300
if (offset && offset<0)
301
this.startTime.setTime(this.startTime.getTime()+offset);
261
303
this.running = true;
262
304
this.recordInitVal();
263
305
if (this.anim.nodeName=="set")
264
306
this.step(this.to);
265
// what does dur="indefinite" mean anyway ?
266
// it makes sense for <set> only, I think.
268
if (dur==null || dur=="" || dur=="indefinite") {
269
for(var i=0; i<this.beginListeners.length ;i++)
270
this.beginListeners[i].call();
273
307
this.iteration = 0;
275
if (offset && offset<0)
276
this.iterBegin.setTime(this.iterBegin.getTime()+offset);
277
this.startTime = new Date();
308
this.start(this.startTime);
278
309
animations.push(this);
279
310
for(var i=0; i<this.beginListeners.length ;i++)
280
311
this.beginListeners[i].call();
380
413
step : function(value) {
381
414
var attributeType = this.attributeType;
382
415
var attributeName = this.attributeName;
383
if (attributeType=="CSS")
416
if (attributeType=="CSS") {
417
// workaround a gecko and webkit bug
418
if (attributeName=="font-size" && !isNaN(value))
384
420
this.target.style.setProperty(attributeName, value, "");
385
else if (attributeType=="XML")
421
} else if (attributeType=="XML")
386
422
this.target.setAttribute(attributeName, value);
388
424
this.target.setAttribute(attributeName, value);
966
1009
function createPath(d) {
967
1010
var path = document.createElementNS(svgns, "path");
968
1011
path.setAttribute("d", d);
969
if (!path.normalizedPathSegList) {
1013
if (path.normalizedPathSegList)
1014
path.myNormalizedPathSegList = path.normalizedPathSegList;
1016
if(!path.myNormalizedPathSegList) {
970
1017
// TODO : normalize the path
971
path.normalizedPathSegList = path.pathSegList;
1018
path.myNormalizedPathSegList = path.pathSegList;