return this;
}*/
/*Event*/ Document.prototype.createEvent = function( /*string*/ eventType) {
- var evt;
- if (eventType === "MutationEvents") {
- evt = new MutationEvent();
- } else if (eventType === "MouseEvents") {
- evt = new MouseEvent();
- } else if (eventType === "UIEvents") {
- evt = new UIEvent();
+ var evt,
+ tc = this._cevent[eventType];
+ if (tc) {
+ evt = new tc();
} else if (eventType === "SVGEvents") {
evt = new SVGEvent();
} else if (eventType === "TimeEvents") {
/*ここまで追加*/
};
+/*_ceventプロパティはcreateEventメソッドで軽量化のために使う。*/
+Document.prototype._cevent = {
+ "MutationEvents" : MutationEvent,
+ "MouseEvents" : MouseEvent,
+ "UIEvents" : UIEvent
+};
+
+
// _EVENTS_IDL_
/*
tvw = tod.viewport.width,
tvh = tod.viewport.height,
s,
- n = evt.newValue.match(tar._NaNReg),
+ n = evt.newValue.slice(-2),
+ m = n.charAt(1),
type = /*SVGLength.SVG_LENGTHTYPE_NUMBER*/ 1,
_parseFloat = parseFloat;
- if (!!n) {
- n = n[0];
- }
- if (!n) { //軽量化のためにチェックを設ける
- } else if (n === "%") {
+ if (m >= "0" && m <= "9") { //軽量化のためにチェックを設ける
+ } else if (m === "%") {
if (tar._x1width[name]) {
tea.baseVal._percent = tvw * 0.01;
} else if (tar._y1height[name]) {
this._syouReg = /^[^a-z\-]+/;
this._conReg = /\:\s+/g;
this._bouReg = /\s*;[^a-z\-]*/g;
- this._NaNReg = /\D+$/;
/*_cacheMatrixプロパティはSVGMatrixのキャッシュとして、
*getCTMメソッドで使う
*/
/*float*/SVGPoint.prototype.x = SVGPoint.prototype.y = 0;
SVGPoint.prototype.matrixTransform = function(/*SVGMatrix*/ matrix ) {
/*整数にしているのは、VMLの設計上、小数点を扱えないときがあるため*/
- var x = parseInt(matrix.a * this.x + matrix.c * this.y + matrix.e);
- var y = parseInt(matrix.b * this.x + matrix.d * this.y + matrix.f);
- if ((-1 < x) && (x < 1)) {x=1;}
- if ((-1 < y) && (y < 1)) {y=1;}
var s = new SVGPoint();
- s.x = x;
- s.y = y;
+ s.x = matrix.a * this.x + matrix.c * this.y + matrix.e;
+ s.y = matrix.b * this.x + matrix.d * this.y + matrix.f;
return s;
};
};
/*documentは引数の変数として登録しておく*/
-(function(_doc, _pInt, _math) {
+(function(_doc, _math) {
//freeArg関数はunloadで使う解放処理
NAIBU.freeArg = function() {
- SVGPathElement = _doc = _pInt = _math = void 0;
+ SVGPathElement = _doc = _math = void 0;
};
//仮のfill属性とstroke属性の処理
NAIBU._setPaint = function(tar, matrix) {
var tar = evt.target,
matrix = tar.getScreenCTM(),
tlist = tar.normalizedPathSegList,
- _parseInt = _pInt,
dat = [],
ma = matrix.a, mb = matrix.b, mc = matrix.c, md = matrix.d, me = matrix.e, mf = matrix.f,
cname = tar._com._nameCom,
- isZ = tar._com._isZ, isC = tar._com._isC;
+ isZ = tar._com._isZ, isC = tar._com._isC,
+ mr = _math.round;
for (var i=0, tli=tlist.numberOfItems;i<tli;++i) {
var ti = tlist[i],
tx = ti.x,
*[mb md mf] * [y]
*[0 0 1 ] [1]
*/
- t += [_parseInt(ma*ti.x1 + mc*ti.y1 + me, 10),
- _parseInt(mb*ti.x1 + md*ti.y1 + mf, 10),
- _parseInt(ma*ti.x2 + mc*ti.y2 + me, 10),
- _parseInt(mb*ti.x2 + md*ti.y2 + mf, 10),
- _parseInt(ma*tx + mc*ty + me, 10),
- _parseInt(mb*tx + md*ty + mf, 10)].join(" ");
+ t += [mr(ma*ti.x1 + mc*ti.y1 + me),
+ mr(mb*ti.x1 + md*ti.y1 + mf),
+ mr(ma*ti.x2 + mc*ti.y2 + me),
+ mr(mb*ti.x2 + md*ti.y2 + mf),
+ mr(ma*tx + mc*ty + me),
+ mr(mb*tx + md*ty + mf)].join(" ");
} else if (!isZ[tps]) {
- t += _parseInt(ma*tx + mc*ty + me, 10)+ " " +_parseInt(mb*tx + md*ty + mf, 10);
+ t += mr(ma*tx + mc*ty + me)+ " " +mr(mb*tx + md*ty + mf);
}
dat[i] = t;
}
tt.coordsize = vi.width.baseVal.value + " " + vi.height.baseVal.value;
NAIBU._setPaint(tar, matrix);
delete tar._cacheMatrix;
- evt = tar = dat = t = tx = ty = matrix = tlist = x = y = _parseInt = ma = mb = mc = md = me = mf = vi = isZ = isC = i = tli = tps = ti = cname = tt = void 0;
+ evt = tar = dat = t = tx = ty = matrix = tlist = x = y = mr = ma = mb = mc = md = me = mf = vi = isZ = isC = i = tli = tps = ti = cname = tt = void 0;
};
_sproto._com = {
_nameCom : {
};
})(SVGPathElement.prototype)
NAIBU.SVGPathElement = SVGPathElement; //IE8では、SVGPathElementはローカル変数
-})(document, parseInt, Math);
+})(document, Math);
function SVGRectElement(_doc) {
SVGElement.apply(this);
ele = tar._tar,
vi = tar.ownerDocument.documentElement,
w = vi.width.baseVal.value,
- h = vi.height.baseVal.value;
+ h = vi.height.baseVal.value,
+ mr = Math.round;
for (var i=0, lili=list.length;i<lili;) {
if (isNaN(list[i])) { //コマンド文字は読み飛ばす
++i;
p.x = list[i];
p.y = list[i+1];
pmt = p.matrixTransform(ctm);
- list[i] = pmt.x;
+ list[i] = mr(pmt.x);
++i;
- list[i] = pmt.y;
+ list[i] = mr(pmt.y);
++i;
p = pmt = void 0;
}
ele.coordsize = w + " " + h;
NAIBU._setPaint(tar, ctm);
delete tar._cacheMatrix;
- evt = tar = style = list = dat = ele = vi = fontSize = void 0;
+ evt = tar = style = list = mr = dat = ele = vi = fontSize = void 0;
}, false);
evt = tar = void 0;
}, false);
var rrx = rx * 0.55228, rry = ry * 0.55228;
var list = ["m", cx,top, "c", cx-rrx,top, left,cy-rry, left,cy, left,cy+rry, cx-rrx,bottom, cx,bottom, cx+rrx,bottom, right,cy+rry, right,cy, right,cy-rry, cx+rrx,top, cx,top, "x e"];
//以下は、配列listそのものをCTMで座標変換していく処理
- var par = tar.ownerDocument.documentElement, ctm = tar.getScreenCTM();
+ var par = tar.ownerDocument.documentElement,
+ ctm = tar.getScreenCTM(),
+ mr = Math.round;
for (var i=0, lili=list.length;i<lili;) {
if (isNaN(list[i])) { //コマンド文字は読み飛ばす
++i;
p.x = list[i];
p.y = list[i+1];
var pmt = p.matrixTransform(ctm);
- list[i] = pmt.x;
+ list[i] = mr(pmt.x);
++i;
- list[i] = pmt.y;
+ list[i] = mr(pmt.y);
++i;
p = pmt = void 0;
}
ele.coordsize = w + " " + h;
NAIBU._setPaint(tar, ctm);
delete tar._cacheMatrix;
- evt = tar = list = style = fontSize = dat = ele = void 0;
+ evt = tar = list = mr = style = fontSize = dat = ele = void 0;
}, false);
evt = tar = void 0;
}, false);
var rrx = rx * 0.55228, rry = ry * 0.55228;
var list = ["m", cx,top, "c", cx-rrx,top, left,cy-rry, left,cy, left,cy+rry, cx-rrx,bottom, cx,bottom, cx+rrx,bottom, right,cy+rry, right,cy, right,cy-rry, cx+rrx,top, cx,top, "x e"];
//以下は、配列listそのものをCTMで座標変換していく処理
- var par = tar.ownerDocument.documentElement, ctm = tar.getScreenCTM();
+ var par = tar.ownerDocument.documentElement,
+ ctm = tar.getScreenCTM(),
+ mr = Math.round;
for (var i=0, lili=list.length;i<lili;) {
if (isNaN(list[i])) { //コマンド文字は読み飛ばす
++i;
p.x = list[i];
p.y = list[i+1];
var pmt = p.matrixTransform(ctm);
- list[i] = pmt.x;
+ list[i] = mr(pmt.x);
++i;
- list[i] = pmt.y;
+ list[i] = mr(pmt.y);
++i;
p = pmt = void 0;
}
ele.coordsize = w + " " + h;
NAIBU._setPaint(tar, ctm);
delete tar._cacheMatrix;
- evt = ele = tar = style = fontSize = dat = list = ctm = w = h = void 0;
+ evt = ele = tar = style = fontSize = dat = list = mr = ctm = w = h = void 0;
}, false);
evt = tar = void 0;
}, false);
tar.x2.baseVal._emToUnit(fontSize);
tar.y2.baseVal._emToUnit(fontSize);
//以下は、配列listそのものをCTMで座標変換していく処理
- var vi = tar.ownerDocument.documentElement, ctm = tar.getScreenCTM();
- var dat = "m ";
- var p = vi.createSVGPoint();
+ var vi = tar.ownerDocument.documentElement,
+ ctm = tar.getScreenCTM(),
+ dat = "m ",
+ mr = Math.round,
+ p = vi.createSVGPoint();
p.x = tar.x1.baseVal.value;
p.y = tar.y1.baseVal.value;
var pmt = p.matrixTransform(ctm);
- dat += pmt.x+ " " +pmt.y+ " l ";
+ dat += mr(pmt.x)+ " " +mr(pmt.y)+ " l ";
p.x = tar.x2.baseVal.value;
p.y = tar.y2.baseVal.value;
pmt = p.matrixTransform(ctm);
- dat += pmt.x+ " " +pmt.y;
+ dat += mr(pmt.x)+ " " +mr(pmt.y);
p = pmt = void 0;
//VMLに結び付けていく
var ele = tar._tar, w = vi.width.baseVal.value, h = vi.height.baseVal.value;
ele.coordsize = w + " " + h;
NAIBU._setPaint(tar, ctm);
delete tar._cacheMatrix;
- evt = ele = tar = style = fontSize = dat = list = ctm = vi = w = h = void 0;
+ evt = ele = tar = style = fontSize = dat = list = mr = ctm = vi = w = h = void 0;
}, false);
evt = tar = void 0;
}, false);
tar.addEventListener("DOMNodeInsertedIntoDocument", function(evt) {
var tar = evt.target,
tp = tar.points,
- ctm = tar.getScreenCTM();
+ ctm = tar.getScreenCTM(),
+ mr = Math.round;
//以下は、配列listそのものをCTMで座標変換していく処理
for (var i=0, list = [], lili=tp.numberOfItems;i<lili;++i) {
var p = tp.getItem(i),
pmt = p.matrixTransform(ctm);
- list[2*i] = pmt.x;
- list[2*i + 1] = pmt.y;
+ list[2*i] = mr(pmt.x);
+ list[2*i + 1] = mr(pmt.y);
p = pmt = void 0;
}
list.splice(2, 0, "l");
ele.coordsize = w + " " + h;
NAIBU._setPaint(tar, ctm);
delete tar._cacheMatrix;
- evt = ele = tar = dat = list = ctm = w = h = vi = void 0;
+ evt = ele = tar = dat = list = mr = ctm = w = h = vi = void 0;
}, false);
evt = tar = void 0;
}, false);
_doc = sl = void 0;
/*readonly SVGAnimatedNumberList*/ this.rotate = new SVGAnimatedNumberList();
this.addEventListener("DOMAttrModified", function(evt){
- var tar = evt.target, name = evt.attrName, tod = tar.ownerDocument.documentElement;
- var _parseFloat = parseFloat;
+ var tar = evt.target,
+ name = evt.attrName,
+ tod = tar.ownerDocument.documentElement,
+ _parseFloat = parseFloat;
if ((name === "x") || (name === "y") || (name === "dx") || (name === "dy")) {
- var enr = evt.newValue.replace(/^\s+|\s+$/g, "").split(/[\s,]+/), teas = tar[name].baseVal;
+ var enr = evt.newValue.replace(/^\s+|\s+$/g, "").split(/[\s,]+/),
+ teas = tar[name].baseVal;
for (var i=0, tli=enr.length;i<tli;++i) {
- var tea = tod.createSVGLength();
- var n = enr[i].match(/\D+$/), type = 0;
- if (!!n) {
- n = n[0];
- }
- if (!n) {
+ var tea = tod.createSVGLength(),
+ n = enr[i].slice(-1),
+ type = 0;
+ if (n >= "0" && n <= "9") {
type = /*SVGLength.SVG_LENGTHTYPE_NUMBER*/ 1;
} else if (n === "%") {
if ((name === "x") || (name === "dx")) {
tea._percent *= tod.viewport.height;
}
type = /*SVGLength.SVG_LENGTHTYPE_PERCENTAGE*/ 2;
- } else if (n === "em") {
- var style = tar.ownerDocument.defaultView.getComputedStyle(tar, null);
- tea._percent *= _parseFloat(style.getPropertyValue("font-size"));
- style = void 0;
- type = /*SVGLength.SVG_LENGTHTYPE_EMS*/ 3;
- } else if (n === "ex") {
- type = /*SVGLength.SVG_LENGTHTYPE_EXS*/ 4;
- } else if (n === "px") {
- type = /*SVGLength.SVG_LENGTHTYPE_PX*/ 5;
- } else if (n === "cm") {
- type = /*SVGLength.SVG_LENGTHTYPE_CM*/ 6;
- } else if (n === "mm") {
- type = /*SVGLength.SVG_LENGTHTYPE_MM*/ 7;
- } else if (n === "in") {
- type = /*SVGLength.SVG_LENGTHTYPE_IN*/ 8;
- } else if (n === "pt") {
- type = /*SVGLength.SVG_LENGTHTYPE_PT*/ 9;
- } else if (n === "pc") {
- type = /*SVGLength.SVG_LENGTHTYPE_PC*/ 10;
+ } else {
+ n = enr[i].s1ice(-2);
+ if (n === "em") {
+ var style = tar.ownerDocument.defaultView.getComputedStyle(tar, null);
+ tea._percent *= _parseFloat(style.getPropertyValue("font-size"));
+ style = void 0;
+ type = /*SVGLength.SVG_LENGTHTYPE_EMS*/ 3;
+ } else if (n === "ex") {
+ type = /*SVGLength.SVG_LENGTHTYPE_EXS*/ 4;
+ } else if (n === "px") {
+ type = /*SVGLength.SVG_LENGTHTYPE_PX*/ 5;
+ } else if (n === "cm") {
+ type = /*SVGLength.SVG_LENGTHTYPE_CM*/ 6;
+ } else if (n === "mm") {
+ type = /*SVGLength.SVG_LENGTHTYPE_MM*/ 7;
+ } else if (n === "in") {
+ type = /*SVGLength.SVG_LENGTHTYPE_IN*/ 8;
+ } else if (n === "pt") {
+ type = /*SVGLength.SVG_LENGTHTYPE_PT*/ 9;
+ } else if (n === "pc") {
+ type = /*SVGLength.SVG_LENGTHTYPE_PC*/ 10;
+ }
}
var s = _parseFloat(enr[i]);
s = isNaN(s) ? 0 : s;
SVGTSpanElement.constructor = SVGTextPositioningElement;
SVGTSpanElement.prototype = new SVGTextPositioningElement();
-function SVGTRefElement() {
+function SVGTRefElement(_doc) {
SVGTextPositioningElement.apply(this, arguments);
SVGURIReference.apply(this, arguments);
return this;
sl = void 0;
this.cx.baseVal.value = this.cy.baseVal.value = this.r.baseVal.value = 0.5;
this.addEventListener("DOMNodeInsertedIntoDocument", function(evt) {
- var grad = evt.target, ele = evt._tar, tar = evt._ttar; //eleはv:fill要素。tarはターゲットとになる要素
+ var grad = evt.target,
+ ele = evt._tar,
+ tar = evt._ttar; //eleはv:fill要素。tarはターゲットとになる要素
if (!!!ele) { //まだ、path要素などが設定されていない場合
return;
}
/*VMLでは、図の形状に沿って、円状のグラデーションを処理するようになっているため、
*四角だとおかしな模様が出てしまう。以下はそれを避ける処理
*/
- var style = grad.ownerDocument.defaultView.getComputedStyle(tar, "");
- var fontSize = parseFloat(style.getPropertyValue("font-size"));
+ var style = grad.ownerDocument.defaultView.getComputedStyle(tar, ""),
+ fontSize = parseFloat(style.getPropertyValue("font-size"));
grad.cx.baseVal._emToUnit(fontSize);
grad.cy.baseVal._emToUnit(fontSize);
grad.r.baseVal._emToUnit(fontSize);
grad.fx.baseVal._emToUnit(fontSize);
grad.fy.baseVal._emToUnit(fontSize);
- var cx = grad.cx.baseVal.value, cy = grad.cy.baseVal.value;
- var r = grad.r.baseVal.value, rx, ry;
+ var cx = grad.cx.baseVal.value,
+ cy = grad.cy.baseVal.value,
+ r = grad.r.baseVal.value,
+ mr = Math.round,
+ rx, ry;
rx = ry = r;
- var tarrect = tar.getBBox();
- var vi = tar.ownerDocument.documentElement.viewport;
- var el = vi.width | 0, et = vi.height | 0, er = 0, eb = 0;
- var units = grad.getAttributeNS(null, "gradientUnits");
+ var tarrect = tar.getBBox(),
+ vi = tar.ownerDocument.documentElement.viewport,
+ el = mr(vi.width),
+ et = mr(vi.height),
+ er = 0,
+ eb = 0,
+ units = grad.getAttributeNS(null, "gradientUnits");
if (!units || units === "objectBoundingBox") {
//%の場合は小数点に変換(10% -> 0.1)
- cx = cx > 1 ? cx/100 : cx; cy = cy > 1 ? cy/100 : cy; r = r > 1 ? r/100 : r;
+ cx = cx > 1 ? cx/100 : cx;
+ cy = cy > 1 ? cy/100 : cy;
+ r = r > 1 ? r/100 : r;
//要素の境界領域を求める(四隅の座標を求める)
- var nx = tarrect.x, ny = tarrect.y, wid = tarrect.width, hei = tarrect.height;
- cx = cx*wid + nx; cy = cy*hei + ny; rx = r*wid; ry = r*hei;
+ var nx = tarrect.x,
+ ny = tarrect.y,
+ wid = tarrect.width,
+ hei = tarrect.height;
+ cx = cx*wid + nx;
+ cy = cy*hei + ny;
+ rx = r*wid;
+ ry = r*hei;
nx = ny = wid = hei = void 0;
}
var matrix = tar.getScreenCTM().multiply(grad.getCTM());
- el = cx - rx; et = cy - ry; er = cx + rx; eb = cy + ry;
- var rrx = rx * 0.55228, rry = ry * 0.55228;
- var list = ["m", cx,et, "c", cx-rrx,et, el,cy-rry, el,cy, el,cy+rry, cx-rrx,eb, cx,eb, cx+rrx,eb, er,cy+rry, er,cy, er,cy-rry, cx+rrx,et, cx,et, "x e"];
+ el = cx - rx;
+ et = cy - ry;
+ er = cx + rx;
+ eb = cy + ry;
+ var rrx = rx * 0.55228,
+ rry = ry * 0.55228,
+ list = ["m", cx,et, "c", cx-rrx,et, el,cy-rry, el,cy, el,cy+rry, cx-rrx,eb, cx,eb, cx+rrx,eb, er,cy+rry, er,cy, er,cy-rry, cx+rrx,et, cx,et, "x e"];
for (var i = 0, lili = list.length; i < lili;) {
if (isNaN(list[i])) { //コマンド文字は読み飛ばす
++i;
p.x = parseFloat(list[i]);
p.y = parseFloat(list[i+1]);
var pmt = p.matrixTransform(matrix);
- list[i] = pmt.x;
+ list[i] = mr(pmt.x);
i++;
- list[i] = pmt.y;
+ list[i] = mr(pmt.y);
i++;
p = pmt = void 0;
}
- var ellipse = list.join(" ");
- var outline = _doc.getElementById("_NAIBU_outline");
- var background = _doc.createElement("div"), bstyle = background.style;
+ var ellipse = list.join(" "),
+ outline = _doc.getElementById("_NAIBU_outline"),
+ background = _doc.createElement("div"),
+ bstyle = background.style;
bstyle.position = "absolute";
bstyle.display = "inline-block";
- var w = vi.width, h = vi.height;
- bstyle.textAlign = "left"; bstyle.top = "0px"; bstyle.left = "0px"; bstyle.width = w+ "px"; bstyle.height = h+ "px";
+ var w = vi.width,
+ h = vi.height;
+ bstyle.textAlign = "left";
+ bstyle.top = "0px";
+ bstyle.left = "0px";
+ bstyle.width = w+ "px";
+ bstyle.height = h+ "px";
outline.appendChild(background);
bstyle.filter = "progid:DXImageTransform.Microsoft.Compositor";
background.filters.item('DXImageTransform.Microsoft.Compositor').Function = 23;
- var circle = '<v:shape style="display:inline-block; position:relative; antialias:false; top:0px; left:0px;" coordsize="' +w+ ' ' +h+ '" path="' +ellipse+ '" stroked="f">' +ele.outerHTML+ '</v:shape>';
- var data = tar._tar.path.value;
+ var circle = '<v:shape style="display:inline-block; position:relative; antialias:false; top:0px; left:0px;" coordsize="' +w+ ' ' +h+ '" path="' +ellipse+ '" stroked="f">' +ele.outerHTML+ '</v:shape>',
+ data = tar._tar.path.value;
background.innerHTML = '<v:shape style="display:inline-block; position:relative; top:0px; left:0px;" coordsize="' +w+ ' ' +h+ '" path="' +data+ '" stroked="f" fillcolor="' +grad._color[grad._color.length-1]+ '" ></v:shape>';
background.filters[0].apply();
background.innerHTML = circle;
background.filters[0].play();
tar._tar.parentNode.insertBefore(background, tar._tar);
tar._tar.filled = "false";
- ellipse = outline = background = style = fontSize = bstyle = circle = data = list = gt = cx = cy = r = w = h = matrix = void 0;
+ ellipse = outline = background = style = fontSize = bstyle = circle = data = list = mr = gt = cx = cy = r = w = h = matrix = void 0;
} else if (!ele.parentNode){
tar._tar.appendChild(ele);
}
dx = parseFloat(ti.getAttributeNS(null, "x") || 0),
dy = parseFloat(ti.getAttributeNS(null, "y") || 0),
fontSize = parseFloat(style.getPropertyValue("font-size")),
- fe = fontSize / em;
+ fe = fontSize / em,
ds = false, npdlist = ["fill",
"fill-opacity",
"stroke",
matrix.a = fe;
matrix.d = -fe;
for (var j=0;j<npdlist.length;++j){
- var nj = npdlist[j], tg = ti.getAttributeNS(null, nj);
+ var nj = npdlist[j],
+ tg = ti.getAttributeNS(null, nj) || style.getPropertyValue(nj);
+ if (nj === "stroke-width") {
+ tg = style.getPropertyCSSValue(nj).getFloatValue(1) / fe;
+ tg += "";
+ }
if (tg) {
path.setAttributeNS(null, nj, tg);
}