diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ChannelChooserView.js b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ChannelChooserView.js index 5b9c038f91ea3000371eb92b28a10502d96c620b..46bc65b799592dbfd5a5ba8f9c8f23a07857eb0e 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ChannelChooserView.js +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ChannelChooserView.js @@ -72,10 +72,12 @@ define([ "jquery", "components/imageviewer/AbstractView" ], function($, Abstract var thisView = this; var widget = $("<div>").addClass("mergedChannelsWidget").addClass("form-group"); - var checkboxes = $("<div>").appendTo(widget); + var table = $("<table>").appendTo(widget); + var row = $("<tr>").appendTo(table); this.controller.getChannels().forEach(function(channel) { - var checkbox = $("<label>").addClass("checkbox-inline").appendTo(checkboxes); + var cell = $("<td>").appendTo(row); + var checkbox = $("<label>").addClass("checkbox-inline").appendTo(cell); $("<input>").attr("type", "checkbox").attr("value", channel.code).appendTo(checkbox); checkbox.append(channel.label); }); diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ChannelStackMatrixChooserView.js b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ChannelStackMatrixChooserView.js index ad3441cb7de3b4d5fae0189d9c00ca06b73dc11b..ec1537141c3d5b03cef03f594b511acde81aa836 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ChannelStackMatrixChooserView.js +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ChannelStackMatrixChooserView.js @@ -1,4 +1,5 @@ -define([ "jquery", "bootstrap", "bootstrap-slider", "components/imageviewer/AbstractView" ], function($, bootstrap, bootstrapSlider, AbstractView) { +define([ "jquery", "bootstrap", "bootstrap-slider", "components/imageviewer/AbstractView", "components/imageviewer/FormFieldWidget" ], function($, + bootstrap, bootstrapSlider, AbstractView, FormFieldWidget) { // // CHANNEL STACK MATRIX CHOOSER VIEW @@ -30,68 +31,71 @@ define([ "jquery", "bootstrap", "bootstrap-slider", "components/imageviewer/Abst refresh : function() { var time = this.controller.getSelectedTimePoint(); - var timeWidget = this.panel.find(".timePointWidget"); - var timeLabel = this.panel.find(".timePointWidget label"); - var timeInput = this.panel.find(".timePointWidget input"); - var timeToggle = this.panel.find(".timePointWidget a") + var timeField = this.panel.find(".timePointWidget").data("formField"); if (time != null) { var timeCount = this.controller.getTimePoints().length; var timeIndex = this.controller.getTimePoints().indexOf(time); - timeLabel.text("Time: " + time + " sec (" + (timeIndex + 1) + "/" + timeCount + ")"); - timeToggle.text(this.controller.getTimePointButtonsWidget().isVisible() ? "Hide Buttons" : "Show Buttons"); - timeInput.slider("setValue", time); + timeField.setLabel("Time: " + time + " sec (" + (timeIndex + 1) + "/" + timeCount + ")"); + timeField.getWidget().slider("setValue", time); + + var timeToggle = timeField.getButton("toggle"); + timeToggle.text = this.controller.getTimePointButtonsWidget().isVisible() ? "Hide Buttons" : "Show Buttons"; + timeField.setButton(timeToggle); if (timeCount <= 1) { - timeWidget.addClass("disabled"); - timeInput.slider("disable"); + timeField.setEnabled(false); + timeField.getWidget().slider("disable"); } else { - timeWidget.removeClass("disabled"); - timeInput.slider("enable"); + timeField.setEnabled(true); + timeField.getWidget().slider("enable"); } } var depth = this.controller.getSelectedDepth(); - var depthWidget = this.panel.find(".depthWidget"); - var depthLabel = this.panel.find(".depthWidget label"); - var depthInput = this.panel.find(".depthWidget input"); - var depthToggle = this.panel.find(".depthWidget a"); + var depthField = this.panel.find(".depthWidget").data("formField"); if (depth != null) { var depthCount = this.controller.getDepths().length; var depthIndex = this.controller.getDepths().indexOf(depth); - depthLabel.text("Depth: " + depth + " (" + (depthIndex + 1) + "/" + depthCount + ")"); - depthToggle.text(this.controller.getDepthButtonsWidget().isVisible() ? "Hide Buttons" : "Show Buttons"); - depthInput.slider("setValue", depthIndex); + depthField.setLabel("Depth: " + depth + " (" + (depthIndex + 1) + "/" + depthCount + ")"); + depthField.getWidget().slider("setValue", depthIndex); + + var depthToggle = depthField.getButton("toggle"); + depthToggle.text = this.controller.getDepthButtonsWidget().isVisible() ? "Hide Buttons" : "Show Buttons"; + depthField.setButton(depthToggle); if (depthCount <= 1) { - depthWidget.addClass("disabled"); - depthInput.slider("disable"); + depthField.setEnabled(false); + depthField.getWidget().slider("disable"); } else { - depthWidget.removeClass("disabled"); - depthInput.slider("enable"); + depthField.setEnabled(true); + depthField.getWidget().slider("enable"); } } }, createTimePointWidget : function() { var thisView = this; - var widget = $("<div>").addClass("timePointWidget").addClass("form-group"); - - var label = $("<label>").attr("for", "timePointInput"); - var input = $("<input>").attr("id", "timePointInput").attr("type", "text").addClass("form-control"); - var labelContainer = $("<div>").addClass("labelContainer").append(label).appendTo(widget); - var inputContainer = $("<div>").addClass("inputContainer").append(input).appendTo(widget); - - $("<a>").click(function() { - if (thisView.controller.getTimePoints().length > 1) { - var buttonsWidget = thisView.controller.getTimePointButtonsWidget(); - buttonsWidget.setVisible(!buttonsWidget.isVisible()); + var input = $("<input>").attr("type", "text").addClass("form-control"); + var formField = new FormFieldWidget(); + formField.setWidget(input); + formField.setButton({ + "name" : "toggle", + "action" : function() { + if (thisView.controller.getTimePoints().length > 1) { + var buttonsWidget = thisView.controller.getTimePointButtonsWidget(); + buttonsWidget.setVisible(!buttonsWidget.isVisible()); + } } - }).appendTo(labelContainer) + }); + + var widget = $("<div>").addClass("timePointWidget").addClass("form-group"); + widget.data("formField", formField); + widget.append(formField.render()); input.slider({ "min" : 0, @@ -111,20 +115,23 @@ define([ "jquery", "bootstrap", "bootstrap-slider", "components/imageviewer/Abst createDepthWidget : function() { var thisView = this; - var widget = $("<div>").addClass("depthWidget").addClass("form-group"); - - var label = $("<label>").attr("for", "depthInput"); - var input = $("<input>").attr("id", "depthInput").attr("type", "text").addClass("form-control"); - - var labelContainer = $("<div>").addClass("labelContainer").append(label).appendTo(widget); - var inputContainer = $("<div>").addClass("inputContainer").append(input).appendTo(widget); - $("<a>").click(function() { - if (thisView.controller.getDepths().length > 1) { - var buttonsWidget = thisView.controller.getDepthButtonsWidget(); - buttonsWidget.setVisible(!buttonsWidget.isVisible()); + var input = $("<input>").attr("type", "text").addClass("form-control"); + var formField = new FormFieldWidget(); + formField.setWidget(input); + formField.setButton({ + "name" : "toggle", + "action" : function() { + if (thisView.controller.getDepths().length > 1) { + var buttonsWidget = thisView.controller.getDepthButtonsWidget(); + buttonsWidget.setVisible(!buttonsWidget.isVisible()); + } } - }).appendTo(labelContainer) + }); + + var widget = $("<div>").addClass("depthWidget").addClass("form-group"); + widget.data("formField", formField); + widget.append(formField.render()); input.slider({ "min" : 0, diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ChannelStackSeriesChooserView.js b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ChannelStackSeriesChooserView.js index 0d53a090350c7b957dcc397af71456c6b79d3758..e999e558501250a0ab473451cc9dee65867140d3 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ChannelStackSeriesChooserView.js +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ChannelStackSeriesChooserView.js @@ -1,4 +1,5 @@ -define([ "jquery", "bootstrap", "bootstrap-slider", "components/imageviewer/AbstractView" ], function($, bootstrap, bootstrapSlider, AbstractView) { +define([ "jquery", "bootstrap", "bootstrap-slider", "components/imageviewer/AbstractView", "components/imageviewer/FormFieldWidget" ], function($, + bootstrap, bootstrapSlider, AbstractView, FormFieldWidget) { // // CHANNEL STACK SERIES CHOOSER VIEW @@ -33,51 +34,52 @@ define([ "jquery", "bootstrap", "bootstrap-slider", "components/imageviewer/Abst var count = this.controller.getChannelStacks().length; var index = this.controller.getChannelStackIndex(channelStackId); var channelStack = this.controller.getChannelStacks()[index]; + var formField = this.panel.find(".sliderWidget").data("formField"); - var sliderWidget = this.panel.find(".sliderWidget"); - - var sliderLabel = this.panel.find(".sliderWidget label"); - var labelText = "Series: " + channelStack.seriesNumberOrNull; + var label = "Series: " + channelStack.seriesNumberOrNull; if (channelStack.timePointOrNull != null) { - labelText += ", Time: " + channelStack.timePointOrNull + " sec"; + label += ", Time: " + channelStack.timePointOrNull + " sec"; } if (channelStack.depthOrNull != null) { - labelText += ", Depth: " + channelStack.depthOrNull; + label += ", Depth: " + channelStack.depthOrNull; } - sliderLabel.text(labelText); - var sliderInput = this.panel.find(".sliderWidget input"); - sliderInput.slider("setValue", index); + formField.setLabel(label); + formField.getWidget().slider("setValue", index); - var toggle = this.panel.find(".sliderWidget a"); - toggle.text(this.controller.getChannelStackButtonsWidget().isVisible() ? "Hide Buttons" : "Show Buttons"); + var toggle = formField.getButton("toggle"); + toggle.text = this.controller.getChannelStackButtonsWidget().isVisible() ? "Hide Buttons" : "Show Buttons"; + formField.setButton(toggle); if (count <= 1) { - sliderWidget.addClass("disabled"); - sliderInput.slider("disable"); + formField.setEnabled(false); + formField.getWidget().slider("disable"); } else { - sliderWidget.removeClass("disabled"); - sliderInput.slider("enable"); + formField.setEnabled(true); + formField.getWidget().slider("enable"); } } }, createSliderWidget : function() { var thisView = this; - var widget = $("<div>").addClass("sliderWidget").addClass("form-group"); - - var label = $("<label>").attr("for", "sliderInput").appendTo(widget); - var input = $("<input>").attr("id", "sliderInput").attr("type", "text").addClass("form-control"); - - var labelContainer = $("<div>").addClass("labelContainer").append(label).appendTo(widget); - var inputContainer = $("<div>").addClass("inputContainer").append(input).appendTo(widget); - $("<a>").click(function() { - if (thisView.controller.getChannelStacks().length > 1) { - var buttonsWidget = thisView.controller.getChannelStackButtonsWidget(); - buttonsWidget.setVisible(!buttonsWidget.isVisible()); + var input = $("<input>").attr("type", "text").addClass("form-control"); + var formField = new FormFieldWidget(); + formField.setWidget(input); + formField.setButton({ + "name" : "toggle", + "action" : function() { + if (thisView.controller.getChannelStacks().length > 1) { + var buttonsWidget = thisView.controller.getChannelStackButtonsWidget(); + buttonsWidget.setVisible(!buttonsWidget.isVisible()); + } } - }).appendTo(labelContainer) + }); + + var widget = $("<div>").addClass("sliderWidget").addClass("form-group"); + widget.data("formField", formField); + widget.append(formField.render()); input.slider({ "min" : 0, diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/FormFieldView.js b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/FormFieldView.js new file mode 100644 index 0000000000000000000000000000000000000000..830dba2d61ecbe5cdef00c4b95e9efca00bb8eb5 --- /dev/null +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/FormFieldView.js @@ -0,0 +1,87 @@ +define([ "jquery", "components/imageviewer/AbstractView" ], function($, AbstractView) { + + // + // FORM FIELD VIEW + // + + function FormFieldView(controller) { + this.init(controller); + } + + $.extend(FormFieldView.prototype, AbstractView.prototype, { + + init : function(controller) { + AbstractView.prototype.init.call(this, controller); + this.panel = $("<div>").addClass("formFieldWidget").addClass("form-group"); + }, + + render : function() { + var table = $("<table>").addClass("mainTable").appendTo(this.panel); + var row = $("<tr>").appendTo(table); + + var labelContainer = $("<td>").addClass("labelContainer").appendTo(row); + var buttonsContainer = $("<td>").addClass("buttonsContainer").appendTo(row); + var widgetContainer = $("<div>").addClass("widgetContainer").appendTo(this.panel); + + this.refresh(); + + return this.panel; + }, + + refresh : function() { + if (this.controller.isEnabled()) { + this.panel.removeClass("disbaled"); + } else { + this.panel.addClass("disabled"); + } + + var labelContainer = this.panel.find(".labelContainer"); + var buttonsContainer = this.panel.find(".buttonsContainer"); + var widgetContainer = this.panel.find(".widgetContainer"); + + this.renderOrRefreshLabel(labelContainer); + this.renderOrRefreshButtons(buttonsContainer); + this.renderOrRefreshWidget(widgetContainer); + }, + + renderOrRefreshLabel : function(container) { + var label = this.controller.getLabel(); + + if (this.currentLabel == undefined || this.currentLabel != label) { + container.empty().append($("<label>").text(label)); + this.currentLabel = label; + } + }, + + renderOrRefreshButtons : function(container) { + container.empty().append(this.renderButtons()); + }, + + renderButtons : function() { + var table = $("<table>"); + var row = $("<tr>").appendTo(table); + + var map = this.controller.getButtonsMap(); + for (name in map) { + var button = map[name]; + var cell = $("<td>").appendTo(row); + $("<a>").text(button.text).click(button.action).appendTo(cell); + } + + return table; + }, + + renderOrRefreshWidget : function(container) { + var widget = this.controller.getWidget(); + + if (this.currentWidget == undefined || this.currentWidget != widget) { + container.empty().append(widget); + this.currentWidget = widget; + } + } + + }); + + return FormFieldView; + +}); \ No newline at end of file diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/FormFieldWidget.js b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/FormFieldWidget.js new file mode 100644 index 0000000000000000000000000000000000000000..4601929a3db1c01286365becbe70d73e01c7b5aa --- /dev/null +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/FormFieldWidget.js @@ -0,0 +1,104 @@ +define([ "jquery", "components/imageviewer/AbstractWidget", "components/imageviewer/FormFieldView" ], function($, AbstractWidget, FormFieldView) { + + // + // FORM FIELD WIDGET + // + + function FormFieldWidget() { + this.init(); + } + + $.extend(FormFieldWidget.prototype, AbstractWidget.prototype, { + + init : function() { + AbstractWidget.prototype.init.call(this, new FormFieldView(this)); + }, + + setLabel : function(label) { + if (this.getLabel() != label) { + this.label = label; + this.refresh(); + } + }, + + getLabel : function() { + if (this.label) { + return this.label; + } else { + return null; + } + }, + + setButton : function(button) { + var existingButton = this.getButton(button.name); + + if (existingButton) { + if (existingButton.text != button.text) { + existingButton.text = button.text; + changed = true; + } + if (existingButton.action != button.action) { + existingButton.action = button.action; + changed = true; + } + } else { + this.getButtonsMap()[button.name] = button; + changed = true; + } + + if (changed) { + this.refresh(); + } + }, + + getButton : function(name) { + var button = this.getButtonsMap()[name]; + if (button) { + return button; + } else { + return null; + } + }, + + getButtonsMap : function() { + if (!this.buttonsMap) { + this.buttonsMap = {}; + } + return this.buttonsMap; + }, + + setWidget : function(widget) { + if (this.getWidget() != widget) { + this.widget = widget; + this.refresh(); + } + }, + + getWidget : function() { + if (this.widget) { + return this.widget; + } else { + return null; + } + }, + + setEnabled : function(enabled) { + if (this.isEnabled() != enabled) { + this.enabled = enabled; + this.refresh(); + } + }, + + isEnabled : function() { + if (this.enabled != undefined) { + return this.enabled; + } else { + return true; + } + } + + }); + + return FormFieldWidget; + +}); diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/TransformationChooserView.js b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/TransformationChooserView.js index 292d86fa078571994e1a0f17ff395a1509920d94..6dbf326701df44ec3f6dd655ba69bdfd5a7236d7 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/TransformationChooserView.js +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/TransformationChooserView.js @@ -1,4 +1,4 @@ -define([ "jquery", "components/imageviewer/AbstractView" ], function($, AbstractView) { +define([ "jquery", "components/imageviewer/AbstractView", "components/imageviewer/FormFieldWidget" ], function($, AbstractView, FormFieldWidget) { // // TRANSFORMATION CHOOSER VIEW @@ -124,15 +124,46 @@ define([ "jquery", "components/imageviewer/AbstractView" ], function($, Abstract renderChannelParameters : function(channel, parameters) { var thisView = this; - var widget = $("<div>").addClass("transformationParameter").addClass("form-group"); var channelObject = this.controller.getChannelsMap()[channel]; + var input = $("<input>").attr("type", "text").addClass("form-control"); + + var formField = new FormFieldWidget(); + formField.setWidget(input); + formField.setLabel(channelObject.label + " (" + parameters.blackpoint + ", " + parameters.whitepoint + ")"); + formField.setButton({ + "name" : "rescale", + "text" : "Rescale", + "action" : function() { + var value = input.slider("getValue"); + + thisView.controller.setUserDefinedTransformationParameters(channel, { + "min" : value[0], + "max" : value[1], + "blackpoint" : value[0], + "whitepoint" : value[1] + }); + } + }); + formField.setButton({ + "name" : "reset", + "text" : "Reset", + "action" : function() { + var value = input.slider("getValue"); + + thisView.controller.setUserDefinedTransformationParameters(channel, { + "min" : 0, + "max" : 65535, + "blackpoint" : 0, + "whitepoint" : 65535, + }); + } + }); - var label = $("<label>").text(channelObject.label + " (" + parameters.blackpoint + ", " + parameters.whitepoint + ")"); - var input = $("<input>").attr("type", "text").attr("channel", channel).addClass("form-control"); - - var labelContainer = $("<div>").addClass("labelContainer").append(label).appendTo(widget); - var inputContainer = $("<div>").addClass("inputContainer").append(input).appendTo(widget); + var widget = $("<div>").addClass("transformationParameter").addClass("form-group"); + widget.data("channel", channel); + widget.data("formField", formField); + widget.append(formField.render()); input.slider({ "min" : parameters.min, @@ -151,28 +182,6 @@ define([ "jquery", "components/imageviewer/AbstractView" ], function($, Abstract }); }); - var reset = $("<a>").text("Reset").click(function() { - var value = input.slider("getValue"); - - thisView.controller.setUserDefinedTransformationParameters(channel, { - "min" : 0, - "max" : 65535, - "blackpoint" : 0, - "whitepoint" : 65535, - }); - }).appendTo(labelContainer); - - var rescale = $("<a>").text("Rescale").click(function() { - var value = input.slider("getValue"); - - thisView.controller.setUserDefinedTransformationParameters(channel, { - "min" : value[0], - "max" : value[1], - "blackpoint" : value[0], - "whitepoint" : value[1], - }); - }).appendTo(labelContainer); - return widget; }, @@ -180,15 +189,14 @@ define([ "jquery", "components/imageviewer/AbstractView" ], function($, Abstract var thisView = this; this.panel.find(".transformationParameter").each(function() { - var label = $(this).find("label"); - var input = $(this).find("input"); - - var channel = input.attr("channel"); + var widget = $(this); + var channel = widget.data("channel"); var channelObject = thisView.controller.getChannelsMap()[channel]; var channelParameters = thisView.controller.getUserDefinedTransformationParameters(channel); - label.text(channelObject.label + " (" + channelParameters.blackpoint + ", " + channelParameters.whitepoint + ")"); - input.slider("setValue", [ channelParameters.blackpoint, channelParameters.whitepoint ]); + var formField = $(this).data("formField"); + formField.setLabel(channelObject.label + " (" + channelParameters.blackpoint + ", " + channelParameters.whitepoint + ")"); + formField.getWidget().slider("setValue", [ channelParameters.blackpoint, channelParameters.whitepoint ]); }); } diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/css/image-viewer.css b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/css/image-viewer.css index c7740b807e9f43ba3aec1b586bc5de792b9fcaae..11cc2a45c88564d4d18e02bf00d4e3bbd2062de9 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/css/image-viewer.css +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/css/image-viewer.css @@ -1,39 +1,59 @@ .imageViewer .formPanel { - min-width: 250px; + } .imageViewer .imagePanel { margin-top: 25px; } +.imageViewer .imageWidget { + margin-left: 30px; +} + .imageViewer .formCell,.imageViewer .imageCell { vertical-align: top; } +.imageViewer .formFieldWidget .mainTable { + width: 100%; +} + +.imageViewer .labelContainer,.imageViewer .buttonsContainer { + white-space: nowrap; +} + .imageViewer .labelContainer label { margin-right: 10px; } -.imageViewer .labelContainer a { +.imageViewer .buttonsContainer a { color: #285e8e; padding: 0px 10px; cursor: pointer; float: right; } -.imageViewer .labelContainer a:hover { +.imageViewer .buttonsContainer table { + float: right; +} + +.imageViewer .buttonsContainer a:hover { text-decoration: underline; } -.imageViewer .disabled .labelContainer a { +.imageViewer .disabled .buttonsContainer a { color: gray; cursor: auto; } -.imageViewer .disabled .labelContainer a:hover { +.imageViewer .disabled .buttonsContainer a:hover { text-decoration: none; } +.imageViewer .mergedChannelsWidget label { + margin-right: 10px; +} + .imageViewer .slider.slider-horizontal { width: 100%; } @@ -70,8 +90,4 @@ .imageViewer .transformationParameter label { font-weight: normal; -} - -.imageViewer .imageWidget { - margin-left: 30px; } \ No newline at end of file