diff --git a/jupyter-openbis-extension/static/dialog.js b/jupyter-openbis-extension/static/dialog.js index a64f341490772260ca96fd9c9507025176b2afac..b122f0c2304ddc05a4aaf286b124c6d02806a49b 100644 --- a/jupyter-openbis-extension/static/dialog.js +++ b/jupyter-openbis-extension/static/dialog.js @@ -6,7 +6,6 @@ define([ ], function(IPython, dialog, utils, $, mc) { var currentConnection = '' - var selectedPermId = null var currentSampleIdentifier = null var currentDownloadPath = null var ds_type = document.createElement("SELECT") @@ -23,9 +22,12 @@ define([ var thead = table.createTHead() var thead_row = thead.insertRow(0) var titles = ['', 'Name', 'URL', 'Status'] - titles.forEach( function(item, index) { - thead_row.insertCell().textContent = item - }) + for (title of titles) { + thead_row.insertCell().textContent = title + } + //titles.forEach( function(item, index) { + // thead_row.insertCell().textContent = item + //}) tbody = table.createTBody() data.connections.forEach( function(item, index, arr) { @@ -74,95 +76,36 @@ define([ function show_datasets_table( data, datasets_table) { var table = document.createElement("TABLE") + table.className = "table-bordered table-striped table-condensed text-nowrap" var thead = table.createTHead() var t_row = thead.insertRow() - var titles = ['permId', 'Type', 'Experiment', 'Registration Date', 'Status', 'Size'] + var titles = ['', 'permId', 'Type', 'Experiment', 'Registration Date', 'Status', 'Size'] titles.forEach( function(title) { t_row.insertCell().textContent = title }) + var tbody = table.createTBody() + + for (dataSet of data.dataSets) { - //var table = $('<table>').addClass('table-bordered table-striped table-condensed text-nowrap') - //var thead = $('<thead>') - //var title_row = $('<tr>') - // .append($('<th>') - // .text('permId') - // ) - // .append($('<th>') - // .text('Type') - // ) - // .append($('<th>') - // .text('Experiment') - // ) - // .append($('<th>') - // .text('Registration Date') - // ) - // .append($('<th>') - // .text('Status') - // ) - // .append($('<th>') - // .text('Size') - // ) - //title_row.appendTo(thead) - //thead.appendTo(table) - - data.dataSets.forEach( function(item, index, arr) { var permId = document.createElement("INPUT") - permId.type = "radio" + permId.type = "checkbox" permId.name = "permId" - permId.value = item.permId - - //var permId = $('<input type="radio" name="permId">').attr("value", item.permId) - permId.onchange = function() { - if (this.checked) { - selectedPermId = this.value - } - } - //permId.change(function() { - // if ($(this).is(':checked')) { - // selectedPermId = this.value - // } - //}) + permId.value = dataSet.permId - var tbody = table.createTBody() var row = tbody.insertRow() row.insertCell().appendChild(permId) - row.insertCell().textContent = item.type - row.insertCell().textContent = item.experiment - row.insertCell().textContent = item.registrationDate - row.insertCell().textContent = item.status - row.insertCell().textContent = item.size - - //var row = $('<tr>') - // .append( - // $('<td>').append(permId).append(' ' + item.permId) - // ) - // .append($('<td>') - // .text(item.type) - // ) - // .append($('<td>') - // .text(item.experiment) - // ) - // .append($('<td>') - // .text(item.registrationDate) - // ) - // .append($('<td>') - // .text(item.status) - // ) - // .append($('<td>') - // .text(item.size) - // ) - //table.append(row) - }) + row.insertCell().textContent = dataSet.permId + row.insertCell().textContent = dataSet.type + row.insertCell().textContent = dataSet.experiment + row.insertCell().textContent = dataSet.registrationDate + row.insertCell().textContent = dataSet.status + row.insertCell().textContent = dataSet.size + } while (datasets_table.firstChild) { datasets_table.removeChild(datasets_table.firstChild); } datasets_table.appendChild(table) - - //datasets_table.innerHTML = '' - //datasets_table.innerHTML = table - //datasets_table.empty().append(table) - } function getOpenBisConnections(env, conn_table) { @@ -177,6 +120,26 @@ define([ return utils.ajax(settings) } + function createFeedback(type, content) { + var close = document.createElement("BUTTON") + close.className = "close" + close.setAttribute("data-dismiss", "alert") + close.setAttribute("aria-label", "Close") + var x = document.createElement("SPAN") + x.setAttribute("aria-hidden", true) + x.innerHTML = "×" + close.appendChild(x) + + var feedbackBox = document.createElement( "DIV" ) + feedbackBox.className = "openbis-feedback alert alert-dismissible alert-" + type + feedbackBox.setAttribute("role","alert") + feedbackBox.innerHTML = content + feedbackBox.prepend(close) + + var nb_container = document.getElementById('notebook-container') + nb_container.prepend(feedbackBox) + } + var fetchDatasetFromOpenBis = { help: 'Download a openBIS dataset to your local harddrive', icon: 'fa-download', @@ -201,11 +164,11 @@ define([ // to make sure we can display the download path provided by the server. // show DataSets for Sample identifier/permid - var sample = document.createElement("DIV") + var showDataSets = document.createElement("DIV") var title = document.createElement("STRONG") title.textContent = "Sample identfier/permId: " - sample.appendChild(title) - sample.style.marginTop = '10px' + showDataSets.appendChild(title) + showDataSets.style.marginTop = '10px' var sampleIdentifier = document.createElement("INPUT") sampleIdentifier.type = "text" @@ -237,40 +200,63 @@ define([ alert('Please specify a sample identifier/permId') return false } - //var settings = { - // url: env.notebook.base_url + 'openbis/sample/' + connection_name + '/' + encodeURIComponent(currentSampleIdentifier), - // processData: false, - // type: 'GET', - // dataType: 'json', - // contentType: 'application/json' - //} var url = env.notebook.base_url + 'openbis/sample/' + connection_name + '/' + encodeURIComponent(currentSampleIdentifier) - var xhttp = new XMLHttpRequest() - xhttp.onreadystatechange = function() { - var data = JSON.parse(this.responseText) - //if (this.readyState == 4 && this.status == 200) { - if (this.status == 200) { - show_datasets_table(data, datasets_table) - } - else { - alert("Error:" + data.statusText) - } - }; - xhttp.open("GET", url, true); - xhttp.send(); - - //utils.ajax(settings) - // .done(function(data) { + fetch(url) + .then( function(response) { + if (response.ok) { + response.json() + .then( function(data) { + show_datasets_table(data, datasets_table) + }) + } + else { + response.json() + .then( function(error) { + console.log(error.reason) + alert("Error: " + error.reason) + }) + } + }) + .catch( function(error) { + console.error('A serious network problem occured:', error) + }) + //.then( function(response) { + // if (response.ok) { + // return response.json() + // } + // //throw new Error('Error fetching datasets.'); + // response.text().then( function(errorMsg) { + // throw new Error(errorMsg); + // }) + //}) + //.then( function(data) { + // show_datasets_table(data, datasets_table) + //}) + //.catch( function(error) { + // console.error(error) + // alert("Error: " + error.message ) + //}) + + //var xhttp = new XMLHttpRequest() + //xhttp.onreadystatechange = function() { + // //var data = JSON.parse(this.responseText) + // //if (this.readyState == 4 && this.status == 200) { + // if (this.readyState === 4 && this.status >= 200 && this.status < 300) { + // var data = JSON.parse(this.response) // show_datasets_table(data, datasets_table) - // }) - // .fail(function(data) { - // alert('Error:' + data.statusText) - // }) + // } + // else if (this.readyState === 4 && this.status >= 400) { + // alert("Error:" + this.statusText) + // } + //}; + //xhttp.open("GET", url, true); + //xhttp.send(); + } - sample.appendChild(sampleIdentifier) - sample.appendChild(show_datasets_btn) - //sample.appendChild(datasets_table) + showDataSets.appendChild(sampleIdentifier) + showDataSets.appendChild(show_datasets_btn) + showDataSets.appendChild(datasets_table) // dataSetPermId only var dataset_direct = document.createElement("P") @@ -300,127 +286,105 @@ define([ var download_dialog_box = document.createElement("DIV") download_dialog_box.appendChild(conn_table) + download_dialog_box.appendChild(showDataSets) download_dialog_box.appendChild(dataset_direct) download_dialog_box.appendChild(path) - function downloadDataset(selected_conn, permId, path) { + function downloadDataset(selected_conn, selectedPermIds, downloadPath) { var notebook = IPython.notebook - var connection_name = selected_conn.value() + var connection_name = selected_conn.value var connection_url = selected_conn.getAttribute("url") - //var connection_name = $('input[name="connection_name"]:checked').val() - //var connection_url = $('input[name="connection_name"]:checked').attr('url') - var downloadUrl = env.notebook.base_url + 'openbis/dataset/' - + connection_name + '/' + permId + '/' + encodeURIComponent(path) - - // get the canvas for user feedback - //var container = $('#notebook-container') - var container = document.getElementById('notebook-container') - - var settings = { - url: downloadUrl, - processData: false, - type: 'GET', - dataType: 'json', - contentType: 'application/json' - } + var nb_container = document.getElementById('notebook-container') - var close = document.createElement("BUTTON") - close.className = "close" - close.setAttribute("data-dismiss", "alert") - close.setAttribute("aria-label", "Close") - var x = document.createElement("SPAN") - x.setAttribute("aria-hidden", true) - x.textContent = "×" + for (permId of selectedPermIds) { - // remove existing feedbacks - for (element in document.getElementsByClassName("openbis-feedback")) { - element.remove() - } + var downloadUrl = env.notebook.base_url + 'openbis/dataset/' + + connection_name + '/' + permId + '/' + encodeURIComponent(downloadPath) - // download the dataset files - utils.ajax(settings) - .done(function (data) { - // display feedback to user - var feedback = document.createElement( "DIV" ) - feedback.className = "openbis-feedback alert alert-success alert-dismissible" - feedback.setAttribute("role","alert") - feedback.append(data.statusText) + var xhttp = new XMLHttpRequest() + xhttp.onreadystatechange = function() { + // feedback elements + var close = document.createElement("BUTTON") + close.className = "close" + close.setAttribute("data-dismiss", "alert") + close.setAttribute("aria-label", "Close") + var x = document.createElement("SPAN") + x.setAttribute("aria-hidden", true) + x.innerHTML = "×" close.appendChild(x) - feedback.appendChild(close) - - //var feedback = '<div class="openbis-feedback alert alert-success alert-dismissible" role="alert">' + - // '<button type="button" class="close" data-dismiss="alert" aria-label="Close">' + - // '<span aria-hidden="true">×</span></button>' + - // data.statusText + - // '</div>' + if (this.readyState === 4 && this.status >= 200 && this.status < 300) { + var data = JSON.parse(this.response) - // display feedback - //$('.openbis-feedback').remove() + createFeedback('success', data.statusText) - container.prepend(feedback) - - // write statusText from returned data to notebooks metadata - if (typeof notebook.metadata.openbis_connections === 'undefined') { - notebook.metadata.openbis_connections = {} - } - if (typeof notebook.metadata.openbis_connections[connection_url] === 'undefined') { - notebook.metadata.openbis_connections[connection_url] = {} - } - // store metadata about the downloaded files into the notebook-metadata - if (data.permId) { - notebook.metadata.openbis_connections[connection_url][data.permId] = { - "permId": data.permId, - "path": data.path, - "dataStore": data.dataStore, - "location": data.location, - "size": data.size, - "status": data.statusText + // successful download: + // write statusText from returned data to notebooks metadata + if (typeof notebook.metadata.openbis_connections === 'undefined') { + notebook.metadata.openbis_connections = {} } + if (typeof notebook.metadata.openbis_connections[connection_url] === 'undefined') { + notebook.metadata.openbis_connections[connection_url] = {} + } + // store metadata about the downloaded files into the notebook-metadata + if (data.permId) { + notebook.metadata.openbis_connections[connection_url][data.permId] = { + "permId": data.permId, + "path": data.path, + "dataStore": data.dataStore, + "location": data.location, + "size": data.size, + "status": data.statusText + } + } + currentDownloadPath = downloadPath } - currentDownloadPath = path - }) - .fail(function (data) { - // display feedback to user - var feedback = document.createElement( "DIV" ) - feedback.className = "openbis-feedback alert alert-danger alert-dismissible" - feedback.setAttribute("role","alert") - feedback.innerHTML = "<strong>Error: </strong>Dataset was not downloaded.<div>" - + data.statusText - + "</div>" - - //var feedback = - // '<div class="openbis-feedback alert alert-danger alert-dismissible" role="alert">' + - // '<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>' + - // '<strong>Error: </strong>Dataset was not downloaded.<div>' + data.statusText + '</div></div>' + else if (this.readyState === 4 && this.status >= 400) { + // download failed: + // display feedback to user + var feedback = "<strong>Error: </strong>Dataset was not downloaded.<div>" + + this.statusText + + "</div>" + createFeedback("danger", feedback) + //var feedbackBox = document.createElement( "DIV" ) + //feedbackBox.className = "openbis-feedback alert alert-danger alert-dismissible" + //feedbackBox.setAttribute("role","alert") + //feedbackBox.prepend(close) + //nb_container.prepend(feedbackBox) + } + }; + xhttp.open("GET", downloadUrl, true); + xhttp.send(); - close.appendChild(x) - feedback.appendChild(close) - container.prepend(feedback) - }) + } } function onDownloadClick() { var selected_conn = document.querySelector('input[name=connection_name]:checked') - //connection_name = $('input[name="connection_name"]:checked').val() if (! selected_conn) { - alert('Please choose a connection') + alert('please choose a connection') return false } - if (!selectedPermId) { - selectedPermId = datasetPermId.val() + selectedPermIds = [] + for (row of document.querySelectorAll('input[name=permId]:checked') ) { + selectedPermIds.push(row.value) } - - if (!selectedPermId) { + if (datasetPermId.value) { + selectedPermIds.push(datasetPermId.value) + } + if (!selectedPermIds) { alert('please select a dataset or provide a permId') return false } - if (!downloadPath.value) - downloadDataset(selected_conn, selectedPermId, downloadPath.val()) + if (!downloadPath.value) { + alert('Please specify where you would like to download your files!') + return false + } + downloadDataset(selected_conn, selectedPermIds, downloadPath.value) } dialog.modal({ @@ -476,7 +440,14 @@ define([ var container = $('#notebook-container') function onOk () { - var connection_name = $('input[name="connection_name"]:checked').val() + //var connection_name = $('input[name="connection_name"]:checked').val() + var selected_connection = document.querySelector('input[name=connection_name]:checked') + if (!selected_connection) { + alert("No connection selected") + return false + } + var connection_name = selected_connection.value + var uploadUrl = env.notebook.base_url + 'openbis/dataset/' + connection_name var notebook = IPython.notebook @@ -506,15 +477,7 @@ define([ contentType: 'application/json', success: function (data) { // display feedback to user - var feedback = '<div class="openbis-feedback alert alert-success alert-dismissible" role="alert">' + - '<button type="button" class="close" data-dismiss="alert" aria-label="Close">' + - '<span aria-hidden="true">×</span></button>' + - data.statusText + - '</div>' - - // display feedback - $('.openbis-feedback').remove() - container.prepend(feedback) + createFeedback('success', data.statusText) // write statusText from returned data to notebooks metadata if ( typeof notebook.metadata.openbis === 'undefined') { @@ -530,14 +493,10 @@ define([ }, error: function (data) { // display feedback to user - var feedback = - '<div class="openbis-feedback alert alert-danger alert-dismissible" role="alert">' + - '<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>' + - '<strong>Warning!</strong> Something went wrong.<div>' + data.statusText + '</div></div>' - - // display feedback - $('.openbis-feedback').remove() - container.prepend(feedback) + var feedback = "<strong>Error: </strong>Dataset was not uploaded.<div>" + + data.statusText + + "</div>" + createFeedback('danger', feedback) } }