From 33d2bd1986f0760ceb1c35f77b74add3660d5775 Mon Sep 17 00:00:00 2001 From: felmer <felmer> Date: Tue, 8 Nov 2016 11:28:52 +0000 Subject: [PATCH] SSDM-4172: hide top level single folders. provide download link on data set level. SVN: 37286 --- .../DataSetForm/widgets/DatasetViewerModel.js | 4 +- .../DataSetForm/widgets/DatasetViewerView.js | 188 +++++++++++------- 2 files changed, 116 insertions(+), 76 deletions(-) diff --git a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerModel.js b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerModel.js index efaa39380b9..5fa76fce317 100644 --- a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerModel.js +++ b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerModel.js @@ -67,10 +67,10 @@ function DataSetViewerModel(containerId, profile, sample, serverFacade, datastor return false; } - this.getDirectDirectoryLink = function(datasetCode, datasetFile) { + this.getDirectDirectoryLink = function(datasetCode, pathInDataSet) { var directLinkComponent = null; if(profile.directLinkEnabled && profile.directFileServer) { - var path = this.sample.experimentIdentifierOrNull.substring(1) + "/" + datasetCode + "/" + datasetFile.pathInDataSet + "/"; + var path = this.sample.experimentIdentifierOrNull.substring(1) + "/" + datasetCode + "/" + pathInDataSet + "/"; directLinkComponent = "<span onclick=\"" + "Util.showDirectLink('" + path + "')" + "\" class='glyphicon glyphicon-hdd'></span>"; } return directLinkComponent; diff --git a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerView.js b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerView.js index e4dbdce01ba..b96b73fc5ff 100644 --- a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerView.js +++ b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerView.js @@ -17,6 +17,7 @@ function DataSetViewerView(dataSetViewerController, dataSetViewerModel) { this._dataSetViewerController = dataSetViewerController; this._dataSetViewerModel = dataSetViewerModel; + this._level = 3; this.repaintDatasets = function() { var _this = this; @@ -59,87 +60,115 @@ function DataSetViewerView(dataSetViewerController, dataSetViewerModel) { var treeModel = []; for(var datasetCode in this._dataSetViewerModel.sampleDataSets) { var dataset = this._dataSetViewerModel.sampleDataSets[datasetCode]; - treeModel.push({ title : dataset.dataSetTypeCode + " : " + datasetCode, key : "/", folder : true, lazy : true, datasetCode : datasetCode }); + var onClick = "mainController.changeView('showViewDataSetPageFromPermId', '" + datasetCode + "');"; + var dataSetTitle = "<span onclick=\"" + onClick + "\">" + + dataset.dataSetTypeCode + " : " + datasetCode + "</span>"; + treeModel.push({ title : dataSetTitle, key : "/", folder : true, lazy : true, datasetCode : datasetCode }); } var glyph_opts = { - map: { - doc: "glyphicon glyphicon-file", - docOpen: "glyphicon glyphicon-file", - checkbox: "glyphicon glyphicon-unchecked", - checkboxSelected: "glyphicon glyphicon-check", - checkboxUnknown: "glyphicon glyphicon-share", - dragHelper: "glyphicon glyphicon-play", - dropMarker: "glyphicon glyphicon-arrow-right", - error: "glyphicon glyphicon-warning-sign", - expanderClosed: "glyphicon glyphicon-plus-sign", - expanderLazy: "glyphicon glyphicon-plus-sign", // glyphicon-expand - expanderOpen: "glyphicon glyphicon-minus-sign", // glyphicon-collapse-down - folder: "glyphicon glyphicon-folder-close", - folderOpen: "glyphicon glyphicon-folder-open", - loading: "glyphicon glyphicon-refresh" - } - }; + map: { + doc: "glyphicon glyphicon-file", + docOpen: "glyphicon glyphicon-file", + checkbox: "glyphicon glyphicon-unchecked", + checkboxSelected: "glyphicon glyphicon-check", + checkboxUnknown: "glyphicon glyphicon-share", + dragHelper: "glyphicon glyphicon-play", + dropMarker: "glyphicon glyphicon-arrow-right", + error: "glyphicon glyphicon-warning-sign", + expanderClosed: "glyphicon glyphicon-plus-sign", + expanderLazy: "glyphicon glyphicon-plus-sign", // glyphicon-expand + expanderOpen: "glyphicon glyphicon-minus-sign", // glyphicon-collapse-down + folder: "glyphicon glyphicon-folder-close", + folderOpen: "glyphicon glyphicon-folder-open", + loading: "glyphicon glyphicon-refresh" + } + }; - var onActivate = function(event, data) { - if(data.node.key === "/") { - mainController.changeView('showViewDataSetPageFromPermId', data.node.data.datasetCode); - } - }; - - var onClick = function(event, data) { - - }; - - var onLazyLoad = function(event, data) { - var dfd = new $.Deferred(); - data.result = dfd.promise(); - - var pathToLoad = data.node.key; - var parentDatasetCode = data.node.data.datasetCode; - - var repaintEvent = function(code, files) { - if(!files.result) { - Util.showError("Files can't be found, most probably the DSS is down, contact your admin."); - } else { - var results = []; - for(var fIdx = 0; fIdx < files.result.length; fIdx++) { - var file = files.result[fIdx]; - - var titleValue = null; - if(file.isDirectory) { - titleValue = file.pathInListing; - var directLink = _this._dataSetViewerModel.getDirectDirectoryLink(code, file); - if(directLink) { - titleValue = directLink + " " + titleValue; - } - } else { - var $fileLink = _this._dataSetViewerModel.getDownloadLink(code, file, true); - titleValue = $fileLink[0].outerHTML; - var previewLink = _this._dataSetViewerModel.getPreviewLink(code, file); - if(previewLink) { - titleValue = previewLink + " " + titleValue; - } - } - results.push({ title : titleValue, key : file.pathInDataSet, folder : file.isDirectory, lazy : file.isDirectory, datasetCode : parentDatasetCode }); - } - - dfd.resolve(results); - } + var onClick = function(event, data) { + + }; + + var onLazyLoad = function(event, data) { + var dfd = new $.Deferred(); + data.result = dfd.promise(); + + var pathToLoad = data.node.key; + var parentDatasetCode = data.node.data.datasetCode; + + var repaintEvent = function(code, files) { + if (!files.result) { + Util.showError("Files can't be found, most probably the DSS is down, contact your admin."); + } else if (_this._isSingleFolder(files)) { + var file = files.result[0]; + _this.updateDirectoryView(parentDatasetCode, file.pathInDataSet, true, repaintEvent) + } else { + var results = []; + for (var fIdx = 0; fIdx < files.result.length; fIdx++) { + var file = files.result[fIdx]; + + var titleValue = null; + if (file.isDirectory) { + titleValue = file.pathInListing; + var directLink = _this._dataSetViewerModel.getDirectDirectoryLink(code, file.pathInDataSet); + if (directLink) { + titleValue = directLink + " " + titleValue; + } + } else { + var $fileLink = _this._dataSetViewerModel.getDownloadLink(code, file, true); + titleValue = $fileLink[0].outerHTML; + var previewLink = _this._dataSetViewerModel.getPreviewLink(code, file); + if (previewLink) { + titleValue = previewLink + " " + titleValue; + } + } + results.push({ title : titleValue, key : file.pathInDataSet, folder : file.isDirectory, lazy : file.isDirectory, datasetCode : parentDatasetCode }); + } + + dfd.resolve(results); + } }; _this.updateDirectoryView(parentDatasetCode, pathToLoad, true, repaintEvent); - }; - - $tree.fancytree({ - extensions: ["dnd", "edit", "glyph"], //, "wide" - glyph: glyph_opts, - source: treeModel, - activate: onActivate, - click: onClick, - lazyLoad : onLazyLoad - }); - + }; + + var onCreateNode = function(event, data) { + var nodePath = data.node.key; + if (nodePath === "/") { + var code = data.node.data.datasetCode; + _this._handleFolderToStart(code, nodePath, function(dataSetCode, path) { + var directLink = _this._dataSetViewerModel.getDirectDirectoryLink(dataSetCode, path); + if (directLink) { + data.node.setTitle(directLink + " " + data.node.title); + } + }); + } + }; + + $tree.fancytree({ + extensions: ["dnd", "edit", "glyph"], //, "wide" + glyph: glyph_opts, + source: treeModel, + createNode: onCreateNode, + click: onClick, + lazyLoad : onLazyLoad + }); + + } + + this._handleFolderToStart = function(dataSetCode, path, handle) { + var _this = this; + mainController.serverFacade.listFilesForDataSet(dataSetCode, path, false, function(files) { + if (_this._isSingleFolder(files)) { + var file = files.result[0]; + _this._handleFolderToStart(dataSetCode, file.pathInDataSet, handle); + } else { + handle(dataSetCode, path); + } + }); + } + + this.downloadLink = new function(dataSetCode, path) { } this.updateDirectoryView = function(code, path, notAddPath, repaintEvent) { @@ -148,4 +177,15 @@ function DataSetViewerView(dataSetViewerController, dataSetViewerModel) { repaintEvent(code, files); }); } + + this._isSingleFolder = function(files) { + if (files.result.length != 1) { + return false; + } + var file = files.result[0]; + if (file.isDirectory == false) { + return false; + } + return file.pathInDataSet.split('/').length < this._level + } } \ No newline at end of file -- GitLab