      1 /**
      2  * Generate a random uuid.
      3  * Written by https://www.broofa.com (robert@broofa.com)
      4  *
      5  * Copyright (c) 2010 Robert Kieffer
      6  * Dual licensed under the MIT and GPL licenses.
      7  * @returns {String}
      8  * @example
      9  *   var uuid = JXG.Util.genUUID();
     10  *   > uuid = '92329D39-6F5C-4520-ABFC-AAB64544E172'
     11  */
     12
     13 /*global JXG: true, define: true*/
     14 /*jslint nomen: true, plusplus: true, bitwise: true*/
     15
     16 import JXG from "../jxg";
     17
     18 // constants
     19 var uuidCharsStr = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",
     20     uuidChars = uuidCharsStr.split("");
     21
     22 /**
     23  * General utility routines
     24  * @namespace
     25  */
     26 JXG.Util = JXG.Util || {};
     27
     28 JXG.Util.genUUID = function (prefix) {
     29     var r,
     30         i,
     31         uuid = [],
     32         rnd = 0;
     33
     34     prefix = prefix || "";
     35
     36     if (prefix !== "" && prefix.slice(prefix.length - 1) !== "-") {
     37         prefix = prefix + "-";
     38     }
     39
     40     for (i = 0; i < 36; i++) {
     41         if (i === 8 || i === 13 || i === 18 || i === 23) {
     42             uuid[i] = "-";
     43         } else if (i === 14) {
     44             uuid[i] = "4";
     45         } else {
     46             if (rnd <= 0x02) {
     47                 rnd = (0x2000000 + Math.random() * 0x1000000) | 0;
     48             }
     49
     50             r = rnd & 0xf;
     51             rnd = rnd >> 4;
     52             uuid[i] = uuidChars[i === 19 ? (r & 0x3) | 0x8 : r];
     53         }
     54     }
     55
     56     return prefix + uuid.join("");
     57 };
     58
     59 export default JXG.Util;
     60