From a6ee6bc4af26f16e343646c2dd7671bcb4d1286d Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Mon, 20 Nov 2017 10:48:53 +0100 Subject: [PATCH] plugin can define min width required --- frontend-js/src/main/js/plugin/Plugin.js | 16 +++++++++++++++- .../src/main/js/plugin/PluginManager.js | 19 +++++++++++++++++-- .../src/test/js/plugin/PluginManager-test.js | 6 ++++++ frontend-js/testFiles/plugin/min-width.js | 19 +++++++++++++++++++ 4 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 frontend-js/testFiles/plugin/min-width.js diff --git a/frontend-js/src/main/js/plugin/Plugin.js b/frontend-js/src/main/js/plugin/Plugin.js index b42b1fc16b..7e96c9dcf0 100644 --- a/frontend-js/src/main/js/plugin/Plugin.js +++ b/frontend-js/src/main/js/plugin/Plugin.js @@ -91,6 +91,20 @@ Plugin.prototype.load = function () { }; +Plugin.prototype.getMinWidth = function () { + var result = 0; + var data = this.getLoadedPluginData(); + if (data.minWidth !== undefined) { + var value = 0; + if (typeof data.minWidth === "function") { + value = parseInt(data.minWidth()); + } else { + value = parseInt(data.minWidth); + } + } + return value; +}; + Plugin.prototype.unload = function () { var self = this; return Promise.resolve().then(function () { @@ -98,7 +112,7 @@ Plugin.prototype.unload = function () { }).then(function () { var removedListeners = self.getMinervaPluginProxy().project.map.removeAllListeners(); if (removedListeners.length > 0) { - logger.warn("'"+self.getLoadedPluginData().getName() + "' plugin didn't remove all registered listeners"); + logger.warn("'" + self.getLoadedPluginData().getName() + "' plugin didn't remove all registered listeners"); } return self.callListeners("onUnload"); }).then(function () { diff --git a/frontend-js/src/main/js/plugin/PluginManager.js b/frontend-js/src/main/js/plugin/PluginManager.js index 7b677b3b3a..5aa89ddada 100644 --- a/frontend-js/src/main/js/plugin/PluginManager.js +++ b/frontend-js/src/main/js/plugin/PluginManager.js @@ -88,6 +88,7 @@ PluginManager.prototype.addPlugin = function (options) { self._pluginOnResizeHandlers[plugin.getPluginId()] = adjustHeight; GuiConnector.addWindowResizeEvent(adjustHeight); adjustHeight(); + self.adjustMinWidth(); return plugin; }); }; @@ -98,7 +99,6 @@ PluginManager.prototype.createTabForPlugin = function () { var guiUtils = new GuiUtils(self.getConfiguration()); if (tabData === undefined) { self.getElement().style.width = "300px"; - self.getElement().style.minWidth = "150px"; self.getElement().style.maxWidth = "600px"; self.getElement().style.height = "100%"; self._tabData = guiUtils.createTabDiv({element: self.getElement(), id: "plugin_tab"}); @@ -111,6 +111,19 @@ PluginManager.prototype.createTabForPlugin = function () { tabData: tabData }); }; +PluginManager.prototype.adjustMinWidth = function () { + var self = this; + var minWidth = 150; + for (var i = 0; i < self._plugins.length; i++) { + var plugin = self._plugins[i]; + var value = plugin.getMinWidth(); + if (value > minWidth) { + minWidth = value; + } + } + self.getElement().style.minWidth = minWidth + "px"; +}; + PluginManager.prototype.removePlugin = function (plugin) { var self = this; var found = false; @@ -124,7 +137,9 @@ PluginManager.prototype.removePlugin = function (plugin) { return Promise.reject(new Error("Plugin not registered")); } GuiConnector.removeWindowResizeEvent(self._pluginOnResizeHandlers[plugin.getPluginId()]); - return plugin.unload(); + return plugin.unload().then(function () { + self.adjustMinWidth(); + }); }; PluginManager.prototype.destroy = function () { diff --git a/frontend-js/src/test/js/plugin/PluginManager-test.js b/frontend-js/src/test/js/plugin/PluginManager-test.js index 61d8ac2df9..1153973304 100644 --- a/frontend-js/src/test/js/plugin/PluginManager-test.js +++ b/frontend-js/src/test/js/plugin/PluginManager-test.js @@ -38,6 +38,12 @@ describe('PluginManager', function () { assert.equal(1, manager.getPlugins().length); }); }); + it('with min width', function () { + var manager = new PluginManager(createParams()); + return manager.addPlugin({url: "./testFiles/plugin/min-width.js"}).then(function () { + assert.equal("200px", $(manager.getElement()).css("min-width")); + }); + }); it('after removal', function () { var manager = new PluginManager(createParams()); return manager.addPlugin({url: "./testFiles/plugin/empty.js"}).then(function (plugin) { diff --git a/frontend-js/testFiles/plugin/min-width.js b/frontend-js/testFiles/plugin/min-width.js new file mode 100644 index 0000000000..51a691c1cf --- /dev/null +++ b/frontend-js/testFiles/plugin/min-width.js @@ -0,0 +1,19 @@ +minervaDefine(function () { + return { + register: function (object) { + console.log("registering test plugin with min width"); + }, + unregister: function () { + console.log("unregistering test plugin"); + }, + getName: function () { + return "test plugin"; + }, + minWidth: function () { + return 200; + }, + getVersion: function () { + return "0.0.1"; + } + }; +}); \ No newline at end of file -- GitLab