From 6c051fca8bbd94bb17d2f8886708acf7b1dac7d3 Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Thu, 13 Apr 2017 14:31:11 +0200 Subject: [PATCH] refactor on comment dialog --- frontend-js/src/main/js/gui/CommentDialog.js | 87 +++++++++---------- frontend-js/src/main/js/gui/Legend.js | 1 - frontend-js/src/main/js/map/CustomMap.js | 17 ++-- .../src/test/js/gui/CommentDialog-test.js | 14 ++- frontend-js/src/test/js/map/CustomMap-test.js | 8 +- .../components/map/feedbackDialog.xhtml | 12 --- 6 files changed, 69 insertions(+), 70 deletions(-) delete mode 100644 web/src/main/webapp/WEB-INF/components/map/feedbackDialog.xhtml diff --git a/frontend-js/src/main/js/gui/CommentDialog.js b/frontend-js/src/main/js/gui/CommentDialog.js index bf03298de0..cbc0c3a0b1 100644 --- a/frontend-js/src/main/js/gui/CommentDialog.js +++ b/frontend-js/src/main/js/gui/CommentDialog.js @@ -2,11 +2,29 @@ var Promise = require("bluebird"); +var AbstractGuiElement = require('./AbstractGuiElement'); var Alias = require('../map/data/Alias'); var Reaction = require('../map/data/Reaction'); var logger = require('../logger'); var Functions = require('../Functions'); +function CommentDialog(params) { + AbstractGuiElement.call(this, params); + var self = this; + self._createGui(); + $(self.getElement()).dialog({ + autoOpen : false, + resizable : false, + width : window.innerWidth / 2, + height : window.innerHeight / 2, + }); +} + +CommentDialog.prototype = Object.create(AbstractGuiElement.prototype); +CommentDialog.prototype.constructor = CommentDialog; + +CommentDialog.GENERAL = "<General>"; + function createRow(elements) { var row = document.createElement('tr'); for (var i = 0; i < elements.length; i++) { @@ -17,11 +35,28 @@ function createRow(elements) { return row; } -function CommentDialog(element, customMap) { +CommentDialog.prototype.open = function(types) { + var self = this; + self.setTypes([ CommentDialog.GENERAL ]); + + var promises = [ CommentDialog.GENERAL ]; + for (var i = 0; i < types.length; i++) { + var ie = types[i]; + if (ie.getType() === "ALIAS") { + promises.push(self.getMap().getSubmodelById(ie.getModelId()).getModel().getAliasById(ie.getId(), true)); + } else if (ie.getType() === "REACTION") { + promises.push(self.getMap().getSubmodelById(ie.getModelId()).getModel().getReactionById(ie.getId(), true)); + } else { + throw new Error("Unknown element type: " + ie.getType()); + } + } + return Promise.all(promises).then(function(elements) { + self.setTypes(elements); + }); +}; +CommentDialog.prototype._createGui = function(types) { var self = this; - this.setElement(element); - this.setMap(customMap); var table = document.createElement('table'); var typeLabel = document.createElement('label'); @@ -82,7 +117,7 @@ function CommentDialog(element, customMap) { table.appendChild(createRow([ sendButton ])); - element.appendChild(table); + self.getElement().appendChild(table); typeOptions.onchange = function() { var option = self.getSelectedType(); @@ -114,46 +149,6 @@ function CommentDialog(element, customMap) { } detailDiv.innerHTML = text; }; - -} - -CommentDialog.GENERAL = "<General>"; - - -CommentDialog.prototype.setMap = function(map) { - this._map = map; -}; - -CommentDialog.prototype.getMap = function() { - return this._map; -}; - -CommentDialog.prototype.setElement = function(element) { - this._element = element; -}; - -CommentDialog.prototype.getElement = function() { - return this._element; -}; - -CommentDialog.prototype.open = function(types) { - var self = this; - self.setTypes([ CommentDialog.GENERAL ]); - - var promises = [ CommentDialog.GENERAL ]; - for (var i = 0; i < types.length; i++) { - var ie = types[i]; - if (ie.getType() === "ALIAS") { - promises.push(self.getMap().getSubmodelById(ie.getModelId()).getModel().getAliasById(ie.getId(), true)); - } else if (ie.getType() === "REACTION") { - promises.push(self.getMap().getSubmodelById(ie.getModelId()).getModel().getReactionById(ie.getId(), true)); - } else { - throw new Error("Unknown element type: " + ie.getType()); - } - } - return Promise.all(promises).then(function(elements) { - self.setTypes(elements); - }); }; CommentDialog.prototype.setTypes = function(types) { var typeOptions = this.getTypeOptions(); @@ -285,4 +280,8 @@ CommentDialog.prototype.addComment = function() { }); }; +CommentDialog.prototype.destroy = function() { + $(this.getElement()).dialog("destroy"); +}; + module.exports = CommentDialog; diff --git a/frontend-js/src/main/js/gui/Legend.js b/frontend-js/src/main/js/gui/Legend.js index 777241f625..76363ef3b2 100644 --- a/frontend-js/src/main/js/gui/Legend.js +++ b/frontend-js/src/main/js/gui/Legend.js @@ -3,7 +3,6 @@ /* exported logger */ var AbstractGuiElement = require('./AbstractGuiElement'); -var Functions = require('../Functions'); var logger = require('../logger'); diff --git a/frontend-js/src/main/js/map/CustomMap.js b/frontend-js/src/main/js/map/CustomMap.js index 1b38f0d04f..11c1615c05 100644 --- a/frontend-js/src/main/js/map/CustomMap.js +++ b/frontend-js/src/main/js/map/CustomMap.js @@ -56,10 +56,6 @@ function CustomMap(options) { // list of reference genomes this._referenceGenome = []; - var commentDialog = new CommentDialog(document.getElementById("feedbackContent"), this); - - this.setCommentDialog(commentDialog); - if (options.isCustomTouchInterface()) { this._touchInterface = new TouchMap(this); } @@ -1310,9 +1306,6 @@ CustomMap.prototype.getControl = function(type) { CustomMap.prototype.setCommentDialog = function(commentDialog) { this._commentDialog = commentDialog; - commentDialog.close = function(){ - jsfCommentDialog.hide(); - }; }; CustomMap.prototype.getCommentDialog = function() { @@ -1322,7 +1315,14 @@ CustomMap.prototype.getCommentDialog = function() { CustomMap.prototype.openCommentDialog = function() { var self = this; return ServerConnector.getClosestElementsByCoordinates({modelId:this.getActiveSubmapId(), coordinates:this.getActiveSubmapClickCoordinates()}).then(function(elements){ - return self.getCommentDialog().open(elements); + var commentDialog = self.getCommentDialog(); + if (commentDialog===undefined) { + commentDialog = new CommentDialog({element:document.getElementById("feedbackContent"), customMap:self}); + self.setCommentDialog(commentDialog); + } + self.setCommentDialog(commentDialog); + + return commentDialog.open(elements); }); }; @@ -1403,5 +1403,4 @@ CustomMap.prototype.getSubmaps = function(){ return submaps; }; - module.exports = CustomMap; diff --git a/frontend-js/src/test/js/gui/CommentDialog-test.js b/frontend-js/src/test/js/gui/CommentDialog-test.js index 92095d66b3..8952c66fc3 100644 --- a/frontend-js/src/test/js/gui/CommentDialog-test.js +++ b/frontend-js/src/test/js/gui/CommentDialog-test.js @@ -20,13 +20,23 @@ describe('CommentDialog', function() { it('contructor', function() { var map = helper.createCustomMap(); - new CommentDialog(testDiv, map); + var dialog = new CommentDialog({ + element : testDiv, + customMap : map + }); assert.ok(testDiv.innerHTML); assert.equal(logger.getWarnings().length, 0); + dialog.destroy(); }); it('getName', function() { - var dialog = new CommentDialog(testDiv); + var map = helper.createCustomMap(); + + var dialog = new CommentDialog({ + element : testDiv, + customMap : map + }); assert.ok(dialog.getName() !== undefined); + dialog.destroy(); }); }); diff --git a/frontend-js/src/test/js/map/CustomMap-test.js b/frontend-js/src/test/js/map/CustomMap-test.js index c923b6fbd8..1c23b69053 100644 --- a/frontend-js/src/test/js/map/CustomMap-test.js +++ b/frontend-js/src/test/js/map/CustomMap-test.js @@ -580,6 +580,8 @@ describe('CustomMap', function() { map.getCommentDialog().setSelectedType(2); selected = map.getCommentDialog().getSelectedType(); assert.notOk(selected === "<General>"); + }).then(function() { + map.getCommentDialog().destroy(); }); }); @@ -590,6 +592,8 @@ describe('CustomMap', function() { map.setActiveSubmapClickCoordinates(new google.maps.Point(2, 12)); return map.openCommentDialog().then(function() { return map.getCommentDialog().addComment(); + }).then(function() { + map.getCommentDialog().destroy(); }); }); @@ -641,9 +645,9 @@ describe('CustomMap', function() { var submodel = helper.createModel(); options.getProject().getModel().addSubmodel(submodel); - + var map = new CustomMap(options); - + map.openSubmodel(submodel.getId()); }); diff --git a/web/src/main/webapp/WEB-INF/components/map/feedbackDialog.xhtml b/web/src/main/webapp/WEB-INF/components/map/feedbackDialog.xhtml deleted file mode 100644 index ce04a24bc9..0000000000 --- a/web/src/main/webapp/WEB-INF/components/map/feedbackDialog.xhtml +++ /dev/null @@ -1,12 +0,0 @@ -<html xmlns="http://www.w3.org/1999/xhtml" - xmlns:h="http://java.sun.com/jsf/html" - xmlns:f="http://java.sun.com/jsf/core" - xmlns:ui="http://java.sun.com/jsf/facelets" - xmlns:c="http://java.sun.com/jsp/jstl/core" - xmlns:p="http://primefaces.org/ui"> - - <p:dialog id="feedbackDialog" header="Comment" widgetVar="jsfCommentDialog" modal="true" > - <div id="feedbackContent"/> - </p:dialog> - -</html> -- GitLab