Fixed VML, added Set.splice method

This commit is contained in:
Dmitry Baranovskiy 2011-08-16 13:49:01 +10:00
parent e9f2c24746
commit 951f8fb604
4 changed files with 152 additions and 49 deletions

2
raphael-min.js vendored

File diff suppressed because one or more lines are too long

View File

@ -3509,17 +3509,12 @@
= (object) original element
\*/
elproto.animateWith = function (element, params, ms, easing, callback) {
// var a = R.animation(params, ms, easing, callback);
// status = element.status(anim);
// this.animate(a);
// this.status(a, status);
this.animate(params, ms, easing, callback);
var start, el;
for (var i = 0, ii = animationElements.length; i < ii; i++) {
el = animationElements[i];
if (el.el.id == element.id) {
start = el.timestamp;
} else if (el.el.id == this.id) {
el.start = start;
}
}
return this.animate(params, ms, easing, callback);
return this;
};
function CubicBezierAtTime(t, p1x, p1y, p2x, p2y, duration) {
var cx = 3 * p1x,
@ -4119,11 +4114,78 @@
}
return this;
};
/*\
* Set.clear
[ method ]
**
* Removeds all elements from the set
\*/
setproto.clear = function () {
while (this.length) {
this.pop();
}
};
/*\
* Set.splice
[ method ]
**
* Removes given element from the set
**
> Parameters
**
- index (number) position of the deletion
- count (number) number of element to remove
- insertion (object) #optional elements to insert
= (object) set elements that were deleted
\*/
setproto.splice = function (index, count, insertion) {
index = index < 0 ? mmax(this.length + index, 0) : index;
count = mmax(0, mmin(this.length - index, count));
var tail = [],
todel = [],
args = [],
i;
for (i = 2; i < arguments.length; i++) {
args.push(arguments[i]);
}
for (i = 0; i < count; i++) {
todel.push(this[index + i]);
}
for (; i < this.length - index; i++) {
tail.push(this[index + i]);
}
var arglen = args.length;
for (i = 0; i < arglen + tail.length; i++) {
this.items[index + i] = this[index + i] = i < arglen ? args[i] : tail[i - arglen];
}
i = this.items.length = this.length -= count - arglen;
while (this[i]) {
delete this[i++];
}
return new Set(todel);
};
/*\
* Set.exclude
[ method ]
**
* Removes given element from the set
**
> Parameters
**
- element (object) element to remove
= (boolean) `true` if object was found & removed from the set
\*/
setproto.exclude = function (el) {
for (var i = 0, ii = this.length, found; i < ii; i++) if (found || this[i] == el) {
this[i] = this[i + 1];
found = 1;
}
if (found) {
this.length--;
delete this[i];
return true;
}
};
setproto.animate = function (params, ms, easing, callback) {
(R.is(easing, "function") || !easing) && (callback = easing || null);
var len = this.items.length,

View File

@ -2560,17 +2560,12 @@
};
elproto.animateWith = function (element, params, ms, easing, callback) {
// var a = R.animation(params, ms, easing, callback);
// status = element.status(anim);
// this.animate(a);
// this.status(a, status);
this.animate(params, ms, easing, callback);
var start, el;
for (var i = 0, ii = animationElements.length; i < ii; i++) {
el = animationElements[i];
if (el.el.id == element.id) {
start = el.timestamp;
} else if (el.el.id == this.id) {
el.start = start;
}
}
return this.animate(params, ms, easing, callback);
return this;
};
function CubicBezierAtTime(t, p1x, p1y, p2x, p2y, duration) {
var cx = 3 * p1x,
@ -3024,11 +3019,51 @@
}
return this;
};
setproto.clear = function () {
while (this.length) {
this.pop();
}
};
setproto.splice = function (index, count, insertion) {
index = index < 0 ? mmax(this.length + index, 0) : index;
count = mmax(0, mmin(this.length - index, count));
var tail = [],
todel = [],
args = [],
i;
for (i = 2; i < arguments.length; i++) {
args.push(arguments[i]);
}
for (i = 0; i < count; i++) {
todel.push(this[index + i]);
}
for (; i < this.length - index; i++) {
tail.push(this[index + i]);
}
var arglen = args.length;
for (i = 0; i < arglen + tail.length; i++) {
this.items[index + i] = this[index + i] = i < arglen ? args[i] : tail[i - arglen];
}
i = this.items.length = this.length -= count - arglen;
while (this[i]) {
delete this[i++];
}
return new Set(todel);
};
setproto.exclude = function (el) {
for (var i = 0, ii = this.length, found; i < ii; i++) if (found || this[i] == el) {
this[i] = this[i + 1];
found = 1;
}
if (found) {
this.length--;
delete this[i];
return true;
}
};
setproto.animate = function (params, ms, easing, callback) {
(R.is(easing, "function") || !easing) && (callback = easing || null);
var len = this.items.length,
@ -4504,10 +4539,10 @@ window.Raphael.vml && function (R) {
node.path = path2vml(a.path);
}
if (isOval) {
var cx = a.cx,
cy = a.cy,
rx = a.rx || a.r || 0,
ry = a.ry || a.r || 0;
var cx = +a.cx,
cy = +a.cy,
rx = +a.rx || +a.r || 0,
ry = +a.ry || +a.r || 0;
node.path = R.format("ar{0},{1},{2},{3},{4},{1},{4},{1}x", round((cx - rx) * zoom), round((cy - ry) * zoom), round((cx + rx) * zoom), round((cy + ry) * zoom), round(cx * zoom));
}
if ("clip-rect" in params) {
@ -4785,19 +4820,21 @@ window.Raphael.vml && function (R) {
if (tstr == null) {
return this._.transform;
}
R._extractTransform(this, tstr);
var vbs = this.paper._viewBoxShift,
vbt = vbs ? "s" + [vbs.scale, vbs.scale] + "-1-1t" + [vbs.dx, vbs.dy] : E,
oldt;
if (vbs) {
oldt = tstr = Str(tstr).replace(/\.{3}|\u2026/g, this._.transform || E);
}
R._extractTransform(this, vbt + tstr);
var matrix = this.matrix.clone(),
vbs = this.paper._viewBoxShift,
skew = this.skew,
o = this.node,
split,
isGrad = Str(this.attrs.fill).indexOf("-") + 1;
isGrad = ~Str(this.attrs.fill).indexOf("-"),
isPatt = !Str(this.attrs.fill).indexOf("url(");
matrix.translate(-.5, -.5);
if (vbs) {
matrix.scale(vbs.scale, vbs.scale, -1, -1);
matrix.translate(vbs.dx, vbs.dy);
}
if (isGrad || this.type == "image") {
if (isPatt || isGrad || this.type == "image") {
skew.matrix = "1 0 0 1";
skew.offset = "0 0";
split = matrix.split();
@ -4818,6 +4855,7 @@ window.Raphael.vml && function (R) {
skew.matrix = Str(matrix);
skew.offset = matrix.offset();
}
oldt && (this._.transform = oldt);
return this;
};
elproto.rotate = function (deg, cx, cy) {
@ -5004,7 +5042,7 @@ window.Raphael.vml && function (R) {
if (this.removed) {
return this;
}
if (element.constructor == Set) {
if (element.constructor == R.st.constructor) {
element = element[element.length - 1];
}
if (element.node.nextSibling) {
@ -5019,7 +5057,7 @@ window.Raphael.vml && function (R) {
if (this.removed) {
return this;
}
if (element.constructor == Set) {
if (element.constructor == R.st.constructor) {
element = element[0];
}
element.node.parentNode.insertBefore(this.node, element.node);

View File

@ -173,10 +173,10 @@ window.Raphael.vml && function (R) {
node.path = path2vml(a.path);
}
if (isOval) {
var cx = a.cx,
cy = a.cy,
rx = a.rx || a.r || 0,
ry = a.ry || a.r || 0;
var cx = +a.cx,
cy = +a.cy,
rx = +a.rx || +a.r || 0,
ry = +a.ry || +a.r || 0;
node.path = R.format("ar{0},{1},{2},{3},{4},{1},{4},{1}x", round((cx - rx) * zoom), round((cy - ry) * zoom), round((cx + rx) * zoom), round((cy + ry) * zoom), round(cx * zoom));
}
if ("clip-rect" in params) {
@ -454,19 +454,21 @@ window.Raphael.vml && function (R) {
if (tstr == null) {
return this._.transform;
}
R._extractTransform(this, tstr);
var vbs = this.paper._viewBoxShift,
vbt = vbs ? "s" + [vbs.scale, vbs.scale] + "-1-1t" + [vbs.dx, vbs.dy] : E,
oldt;
if (vbs) {
oldt = tstr = Str(tstr).replace(/\.{3}|\u2026/g, this._.transform || E);
}
R._extractTransform(this, vbt + tstr);
var matrix = this.matrix.clone(),
vbs = this.paper._viewBoxShift,
skew = this.skew,
o = this.node,
split,
isGrad = Str(this.attrs.fill).indexOf("-") + 1;
isGrad = ~Str(this.attrs.fill).indexOf("-"),
isPatt = !Str(this.attrs.fill).indexOf("url(");
matrix.translate(-.5, -.5);
if (vbs) {
matrix.scale(vbs.scale, vbs.scale, -1, -1);
matrix.translate(vbs.dx, vbs.dy);
}
if (isGrad || this.type == "image") {
if (isPatt || isGrad || this.type == "image") {
skew.matrix = "1 0 0 1";
skew.offset = "0 0";
split = matrix.split();
@ -487,6 +489,7 @@ window.Raphael.vml && function (R) {
skew.matrix = Str(matrix);
skew.offset = matrix.offset();
}
oldt && (this._.transform = oldt);
return this;
};
elproto.rotate = function (deg, cx, cy) {
@ -673,7 +676,7 @@ window.Raphael.vml && function (R) {
if (this.removed) {
return this;
}
if (element.constructor == Set) {
if (element.constructor == R.st.constructor) {
element = element[element.length - 1];
}
if (element.node.nextSibling) {
@ -688,7 +691,7 @@ window.Raphael.vml && function (R) {
if (this.removed) {
return this;
}
if (element.constructor == Set) {
if (element.constructor == R.st.constructor) {
element = element[0];
}
element.node.parentNode.insertBefore(this.node, element.node);