diff --git a/openbis/source/core-plugins/dataset-uploader/1/as/webapps/dataset-uploader/html/js/DataSetFormView.js b/openbis/source/core-plugins/dataset-uploader/1/as/webapps/dataset-uploader/html/js/DataSetFormView.js index 086723dbc8dd21deb4721cdc3d8313cfc2aadbbd..b915d9b7dce862a5730dbf69f75c923a38ab39f9 100644 --- a/openbis/source/core-plugins/dataset-uploader/1/as/webapps/dataset-uploader/html/js/DataSetFormView.js +++ b/openbis/source/core-plugins/dataset-uploader/1/as/webapps/dataset-uploader/html/js/DataSetFormView.js @@ -92,13 +92,11 @@ function DataSetFormView(dataSetFormController, dataSetFormModel) { $wrapper.append(filesViewer); //Submit Button - if(this._dataSetFormModel.mode !== FormMode.VIEW) { - var $submitButton = $('<fieldset>') - .append($('<div>', { class : "form-group"})) - .append($('<div>', {class: FormUtil.controlColumnClass}) - .append($('<input>', { class : 'btn btn-primary', 'type' : 'submit', 'value' : titleText}))); - $wrapper.append($submitButton); - } + var $submitButton = $('<fieldset>') + .append($('<div>', { class : "form-group"})) + .append($('<div>', {class: FormUtil.controlColumnClass}) + .append($('<input>', { class : 'btn btn-primary', 'type' : 'submit', 'value' : titleText}))); + $wrapper.append($submitButton); //Attach to main form $container.append($('<div>', { class : 'row'}).append($('<div>', { class : FormUtil.formColumClass}).append($wrapper))); @@ -154,38 +152,35 @@ function DataSetFormView(dataSetFormController, dataSetFormModel) { } if(this._dataSetFormModel.files.length === 1 && - this._dataSetFormModel.files[0].indexOf('zip', this._dataSetFormModel.files[0].length - 3) !== -1) { - var isZipDirectoryUpload = profile.isZipDirectoryUpload($('#DATASET_TYPE').val()); - if(isZipDirectoryUpload === null) { - var $fileFieldSetIsDirectory = $('<div>') - .append($('<div>', { class : "form-group"}) - .append($('<label>', {class : 'control-label '+ FormUtil.labelColumnClass}).text('Uncompress before import:')) + this._dataSetFormModel.files[0].indexOf('zip', this._dataSetFormModel.files[0].length - 3) !== -1) { + var $fileFieldSetIsDirectory = $('<div>') + .append($('<div>', { class : "form-group"}) + .append($('<label>', {class : 'control-label '+ FormUtil.labelColumnClass}).text('Uncompress before import:')) + .append($('<div>', {class: FormUtil.controlColumnClass}) + .append(FormUtil._getBooleanField('isZipDirectoryUpload', 'Uncompress before import:'))) + ); + $wrapper.append($fileFieldSetIsDirectory); + + $("#isZipDirectoryUpload").change(function() { + _this.isFormDirty = true; + if($("#isZipDirectoryUpload"+":checked").val() === "on") { + var $textField = FormUtil._getInputField('text', 'folderName', 'Folder Name', null, true); + $textField.change(function(event) { + _this.isFormDirty = true; + }); + + var $folderName = $('<div>', { "id" : "folderNameContainer"}) + .append($('<div>', { class : "form-group"}) + .append($('<label>', {class : 'control-label '+ FormUtil.labelColumnClass}).html('Folder Name (*):')) .append($('<div>', {class: FormUtil.controlColumnClass}) - .append(FormUtil._getBooleanField('isZipDirectoryUpload', 'Uncompress before import:'))) - ); - $wrapper.append($fileFieldSetIsDirectory); - - $("#isZipDirectoryUpload").change(function() { - _this.isFormDirty = true; - if($("#isZipDirectoryUpload"+":checked").val() === "on") { - var $textField = FormUtil._getInputField('text', 'folderName', 'Folder Name', null, true); - $textField.change(function(event) { - _this.isFormDirty = true; - }); - - var $folderName = $('<div>', { "id" : "folderNameContainer"}) - .append($('<div>', { class : "form-group"}) - .append($('<label>', {class : 'control-label '+ FormUtil.labelColumnClass}).html('Folder Name (*):')) - .append($('<div>', {class: FormUtil.controlColumnClass}) - .append($textField)) - ); - $("#fileOptionsContainer").append($folderName); - $("#folderName").val(_this._dataSetFormModel.files[0].substring(0, _this._dataSetFormModel.files[0].indexOf("."))); - } else { - $( "#folderNameContainer" ).remove(); - } - }) - } + .append($textField)) + ); + $("#fileOptionsContainer").append($folderName); + $("#folderName").val(_this._dataSetFormModel.files[0].substring(0, _this._dataSetFormModel.files[0].indexOf("."))); + } else { + $( "#folderNameContainer" ).remove(); + } + }) } } @@ -252,19 +247,7 @@ function DataSetFormView(dataSetFormController, dataSetFormModel) { } $component.change(changeEvent(propertyType, isSystemProperty)); - - //Update values if is into edit mode - if(this._dataSetFormModel.mode === FormMode.EDIT) { - if(propertyType.dataType === "BOOLEAN") { - $($component.children()[0]).prop('checked', value === "true"); - } else if(propertyType.dataType === "TIMESTAMP") { - $($($component.children()[0]).children()[0]).val(value); - } else { - $component.val(value); - } - } else { - $component.val(""); //HACK-FIX: Not all browsers show the placeholder in Bootstrap 3 if you don't set an empty value. - } + $component.val(""); //HACK-FIX: Not all browsers show the placeholder in Bootstrap 3 if you don't set an empty value. $controls.append($component); diff --git a/openbis/source/core-plugins/dataset-uploader/1/as/webapps/dataset-uploader/html/js/FormUtil.js b/openbis/source/core-plugins/dataset-uploader/1/as/webapps/dataset-uploader/html/js/FormUtil.js index fc482f16bfec455b0159efa5ac583969423d71e3..7e103579f93ef80c0d53d596c1bf58be6f97a2fb 100644 --- a/openbis/source/core-plugins/dataset-uploader/1/as/webapps/dataset-uploader/html/js/FormUtil.js +++ b/openbis/source/core-plugins/dataset-uploader/1/as/webapps/dataset-uploader/html/js/FormUtil.js @@ -1,9 +1,3 @@ -var FormMode = { - CREATE : 0, - EDIT : 1, - VIEW : 2 -} - var FormUtil = new function() { this.profile = null; @@ -16,268 +10,11 @@ var FormUtil = new function() { this.shortControlColumnClass = 'col-md-5'; this.controlColumnClass = 'col-md-6'; this.controlColumnClassBig = 'col-md-10'; - // - // Annotations - // - - this.getXMLFromAnnotations = function(stateObj) { - var rootNode = document.createElementNS("http://www.w3.org/1999/xhtml", "root"); //The namespace should be ignored by both ELN and openBIS parsers - - for(var permId in stateObj) { - var sampleNode = document.createElementNS("http://www.w3.org/1999/xhtml", "Sample"); //Should not add the namespace since is the same as the root - sampleNode.setAttributeNS(null, "permId", permId); //Should not add the namespace - - for(var propertyTypeCode in stateObj[permId]) { - var propertyTypeValue = stateObj[permId][propertyTypeCode]; - sampleNode.setAttributeNS(null, propertyTypeCode, propertyTypeValue); //Should not add the namespace - } - - rootNode.appendChild(sampleNode); - } - - var serializer = new XMLSerializer(); - var xmlDoc = serializer.serializeToString(rootNode); - return xmlDoc; - } - - this.getAnnotationsFromSample = function(sample) { - return this.getAnnotationsFromField(sample.properties["ANNOTATIONS_STATE"]); - } - - this.getAnnotationsFromField = function(field) { - var stateObj = {}; - var stateFieldValue = Util.getEmptyIfNull(field); - if(stateFieldValue === "") { - return stateObj; - } - var xmlDoc = new DOMParser().parseFromString(stateFieldValue, 'text/xml'); - var samples = xmlDoc.getElementsByTagName("Sample"); - for(var i = 0; i < samples.length; i++) { - var sample = samples[i]; - var permId = sample.attributes["permId"].value; - for(var j = 0; j < sample.attributes.length; j++) { - var attribute = sample.attributes[j]; - if(attribute.name !== "permId") { - if(!stateObj[permId]) { - stateObj[permId] = {}; - } - stateObj[permId][attribute.name] = attribute.value; - } - } - } - return stateObj; - } // // Standard Form Fields // - this.getDropDownToogleWithSelectedFeedback = function(prefixElement, labelWithEvents, isSelectedFeedback, clickCallback) { - var $dropDownToogle = $('<span>', { class : 'dropdown' }); - if(prefixElement) { - $dropDownToogle.append(prefixElement); - } - $dropDownToogle.append($('<button>', { 'href' : '#', 'data-toggle' : 'dropdown', 'class' : 'dropdown-toggle btn btn-default'}).append($('<b>', { 'class' : 'caret' }))); - - var $dropDownToogleOptions = $('<ul>', { class : 'dropdown-menu', 'role' : 'menu' }); - $dropDownToogle.append($dropDownToogleOptions); - - for(var i = 0; i < labelWithEvents.length; i++) { - - var selectedFeedback = $('<span>', { 'id' : 'dropdown-' + labelWithEvents[i].id }); - - if(isSelectedFeedback && i === 0) { - selectedFeedback.append("<span class='glyphicon glyphicon-ok'></span>"); - } - - var $a = $('<a>', { class : '', 'title' : labelWithEvents[i].title }).append(selectedFeedback).append(' ').append(labelWithEvents[i].title); - - var clickFunction = function(labelWithEvents, selectedIndex, isSelectedFeedback) { - return function() { - if(isSelectedFeedback) { - for(var j = 0; j < labelWithEvents.length; j++) { - $("#" + 'dropdown-' + labelWithEvents[j].id).empty(); - if(j === selectedIndex) { - $("#" + 'dropdown-' + labelWithEvents[j].id).append("<span class='glyphicon glyphicon-ok'></span>"); - } - } - } - - labelWithEvents[selectedIndex].href(); - - if(clickCallback) { - clickCallback(); - } - }; - } - - $a.click(clickFunction(labelWithEvents, i, isSelectedFeedback)); - $dropDownToogleOptions.append($('<li>', { 'role' : 'presentation' }).append($a)); - } - return $dropDownToogle; - } - - this.getDefaultBenchDropDown = function(id, isRequired) { - var $storageDropDown = this.getDefaultStoragesDropDown(id, isRequired); - if(!$storageDropDown) { - return null; - } - for(var i = $storageDropDown.children().length -1; i >= 0 ; i--){ - var isEmpty = $storageDropDown.children()[i].value === ""; - var isBench = $storageDropDown.children()[i].value.indexOf("BENCH") > -1; - if(!isEmpty && !isBench){ - $storageDropDown.children()[i].remove(); - } - } - return $storageDropDown; - } - - this.getDefaultStorageBoxSizesDropDown = function(id, isRequired) { - if(!this.profile.storagesConfiguration["isEnabled"]) { - return null; - } - var storageBoxesVocabularyProp = this.profile.getPropertyType(this.profile.storagesConfiguration["STORAGE_PROPERTIES"][0]["BOX_SIZE_PROPERTY"]); - if(!storageBoxesVocabularyProp) { - return null; - } - var $storageBoxesDropDown = this.getFieldForPropertyType(storageBoxesVocabularyProp); - $storageBoxesDropDown.attr('id', id); - if (isRequired) { - $storageBoxesDropDown.attr('required', ''); - } - return $storageBoxesDropDown; - } - - this.getDefaultStoragesDropDown = function(id, isRequired) { - if(!this.profile.storagesConfiguration["isEnabled"]) { - return null; - } - var storageVocabularyProp = this.profile.getPropertyType(this.profile.storagesConfiguration["STORAGE_PROPERTIES"][0]["NAME_PROPERTY"]); - if(!storageVocabularyProp) { - return null; - } - var $storageDropDown = this.getFieldForPropertyType(storageVocabularyProp); - $storageDropDown.attr('id', id); - if (isRequired) { - $storageDropDown.attr('required', ''); - } - return $storageDropDown; - } - - this.getStoragePropertyGroupsDropdown = function(id, isRequired) { - var propertyGroups = this.profile.getStoragePropertyGroups(); - - var $component = $("<select>", {"id" : id, class : 'form-control'}); - if (isRequired) { - $component.attr('required', ''); - } - - for(var i = 0; i < propertyGroups.length; i++) { - var propertyGroup = propertyGroups[i]; - $component.append($("<option>").attr('value',propertyGroup.groupDisplayName).text(propertyGroup.groupDisplayName)); - } - - return $component; - } - - this.getBoxPositionsDropdown = function(id, isRequired, code) { - var numRows = null; - var numCols = null; - - if(code) { - var rowsAndCols = code.split("X"); - numRows = parseInt(rowsAndCols[0]); - numCols = parseInt(rowsAndCols[1]); - } else { - numRows = 0; - numCols = 0; - } - - var $component = $("<select>", {"id" : id, class : 'form-control'}); - if (isRequired) { - $component.attr('required', ''); - } - - $component.append($("<option>").attr('value', '').attr('selected', '').text('')); - - for(var i = 1; i <= numRows; i++) { - var rowLetter = Util.getLetterForNumber(i); - for(var j = 1; j <= numCols; j++) { - $component.append($("<option>").attr('value',rowLetter+j).text(rowLetter+j)); - } - - } - return $component; - } - - this.getSampleTypeDropdown = function(id, isRequired) { - var sampleTypes = this.profile.getAllSampleTypes(); - - var $component = $("<select>", {"id" : id, class : 'form-control'}); - if (isRequired) { - $component.attr('required', ''); - } - - $component.append($("<option>").attr('value', '').attr('selected', '').text('')); - for(var i = 0; i < sampleTypes.length; i++) { - var sampleType = sampleTypes[i]; - if(profile.isSampleTypeHidden(sampleType.code)) { - continue; - } - var label = Util.getEmptyIfNull(sampleType.description); - if(label === "") { - label = sampleType.code; - } - - $component.append($("<option>").attr('value',sampleType.code).text(label)); - } - - return $component; - } - - this.getExperimentTypeDropdown = function(id, isRequired) { - var experimentTypes = this.profile.allExperimentTypes; - - var $component = $("<select>", {"id" : id, class : 'form-control'}); - if (isRequired) { - $component.attr('required', ''); - } - - $component.append($("<option>").attr('value', '').attr('selected', '').text('Select an experiment type')); - for(var i = 0; i < experimentTypes.length; i++) { - var experimentType = experimentTypes[i]; - if(profile.isExperimentTypeHidden(experimentType.code)) { - continue; - } - - var label = experimentType.code; - var description = Util.getEmptyIfNull(experimentType.description); - if(description !== "") { - label += " (" + description + ")"; - } - - $component.append($("<option>").attr('value',experimentType.code).text(label)); - } - - return $component; - } - - this.getSpaceDropdown = function(id, isRequired) { - var spaces = this.profile.allSpaces; - - var $component = $("<select>", {"id" : id, class : 'form-control'}); - if (isRequired) { - $component.attr('required', ''); - } - - $component.append($("<option>").attr('value', '').attr('selected', '').text('')); - for(var i = 0; i < spaces.length; i++) { - $component.append($("<option>").attr('value', spaces[i]).text(spaces[i])); - } - - return $component; - } - this.getDataSetsDropDown = function(code, dataSetTypes) { var $component = $("<select>", { class : 'form-control ' }); $component.attr('id', code); @@ -302,126 +39,6 @@ var FormUtil = new function() { return $component; } - this.getOptionsRadioButtons = function(name, isFirstSelected, values, changeAction) { - var $component = $("<div>"); - for(var vIdx = 0; vIdx < values.length; vIdx++) { - if(vIdx !== 0) { - $component.append(" "); - } - var $radio = $("<input>", { type: "radio", name: name, value: values[vIdx]}); - - if(isFirstSelected && (vIdx === 0)) { - $radio.attr("checked", ""); - } - $radio.change(changeAction); - $component.append($radio); - $component.append(" " + values[vIdx]); - } - return $component; - } - - this.getProjectAndExperimentsDropdown = function(withProjects, withExperiments, isRequired, callbackForComponent) { - mainController.serverFacade.listSpacesWithProjectsAndRoleAssignments(null, function(dataWithSpacesAndProjects) { - var spaces = dataWithSpacesAndProjects.result; - var projectsToUse = []; - for (var i = 0; i < spaces.length; i++) { - var space = spaces[i]; - for (var j = 0; j < space.projects.length; j++) { - var project = space.projects[j]; - delete project["@id"]; - delete project["@type"]; - projectsToUse.push(project); - } - } - - mainController.serverFacade.listExperiments(projectsToUse, function(experiments) { - if(experiments.result) { - - for (var k = 0; k < experiments.result.length; k++) { - var experiment = experiments.result[k]; - - for(var pIdx = 0; pIdx < projectsToUse.length; pIdx++) { - var project = projectsToUse[pIdx]; - var projectIdentifier = "/" + project.spaceCode + "/" + project.code; - if(experiment.identifier.startsWith(projectIdentifier)) { - if(!project.experiments) { - project.experiments = []; - } - project.experiments.push(experiment); - } - } - } - // - // - var $component = $("<select>", { class : 'form-control'}); - if(isRequired) { - $component.attr('required', ''); - } - var placeHolder = ""; - if(withProjects && withExperiments) { - placeHolder = "Select a project or experiment"; - } else if(withProjects) { - placeHolder = "Select a project"; - } else if(withExperiments) { - placeHolder = "Select an experiment"; - } - $component.append($("<option>").attr('value', '').attr('selected', '').attr('disabled', '').text(placeHolder)); - for(var pIdx = 0; pIdx < projectsToUse.length; pIdx++) { - var project = projectsToUse[pIdx]; - var projectIdentifier = "/" + project.spaceCode + "/" + project.code; - if(withProjects) { - $component.append($("<option>").attr('value', projectIdentifier).text(projectIdentifier)); - } - if(project.experiments) { - for(var eIdx = 0; eIdx < project.experiments.length; eIdx++) { - var experiment = project.experiments[eIdx]; - if(withExperiments) { - $component.append($("<option>").attr('value',experiment.identifier).text(experiment.identifier)); - } - } - } - } - // - // - callbackForComponent($component); - } - }); - }); - } - - this.getDeleteButton = function(deleteFunction, includeReason, warningText) { - var $deleteBtn = $("<a>", { 'class' : 'btn btn-default ' }); - $deleteBtn.append($("<span>", { 'class' : 'glyphicon glyphicon-trash', 'style' : 'width:16px; height:16px;'})); - $deleteBtn.click(function() { - var modalView = new DeleteEntityController(deleteFunction, includeReason, warningText); - modalView.init(); - }); - return $deleteBtn; - } - - this.getButtonWithImage = function(src, clickEvent) { - var $pinBtn = $("<a>", { 'class' : 'btn btn-default' }); - $pinBtn.append($("<img>", { 'src' : src, 'style' : 'width:16px; height:16px;'})); - $pinBtn.click(clickEvent); - return $pinBtn; - } - - this.getButtonWithText = function(text, clickEvent) { - var $pinBtn = $("<a>", { 'class' : 'btn btn-default' }); - $pinBtn.append(text); - $pinBtn.click(clickEvent); - return $pinBtn; - } - - this.getHierarchyButton = function(permId) { - var $hierarchyButton = $("<a>", { 'class' : 'btn btn-default'} ) - .append($('<img>', { 'src' : './img/hierarchy-icon.png', 'style' : 'width:16px; height:17px;' })); - $hierarchyButton.click(function() { - mainController.changeView('showSampleHierarchyPage', permId); - }); - return $hierarchyButton; - } - // // Get Field with container to obtain a correct layout //