1 /** 2 * @namespace 3 */ 4 mindmaps.Util = mindmaps.Util || {}; 5 6 /** 7 * Creates a UUID in compliance with RFC4122. 8 * 9 * @static 10 * @returns {String} a unique id 11 */ 12 mindmaps.Util.createUUID = function() { 13 // http://www.ietf.org/rfc/rfc4122.txt 14 return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { 15 var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8); 16 return v.toString(16); 17 }); 18 }; 19 20 /** 21 * Returns an ID used by model objects. 22 * 23 * @returns {String} id 24 */ 25 mindmaps.Util.getId = function() { 26 return mindmaps.Util.createUUID(); 27 }; 28 29 /** 30 * Creates a random color. 31 * 32 * @returns {String} color in hex format 33 */ 34 mindmaps.Util.randomColor = function() { 35 // http://stackoverflow.com/questions/1484506/random-color-generator-in-javascript/5365036#5365036 36 // return "#"+((1<<24)*Math.random()|0).toString(16); 37 38 // http://paulirish.com/2009/random-hex-color-code-snippets/#comment-34808 39 // return '#'+~~(Math.random()*(1<<24)).toString(16); 40 41 // http://paulirish.com/2009/random-hex-color-code-snippets/#comment-34878 42 return (function(h) { 43 return '#000000'.substr(0, 7 - h.length) + h; 44 })((~~(Math.random() * (1 << 24))).toString(16)); 45 }; 46 47 function timeit(func, caption) { 48 var start = new Date().getTime(); 49 func(); 50 var stop = new Date().getTime(); 51 var diff = stop - start; 52 console.log(caption || "", diff, "ms"); 53 } 54 55 mindmaps.Util.distance = function(offsetX, offsetY) { 56 return Math.sqrt(offsetX * offsetX + offsetY * offsetY); 57 }; 58 59 60 /** 61 * test Default documents 62 */ 63 64 function getBinaryMapWithDepth(depth) { 65 var mm = new mindmaps.MindMap(); 66 var root = mm.root; 67 68 function createTwoChildren(node, depth) { 69 if (depth === 0) { 70 return; 71 } 72 73 var left = mm.createNode(); 74 left.text.caption = "Node " + left.id; 75 node.addChild(left); 76 createTwoChildren(left, depth - 1); 77 78 var right = mm.createNode(); 79 right.text.caption = "Node " + right.id; 80 node.addChild(right); 81 createTwoChildren(right, depth - 1); 82 } 83 84 // depth 10: about 400kb, 800kb in chrome 85 // depth 12: about 1600kb 86 // depth 16: 25mb 87 var depth = depth || 10; 88 createTwoChildren(root, depth); 89 90 // generate positions for all nodes. 91 // tree grows balanced from left to right 92 root.offset = new mindmaps.Point(400, 400); 93 // var offset = Math.pow(2, depth-1) * 10; 94 var offset = 80; 95 var c = root.children.values(); 96 setOffset(c[0], 0, -offset); 97 setOffset(c[1], 0, offset); 98 function setOffset(node, depth, offsetY) { 99 node.offset = new mindmaps.Point((depth + 1) * 50, offsetY); 100 101 if (node.isLeaf()) { 102 return; 103 } 104 105 var c = node.children.values(); 106 var left = c[0]; 107 setOffset(left, depth + 1, offsetY - offsetY / 2); 108 109 var right = c[1]; 110 setOffset(right, depth + 1, offsetY + offsetY / 2); 111 } 112 113 // color nodes 114 c[0].branchColor = mindmaps.Util.randomColor(); 115 c[0].forEachDescendant(function(node) { 116 node.branchColor = mindmaps.Util.randomColor(); 117 }); 118 c[1].branchColor = mindmaps.Util.randomColor(); 119 c[1].forEachDescendant(function(node) { 120 node.branchColor = mindmaps.Util.randomColor(); 121 }); 122 123 return mm; 124 } 125 126 /** 127 * <pre> 128 * r 129 * / | \ 130 * 0 1 2 131 * / \ / | \ \ 132 * 10 11 20 21 22 23 133 * | 134 * 100 135 * | 136 * 1000 137 * </pre> 138 */ 139 function getDefaultTestMap() { 140 var mm = new mindmaps.MindMap(); 141 var root = mm.root; 142 143 var n0 = mm.createNode(); 144 var n1 = mm.createNode(); 145 var n2 = mm.createNode(); 146 root.addChild(n0); 147 root.addChild(n1); 148 root.addChild(n2); 149 150 var n10 = mm.createNode(); 151 var n11 = mm.createNode(); 152 n1.addChild(n10); 153 n1.addChild(n11); 154 155 var n20 = mm.createNode(); 156 var n21 = mm.createNode(); 157 var n22 = mm.createNode(); 158 var n23 = mm.createNode(); 159 n2.addChild(n20); 160 n2.addChild(n21); 161 n2.addChild(n22); 162 n2.addChild(n23); 163 164 var n100 = mm.createNode(); 165 n10.addChild(n100); 166 167 var n1000 = mm.createNode(); 168 n100.addChild(n1000); 169 170 return mm; 171 } 172 173 function getDefaultTestDocument() { 174 var doc = new mindmaps.Document(); 175 doc.title = "test document"; 176 doc.mindmap = getDefaultTestMap(); 177 178 return doc; 179 } 180 181 function getSimpleMap() { 182 var mm = new mindmaps.MindMap(); 183 var root = mm.root; 184 185 var n0 = mm.createNode(); 186 var n1 = mm.createNode(); 187 root.addChild(n0); 188 root.addChild(n1); 189 190 return mm; 191 }