1 String.prototype.hashCode = function () { 2 var hash = 0; 3 if (this.length === 0) return hash; 4 for (var i = 0; i < this.length; i++) { 5 var char = this.charCodeAt(i); 6 hash = ((hash << 5) - hash) + char; 7 hash = hash & hash; 8 } 9 return hash; 10 }; 11 12 const rootPackageColor = "darkred"; 13 const invalidPackageColor = "snow"; 14 const packageJavaValueLMax = 80; 15 const packageJavaValueL = 65; 16 const packageJavaHslHSValues = [184, 10]; 17 const packageSunValueLMax = 54; 18 const packageSunValueL = 31; 19 const packageSunHSValues = [211, 21]; 20 const packageComSunValueLMax = 55; 21 const packageComSunValueL = 45; 22 const packageComSunHSValues = [204, 5]; 23 const packageRestValueHMax = 360; 24 const packageRestValueH = 0; 25 const packageRestSLValues = [42, 53]; 26 const packageConsideredDepth = 3; 27 const packageMarkerJava = "java"; 28 const packageMarkerSun = "sun"; 29 const packageMarkerComSun = "comSun"; 30 const packageMarkerRest = "rest"; 31 const packagesIdentifierMap = new Map().set("java.", packageMarkerJava).set("sun.", packageMarkerSun) 32 .set("com.sun.", packageMarkerComSun); 33 const packageColorMap = new Map().set("", rootPackageColor); 34 35 const colorByPackage = function (p) { 36 if (p === undefined) { 37 return invalidPackageColor; 38 } else { 39 const packageNameStrip = stripPackageName(p); 40 const packageSelectedColor = packageColorMap.get(packageNameStrip); 41 if (packageSelectedColor === undefined) { 42 const packageMarkerSelected = getPackageMarker(packageNameStrip); 43 const packageNameStripHash = packageNameStrip.hashCode(); 44 switch (packageMarkerSelected) { 45 case packageMarkerJava: 46 const packageJavaSelectedColor = createHslColorString(packageJavaHslHSValues[0], packageJavaHslHSValues[1], adjustHslPropertyByHash(packageNameStripHash, packageJavaValueL, packageJavaValueLMax)); 47 packageColorMap.set(packageNameStrip, packageJavaSelectedColor); 48 break; 49 case packageMarkerComSun: 50 const packageComSunSelectedColor = createHslColorString(packageComSunHSValues[0], packageComSunHSValues[1], adjustHslPropertyByHash(packageNameStripHash, packageComSunValueL, packageComSunValueLMax)); 51 packageColorMap.set(packageNameStrip, packageComSunSelectedColor); 52 break; 53 case packageMarkerSun: 54 const packageSunSelectedColor = createHslColorString(packageSunHSValues[0], packageSunHSValues[1], adjustHslPropertyByHash(packageNameStripHash, packageSunValueL, packageSunValueLMax)); 55 packageColorMap.set(packageNameStrip, packageSunSelectedColor); 56 break; 57 case packageMarkerRest: 58 const packageRestSelectedColor = createHslColorString(adjustHslPropertyByHash(packageNameStripHash, packageRestValueH, packageRestValueHMax), packageRestSLValues[0], packageRestSLValues[1]); 59 packageColorMap.set(packageNameStrip, packageRestSelectedColor); 60 break; 61 } 62 return packageColorMap.get(packageNameStrip); 63 } else { 64 return packageSelectedColor; 65 } 66 } 67 }; 68 69 const getPackageMarker = function(p){ 70 for(let k of packagesIdentifierMap.keys()){ 71 if(p.startsWith(k)){ 72 return packagesIdentifierMap.get(k); 73 } 74 } 75 return packageMarkerRest; 76 }; 77 78 const stripPackageName = function (p) { 79 const splitString = p.split("\u002E"); 80 const number = Math.min(splitString.length, packageConsideredDepth); 81 return splitString.slice(0, number).join("\u002E"); 82 }; 83 84 const adjustHslPropertyByHash = function (hash, min, max) { 85 const proposedValue = hash % (max - min) + min; 86 return Math.min(proposedValue, max); 87 }; 88 89 const createHslColorString = function(h,s,l){ 90 return "hsl\u0028" + h + "\u002c " + s + "\u0025\u002c " + l + "\u0025\u0029"; 91 }; 92 93 const colorCell = function (d) { 94 return colorByPackage(d.data.p); 95 }; 96 97 const adjustTip = function (d) { 98 return d.data.n + "\u003Cbr\u002F\u003Epackage: " + d.data.p + "\u003Cbr\u002F\u003Esamples: " + d.data.v; 99 };