]> source.dussan.org Git - svg.js.git/commitdiff
Adds the intended functionality to call animate functions with multiple parameter...
authorUlrich-Matthias Schäfer <ulima.ums@googlemail.com>
Sun, 30 Apr 2017 20:29:10 +0000 (22:29 +0200)
committerGitHub <noreply@github.com>
Sun, 30 Apr 2017 20:29:10 +0000 (22:29 +0200)
e.g. `el.animate().zoom(level, point)`

spec/spec/fx.js
src/fx.js
src/textpath.js

index e17cb95cb7e6a6a99ced42f79ebbba4f5d765430..d6d87f2872195d349197d04829ec31983f32844b 100644 (file)
@@ -2547,7 +2547,7 @@ describe('FX', function() {
 
       spyOn(fx, 'add')
       fx.plot('5 5 30 29 40 19 12 30')
-      expect(fx.add).toHaveBeenCalledWith('plot', '5 5 30 29 40 19 12 30')
+      expect(fx.add).toHaveBeenCalledWith('plot', new SVG.PointArray('5 5 30 29 40 19 12 30'))
     })
 
     it('also accept parameter list', function() {
@@ -2556,7 +2556,7 @@ describe('FX', function() {
 
       spyOn(fx, 'add')
       fx.plot(5, 5, 10, 10)
-      expect(fx.add).toHaveBeenCalledWith('plot', [5, 5, 10, 10])
+      expect(fx.add).toHaveBeenCalledWith('plot', new SVG.PointArray([5, 5, 10, 10]))
     })
   })
 
index a4d0ecde4bb87e0d7ab6b73ca4d6ae20b3002fb8..365273e57acb0a5c0c09289721cddbb9c4473aca 100644 (file)
--- a/src/fx.js
+++ b/src/fx.js
@@ -214,7 +214,7 @@ SVG.FX = SVG.invent({
     // updates all animations to the current state of the element
     // this is important when one property could be changed from another property
   , initAnimations: function() {
-      var i, source
+      var i, j, source
       var s = this.situation
 
       if(s.init) return this
@@ -222,12 +222,26 @@ SVG.FX = SVG.invent({
       for(i in s.animations){
         source = this.target()[i]()
 
-        // The condition is because some methods return a normal number instead
-        // of a SVG.Number
-        if(s.animations[i] instanceof SVG.Number)
-          source = new SVG.Number(source)
+        if(!Array.isArray(source)) {
+          source = [source]
+        }
+
+        if(!Array.isArray(s.animations[i])) {
+          s.animations[i] = [s.animations[i]]
+        }
+
+        //if(s.animations[i].length > source.length) {
+        //  source.concat = source.concat(s.animations[i].slice(source.length, s.animations[i].length))
+        //}
 
-        s.animations[i] = source.morph(s.animations[i])
+        for(j = source.length; j--;) {
+          // The condition is because some methods return a normal number instead
+          // of a SVG.Number
+          if(s.animations[i][j] instanceof SVG.Number)
+            source[j] = new SVG.Number(source[j])
+
+          s.animations[i][j] = source[j].morph(s.animations[i][j])
+        }
       }
 
       for(i in s.attrs){
@@ -845,9 +859,13 @@ SVG.extend(SVG.FX, {
     return this
   }
   // Add animatable plot
-, plot: function() {
-    // We use arguments here since SVG.Line's plot method can be passed 4 parameters
-    return this.add('plot', arguments.length > 1 ? [].slice.call(arguments) : arguments[0])
+, plot: function(a, b, c, d) {
+    // Lines can be plotted with 4 arguments
+    if(arguments.length == 4) {
+      return this.plot([a, b, c, d])
+    }
+
+    return this.add('plot', new (this.target().morphArray)(a))
   }
   // Add leading method
 , leading: function(value) {
index 475031095ebc721b75c9dbf4ac814a798c810cf6..18e214919b854cabe5118be47db66ad5afbbae89 100644 (file)
@@ -10,8 +10,9 @@ SVG.TextPath = SVG.invent({
 
   // Add parent method
 , construct: {
+    morphArray: SVG.PathArray
     // Create path for text to run on
-    path: function(d) {
+  , path: function(d) {
       // create textPath element
       var path  = new SVG.TextPath
         , track = this.doc().defs().path(d)