diff --git a/jupyter-openbis-extension/static/downloadDialog.js b/jupyter-openbis-extension/static/downloadDialog.js index 08f0f92bc1ceef0a65347f64fe032689fe8bd4b3..4525d737edeaa38fc39a717fa2d51b7c7ab4471d 100644 --- a/jupyter-openbis-extension/static/downloadDialog.js +++ b/jupyter-openbis-extension/static/downloadDialog.js @@ -5,6 +5,16 @@ define([ ], function (dialog, common, state) { + var spinner = document.createElement("IMG") + spinner.className="openbis-feedback" + spinner.src="" + function showSpinner() { + spinner.src="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.5.8/ajax-loader.gif" + } + function hideSpinner() { + spinner.src="" + } + function writeMetaData(data) { var notebook = IPython.notebook if (typeof notebook.metadata.datasets === 'undefined') { @@ -23,7 +33,7 @@ define([ } } - function show_datasets_table(env, data, datasets_table, downloadPath, entityIdentifier) { + function show_datasets_table(env, data, datasets_table, pagingContainer, downloadPath, entityIdentifier) { if (downloadPath.value === '') { downloadPath.value = data.cwd } @@ -34,7 +44,7 @@ define([ var thead = table.createTHead() var t_row = thead.insertRow() - var titles = ['', 'permId', 'Type', 'Experiment', 'Registration Date', 'Status', 'Size'] + var titles = ['', 'permId', 'Name', 'Type', 'Registration Date', 'Status', 'Size'] titles.forEach(function (title) { t_row.insertCell().textContent = title }) @@ -52,8 +62,8 @@ define([ var row = tbody.insertRow() row.insertCell().appendChild(permId) row.insertCell().textContent = dataSet.permId + row.insertCell().textContent = dataSet.properties['$NAME'] 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 @@ -63,14 +73,16 @@ define([ datasets_table.removeChild(datasets_table.firstChild); } datasets_table.appendChild(table) + datasets_table.style.overflow="auto" + const totalCount = parseInt(data.totalCount) const count = parseInt(data.count) const startWith = parseInt(data.start_with) const hasNext = startWith + count < totalCount const hasPrevious = startWith > 0 - const nextCmd = () => getDatasets(env, startWith+5, 5, entityIdentifier, datasets_table, downloadPath) - const previousCmd = () => getDatasets(env, startWith-5, 5, entityIdentifier, datasets_table, downloadPath) + const nextCmd = () => getDatasets(env, startWith+5, 5, entityIdentifier, datasets_table, pagingContainer, downloadPath) + const previousCmd = () => getDatasets(env, startWith-5, 5, entityIdentifier, datasets_table, pagingContainer, downloadPath) var previous = document.createElement("A") var linkText = document.createTextNode("<<< Previous") @@ -94,10 +106,13 @@ define([ paging.appendChild(next) } - datasets_table.appendChild(paging) + while (pagingContainer.firstChild) { + pagingContainer.removeChild(pagingContainer.firstChild); + } + pagingContainer.appendChild(paging) } - function getDatasets(env, startWith, count, entityIdentifier, datasets_table, downloadPath) { + function getDatasets(env, startWith, count, entityIdentifier, datasets_table, pagingContainer, downloadPath) { var connection_name = state.connection.name if (!connection_name) { alert('Please choose a connection') @@ -124,7 +139,7 @@ define([ if (response.ok) { response.json() .then(function (data) { - show_datasets_table(env, data, datasets_table, downloadPath, entityIdentifier) + show_datasets_table(env, data, datasets_table, pagingContainer, downloadPath, entityIdentifier) }) } else { response.json() @@ -161,9 +176,10 @@ define([ entityIdentifier.name = "entityIdentifier" entityIdentifier.size = 40 entityIdentifier.placeholder = "Sample or Experiment identifier/permId" - entityIdentifier.value = '' + entityIdentifier.value = state.entityIdentifier var datasets_table = document.createElement("DIV") + var pagingContainer = document.createElement("DIV") var show_datasets_btn = document.createElement("BUTTON") show_datasets_btn.className = "btn-info btn-xs" @@ -173,6 +189,7 @@ define([ showDataSets.appendChild(entityIdentifier) showDataSets.appendChild(show_datasets_btn) showDataSets.appendChild(datasets_table) + showDataSets.appendChild(pagingContainer) var dataset_direct = document.createElement("P") dataset_direct.style.marginTop = '10px' @@ -190,29 +207,43 @@ define([ downloadPath.type = "text" downloadPath.name = "downloadPath" downloadPath.size = "90" - downloadPath.value = '' + downloadPath.value = state.workingDirectory show_datasets_btn.onclick = - () => getDatasets(env, 0, 5, entityIdentifier, datasets_table, downloadPath) + () => getDatasets(env, 0, 5, entityIdentifier, datasets_table, pagingContainer, downloadPath) var path = document.createElement("DIV") path.innerHTML = "<strong>download data to path: </strong>" path.appendChild(downloadPath) var download_dialog_box = document.createElement("DIV") + download_dialog_box.appendChild(spinner) download_dialog_box.appendChild(conn_table) download_dialog_box.appendChild(showDataSets) download_dialog_box.appendChild(dataset_direct) download_dialog_box.appendChild(path) + function saveState() { + state.entityIdentifier = entityIdentifier.value + state.directPermId = datasetPermId.value + state.workingDirectory = downloadPath.value + } + function downloadDataset(connection_name, selectedPermIds, downloadPath) { + var spinnerCounter = selectedPermIds.length for (permId of selectedPermIds) { var downloadUrl = env.notebook.base_url + 'openbis/dataset/' + connection_name + '/' + permId + '/' + encodeURIComponent(downloadPath) fetch(downloadUrl) .then(function (response) { + spinnerCounter = spinnerCounter - 1 + if (spinnerCounter === 0) { + hideSpinner() + $('div.modal').remove() + $('div.modal-backdrop').remove() + } if (response.ok) { response.json() .then(function (data) { @@ -264,13 +295,18 @@ define([ } downloadDataset(selected_conn, selectedPermIds, downloadPath.value) + showSpinner() + saveState() + return false } dialog.modal({ body: download_dialog_box, title: 'Download openBIS DataSets', buttons: { - 'Cancel': {}, + 'Cancel': { + click: () => saveState() + }, 'Download': { class: 'btn-primary btn-large', click: onDownloadClick, diff --git a/jupyter-openbis-extension/static/state.js b/jupyter-openbis-extension/static/state.js index 6f05b5ebad6619aec67d781bb7f43fe00a17e155..70671d691bb7413b22f2248d438ded2da7c94235 100644 --- a/jupyter-openbis-extension/static/state.js +++ b/jupyter-openbis-extension/static/state.js @@ -17,7 +17,9 @@ define([], unselectedDatasets: [], // download dialog - selectedDatasets: new Set([]) + selectedDatasets: new Set([]), + entityIdentifier: '', + workingDirectory: '' } } ) \ No newline at end of file diff --git a/vagrant/files/console.properties b/vagrant/files/console.properties index faa327b56b38bcb8352771ef160acba48fddf193..c728029e3a41ae83aa54cced2d053fd36f283cc0 100644 --- a/vagrant/files/console.properties +++ b/vagrant/files/console.properties @@ -36,27 +36,27 @@ KEY_STORE_PASSWORD = changeit KEY_PASSWORD = changeit # Standard technology PROTEOMICS is disabled by default -#PROTEOMICS = true +PROTEOMICS = true # Standard technology SCREENING is disabled by default -#SCREENING = true +SCREENING = true # Standard technology ILLUMINA-NGS (ETH BSSE Setup) is disabled by default -#ILLUMINA-NGS = true +ILLUMINA-NGS = true # Standard technology ELN-LIMS is disabled by default -#ELN-LIMS = true +ELN-LIMS = true # Standard technology MICROSCOPY is disabled by default -#MICROSCOPY = true +MICROSCOPY = true # Standard technology FLOW CYTOMETRY is disabled by default -#FLOW = true +FLOW = true # Full ELN/LIMS master data is enabled by default. This setting is meaningful only if ELN-LIMS is enabled -ELN-LIMS-MASTER-DATA = false +#ELN-LIMS-MASTER-DATA = false # # Comma-separated list of databases to backup. If the list is empty or undefined all databases # will be backauped. -#DATABASES_TO_BACKUP = \ No newline at end of file +#DATABASES_TO_BACKUP =