• R/O
  • HTTP
  • SSH
  • HTTPS

sie: コミット

ブラウザでSVGを表示するSIEの開発 (SIE - to display SVG on legacy browsers)


コミットメタ情報

リビジョン5a93340a7c3aed9f8d49f1a67e762f18372c7157 (tree)
日時2015-10-23 23:25:50
作者dhrname <dhrname@user...>
コミッターdhrname

ログメッセージ

Support a detail property of the SVGEvent object

変更サマリ

差分

--- a/org/w3c/dom/smil.js
+++ b/org/w3c/dom/smil.js
@@ -320,8 +320,7 @@ base("$frame").mix ( {
320320 this.eventOffset = this.begin;
321321 if (this.repeat > 0) {
322322 ele && ele.addEventListener("repeatEvent", (function(evt) {
323- /*evt.detailをIE11では0となり使えないので、代用としてevt.targetを活用*/
324- if (evt.target.detail === this.repeat) {
323+ if (evt.detail === this.repeat) {
325324 this.listener(evt);
326325 } }).bind(this), true);
327326 } else if (this.accessKey) {
@@ -1288,18 +1287,16 @@ base("$frame").up("$svgEvent").mix( {
12881287 floor = Math.floor;
12891288 while(obj) {
12901289 var frame = obj.frame,
1291- target = obj.target;
1290+ target = obj.target
1291+ detail = 0;
12921292 if (frame <= num) {
12931293 /*IE11ではSVGEventsやDOMEventsを使うと問題が起きるため、MouseEventsで代用する*/
12941294 var evt = target.ownerDocument.createEvent("MouseEvents");
1295- evt.initMouseEvent(obj.eventType+"Event" ,true, true, window, 0, 0, 0, 0, 0, false, false, false, false,0, target);
12961295 if ( (obj.eventType === "repeat") && (obj.count < obj.limit) ) {
12971296 /*リピートイベントが、リピート制限内である場合
12981297 *numの段階で、何回リピートしたかを求める*/
12991298 obj.count += floor( (num - frame) / obj.simpleDuration);
1300- /*IE 11では、evt.detailは書き換えても必ず0となる
1301- * begin属性などで、repeat文法を使いたいので、やむを得ず、targetにdetailプロパティを追加*/
1302- evt.detail = target.detail = obj.count;
1299+ detail = obj.count;
13031300 cobj = obj;
13041301 } else {
13051302 /*ポインタの連結を変更することで、リストからobj を除去*/
@@ -1308,6 +1305,7 @@ base("$frame").up("$svgEvent").mix( {
13081305 cobj = this.first = obj.next;
13091306 }
13101307 }
1308+ evt.initMouseEvent(obj.eventType+"Event" ,true, true, window, detail, 0, 0, 0, 0, false, false, false, false, 0, target);
13111309 target.dispatchEvent(evt);
13121310 } else {
13131311 /*next プロパティを書き換えるためのobj オブジェクトのキャッシュ*/
--- a/tool/Spec/spec/SvgDomSpec.js
+++ b/tool/Spec/spec/SvgDomSpec.js
@@ -4398,11 +4398,10 @@ describe("SMIL Animation Spec", function() {
43984398 frame.setFrame(5);
43994399 a.count = 1;
44004400 expect(frame.first).toEqual(a);
4401-
4401+
44024402 ele.addEventListener("repeatEvent", function(evt) {
44034403 expect(evt.target).toBe(ele);
4404- /*IE 11では、書き換えても必ず、evt.detailが0となることに注意*/
4405- expect(evt.target.detail).toBe(2);
4404+ expect(evt.detail).toBe(2);
44064405 } );
44074406 frame.timelines = [];
44084407 frame.first = null;
@@ -4410,11 +4409,13 @@ describe("SMIL Animation Spec", function() {
44104409 timelines: [],
44114410 begin: 1,
44124411 simpleDuration: 4,
4413- activeTime: 10,
4412+ activeTime: 15,
44144413 target: ele
44154414 }) );
44164415 frame.setFrame(9);
44174416 a.count = 2;
4417+ a.limit = 3;
4418+ a.next.frame = 16;
44184419 expect(frame.first).toEqual(a);
44194420 } );
44204421 } );
旧リポジトリブラウザで表示