From 145d39af4900140b4c8a061717a7bb7979ab2701 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Thu, 13 Jul 2017 16:20:57 +0200
Subject: [PATCH] css is generated via build process (it also includes
 dependeent css)

---
 frontend-js/package.json                      |  9 ++++-
 .../src/main}/css/global.css                  |  0
 .../main/js/gui/export/ElementExportPanel.js  | 38 ++++++++++++++++++-
 .../src/main/js/map/data/ProjectStatistics.js |  6 ++-
 frontend-js/src/main/js/minerva.js            |  1 +
 frontend-js/src/test/js/mocha-config.js       | 11 ++++++
 .../WEB-INF/components/admin/header.xhtml     |  2 +-
 web/src/main/webapp/export-new.xhtml          |  2 +-
 web/src/main/webapp/index.xhtml               |  2 +-
 9 files changed, 63 insertions(+), 8 deletions(-)
 rename {web/src/main/webapp/resources => frontend-js/src/main}/css/global.css (100%)

diff --git a/frontend-js/package.json b/frontend-js/package.json
index fb763594ff..31599e759c 100644
--- a/frontend-js/package.json
+++ b/frontend-js/package.json
@@ -4,9 +4,13 @@
   "description": "frontentd for minerva google maps interface",
   "main": "minerva.js",
   "scripts": {
-    "build": "rm -rf dist & rmdir /q /s dist & mkdir dist & browserify --debug --standalone minerva src/main/js/minerva.js | exorcist dist/minerva.js.map > dist/minerva.js ",
+    "build:css": "cleancss -o dist/minerva.css src/main/css/*.css node_modules/dual-listbox/dist/*.css ",
+    "build:js": "browserify --debug --standalone minerva src/main/js/minerva.js | exorcist dist/minerva.js.map > dist/minerva.js ",
     "//": "rm -rf dist & rmdir /q /s dist & mkdir dist & browserify --debug --standalone minerva src/main/js/minerva.js | exorcist dist/minerva.js.map > dist/minerva.js & uglifyjs --compress --mangle --in-source-map dist/minerva.js.map --source-map-include-sources --source-map dist/minerva.min.js.map -o dist/minerva.min.js dist/minerva.js",
-    "build-deploy": "rm -rf dist & rmdir /q /s dist & mkdir dist & browserify --debug --standalone minerva src/main/js/minerva.js | exorcist dist/minerva.js.map > dist/minerva.js & copy /Y \"dist\\*\" \"C:/Program Files/apache-tomcat-7.0.72/webapps/minerva/resources/js\" ",
+    "build-deploy": "npm run build && npm run deploy",
+    "build": "npm run clean && npm run build:css && npm run build:js",
+    "clean": "rm -rf dist & rmdir /q /s dist & mkdir dist",
+    "deploy": "copy /Y \"dist\\*.js*\" \"C:/Program Files/apache-tomcat-7.0.72/webapps/minerva/resources/js\" &&  copy /Y \"dist\\*.css\" \"C:/Program Files/apache-tomcat-7.0.72/webapps/minerva/resources/css\" ",
     "lint": "jshint src/.",
     "test": "istanbul cover node_modules/mocha/bin/_mocha -- --recursive src/test/js"
   },
@@ -17,6 +21,7 @@
     "bootstrap": "^3.3.7",
     "browserify": "^13.1.1",
     "chai": "^3.5.0",
+    "clean-css-cli": "^4.1.6",
     "datatables.net": "^1.10.13",
     "exorcist": "^0.4.0",
     "file-url": "^2.0.0",
diff --git a/web/src/main/webapp/resources/css/global.css b/frontend-js/src/main/css/global.css
similarity index 100%
rename from web/src/main/webapp/resources/css/global.css
rename to frontend-js/src/main/css/global.css
diff --git a/frontend-js/src/main/js/gui/export/ElementExportPanel.js b/frontend-js/src/main/js/gui/export/ElementExportPanel.js
index e8e7fee8f1..9f649ecaf7 100644
--- a/frontend-js/src/main/js/gui/export/ElementExportPanel.js
+++ b/frontend-js/src/main/js/gui/export/ElementExportPanel.js
@@ -4,6 +4,7 @@
 
 var Panel = require('../Panel');
 
+var DualListbox = require('dual-listbox').DualListbox;
 var GuiConnector = require('../../GuiConnector');
 var logger = require('../../logger');
 var Functions = require('../../Functions');
@@ -29,10 +30,18 @@ ElementExportPanel.prototype._createGui = function() {
 ElementExportPanel.prototype.init = function() {
   var self = this;
   var element = self.getElement();
-  return ServerConnector.getConfiguration().then(function(configuration) {
+  var configuration;
+  return ServerConnector.getConfiguration().then(function(result) {
+    configuration = result;
     var typeDiv = self._createSelectTypeDiv(configuration.getElementTypes());
     element.appendChild(typeDiv);
     element.appendChild(self._createSelectColumnDiv());
+    return ServerConnector.getProjectStatistics(self.getProject().getProjectId());
+  }).then(function(statistics) {
+    var miriamDiv = self._createMiriamTypeDiv(statistics);
+    element.appendChild(miriamDiv);
+    new DualListbox(".minerva-multi-select");
+    $(window).trigger('resize');
   });
 }
 
@@ -66,6 +75,33 @@ ElementExportPanel.prototype._createSelectTypeDiv = function(elementTypes) {
   return typeDiv;
 }
 
+ElementExportPanel.prototype._createMiriamTypeDiv = function(statistics) {
+  var typeDiv = Functions.createElement({
+    type : "div",
+    name : "miriamSelectDiv",
+  });
+
+  var annotations = statistics.getElementAnnotations();
+
+  var selectElement = Functions.createElement({
+    type : "select",
+    className : "minerva-multi-select"
+  });
+  typeDiv.appendChild(selectElement);
+
+  for (var i = 0; i < annotations.length; i++) {
+    var miriamType = annotations[i].miriamType;
+    var count = annotations[i].count;
+
+    var option = new Option();
+    option.value = miriamType.getName();
+    option.text = miriamType.getName() + " " + count;
+    selectElement.appendChild(option);
+  }
+  logger.debug(DualListbox);
+  return typeDiv;
+};
+
 ElementExportPanel.prototype._createSelectColumnDiv = function() {
   var self = this;
   var columnDiv = Functions.createElement({
diff --git a/frontend-js/src/main/js/map/data/ProjectStatistics.js b/frontend-js/src/main/js/map/data/ProjectStatistics.js
index f564b27d3e..53e10ae5a5 100644
--- a/frontend-js/src/main/js/map/data/ProjectStatistics.js
+++ b/frontend-js/src/main/js/map/data/ProjectStatistics.js
@@ -8,8 +8,6 @@ function ProjectStatistics(data, configuration) {
   // call super constructor
   ObjectWithListeners.call(this);
 
-  logger.debug(data);
-
   this.setReactionAnnotations(data.reactionAnnotations, configuration);
   this.setElementAnnotations(data.elementAnnotations, configuration);
 }
@@ -45,4 +43,8 @@ ProjectStatistics.prototype.setElementAnnotations = function(elementAnnotations,
   }
 };
 
+ProjectStatistics.prototype.getElementAnnotations = function() {
+  return this._elementAnnotations;
+};
+
 module.exports = ProjectStatistics;
diff --git a/frontend-js/src/main/js/minerva.js b/frontend-js/src/main/js/minerva.js
index f493a638f4..f277b51de5 100644
--- a/frontend-js/src/main/js/minerva.js
+++ b/frontend-js/src/main/js/minerva.js
@@ -585,6 +585,7 @@ var minerva = {
   createExport : createExport,
   ServerConnector : OriginalServerConnector,
   GuiConnector : OriginalGuiConnector,
+  DualListbox : require('dual-listbox').DualListbox,
 };
 
 module.exports = minerva;
diff --git a/frontend-js/src/test/js/mocha-config.js b/frontend-js/src/test/js/mocha-config.js
index fb5d5db501..cd7a02fc0c 100644
--- a/frontend-js/src/test/js/mocha-config.js
+++ b/frontend-js/src/test/js/mocha-config.js
@@ -24,6 +24,17 @@ global.window.$ = $;
 
 // additions to jsdom implementations:
 global.Option = window.Option;
+
+var originalCreateElement = document.createElement;
+document.createElement = function(arg) {
+  var result = originalCreateElement.call(this, arg);
+  //woraround for: https://github.com/tmpvar/jsdom/issues/961 
+  if ("li" === arg) {
+    result.dataset = [];
+  }
+  return result;
+};
+
 window.open = function() {
   var result = {};
   result.focus = function() {
diff --git a/web/src/main/webapp/WEB-INF/components/admin/header.xhtml b/web/src/main/webapp/WEB-INF/components/admin/header.xhtml
index 7361ab78ee..3f4bf95ce2 100644
--- a/web/src/main/webapp/WEB-INF/components/admin/header.xhtml
+++ b/web/src/main/webapp/WEB-INF/components/admin/header.xhtml
@@ -4,7 +4,7 @@
 	xmlns:ui="http://java.sun.com/jsf/facelets"
 	xmlns:p="http://primefaces.org/ui">
 
-	<h:outputStylesheet library="css" name="global.css"	/>
+	<h:outputStylesheet library="css" name="minerva.css"	/>
 				
 	<div class="minerva-header">
 		<a href="#{request.contextPath}/?id=#{mapMB.currentMapId}" class="mainTitle"><i class="fa fa-home" style="font-size:17px"></i> #{mapMB.currentProject.name}</a>
diff --git a/web/src/main/webapp/export-new.xhtml b/web/src/main/webapp/export-new.xhtml
index 81120e1679..e84a149b5e 100644
--- a/web/src/main/webapp/export-new.xhtml
+++ b/web/src/main/webapp/export-new.xhtml
@@ -45,7 +45,7 @@ function initMap(){
 </h:head>
 <h:body onload="initMap();" >
 <h:outputStylesheet library="css" name="style.css"/>
-<h:outputStylesheet library="css" name="global.css"	/>
+<h:outputStylesheet library="css" name="minerva.css"	/>
 <h:outputStylesheet library="css" name="pileup.css"/>
 <h:outputStylesheet library="css" name="bootstrap.min.css"/>
 
diff --git a/web/src/main/webapp/index.xhtml b/web/src/main/webapp/index.xhtml
index ee5341d581..f950f192d1 100644
--- a/web/src/main/webapp/index.xhtml
+++ b/web/src/main/webapp/index.xhtml
@@ -48,7 +48,7 @@ function initMap(){
 </h:head>
 <h:body onload="initMap();" >
 <h:outputStylesheet library="css" name="style.css"/>
-<h:outputStylesheet library="css" name="global.css"	/>
+<h:outputStylesheet library="css" name="minerva.css"	/>
 <h:outputStylesheet library="css" name="pileup.css"/>
 <h:outputStylesheet library="css" name="bootstrap.min.css"/>
 
-- 
GitLab