X-Git-Url: http://git.roojs.org/?a=blobdiff_plain;f=raphael.js;h=bf6e741fdf2c1bc4945ade5ee864f6493721a997;hb=300aa589f5a0ba7fce667cd62c7cdda0bd5ad904;hp=abcdfd806be4b3b9466fd31a969653233d09f97c;hpb=a3d3b76d37f7452fbc43e716cc57ca4d795b957c;p=raphael diff --git a/raphael.js b/raphael.js index abcdfd8..bf6e741 100644 --- a/raphael.js +++ b/raphael.js @@ -1,5 +1,5 @@ // ┌─────────────────────────────────────────────────────────────────────┐ \\ -// │ Raphaël 2.0 - JavaScript Vector Library │ \\ +// │ Raphaël 2.0.1 - JavaScript Vector Library │ \\ // ├─────────────────────────────────────────────────────────────────────┤ \\ // │ Copyright (c) 2008-2011 Dmitry Baranovskiy (http://raphaeljs.com) │ \\ // │ Copyright (c) 2008-2011 Sencha Labs (http://sencha.com) │ \\ @@ -7,14 +7,14 @@ // └─────────────────────────────────────────────────────────────────────┘ \\ // ┌──────────────────────────────────────────────────────────────────────────────────────┐ \\ -// │ Eve 0.3.2 - JavaScript Events Library │ \\ +// │ Eve 0.4.0 - JavaScript Events Library │ \\ // ├──────────────────────────────────────────────────────────────────────────────────────┤ \\ // │ Copyright (c) 2008-2011 Dmitry Baranovskiy (http://dmitry.baranovskiy.com/) │ \\ // │ Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license. │ \\ // └──────────────────────────────────────────────────────────────────────────────────────┘ \\ (function (glob) { - var version = "0.3.2", + var version = "0.4.0", has = "hasOwnProperty", separator = /[\.\/]/, wildcard = "*", @@ -157,9 +157,10 @@ e, key, splice, + i, ii, j, jj, cur = [events]; - for (var i = 0, ii = names.length; i < ii; i++) { - for (var j = 0; j < cur.length; j += splice.length - 2) { + for (i = 0, ii = names.length; i < ii; i++) { + for (j = 0; j < cur.length; j += splice.length - 2) { splice = [j, 1]; e = cur[j].n; if (names[i] != wildcard) { @@ -204,6 +205,14 @@ } }; + eve.once = function (name, f) { + var f2 = function () { + f.apply(this, arguments); + eve.unbind(name, f2); + }; + return eve.on(name, f2); + }; + eve.version = version; eve.toString = function () { return "You are running Eve " + version; @@ -212,7 +221,7 @@ })(this); // ┌─────────────────────────────────────────────────────────────────────┐ \\ -// │ "Raphaël 2.0" - JavaScript Vector Library │ \\ +// │ "Raphaël 2.0.1" - JavaScript Vector Library │ \\ // ├─────────────────────────────────────────────────────────────────────┤ \\ // │ Copyright (c) 2008-2011 Dmitry Baranovskiy (http://raphaeljs.com) │ \\ // │ Copyright (c) 2008-2011 Sencha Labs (http://sencha.com) │ \\ @@ -224,17 +233,7 @@ if (R.is(first, "function")) { return loaded ? first() : eve.on("DOMload", first); } else if (R.is(first, array)) { - var a = first, - cnv = R._engine.create[apply](R, a.splice(0, 3 + R.is(a[0], nu))), - res = cnv.set(), - i = 0, - ii = a.length, - j; - for (; i < ii; i++) { - j = a[i] || {}; - elements[has](j.type) && res.push(cnv[j.type]().attr(j)); - } - return res; + return R._engine.create[apply](R, first.splice(0, 3 + R.is(first[0], nu))).add(first); } else { var args = Array.prototype.slice.call(arguments, 0); if (R.is(args[args.length - 1], "function")) { @@ -247,7 +246,7 @@ } } } - R.version = "2.0.0"; + R.version = "2.0.1"; R.eve = eve; var loaded, separator = /[, ]+/, @@ -265,7 +264,8 @@ }, Paper = function () { - this.customAttributes = {}; + + this.ca = this.customAttributes = {}; }, paperproto, appendChild = "appendChild", @@ -276,7 +276,7 @@ S = " ", Str = String, split = "split", - events = "click dblclick mousedown mousemove mouseout mouseover mouseup touchstart touchmove touchend touchcancel".split(S), + events = "click dblclick mousedown mousemove mouseout mouseover mouseup touchstart touchmove touchend touchcancel"[split](S), touchMap = { mousedown: "touchstart", mousemove: "touchmove", @@ -324,6 +324,7 @@ gradient: 0, height: 0, href: "http://raphaeljs.com/", + "letter-spacing": 0, opacity: 1, path: "M0,0", r: 0, @@ -426,7 +427,7 @@ if (!matrix) { return path; } - var x, y, i, j, pathi; + var x, y, i, j, ii, jj, pathi; path = path2curve(path); for (i = 0, ii = path.length; i < ii; i++) { pathi = path[i]; @@ -472,7 +473,7 @@ return o instanceof Array; } return (type == "null" && o === null) || - (type == typeof o) || + (type == typeof o && o !== null) || (type == "object" && o === Object(o)) || (type == "array" && Array.isArray && Array.isArray(o)) || objectToString.call(o).slice(8, -1).toLowerCase() == type; @@ -535,8 +536,8 @@ eve("setWindow", R, g.win, newwin); g.win = newwin; g.doc = g.win.document; - if (initWin) { - initWin(g.win); + if (R._engine.initWin) { + R._engine.initWin(g.win); } }; var toHex = function (color) { @@ -647,7 +648,7 @@ clr.v = rgb.b; } else { clr = {hex: "none"}; - crl.r = clr.g = clr.b = clr.h = clr.s = clr.v = clr.l = -1; + clr.r = clr.g = clr.b = clr.h = clr.s = clr.v = clr.l = -1; } } clr.toString = rgbtoString; @@ -768,7 +769,7 @@ var preload = R._preload = function (src, f) { var img = g.doc.createElement("img"); - img.style.cssText = "position:absolute;left:-9999em;top-9999em"; + img.style.cssText = "position:absolute;left:-9999em;top:-9999em"; img.onload = function () { f.call(this); this.onload = null; @@ -814,7 +815,7 @@ red = toInt((t = rgb[3].charAt(1)) + t, 16); } if (rgb[4]) { - values = rgb[4].split(commaSpaces); + values = rgb[4][split](commaSpaces); red = toFloat(values[0]); values[0].slice(-1) == "%" && (red *= 2.55); green = toFloat(values[1]); @@ -825,7 +826,7 @@ values[3] && values[3].slice(-1) == "%" && (opacity /= 100); } if (rgb[5]) { - values = rgb[5].split(commaSpaces); + values = rgb[5][split](commaSpaces); red = toFloat(values[0]); values[0].slice(-1) == "%" && (red *= 2.55); green = toFloat(values[1]); @@ -838,7 +839,7 @@ return R.hsb2rgb(red, green, blue, opacity); } if (rgb[6]) { - values = rgb[6].split(commaSpaces); + values = rgb[6][split](commaSpaces); red = toFloat(values[0]); values[0].slice(-1) == "%" && (red *= 2.55); green = toFloat(values[1]); @@ -999,6 +1000,11 @@ alpha: alpha }; }; + R._removedFactory = function (methodname) { + return function () { + throw new Error("Rapha\xebl: you are calling to method \u201c" + methodname + "\u201d of removed object"); + }; + }; var pathDimensions = cacher(function (path) { if (!path) { return {x: 0, y: 0, width: 0, height: 0}; @@ -1315,7 +1321,7 @@ if (recursive) { return [m2, m3, m4][concat](res); } else { - res = [m2, m3, m4][concat](res).join().split(","); + res = [m2, m3, m4][concat](res).join()[split](","); var newres = []; for (var i = 0, ii = res.length; i < ii; i++) { newres[i] = i % 2 ? rotate(res[i - 1], res[i], rad).y : rotate(res[i], res[i + 1], rad).x; @@ -1544,11 +1550,6 @@ el2.prev = el; el.next = el2; }, - removed = function (methodname) { - return function () { - throw new Error("Rapha\xebl: you are calling to method \u201c" + methodname + "\u201d of removed object"); - }; - }, extractTransform = R._extractTransform = function (el, tstr) { if (tstr == null) { return el._.transform; @@ -1567,24 +1568,25 @@ for (var i = 0, ii = tdata.length; i < ii; i++) { var t = tdata[i], tlen = t.length, - absolute = t[0] != (t[0] = Str(t[0]).toLowerCase()), + command = Str(t[0]).toLowerCase(), + absolute = t[0] != command, inver = absolute ? m.invert() : 0, x1, y1, x2, y2, bb; - if (t[0] == "t" && tlen == 3) { + if (command == "t" && tlen == 3) { if (absolute) { - x1 = inver.x(0, 0), - y1 = inver.y(0, 0), + x1 = inver.x(0, 0); + y1 = inver.y(0, 0); x2 = inver.x(t[1], t[2]); y2 = inver.y(t[1], t[2]); m.translate(x2 - x1, y2 - y1); } else { m.translate(t[1], t[2]); } - } else if (t[0] == "r") { + } else if (command == "r") { if (tlen == 2) { bb = bb || el.getBBox(1); m.rotate(t[1], bb.x + bb.width / 2, bb.y + bb.height / 2); @@ -1599,7 +1601,7 @@ } deg += t[1]; } - } else if (t[0] == "s") { + } else if (command == "s") { if (tlen == 2 || tlen == 3) { bb = bb || el.getBBox(1); m.scale(t[1], t[tlen - 1], bb.x + bb.width / 2, bb.y + bb.height / 2); @@ -1616,7 +1618,7 @@ sx *= t[1]; sy *= t[2]; } - } else if (t[0] == "m" && tlen == 7) { + } else if (command == "m" && tlen == 7) { m.add(t[1], t[2], t[3], t[4], t[5], t[6]); } _.dirtyT = 1; @@ -1872,9 +1874,14 @@ }; matrixproto.toTransformString = function (shorter) { - var s = shorter || this.split(); + var s = shorter || this[split](); if (s.isSimple) { - return "t" + [s.dx, s.dy] + "s" + [s.scalex, s.scaley, 0, 0] + "r" + [s.rotate, 0, 0]; + s.scalex = +s.scalex.toFixed(4); + s.scaley = +s.scaley.toFixed(4); + s.rotate = +s.rotate.toFixed(4); + return (s.dx && s.dy ? "t" + [s.dx, s.dy] : E) + + (s.scalex != 1 || s.scaley != 1 ? "s" + [s.scalex, s.scaley, 0, 0] : E) + + (s.rotate ? "r" + [s.rotate, 0, 0] : E); } else { return "m" + [this.get(0), this.get(1), this.get(2), this.get(3), this.get(4), this.get(5)]; } @@ -2099,6 +2106,7 @@ elproto.unhover = function (f_in, f_out) { return this.unmouseover(f_in).unmouseout(f_out); }; + var draggable = []; elproto.drag = function (onmove, onstart, onend, move_scope, start_scope, end_scope) { function start(e) { @@ -2116,6 +2124,7 @@ eve("drag.start." + this.id, start_scope || move_scope || this, e.clientX + scrollX, e.clientY + scrollY, e); } this._drag = {}; + draggable.push({el: this, start: start}); this.mousedown(start); return this; }; @@ -2125,13 +2134,13 @@ }; elproto.undrag = function () { - var i = drag.length; - while (i--) if (drag[i].el == this) { - R.unmousedown(drag[i].start); - drag.splice(i++, 1); + var i = draggable.length; + while (i--) if (draggable[i].el == this) { + this.unmousedown(draggable[i].start); + draggable.splice(i, 1); eve.unbind("drag.*." + this.id); } - !drag.length && R.unmousemove(dragMove).unmouseup(dragUp); + !draggable.length && R.unmousemove(dragMove).unmouseup(dragUp); }; paperproto.circle = function (x, y, r) { @@ -2531,7 +2540,9 @@ t = e.t, that = e.el, set = {}, - now; + now, + init = {}, + key; if (e.initstatus) { time = (e.initstatus * e.anim.top - e.prev) / (e.percent - e.prev) * ms; e.status = e.initstatus; @@ -2595,7 +2606,7 @@ } break; default: - var from2 = [].concat(from[attr]); + var from2 = [][concat](from[attr]); now = []; i = that.paper.customAttributes[attr].length; while (i--) { @@ -2622,6 +2633,10 @@ that.attr(to); animationElements.splice(l--, 1); if (e.repeat > 1 && !e.next) { + for (key in to) if (to[has](key)) { + init[key] = e.totalOrigin[key]; + } + e.el.attr(init); runAnimation(e.anim, e.el, e.anim.percents[0], null, e.totalOrigin, e.repeat - 1); } if (e.next && !e.stop) { @@ -2637,7 +2652,7 @@ }; elproto.animateWith = function (element, anim, params, ms, easing, callback) { - var a = params ? R.animation(params, ms, easing, callback) : anim; + var a = params ? R.animation(params, ms, easing, callback) : anim, status = element.status(anim); return this.animate(a).status(a, status * anim.ms / a.ms); }; @@ -2773,7 +2788,7 @@ return; } if (!isInAnim) { - for (attr in params) if (params[has](attr)) { + for (var attr in params) if (params[has](attr)) { if (availableAnimAttrs[has](attr) || element.paper.customAttributes[has](attr)) { from[attr] = element.attr(attr); (from[attr] == null) && (from[attr] = availableAttrs[attr]); @@ -2856,8 +2871,8 @@ } break; case "csv": - var values = Str(params[attr]).split(separator), - from2 = Str(from[attr]).split(separator); + var values = Str(params[attr])[split](separator), + from2 = Str(from[attr])[split](separator); if (attr == "clip-rect") { from[attr] = from2; diff[attr] = []; @@ -2869,8 +2884,8 @@ to[attr] = values; break; default: - values = [].concat(params[attr]); - from2 = [].concat(from[attr]); + values = [][concat](params[attr]); + from2 = [][concat](from[attr]); diff[attr] = []; i = element.paper.customAttributes[attr].length; while (i--) { @@ -3278,14 +3293,14 @@ origin = origin || "middle"; // baseline|middle letter_spacing = mmax(mmin(letter_spacing || 0, 1), -1); var out = this.set(), - letters = Str(string).split(E), + letters = Str(string)[split](E), shift = 0, path = E, scale; R.is(font, string) && (font = this.getFont(font)); if (font) { scale = (size || 16) / font.face["units-per-em"]; - var bb = font.face.bbox.split(separator), + var bb = font.face.bbox[split](separator), top = +bb[0], height = +bb[1] + (origin == "baseline" ? bb[3] - bb[1] + (+font.face.descent) : (bb[3] - bb[1]) / 2); for (var i = 0, ii = letters.length; i < ii; i++) { @@ -3304,6 +3319,21 @@ }; + paperproto.add = function (json) { + if (R.is(json, "array")) { + var res = this.set(), + i = 0, + ii = json.length, + j; + for (; i < ii; i++) { + j = json[i] || {}; + elements[has](j.type) && res.push(this[j.type]().attr(j)); + } + } + return res; + }; + + R.format = function (token, params) { var args = R.is(params, array) ? [0][concat](params) : arguments; token && R.is(token, string) && args.length - 1 && (token = token.replace(formatrg, function (str, i) { @@ -3364,8 +3394,9 @@ }); })(); + // ┌─────────────────────────────────────────────────────────────────────┐ \\ -// │ Raphaël 2 - JavaScript Vector Library │ \\ +// │ Raphaël - JavaScript Vector Library │ \\ // ├─────────────────────────────────────────────────────────────────────┤ \\ // │ SVG Module │ \\ // ├─────────────────────────────────────────────────────────────────────┤ \\ @@ -3416,16 +3447,6 @@ window.Raphael.svg && function (R) { } return el; }, - gradients = {}, - rgGrad = /^url\(#(.*)\)$/, - removeGradientFill = function (node, paper) { - var oid = node.getAttribute("fill"); - oid = oid && oid.match(rgGrad); - if (oid && !--gradients[oid[1]]) { - delete gradients[oid[1]]; - paper.defs.removeChild(R._g.doc.getElementById(oid[1])); - } - }, addGradientFill = function (element, gradient) { var type = "linear", id = element.id + gradient, @@ -3472,30 +3493,33 @@ window.Raphael.svg && function (R) { if (!dots) { return null; } - if (element.gradient) { + id = id.replace(/[\(\)\s,\xb0#]/g, "_"); + + if (element.gradient && id != element.gradient.id) { SVG.defs.removeChild(element.gradient); delete element.gradient; } - id = id.replace(/[\(\)\s,\xb0#]/g, "-"); - el = $(type + "Gradient", {id: id}); - element.gradient = el; - $(el, type == "radial" ? { - fx: fx, - fy: fy - } : { - x1: vector[0], - y1: vector[1], - x2: vector[2], - y2: vector[3], - gradientTransform: element.matrix.invert() - }); - SVG.defs.appendChild(el); - for (var i = 0, ii = dots.length; i < ii; i++) { - el.appendChild($("stop", { - offset: dots[i].offset ? dots[i].offset : i ? "100%" : "0%", - "stop-color": dots[i].color || "#fff" - })); + if (!element.gradient) { + el = $(type + "Gradient", {id: id}); + element.gradient = el; + $(el, type == "radial" ? { + fx: fx, + fy: fy + } : { + x1: vector[0], + y1: vector[1], + x2: vector[2], + y2: vector[3], + gradientTransform: element.matrix.invert() + }); + SVG.defs.appendChild(el); + for (var i = 0, ii = dots.length; i < ii; i++) { + el.appendChild($("stop", { + offset: dots[i].offset ? dots[i].offset : i ? "100%" : "0%", + "stop-color": dots[i].color || "#fff" + })); + } } } $(o, { @@ -3741,10 +3765,13 @@ window.Raphael.svg && function (R) { o.clip = rc; } if (!value) { - var clip = R._g.doc.getElementById(node.getAttribute("clip-path").replace(/(^url\(#|\)$)/g, E)); - clip && clip.parentNode.removeChild(clip); - $(node, {"clip-path": E}); - delete o.clip; + var path = node.getAttribute("clip-path"); + if (path) { + var clip = R._g.doc.getElementById(path.replace(/(^url\(#|\)$)/g, E)); + clip && clip.parentNode.removeChild(clip); + $(node, {"clip-path": E}); + delete o.clip; + } } break; case "path": @@ -4101,12 +4128,16 @@ window.Raphael.svg && function (R) { if (this.removed) { return; } - this.paper.__set__ && this.paper.__set__.exclude(this); + var paper = this.paper; + paper.__set__ && paper.__set__.exclude(this); eve.unbind("*.*." + this.id); - R._tear(this, this.paper); + if (this.gradient) { + paper.defs.removeChild(this.gradient); + } + R._tear(this, paper); this.node.parentNode.removeChild(this.node); for (var i in this) { - delete this[i]; + this[i] = typeof this[i] == "function" ? R._removedFactory(i) : null; } this.removed = true; }; @@ -4174,7 +4205,10 @@ window.Raphael.svg && function (R) { } else if (name != null && R.is(name, "object")) { params = name; } - for (var key in this.paper.customAttributes) if (this.paper.customAttributes[has](key) && params[has](key) && R.is(this.paper.customAttributes[key], "function")) { + for (var key in params) { + eve("attr." + key + "." + this.id, this, params[key]); + } + for (key in this.paper.customAttributes) if (this.paper.customAttributes[has](key) && params[has](key) && R.is(this.paper.customAttributes[key], "function")) { var par = this.paper.customAttributes[key].apply(this, [].concat(params[key])); this.attrs[key] = params[key]; for (var subkey in par) if (par[has](subkey)) { @@ -4189,7 +4223,11 @@ window.Raphael.svg && function (R) { if (this.removed) { return this; } - this.node.parentNode.appendChild(this.node); + if (this.node.parentNode.tagName.toLowerCase() == "a") { + this.node.parentNode.parentNode.appendChild(this.node.parentNode); + } else { + this.node.parentNode.appendChild(this.node); + } var svg = this.paper; svg.top != this && R._tofront(this, svg); return this; @@ -4199,11 +4237,14 @@ window.Raphael.svg && function (R) { if (this.removed) { return this; } - if (this.node.parentNode.firstChild != this.node) { - this.node.parentNode.insertBefore(this.node, this.node.parentNode.firstChild); - R._toback(this, this.paper); - var svg = this.paper; + var parent = this.node.parentNode; + if (parent.tagName.toLowerCase() == "a") { + parent.parentNode.insertBefore(this.node.parentNode, this.node.parentNode.parentNode.firstChild); + } else if (parent.firstChild != this.node) { + parent.insertBefore(this.node, this.node.parentNode.firstChild); } + R._toback(this, this.paper); + var svg = this.paper; return this; }; @@ -4429,7 +4470,7 @@ window.Raphael.svg && function (R) { eve("remove", this); this.canvas.parentNode && this.canvas.parentNode.removeChild(this.canvas); for (var i in this) { - this[i] = removed(i); + this[i] = typeof this[i] == "function" ? R._removedFactory(i) : null; } }; var setproto = R.st; @@ -4446,7 +4487,7 @@ window.Raphael.svg && function (R) { }(window.Raphael); // ┌─────────────────────────────────────────────────────────────────────┐ \\ -// │ Raphaël 2 - JavaScript Vector Library │ \\ +// │ Raphaël - JavaScript Vector Library │ \\ // ├─────────────────────────────────────────────────────────────────────┤ \\ // │ VML Module │ \\ // ├─────────────────────────────────────────────────────────────────────┤ \\ @@ -4563,7 +4604,7 @@ window.Raphael.vml && function (R) { R.toString = function () { return "Your browser doesn\u2019t support SVG. Falling down to VML.\nYou are running Rapha\xebl " + this.version; }; - addArrow = function (o, value, isEnd) { + var addArrow = function (o, value, isEnd) { var values = Str(value).toLowerCase().split("-"), se = isEnd ? "end" : "start", i = values.length, @@ -4590,7 +4631,7 @@ window.Raphael.vml && function (R) { stroke[se + "arrow"] = type; stroke[se + "arrowlength"] = w; stroke[se + "arrowwidth"] = h; - }; + }, setFillAndStroke = function (o, params) { // o.paper.canvas.style.display = "none"; o.attrs = o.attrs || {}; @@ -4651,7 +4692,7 @@ window.Raphael.vml && function (R) { } } if (!params["clip-rect"]) { - node.clipRect && (node.clipRect.style.clip = E); + node.clipRect && (node.clipRect.style.clip = "auto"); } } if (o.textpath) { @@ -4778,7 +4819,7 @@ window.Raphael.vml && function (R) { a["font-family"] && (s.fontFamily = a["font-family"]); a["font-weight"] && (s.fontWeight = a["font-weight"]); a["font-style"] && (s.fontStyle = a["font-style"]); - fontSize = toFloat(fontSize ? fontSize[0] : a["font-size"]); + fontSize = toFloat(a["font-size"] || fontSize && fontSize[0]) || 10; s.fontSize = fontSize * m + "px"; res.textpath.string && (span.innerHTML = Str(res.textpath.string).replace(/")); var brect = span.getBoundingClientRect(); @@ -4813,10 +4854,11 @@ window.Raphael.vml && function (R) { res.textpath.style["v-text-kern"] = true; } // res.paper.canvas.style.display = E; - }; + }, addGradientFill = function (o, gradient, fill) { o.attrs = o.attrs || {}; var attrs = o.attrs, + pow = Math.pow, opacity, oindex, type = "linear", @@ -4870,7 +4912,7 @@ window.Raphael.vml && function (R) { o.appendChild(fill); } return 1; - }; + }, Element = function (node, vml) { this[0] = this.node = node; node.raphael = true; @@ -5020,16 +5062,12 @@ window.Raphael.vml && function (R) { if (this.removed) { return {}; } - if (this.type == "text") { - return { - x: this.X + (this.bbx || 0) - this.W / 2, - y: this.Y - this.H, - width: this.W, - height: this.H - }; - } else { - return pathDimensions(this.attrs.path); - } + return { + x: this.X + (this.bbx || 0) - this.W / 2, + y: this.Y - this.H, + width: this.W, + height: this.H + }; }; elproto.remove = function () { if (this.removed) { @@ -5041,7 +5079,7 @@ window.Raphael.vml && function (R) { this.node.parentNode.removeChild(this.node); this.shape && this.shape.parentNode.removeChild(this.shape); for (var i in this) { - delete this[i]; + this[i] = typeof this[i] == "function" ? R._removedFactory(i) : null; } this.removed = true; }; @@ -5090,11 +5128,11 @@ window.Raphael.vml && function (R) { } value == null && R.is(name, "object") && (params = name); for (var key in params) { - R.eve("attr." + key + "." + this.id, this, params[key]); + eve("attr." + key + "." + this.id, this, params[key]); } if (params) { for (key in this.paper.customAttributes) if (this.paper.customAttributes[has](key) && params[has](key) && R.is(this.paper.customAttributes[key], "function")) { - var par = this.paper.customAttributes[key].apply(this, [][concat](params[key])); + var par = this.paper.customAttributes[key].apply(this, [].concat(params[key])); this.attrs[key] = params[key]; for (var subkey in par) if (par[has](subkey)) { params[subkey] = par[subkey]; @@ -5302,7 +5340,7 @@ window.Raphael.vml && function (R) { cs.height = height; cs.clip = "rect(0 " + width + " " + height + " 0)"; if (this._viewBox) { - setViewBox.apply(this, this._viewBox); + R._engine.setViewBox.apply(this, this._viewBox); } return this; }; @@ -5333,8 +5371,8 @@ window.Raphael.vml && function (R) { }); return this; }; - var createNode, - initWin = function (win) { + var createNode; + R._engine.initWin = function (win) { var doc = win.document; doc.createStyleSheet().addRule(".rvml", "behavior:url(#default#VML)"); try { @@ -5348,7 +5386,7 @@ window.Raphael.vml && function (R) { }; } }; - initWin(R._g.win); + R._engine.initWin(R._g.win); R._engine.create = function () { var con = R._getContainer.apply(0, arguments), container = con.container, @@ -5405,7 +5443,7 @@ window.Raphael.vml && function (R) { R.eve("remove", this); this.canvas.parentNode.removeChild(this.canvas); for (var i in this) { - this[i] = removed(i); + this[i] = typeof this[i] == "function" ? R._removedFactory(i) : null; } return true; };