Merge pull request #172 from brenopolanski/master

Add the tinycolor2 JavaScript color tooling
diff --git a/webapps/proteus-new/src/main/webapp/resources/package-lock.json b/webapps/proteus-new/src/main/webapp/resources/package-lock.json
index 92b1e28..22ede8e 100644
--- a/webapps/proteus-new/src/main/webapp/resources/package-lock.json
+++ b/webapps/proteus-new/src/main/webapp/resources/package-lock.json
@@ -5472,12 +5472,14 @@
         "balanced-match": {
           "version": "1.0.0",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         "brace-expansion": {
           "version": "1.1.11",
           "bundled": true,
           "dev": true,
+          "optional": true,
           "requires": {
             "balanced-match": "^1.0.0",
             "concat-map": "0.0.1"
@@ -5492,17 +5494,20 @@
         "code-point-at": {
           "version": "1.1.0",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         "concat-map": {
           "version": "0.0.1",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         "console-control-strings": {
           "version": "1.1.0",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         "core-util-is": {
           "version": "1.0.2",
@@ -5619,7 +5624,8 @@
         "inherits": {
           "version": "2.0.3",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         "ini": {
           "version": "1.3.5",
@@ -5631,6 +5637,7 @@
           "version": "1.0.0",
           "bundled": true,
           "dev": true,
+          "optional": true,
           "requires": {
             "number-is-nan": "^1.0.0"
           }
@@ -5645,6 +5652,7 @@
           "version": "3.0.4",
           "bundled": true,
           "dev": true,
+          "optional": true,
           "requires": {
             "brace-expansion": "^1.1.7"
           }
@@ -5652,12 +5660,14 @@
         "minimist": {
           "version": "0.0.8",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         "minipass": {
           "version": "2.2.4",
           "bundled": true,
           "dev": true,
+          "optional": true,
           "requires": {
             "safe-buffer": "^5.1.1",
             "yallist": "^3.0.0"
@@ -5676,6 +5686,7 @@
           "version": "0.5.1",
           "bundled": true,
           "dev": true,
+          "optional": true,
           "requires": {
             "minimist": "0.0.8"
           }
@@ -5756,7 +5767,8 @@
         "number-is-nan": {
           "version": "1.0.1",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         "object-assign": {
           "version": "4.1.1",
@@ -5768,6 +5780,7 @@
           "version": "1.4.0",
           "bundled": true,
           "dev": true,
+          "optional": true,
           "requires": {
             "wrappy": "1"
           }
@@ -5889,6 +5902,7 @@
           "version": "1.0.2",
           "bundled": true,
           "dev": true,
+          "optional": true,
           "requires": {
             "code-point-at": "^1.0.0",
             "is-fullwidth-code-point": "^1.0.0",
@@ -11530,6 +11544,11 @@
       "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=",
       "dev": true
     },
+    "tinycolor2": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.1.tgz",
+      "integrity": "sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g="
+    },
     "tmp": {
       "version": "0.0.33",
       "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
diff --git a/webapps/proteus-new/src/main/webapp/resources/package.json b/webapps/proteus-new/src/main/webapp/resources/package.json
index c2b9944..6278851 100644
--- a/webapps/proteus-new/src/main/webapp/resources/package.json
+++ b/webapps/proteus-new/src/main/webapp/resources/package.json
@@ -11,6 +11,7 @@
   "dependencies": {
     "axios": "^0.18.0",
     "d3": "^5.6.0",
+    "tinycolor2": "^1.4.1",
     "tween.js": "^16.6.0",
     "vue": "^2.5.17",
     "vue-material-design-icons": "^1.6.0",
diff --git a/webapps/proteus-new/src/main/webapp/resources/src/components/bublechartcomp.vue b/webapps/proteus-new/src/main/webapp/resources/src/components/bublechartcomp.vue
index 95766ab..101201b 100644
--- a/webapps/proteus-new/src/main/webapp/resources/src/components/bublechartcomp.vue
+++ b/webapps/proteus-new/src/main/webapp/resources/src/components/bublechartcomp.vue
@@ -19,10 +19,10 @@
       <v-toolbar dark color="primary">
         <v-toolbar-title class="white--text">All MIME Types</v-toolbar-title>
       </v-toolbar>
-      
+
       <svg id="bublesvg" width="400" height="300"></svg>
     </v-card>
-    
+
   </section>
 
 </template>
@@ -30,7 +30,9 @@
 <script lang="js">
   import * as d3 from 'd3';
   import axios from 'axios';
+  import tinycolor from 'tinycolor2';
   import store from './../store/store';
+
   export default  {
     name: 'bublechartcomp',
     store,
@@ -56,14 +58,14 @@
         var diameter = 860,
             format = d3.format(",d"),
             color = d3.scaleOrdinal(d3.schemeBrBG[11]);
-                    
-            
+
+
 
         var bubble = d3.pack()
             .size([diameter, diameter])
             .padding(1.5);
 
-        
+
         var svg = d3.select("#bublesvg")
             .attr("width", diameter)
             .attr("height", diameter)
@@ -71,11 +73,11 @@
 
 
         axios.get(this.origin + '/solr/statistics/select?q=type:software&fl=mime_*&wt=json')
-        .then(response2=>{  
+        .then(response2=>{
           if(response2.data.response.numFound!=null){
               axios.get(this.origin + '/solr/statistics/select?q=type:software&rows='+response2.data.response.numFound+'&fl=mime_*&wt=json')
             .then(response=>{
-            
+
 
               var docs = response.data.response.docs;
               var resultingData = [];
@@ -95,67 +97,74 @@
                 }
               }
 
-              
+
               for(x in mime) {
                 var obj = {};
                 var jsonObject = {};
                 var child = [];
                 obj["name"] = x;
                 jsonObject["name"] = x;
-              
+
                 jsonObject["size"] = mime[x];
                 child.push(jsonObject);
                 obj["children"] = child;
                 resultingData.push(obj);
               }
 
-              
+
 
               var test = {}
               test["name"] = "flare"
               test["children"] = resultingData
-            
+
               var range = d3.schemeBrBG[11];
               range = range.concat(d3.schemePRGn[11]);
 
               color = d3.scaleOrdinal(range);
-                      
+
               var root = d3.hierarchy(classes(test))
                 .sum(function(d){
                   return d.value;
                   })
-                
+
 
               bubble(root);
 
               var node = svg.selectAll(".node")
                   .data(root.children)
-                  
+
                 .enter().append("g")
                   .attr("class", "node")
                   .attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; });
 
               node.append("title")
-                  .text(function(d) { 
-                    return d.data.className + ": " + format(d.value); 
+                  .text(function(d) {
+                    return d.data.className + ": " + format(d.value);
                     });
 
               node.append("circle")
                   .attr("r", function(d) { return d.r; })
                   .attr("style",function(d){
-                      
+
                     return "fill:"+color(d.data.className);});
 
               node.append("text")
                   .attr("dy", ".3em")
+                  .attr('style', d => {
+                    return `fill: ${
+                      tinycolor(color(d.data.className)).isLight()
+                        ? '#000000'
+                        : '#ffffff'
+                    }`;
+                  })
                   .style("text-anchor", "middle")
                   .text(function(d) { return d.data.className.substring(0, d.r / 3); });
             });
           }
-          
-        });  
 
-        
+        });
+
+
 
         // Returns a flattened hierarchy containing all leaf nodes under the root.
         function classes(root) {
@@ -173,12 +182,12 @@
         d3.select(self.frameElement).style("height", diameter + "px");
       },
 
-      
+
     },
 
 
-       
-    
+
+
     computed: {
       origin(){
         return store.state.origin;
diff --git a/webapps/proteus-new/src/main/webapp/resources/src/components/licensepiecomp.vue b/webapps/proteus-new/src/main/webapp/resources/src/components/licensepiecomp.vue
index 7b6f078..7efeee2 100644
--- a/webapps/proteus-new/src/main/webapp/resources/src/components/licensepiecomp.vue
+++ b/webapps/proteus-new/src/main/webapp/resources/src/components/licensepiecomp.vue
@@ -20,7 +20,7 @@
       <v-toolbar dark color="primary">
          <v-toolbar-title class="white--text">License Types</v-toolbar-title>
       </v-toolbar>
-      
+
       <svg id="pielicensesvg" width="420" height="600"></svg>
     </v-card>
   </section>
@@ -30,7 +30,9 @@
 <script lang="js">
   import * as d3 from 'd3';
   import axios from 'axios';
-  import store from './../store/store'
+  import tinycolor from 'tinycolor2';
+  import store from './../store/store';
+
   export default  {
     name: 'licensepiecomp',
     store,
@@ -119,6 +121,13 @@
                   arc.append("text")
                       .attr("transform", function(d) { return "translate(" + label.centroid(d) + ")"; })
                       .attr("dy", "0.35em")
+                      .attr('style', d => {
+                        return `fill: ${
+                          tinycolor(color(d.data.key)).isLight()
+                            ? '#000000'
+                            : '#ffffff'
+                        }`;
+                      })
                       .text(function(d) { return d.data.key; });
 
                 var legend = d3.select("#pielicensesvg").append("svg")
@@ -144,9 +153,9 @@
                   console.log(result);
                 });
           }
-            
+
         });
-         
+
       }
     },
     computed: {
@@ -166,7 +175,7 @@
 
 .arc path {
   stroke: transparent
-  
+
 }
 
 #licensecard {
diff --git a/webapps/proteus-new/src/main/webapp/resources/src/components/topmimepiecomp.vue b/webapps/proteus-new/src/main/webapp/resources/src/components/topmimepiecomp.vue
index ea15f77..2f0de09 100644
--- a/webapps/proteus-new/src/main/webapp/resources/src/components/topmimepiecomp.vue
+++ b/webapps/proteus-new/src/main/webapp/resources/src/components/topmimepiecomp.vue
@@ -25,7 +25,7 @@
           <v-btn @click="count--;if(count<0)count=0">-</v-btn>
         </v-flex>
         <v-flex xs3 >
-          
+
           <v-text-field label="Count" :value="count"></v-text-field>
         </v-flex>
         <v-flex xs3>
@@ -43,7 +43,9 @@
 <script lang="js">
   import * as d3 from 'd3';
   import axios from 'axios';
-  import store from './../store/store'
+  import tinycolor from 'tinycolor2';
+  import store from './../store/store';
+
   export default  {
     name: 'topmimepiecomp',
     store,
@@ -68,7 +70,7 @@
             if(response2.data.response.numFound!=null){
                 axios.get(this.origin + '/solr/statistics/select?q=type:software&rows='+response2.data.response.numFound+'&fl=mime_*&wt=json')
                 .then(function(response) {
-                
+
                 console.log(response.data);
                   var docs = response.data.response.docs;
                   var resultingData = [];
@@ -140,6 +142,13 @@
                     arc.append("text")
                         .attr("transform", function(d) { return "translate(" + label.centroid(d) + ")"; })
                         .attr("dy", "0.35em")
+                        .attr('style', d => {
+                          return `fill: ${
+                            tinycolor(color(d.data.key)).isLight()
+                              ? '#000000'
+                              : '#ffffff'
+                          }`;
+                        })
                         .text(function(d) { return d.data.key; });
 
                   var legend = d3.select("#pietopmimesvg").append("svg")
@@ -165,9 +174,9 @@
                     console.log(result);
                   });
             }
-              
+
           });
-          
+
         }
     },
     computed: {