diff --git a/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/views/SampleForm/widgets/FreeFormTableController.js b/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/views/SampleForm/widgets/FreeFormTableController.js index eff6e842422a02abc58732ae0397b7c1a548e19c..397ce02ece33c32aeb83c600d313cc77aa6d8e49 100644 --- a/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/views/SampleForm/widgets/FreeFormTableController.js +++ b/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/views/SampleForm/widgets/FreeFormTableController.js @@ -39,7 +39,11 @@ function FreeFormTableController(sample, isEnabled) { } this.addTable = function(tableIdx) { - + var newTableIndex = tableIdx + 1; + this._freeFormTableModel.tables.splice(newTableIndex, 0, this._freeFormTableModel.getDefaultTableToAdd()); //Adds to model + var newTableModel = this._freeFormTableModel.tables[newTableIndex]; //New model + var $newTableContainer = this._freeFormTableView._getTableWithContainer(newTableModel, newTableIndex); //Creates Table from model + this._freeFormTableView.addTable(newTableIndex, $newTableContainer); } this.setTableSize = function(tableIdx, numRow, numCols) { diff --git a/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/views/SampleForm/widgets/FreeFormTableModel.js b/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/views/SampleForm/widgets/FreeFormTableModel.js index d3e3eee609b9ff0952374af2c80be3601dd4cb15..a2db9f00fd453f844d00dd434c55cebb1cc7f57c 100644 --- a/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/views/SampleForm/widgets/FreeFormTableModel.js +++ b/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/views/SampleForm/widgets/FreeFormTableModel.js @@ -16,14 +16,19 @@ function FreeFormTableModel(sample, isEnabled) { this.samplePropertyCode = "FREEFORM_TABLE_STATE"; + this.defaultTable = { + name : "Untitled", + modelDetailed : [['1,1']], + modelMini : { rows : ['1'], columns : ['1'] } + }; + + this.getDefaultTableToAdd = function() { + return JSON.parse(JSON.stringify( this.defaultTable )); + } this.sample = sample; this.isEnabled = isEnabled; - this.tables = [{ - name : "Untitled", - modelDetailed : [['1,1']], - modelMini : { rows : ['1'], columns : ['1'] } - }]; + this.tables = [this.getDefaultTableToAdd()]; } \ No newline at end of file diff --git a/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/views/SampleForm/widgets/FreeFormTableView.js b/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/views/SampleForm/widgets/FreeFormTableView.js index a38201f4c8d7667eda5415cfd54cabb70a1eb546..b620e20572bb16cbfd5770fa3aba7faa1b4cc95c 100644 --- a/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/views/SampleForm/widgets/FreeFormTableView.js +++ b/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/views/SampleForm/widgets/FreeFormTableView.js @@ -13,22 +13,21 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - function FreeFormTableView(freeFormTableController, freeFormTableModel) { - this._dilutionTableController = freeFormTableController; + this._freeFormTableController = freeFormTableController; this._freeFormTableModel = freeFormTableModel; - this._tableViews = []; + this._container = null; + this._tableContainers = []; - this._getSwitchForTable = function(tableIdx) { + this._getSwitchForTable = function(tableIdx, $wrappedTable) { var _this = this; var $switch = $("<div>", {"class" : "switch-toggle well", "style" : "width:33%; margin-left: auto; margin-right: auto; min-height: 38px !important;"}); - var changeEvent = function(index) { + var changeEvent = function(index, $tableContainer) { return function(event) { var isMini = $(this).children()[0].checked; var tableData = _this._freeFormTableModel.tables[index]; var tableView = null; - var tableViewWrapper = _this._tableViews[index]; - tableViewWrapper.empty(); + $tableContainer.empty(); if(isMini) { tableView = _this._getMiniTable(tableData.modelMini); @@ -36,17 +35,17 @@ function FreeFormTableView(freeFormTableController, freeFormTableModel) { tableView = _this._getDetailedTable(tableData.modelDetailed); } - tableViewWrapper.append(tableView); + $tableContainer.append(tableView); } } - $switch.change(changeEvent(tableIdx)); + $switch.change(changeEvent(tableIdx, $wrappedTable)); $switch - .append($("<input>", {"value" : "mini", "id" : "tableModeMini", "name" : "tableMode", "type" : "radio", "checked" : ""})) - .append($("<label>", {"for" : "tableModeMini", "onclick" : "", "style" : "padding-top:3px;"}).append("Mini")) - .append($("<input>", {"value" : "detailed", "id" : "tableModeDetailed","name" : "tableMode", "type" : "radio"})) - .append($("<label>", {"for" : "tableModeDetailed", "onclick" : "", "style" : "padding-top:3px;"}).append("Detailed")); + .append($("<input>", {"value" : "mini", "id" : "tableModeMini_" + tableIdx, "name" : "tableMode_" + tableIdx, "type" : "radio", "checked" : ""})) + .append($("<label>", {"for" : "tableModeMini_" + tableIdx, "onclick" : "", "style" : "padding-top:3px;"}).append("Mini")) + .append($("<input>", {"value" : "detailed", "id" : "tableModeDetailed_" + tableIdx,"name" : "tableMode_" + tableIdx, "type" : "radio"})) + .append($("<label>", {"for" : "tableModeDetailed_" + tableIdx, "onclick" : "", "style" : "padding-top:3px;"}).append("Detailed")); $switch.append($("<a>", {"class" : "btn btn-primary"})); return $switch; @@ -63,7 +62,7 @@ function FreeFormTableView(freeFormTableController, freeFormTableModel) { var keyUpEvent = function(columIdx, modelMini) { return function() { modelMini.columns[columIdx] = $(this).val(); - _this._dilutionTableController.save(); + _this._freeFormTableController.save(); }; } $textField.keyup(keyUpEvent(i, modelMini)); @@ -81,6 +80,7 @@ function FreeFormTableView(freeFormTableController, freeFormTableModel) { var keyUpEvent = function(rowIdx, modelMini) { return function() { modelMini.rows[rowIdx] = $(this).val(); + _this._freeFormTableController.save(); }; } $textField.keyup(keyUpEvent(i, modelMini)); @@ -115,7 +115,7 @@ function FreeFormTableView(freeFormTableController, freeFormTableModel) { var keyUpEvent = function(rowIdx, columIdx, modelDetailed) { return function() { modelDetailed[rowIdx][columIdx] = $(this).val(); - _this._dilutionTableController.save(); + _this._freeFormTableController.save(); }; } $textField.keyup(keyUpEvent(i, j, modelDetailed)); @@ -130,79 +130,98 @@ function FreeFormTableView(freeFormTableController, freeFormTableModel) { return $table; } - this.repaint = function($container) { + this._getTableWithContainer = function(tableData, tableIdx) { var _this = this; - $container.empty(); - for(var tableIdx = 0; tableIdx < this._freeFormTableModel.tables.length; tableIdx++) { - var tableData = this._freeFormTableModel.tables[tableIdx]; - var $tableContainer = $("<div>", {"style" : "margin:5px; border-radius:4px 4px 4px 4px;" }); - $tableContainer.css({ - 'background-color' : '#EEEEEE', - 'padding' : '10px' - }); - - var $title = null; - - if(this._freeFormTableModel.isEnabled) { - $title = $("<input>", { 'type' : 'text', 'style' : 'width:250px;' }); - $title.val(tableData.name); - var keyUpEvent = function(tableData) { - return function() { - tableData.name = $(this).val(); - _this._dilutionTableController.save(); - }; - } - $title.keyup(keyUpEvent(tableData)); - } else { - $title = $("<h3>"); - $title.append(tableData.name); - } - - var $switch = this._getSwitchForTable(tableIdx); - - var $toolBar = $("<span>", { 'style' : 'margin-left:150px;' }); - - var $toolBarBtnUcsv = FormUtil.getButtonWithText('Imp. CSV' ,null).attr('title', 'Import from CSV').tooltipster(); - var $toolBarBtnDcsv = FormUtil.getButtonWithText('Exp. CSV' ,null).attr('title', 'Export to CSV').tooltipster(); - - var $toolBarBtnTACL = FormUtil.getButtonWithImage('./img/table-add-column-left.png' ,null).attr('title', 'Add Column on the left.').tooltipster(); - var $toolBarBtnTACR = FormUtil.getButtonWithImage('./img/table-add-column-right.png' ,null).attr('title', 'Add Column on the right.').tooltipster(); - var $toolBarBtnTDC = FormUtil.getButtonWithImage('./img/table-delete-column.png' ,null).attr('title', 'Delete Column.').tooltipster(); - - var $toolBarBtnTARA = FormUtil.getButtonWithImage('./img/table-add-row-above.png' ,null).attr('title', 'Add Row above.').tooltipster(); - var $toolBarBtnTARB = FormUtil.getButtonWithImage('./img/table-add-row-below.png' ,null).attr('title', 'Add Row below.').tooltipster(); - var $toolBarBtnTDR = FormUtil.getButtonWithImage('./img/table-delete-row.png' ,null).attr('title', 'Delete Row.').tooltipster(); - - var $toolBarBtnAT = FormUtil.getButtonWithText('+ Table' ,null).attr('title', 'Add Table.').tooltipster(); - var $toolBarBtnDT = FormUtil.getButtonWithText('- Table' ,null).attr('title', 'Delete Table.').tooltipster(); - - if(this._freeFormTableModel.isEnabled) { - $toolBar - .append($toolBarBtnUcsv).append(' ') - .append($toolBarBtnDcsv).append(' ') - .append($toolBarBtnTACL).append(' ') - .append($toolBarBtnTACR).append(' ') - .append($toolBarBtnTDC).append(' ') - .append($toolBarBtnTARA).append(' ') - .append($toolBarBtnTARB).append(' ') - .append($toolBarBtnTDR).append(' ') - .append($toolBarBtnAT).append(' ') - .append($toolBarBtnDT); + var $tableContainer = $("<div>", {"style" : "margin:5px; border-radius:4px 4px 4px 4px;" }); + $tableContainer.css({ + 'background-color' : '#EEEEEE', + 'padding' : '10px' + }); + + var $title = null; + + if(this._freeFormTableModel.isEnabled) { + $title = $("<input>", { 'type' : 'text', 'style' : 'width:250px;' }); + $title.val(tableData.name); + var keyUpEvent = function(tableData) { + return function() { + tableData.name = $(this).val(); + _this._freeFormTableController.save(); + }; } - - var $titleAndToolbar = $("<div>") - .append($switch) - .append($title) - .append($toolBar); - - var $wrappedTable = $("<div>", { 'style' : 'margin-top:10px;' }).append(this._getMiniTable(tableData.modelMini)); - this._tableViews.push($wrappedTable); - - $tableContainer - .append($titleAndToolbar) - .append($wrappedTable); - - $container.append($tableContainer); + $title.keyup(keyUpEvent(tableData)); + } else { + $title = $("<h3>"); + $title.append(tableData.name); + } + + var $wrappedTable = $("<div>", { 'style' : 'margin-top:10px;' }).append(this._getMiniTable(tableData.modelMini)); + + var $switch = this._getSwitchForTable(tableIdx, $wrappedTable); + + var $toolBar = $("<span>", { 'style' : 'margin-left:150px;' }); + + var $toolBarBtnUcsv = FormUtil.getButtonWithText('Imp. CSV' ,null).attr('title', 'Import from CSV').tooltipster(); + var $toolBarBtnDcsv = FormUtil.getButtonWithText('Exp. CSV' ,null).attr('title', 'Export to CSV').tooltipster(); + + var $toolBarBtnTACL = FormUtil.getButtonWithImage('./img/table-add-column-left.png' ,null).attr('title', 'Add Column on the left.').tooltipster(); + var $toolBarBtnTACR = FormUtil.getButtonWithImage('./img/table-add-column-right.png' ,null).attr('title', 'Add Column on the right.').tooltipster(); + var $toolBarBtnTDC = FormUtil.getButtonWithImage('./img/table-delete-column.png' ,null).attr('title', 'Delete Column.').tooltipster(); + + var $toolBarBtnTARA = FormUtil.getButtonWithImage('./img/table-add-row-above.png' ,null).attr('title', 'Add Row above.').tooltipster(); + var $toolBarBtnTARB = FormUtil.getButtonWithImage('./img/table-add-row-below.png' ,null).attr('title', 'Add Row below.').tooltipster(); + var $toolBarBtnTDR = FormUtil.getButtonWithImage('./img/table-delete-row.png' ,null).attr('title', 'Delete Row.').tooltipster(); + + var $toolBarBtnAT = FormUtil.getButtonWithText('+ Table' ,null).attr('title', 'Add Table.').tooltipster(); + var addTableFunc = function(tableIdx) { + return function() { _this._freeFormTableController.addTable(tableIdx); }; + } + $toolBarBtnAT.click(addTableFunc(tableIdx)); + + var $toolBarBtnDT = FormUtil.getButtonWithText('- Table' ,null).attr('title', 'Delete Table.').tooltipster(); + + if(this._freeFormTableModel.isEnabled) { + $toolBar + .append($toolBarBtnUcsv).append(' ') + .append($toolBarBtnDcsv).append(' ') + .append($toolBarBtnTACL).append(' ') + .append($toolBarBtnTACR).append(' ') + .append($toolBarBtnTDC).append(' ') + .append($toolBarBtnTARA).append(' ') + .append($toolBarBtnTARB).append(' ') + .append($toolBarBtnTDR).append(' ') + .append($toolBarBtnAT).append(' ') + .append($toolBarBtnDT); + } + + var $titleAndToolbar = $("<div>") + .append($switch) + .append($title) + .append($toolBar); + + $tableContainer + .append($titleAndToolbar) + .append($wrappedTable); + + return $tableContainer; + } + + this.addTable = function(tableIdx, $tableContainer) { + if(tableIdx === 0) { + this._container.append($tableContainer); //Update View adding Table + } else { + this._tableContainers[tableIdx-1].after($tableContainer); //Update View adding Table + } + this._tableContainers.push($tableContainer); //Update View Structure + } + + this.repaint = function($container) { + this._container = $container; + var tables = this._freeFormTableModel.tables; + for(var tableIdx = 0; tableIdx < tables.length; tableIdx++) { + var tableData = tables[tableIdx]; + var $tableContainer = this._getTableWithContainer(tableData, tableIdx); + this.addTable(tableIdx, $tableContainer); } } } \ No newline at end of file