OSDN Git Service

SVGAnimationElementのメソッドに関するバグを修正
authordhrname <sie-developers@lists.sourceforge.jp>
Mon, 24 Nov 2014 13:25:12 +0000 (22:25 +0900)
committerdhrname <sie-developers@lists.sourceforge.jp>
Mon, 24 Nov 2014 13:25:12 +0000 (22:25 +0900)
org/w3c/dom/svg.js

index 7e29cfe..78f7af5 100644 (file)
@@ -5359,144 +5359,145 @@ base.$1.upsvg("animate")
     }, false);\r
     evt = tar = void 0;\r
   }, false);\r
-};\r
-(function(t) {\r
-/*以下のメソッド(beginElementなど)については、\r
- *別モジュールであるsmil::ElementTimeControl(smil.js)を参照のこと\r
- */\r
-/*void*/ t.beginElement = function() {\r
-  var ttd = this.ownerDocument,\r
-      evt = ttd.createEvent("TimeEvents");\r
-  this._starting = ttd.documentElement.getCurrentTime(); //getStartTimeメソッドで使う開始時刻\r
-  if (this._isStarted && ((this._restart === "never")\r
-      || ((this._restart === "whenNotActive") && (this.getCurrentTime() > 0)))) {\r
-    return; //restart属性の設定により、再起動させないようにする\r
-  }\r
-  if (this.getCurrentTime() > 0) {\r
-    /*アニメーションの最中で、beginEventが起きるときは、endEventが前もって起こされる。SVG1.1の仕様を参照\r
-     *\r
-     * 19.4.2 Interface TimeEvent\r
-     * Note that if an element is restarted while it is currently playing, the element will raise an end event and another begin event, as the element restarts.\r
-     *\r
-     * http://www.w3.org/TR/SVG/animate.html#InterfaceTimeEvent\r
-     *\r
-     */\r
-    this.endElement();\r
-  }\r
-  evt.initTimeEvent("beginEvent", ttd.defaultView, 0);\r
-  this.dispatchEvent(evt);\r
-  /*新しくリストの頭を更新して、別の値も実行させるようにする*/\r
-  this._start && this._start.shift();\r
-  this._isStarted = true;\r
-  ttd = evt = void 0;\r
-};\r
-/*void*/ t.endElement = function() {\r
-  var ttd = this.ownerDocument,\r
-      evt = ttd.createEvent("TimeEvents");\r
-  evt.initTimeEvent("endEvent", ttd.defaultView, 0);\r
-  this.dispatchEvent(evt);\r
-  this._finish && this._finish.shift();\r
-  this._currentFrame = 0;\r
-};\r
-/*void*/ t.beginElementAt = function(/*float*/ offset) {\r
-  var ntc = this.ownerDocument.documentElement.getCurrentTime(),\r
-      start = this._start || [];\r
-  for (var i=0,sli=start.length;i<sli;++i) {\r
-    if (start[i] === (offset+ntc)) {\r
-      ntc = start = offset = void 0;\r
-      return;\r
+  /*SVGAnimationElementのメソッドは初期化のときにつけることで高速化*/\r
+  this.mix(function(t) {\r
+  /*以下のメソッド(beginElementなど)については、\r
+   *別モジュールであるsmil::ElementTimeControl(smil.js)を参照のこと\r
+   */\r
+  /*void*/ t.beginElement = function() {\r
+    var ttd = this.ownerDocument,\r
+        evt = ttd.createEvent("TimeEvents");\r
+    this._starting = ttd.documentElement.getCurrentTime(); //getStartTimeメソッドで使う開始時刻\r
+    if (this._isStarted && ((this._restart === "never")\r
+        || ((this._restart === "whenNotActive") && (this.getCurrentTime() > 0)))) {\r
+      return; //restart属性の設定により、再起動させないようにする\r
+    }\r
+    if (this.getCurrentTime() > 0) {\r
+      /*アニメーションの最中で、beginEventが起きるときは、endEventが前もって起こされる。SVG1.1の仕様を参照\r
+       *\r
+       * 19.4.2 Interface TimeEvent\r
+       * Note that if an element is restarted while it is currently playing, the element will raise an end event and another begin event, as the element restarts.\r
+       *\r
+       * http://www.w3.org/TR/SVG/animate.html#InterfaceTimeEvent\r
+       *\r
+       */\r
+      this.endElement();\r
+    }\r
+    evt.initTimeEvent("beginEvent", ttd.defaultView, 0);\r
+    this.dispatchEvent(evt);\r
+    /*新しくリストの頭を更新して、別の値も実行させるようにする*/\r
+    this._start && this._start.shift();\r
+    this._isStarted = true;\r
+    ttd = evt = void 0;\r
+  };\r
+  /*void*/ t.endElement = function() {\r
+    var ttd = this.ownerDocument,\r
+        evt = ttd.createEvent("TimeEvents");\r
+    evt.initTimeEvent("endEvent", ttd.defaultView, 0);\r
+    this.dispatchEvent(evt);\r
+    this._finish && this._finish.shift();\r
+    this._currentFrame = 0;\r
+  };\r
+  /*void*/ t.beginElementAt = function(/*float*/ offset) {\r
+    var ntc = this.ownerDocument.documentElement.getCurrentTime(),\r
+        start = this._start || [];\r
+    for (var i=0,sli=start.length;i<sli;++i) {\r
+      if (start[i] === (offset+ntc)) {\r
+        ntc = start = offset = void 0;\r
+        return;\r
+      }\r
     }\r
-  }\r
-  start.push(offset + ntc);\r
-  start.sort(function(a, b) {\r
-    return a - b;\r
-  });\r
-  this._start = start;\r
-  ntc = start = offset = void 0;\r
-};\r
-/*void*/ t.endElementAt = function(/*float*/ offset) {\r
-  var ntc = this.ownerDocument.documentElement.getCurrentTime(),\r
-  fin = this._finish || [];\r
-  for (var i=0,fli=fin.length;i<fli;++i) {\r
-    if (fin[i] === (offset+ntc)) {\r
-      ntc = fin = offset = void 0;\r
-      return;\r
+    start.push(offset + ntc);\r
+    start.sort(function(a, b) {\r
+      return a - b;\r
+    });\r
+    this._start = start;\r
+    ntc = start = offset = void 0;\r
+  };\r
+  /*void*/ t.endElementAt = function(/*float*/ offset) {\r
+    var ntc = this.ownerDocument.documentElement.getCurrentTime(),\r
+    fin = this._finish || [];\r
+    for (var i=0,fli=fin.length;i<fli;++i) {\r
+      if (fin[i] === (offset+ntc)) {\r
+        ntc = fin = offset = void 0;\r
+        return;\r
+      }\r
     }\r
-  }\r
-  fin.push(offset + ntc);\r
-  fin.sort(function(a, b) {\r
-    return a - b;\r
-  });\r
-  this._finish = fin;\r
-  ntc = start = offset = void 0;\r
-};\r
-t._eventRegExp = /(mouse|activ|clic|begi|en)[a-z]+/;\r
-t._timeRegExp = /[\-\d\.]+(h|min|s|ms)?$/;\r
-t._unit = {\r
-    "h"   : 3600000,\r
-    "min" : 60000,\r
-    "s"   : 1000\r
-};\r
-/*_getOffsetメソッド\r
- * どれだけズレの時間があるかを計測するメソッド\r
- *tに数値が使われていないときは0を返す\r
- *これはSMILアニメーションモジュールの以下の記述にあるように、値のデフォルトが0であることに起因する\r
- *http://www.w3.org/TR/2001/REC-smil20-20010807/smil-timing.html#Timing-Ex:0DurDiscreteMedia\r
- *http://www.w3.org/TR/2001/REC-smil20-20010807/smil-timing.html#Timing-DurValueSemantics\r
- ** Note that when the simple duration is "indefinite", some simple use cases can yield surprising results. See the related example #4 in Appendix B.\r
- */\r
-t._getOffset = function(/*string*/ val) {\r
-  var t = null, //tは最初の数値\r
-      n = [val.indexOf("+"), val.indexOf("-")],\r
-      s;\r
-  if (n[0] > -1) {\r
-    s = val.slice(n[0]);\r
-    t = parseFloat(s);\r
-  } else if (n[1] > -1) {\r
-    s = val.slice(n[1]);\r
-    t = parseFloat(s);\r
-  } else {\r
-    s = val;\r
-    t = parseFloat(val);\r
-  }\r
-  if (isFinite(t)) {\r
-    if (/\d+\:(\d\d)\:([\d\.]+)$/.test(s)) { //Full-Clock-Valueの場合\r
-      t = (t*3600 + parseInt(RegExp.$1, 10)*60 + parseFloat(RegExp.$2)) * 1000;\r
-    } else if (/\d\d\:([\d\.]+)$/.test(s)) {\r
-      t = (t*60 + parseFloat(RegExp.$1)) * 1000;\r
-    } else if (/(h|min|s)$/.test(s)) {\r
-      t *= this._unit[RegExp.$1];\r
+    fin.push(offset + ntc);\r
+    fin.sort(function(a, b) {\r
+      return a - b;\r
+    });\r
+    this._finish = fin;\r
+    ntc = start = offset = void 0;\r
+  };\r
+  t._eventRegExp = /(mouse|activ|clic|begi|en)[a-z]+/;\r
+  t._timeRegExp = /[\-\d\.]+(h|min|s|ms)?$/;\r
+  t._unit = {\r
+      "h"   : 3600000,\r
+      "min" : 60000,\r
+      "s"   : 1000\r
+  };\r
+  /*_getOffsetメソッド\r
+   * どれだけズレの時間があるかを計測するメソッド\r
+   *tに数値が使われていないときは0を返す\r
+   *これはSMILアニメーションモジュールの以下の記述にあるように、値のデフォルトが0であることに起因する\r
+   *http://www.w3.org/TR/2001/REC-smil20-20010807/smil-timing.html#Timing-Ex:0DurDiscreteMedia\r
+   *http://www.w3.org/TR/2001/REC-smil20-20010807/smil-timing.html#Timing-DurValueSemantics\r
+   ** Note that when the simple duration is "indefinite", some simple use cases can yield surprising results. See the related example #4 in Appendix B.\r
+   */\r
+  t._getOffset = function(/*string*/ val) {\r
+    var t = null, //tは最初の数値\r
+        n = [val.indexOf("+"), val.indexOf("-")],\r
+        s;\r
+    if (n[0] > -1) {\r
+      s = val.slice(n[0]);\r
+      t = parseFloat(s);\r
+    } else if (n[1] > -1) {\r
+      s = val.slice(n[1]);\r
+      t = parseFloat(s);\r
+    } else {\r
+      s = val;\r
+      t = parseFloat(val);\r
     }\r
     if (isFinite(t)) {\r
-       t *= 0.8;\r
-      return t;\r
+      if (/\d+\:(\d\d)\:([\d\.]+)$/.test(s)) { //Full-Clock-Valueの場合\r
+        t = (t*3600 + parseInt(RegExp.$1, 10)*60 + parseFloat(RegExp.$2)) * 1000;\r
+      } else if (/\d\d\:([\d\.]+)$/.test(s)) {\r
+        t = (t*60 + parseFloat(RegExp.$1)) * 1000;\r
+      } else if (/(h|min|s)$/.test(s)) {\r
+        t *= this._unit[RegExp.$1];\r
+      }\r
+      if (isFinite(t)) {\r
+         t *= 0.8;\r
+        return t;\r
+      }\r
     }\r
-  }\r
-  return 0;\r
-};\r
-\r
-/*float*/ t.getStartTime = function(){\r
-  if (this._starting || (this._starting === 0)) {\r
-    return (this._starting);\r
-  } else {\r
-    throw new DOMException(/*DOMException.INVALID_STATE_ERR*/ 11);\r
-  }\r
-};\r
-/*getCurrentTimeメソッド\r
- *現在の時間コンテナ内での時刻であり、\r
- *決して現在時刻ではない。要素のbeginイベントの発火したときが0sである。\r
- */\r
-/*float*/ t.getCurrentTime = function(){\r
-  return (this._currentFrame * 125 * 0.8);\r
-};\r
-/*float*/ t.getSimpleDuration = function(){\r
-  if (!this._dur && !this._finish && (this._dur === "indefinite")) {\r
-    throw new DOMException(/*DOMException.NOT_SUPPORTED_ERR*/ 9);\r
-  } else {\r
-    return (this._getOffset(this._dur));\r
-  }\r
+    return 0;\r
+  };\r
+  \r
+  /*float*/ t.getStartTime = function(){\r
+    if (this._starting || (this._starting === 0)) {\r
+      return (this._starting);\r
+    } else {\r
+      throw new DOMException(/*DOMException.INVALID_STATE_ERR*/ 11);\r
+    }\r
+  };\r
+  /*getCurrentTimeメソッド\r
+   *現在の時間コンテナ内での時刻であり、\r
+   *決して現在時刻ではない。要素のbeginイベントの発火したときが0sである。\r
+   */\r
+  /*float*/ t.getCurrentTime = function(){\r
+    return (this._currentFrame * 125 * 0.8);\r
+  };\r
+  /*float*/ t.getSimpleDuration = function(){\r
+      if (!this._dur && !this._finish && (this._dur === "indefinite")) {\r
+        throw new DOMException(/*DOMException.NOT_SUPPORTED_ERR*/ 9);\r
+      } else {\r
+        return (this._getOffset(this._dur));\r
+      }\r
+    };\r
+  });\r
 };\r
-})(SVGAnimationElement.prototype);\r
                     //raises( DOMException );\r
 NAIBU.Time = {\r
   currentFrame : 0,\r