added ID generation according to RFC 4122
authorDmitry Baranovskiy <Dmitry@Baranovskiy.com>
Thu, 19 Aug 2010 01:41:20 +0000 (11:41 +1000)
committerDmitry Baranovskiy <Dmitry@Baranovskiy.com>
Thu, 19 Aug 2010 01:41:20 +0000 (11:41 +1000)
raphael.js

index 98e5730..4a21c84 100644 (file)
         }
         return value;
     };
+    function createUUID() {
+        // http://www.ietf.org/rfc/rfc4122.txt
+        var s = [],
+            i = 0;
+        for (; i < 32; i++) {
+            s[i] = (~~(math.random() * 16))[toString](16);
+        }
+        s[12] = 4;  // bits 12-15 of the time_hi_and_version field to 0010
+        s[16] = ((s[16] & 3) | 8)[toString](16);  // bits 6-7 of the clock_seq_hi_and_reserved to 01
+        return "r-" + s[join]("");
+    }
 
     R.setWindow = function (newwin) {
         win = newwin;
             id && SVG.defs.removeChild(doc.getElementById(id[1]));
 
             var el = $(type + "Gradient");
-            el.id = "r" + (R._id++)[toString](36);
+            el.id = createUUID();
             $(el, type == "radial" ? {fx: fx, fy: fy} : {x1: vector[0], y1: vector[1], x2: vector[2], y2: vector[3]});
             SVG.defs[appendChild](el);
             for (var i = 0, ii = dots[length]; i < ii; i++) {
                                 o.clip && o.clip.parentNode.parentNode.removeChild(o.clip.parentNode);
                                 var el = $("clipPath"),
                                     rc = $("rect");
-                                el.id = "r" + (R._id++)[toString](36);
+                                el.id = createUUID();
                                 $(rc, {
                                     x: rect[0],
                                     y: rect[1],
                             if (isURL) {
                                 el = $("pattern");
                                 var ig = $("image");
-                                el.id = "r" + (R._id++)[toString](36);
+                                el.id = createUUID();
                                 $(el, {x: 0, y: 0, patternUnits: "userSpaceOnUse", height: 1, width: 1});
                                 $(ig, {x: 0, y: 0});
                                 ig.setAttributeNS(o.paper.xlink, "href", isURL[1]);
                 var fltr = $("filter"),
                     blur = $("feGaussianBlur");
                 t.attrs.blur = size;
-                fltr.id = "r" + (R._id++)[toString](36);
+                fltr.id = createUUID();
                 $(blur, {stdDeviation: +size || 1.5});
                 fltr.appendChild(blur);
                 t.paper.defs.appendChild(fltr);