galaxy-commits
Threads by month
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
September 2014
- 2 participants
- 236 discussions
commit/galaxy-central: natefoo: Update tag latest_2014.08.11 for changeset 21f2a42a06d7
by commits-noreply@bitbucket.org 17 Sep '14
by commits-noreply@bitbucket.org 17 Sep '14
17 Sep '14
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/2855d1a712c4/
Changeset: 2855d1a712c4
Branch: stable
User: natefoo
Date: 2014-09-17 13:00:22+00:00
Summary: Update tag latest_2014.08.11 for changeset 21f2a42a06d7
Affected #: 1 file
diff -r 21f2a42a06d7d2b8c408aed22c691f5e8b209311 -r 2855d1a712c45fe45da7585f1ea05ecbb2a6c2fd .hgtags
--- a/.hgtags
+++ b/.hgtags
@@ -18,4 +18,4 @@
81fbe25bd02edcd53065e8e4476dd1dfb5a72cf2 latest_2013.11.04
2a756ca2cb1826db7796018e77d12e2dd7b67603 latest_2014.02.10
ca45b78adb4152fc6e7395514d46eba6b7d0b838 release_2014.08.11
-2c0a15d8d6b4a98295df6f3b614bb54da452d1d9 latest_2014.08.11
+21f2a42a06d7d2b8c408aed22c691f5e8b209311 latest_2014.08.11
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
commit/galaxy-central: natefoo: Fix scripts that use galaxy.model.orm.scripts' get_config method to find either config/galaxy.ini or universe_wsgi.ini. For the tool_shed database it'll find either config/tool_shed.ini or tool_shed_wsgi.ini. Also re-fix the unit test.
by commits-noreply@bitbucket.org 17 Sep '14
by commits-noreply@bitbucket.org 17 Sep '14
17 Sep '14
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/02738142b8cf/
Changeset: 02738142b8cf
User: natefoo
Date: 2014-09-17 05:33:17+00:00
Summary: Fix scripts that use galaxy.model.orm.scripts' get_config method to find either config/galaxy.ini or universe_wsgi.ini. For the tool_shed database it'll find either config/tool_shed.ini or tool_shed_wsgi.ini. Also re-fix the unit test.
Database and tool migrations won't work if you use galaxy.ini.sample. Perhaps it should automatically try appending .sample? Or we should really be encouraging people to use the config file properly.
Affected #: 2 files
diff -r ac8d29ffce549f2c1570b661e8747c5beed2e676 -r 02738142b8cf5e0372ac5c2b46eeff5f0ab8e87a lib/galaxy/model/orm/scripts.py
--- a/lib/galaxy/model/orm/scripts.py
+++ b/lib/galaxy/model/orm/scripts.py
@@ -18,7 +18,7 @@
log = logging.getLogger( __name__ )
-DEFAULT_CONFIG_FILE = 'galaxy.ini'
+DEFAULT_CONFIG_FILE = 'config/galaxy.ini'
DEFAULT_CONFIG_PREFIX = ''
DEFAULT_DATABASE = 'galaxy'
@@ -26,17 +26,20 @@
"galaxy":
{
'repo': 'lib/galaxy/model/migrate',
+ 'old_config_file': 'universe_wsgi.ini',
'default_sqlite_file': './database/universe.sqlite',
},
"tool_shed":
{
'repo': 'lib/galaxy/webapps/tool_shed/model/migrate',
'config_file': 'config/tool_shed.ini',
+ 'old_config_file': 'tool_shed_wsgi.ini',
'default_sqlite_file': './database/community.sqlite',
},
"install":
{
'repo': 'lib/galaxy/model/tool_shed_install/migrate',
+ 'old_config_file': 'universe_wsgi.ini',
'config_prefix': 'install_',
'default_sqlite_file': './database/install.sqlite',
},
@@ -58,13 +61,16 @@
log.error( "database_connection contains an unknown SQLAlchemy database dialect: %s" % dialect )
-def read_config_file_arg( argv, default ):
+def read_config_file_arg( argv, default, old_default ):
if '-c' in argv:
pos = argv.index( '-c' )
argv.pop(pos)
config_file = argv.pop( pos )
else:
- config_file = default
+ if not os.path.exists( default ) and os.path.exists( old_default ):
+ config_file = old_default
+ else:
+ config_file = default
return config_file
@@ -74,11 +80,12 @@
>>> from tempfile import mkdtemp
>>> config_dir = mkdtemp()
+ >>> os.makedirs(os.path.join(config_dir, 'config'))
>>> def write_ini(path, property, value):
... p = SafeConfigParser()
... p.add_section('app:main')
... p.set('app:main', property, value)
- ... with open(os.path.join(config_dir, path), 'w') as f: p.write(f)
+ ... with open(os.path.join(config_dir, 'config', path), 'w') as f: p.write(f)
>>> write_ini('tool_shed.ini', 'database_connection', 'sqlite:///pg/testdb1')
>>> config = get_config(['manage_db.py', 'tool_shed'], cwd=config_dir)
>>> config['repo']
@@ -98,7 +105,7 @@
database = 'galaxy'
database_defaults = DATABASE[ database ]
- config_file = read_config_file_arg( argv, database_defaults.get( 'config_file', DEFAULT_CONFIG_FILE ) )
+ config_file = read_config_file_arg( argv, database_defaults.get( 'config_file', DEFAULT_CONFIG_FILE ), database_defaults.get( 'old_config_file' ) )
repo = database_defaults[ 'repo' ]
config_prefix = database_defaults.get( 'config_prefix', DEFAULT_CONFIG_PREFIX )
default_sqlite_file = database_defaults[ 'default_sqlite_file' ]
diff -r ac8d29ffce549f2c1570b661e8747c5beed2e676 -r 02738142b8cf5e0372ac5c2b46eeff5f0ab8e87a scripts/manage_tools.py
--- a/scripts/manage_tools.py
+++ b/scripts/manage_tools.py
@@ -22,7 +22,7 @@
log = logging.getLogger( __name__ )
-config_file = read_config_file_arg( sys.argv, 'config/galaxy.ini' )
+config_file = read_config_file_arg( sys.argv, 'config/galaxy.ini', 'universe_wsgi.ini' )
if not os.path.exists( config_file ):
print "Galaxy config file does not exist (hint: use '-c config.ini' for non-standard locations): %s" % config_file
sys.exit( 1 )
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
2 new commits in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/48fc9b40fda9/
Changeset: 48fc9b40fda9
User: martenson
Date: 2014-09-17 04:06:28+00:00
Summary: with John's help - this includes changed wording in user messages & errors to be more formal / no smilies :( /
Affected #: 27 files
diff -r c059c1061efa625d6ad1ff2fc298db03b01e2c61 -r 48fc9b40fda9458d502055d4887f5028ee64aa64 client/galaxy/scripts/galaxy.library.js
--- a/client/galaxy/scripts/galaxy.library.js
+++ b/client/galaxy/scripts/galaxy.library.js
@@ -107,7 +107,7 @@
this.library_router.on('route:download', function(folder_id, format) {
if ($('#folder_list_body').find(':checked').length === 0) {
- mod_toastr.info('You have to select some datasets to download');
+ mod_toastr.info( 'You must select at least one dataset to download' );
Galaxy.libraries.library_router.navigate('folders/' + folder_id, {trigger: true, replace: true});
} else {
Galaxy.libraries.folderToolbarView.download(folder_id, format);
diff -r c059c1061efa625d6ad1ff2fc298db03b01e2c61 -r 48fc9b40fda9458d502055d4887f5028ee64aa64 client/galaxy/scripts/mvc/library/library-dataset-view.js
--- a/client/galaxy/scripts/mvc/library/library-dataset-view.js
+++ b/client/galaxy/scripts/mvc/library/library-dataset-view.js
@@ -61,7 +61,7 @@
if (typeof response.responseJSON !== "undefined"){
mod_toastr.error(response.responseJSON.err_msg + ' Click this to go back.', '', {onclick: function() {Galaxy.libraries.library_router.back();}});
} else {
- mod_toastr.error('An error ocurred :(. Click this to go back.', '', {onclick: function() {Galaxy.libraries.library_router.back();}});
+ mod_toastr.error('An error ocurred. Click this to go back.', '', {onclick: function() {Galaxy.libraries.library_router.back();}});
}
}
});
@@ -93,7 +93,7 @@
if (typeof response.responseJSON !== "undefined"){
mod_toastr.error(response.responseJSON.err_msg);
} else {
- mod_toastr.error('An error ocurred :(');
+ mod_toastr.error('An error ocurred.');
}
}
});
@@ -136,7 +136,7 @@
$('<form action="'+ url +'" method="'+ (method||'post') +'">'+inputs+'</form>')
.appendTo('body').submit().remove();
- mod_toastr.info('Your download will begin soon');
+ mod_toastr.info('Your download will begin soon.');
}
},
@@ -171,7 +171,7 @@
if (typeof response.responseJSON !== "undefined"){
mod_toastr.error(response.responseJSON.err_msg);
} else {
- mod_toastr.error('An error ocurred :(');
+ mod_toastr.error('An error ocurred.');
}
}
});
@@ -197,7 +197,7 @@
if (typeof response.responseJSON !== "undefined"){
mod_toastr.error('Dataset not imported. ' + response.responseJSON.err_msg);
} else {
- mod_toastr.error('An error occured! Dataset not imported. Please try again.');
+ mod_toastr.error('An error occured. Dataset not imported. Please try again.');
}
}
});
@@ -235,7 +235,7 @@
$.get( "/api/libraries/datasets/" + self.id + "/permissions?scope=current").done(function(fetched_permissions) {
self.prepareSelectBoxes({fetched_permissions:fetched_permissions, is_admin:is_admin});
}).fail(function(){
- mod_toastr.error('An error occurred while fetching dataset permissions. :(');
+ mod_toastr.error('An error occurred while attempting to fetch dataset permissions.');
});
} else {
this.prepareSelectBoxes({is_admin:is_admin});
@@ -417,13 +417,13 @@
$('.access_perm').html(template({options:data.roles}));
self.accessSelectObject = $('#access_select').select2();
}).fail(function() {
- mod_toastr.error('An error occurred while fetching data with permissions. :(');
+ mod_toastr.error('An error occurred while attempting to fetch dataset permissions.');
});
}
},
comingSoon: function(){
- mod_toastr.warning('Feature coming soon');
+ mod_toastr.warning('Feature coming soon.');
},
copyToClipboard: function(){
@@ -439,9 +439,9 @@
$.post("/api/libraries/datasets/" + self.id + "/permissions?action=make_private").done(function(fetched_permissions) {
self.model.set({is_unrestricted:false});
self.showPermissions({fetched_permissions:fetched_permissions})
- mod_toastr.success('The dataset is now private to you');
+ mod_toastr.success('The dataset is now private to you.');
}).fail(function(){
- mod_toastr.error('An error occurred while making dataset private :(');
+ mod_toastr.error('An error occurred while attempting to make dataset private.');
});
},
@@ -451,10 +451,10 @@
.done(function(fetched_permissions) {
self.model.set({is_unrestricted:true});
self.showPermissions({fetched_permissions:fetched_permissions})
- mod_toastr.success('Access to this dataset is now unrestricted');
+ mod_toastr.success('Access to this dataset is now unrestricted.');
})
.fail(function(){
- mod_toastr.error('An error occurred while making dataset unrestricted :(');
+ mod_toastr.error('An error occurred while attempting to make dataset unrestricted.');
});
},
@@ -482,10 +482,10 @@
.done(function(fetched_permissions){
//fetch dataset again
self.showPermissions({fetched_permissions:fetched_permissions})
- mod_toastr.success('Permissions saved');
+ mod_toastr.success('Permissions saved.');
})
.fail(function(){
- mod_toastr.error('An error occurred while setting dataset permissions :(');
+ mod_toastr.error('An error occurred while attempting to set dataset permissions.');
})
},
diff -r c059c1061efa625d6ad1ff2fc298db03b01e2c61 -r 48fc9b40fda9458d502055d4887f5028ee64aa64 client/galaxy/scripts/mvc/library/library-folder-view.js
--- a/client/galaxy/scripts/mvc/library/library-folder-view.js
+++ b/client/galaxy/scripts/mvc/library/library-folder-view.js
@@ -45,7 +45,7 @@
if (typeof response.responseJSON !== "undefined"){
mod_toastr.error(response.responseJSON.err_msg + ' Click this to go back.', '', {onclick: function() {Galaxy.libraries.library_router.back();}});
} else {
- mod_toastr.error('An error ocurred :(. Click this to go back.', '', {onclick: function() {Galaxy.libraries.library_router.back();}});
+ mod_toastr.error('An error ocurred. Click this to go back.', '', {onclick: function() {Galaxy.libraries.library_router.back();}});
}
}
});
@@ -84,7 +84,7 @@
$.get( "/api/folders/" + self.id + "/permissions?scope=current").done(function(fetched_permissions) {
self.prepareSelectBoxes({fetched_permissions:fetched_permissions});
}).fail(function(){
- mod_toastr.error('An error occurred while fetching folder permissions. :(');
+ mod_toastr.error('An error occurred while attempting to fetch folder permissions.');
});
} else {
this.prepareSelectBoxes({});
@@ -170,7 +170,7 @@
},
comingSoon: function(){
- mod_toastr.warning('Feature coming soon');
+ mod_toastr.warning('Feature coming soon.');
},
copyToClipboard: function(){
@@ -199,10 +199,10 @@
.done(function(fetched_permissions){
//fetch dataset again
self.showPermissions({fetched_permissions:fetched_permissions})
- mod_toastr.success('Permissions saved');
+ mod_toastr.success('Permissions saved.');
})
.fail(function(){
- mod_toastr.error('An error occurred while setting folder permissions :(');
+ mod_toastr.error('An error occurred while attempting to set folder permissions.');
})
},
diff -r c059c1061efa625d6ad1ff2fc298db03b01e2c61 -r 48fc9b40fda9458d502055d4887f5028ee64aa64 client/galaxy/scripts/mvc/library/library-folderlist-view.js
--- a/client/galaxy/scripts/mvc/library/library-folderlist-view.js
+++ b/client/galaxy/scripts/mvc/library/library-folderlist-view.js
@@ -79,7 +79,7 @@
if (typeof response.responseJSON !== "undefined"){
mod_toastr.error(response.responseJSON.err_msg + ' Click this to go back.', '', {onclick: function() {Galaxy.libraries.library_router.back();}});
} else {
- mod_toastr.error('An error ocurred :(. Click this to go back.', '', {onclick: function() {Galaxy.libraries.library_router.back();}});
+ mod_toastr.error('An error ocurred. Click this to go back.', '', {onclick: function() {Galaxy.libraries.library_router.back();}});
}
}
});
diff -r c059c1061efa625d6ad1ff2fc298db03b01e2c61 -r 48fc9b40fda9458d502055d4887f5028ee64aa64 client/galaxy/scripts/mvc/library/library-foldertoolbar-view.js
--- a/client/galaxy/scripts/mvc/library/library-foldertoolbar-view.js
+++ b/client/galaxy/scripts/mvc/library/library-foldertoolbar-view.js
@@ -124,7 +124,7 @@
folder.save(folderDetails, {
success: function (folder) {
Galaxy.modal.hide();
- mod_toastr.success('Folder created');
+ mod_toastr.success('Folder created.');
folder.set({'type' : 'folder'});
Galaxy.libraries.folderListView.collection.add(folder);
},
@@ -133,12 +133,12 @@
if (typeof response.responseJSON !== "undefined"){
mod_toastr.error(response.responseJSON.err_msg);
} else {
- mod_toastr.error('An error ocurred :(');
+ mod_toastr.error('An error ocurred.');
}
}
});
} else {
- mod_toastr.error('Folder\'s name is missing');
+ mod_toastr.error('Folder\'s name is missing.');
}
return false;
},
@@ -161,7 +161,7 @@
modalBulkImport : function(){
var checkedValues = $('#folder_table').find(':checked');
if(checkedValues.length === 0){
- mod_toastr.info('You have to select some datasets first');
+ mod_toastr.info('You must select some datasets first.');
} else {
this.refreshUserHistoriesList(function(that){
var template = that.templateBulkImportInModal();
@@ -190,7 +190,7 @@
if (typeof response.responseJSON !== "undefined"){
mod_toastr.error(response.responseJSON.err_msg);
} else {
- mod_toastr.error('An error ocurred :(');
+ mod_toastr.error('An error ocurred.');
}
}
});
@@ -275,9 +275,9 @@
// send request
$('<form action="'+ url +'" method="'+ (method||'post') +'">'+inputs+'</form>')
.appendTo( 'body' ).submit().remove();
- mod_toastr.info( 'Your download will begin soon' );
+ mod_toastr.info( 'Your download will begin soon.' );
} else {
- mod_toastr.error( 'An error occurred :(' );
+ mod_toastr.error( 'An error occurred.' );
}
},
@@ -306,7 +306,7 @@
self.fetchAndDisplayHistoryContents(event.target.value);
});
} else {
- mod_toastr.error( 'An error ocurred :(' );
+ mod_toastr.error( 'An error ocurred.' );
}
});
},
@@ -417,7 +417,7 @@
if (typeof response.responseJSON !== "undefined"){
mod_toastr.error(response.responseJSON.err_msg);
} else {
- mod_toastr.error('An error ocurred :(');
+ mod_toastr.error('An error ocurred.');
}
}
})
@@ -434,7 +434,7 @@
var paths = $('textarea#import_paths').val();
var valid_paths = [];
if (!paths){
- mod_toastr.info('Please enter a path relative to Galaxy root');
+ mod_toastr.info('Please enter a path relative to Galaxy root.');
} else {
this.modal.disableButton('Import');
paths = paths.split('\n');
@@ -497,7 +497,7 @@
var selection_type = selected_nodes[0].type;
var paths = [];
if ( selected_nodes.length < 1 ){
- mod_toastr.info( 'You have to select some items first' );
+ mod_toastr.info( 'You must select some items first.' );
} else {
this.modal.disableButton( 'Import' );
for ( var i = selected_nodes.length - 1; i >= 0; i-- ){
@@ -527,7 +527,7 @@
if (typeof response.responseJSON !== "undefined"){
mod_toastr.error(response.responseJSON.err_msg);
} else {
- mod_toastr.error('An error ocurred :(');
+ mod_toastr.error('An error ocurred.');
}
}
});
@@ -541,7 +541,7 @@
var history_dataset_ids = [];
var hdas_to_add = [];
if ( checked_hdas.length < 1 ){
- mod_toastr.info( 'You have to select some datasets first' );
+ mod_toastr.info( 'You must select some datasets first.' );
} else {
this.modal.disableButton( 'Add' );
checked_hdas.each(function(){
@@ -608,7 +608,7 @@
mod_toastr.success( 'Selected files imported into the current folder' );
Galaxy.modal.hide();
} else {
- mod_toastr.error( 'Something went wrong :(' );
+ mod_toastr.error( 'An error occured.' );
}
return true;
}
@@ -641,11 +641,11 @@
var popped_item = paths.pop();
if (typeof popped_item == "undefined") {
if (this.options.chain_call_control.failed_number === 0){
- mod_toastr.success('Selected folders and their contents imported into the current folder');
+ mod_toastr.success('Selected folders and their contents imported into the current folder.');
Galaxy.modal.hide();
} else {
// TODO better error report
- mod_toastr.error('Something went wrong :(');
+ mod_toastr.error('An error occured.');
}
return true;
}
@@ -755,7 +755,7 @@
deleteSelectedDatasets: function(){
var checkedValues = $('#folder_table').find(':checked');
if(checkedValues.length === 0){
- mod_toastr.info('You have to select some datasets first');
+ mod_toastr.info('You must select at least one dataset for deletion.');
} else {
var template = this.templateDeletingDatasetsProgressBar();
this.modal = Galaxy.modal;
@@ -812,7 +812,7 @@
if (typeof response.responseJSON !== "undefined"){
mod_toastr.error(response.responseJSON.err_msg);
} else {
- mod_toastr.error('An error ocurred :(');
+ mod_toastr.error('An error ocurred.');
}
}
})
diff -r c059c1061efa625d6ad1ff2fc298db03b01e2c61 -r 48fc9b40fda9458d502055d4887f5028ee64aa64 client/galaxy/scripts/mvc/library/library-library-view.js
--- a/client/galaxy/scripts/mvc/library/library-library-view.js
+++ b/client/galaxy/scripts/mvc/library/library-library-view.js
@@ -45,7 +45,7 @@
if (typeof response.responseJSON !== "undefined"){
mod_toastr.error(response.responseJSON.err_msg + ' Click this to go back.', '', {onclick: function() {Galaxy.libraries.library_router.back();}});
} else {
- mod_toastr.error('An error ocurred :(. Click this to go back.', '', {onclick: function() {Galaxy.libraries.library_router.back();}});
+ mod_toastr.error('An error ocurred. Click this to go back.', '', {onclick: function() {Galaxy.libraries.library_router.back();}});
}
}
});
@@ -90,7 +90,7 @@
$.get( "/api/libraries/" + self.id + "/permissions?scope=current").done(function(fetched_permissions) {
self.prepareSelectBoxes({fetched_permissions:fetched_permissions});
}).fail(function(){
- mod_toastr.error('An error occurred while fetching library permissions. :(');
+ mod_toastr.error('An error occurred while attempting to fetch library permissions.');
});
} else {
this.prepareSelectBoxes({});
@@ -180,7 +180,7 @@
},
comingSoon: function(){
- mod_toastr.warning('Feature coming soon');
+ mod_toastr.warning('Feature coming soon.');
},
copyToClipboard: function(){
@@ -196,9 +196,9 @@
$.post("/api/libraries/datasets/" + self.id + "/permissions?action=make_private").done(function(fetched_permissions) {
self.model.set({is_unrestricted:false});
self.showPermissions({fetched_permissions:fetched_permissions})
- mod_toastr.success('The dataset is now private to you');
+ mod_toastr.success('The dataset is now private to you.');
}).fail(function(){
- mod_toastr.error('An error occurred while making dataset private :(');
+ mod_toastr.error('An error occurred while attempting to make dataset private.');
});
},
@@ -208,10 +208,10 @@
.done(function(fetched_permissions) {
self.model.set({is_unrestricted:true});
self.showPermissions({fetched_permissions:fetched_permissions})
- mod_toastr.success('Access to this dataset is now unrestricted');
+ mod_toastr.success('Access to this dataset is now unrestricted.');
})
.fail(function(){
- mod_toastr.error('An error occurred while making dataset unrestricted :(');
+ mod_toastr.error('An error occurred while attempting to make dataset unrestricted.');
});
},
@@ -234,10 +234,10 @@
.done(function(fetched_permissions){
//fetch dataset again
self.showPermissions({fetched_permissions:fetched_permissions})
- mod_toastr.success('Permissions saved');
+ mod_toastr.success('Permissions saved.');
})
.fail(function(){
- mod_toastr.error('An error occurred while setting library permissions :(');
+ mod_toastr.error('An error occurred while attempting to set library permissions.');
})
},
diff -r c059c1061efa625d6ad1ff2fc298db03b01e2c61 -r 48fc9b40fda9458d502055d4887f5028ee64aa64 client/galaxy/scripts/mvc/library/library-librarylist-view.js
--- a/client/galaxy/scripts/mvc/library/library-librarylist-view.js
+++ b/client/galaxy/scripts/mvc/library/library-librarylist-view.js
@@ -40,7 +40,7 @@
if (typeof response.responseJSON !== "undefined"){
mod_toastr.error(response.responseJSON.err_msg);
} else {
- mod_toastr.error('An error ocurred :(');
+ mod_toastr.error('An error ocurred.');
}
}
});
diff -r c059c1061efa625d6ad1ff2fc298db03b01e2c61 -r 48fc9b40fda9458d502055d4887f5028ee64aa64 client/galaxy/scripts/mvc/library/library-libraryrow-view.js
--- a/client/galaxy/scripts/mvc/library/library-libraryrow-view.js
+++ b/client/galaxy/scripts/mvc/library/library-libraryrow-view.js
@@ -126,7 +126,7 @@
library.set("name", new_name);
is_changed = true;
} else{
- mod_toastr.warning('Library name has to be at least 3 characters long');
+ mod_toastr.warning('Library name has to be at least 3 characters long.');
return;
}
}
@@ -150,20 +150,20 @@
success: function(library) {
row_view.edit_mode = false;
row_view.repaint(library);
- mod_toastr.success('Changes to library saved');
+ mod_toastr.success('Changes to library saved.');
},
error: function(model, response){
if (typeof response.responseJSON !== "undefined"){
mod_toastr.error(response.responseJSON.err_msg);
} else {
- mod_toastr.error('An error occured during updating the library :(');
+ mod_toastr.error('An error occured while attempting to update the library.');
}
}
});
} else {
this.edit_mode = false;
this.repaint(library);
- mod_toastr.info('Nothing has changed');
+ mod_toastr.info('Nothing has changed.');
}
},
@@ -184,13 +184,13 @@
} else if (Galaxy.libraries.preferences.get('with_deleted') === true){
row_view.repaint(library);
}
- mod_toastr.success('Library has been marked deleted');
+ mod_toastr.success('Library has been marked deleted.');
},
error: function(model, response){
if (typeof response.responseJSON !== "undefined"){
mod_toastr.error(response.responseJSON.err_msg);
} else {
- mod_toastr.error('An error occured during deleting the library :(');
+ mod_toastr.error('An error occured during deleting the library.');
}
}
});
@@ -210,13 +210,13 @@
Galaxy.libraries.libraryListView.collection.add(library);
row_view.edit_mode = false;
row_view.repaint(library);
- mod_toastr.success('Library has been undeleted');
+ mod_toastr.success('Library has been undeleted.');
},
error: function(model, response){
if (typeof response.responseJSON !== "undefined"){
mod_toastr.error(response.responseJSON.err_msg);
} else {
- mod_toastr.error('An error occured while undeleting the library :(');
+ mod_toastr.error('An error occured while undeleting the library.');
}
}
});
diff -r c059c1061efa625d6ad1ff2fc298db03b01e2c61 -r 48fc9b40fda9458d502055d4887f5028ee64aa64 client/galaxy/scripts/mvc/library/library-librarytoolbar-view.js
--- a/client/galaxy/scripts/mvc/library/library-librarytoolbar-view.js
+++ b/client/galaxy/scripts/mvc/library/library-librarytoolbar-view.js
@@ -62,18 +62,18 @@
self.modal.hide();
self.clear_library_modal();
Galaxy.libraries.libraryListView.render();
- mod_toastr.success('Library created');
+ mod_toastr.success('Library created.');
},
error: function(model, response){
if (typeof response.responseJSON !== "undefined"){
mod_toastr.error(response.responseJSON.err_msg);
} else {
- mod_toastr.error('An error occured :(');
+ mod_toastr.error('An error occured.');
}
}
});
} else {
- mod_toastr.error('Library\'s name is missing');
+ mod_toastr.error('Library\'s name is missing.');
}
return false;
},
diff -r c059c1061efa625d6ad1ff2fc298db03b01e2c61 -r 48fc9b40fda9458d502055d4887f5028ee64aa64 static/scripts/galaxy.library.js
--- a/static/scripts/galaxy.library.js
+++ b/static/scripts/galaxy.library.js
@@ -107,7 +107,7 @@
this.library_router.on('route:download', function(folder_id, format) {
if ($('#folder_list_body').find(':checked').length === 0) {
- mod_toastr.info('You have to select some datasets to download');
+ mod_toastr.info( 'You must select at least one dataset to download' );
Galaxy.libraries.library_router.navigate('folders/' + folder_id, {trigger: true, replace: true});
} else {
Galaxy.libraries.folderToolbarView.download(folder_id, format);
diff -r c059c1061efa625d6ad1ff2fc298db03b01e2c61 -r 48fc9b40fda9458d502055d4887f5028ee64aa64 static/scripts/mvc/library/library-dataset-view.js
--- a/static/scripts/mvc/library/library-dataset-view.js
+++ b/static/scripts/mvc/library/library-dataset-view.js
@@ -61,7 +61,7 @@
if (typeof response.responseJSON !== "undefined"){
mod_toastr.error(response.responseJSON.err_msg + ' Click this to go back.', '', {onclick: function() {Galaxy.libraries.library_router.back();}});
} else {
- mod_toastr.error('An error ocurred :(. Click this to go back.', '', {onclick: function() {Galaxy.libraries.library_router.back();}});
+ mod_toastr.error('An error ocurred. Click this to go back.', '', {onclick: function() {Galaxy.libraries.library_router.back();}});
}
}
});
@@ -93,7 +93,7 @@
if (typeof response.responseJSON !== "undefined"){
mod_toastr.error(response.responseJSON.err_msg);
} else {
- mod_toastr.error('An error ocurred :(');
+ mod_toastr.error('An error ocurred.');
}
}
});
@@ -136,7 +136,7 @@
$('<form action="'+ url +'" method="'+ (method||'post') +'">'+inputs+'</form>')
.appendTo('body').submit().remove();
- mod_toastr.info('Your download will begin soon');
+ mod_toastr.info('Your download will begin soon.');
}
},
@@ -171,7 +171,7 @@
if (typeof response.responseJSON !== "undefined"){
mod_toastr.error(response.responseJSON.err_msg);
} else {
- mod_toastr.error('An error ocurred :(');
+ mod_toastr.error('An error ocurred.');
}
}
});
@@ -197,7 +197,7 @@
if (typeof response.responseJSON !== "undefined"){
mod_toastr.error('Dataset not imported. ' + response.responseJSON.err_msg);
} else {
- mod_toastr.error('An error occured! Dataset not imported. Please try again.');
+ mod_toastr.error('An error occured. Dataset not imported. Please try again.');
}
}
});
@@ -235,7 +235,7 @@
$.get( "/api/libraries/datasets/" + self.id + "/permissions?scope=current").done(function(fetched_permissions) {
self.prepareSelectBoxes({fetched_permissions:fetched_permissions, is_admin:is_admin});
}).fail(function(){
- mod_toastr.error('An error occurred while fetching dataset permissions. :(');
+ mod_toastr.error('An error occurred while attempting to fetch dataset permissions.');
});
} else {
this.prepareSelectBoxes({is_admin:is_admin});
@@ -417,13 +417,13 @@
$('.access_perm').html(template({options:data.roles}));
self.accessSelectObject = $('#access_select').select2();
}).fail(function() {
- mod_toastr.error('An error occurred while fetching data with permissions. :(');
+ mod_toastr.error('An error occurred while attempting to fetch dataset permissions.');
});
}
},
comingSoon: function(){
- mod_toastr.warning('Feature coming soon');
+ mod_toastr.warning('Feature coming soon.');
},
copyToClipboard: function(){
@@ -439,9 +439,9 @@
$.post("/api/libraries/datasets/" + self.id + "/permissions?action=make_private").done(function(fetched_permissions) {
self.model.set({is_unrestricted:false});
self.showPermissions({fetched_permissions:fetched_permissions})
- mod_toastr.success('The dataset is now private to you');
+ mod_toastr.success('The dataset is now private to you.');
}).fail(function(){
- mod_toastr.error('An error occurred while making dataset private :(');
+ mod_toastr.error('An error occurred while attempting to make dataset private.');
});
},
@@ -451,10 +451,10 @@
.done(function(fetched_permissions) {
self.model.set({is_unrestricted:true});
self.showPermissions({fetched_permissions:fetched_permissions})
- mod_toastr.success('Access to this dataset is now unrestricted');
+ mod_toastr.success('Access to this dataset is now unrestricted.');
})
.fail(function(){
- mod_toastr.error('An error occurred while making dataset unrestricted :(');
+ mod_toastr.error('An error occurred while attempting to make dataset unrestricted.');
});
},
@@ -482,10 +482,10 @@
.done(function(fetched_permissions){
//fetch dataset again
self.showPermissions({fetched_permissions:fetched_permissions})
- mod_toastr.success('Permissions saved');
+ mod_toastr.success('Permissions saved.');
})
.fail(function(){
- mod_toastr.error('An error occurred while setting dataset permissions :(');
+ mod_toastr.error('An error occurred while attempting to set dataset permissions.');
})
},
diff -r c059c1061efa625d6ad1ff2fc298db03b01e2c61 -r 48fc9b40fda9458d502055d4887f5028ee64aa64 static/scripts/mvc/library/library-folder-view.js
--- a/static/scripts/mvc/library/library-folder-view.js
+++ b/static/scripts/mvc/library/library-folder-view.js
@@ -45,7 +45,7 @@
if (typeof response.responseJSON !== "undefined"){
mod_toastr.error(response.responseJSON.err_msg + ' Click this to go back.', '', {onclick: function() {Galaxy.libraries.library_router.back();}});
} else {
- mod_toastr.error('An error ocurred :(. Click this to go back.', '', {onclick: function() {Galaxy.libraries.library_router.back();}});
+ mod_toastr.error('An error ocurred. Click this to go back.', '', {onclick: function() {Galaxy.libraries.library_router.back();}});
}
}
});
@@ -84,7 +84,7 @@
$.get( "/api/folders/" + self.id + "/permissions?scope=current").done(function(fetched_permissions) {
self.prepareSelectBoxes({fetched_permissions:fetched_permissions});
}).fail(function(){
- mod_toastr.error('An error occurred while fetching folder permissions. :(');
+ mod_toastr.error('An error occurred while attempting to fetch folder permissions.');
});
} else {
this.prepareSelectBoxes({});
@@ -170,7 +170,7 @@
},
comingSoon: function(){
- mod_toastr.warning('Feature coming soon');
+ mod_toastr.warning('Feature coming soon.');
},
copyToClipboard: function(){
@@ -199,10 +199,10 @@
.done(function(fetched_permissions){
//fetch dataset again
self.showPermissions({fetched_permissions:fetched_permissions})
- mod_toastr.success('Permissions saved');
+ mod_toastr.success('Permissions saved.');
})
.fail(function(){
- mod_toastr.error('An error occurred while setting folder permissions :(');
+ mod_toastr.error('An error occurred while attempting to set folder permissions.');
})
},
diff -r c059c1061efa625d6ad1ff2fc298db03b01e2c61 -r 48fc9b40fda9458d502055d4887f5028ee64aa64 static/scripts/mvc/library/library-folderlist-view.js
--- a/static/scripts/mvc/library/library-folderlist-view.js
+++ b/static/scripts/mvc/library/library-folderlist-view.js
@@ -79,7 +79,7 @@
if (typeof response.responseJSON !== "undefined"){
mod_toastr.error(response.responseJSON.err_msg + ' Click this to go back.', '', {onclick: function() {Galaxy.libraries.library_router.back();}});
} else {
- mod_toastr.error('An error ocurred :(. Click this to go back.', '', {onclick: function() {Galaxy.libraries.library_router.back();}});
+ mod_toastr.error('An error ocurred. Click this to go back.', '', {onclick: function() {Galaxy.libraries.library_router.back();}});
}
}
});
diff -r c059c1061efa625d6ad1ff2fc298db03b01e2c61 -r 48fc9b40fda9458d502055d4887f5028ee64aa64 static/scripts/mvc/library/library-foldertoolbar-view.js
--- a/static/scripts/mvc/library/library-foldertoolbar-view.js
+++ b/static/scripts/mvc/library/library-foldertoolbar-view.js
@@ -124,7 +124,7 @@
folder.save(folderDetails, {
success: function (folder) {
Galaxy.modal.hide();
- mod_toastr.success('Folder created');
+ mod_toastr.success('Folder created.');
folder.set({'type' : 'folder'});
Galaxy.libraries.folderListView.collection.add(folder);
},
@@ -133,12 +133,12 @@
if (typeof response.responseJSON !== "undefined"){
mod_toastr.error(response.responseJSON.err_msg);
} else {
- mod_toastr.error('An error ocurred :(');
+ mod_toastr.error('An error ocurred.');
}
}
});
} else {
- mod_toastr.error('Folder\'s name is missing');
+ mod_toastr.error('Folder\'s name is missing.');
}
return false;
},
@@ -161,7 +161,7 @@
modalBulkImport : function(){
var checkedValues = $('#folder_table').find(':checked');
if(checkedValues.length === 0){
- mod_toastr.info('You have to select some datasets first');
+ mod_toastr.info('You must select some datasets first.');
} else {
this.refreshUserHistoriesList(function(that){
var template = that.templateBulkImportInModal();
@@ -190,7 +190,7 @@
if (typeof response.responseJSON !== "undefined"){
mod_toastr.error(response.responseJSON.err_msg);
} else {
- mod_toastr.error('An error ocurred :(');
+ mod_toastr.error('An error ocurred.');
}
}
});
@@ -275,9 +275,9 @@
// send request
$('<form action="'+ url +'" method="'+ (method||'post') +'">'+inputs+'</form>')
.appendTo( 'body' ).submit().remove();
- mod_toastr.info( 'Your download will begin soon' );
+ mod_toastr.info( 'Your download will begin soon.' );
} else {
- mod_toastr.error( 'An error occurred :(' );
+ mod_toastr.error( 'An error occurred.' );
}
},
@@ -306,7 +306,7 @@
self.fetchAndDisplayHistoryContents(event.target.value);
});
} else {
- mod_toastr.error( 'An error ocurred :(' );
+ mod_toastr.error( 'An error ocurred.' );
}
});
},
@@ -417,7 +417,7 @@
if (typeof response.responseJSON !== "undefined"){
mod_toastr.error(response.responseJSON.err_msg);
} else {
- mod_toastr.error('An error ocurred :(');
+ mod_toastr.error('An error ocurred.');
}
}
})
@@ -434,7 +434,7 @@
var paths = $('textarea#import_paths').val();
var valid_paths = [];
if (!paths){
- mod_toastr.info('Please enter a path relative to Galaxy root');
+ mod_toastr.info('Please enter a path relative to Galaxy root.');
} else {
this.modal.disableButton('Import');
paths = paths.split('\n');
@@ -497,7 +497,7 @@
var selection_type = selected_nodes[0].type;
var paths = [];
if ( selected_nodes.length < 1 ){
- mod_toastr.info( 'You have to select some items first' );
+ mod_toastr.info( 'You must select some items first.' );
} else {
this.modal.disableButton( 'Import' );
for ( var i = selected_nodes.length - 1; i >= 0; i-- ){
@@ -527,7 +527,7 @@
if (typeof response.responseJSON !== "undefined"){
mod_toastr.error(response.responseJSON.err_msg);
} else {
- mod_toastr.error('An error ocurred :(');
+ mod_toastr.error('An error ocurred.');
}
}
});
@@ -541,7 +541,7 @@
var history_dataset_ids = [];
var hdas_to_add = [];
if ( checked_hdas.length < 1 ){
- mod_toastr.info( 'You have to select some datasets first' );
+ mod_toastr.info( 'You must select some datasets first.' );
} else {
this.modal.disableButton( 'Add' );
checked_hdas.each(function(){
@@ -608,7 +608,7 @@
mod_toastr.success( 'Selected files imported into the current folder' );
Galaxy.modal.hide();
} else {
- mod_toastr.error( 'Something went wrong :(' );
+ mod_toastr.error( 'An error occured.' );
}
return true;
}
@@ -641,11 +641,11 @@
var popped_item = paths.pop();
if (typeof popped_item == "undefined") {
if (this.options.chain_call_control.failed_number === 0){
- mod_toastr.success('Selected folders and their contents imported into the current folder');
+ mod_toastr.success('Selected folders and their contents imported into the current folder.');
Galaxy.modal.hide();
} else {
// TODO better error report
- mod_toastr.error('Something went wrong :(');
+ mod_toastr.error('An error occured.');
}
return true;
}
@@ -755,7 +755,7 @@
deleteSelectedDatasets: function(){
var checkedValues = $('#folder_table').find(':checked');
if(checkedValues.length === 0){
- mod_toastr.info('You have to select some datasets first');
+ mod_toastr.info('You must select at least one dataset for deletion.');
} else {
var template = this.templateDeletingDatasetsProgressBar();
this.modal = Galaxy.modal;
@@ -812,7 +812,7 @@
if (typeof response.responseJSON !== "undefined"){
mod_toastr.error(response.responseJSON.err_msg);
} else {
- mod_toastr.error('An error ocurred :(');
+ mod_toastr.error('An error ocurred.');
}
}
})
diff -r c059c1061efa625d6ad1ff2fc298db03b01e2c61 -r 48fc9b40fda9458d502055d4887f5028ee64aa64 static/scripts/mvc/library/library-library-view.js
--- a/static/scripts/mvc/library/library-library-view.js
+++ b/static/scripts/mvc/library/library-library-view.js
@@ -45,7 +45,7 @@
if (typeof response.responseJSON !== "undefined"){
mod_toastr.error(response.responseJSON.err_msg + ' Click this to go back.', '', {onclick: function() {Galaxy.libraries.library_router.back();}});
} else {
- mod_toastr.error('An error ocurred :(. Click this to go back.', '', {onclick: function() {Galaxy.libraries.library_router.back();}});
+ mod_toastr.error('An error ocurred. Click this to go back.', '', {onclick: function() {Galaxy.libraries.library_router.back();}});
}
}
});
@@ -90,7 +90,7 @@
$.get( "/api/libraries/" + self.id + "/permissions?scope=current").done(function(fetched_permissions) {
self.prepareSelectBoxes({fetched_permissions:fetched_permissions});
}).fail(function(){
- mod_toastr.error('An error occurred while fetching library permissions. :(');
+ mod_toastr.error('An error occurred while attempting to fetch library permissions.');
});
} else {
this.prepareSelectBoxes({});
@@ -180,7 +180,7 @@
},
comingSoon: function(){
- mod_toastr.warning('Feature coming soon');
+ mod_toastr.warning('Feature coming soon.');
},
copyToClipboard: function(){
@@ -196,9 +196,9 @@
$.post("/api/libraries/datasets/" + self.id + "/permissions?action=make_private").done(function(fetched_permissions) {
self.model.set({is_unrestricted:false});
self.showPermissions({fetched_permissions:fetched_permissions})
- mod_toastr.success('The dataset is now private to you');
+ mod_toastr.success('The dataset is now private to you.');
}).fail(function(){
- mod_toastr.error('An error occurred while making dataset private :(');
+ mod_toastr.error('An error occurred while attempting to make dataset private.');
});
},
@@ -208,10 +208,10 @@
.done(function(fetched_permissions) {
self.model.set({is_unrestricted:true});
self.showPermissions({fetched_permissions:fetched_permissions})
- mod_toastr.success('Access to this dataset is now unrestricted');
+ mod_toastr.success('Access to this dataset is now unrestricted.');
})
.fail(function(){
- mod_toastr.error('An error occurred while making dataset unrestricted :(');
+ mod_toastr.error('An error occurred while attempting to make dataset unrestricted.');
});
},
@@ -234,10 +234,10 @@
.done(function(fetched_permissions){
//fetch dataset again
self.showPermissions({fetched_permissions:fetched_permissions})
- mod_toastr.success('Permissions saved');
+ mod_toastr.success('Permissions saved.');
})
.fail(function(){
- mod_toastr.error('An error occurred while setting library permissions :(');
+ mod_toastr.error('An error occurred while attempting to set library permissions.');
})
},
diff -r c059c1061efa625d6ad1ff2fc298db03b01e2c61 -r 48fc9b40fda9458d502055d4887f5028ee64aa64 static/scripts/mvc/library/library-librarylist-view.js
--- a/static/scripts/mvc/library/library-librarylist-view.js
+++ b/static/scripts/mvc/library/library-librarylist-view.js
@@ -40,7 +40,7 @@
if (typeof response.responseJSON !== "undefined"){
mod_toastr.error(response.responseJSON.err_msg);
} else {
- mod_toastr.error('An error ocurred :(');
+ mod_toastr.error('An error ocurred.');
}
}
});
diff -r c059c1061efa625d6ad1ff2fc298db03b01e2c61 -r 48fc9b40fda9458d502055d4887f5028ee64aa64 static/scripts/mvc/library/library-libraryrow-view.js
--- a/static/scripts/mvc/library/library-libraryrow-view.js
+++ b/static/scripts/mvc/library/library-libraryrow-view.js
@@ -126,7 +126,7 @@
library.set("name", new_name);
is_changed = true;
} else{
- mod_toastr.warning('Library name has to be at least 3 characters long');
+ mod_toastr.warning('Library name has to be at least 3 characters long.');
return;
}
}
@@ -150,20 +150,20 @@
success: function(library) {
row_view.edit_mode = false;
row_view.repaint(library);
- mod_toastr.success('Changes to library saved');
+ mod_toastr.success('Changes to library saved.');
},
error: function(model, response){
if (typeof response.responseJSON !== "undefined"){
mod_toastr.error(response.responseJSON.err_msg);
} else {
- mod_toastr.error('An error occured during updating the library :(');
+ mod_toastr.error('An error occured while attempting to update the library.');
}
}
});
} else {
this.edit_mode = false;
this.repaint(library);
- mod_toastr.info('Nothing has changed');
+ mod_toastr.info('Nothing has changed.');
}
},
@@ -184,13 +184,13 @@
} else if (Galaxy.libraries.preferences.get('with_deleted') === true){
row_view.repaint(library);
}
- mod_toastr.success('Library has been marked deleted');
+ mod_toastr.success('Library has been marked deleted.');
},
error: function(model, response){
if (typeof response.responseJSON !== "undefined"){
mod_toastr.error(response.responseJSON.err_msg);
} else {
- mod_toastr.error('An error occured during deleting the library :(');
+ mod_toastr.error('An error occured during deleting the library.');
}
}
});
@@ -210,13 +210,13 @@
Galaxy.libraries.libraryListView.collection.add(library);
row_view.edit_mode = false;
row_view.repaint(library);
- mod_toastr.success('Library has been undeleted');
+ mod_toastr.success('Library has been undeleted.');
},
error: function(model, response){
if (typeof response.responseJSON !== "undefined"){
mod_toastr.error(response.responseJSON.err_msg);
} else {
- mod_toastr.error('An error occured while undeleting the library :(');
+ mod_toastr.error('An error occured while undeleting the library.');
}
}
});
diff -r c059c1061efa625d6ad1ff2fc298db03b01e2c61 -r 48fc9b40fda9458d502055d4887f5028ee64aa64 static/scripts/mvc/library/library-librarytoolbar-view.js
--- a/static/scripts/mvc/library/library-librarytoolbar-view.js
+++ b/static/scripts/mvc/library/library-librarytoolbar-view.js
@@ -62,18 +62,18 @@
self.modal.hide();
self.clear_library_modal();
Galaxy.libraries.libraryListView.render();
- mod_toastr.success('Library created');
+ mod_toastr.success('Library created.');
},
error: function(model, response){
if (typeof response.responseJSON !== "undefined"){
mod_toastr.error(response.responseJSON.err_msg);
} else {
- mod_toastr.error('An error occured :(');
+ mod_toastr.error('An error occured.');
}
}
});
} else {
- mod_toastr.error('Library\'s name is missing');
+ mod_toastr.error('Library\'s name is missing.');
}
return false;
},
diff -r c059c1061efa625d6ad1ff2fc298db03b01e2c61 -r 48fc9b40fda9458d502055d4887f5028ee64aa64 static/scripts/packed/galaxy.library.js
--- a/static/scripts/packed/galaxy.library.js
+++ b/static/scripts/packed/galaxy.library.js
@@ -1,1 +1,1 @@
-define(["galaxy.masthead","utils/utils","libs/toastr","mvc/base-mvc","mvc/library/library-model","mvc/library/library-folderlist-view","mvc/library/library-librarylist-view","mvc/library/library-librarytoolbar-view","mvc/library/library-foldertoolbar-view","mvc/library/library-dataset-view","mvc/library/library-library-view","mvc/library/library-folder-view"],function(h,e,j,n,k,c,i,g,l,f,b,a){var o=Backbone.Router.extend({initialize:function(){this.routesHit=0;Backbone.history.on("route",function(){this.routesHit++},this)},routes:{"":"libraries","library/:library_id/permissions":"library_permissions","folders/:folder_id/permissions":"folder_permissions","folders/:id":"folder_content","folders/:folder_id/datasets/:dataset_id":"dataset_detail","folders/:folder_id/datasets/:dataset_id/permissions":"dataset_permissions","folders/:folder_id/datasets/:dataset_id/versions/:ldda_id":"dataset_version","folders/:folder_id/download/:format":"download","folders/:folder_id/import/:source":"import_datasets"},back:function(){if(this.routesHit>1){window.history.back()}else{this.navigate("#",{trigger:true,replace:true})}}});var m=n.SessionStorageModel.extend({defaults:{with_deleted:false,sort_order:"asc",sort_by:"name"}});var d=Backbone.View.extend({libraryToolbarView:null,libraryListView:null,library_router:null,libraryView:null,folderToolbarView:null,folderListView:null,datasetView:null,initialize:function(){Galaxy.libraries=this;this.preferences=new m({id:"global-lib-prefs"});this.library_router=new o();this.library_router.on("route:libraries",function(){Galaxy.libraries.libraryToolbarView=new g.LibraryToolbarView();Galaxy.libraries.libraryListView=new i.LibraryListView()});this.library_router.on("route:folder_content",function(p){if(Galaxy.libraries.folderToolbarView){Galaxy.libraries.folderToolbarView.$el.unbind("click")}Galaxy.libraries.folderToolbarView=new l.FolderToolbarView({id:p});Galaxy.libraries.folderListView=new c.FolderListView({id:p})});this.library_router.on("route:download",function(p,q){if($("#folder_list_body").find(":checked").length===0){j.info("You have to select some datasets to download");Galaxy.libraries.library_router.navigate("folders/"+p,{trigger:true,replace:true})}else{Galaxy.libraries.folderToolbarView.download(p,q);Galaxy.libraries.library_router.navigate("folders/"+p,{trigger:false,replace:true})}});this.library_router.on("route:dataset_detail",function(q,p){if(Galaxy.libraries.datasetView){Galaxy.libraries.datasetView.$el.unbind("click")}Galaxy.libraries.datasetView=new f.LibraryDatasetView({id:p})});this.library_router.on("route:dataset_version",function(q,p,r){if(Galaxy.libraries.datasetView){Galaxy.libraries.datasetView.$el.unbind("click")}Galaxy.libraries.datasetView=new f.LibraryDatasetView({id:p,ldda_id:r,show_version:true})});this.library_router.on("route:dataset_permissions",function(q,p){if(Galaxy.libraries.datasetView){Galaxy.libraries.datasetView.$el.unbind("click")}Galaxy.libraries.datasetView=new f.LibraryDatasetView({id:p,show_permissions:true})});this.library_router.on("route:library_permissions",function(p){if(Galaxy.libraries.libraryView){Galaxy.libraries.libraryView.$el.unbind("click")}Galaxy.libraries.libraryView=new b.LibraryView({id:p,show_permissions:true})});this.library_router.on("route:folder_permissions",function(p){if(Galaxy.libraries.folderView){Galaxy.libraries.folderView.$el.unbind("click")}Galaxy.libraries.folderView=new a.FolderView({id:p,show_permissions:true})});this.library_router.on("route:import_datasets",function(p,q){if(Galaxy.libraries.folderToolbarView&&Galaxy.libraries.folderListView){Galaxy.libraries.folderToolbarView.showImportModal({source:q})}else{Galaxy.libraries.folderToolbarView=new l.FolderToolbarView({id:p});Galaxy.libraries.folderListView=new c.FolderListView({id:p});Galaxy.libraries.folderToolbarView.showImportModal({source:q})}});Backbone.history.start({pushState:false})}});return{GalaxyApp:d}});
\ No newline at end of file
+define(["galaxy.masthead","utils/utils","libs/toastr","mvc/base-mvc","mvc/library/library-model","mvc/library/library-folderlist-view","mvc/library/library-librarylist-view","mvc/library/library-librarytoolbar-view","mvc/library/library-foldertoolbar-view","mvc/library/library-dataset-view","mvc/library/library-library-view","mvc/library/library-folder-view"],function(h,e,j,n,k,c,i,g,l,f,b,a){var o=Backbone.Router.extend({initialize:function(){this.routesHit=0;Backbone.history.on("route",function(){this.routesHit++},this)},routes:{"":"libraries","library/:library_id/permissions":"library_permissions","folders/:folder_id/permissions":"folder_permissions","folders/:id":"folder_content","folders/:folder_id/datasets/:dataset_id":"dataset_detail","folders/:folder_id/datasets/:dataset_id/permissions":"dataset_permissions","folders/:folder_id/datasets/:dataset_id/versions/:ldda_id":"dataset_version","folders/:folder_id/download/:format":"download","folders/:folder_id/import/:source":"import_datasets"},back:function(){if(this.routesHit>1){window.history.back()}else{this.navigate("#",{trigger:true,replace:true})}}});var m=n.SessionStorageModel.extend({defaults:{with_deleted:false,sort_order:"asc",sort_by:"name"}});var d=Backbone.View.extend({libraryToolbarView:null,libraryListView:null,library_router:null,libraryView:null,folderToolbarView:null,folderListView:null,datasetView:null,initialize:function(){Galaxy.libraries=this;this.preferences=new m({id:"global-lib-prefs"});this.library_router=new o();this.library_router.on("route:libraries",function(){Galaxy.libraries.libraryToolbarView=new g.LibraryToolbarView();Galaxy.libraries.libraryListView=new i.LibraryListView()});this.library_router.on("route:folder_content",function(p){if(Galaxy.libraries.folderToolbarView){Galaxy.libraries.folderToolbarView.$el.unbind("click")}Galaxy.libraries.folderToolbarView=new l.FolderToolbarView({id:p});Galaxy.libraries.folderListView=new c.FolderListView({id:p})});this.library_router.on("route:download",function(p,q){if($("#folder_list_body").find(":checked").length===0){j.info("You must select at least one dataset to download");Galaxy.libraries.library_router.navigate("folders/"+p,{trigger:true,replace:true})}else{Galaxy.libraries.folderToolbarView.download(p,q);Galaxy.libraries.library_router.navigate("folders/"+p,{trigger:false,replace:true})}});this.library_router.on("route:dataset_detail",function(q,p){if(Galaxy.libraries.datasetView){Galaxy.libraries.datasetView.$el.unbind("click")}Galaxy.libraries.datasetView=new f.LibraryDatasetView({id:p})});this.library_router.on("route:dataset_version",function(q,p,r){if(Galaxy.libraries.datasetView){Galaxy.libraries.datasetView.$el.unbind("click")}Galaxy.libraries.datasetView=new f.LibraryDatasetView({id:p,ldda_id:r,show_version:true})});this.library_router.on("route:dataset_permissions",function(q,p){if(Galaxy.libraries.datasetView){Galaxy.libraries.datasetView.$el.unbind("click")}Galaxy.libraries.datasetView=new f.LibraryDatasetView({id:p,show_permissions:true})});this.library_router.on("route:library_permissions",function(p){if(Galaxy.libraries.libraryView){Galaxy.libraries.libraryView.$el.unbind("click")}Galaxy.libraries.libraryView=new b.LibraryView({id:p,show_permissions:true})});this.library_router.on("route:folder_permissions",function(p){if(Galaxy.libraries.folderView){Galaxy.libraries.folderView.$el.unbind("click")}Galaxy.libraries.folderView=new a.FolderView({id:p,show_permissions:true})});this.library_router.on("route:import_datasets",function(p,q){if(Galaxy.libraries.folderToolbarView&&Galaxy.libraries.folderListView){Galaxy.libraries.folderToolbarView.showImportModal({source:q})}else{Galaxy.libraries.folderToolbarView=new l.FolderToolbarView({id:p});Galaxy.libraries.folderListView=new c.FolderListView({id:p});Galaxy.libraries.folderToolbarView.showImportModal({source:q})}});Backbone.history.start({pushState:false})}});return{GalaxyApp:d}});
\ No newline at end of file
diff -r c059c1061efa625d6ad1ff2fc298db03b01e2c61 -r 48fc9b40fda9458d502055d4887f5028ee64aa64 static/scripts/packed/mvc/library/library-dataset-view.js
--- a/static/scripts/packed/mvc/library/library-dataset-view.js
+++ b/static/scripts/packed/mvc/library/library-dataset-view.js
@@ -1,1 +1,1 @@
-define(["libs/toastr","mvc/library/library-model","mvc/ui/ui-select"],function(d,c,b){var a=Backbone.View.extend({el:"#center",model:null,options:{},events:{"click .toolbtn_modify_dataset":"enableModification","click .toolbtn_cancel_modifications":"render","click .toolbtn-download-dataset":"downloadDataset","click .toolbtn-import-dataset":"importIntoHistory","click .toolbtn-share-dataset":"shareDataset","click .btn-copy-link-to-clipboard":"copyToClipboard","click .btn-make-private":"makeDatasetPrivate","click .btn-remove-restrictions":"removeDatasetRestrictions","click .toolbtn_save_permissions":"savePermissions","click .toolbtn_save_modifications":"comingSoon",},initialize:function(e){this.options=_.extend(this.options,e);if(this.options.id){this.fetchDataset()}},fetchDataset:function(e){this.options=_.extend(this.options,e);this.model=new c.Item({id:this.options.id});var f=this;this.model.fetch({success:function(){if(f.options.show_permissions){f.showPermissions()}else{if(f.options.show_version){f.fetchVersion()}else{f.render()}}},error:function(h,g){if(typeof g.responseJSON!=="undefined"){d.error(g.responseJSON.err_msg+" Click this to go back.","",{onclick:function(){Galaxy.libraries.library_router.back()}})}else{d.error("An error ocurred :(. Click this to go back.","",{onclick:function(){Galaxy.libraries.library_router.back()}})}}})},render:function(e){this.options=_.extend(this.options,e);$(".tooltip").remove();var f=this.templateDataset();this.$el.html(f({item:this.model}));$(".peek").html(this.model.get("peek"));$("#center [data-toggle]").tooltip()},fetchVersion:function(e){this.options=_.extend(this.options,e);that=this;if(!this.options.ldda_id){this.render();d.error("Library dataset version requested but no id provided.")}else{this.ldda=new c.Ldda({id:this.options.ldda_id});this.ldda.url=this.ldda.urlRoot+this.model.id+"/versions/"+this.ldda.id;this.ldda.fetch({success:function(){that.renderVersion()},error:function(g,f){if(typeof f.responseJSON!=="undefined"){d.error(f.responseJSON.err_msg)}else{d.error("An error ocurred :(")}}})}},renderVersion:function(){$(".tooltip").remove();var e=this.templateVersion();this.$el.html(e({item:this.model,ldda:this.ldda}));$(".peek").html(this.ldda.get("peek"))},enableModification:function(){$(".tooltip").remove();var e=this.templateModifyDataset();this.$el.html(e({item:this.model}));$(".peek").html(this.model.get("peek"));$("#center [data-toggle]").tooltip()},downloadDataset:function(){var e="/api/libraries/datasets/download/uncompressed";var f={ldda_ids:this.id};this.processDownload(e,f)},processDownload:function(f,g,h){if(f&&g){g=typeof g=="string"?g:$.param(g);var e="";$.each(g.split("&"),function(){var i=this.split("=");e+='<input type="hidden" name="'+i[0]+'" value="'+i[1]+'" />'});$('<form action="'+f+'" method="'+(h||"post")+'">'+e+"</form>").appendTo("body").submit().remove();d.info("Your download will begin soon")}},importIntoHistory:function(){this.refreshUserHistoriesList(function(e){var f=e.templateBulkImportInModal();e.modal=Galaxy.modal;e.modal.show({closing_events:true,title:"Import into History",body:f({histories:e.histories.models}),buttons:{Import:function(){e.importCurrentIntoHistory()},Close:function(){Galaxy.modal.hide()}}})})},refreshUserHistoriesList:function(f){var e=this;this.histories=new c.GalaxyHistories();this.histories.fetch({success:function(g){if(g.length===0){d.warning("You have to create history first. Click this to do so.","",{onclick:function(){window.location="/"}})}else{f(e)}},error:function(h,g){if(typeof g.responseJSON!=="undefined"){d.error(g.responseJSON.err_msg)}else{d.error("An error ocurred :(")}}})},importCurrentIntoHistory:function(){var e=$(this.modal.elMain).find("select[name=dataset_import_single] option:selected").val();var f=new c.HistoryItem();f.url=f.urlRoot+e+"/contents";jQuery.getJSON(galaxy_config.root+"history/set_as_current?id="+e);f.save({content:this.id,source:"library"},{success:function(){Galaxy.modal.hide();d.success("Dataset imported. Click this to start analysing it.","",{onclick:function(){window.location="/"}})},error:function(h,g){if(typeof g.responseJSON!=="undefined"){d.error("Dataset not imported. "+g.responseJSON.err_msg)}else{d.error("An error occured! Dataset not imported. Please try again.")}}})},shareDataset:function(){d.info("Feature coming soon.")},goBack:function(){Galaxy.libraries.library_router.back()},showPermissions:function(f){this.options=_.extend(this.options,f);$(".tooltip").remove();if(this.options.fetched_permissions!==undefined){if(this.options.fetched_permissions.access_dataset_roles.length===0){this.model.set({is_unrestricted:true})}else{this.model.set({is_unrestricted:false})}}var h=false;if(Galaxy.currUser){h=Galaxy.currUser.isAdmin()}var g=this.templateDatasetPermissions();this.$el.html(g({item:this.model,is_admin:h}));var e=this;if(this.options.fetched_permissions===undefined){$.get("/api/libraries/datasets/"+e.id+"/permissions?scope=current").done(function(i){e.prepareSelectBoxes({fetched_permissions:i,is_admin:h})}).fail(function(){d.error("An error occurred while fetching dataset permissions. :(")})}else{this.prepareSelectBoxes({is_admin:h})}$("#center [data-toggle]").tooltip();$("#center").css("overflow","auto")},prepareSelectBoxes:function(r){this.options=_.extend(this.options,r);var s=this.options.fetched_permissions;var k=this.options.is_admin;var q=this;var m=[];for(var h=0;h<s.access_dataset_roles.length;h++){m.push(s.access_dataset_roles[h]+":"+s.access_dataset_roles[h])}var f=[];for(var h=0;h<s.modify_item_roles.length;h++){f.push(s.modify_item_roles[h]+":"+s.modify_item_roles[h])}var g=[];for(var h=0;h<s.manage_dataset_roles.length;h++){g.push(s.manage_dataset_roles[h]+":"+s.manage_dataset_roles[h])}if(k){var o={minimumInputLength:0,css:"access_perm",multiple:true,placeholder:"Click to select a role",container:q.$el.find("#access_perm"),ajax:{url:"/api/libraries/datasets/"+q.id+"/permissions?scope=available",dataType:"json",quietMillis:100,data:function(i,t){return{q:i,page_limit:10,page:t}},results:function(u,t){var i=(t*10)<u.total;return{results:u.roles,more:i}}},formatResult:function j(i){return i.name+" type: "+i.type},formatSelection:function e(i){return i.name},initSelection:function(i,u){var t=[];$(i.val().split(",")).each(function(){var v=this.split(":");t.push({id:v[1],name:v[1]})});u(t)},initialData:m.join(","),dropdownCssClass:"bigdrop"};var l={minimumInputLength:0,css:"modify_perm",multiple:true,placeholder:"Click to select a role",container:q.$el.find("#modify_perm"),ajax:{url:"/api/libraries/datasets/"+q.id+"/permissions?scope=available",dataType:"json",quietMillis:100,data:function(i,t){return{q:i,page_limit:10,page:t}},results:function(u,t){var i=(t*10)<u.total;return{results:u.roles,more:i}}},formatResult:function j(i){return i.name+" type: "+i.type},formatSelection:function e(i){return i.name},initSelection:function(i,u){var t=[];$(i.val().split(",")).each(function(){var v=this.split(":");t.push({id:v[1],name:v[1]})});u(t)},initialData:f.join(","),dropdownCssClass:"bigdrop"};var p={minimumInputLength:0,css:"manage_perm",multiple:true,placeholder:"Click to select a role",container:q.$el.find("#manage_perm"),ajax:{url:"/api/libraries/datasets/"+q.id+"/permissions?scope=available",dataType:"json",quietMillis:100,data:function(i,t){return{q:i,page_limit:10,page:t}},results:function(u,t){var i=(t*10)<u.total;return{results:u.roles,more:i}}},formatResult:function j(i){return i.name+" type: "+i.type},formatSelection:function e(i){return i.name},initSelection:function(i,u){var t=[];$(i.val().split(",")).each(function(){var v=this.split(":");t.push({id:v[1],name:v[1]})});u(t)},initialData:g.join(","),dropdownCssClass:"bigdrop"};q.accessSelectObject=new b.View(o);q.modifySelectObject=new b.View(l);q.manageSelectObject=new b.View(p)}else{var n=q.templateAccessSelect();$.get("/api/libraries/datasets/"+q.id+"/permissions?scope=available",function(i){$(".access_perm").html(n({options:i.roles}));q.accessSelectObject=$("#access_select").select2()}).fail(function(){d.error("An error occurred while fetching data with permissions. :(")})}},comingSoon:function(){d.warning("Feature coming soon")},copyToClipboard:function(){var e=Backbone.history.location.href;if(e.lastIndexOf("/permissions")!==-1){e=e.substr(0,e.lastIndexOf("/permissions"))}window.prompt("Copy to clipboard: Ctrl+C, Enter",e)},makeDatasetPrivate:function(){var e=this;$.post("/api/libraries/datasets/"+e.id+"/permissions?action=make_private").done(function(f){e.model.set({is_unrestricted:false});e.showPermissions({fetched_permissions:f});d.success("The dataset is now private to you")}).fail(function(){d.error("An error occurred while making dataset private :(")})},removeDatasetRestrictions:function(){var e=this;$.post("/api/libraries/datasets/"+e.id+"/permissions?action=remove_restrictions").done(function(f){e.model.set({is_unrestricted:true});e.showPermissions({fetched_permissions:f});d.success("Access to this dataset is now unrestricted")}).fail(function(){d.error("An error occurred while making dataset unrestricted :(")})},savePermissions:function(e){var n=this;var k=this.accessSelectObject.$el.select2("data");var f=this.manageSelectObject.$el.select2("data");var m=this.modifySelectObject.$el.select2("data");var g=[];var j=[];var l=[];for(var h=k.length-1;h>=0;h--){g.push(k[h].id)}for(var h=f.length-1;h>=0;h--){j.push(f[h].id)}for(var h=m.length-1;h>=0;h--){l.push(m[h].id)}$.post("/api/libraries/datasets/"+n.id+"/permissions?action=set_permissions",{"access_ids[]":g,"manage_ids[]":j,"modify_ids[]":l,}).done(function(i){n.showPermissions({fetched_permissions:i});d.success("Permissions saved")}).fail(function(){d.error("An error occurred while setting dataset permissions :(")})},templateDataset:function(){var e=[];e.push('<div class="library_style_container">');e.push(' <div id="library_toolbar">');e.push(' <button data-toggle="tooltip" data-placement="top" title="Download dataset" class="btn btn-default toolbtn-download-dataset primary-button" type="button"><span class="fa fa-download"></span> Download</span></button>');e.push(' <button data-toggle="tooltip" data-placement="top" title="Import dataset into history" class="btn btn-default toolbtn-import-dataset primary-button" type="button"><span class="fa fa-book"></span> to History</span></button>');e.push(' <% if (item.get("can_user_modify")) { %>');e.push(' <button data-toggle="tooltip" data-placement="top" title="Modify library item" class="btn btn-default toolbtn_modify_dataset primary-button" type="button"><span class="fa fa-pencil"></span> Modify</span></button>');e.push(" <% } %>");e.push(' <% if (item.get("can_user_manage")) { %>');e.push(' <a href="#folders/<%- item.get("folder_id") %>/datasets/<%- item.id %>/permissions"><button data-toggle="tooltip" data-placement="top" title="Manage permissions" class="btn btn-default toolbtn_change_permissions primary-button" type="button"><span class="fa fa-group"></span> Permissions</span></button></a>');e.push(' <button data-toggle="tooltip" data-placement="top" title="Share dataset" class="btn btn-default toolbtn-share-dataset primary-button" type="button"><span class="fa fa-share"></span> Share</span></button>');e.push(" <% } %>");e.push(" </div>");e.push('<ol class="breadcrumb">');e.push(' <li><a title="Return to the list of libraries" href="#">Libraries</a></li>');e.push(' <% _.each(item.get("full_path"), function(path_item) { %>');e.push(" <% if (path_item[0] != item.id) { %>");e.push(' <li><a title="Return to this folder" href="#/folders/<%- path_item[0] %>"><%- path_item[1] %></a></li> ');e.push("<% } else { %>");e.push(' <li class="active"><span title="You are here"><%- path_item[1] %></span></li>');e.push(" <% } %>");e.push(" <% }); %>");e.push("</ol>");e.push('<% if (item.get("is_unrestricted")) { %>');e.push(' <div class="alert alert-info">');e.push(" This dataset is unrestricted so everybody can access it. Just share the URL of this page. ");e.push(' <button data-toggle="tooltip" data-placement="top" title="Copy to clipboard" class="btn btn-default btn-copy-link-to-clipboard primary-button" type="button"><span class="fa fa-clipboard"></span> To Clipboard</span></button> ');e.push(" </div>");e.push("<% } %>");e.push('<div class="dataset_table">');e.push(' <table class="grid table table-striped table-condensed">');e.push(" <tr>");e.push(' <th scope="row" id="id_row" data-id="<%= _.escape(item.get("ldda_id")) %>">Name</th>');e.push(' <td><%= _.escape(item.get("name")) %></td>');e.push(" </tr>");e.push(' <% if (item.get("file_ext")) { %>');e.push(" <tr>");e.push(' <th scope="row">Data type</th>');e.push(' <td><%= _.escape(item.get("file_ext")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(' <% if (item.get("genome_build")) { %>');e.push(" <tr>");e.push(' <th scope="row">Genome build</th>');e.push(' <td><%= _.escape(item.get("genome_build")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(' <% if (item.get("file_size")) { %>');e.push(" <tr>");e.push(' <th scope="row">Size</th>');e.push(' <td><%= _.escape(item.get("file_size")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(' <% if (item.get("date_uploaded")) { %>');e.push(" <tr>");e.push(' <th scope="row">Date uploaded (UTC)</th>');e.push(' <td><%= _.escape(item.get("date_uploaded")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(' <% if (item.get("uploaded_by")) { %>');e.push(" <tr>");e.push(' <th scope="row">Uploaded by</th>');e.push(' <td><%= _.escape(item.get("uploaded_by")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(' <% if (item.get("metadata_data_lines")) { %>');e.push(" <tr>");e.push(' <th scope="row">Data Lines</th>');e.push(' <td scope="row"><%= _.escape(item.get("metadata_data_lines")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(' <% if (item.get("metadata_comment_lines")) { %>');e.push(" <tr>");e.push(' <th scope="row">Comment Lines</th>');e.push(' <td scope="row"><%= _.escape(item.get("metadata_comment_lines")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(' <% if (item.get("metadata_columns")) { %>');e.push(" <tr>");e.push(' <th scope="row">Number of Columns</th>');e.push(' <td scope="row"><%= _.escape(item.get("metadata_columns")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(' <% if (item.get("metadata_column_types")) { %>');e.push(" <tr>");e.push(' <th scope="row">Column Types</th>');e.push(' <td scope="row"><%= _.escape(item.get("metadata_column_types")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(' <% if (item.get("message")) { %>');e.push(" <tr>");e.push(' <th scope="row">Message</th>');e.push(' <td scope="row"><%= _.escape(item.get("message")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(' <% if (item.get("misc_blurb")) { %>');e.push(" <tr>");e.push(' <th scope="row">Miscellaneous blurb</th>');e.push(' <td scope="row"><%= _.escape(item.get("misc_blurb")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(' <% if (item.get("misc_info")) { %>');e.push(" <tr>");e.push(' <th scope="row">Miscellaneous information</th>');e.push(' <td scope="row"><%= _.escape(item.get("misc_info")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(" </table>");e.push(" <div>");e.push(' <pre class="peek">');e.push(" </pre>");e.push(" </div>");e.push(' <% if (item.get("has_versions")) { %>');e.push(" <div>");e.push(" <h3>Expired versions:</h3>");e.push(" <ul>");e.push(' <% _.each(item.get("expired_versions"), function(version) { %>');e.push(' <li><a title="See details of this version" href="#folders/<%- item.get("folder_id") %>/datasets/<%- item.id %>/versions/<%- version[0] %>"><%- version[1] %></a></li>');e.push(" <% }) %>");e.push(" <ul>");e.push(" </div>");e.push(" <% } %>");e.push("</div>");e.push("</div>");return _.template(e.join(""))},templateVersion:function(){var e=[];e.push('<div class="library_style_container">');e.push(' <div id="library_toolbar">');e.push(' <a href="#folders/<%- item.get("folder_id") %>/datasets/<%- item.id %>"><button data-toggle="tooltip" data-placement="top" title="Go to latest dataset" class="btn btn-default primary-button" type="button"><span class="fa fa-caret-left fa-lg"></span> Latest dataset</span></button><a>');e.push(" </div>");e.push('<ol class="breadcrumb">');e.push(' <li><a title="Return to the list of libraries" href="#">Libraries</a></li>');e.push(' <% _.each(item.get("full_path"), function(path_item) { %>');e.push(" <% if (path_item[0] != item.id) { %>");e.push(' <li><a title="Return to this folder" href="#/folders/<%- path_item[0] %>"><%- path_item[1] %></a></li> ');e.push("<% } else { %>");e.push(' <li class="active"><span title="You are here"><%- path_item[1] %></span></li>');e.push(" <% } %>");e.push(" <% }); %>");e.push("</ol>");e.push(' <div class="alert alert-warning">This is an expired version of the library dataset: <%= _.escape(item.get("name")) %></div>');e.push('<div class="dataset_table">');e.push(' <table class="grid table table-striped table-condensed">');e.push(" <tr>");e.push(' <th scope="row" id="id_row" data-id="<%= _.escape(ldda.id) %>">Name</th>');e.push(' <td><%= _.escape(ldda.get("name")) %></td>');e.push(" </tr>");e.push(' <% if (ldda.get("file_ext")) { %>');e.push(" <tr>");e.push(' <th scope="row">Data type</th>');e.push(' <td><%= _.escape(ldda.get("file_ext")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(' <% if (ldda.get("genome_build")) { %>');e.push(" <tr>");e.push(' <th scope="row">Genome build</th>');e.push(' <td><%= _.escape(ldda.get("genome_build")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(' <% if (ldda.get("file_size")) { %>');e.push(" <tr>");e.push(' <th scope="row">Size</th>');e.push(' <td><%= _.escape(ldda.get("file_size")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(' <% if (ldda.get("date_uploaded")) { %>');e.push(" <tr>");e.push(' <th scope="row">Date uploaded (UTC)</th>');e.push(' <td><%= _.escape(ldda.get("date_uploaded")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(' <% if (ldda.get("uploaded_by")) { %>');e.push(" <tr>");e.push(' <th scope="row">Uploaded by</th>');e.push(' <td><%= _.escape(ldda.get("uploaded_by")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(' <% if (ldda.get("metadata_data_lines")) { %>');e.push(" <tr>");e.push(' <th scope="row">Data Lines</th>');e.push(' <td scope="row"><%= _.escape(ldda.get("metadata_data_lines")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(' <% if (ldda.get("metadata_comment_lines")) { %>');e.push(" <tr>");e.push(' <th scope="row">Comment Lines</th>');e.push(' <td scope="row"><%= _.escape(ldda.get("metadata_comment_lines")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(' <% if (ldda.get("metadata_columns")) { %>');e.push(" <tr>");e.push(' <th scope="row">Number of Columns</th>');e.push(' <td scope="row"><%= _.escape(ldda.get("metadata_columns")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(' <% if (ldda.get("metadata_column_types")) { %>');e.push(" <tr>");e.push(' <th scope="row">Column Types</th>');e.push(' <td scope="row"><%= _.escape(ldda.get("metadata_column_types")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(' <% if (ldda.get("message")) { %>');e.push(" <tr>");e.push(' <th scope="row">Message</th>');e.push(' <td scope="row"><%= _.escape(ldda.get("message")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(' <% if (ldda.get("misc_blurb")) { %>');e.push(" <tr>");e.push(' <th scope="row">Miscellaneous blurb</th>');e.push(' <td scope="row"><%= _.escape(ldda.get("misc_blurb")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(' <% if (ldda.get("misc_info")) { %>');e.push(" <tr>");e.push(' <th scope="row">Miscellaneous information</th>');e.push(' <td scope="row"><%= _.escape(ldda.get("misc_info")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(" </table>");e.push(" <div>");e.push(' <pre class="peek">');e.push(" </pre>");e.push(" </div>");e.push("</div>");e.push("</div>");return _.template(e.join(""))},templateModifyDataset:function(){var e=[];e.push('<div class="library_style_container">');e.push(' <div id="library_toolbar">');e.push(' <button data-toggle="tooltip" data-placement="top" title="Cancel modifications" class="btn btn-default toolbtn_cancel_modifications primary-button" type="button"><span class="fa fa-times"></span> Cancel</span></button>');e.push(' <button data-toggle="tooltip" data-placement="top" title="Save modifications" class="btn btn-default toolbtn_save_modifications primary-button" type="button"><span class="fa fa-floppy-o"></span> Save</span></button>');e.push(" </div>");e.push('<ol class="breadcrumb">');e.push(' <li><a title="Return to the list of libraries" href="#">Libraries</a></li>');e.push(' <% _.each(item.get("full_path"), function(path_item) { %>');e.push(" <% if (path_item[0] != item.id) { %>");e.push(' <li><a title="Return to this folder" href="#/folders/<%- path_item[0] %>"><%- path_item[1] %></a></li> ');e.push("<% } else { %>");e.push(' <li class="active"><span title="You are here"><%- path_item[1] %></span></li>');e.push(" <% } %>");e.push(" <% }); %>");e.push("</ol>");e.push('<div class="dataset_table">');e.push('<p>For more editing options please import the dataset to history and use "Edit attributes" on it.</p>');e.push(' <table class="grid table table-striped table-condensed">');e.push(" <tr>");e.push(' <th scope="row" id="id_row" data-id="<%= _.escape(item.get("ldda_id")) %>">Name</th>');e.push(' <td><input class="input_dataset_name form-control" type="text" placeholder="name" value="<%= _.escape(item.get("name")) %>"></td>');e.push(" </tr>");e.push(" <tr>");e.push(' <th scope="row">Data type</th>');e.push(' <td><%= _.escape(item.get("file_ext")) %></td>');e.push(" </tr>");e.push(" <tr>");e.push(' <th scope="row">Genome build</th>');e.push(' <td><%= _.escape(item.get("genome_build")) %></td>');e.push(" </tr>");e.push(" <tr>");e.push(' <th scope="row">Size</th>');e.push(' <td><%= _.escape(item.get("file_size")) %></td>');e.push(" </tr>");e.push(" <tr>");e.push(' <th scope="row">Date uploaded (UTC)</th>');e.push(' <td><%= _.escape(item.get("date_uploaded")) %></td>');e.push(" </tr>");e.push(" <tr>");e.push(' <th scope="row">Uploaded by</th>');e.push(' <td><%= _.escape(item.get("uploaded_by")) %></td>');e.push(" </tr>");e.push(' <tr scope="row">');e.push(' <th scope="row">Data Lines</th>');e.push(' <td scope="row"><%= _.escape(item.get("metadata_data_lines")) %></td>');e.push(" </tr>");e.push(' <th scope="row">Comment Lines</th>');e.push(' <% if (item.get("metadata_comment_lines") === "") { %>');e.push(' <td scope="row"><%= _.escape(item.get("metadata_comment_lines")) %></td>');e.push(" <% } else { %>");e.push(' <td scope="row">unknown</td>');e.push(" <% } %>");e.push(" </tr>");e.push(" <tr>");e.push(' <th scope="row">Number of Columns</th>');e.push(' <td scope="row"><%= _.escape(item.get("metadata_columns")) %></td>');e.push(" </tr>");e.push(" <tr>");e.push(' <th scope="row">Column Types</th>');e.push(' <td scope="row"><%= _.escape(item.get("metadata_column_types")) %></td>');e.push(" </tr>");e.push(" <tr>");e.push(' <th scope="row">Message</th>');e.push(' <td scope="row"><%= _.escape(item.get("message")) %></td>');e.push(" </tr>");e.push(" <tr>");e.push(' <th scope="row">Miscellaneous information</th>');e.push(' <td scope="row"><%= _.escape(item.get("misc_info")) %></td>');e.push(" </tr>");e.push(" <tr>");e.push(' <th scope="row">Miscellaneous blurb</th>');e.push(' <td scope="row"><%= _.escape(item.get("misc_blurb")) %></td>');e.push(" </tr>");e.push(" </table>");e.push("<div>");e.push(' <pre class="peek">');e.push(" </pre>");e.push("</div>");e.push("</div>");e.push("</div>");return _.template(e.join(""))},templateDatasetPermissions:function(){var e=[];e.push('<div class="library_style_container">');e.push(' <div id="library_toolbar">');e.push(' <a href="#folders/<%- item.get("folder_id") %>"><button data-toggle="tooltip" data-placement="top" title="Go back to containing folder" class="btn btn-default primary-button" type="button"><span class="fa fa-folder-open-o"></span> Containing Folder</span></button></a>');e.push(' <a href="#folders/<%- item.get("folder_id") %>/datasets/<%- item.id %>"><button data-toggle="tooltip" data-placement="top" title="Go back to dataset" class="btn btn-default primary-button" type="button"><span class="fa fa-file-o"></span> Dataset Details</span></button><a>');e.push(" </div>");e.push('<ol class="breadcrumb">');e.push(' <li><a title="Return to the list of libraries" href="#">Libraries</a></li>');e.push(' <% _.each(item.get("full_path"), function(path_item) { %>');e.push(" <% if (path_item[0] != item.id) { %>");e.push(' <li><a title="Return to this folder" href="#/folders/<%- path_item[0] %>"><%- path_item[1] %></a></li> ');e.push("<% } else { %>");e.push(' <li class="active"><span title="You are here"><%- path_item[1] %></span></li>');e.push(" <% } %>");e.push(" <% }); %>");e.push("</ol>");e.push('<h1>Dataset: <%= _.escape(item.get("name")) %></h1>');e.push('<div class="alert alert-warning">');e.push("<% if (is_admin) { %>");e.push("You are logged in as an <strong>administrator</strong> therefore you can manage any dataset on this Galaxy instance. Please make sure you understand the consequences.");e.push("<% } else { %>");e.push("You can assign any number of roles to any of the following permission types. However please read carefully the implications of such actions.");e.push("<% } %>");e.push("</div>");e.push('<div class="dataset_table">');e.push("<h2>Library-related permissions</h2>");e.push("<h4>Roles that can modify the library item</h4>");e.push('<div id="modify_perm" class="modify_perm roles-selection"></div>');e.push('<div class="alert alert-info roles-selection">User with <strong>any</strong> of these roles can modify name, metadata, and other information about this library item.</div>');e.push("<hr/>");e.push("<h2>Dataset-related permissions</h2>");e.push('<div class="alert alert-warning">Changes made below will affect <strong>every</strong> library item that was created from this dataset and also every history this dataset is part of.</div>');e.push('<% if (!item.get("is_unrestricted")) { %>');e.push(" <p>You can remove all access restrictions on this dataset. ");e.push(' <button data-toggle="tooltip" data-placement="top" title="Everybody will be able to access the dataset." class="btn btn-default btn-remove-restrictions primary-button" type="button">');e.push(' <span class="fa fa-globe"> Remove restrictions</span>');e.push(" </button>");e.push(" </p>");e.push("<% } else { %>");e.push(" This dataset is unrestricted so everybody can access it. Just share the URL of this page.");e.push(' <button data-toggle="tooltip" data-placement="top" title="Copy to clipboard" class="btn btn-default btn-copy-link-to-clipboard primary-button" type="button"><span class="fa fa-clipboard"> To Clipboard</span></button> ');e.push(" <p>You can make this dataset private to you. ");e.push(' <button data-toggle="tooltip" data-placement="top" title="Only you will be able to access the dataset." class="btn btn-default btn-make-private primary-button" type="button"><span class="fa fa-key"> Make Private</span></button>');e.push(" </p>");e.push("<% } %>");e.push("<h4>Roles that can access the dataset</h4>");e.push('<div id="access_perm" class="access_perm roles-selection"></div>');e.push('<div class="alert alert-info roles-selection">User has to have <strong>all these roles</strong> in order to access this dataset. Users without access permission <strong>cannot</strong> have other permissions on this dataset. If there are no access roles set on the dataset it is considered <strong>unrestricted</strong>.</div>');e.push("<h4>Roles that can manage permissions on the dataset</h4>");e.push('<div id="manage_perm" class="manage_perm roles-selection"></div>');e.push('<div class="alert alert-info roles-selection">User with <strong>any</strong> of these roles can manage permissions of this dataset. If you remove yourself you will loose the ability manage this dataset unless you are an admin.</div>');e.push('<button data-toggle="tooltip" data-placement="top" title="Save modifications made on this page" class="btn btn-default toolbtn_save_permissions primary-button" type="button"><span class="fa fa-floppy-o"></span> Save</span></button>');e.push("</div>");e.push("</div>");return _.template(e.join(""))},templateBulkImportInModal:function(){var e=[];e.push('<span id="history_modal_combo_bulk" style="width:90%; margin-left: 1em; margin-right: 1em; ">');e.push("Select history: ");e.push('<select id="dataset_import_single" name="dataset_import_single" style="width:50%; margin-bottom: 1em; "> ');e.push(" <% _.each(histories, function(history) { %>");e.push(' <option value="<%= _.escape(history.get("id")) %>"><%= _.escape(history.get("name")) %></option>');e.push(" <% }); %>");e.push("</select>");e.push("</span>");return _.template(e.join(""))},templateAccessSelect:function(){var e=[];e.push('<select id="access_select" multiple>');e.push(" <% _.each(options, function(option) { %>");e.push(' <option value="<%- option.name %>"><%- option.name %></option>');e.push(" <% }); %>");e.push("</select>");return _.template(e.join(""))}});return{LibraryDatasetView:a}});
\ No newline at end of file
+define(["libs/toastr","mvc/library/library-model","mvc/ui/ui-select"],function(d,c,b){var a=Backbone.View.extend({el:"#center",model:null,options:{},events:{"click .toolbtn_modify_dataset":"enableModification","click .toolbtn_cancel_modifications":"render","click .toolbtn-download-dataset":"downloadDataset","click .toolbtn-import-dataset":"importIntoHistory","click .toolbtn-share-dataset":"shareDataset","click .btn-copy-link-to-clipboard":"copyToClipboard","click .btn-make-private":"makeDatasetPrivate","click .btn-remove-restrictions":"removeDatasetRestrictions","click .toolbtn_save_permissions":"savePermissions","click .toolbtn_save_modifications":"comingSoon",},initialize:function(e){this.options=_.extend(this.options,e);if(this.options.id){this.fetchDataset()}},fetchDataset:function(e){this.options=_.extend(this.options,e);this.model=new c.Item({id:this.options.id});var f=this;this.model.fetch({success:function(){if(f.options.show_permissions){f.showPermissions()}else{if(f.options.show_version){f.fetchVersion()}else{f.render()}}},error:function(h,g){if(typeof g.responseJSON!=="undefined"){d.error(g.responseJSON.err_msg+" Click this to go back.","",{onclick:function(){Galaxy.libraries.library_router.back()}})}else{d.error("An error ocurred. Click this to go back.","",{onclick:function(){Galaxy.libraries.library_router.back()}})}}})},render:function(e){this.options=_.extend(this.options,e);$(".tooltip").remove();var f=this.templateDataset();this.$el.html(f({item:this.model}));$(".peek").html(this.model.get("peek"));$("#center [data-toggle]").tooltip()},fetchVersion:function(e){this.options=_.extend(this.options,e);that=this;if(!this.options.ldda_id){this.render();d.error("Library dataset version requested but no id provided.")}else{this.ldda=new c.Ldda({id:this.options.ldda_id});this.ldda.url=this.ldda.urlRoot+this.model.id+"/versions/"+this.ldda.id;this.ldda.fetch({success:function(){that.renderVersion()},error:function(g,f){if(typeof f.responseJSON!=="undefined"){d.error(f.responseJSON.err_msg)}else{d.error("An error ocurred.")}}})}},renderVersion:function(){$(".tooltip").remove();var e=this.templateVersion();this.$el.html(e({item:this.model,ldda:this.ldda}));$(".peek").html(this.ldda.get("peek"))},enableModification:function(){$(".tooltip").remove();var e=this.templateModifyDataset();this.$el.html(e({item:this.model}));$(".peek").html(this.model.get("peek"));$("#center [data-toggle]").tooltip()},downloadDataset:function(){var e="/api/libraries/datasets/download/uncompressed";var f={ldda_ids:this.id};this.processDownload(e,f)},processDownload:function(f,g,h){if(f&&g){g=typeof g=="string"?g:$.param(g);var e="";$.each(g.split("&"),function(){var i=this.split("=");e+='<input type="hidden" name="'+i[0]+'" value="'+i[1]+'" />'});$('<form action="'+f+'" method="'+(h||"post")+'">'+e+"</form>").appendTo("body").submit().remove();d.info("Your download will begin soon.")}},importIntoHistory:function(){this.refreshUserHistoriesList(function(e){var f=e.templateBulkImportInModal();e.modal=Galaxy.modal;e.modal.show({closing_events:true,title:"Import into History",body:f({histories:e.histories.models}),buttons:{Import:function(){e.importCurrentIntoHistory()},Close:function(){Galaxy.modal.hide()}}})})},refreshUserHistoriesList:function(f){var e=this;this.histories=new c.GalaxyHistories();this.histories.fetch({success:function(g){if(g.length===0){d.warning("You have to create history first. Click this to do so.","",{onclick:function(){window.location="/"}})}else{f(e)}},error:function(h,g){if(typeof g.responseJSON!=="undefined"){d.error(g.responseJSON.err_msg)}else{d.error("An error ocurred.")}}})},importCurrentIntoHistory:function(){var e=$(this.modal.elMain).find("select[name=dataset_import_single] option:selected").val();var f=new c.HistoryItem();f.url=f.urlRoot+e+"/contents";jQuery.getJSON(galaxy_config.root+"history/set_as_current?id="+e);f.save({content:this.id,source:"library"},{success:function(){Galaxy.modal.hide();d.success("Dataset imported. Click this to start analysing it.","",{onclick:function(){window.location="/"}})},error:function(h,g){if(typeof g.responseJSON!=="undefined"){d.error("Dataset not imported. "+g.responseJSON.err_msg)}else{d.error("An error occured. Dataset not imported. Please try again.")}}})},shareDataset:function(){d.info("Feature coming soon.")},goBack:function(){Galaxy.libraries.library_router.back()},showPermissions:function(f){this.options=_.extend(this.options,f);$(".tooltip").remove();if(this.options.fetched_permissions!==undefined){if(this.options.fetched_permissions.access_dataset_roles.length===0){this.model.set({is_unrestricted:true})}else{this.model.set({is_unrestricted:false})}}var h=false;if(Galaxy.currUser){h=Galaxy.currUser.isAdmin()}var g=this.templateDatasetPermissions();this.$el.html(g({item:this.model,is_admin:h}));var e=this;if(this.options.fetched_permissions===undefined){$.get("/api/libraries/datasets/"+e.id+"/permissions?scope=current").done(function(i){e.prepareSelectBoxes({fetched_permissions:i,is_admin:h})}).fail(function(){d.error("An error occurred while attempting to fetch dataset permissions.")})}else{this.prepareSelectBoxes({is_admin:h})}$("#center [data-toggle]").tooltip();$("#center").css("overflow","auto")},prepareSelectBoxes:function(r){this.options=_.extend(this.options,r);var s=this.options.fetched_permissions;var k=this.options.is_admin;var q=this;var m=[];for(var h=0;h<s.access_dataset_roles.length;h++){m.push(s.access_dataset_roles[h]+":"+s.access_dataset_roles[h])}var f=[];for(var h=0;h<s.modify_item_roles.length;h++){f.push(s.modify_item_roles[h]+":"+s.modify_item_roles[h])}var g=[];for(var h=0;h<s.manage_dataset_roles.length;h++){g.push(s.manage_dataset_roles[h]+":"+s.manage_dataset_roles[h])}if(k){var o={minimumInputLength:0,css:"access_perm",multiple:true,placeholder:"Click to select a role",container:q.$el.find("#access_perm"),ajax:{url:"/api/libraries/datasets/"+q.id+"/permissions?scope=available",dataType:"json",quietMillis:100,data:function(i,t){return{q:i,page_limit:10,page:t}},results:function(u,t){var i=(t*10)<u.total;return{results:u.roles,more:i}}},formatResult:function j(i){return i.name+" type: "+i.type},formatSelection:function e(i){return i.name},initSelection:function(i,u){var t=[];$(i.val().split(",")).each(function(){var v=this.split(":");t.push({id:v[1],name:v[1]})});u(t)},initialData:m.join(","),dropdownCssClass:"bigdrop"};var l={minimumInputLength:0,css:"modify_perm",multiple:true,placeholder:"Click to select a role",container:q.$el.find("#modify_perm"),ajax:{url:"/api/libraries/datasets/"+q.id+"/permissions?scope=available",dataType:"json",quietMillis:100,data:function(i,t){return{q:i,page_limit:10,page:t}},results:function(u,t){var i=(t*10)<u.total;return{results:u.roles,more:i}}},formatResult:function j(i){return i.name+" type: "+i.type},formatSelection:function e(i){return i.name},initSelection:function(i,u){var t=[];$(i.val().split(",")).each(function(){var v=this.split(":");t.push({id:v[1],name:v[1]})});u(t)},initialData:f.join(","),dropdownCssClass:"bigdrop"};var p={minimumInputLength:0,css:"manage_perm",multiple:true,placeholder:"Click to select a role",container:q.$el.find("#manage_perm"),ajax:{url:"/api/libraries/datasets/"+q.id+"/permissions?scope=available",dataType:"json",quietMillis:100,data:function(i,t){return{q:i,page_limit:10,page:t}},results:function(u,t){var i=(t*10)<u.total;return{results:u.roles,more:i}}},formatResult:function j(i){return i.name+" type: "+i.type},formatSelection:function e(i){return i.name},initSelection:function(i,u){var t=[];$(i.val().split(",")).each(function(){var v=this.split(":");t.push({id:v[1],name:v[1]})});u(t)},initialData:g.join(","),dropdownCssClass:"bigdrop"};q.accessSelectObject=new b.View(o);q.modifySelectObject=new b.View(l);q.manageSelectObject=new b.View(p)}else{var n=q.templateAccessSelect();$.get("/api/libraries/datasets/"+q.id+"/permissions?scope=available",function(i){$(".access_perm").html(n({options:i.roles}));q.accessSelectObject=$("#access_select").select2()}).fail(function(){d.error("An error occurred while attempting to fetch dataset permissions.")})}},comingSoon:function(){d.warning("Feature coming soon.")},copyToClipboard:function(){var e=Backbone.history.location.href;if(e.lastIndexOf("/permissions")!==-1){e=e.substr(0,e.lastIndexOf("/permissions"))}window.prompt("Copy to clipboard: Ctrl+C, Enter",e)},makeDatasetPrivate:function(){var e=this;$.post("/api/libraries/datasets/"+e.id+"/permissions?action=make_private").done(function(f){e.model.set({is_unrestricted:false});e.showPermissions({fetched_permissions:f});d.success("The dataset is now private to you.")}).fail(function(){d.error("An error occurred while attempting to make dataset private.")})},removeDatasetRestrictions:function(){var e=this;$.post("/api/libraries/datasets/"+e.id+"/permissions?action=remove_restrictions").done(function(f){e.model.set({is_unrestricted:true});e.showPermissions({fetched_permissions:f});d.success("Access to this dataset is now unrestricted.")}).fail(function(){d.error("An error occurred while attempting to make dataset unrestricted.")})},savePermissions:function(e){var n=this;var k=this.accessSelectObject.$el.select2("data");var f=this.manageSelectObject.$el.select2("data");var m=this.modifySelectObject.$el.select2("data");var g=[];var j=[];var l=[];for(var h=k.length-1;h>=0;h--){g.push(k[h].id)}for(var h=f.length-1;h>=0;h--){j.push(f[h].id)}for(var h=m.length-1;h>=0;h--){l.push(m[h].id)}$.post("/api/libraries/datasets/"+n.id+"/permissions?action=set_permissions",{"access_ids[]":g,"manage_ids[]":j,"modify_ids[]":l,}).done(function(i){n.showPermissions({fetched_permissions:i});d.success("Permissions saved.")}).fail(function(){d.error("An error occurred while attempting to set dataset permissions.")})},templateDataset:function(){var e=[];e.push('<div class="library_style_container">');e.push(' <div id="library_toolbar">');e.push(' <button data-toggle="tooltip" data-placement="top" title="Download dataset" class="btn btn-default toolbtn-download-dataset primary-button" type="button"><span class="fa fa-download"></span> Download</span></button>');e.push(' <button data-toggle="tooltip" data-placement="top" title="Import dataset into history" class="btn btn-default toolbtn-import-dataset primary-button" type="button"><span class="fa fa-book"></span> to History</span></button>');e.push(' <% if (item.get("can_user_modify")) { %>');e.push(' <button data-toggle="tooltip" data-placement="top" title="Modify library item" class="btn btn-default toolbtn_modify_dataset primary-button" type="button"><span class="fa fa-pencil"></span> Modify</span></button>');e.push(" <% } %>");e.push(' <% if (item.get("can_user_manage")) { %>');e.push(' <a href="#folders/<%- item.get("folder_id") %>/datasets/<%- item.id %>/permissions"><button data-toggle="tooltip" data-placement="top" title="Manage permissions" class="btn btn-default toolbtn_change_permissions primary-button" type="button"><span class="fa fa-group"></span> Permissions</span></button></a>');e.push(' <button data-toggle="tooltip" data-placement="top" title="Share dataset" class="btn btn-default toolbtn-share-dataset primary-button" type="button"><span class="fa fa-share"></span> Share</span></button>');e.push(" <% } %>");e.push(" </div>");e.push('<ol class="breadcrumb">');e.push(' <li><a title="Return to the list of libraries" href="#">Libraries</a></li>');e.push(' <% _.each(item.get("full_path"), function(path_item) { %>');e.push(" <% if (path_item[0] != item.id) { %>");e.push(' <li><a title="Return to this folder" href="#/folders/<%- path_item[0] %>"><%- path_item[1] %></a></li> ');e.push("<% } else { %>");e.push(' <li class="active"><span title="You are here"><%- path_item[1] %></span></li>');e.push(" <% } %>");e.push(" <% }); %>");e.push("</ol>");e.push('<% if (item.get("is_unrestricted")) { %>');e.push(' <div class="alert alert-info">');e.push(" This dataset is unrestricted so everybody can access it. Just share the URL of this page. ");e.push(' <button data-toggle="tooltip" data-placement="top" title="Copy to clipboard" class="btn btn-default btn-copy-link-to-clipboard primary-button" type="button"><span class="fa fa-clipboard"></span> To Clipboard</span></button> ');e.push(" </div>");e.push("<% } %>");e.push('<div class="dataset_table">');e.push(' <table class="grid table table-striped table-condensed">');e.push(" <tr>");e.push(' <th scope="row" id="id_row" data-id="<%= _.escape(item.get("ldda_id")) %>">Name</th>');e.push(' <td><%= _.escape(item.get("name")) %></td>');e.push(" </tr>");e.push(' <% if (item.get("file_ext")) { %>');e.push(" <tr>");e.push(' <th scope="row">Data type</th>');e.push(' <td><%= _.escape(item.get("file_ext")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(' <% if (item.get("genome_build")) { %>');e.push(" <tr>");e.push(' <th scope="row">Genome build</th>');e.push(' <td><%= _.escape(item.get("genome_build")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(' <% if (item.get("file_size")) { %>');e.push(" <tr>");e.push(' <th scope="row">Size</th>');e.push(' <td><%= _.escape(item.get("file_size")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(' <% if (item.get("date_uploaded")) { %>');e.push(" <tr>");e.push(' <th scope="row">Date uploaded (UTC)</th>');e.push(' <td><%= _.escape(item.get("date_uploaded")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(' <% if (item.get("uploaded_by")) { %>');e.push(" <tr>");e.push(' <th scope="row">Uploaded by</th>');e.push(' <td><%= _.escape(item.get("uploaded_by")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(' <% if (item.get("metadata_data_lines")) { %>');e.push(" <tr>");e.push(' <th scope="row">Data Lines</th>');e.push(' <td scope="row"><%= _.escape(item.get("metadata_data_lines")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(' <% if (item.get("metadata_comment_lines")) { %>');e.push(" <tr>");e.push(' <th scope="row">Comment Lines</th>');e.push(' <td scope="row"><%= _.escape(item.get("metadata_comment_lines")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(' <% if (item.get("metadata_columns")) { %>');e.push(" <tr>");e.push(' <th scope="row">Number of Columns</th>');e.push(' <td scope="row"><%= _.escape(item.get("metadata_columns")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(' <% if (item.get("metadata_column_types")) { %>');e.push(" <tr>");e.push(' <th scope="row">Column Types</th>');e.push(' <td scope="row"><%= _.escape(item.get("metadata_column_types")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(' <% if (item.get("message")) { %>');e.push(" <tr>");e.push(' <th scope="row">Message</th>');e.push(' <td scope="row"><%= _.escape(item.get("message")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(' <% if (item.get("misc_blurb")) { %>');e.push(" <tr>");e.push(' <th scope="row">Miscellaneous blurb</th>');e.push(' <td scope="row"><%= _.escape(item.get("misc_blurb")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(' <% if (item.get("misc_info")) { %>');e.push(" <tr>");e.push(' <th scope="row">Miscellaneous information</th>');e.push(' <td scope="row"><%= _.escape(item.get("misc_info")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(" </table>");e.push(" <div>");e.push(' <pre class="peek">');e.push(" </pre>");e.push(" </div>");e.push(' <% if (item.get("has_versions")) { %>');e.push(" <div>");e.push(" <h3>Expired versions:</h3>");e.push(" <ul>");e.push(' <% _.each(item.get("expired_versions"), function(version) { %>');e.push(' <li><a title="See details of this version" href="#folders/<%- item.get("folder_id") %>/datasets/<%- item.id %>/versions/<%- version[0] %>"><%- version[1] %></a></li>');e.push(" <% }) %>");e.push(" <ul>");e.push(" </div>");e.push(" <% } %>");e.push("</div>");e.push("</div>");return _.template(e.join(""))},templateVersion:function(){var e=[];e.push('<div class="library_style_container">');e.push(' <div id="library_toolbar">');e.push(' <a href="#folders/<%- item.get("folder_id") %>/datasets/<%- item.id %>"><button data-toggle="tooltip" data-placement="top" title="Go to latest dataset" class="btn btn-default primary-button" type="button"><span class="fa fa-caret-left fa-lg"></span> Latest dataset</span></button><a>');e.push(" </div>");e.push('<ol class="breadcrumb">');e.push(' <li><a title="Return to the list of libraries" href="#">Libraries</a></li>');e.push(' <% _.each(item.get("full_path"), function(path_item) { %>');e.push(" <% if (path_item[0] != item.id) { %>");e.push(' <li><a title="Return to this folder" href="#/folders/<%- path_item[0] %>"><%- path_item[1] %></a></li> ');e.push("<% } else { %>");e.push(' <li class="active"><span title="You are here"><%- path_item[1] %></span></li>');e.push(" <% } %>");e.push(" <% }); %>");e.push("</ol>");e.push(' <div class="alert alert-warning">This is an expired version of the library dataset: <%= _.escape(item.get("name")) %></div>');e.push('<div class="dataset_table">');e.push(' <table class="grid table table-striped table-condensed">');e.push(" <tr>");e.push(' <th scope="row" id="id_row" data-id="<%= _.escape(ldda.id) %>">Name</th>');e.push(' <td><%= _.escape(ldda.get("name")) %></td>');e.push(" </tr>");e.push(' <% if (ldda.get("file_ext")) { %>');e.push(" <tr>");e.push(' <th scope="row">Data type</th>');e.push(' <td><%= _.escape(ldda.get("file_ext")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(' <% if (ldda.get("genome_build")) { %>');e.push(" <tr>");e.push(' <th scope="row">Genome build</th>');e.push(' <td><%= _.escape(ldda.get("genome_build")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(' <% if (ldda.get("file_size")) { %>');e.push(" <tr>");e.push(' <th scope="row">Size</th>');e.push(' <td><%= _.escape(ldda.get("file_size")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(' <% if (ldda.get("date_uploaded")) { %>');e.push(" <tr>");e.push(' <th scope="row">Date uploaded (UTC)</th>');e.push(' <td><%= _.escape(ldda.get("date_uploaded")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(' <% if (ldda.get("uploaded_by")) { %>');e.push(" <tr>");e.push(' <th scope="row">Uploaded by</th>');e.push(' <td><%= _.escape(ldda.get("uploaded_by")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(' <% if (ldda.get("metadata_data_lines")) { %>');e.push(" <tr>");e.push(' <th scope="row">Data Lines</th>');e.push(' <td scope="row"><%= _.escape(ldda.get("metadata_data_lines")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(' <% if (ldda.get("metadata_comment_lines")) { %>');e.push(" <tr>");e.push(' <th scope="row">Comment Lines</th>');e.push(' <td scope="row"><%= _.escape(ldda.get("metadata_comment_lines")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(' <% if (ldda.get("metadata_columns")) { %>');e.push(" <tr>");e.push(' <th scope="row">Number of Columns</th>');e.push(' <td scope="row"><%= _.escape(ldda.get("metadata_columns")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(' <% if (ldda.get("metadata_column_types")) { %>');e.push(" <tr>");e.push(' <th scope="row">Column Types</th>');e.push(' <td scope="row"><%= _.escape(ldda.get("metadata_column_types")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(' <% if (ldda.get("message")) { %>');e.push(" <tr>");e.push(' <th scope="row">Message</th>');e.push(' <td scope="row"><%= _.escape(ldda.get("message")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(' <% if (ldda.get("misc_blurb")) { %>');e.push(" <tr>");e.push(' <th scope="row">Miscellaneous blurb</th>');e.push(' <td scope="row"><%= _.escape(ldda.get("misc_blurb")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(' <% if (ldda.get("misc_info")) { %>');e.push(" <tr>");e.push(' <th scope="row">Miscellaneous information</th>');e.push(' <td scope="row"><%= _.escape(ldda.get("misc_info")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(" </table>");e.push(" <div>");e.push(' <pre class="peek">');e.push(" </pre>");e.push(" </div>");e.push("</div>");e.push("</div>");return _.template(e.join(""))},templateModifyDataset:function(){var e=[];e.push('<div class="library_style_container">');e.push(' <div id="library_toolbar">');e.push(' <button data-toggle="tooltip" data-placement="top" title="Cancel modifications" class="btn btn-default toolbtn_cancel_modifications primary-button" type="button"><span class="fa fa-times"></span> Cancel</span></button>');e.push(' <button data-toggle="tooltip" data-placement="top" title="Save modifications" class="btn btn-default toolbtn_save_modifications primary-button" type="button"><span class="fa fa-floppy-o"></span> Save</span></button>');e.push(" </div>");e.push('<ol class="breadcrumb">');e.push(' <li><a title="Return to the list of libraries" href="#">Libraries</a></li>');e.push(' <% _.each(item.get("full_path"), function(path_item) { %>');e.push(" <% if (path_item[0] != item.id) { %>");e.push(' <li><a title="Return to this folder" href="#/folders/<%- path_item[0] %>"><%- path_item[1] %></a></li> ');e.push("<% } else { %>");e.push(' <li class="active"><span title="You are here"><%- path_item[1] %></span></li>');e.push(" <% } %>");e.push(" <% }); %>");e.push("</ol>");e.push('<div class="dataset_table">');e.push('<p>For more editing options please import the dataset to history and use "Edit attributes" on it.</p>');e.push(' <table class="grid table table-striped table-condensed">');e.push(" <tr>");e.push(' <th scope="row" id="id_row" data-id="<%= _.escape(item.get("ldda_id")) %>">Name</th>');e.push(' <td><input class="input_dataset_name form-control" type="text" placeholder="name" value="<%= _.escape(item.get("name")) %>"></td>');e.push(" </tr>");e.push(" <tr>");e.push(' <th scope="row">Data type</th>');e.push(' <td><%= _.escape(item.get("file_ext")) %></td>');e.push(" </tr>");e.push(" <tr>");e.push(' <th scope="row">Genome build</th>');e.push(' <td><%= _.escape(item.get("genome_build")) %></td>');e.push(" </tr>");e.push(" <tr>");e.push(' <th scope="row">Size</th>');e.push(' <td><%= _.escape(item.get("file_size")) %></td>');e.push(" </tr>");e.push(" <tr>");e.push(' <th scope="row">Date uploaded (UTC)</th>');e.push(' <td><%= _.escape(item.get("date_uploaded")) %></td>');e.push(" </tr>");e.push(" <tr>");e.push(' <th scope="row">Uploaded by</th>');e.push(' <td><%= _.escape(item.get("uploaded_by")) %></td>');e.push(" </tr>");e.push(' <tr scope="row">');e.push(' <th scope="row">Data Lines</th>');e.push(' <td scope="row"><%= _.escape(item.get("metadata_data_lines")) %></td>');e.push(" </tr>");e.push(' <th scope="row">Comment Lines</th>');e.push(' <% if (item.get("metadata_comment_lines") === "") { %>');e.push(' <td scope="row"><%= _.escape(item.get("metadata_comment_lines")) %></td>');e.push(" <% } else { %>");e.push(' <td scope="row">unknown</td>');e.push(" <% } %>");e.push(" </tr>");e.push(" <tr>");e.push(' <th scope="row">Number of Columns</th>');e.push(' <td scope="row"><%= _.escape(item.get("metadata_columns")) %></td>');e.push(" </tr>");e.push(" <tr>");e.push(' <th scope="row">Column Types</th>');e.push(' <td scope="row"><%= _.escape(item.get("metadata_column_types")) %></td>');e.push(" </tr>");e.push(" <tr>");e.push(' <th scope="row">Message</th>');e.push(' <td scope="row"><%= _.escape(item.get("message")) %></td>');e.push(" </tr>");e.push(" <tr>");e.push(' <th scope="row">Miscellaneous information</th>');e.push(' <td scope="row"><%= _.escape(item.get("misc_info")) %></td>');e.push(" </tr>");e.push(" <tr>");e.push(' <th scope="row">Miscellaneous blurb</th>');e.push(' <td scope="row"><%= _.escape(item.get("misc_blurb")) %></td>');e.push(" </tr>");e.push(" </table>");e.push("<div>");e.push(' <pre class="peek">');e.push(" </pre>");e.push("</div>");e.push("</div>");e.push("</div>");return _.template(e.join(""))},templateDatasetPermissions:function(){var e=[];e.push('<div class="library_style_container">');e.push(' <div id="library_toolbar">');e.push(' <a href="#folders/<%- item.get("folder_id") %>"><button data-toggle="tooltip" data-placement="top" title="Go back to containing folder" class="btn btn-default primary-button" type="button"><span class="fa fa-folder-open-o"></span> Containing Folder</span></button></a>');e.push(' <a href="#folders/<%- item.get("folder_id") %>/datasets/<%- item.id %>"><button data-toggle="tooltip" data-placement="top" title="Go back to dataset" class="btn btn-default primary-button" type="button"><span class="fa fa-file-o"></span> Dataset Details</span></button><a>');e.push(" </div>");e.push('<ol class="breadcrumb">');e.push(' <li><a title="Return to the list of libraries" href="#">Libraries</a></li>');e.push(' <% _.each(item.get("full_path"), function(path_item) { %>');e.push(" <% if (path_item[0] != item.id) { %>");e.push(' <li><a title="Return to this folder" href="#/folders/<%- path_item[0] %>"><%- path_item[1] %></a></li> ');e.push("<% } else { %>");e.push(' <li class="active"><span title="You are here"><%- path_item[1] %></span></li>');e.push(" <% } %>");e.push(" <% }); %>");e.push("</ol>");e.push('<h1>Dataset: <%= _.escape(item.get("name")) %></h1>');e.push('<div class="alert alert-warning">');e.push("<% if (is_admin) { %>");e.push("You are logged in as an <strong>administrator</strong> therefore you can manage any dataset on this Galaxy instance. Please make sure you understand the consequences.");e.push("<% } else { %>");e.push("You can assign any number of roles to any of the following permission types. However please read carefully the implications of such actions.");e.push("<% } %>");e.push("</div>");e.push('<div class="dataset_table">');e.push("<h2>Library-related permissions</h2>");e.push("<h4>Roles that can modify the library item</h4>");e.push('<div id="modify_perm" class="modify_perm roles-selection"></div>');e.push('<div class="alert alert-info roles-selection">User with <strong>any</strong> of these roles can modify name, metadata, and other information about this library item.</div>');e.push("<hr/>");e.push("<h2>Dataset-related permissions</h2>");e.push('<div class="alert alert-warning">Changes made below will affect <strong>every</strong> library item that was created from this dataset and also every history this dataset is part of.</div>');e.push('<% if (!item.get("is_unrestricted")) { %>');e.push(" <p>You can remove all access restrictions on this dataset. ");e.push(' <button data-toggle="tooltip" data-placement="top" title="Everybody will be able to access the dataset." class="btn btn-default btn-remove-restrictions primary-button" type="button">');e.push(' <span class="fa fa-globe"> Remove restrictions</span>');e.push(" </button>");e.push(" </p>");e.push("<% } else { %>");e.push(" This dataset is unrestricted so everybody can access it. Just share the URL of this page.");e.push(' <button data-toggle="tooltip" data-placement="top" title="Copy to clipboard" class="btn btn-default btn-copy-link-to-clipboard primary-button" type="button"><span class="fa fa-clipboard"> To Clipboard</span></button> ');e.push(" <p>You can make this dataset private to you. ");e.push(' <button data-toggle="tooltip" data-placement="top" title="Only you will be able to access the dataset." class="btn btn-default btn-make-private primary-button" type="button"><span class="fa fa-key"> Make Private</span></button>');e.push(" </p>");e.push("<% } %>");e.push("<h4>Roles that can access the dataset</h4>");e.push('<div id="access_perm" class="access_perm roles-selection"></div>');e.push('<div class="alert alert-info roles-selection">User has to have <strong>all these roles</strong> in order to access this dataset. Users without access permission <strong>cannot</strong> have other permissions on this dataset. If there are no access roles set on the dataset it is considered <strong>unrestricted</strong>.</div>');e.push("<h4>Roles that can manage permissions on the dataset</h4>");e.push('<div id="manage_perm" class="manage_perm roles-selection"></div>');e.push('<div class="alert alert-info roles-selection">User with <strong>any</strong> of these roles can manage permissions of this dataset. If you remove yourself you will loose the ability manage this dataset unless you are an admin.</div>');e.push('<button data-toggle="tooltip" data-placement="top" title="Save modifications made on this page" class="btn btn-default toolbtn_save_permissions primary-button" type="button"><span class="fa fa-floppy-o"></span> Save</span></button>');e.push("</div>");e.push("</div>");return _.template(e.join(""))},templateBulkImportInModal:function(){var e=[];e.push('<span id="history_modal_combo_bulk" style="width:90%; margin-left: 1em; margin-right: 1em; ">');e.push("Select history: ");e.push('<select id="dataset_import_single" name="dataset_import_single" style="width:50%; margin-bottom: 1em; "> ');e.push(" <% _.each(histories, function(history) { %>");e.push(' <option value="<%= _.escape(history.get("id")) %>"><%= _.escape(history.get("name")) %></option>');e.push(" <% }); %>");e.push("</select>");e.push("</span>");return _.template(e.join(""))},templateAccessSelect:function(){var e=[];e.push('<select id="access_select" multiple>');e.push(" <% _.each(options, function(option) { %>");e.push(' <option value="<%- option.name %>"><%- option.name %></option>');e.push(" <% }); %>");e.push("</select>");return _.template(e.join(""))}});return{LibraryDatasetView:a}});
\ No newline at end of file
diff -r c059c1061efa625d6ad1ff2fc298db03b01e2c61 -r 48fc9b40fda9458d502055d4887f5028ee64aa64 static/scripts/packed/mvc/library/library-folder-view.js
--- a/static/scripts/packed/mvc/library/library-folder-view.js
+++ b/static/scripts/packed/mvc/library/library-folder-view.js
@@ -1,1 +1,1 @@
-define(["libs/toastr","mvc/library/library-model","mvc/ui/ui-select"],function(d,c,a){var b=Backbone.View.extend({el:"#center",model:null,options:{},events:{"click .toolbtn_save_permissions":"savePermissions"},initialize:function(e){this.options=_.extend(this.options,e);if(this.options.id){this.fetchFolder()}},fetchFolder:function(e){this.options=_.extend(this.options,e);this.model=new c.FolderAsModel({id:this.options.id});var f=this;this.model.fetch({success:function(){if(f.options.show_permissions){f.showPermissions()}else{f.render()}},error:function(h,g){if(typeof g.responseJSON!=="undefined"){d.error(g.responseJSON.err_msg+" Click this to go back.","",{onclick:function(){Galaxy.libraries.library_router.back()}})}else{d.error("An error ocurred :(. Click this to go back.","",{onclick:function(){Galaxy.libraries.library_router.back()}})}}})},render:function(e){$(".tooltip").remove();this.options=_.extend(this.options,e);var f=this.templateFolder();this.$el.html(f({item:this.model}));$(".peek").html(this.model.get("peek"));$("#center [data-toggle]").tooltip()},shareFolder:function(){d.info("Feature coming soon.")},goBack:function(){Galaxy.libraries.library_router.back()},showPermissions:function(f){this.options=_.extend(this.options,f);$(".tooltip").remove();var h=false;if(Galaxy.currUser){h=Galaxy.currUser.isAdmin()}var g=this.templateFolderPermissions();this.$el.html(g({folder:this.model,is_admin:h}));var e=this;if(this.options.fetched_permissions===undefined){$.get("/api/folders/"+e.id+"/permissions?scope=current").done(function(i){e.prepareSelectBoxes({fetched_permissions:i})}).fail(function(){d.error("An error occurred while fetching folder permissions. :(")})}else{this.prepareSelectBoxes({})}$("#center [data-toggle]").tooltip();$("#center").css("overflow","auto")},_serializeRoles:function(g){var e=[];for(var f=0;f<g.length;f++){e.push(g[f]+":"+g[f])}return e},prepareSelectBoxes:function(h){this.options=_.extend(this.options,h);var f=this.options.fetched_permissions;var g=this;var i=this._serializeRoles(f.add_library_item_role_list);var j=this._serializeRoles(f.manage_folder_role_list);var e=this._serializeRoles(f.modify_folder_role_list);g.addSelectObject=new a.View(this._createSelectOptions(this,"add_perm",i,false));g.manageSelectObject=new a.View(this._createSelectOptions(this,"manage_perm",j,false));g.modifySelectObject=new a.View(this._createSelectOptions(this,"modify_perm",e,false))},_createSelectOptions:function(e,j,h){var i={minimumInputLength:0,css:j,multiple:true,placeholder:"Click to select a role",container:e.$el.find("#"+j),ajax:{url:"/api/folders/"+e.id+"/permissions?scope=available",dataType:"json",quietMillis:100,data:function(k,l){return{q:k,page_limit:10,page:l}},results:function(m,l){var k=(l*10)<m.total;return{results:m.roles,more:k}}},formatResult:function f(k){return k.name+" type: "+k.type},formatSelection:function g(k){return k.name},initSelection:function(k,m){var l=[];$(k.val().split(",")).each(function(){var n=this.split(":");l.push({id:n[1],name:n[1]})});m(l)},initialData:h.join(","),dropdownCssClass:"bigdrop"};return i},comingSoon:function(){d.warning("Feature coming soon")},copyToClipboard:function(){var e=Backbone.history.location.href;if(e.lastIndexOf("/permissions")!==-1){e=e.substr(0,e.lastIndexOf("/permissions"))}window.prompt("Copy to clipboard: Ctrl+C, Enter",e)},_extractIds:function(e){ids_list=[];for(var f=e.length-1;f>=0;f--){ids_list.push(e[f].id)}return ids_list},savePermissions:function(h){var g=this;var e=this._extractIds(this.addSelectObject.$el.select2("data"));var i=this._extractIds(this.manageSelectObject.$el.select2("data"));var f=this._extractIds(this.modifySelectObject.$el.select2("data"));$.post("/api/folders/"+g.id+"/permissions?action=set_permissions",{"add_ids[]":e,"manage_ids[]":i,"modify_ids[]":f,}).done(function(j){g.showPermissions({fetched_permissions:j});d.success("Permissions saved")}).fail(function(){d.error("An error occurred while setting folder permissions :(")})},templateFolder:function(){var e=[];e.push('<div class="library_style_container">');e.push(' <div id="library_toolbar">');e.push(' <button data-toggle="tooltip" data-placement="top" title="Modify library item" class="btn btn-default toolbtn_modify_dataset primary-button" type="button"><span class="fa fa-pencil"></span> Modify</span></button>');e.push(' <a href="#folders/<%- item.get("folder_id") %>/datasets/<%- item.id %>/permissions"><button data-toggle="tooltip" data-placement="top" title="Manage permissions" class="btn btn-default toolbtn_change_permissions primary-button" type="button"><span class="fa fa-group"></span> Permissions</span></button></a>');e.push(' <button data-toggle="tooltip" data-placement="top" title="Share dataset" class="btn btn-default toolbtn-share-dataset primary-button" type="button"><span class="fa fa-share"></span> Share</span></button>');e.push(" </div>");e.push(" <p>");e.push(" This dataset is unrestricted so everybody can access it. Just share the URL of this page. ");e.push(' <button data-toggle="tooltip" data-placement="top" title="Copy to clipboard" class="btn btn-default btn-copy-link-to-clipboard primary-button" type="button"><span class="fa fa-clipboard"></span> To Clipboard</span></button> ');e.push(" </p>");e.push('<div class="dataset_table">');e.push(' <table class="grid table table-striped table-condensed">');e.push(" <tr>");e.push(' <th scope="row" id="id_row" data-id="<%= _.escape(item.get("ldda_id")) %>">Name</th>');e.push(' <td><%= _.escape(item.get("name")) %></td>');e.push(" </tr>");e.push(' <% if (item.get("file_ext")) { %>');e.push(" <tr>");e.push(' <th scope="row">Data type</th>');e.push(' <td><%= _.escape(item.get("file_ext")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(" </table>");e.push("</div>");e.push("</div>");return _.template(e.join(""))},templateFolderPermissions:function(){var e=[];e.push('<div class="library_style_container">');e.push(' <div id="library_toolbar">');e.push(' <a href="#/folders/<%= folder.get("parent_id") %>"><button data-toggle="tooltip" data-placement="top" title="Go back to the parent folder" class="btn btn-default primary-button" type="button"><span class="fa fa-caret-left fa-lg"></span> Parent folder</span></button></a>');e.push(" </div>");e.push('<h1>Folder: <%= _.escape(folder.get("name")) %></h1>');e.push('<div class="alert alert-warning">');e.push("<% if (is_admin) { %>");e.push("You are logged in as an <strong>administrator</strong> therefore you can manage any folder on this Galaxy instance. Please make sure you understand the consequences.");e.push("<% } else { %>");e.push("You can assign any number of roles to any of the following permission types. However please read carefully the implications of such actions.");e.push("<% }%>");e.push("</div>");e.push('<div class="dataset_table">');e.push("<h2>Folder permissions</h2>");e.push("<h4>Roles that can manage permissions on this folder</h4>");e.push('<div id="manage_perm" class="manage_perm roles-selection"></div>');e.push('<div class="alert alert-info roles-selection">User with <strong>any</strong> of these roles can manage permissions on this folder.</div>');e.push("<h4>Roles that can add items to this folder</h4>");e.push('<div id="add_perm" class="add_perm roles-selection"></div>');e.push('<div class="alert alert-info roles-selection">User with <strong>any</strong> of these roles can add items to this folder (folders and datasets).</div>');e.push("<h4>Roles that can modify this folder</h4>");e.push('<div id="modify_perm" class="modify_perm roles-selection"></div>');e.push('<div class="alert alert-info roles-selection">User with <strong>any</strong> of these roles can modify this folder (name, etc.).</div>');e.push('<button data-toggle="tooltip" data-placement="top" title="Save modifications" class="btn btn-default toolbtn_save_permissions primary-button" type="button"><span class="fa fa-floppy-o"></span> Save</span></button>');e.push("</div>");e.push("</div>");return _.template(e.join(""))}});return{FolderView:b}});
\ No newline at end of file
+define(["libs/toastr","mvc/library/library-model","mvc/ui/ui-select"],function(d,c,a){var b=Backbone.View.extend({el:"#center",model:null,options:{},events:{"click .toolbtn_save_permissions":"savePermissions"},initialize:function(e){this.options=_.extend(this.options,e);if(this.options.id){this.fetchFolder()}},fetchFolder:function(e){this.options=_.extend(this.options,e);this.model=new c.FolderAsModel({id:this.options.id});var f=this;this.model.fetch({success:function(){if(f.options.show_permissions){f.showPermissions()}else{f.render()}},error:function(h,g){if(typeof g.responseJSON!=="undefined"){d.error(g.responseJSON.err_msg+" Click this to go back.","",{onclick:function(){Galaxy.libraries.library_router.back()}})}else{d.error("An error ocurred. Click this to go back.","",{onclick:function(){Galaxy.libraries.library_router.back()}})}}})},render:function(e){$(".tooltip").remove();this.options=_.extend(this.options,e);var f=this.templateFolder();this.$el.html(f({item:this.model}));$(".peek").html(this.model.get("peek"));$("#center [data-toggle]").tooltip()},shareFolder:function(){d.info("Feature coming soon.")},goBack:function(){Galaxy.libraries.library_router.back()},showPermissions:function(f){this.options=_.extend(this.options,f);$(".tooltip").remove();var h=false;if(Galaxy.currUser){h=Galaxy.currUser.isAdmin()}var g=this.templateFolderPermissions();this.$el.html(g({folder:this.model,is_admin:h}));var e=this;if(this.options.fetched_permissions===undefined){$.get("/api/folders/"+e.id+"/permissions?scope=current").done(function(i){e.prepareSelectBoxes({fetched_permissions:i})}).fail(function(){d.error("An error occurred while attempting to fetch folder permissions.")})}else{this.prepareSelectBoxes({})}$("#center [data-toggle]").tooltip();$("#center").css("overflow","auto")},_serializeRoles:function(g){var e=[];for(var f=0;f<g.length;f++){e.push(g[f]+":"+g[f])}return e},prepareSelectBoxes:function(h){this.options=_.extend(this.options,h);var f=this.options.fetched_permissions;var g=this;var i=this._serializeRoles(f.add_library_item_role_list);var j=this._serializeRoles(f.manage_folder_role_list);var e=this._serializeRoles(f.modify_folder_role_list);g.addSelectObject=new a.View(this._createSelectOptions(this,"add_perm",i,false));g.manageSelectObject=new a.View(this._createSelectOptions(this,"manage_perm",j,false));g.modifySelectObject=new a.View(this._createSelectOptions(this,"modify_perm",e,false))},_createSelectOptions:function(e,j,h){var i={minimumInputLength:0,css:j,multiple:true,placeholder:"Click to select a role",container:e.$el.find("#"+j),ajax:{url:"/api/folders/"+e.id+"/permissions?scope=available",dataType:"json",quietMillis:100,data:function(k,l){return{q:k,page_limit:10,page:l}},results:function(m,l){var k=(l*10)<m.total;return{results:m.roles,more:k}}},formatResult:function f(k){return k.name+" type: "+k.type},formatSelection:function g(k){return k.name},initSelection:function(k,m){var l=[];$(k.val().split(",")).each(function(){var n=this.split(":");l.push({id:n[1],name:n[1]})});m(l)},initialData:h.join(","),dropdownCssClass:"bigdrop"};return i},comingSoon:function(){d.warning("Feature coming soon.")},copyToClipboard:function(){var e=Backbone.history.location.href;if(e.lastIndexOf("/permissions")!==-1){e=e.substr(0,e.lastIndexOf("/permissions"))}window.prompt("Copy to clipboard: Ctrl+C, Enter",e)},_extractIds:function(e){ids_list=[];for(var f=e.length-1;f>=0;f--){ids_list.push(e[f].id)}return ids_list},savePermissions:function(h){var g=this;var e=this._extractIds(this.addSelectObject.$el.select2("data"));var i=this._extractIds(this.manageSelectObject.$el.select2("data"));var f=this._extractIds(this.modifySelectObject.$el.select2("data"));$.post("/api/folders/"+g.id+"/permissions?action=set_permissions",{"add_ids[]":e,"manage_ids[]":i,"modify_ids[]":f,}).done(function(j){g.showPermissions({fetched_permissions:j});d.success("Permissions saved.")}).fail(function(){d.error("An error occurred while attempting to set folder permissions.")})},templateFolder:function(){var e=[];e.push('<div class="library_style_container">');e.push(' <div id="library_toolbar">');e.push(' <button data-toggle="tooltip" data-placement="top" title="Modify library item" class="btn btn-default toolbtn_modify_dataset primary-button" type="button"><span class="fa fa-pencil"></span> Modify</span></button>');e.push(' <a href="#folders/<%- item.get("folder_id") %>/datasets/<%- item.id %>/permissions"><button data-toggle="tooltip" data-placement="top" title="Manage permissions" class="btn btn-default toolbtn_change_permissions primary-button" type="button"><span class="fa fa-group"></span> Permissions</span></button></a>');e.push(' <button data-toggle="tooltip" data-placement="top" title="Share dataset" class="btn btn-default toolbtn-share-dataset primary-button" type="button"><span class="fa fa-share"></span> Share</span></button>');e.push(" </div>");e.push(" <p>");e.push(" This dataset is unrestricted so everybody can access it. Just share the URL of this page. ");e.push(' <button data-toggle="tooltip" data-placement="top" title="Copy to clipboard" class="btn btn-default btn-copy-link-to-clipboard primary-button" type="button"><span class="fa fa-clipboard"></span> To Clipboard</span></button> ');e.push(" </p>");e.push('<div class="dataset_table">');e.push(' <table class="grid table table-striped table-condensed">');e.push(" <tr>");e.push(' <th scope="row" id="id_row" data-id="<%= _.escape(item.get("ldda_id")) %>">Name</th>');e.push(' <td><%= _.escape(item.get("name")) %></td>');e.push(" </tr>");e.push(' <% if (item.get("file_ext")) { %>');e.push(" <tr>");e.push(' <th scope="row">Data type</th>');e.push(' <td><%= _.escape(item.get("file_ext")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(" </table>");e.push("</div>");e.push("</div>");return _.template(e.join(""))},templateFolderPermissions:function(){var e=[];e.push('<div class="library_style_container">');e.push(' <div id="library_toolbar">');e.push(' <a href="#/folders/<%= folder.get("parent_id") %>"><button data-toggle="tooltip" data-placement="top" title="Go back to the parent folder" class="btn btn-default primary-button" type="button"><span class="fa fa-caret-left fa-lg"></span> Parent folder</span></button></a>');e.push(" </div>");e.push('<h1>Folder: <%= _.escape(folder.get("name")) %></h1>');e.push('<div class="alert alert-warning">');e.push("<% if (is_admin) { %>");e.push("You are logged in as an <strong>administrator</strong> therefore you can manage any folder on this Galaxy instance. Please make sure you understand the consequences.");e.push("<% } else { %>");e.push("You can assign any number of roles to any of the following permission types. However please read carefully the implications of such actions.");e.push("<% }%>");e.push("</div>");e.push('<div class="dataset_table">');e.push("<h2>Folder permissions</h2>");e.push("<h4>Roles that can manage permissions on this folder</h4>");e.push('<div id="manage_perm" class="manage_perm roles-selection"></div>');e.push('<div class="alert alert-info roles-selection">User with <strong>any</strong> of these roles can manage permissions on this folder.</div>');e.push("<h4>Roles that can add items to this folder</h4>");e.push('<div id="add_perm" class="add_perm roles-selection"></div>');e.push('<div class="alert alert-info roles-selection">User with <strong>any</strong> of these roles can add items to this folder (folders and datasets).</div>');e.push("<h4>Roles that can modify this folder</h4>");e.push('<div id="modify_perm" class="modify_perm roles-selection"></div>');e.push('<div class="alert alert-info roles-selection">User with <strong>any</strong> of these roles can modify this folder (name, etc.).</div>');e.push('<button data-toggle="tooltip" data-placement="top" title="Save modifications" class="btn btn-default toolbtn_save_permissions primary-button" type="button"><span class="fa fa-floppy-o"></span> Save</span></button>');e.push("</div>");e.push("</div>");return _.template(e.join(""))}});return{FolderView:b}});
\ No newline at end of file
diff -r c059c1061efa625d6ad1ff2fc298db03b01e2c61 -r 48fc9b40fda9458d502055d4887f5028ee64aa64 static/scripts/packed/mvc/library/library-folderlist-view.js
--- a/static/scripts/packed/mvc/library/library-folderlist-view.js
+++ b/static/scripts/packed/mvc/library/library-folderlist-view.js
@@ -1,1 +1,1 @@
-define(["galaxy.masthead","utils/utils","libs/toastr","mvc/library/library-model","mvc/library/library-folderrow-view","mvc/library/library-dataset-view"],function(d,f,g,e,a,c){var b=Backbone.View.extend({el:"#folder_items_element",defaults:{include_deleted:false},progress:0,progressStep:1,modal:null,folderContainer:null,sort:"asc",events:{"click #select-all-checkboxes":"selectAll","click .dataset_row":"selectClickedRow","click .sort-folder-link":"sortColumnClicked"},rowViews:{},initialize:function(h){this.options=_.defaults(this.options||{},h);this.fetchFolder()},fetchFolder:function(h){var h=h||{};this.options.include_deleted=h.include_deleted;var i=this;this.collection=new e.Folder();this.listenTo(this.collection,"add",this.renderOne);this.listenTo(this.collection,"remove",this.removeOne);this.folderContainer=new e.FolderContainer({id:this.options.id});this.folderContainer.url=this.folderContainer.attributes.urlRoot+this.options.id+"/contents";if(this.options.include_deleted){this.folderContainer.url=this.folderContainer.url+"?include_deleted=true"}this.folderContainer.fetch({success:function(j){i.folder_container=j;i.render();i.addAll(j.get("folder").models);if(i.options.dataset_id){row=_.findWhere(i.rowViews,{id:i.options.dataset_id});if(row){row.showDatasetDetails()}else{g.error("Dataset not found. Showing folder instead.")}}},error:function(k,j){if(typeof j.responseJSON!=="undefined"){g.error(j.responseJSON.err_msg+" Click this to go back.","",{onclick:function(){Galaxy.libraries.library_router.back()}})}else{g.error("An error ocurred :(. Click this to go back.","",{onclick:function(){Galaxy.libraries.library_router.back()}})}}})},render:function(h){this.options=_.defaults(this.options,h);var i=this.templateFolder();$(".tooltip").hide();var j=this.folderContainer.attributes.metadata.full_path;var k;if(j.length===1){k=0}else{k=j[j.length-2][0]}this.$el.html(i({path:this.folderContainer.attributes.metadata.full_path,parent_library_id:this.folderContainer.attributes.metadata.parent_library_id,id:this.options.id,upper_folder_id:k,order:this.sort}));$("#center [data-toggle]").tooltip();$("#center").css("overflow","auto")},postRender:function(){var h=this.folderContainer.attributes.metadata;h.contains_file=typeof this.collection.findWhere({type:"file"})!=="undefined";Galaxy.libraries.folderToolbarView.configureElements(h);$(".library-row").hover(function(){$(this).find(".show_on_hover").show()},function(){$(this).find(".show_on_hover").hide()})},addAll:function(h){_.each(h.reverse(),function(i){Galaxy.libraries.folderListView.collection.add(i)});$("#center [data-toggle]").tooltip();this.checkEmptiness();this.postRender()},renderAll:function(){var h=this;_.each(this.collection.models.reverse(),function(i){h.renderOne(i)});this.postRender()},renderOne:function(i){if(i.get("type")!=="folder"){this.options.contains_file=true}i.set("folder_id",this.id);var h=new a.FolderRowView(i);this.rowViews[i.get("id")]=h;this.$el.find("#first_folder_item").after(h.el);$(".library-row").hover(function(){$(this).find(".show_on_hover").show()},function(){$(this).find(".show_on_hover").hide()})},removeOne:function(h){this.$el.find("#"+h.id).remove()},checkEmptiness:function(){if((this.$el.find(".dataset_row").length===0)&&(this.$el.find(".folder_row").length===0)){this.$el.find(".empty-folder-message").show()}else{this.$el.find(".empty-folder-message").hide()}},sortColumnClicked:function(h){h.preventDefault();if(this.sort==="asc"){this.sortFolder("name","desc");this.sort="desc"}else{this.sortFolder("name","asc");this.sort="asc"}this.render();this.renderAll();this.checkEmptiness()},sortFolder:function(i,h){if(i==="name"){if(h==="asc"){return this.collection.sortByNameAsc()}else{if(h==="desc"){return this.collection.sortByNameDesc()}}}},selectAll:function(i){var h=i.target.checked;that=this;$(":checkbox","#folder_list_body").each(function(){this.checked=h;$row=$(this.parentElement.parentElement);if(h){that.makeDarkRow($row)}else{that.makeWhiteRow($row)}})},selectClickedRow:function(i){var k="";var h;var j;if(i.target.localName==="input"){k=i.target;h=$(i.target.parentElement.parentElement);j="input"}else{if(i.target.localName==="td"){k=$("#"+i.target.parentElement.id).find(":checkbox")[0];h=$(i.target.parentElement);j="td"}}if(k.checked){if(j==="td"){k.checked="";this.makeWhiteRow(h)}else{if(j==="input"){this.makeDarkRow(h)}}}else{if(j==="td"){k.checked="selected";this.makeDarkRow(h)}else{if(j==="input"){this.makeWhiteRow(h)}}}},makeDarkRow:function(h){h.removeClass("light").addClass("dark");h.find("a").removeClass("light").addClass("dark");h.find(".fa-file-o").removeClass("fa-file-o").addClass("fa-file")},makeWhiteRow:function(h){h.removeClass("dark").addClass("light");h.find("a").removeClass("dark").addClass("light");h.find(".fa-file").removeClass("fa-file").addClass("fa-file-o")},templateFolder:function(){var h=[];h.push('<ol class="breadcrumb">');h.push(' <li><a title="Return to the list of libraries" href="#">Libraries</a></li>');h.push(" <% _.each(path, function(path_item) { %>");h.push(" <% if (path_item[0] != id) { %>");h.push(' <li><a title="Return to this folder" href="#/folders/<%- path_item[0] %>"><%- path_item[1] %></a></li> ');h.push("<% } else { %>");h.push(' <li class="active"><span title="You are in this folder"><%- path_item[1] %></span></li>');h.push(" <% } %>");h.push(" <% }); %>");h.push("</ol>");h.push('<table data-library-id="<%- parent_library_id %>" id="folder_table" class="grid table table-condensed">');h.push(" <thead>");h.push(' <th class="button_heading"></th>');h.push(' <th style="text-align: center; width: 20px; " title="Check to select all datasets"><input id="select-all-checkboxes" style="margin: 0;" type="checkbox"></th>');h.push(' <th><a class="sort-folder-link" title="Click to reverse order" href="#">name</a><span title="Sorted alphabetically" class="fa fa-sort-alpha-<%- order %>"></span></th>');h.push(' <th style="width:5%;">data type</th>');h.push(' <th style="width:10%;">size</th>');h.push(' <th style="width:160px;">time updated (UTC)</th>');h.push(' <th style="width:10%;"></th> ');h.push(" </thead>");h.push(' <tbody id="folder_list_body">');h.push(' <tr id="first_folder_item">');h.push(' <td><a href="#<% if (upper_folder_id !== 0){ print("folders/" + upper_folder_id)} %>" title="Go to parent folder" class="btn_open_folder btn btn-default btn-xs">..<a></td>');h.push(" <td></td>");h.push(" <td></td>");h.push(" <td></td>");h.push(" <td></td>");h.push(" <td></td>");h.push(" <td></td>");h.push(" </tr>");h.push(" </tbody>");h.push("</table>");h.push('<div class="empty-folder-message" style="display:none;">This folder is either empty or you do not have proper access permissions to see the contents. If you expected something to show up please consult the <a href="https://wiki.galaxyproject.org/Admin/DataLibraries/LibrarySecurity" target="_blank">library security wikipage</a> or visit the <a href="https://biostar.usegalaxy.org/" target="_blank">Galaxy support site</a>.</div>');return _.template(h.join(""))}});return{FolderListView:b}});
\ No newline at end of file
+define(["galaxy.masthead","utils/utils","libs/toastr","mvc/library/library-model","mvc/library/library-folderrow-view","mvc/library/library-dataset-view"],function(d,f,g,e,a,c){var b=Backbone.View.extend({el:"#folder_items_element",defaults:{include_deleted:false},progress:0,progressStep:1,modal:null,folderContainer:null,sort:"asc",events:{"click #select-all-checkboxes":"selectAll","click .dataset_row":"selectClickedRow","click .sort-folder-link":"sortColumnClicked"},rowViews:{},initialize:function(h){this.options=_.defaults(this.options||{},h);this.fetchFolder()},fetchFolder:function(h){var h=h||{};this.options.include_deleted=h.include_deleted;var i=this;this.collection=new e.Folder();this.listenTo(this.collection,"add",this.renderOne);this.listenTo(this.collection,"remove",this.removeOne);this.folderContainer=new e.FolderContainer({id:this.options.id});this.folderContainer.url=this.folderContainer.attributes.urlRoot+this.options.id+"/contents";if(this.options.include_deleted){this.folderContainer.url=this.folderContainer.url+"?include_deleted=true"}this.folderContainer.fetch({success:function(j){i.folder_container=j;i.render();i.addAll(j.get("folder").models);if(i.options.dataset_id){row=_.findWhere(i.rowViews,{id:i.options.dataset_id});if(row){row.showDatasetDetails()}else{g.error("Dataset not found. Showing folder instead.")}}},error:function(k,j){if(typeof j.responseJSON!=="undefined"){g.error(j.responseJSON.err_msg+" Click this to go back.","",{onclick:function(){Galaxy.libraries.library_router.back()}})}else{g.error("An error ocurred. Click this to go back.","",{onclick:function(){Galaxy.libraries.library_router.back()}})}}})},render:function(h){this.options=_.defaults(this.options,h);var i=this.templateFolder();$(".tooltip").hide();var j=this.folderContainer.attributes.metadata.full_path;var k;if(j.length===1){k=0}else{k=j[j.length-2][0]}this.$el.html(i({path:this.folderContainer.attributes.metadata.full_path,parent_library_id:this.folderContainer.attributes.metadata.parent_library_id,id:this.options.id,upper_folder_id:k,order:this.sort}));$("#center [data-toggle]").tooltip();$("#center").css("overflow","auto")},postRender:function(){var h=this.folderContainer.attributes.metadata;h.contains_file=typeof this.collection.findWhere({type:"file"})!=="undefined";Galaxy.libraries.folderToolbarView.configureElements(h);$(".library-row").hover(function(){$(this).find(".show_on_hover").show()},function(){$(this).find(".show_on_hover").hide()})},addAll:function(h){_.each(h.reverse(),function(i){Galaxy.libraries.folderListView.collection.add(i)});$("#center [data-toggle]").tooltip();this.checkEmptiness();this.postRender()},renderAll:function(){var h=this;_.each(this.collection.models.reverse(),function(i){h.renderOne(i)});this.postRender()},renderOne:function(i){if(i.get("type")!=="folder"){this.options.contains_file=true}i.set("folder_id",this.id);var h=new a.FolderRowView(i);this.rowViews[i.get("id")]=h;this.$el.find("#first_folder_item").after(h.el);$(".library-row").hover(function(){$(this).find(".show_on_hover").show()},function(){$(this).find(".show_on_hover").hide()})},removeOne:function(h){this.$el.find("#"+h.id).remove()},checkEmptiness:function(){if((this.$el.find(".dataset_row").length===0)&&(this.$el.find(".folder_row").length===0)){this.$el.find(".empty-folder-message").show()}else{this.$el.find(".empty-folder-message").hide()}},sortColumnClicked:function(h){h.preventDefault();if(this.sort==="asc"){this.sortFolder("name","desc");this.sort="desc"}else{this.sortFolder("name","asc");this.sort="asc"}this.render();this.renderAll();this.checkEmptiness()},sortFolder:function(i,h){if(i==="name"){if(h==="asc"){return this.collection.sortByNameAsc()}else{if(h==="desc"){return this.collection.sortByNameDesc()}}}},selectAll:function(i){var h=i.target.checked;that=this;$(":checkbox","#folder_list_body").each(function(){this.checked=h;$row=$(this.parentElement.parentElement);if(h){that.makeDarkRow($row)}else{that.makeWhiteRow($row)}})},selectClickedRow:function(i){var k="";var h;var j;if(i.target.localName==="input"){k=i.target;h=$(i.target.parentElement.parentElement);j="input"}else{if(i.target.localName==="td"){k=$("#"+i.target.parentElement.id).find(":checkbox")[0];h=$(i.target.parentElement);j="td"}}if(k.checked){if(j==="td"){k.checked="";this.makeWhiteRow(h)}else{if(j==="input"){this.makeDarkRow(h)}}}else{if(j==="td"){k.checked="selected";this.makeDarkRow(h)}else{if(j==="input"){this.makeWhiteRow(h)}}}},makeDarkRow:function(h){h.removeClass("light").addClass("dark");h.find("a").removeClass("light").addClass("dark");h.find(".fa-file-o").removeClass("fa-file-o").addClass("fa-file")},makeWhiteRow:function(h){h.removeClass("dark").addClass("light");h.find("a").removeClass("dark").addClass("light");h.find(".fa-file").removeClass("fa-file").addClass("fa-file-o")},templateFolder:function(){var h=[];h.push('<ol class="breadcrumb">');h.push(' <li><a title="Return to the list of libraries" href="#">Libraries</a></li>');h.push(" <% _.each(path, function(path_item) { %>");h.push(" <% if (path_item[0] != id) { %>");h.push(' <li><a title="Return to this folder" href="#/folders/<%- path_item[0] %>"><%- path_item[1] %></a></li> ');h.push("<% } else { %>");h.push(' <li class="active"><span title="You are in this folder"><%- path_item[1] %></span></li>');h.push(" <% } %>");h.push(" <% }); %>");h.push("</ol>");h.push('<table data-library-id="<%- parent_library_id %>" id="folder_table" class="grid table table-condensed">');h.push(" <thead>");h.push(' <th class="button_heading"></th>');h.push(' <th style="text-align: center; width: 20px; " title="Check to select all datasets"><input id="select-all-checkboxes" style="margin: 0;" type="checkbox"></th>');h.push(' <th><a class="sort-folder-link" title="Click to reverse order" href="#">name</a><span title="Sorted alphabetically" class="fa fa-sort-alpha-<%- order %>"></span></th>');h.push(' <th style="width:5%;">data type</th>');h.push(' <th style="width:10%;">size</th>');h.push(' <th style="width:160px;">time updated (UTC)</th>');h.push(' <th style="width:10%;"></th> ');h.push(" </thead>");h.push(' <tbody id="folder_list_body">');h.push(' <tr id="first_folder_item">');h.push(' <td><a href="#<% if (upper_folder_id !== 0){ print("folders/" + upper_folder_id)} %>" title="Go to parent folder" class="btn_open_folder btn btn-default btn-xs">..<a></td>');h.push(" <td></td>");h.push(" <td></td>");h.push(" <td></td>");h.push(" <td></td>");h.push(" <td></td>");h.push(" <td></td>");h.push(" </tr>");h.push(" </tbody>");h.push("</table>");h.push('<div class="empty-folder-message" style="display:none;">This folder is either empty or you do not have proper access permissions to see the contents. If you expected something to show up please consult the <a href="https://wiki.galaxyproject.org/Admin/DataLibraries/LibrarySecurity" target="_blank">library security wikipage</a> or visit the <a href="https://biostar.usegalaxy.org/" target="_blank">Galaxy support site</a>.</div>');return _.template(h.join(""))}});return{FolderListView:b}});
\ No newline at end of file
diff -r c059c1061efa625d6ad1ff2fc298db03b01e2c61 -r 48fc9b40fda9458d502055d4887f5028ee64aa64 static/scripts/packed/mvc/library/library-foldertoolbar-view.js
--- a/static/scripts/packed/mvc/library/library-foldertoolbar-view.js
+++ b/static/scripts/packed/mvc/library/library-foldertoolbar-view.js
@@ -1,1 +1,1 @@
-define(["galaxy.masthead","utils/utils","libs/toastr","mvc/library/library-model"],function(b,d,e,c){var a=Backbone.View.extend({el:"#center",events:{"click #toolbtn_create_folder":"createFolderFromModal","click #toolbtn_bulk_import":"modalBulkImport","click #include_deleted_datasets_chk":"checkIncludeDeleted","click #toolbtn_show_libinfo":"showLibInfo","click #toolbtn_bulk_delete":"deleteSelectedDatasets"},defaults:{can_add_library_item:false,contains_file:false,chain_call_control:{total_number:0,failed_number:0},disabled_jstree_element:"folders"},modal:null,jstree:null,histories:null,initialize:function(f){this.options=_.defaults(f||{},this.defaults);this.render()},render:function(f){this.options=_.extend(this.options,f);var h=this.templateToolBar();var g={id:this.options.id,is_admin:false,is_anonym:true,user_library_import_dir:Galaxy.config.user_library_import_dir,allow_library_path_paste:Galaxy.config.allow_library_path_paste,library_import_dir:Galaxy.config.library_import_dir,mutiple_add_dataset_options:false};if(Galaxy.currUser){g.is_admin=Galaxy.currUser.isAdmin();g.is_anonym=Galaxy.currUser.isAnonymous();if(g.user_library_import_dir!==null||g.allow_library_path_paste!==false||g.library_import_dir!==null){g.mutiple_add_dataset_options=true}}this.$el.html(h(g))},configureElements:function(f){this.options=_.extend(this.options,f);if(this.options.can_add_library_item===true){$(".add-library-items").show()}else{$(".add-library-items").hide()}if(this.options.contains_file===true){if(Galaxy.currUser){if(!Galaxy.currUser.isAnonymous()){$(".logged-dataset-manipulation").show();$(".dataset-manipulation").show()}else{$(".dataset-manipulation").show();$(".logged-dataset-manipulation").hide()}}else{$(".logged-dataset-manipulation").hide();$(".dataset-manipulation").hide()}}else{$(".logged-dataset-manipulation").hide();$(".dataset-manipulation").hide()}this.$el.find("[data-toggle]").tooltip()},createFolderFromModal:function(h){h.preventDefault();h.stopPropagation();var f=this;var g=this.templateNewFolderInModal();this.modal=Galaxy.modal;this.modal.show({closing_events:true,title:"Create New Folder",body:g(),buttons:{Create:function(){f.create_new_folder_event()},Close:function(){Galaxy.modal.hide()}}})},create_new_folder_event:function(){var f=this.serialize_new_folder();if(this.validate_new_folder(f)){var g=new c.FolderAsModel();url_items=Backbone.history.fragment.split("/");current_folder_id=url_items[url_items.length-1];g.url=g.urlRoot+"/"+current_folder_id;g.save(f,{success:function(h){Galaxy.modal.hide();e.success("Folder created");h.set({type:"folder"});Galaxy.libraries.folderListView.collection.add(h)},error:function(i,h){Galaxy.modal.hide();if(typeof h.responseJSON!=="undefined"){e.error(h.responseJSON.err_msg)}else{e.error("An error ocurred :(")}}})}else{e.error("Folder's name is missing")}return false},serialize_new_folder:function(){return{name:$("input[name='Name']").val(),description:$("input[name='Description']").val()}},validate_new_folder:function(f){return f.name!==""},modalBulkImport:function(){var f=$("#folder_table").find(":checked");if(f.length===0){e.info("You have to select some datasets first")}else{this.refreshUserHistoriesList(function(h){var g=h.templateBulkImportInModal();h.modal=Galaxy.modal;h.modal.show({closing_events:true,title:"Import into History",body:g({histories:h.histories.models}),buttons:{Import:function(){h.importAllIntoHistory()},Close:function(){Galaxy.modal.hide()}}})})}},refreshUserHistoriesList:function(g){var f=this;this.histories=new c.GalaxyHistories();this.histories.fetch({success:function(){g(f)},error:function(i,h){if(typeof h.responseJSON!=="undefined"){e.error(h.responseJSON.err_msg)}else{e.error("An error ocurred :(")}}})},importAllIntoHistory:function(){this.modal.disableButton("Import");var j=$("select[name=dataset_import_bulk] option:selected").val();var m=$("select[name=dataset_import_bulk] option:selected").text();this.options.last_used_history_id=j;var g=[];$("#folder_table").find(":checked").each(function(){if(this.parentElement.parentElement.id!==""){g.push(this.parentElement.parentElement.id)}});var l=[];for(var h=g.length-1;h>=0;h--){var f=g[h];var k=new c.HistoryItem();k.url=k.urlRoot+j+"/contents";k.content=f;k.source="library";l.push(k)}this.initChainCallControl({length:l.length,action:"to_history",history_name:m});jQuery.getJSON(galaxy_config.root+"history/set_as_current?id="+j);this.chainCallImportingIntoHistory(l,m)},updateProgress:function(){this.progress+=this.progressStep;$(".progress-bar-import").width(Math.round(this.progress)+"%");txt_representation=Math.round(this.progress)+"% Complete";$(".completion_span").text(txt_representation)},download:function(f,j){var h=[];$("#folder_table").find(":checked").each(function(){if(this.parentElement.parentElement.id!==""){h.push(this.parentElement.parentElement.id)}});var g="/api/libraries/datasets/download/"+j;var i={ldda_ids:h};this.processDownload(g,i,"get")},processDownload:function(g,h,i){if(g&&h){h=typeof h==="string"?h:$.param(h);var f="";$.each(h.split("&"),function(){var j=this.split("=");f+='<input type="hidden" name="'+j[0]+'" value="'+j[1]+'" />'});$('<form action="'+g+'" method="'+(i||"post")+'">'+f+"</form>").appendTo("body").submit().remove();e.info("Your download will begin soon")}else{e.error("An error occurred :(")}},addFilesFromHistoryModal:function(){this.refreshUserHistoriesList(function(f){f.modal=Galaxy.modal;var g=f.templateAddFilesFromHistory();var h=f.options.full_path[f.options.full_path.length-1][1];f.modal.show({closing_events:true,title:"Adding datasets from your history to folder "+h,body:g({histories:f.histories.models}),buttons:{Add:function(){f.addAllDatasetsFromHistory()},Close:function(){Galaxy.modal.hide()}},closing_callback:function(){Galaxy.libraries.library_router.back()}});if(f.histories.models.length>0){f.fetchAndDisplayHistoryContents(f.histories.models[0].id);$("#dataset_add_bulk").change(function(i){f.fetchAndDisplayHistoryContents(i.target.value)})}else{e.error("An error ocurred :(")}})},importFilesFromPathModal:function(){var g=this;this.modal=Galaxy.modal;var f=this.templateImportPathModal();this.modal.show({closing_events:true,title:"Enter paths relative to Galaxy root",body:f({}),buttons:{Import:function(){g.importFromPathsClicked(g)},Close:function(){Galaxy.modal.hide()}},closing_callback:function(){Galaxy.libraries.library_router.navigate("folders/"+g.id,{trigger:true})}})},importFilesFromUserdirModal:function(){var g=this;this.modal=Galaxy.modal;var f=this.templateBrowserModal();this.modal.show({closing_events:true,title:"Select folders or files to import",body:f({}),buttons:{Import:function(){g.importFromUserdirClicked(g)},Close:function(){Galaxy.modal.hide()}},closing_callback:function(){Galaxy.libraries.library_router.navigate("folders/"+g.id,{trigger:true})}});this.renderJstree({disabled_jstree_element:"folders"});$("input[type=radio]").change(function(h){if(h.target.value==="jstree-disable-folders"){g.renderJstree({disabled_jstree_element:"folders"});$(".jstree-folders-message").hide();$(".jstree-preserve-structure").hide();$(".jstree-link-files").hide();$(".jstree-files-message").show()}else{if(h.target.value==="jstree-disable-files"){$(".jstree-files-message").hide();$(".jstree-folders-message").show();$(".jstree-link-files").show();$(".jstree-preserve-structure").show();g.renderJstree({disabled_jstree_element:"files"})}}})},renderJstree:function(f){var h=this;this.options=_.extend(this.options,f);var g=this.options.disabled_jstree_element;this.jstree=new c.Jstree();this.jstree.url=this.jstree.urlRoot+"?target=userdir&format=jstree&disable="+g;this.jstree.fetch({success:function(j,i){define("jquery",function(){return jQuery});require(["libs/jquery/jstree"],function(k){$("#jstree_browser").jstree("destroy");$("#jstree_browser").jstree({core:{data:j},plugins:["types","checkbox"],types:{folder:{icon:"jstree-folder"},file:{icon:"jstree-file"}},checkbox:{three_state:false}})})},error:function(j,i){if(typeof i.responseJSON!=="undefined"){e.error(i.responseJSON.err_msg)}else{e.error("An error ocurred :(")}}})},importFromPathsClicked:function(){var f=this.modal.$el.find(".preserve-checkbox").is(":checked");var k=this.modal.$el.find(".link-checkbox").is(":checked");var j=$("textarea#import_paths").val();var h=[];if(!j){e.info("Please enter a path relative to Galaxy root")}else{this.modal.disableButton("Import");j=j.split("\n");for(var g=j.length-1;g>=0;g--){trimmed=j[g].trim();if(trimmed.length!==0){h.push(trimmed)}}this.initChainCallControl({length:h.length,action:"adding_datasets"});this.chainCallImportingFolders(h,f,k,"admin_path")}},initChainCallControl:function(f){var g;switch(f.action){case"adding_datasets":g=this.templateAddingDatasetsProgressBar();this.modal.$el.find(".modal-body").html(g({folder_name:this.options.folder_name}));break;case"deleting_datasets":g=this.templateDeletingDatasetsProgressBar();this.modal.$el.find(".modal-body").html(g());break;case"to_history":g=this.templateImportIntoHistoryProgressBar();this.modal.$el.find(".modal-body").html(g({history_name:f.history_name}));break;default:console.error("Wrong action specified.");break}this.progress=0;this.progressStep=100/f.length;this.options.chain_call_control.total_number=f.length;this.options.chain_call_control.failed_number=0},importFromUserdirClicked:function(k){var g=$("#jstree_browser").jstree().get_selected(true);var f=this.modal.$el.find(".preserve-checkbox").is(":checked");var m=this.modal.$el.find(".link-checkbox").is(":checked");var j=g[0].type;var l=[];if(g.length<1){e.info("You have to select some items first")}else{this.modal.disableButton("Import");for(var h=g.length-1;h>=0;h--){if(g[h].li_attr.full_path!==undefined){l.push(g[h].li_attr.full_path)}}this.initChainCallControl({length:l.length,action:"adding_datasets"});if(j==="folder"){this.chainCallImportingFolders(l,f,m,"userdir_folder")}else{if(j==="file"){this.chainCallImportingUserdirFiles(l)}}}},fetchAndDisplayHistoryContents:function(h){var g=new c.HistoryContents({id:h});var f=this;g.fetch({success:function(j){var i=f.templateHistoryContents();f.histories.get(h).set({contents:j});f.modal.$el.find("#selected_history_content").html(i({history_contents:j.models.reverse()}))},error:function(j,i){if(typeof i.responseJSON!=="undefined"){e.error(i.responseJSON.err_msg)}else{e.error("An error ocurred :(")}}})},addAllDatasetsFromHistory:function(){var k=this.modal.$el.find("#selected_history_content").find(":checked");var f=[];var j=[];if(k.length<1){e.info("You have to select some datasets first")}else{this.modal.disableButton("Add");k.each(function(){var i=$(this.parentElement).data("id");if(i){f.push(i)}});for(var h=f.length-1;h>=0;h--){history_dataset_id=f[h];var g=new c.Item();g.url="/api/folders/"+this.options.id+"/contents";g.set({from_hda_id:history_dataset_id});j.push(g)}this.initChainCallControl({length:j.length,action:"adding_datasets"});this.chainCallAddingHdas(j)}},chainCallImportingIntoHistory:function(g,j){var f=this;var h=g.pop();if(typeof h=="undefined"){if(this.options.chain_call_control.failed_number===0){e.success("Selected datasets imported into history. Click this to start analysing it.","",{onclick:function(){window.location="/"}})}else{if(this.options.chain_call_control.failed_number===this.options.chain_call_control.total_number){e.error("There was an error and no datasets were imported into history.")}else{if(this.options.chain_call_control.failed_number<this.options.chain_call_control.total_number){e.warning("Some of the datasets could not be imported into history. Click this to see what was imported.","",{onclick:function(){window.location="/"}})}}}Galaxy.modal.hide();return true}var i=$.when(h.save({content:h.content,source:h.source}));i.done(function(){f.updateProgress();f.chainCallImportingIntoHistory(g,j)}).fail(function(){f.options.chain_call_control.failed_number+=1;f.updateProgress();f.chainCallImportingIntoHistory(g,j)})},chainCallImportingUserdirFiles:function(i){var f=this;var g=i.pop();if(typeof g==="undefined"){if(this.options.chain_call_control.failed_number===0){e.success("Selected files imported into the current folder");Galaxy.modal.hide()}else{e.error("Something went wrong :(")}return true}var h=$.when($.post("/api/libraries/datasets?encoded_folder_id="+f.id+"&source=userdir_file&path="+g));h.done(function(j){f.updateProgress();f.chainCallImportingUserdirFiles(i)}).fail(function(){f.options.chain_call_control.failed_number+=1;f.updateProgress();f.chainCallImportingUserdirFiles(i)})},chainCallImportingFolders:function(k,f,l,i){var g=this;var h=k.pop();if(typeof h=="undefined"){if(this.options.chain_call_control.failed_number===0){e.success("Selected folders and their contents imported into the current folder");Galaxy.modal.hide()}else{e.error("Something went wrong :(")}return true}var j=$.when($.post("/api/libraries/datasets?encoded_folder_id="+g.id+"&source="+i+"&path="+h+"&preserve_dirs="+f+"&link_data="+l));j.done(function(m){g.updateProgress();g.chainCallImportingFolders(k,f,l,i)}).fail(function(){g.options.chain_call_control.failed_number+=1;g.updateProgress();g.chainCallImportingFolders(k,f,l,i)})},chainCallAddingHdas:function(g){var f=this;this.added_hdas=new c.Folder();var h=g.pop();if(typeof h=="undefined"){if(this.options.chain_call_control.failed_number===0){e.success("Selected datasets from history added to the folder")}else{if(this.options.chain_call_control.failed_number===this.options.chain_call_control.total_number){e.error("There was an error and no datasets were added to the folder.")}else{if(this.options.chain_call_control.failed_number<this.options.chain_call_control.total_number){e.warning("Some of the datasets could not be added to the folder")}}}Galaxy.modal.hide();return this.added_hdas}var i=$.when(h.save({from_hda_id:h.get("from_hda_id")}));i.done(function(j){Galaxy.libraries.folderListView.collection.add(j);f.updateProgress();f.chainCallAddingHdas(g)}).fail(function(){f.options.chain_call_control.failed_number+=1;f.updateProgress();f.chainCallAddingHdas(g)})},chainCallDeletingHdas:function(g){var f=this;this.deleted_lddas=new c.Folder();var h=g.pop();if(typeof h==="undefined"){if(this.options.chain_call_control.failed_number===0){e.success("Selected datasets deleted")}else{if(this.options.chain_call_control.failed_number===this.options.chain_call_control.total_number){e.error("There was an error and no datasets were deleted.")}else{if(this.options.chain_call_control.failed_number<this.options.chain_call_control.total_number){e.warning("Some of the datasets could not be deleted")}}}Galaxy.modal.hide();return this.deleted_lddas}var i=$.when(h.destroy());i.done(function(k){Galaxy.libraries.folderListView.collection.remove(h.id);f.updateProgress();if(Galaxy.libraries.folderListView.options.include_deleted){var j=new c.Item(k);Galaxy.libraries.folderListView.collection.add(j)}f.chainCallDeletingHdas(g)}).fail(function(){f.options.chain_call_control.failed_number+=1;f.updateProgress();f.chainCallDeletingHdas(g)})},checkIncludeDeleted:function(f){if(f.target.checked){Galaxy.libraries.folderListView.fetchFolder({include_deleted:true})}else{Galaxy.libraries.folderListView.fetchFolder({include_deleted:false})}},deleteSelectedDatasets:function(){var f=$("#folder_table").find(":checked");if(f.length===0){e.info("You have to select some datasets first")}else{var j=this.templateDeletingDatasetsProgressBar();this.modal=Galaxy.modal;this.modal.show({closing_events:true,title:"Deleting selected datasets",body:j({}),buttons:{Close:function(){Galaxy.modal.hide()}}});this.options.chain_call_control.total_number=0;this.options.chain_call_control.failed_number=0;var g=[];f.each(function(){if(this.parentElement.parentElement.id!==""){g.push(this.parentElement.parentElement.id)}});this.progressStep=100/g.length;this.progress=0;var l=[];for(var h=g.length-1;h>=0;h--){var k=new c.Item({id:g[h]});l.push(k)}this.options.chain_call_control.total_number=g.length;this.chainCallDeletingHdas(l)}},showLibInfo:function(){var g=Galaxy.libraries.folderListView.folderContainer.attributes.metadata.parent_library_id;var f=null;var h=this;if(Galaxy.libraries.libraryListView!==null){f=Galaxy.libraries.libraryListView.collection.get(g);this.showLibInfoModal(f)}else{f=new c.Library({id:g});f.fetch({success:function(){h.showLibInfoModal(f)},error:function(j,i){if(typeof i.responseJSON!=="undefined"){e.error(i.responseJSON.err_msg)}else{e.error("An error ocurred :(")}}})}},showLibInfoModal:function(f){var g=this.templateLibInfoInModal();this.modal=Galaxy.modal;this.modal.show({closing_events:true,title:"Library Information",body:g({library:f}),buttons:{Close:function(){Galaxy.modal.hide()}}})},showImportModal:function(f){switch(f.source){case"history":this.addFilesFromHistoryModal();break;case"importdir":break;case"path":this.importFilesFromPathModal();break;case"userdir":this.importFilesFromUserdirModal();break;default:Galaxy.libraries.library_router.back();e.error("Invalid import source.");break}},templateToolBar:function(){tmpl_array=[];tmpl_array.push('<div class="library_style_container">');tmpl_array.push(' <div id="library_toolbar">');tmpl_array.push(" <span><strong>DATA LIBRARIES</strong></span>");tmpl_array.push(' <span data-toggle="tooltip" data-placement="top" class="logged-dataset-manipulation" title="Include deleted datasets" style="display:none;"> | <input id="include_deleted_datasets_chk" style="margin: 0;" type="checkbox"> include deleted | </input></span>');tmpl_array.push(' <button style="display:none;" data-toggle="tooltip" data-placement="top" title="Create New Folder" id="toolbtn_create_folder" class="btn btn-default primary-button add-library-items" type="button"><span class="fa fa-plus"></span><span class="fa fa-folder"></span></button>');tmpl_array.push("<% if(mutiple_add_dataset_options) { %>");tmpl_array.push(' <div class="btn-group add-library-items" style="display:none;">');tmpl_array.push(' <button title="Add Datasets to Current Folder" id="" type="button" class="primary-button dropdown-toggle" data-toggle="dropdown">');tmpl_array.push(' <span class="fa fa-plus"></span><span class="fa fa-file"></span><span class="caret"></span>');tmpl_array.push(" </button>");tmpl_array.push(' <ul class="dropdown-menu" role="menu">');tmpl_array.push(' <li><a href="#folders/<%= id %>/import/history"> from History</a></li>');tmpl_array.push("<% if(user_library_import_dir !== null) { %>");tmpl_array.push(' <li><a href="#folders/<%= id %>/import/userdir"> from User Directory</a></li>');tmpl_array.push("<% } %>");tmpl_array.push("<% if(allow_library_path_paste) { %>");tmpl_array.push(' <li class="divider"></li>');tmpl_array.push(' <li class="dropdown-header">Admins only</li>');tmpl_array.push("<% if(allow_library_path_paste) { %>");tmpl_array.push(' <li><a href="#folders/<%= id %>/import/path">from Path</a></li>');tmpl_array.push("<% } %>");tmpl_array.push("<% } %>");tmpl_array.push(" </ul>");tmpl_array.push(" </div>");tmpl_array.push("<% } else { %>");tmpl_array.push(' <button style="display:none;" data-toggle="tooltip" data-placement="top" title="Add Datasets to Current Folder" id="toolbtn_add_files" class="btn btn-default toolbtn_add_files primary-button add-library-items" type="button"><span class="fa fa-plus"></span><span class="fa fa-file"></span></span></button>');tmpl_array.push("<% } %>");tmpl_array.push(' <button data-toggle="tooltip" data-placement="top" title="Import selected datasets into history" id="toolbtn_bulk_import" class="primary-button dataset-manipulation" style="margin-left: 0.5em; display:none;" type="button"><span class="fa fa-book"></span> to History</button>');tmpl_array.push(' <div id="toolbtn_dl" class="btn-group dataset-manipulation" style="margin-left: 0.5em; display:none; ">');tmpl_array.push(' <button title="Download selected datasets as archive" id="drop_toggle" type="button" class="primary-button dropdown-toggle" data-toggle="dropdown">');tmpl_array.push(' <span class="fa fa-download"></span> Download <span class="caret"></span>');tmpl_array.push(" </button>");tmpl_array.push(' <ul class="dropdown-menu" role="menu">');tmpl_array.push(' <li><a href="#/folders/<%= id %>/download/tgz">.tar.gz</a></li>');tmpl_array.push(' <li><a href="#/folders/<%= id %>/download/tbz">.tar.bz</a></li>');tmpl_array.push(' <li><a href="#/folders/<%= id %>/download/zip">.zip</a></li>');tmpl_array.push(" </ul>");tmpl_array.push(" </div>");tmpl_array.push(' <button data-toggle="tooltip" data-placement="top" title="Mark selected datasets deleted" id="toolbtn_bulk_delete" class="primary-button logged-dataset-manipulation" style="margin-left: 0.5em; display:none; " type="button"><span class="fa fa-times"></span> Delete</button>');tmpl_array.push(' <button data-id="<%- id %>" data-toggle="tooltip" data-placement="top" title="Show library information" id="toolbtn_show_libinfo" class="primary-button" style="margin-left: 0.5em;" type="button"><span class="fa fa-info-circle"></span> Library Info</button>');tmpl_array.push(' <span class="help-button" data-toggle="tooltip" data-placement="top" title="Visit Libraries Wiki"><a href="https://wiki.galaxyproject.org/DataLibraries/screen/FolderContents" target="_blank"><button class="primary-button btn-xs" type="button"><span class="fa fa-question-circle"></span> Help</button></a></span>');tmpl_array.push(" </div>");tmpl_array.push(' <div id="folder_items_element">');tmpl_array.push(" </div>");tmpl_array.push("</div>");return _.template(tmpl_array.join(""))},templateLibInfoInModal:function(){tmpl_array=[];tmpl_array.push('<div id="lif_info_modal">');tmpl_array.push("<h2>Library name:</h2>");tmpl_array.push('<p><%- library.get("name") %></p>');tmpl_array.push("<h3>Library description:</h3>");tmpl_array.push('<p><%- library.get("description") %></p>');tmpl_array.push("<h3>Library synopsis:</h3>");tmpl_array.push('<p><%- library.get("synopsis") %></p>');tmpl_array.push("</div>");return _.template(tmpl_array.join(""))},templateNewFolderInModal:function(){tmpl_array=[];tmpl_array.push('<div id="new_folder_modal">');tmpl_array.push("<form>");tmpl_array.push('<input type="text" name="Name" value="" placeholder="Name">');tmpl_array.push('<input type="text" name="Description" value="" placeholder="Description">');tmpl_array.push("</form>");tmpl_array.push("</div>");return _.template(tmpl_array.join(""))},templateBulkImportInModal:function(){var f=[];f.push('<span id="history_modal_combo_bulk" style="width:90%; margin-left: 1em; margin-right: 1em; ">');f.push("Select history: ");f.push('<select id="dataset_import_bulk" name="dataset_import_bulk" style="width:50%; margin-bottom: 1em; "> ');f.push(" <% _.each(histories, function(history) { %>");f.push(' <option value="<%= _.escape(history.get("id")) %>"><%= _.escape(history.get("name")) %></option>');f.push(" <% }); %>");f.push("</select>");f.push("</span>");return _.template(f.join(""))},templateImportIntoHistoryProgressBar:function(){var f=[];f.push('<div class="import_text">');f.push("Importing selected datasets to history <b><%= _.escape(history_name) %></b>");f.push("</div>");f.push('<div class="progress">');f.push(' <div class="progress-bar progress-bar-import" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 00%;">');f.push(' <span class="completion_span">0% Complete</span>');f.push(" </div>");f.push("</div>");f.push("");return _.template(f.join(""))},templateAddingDatasetsProgressBar:function(){var f=[];f.push('<div class="import_text">');f.push("Adding selected datasets to library folder <b><%= _.escape(folder_name) %></b>");f.push("</div>");f.push('<div class="progress">');f.push(' <div class="progress-bar progress-bar-import" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 00%;">');f.push(' <span class="completion_span">0% Complete</span>');f.push(" </div>");f.push("</div>");f.push("");return _.template(f.join(""))},templateDeletingDatasetsProgressBar:function(){var f=[];f.push('<div class="import_text">');f.push("</div>");f.push('<div class="progress">');f.push(' <div class="progress-bar progress-bar-import" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 00%;">');f.push(' <span class="completion_span">0% Complete</span>');f.push(" </div>");f.push("</div>");f.push("");return _.template(f.join(""))},templateBrowserModal:function(){var f=[];f.push('<div id="file_browser_modal">');f.push('<div style="margin-bottom:1em;">');f.push('<label class="radio-inline">');f.push(' <input title="Switch to selecting files" type="radio" name="jstree-radio" value="jstree-disable-folders" checked="checked"> Files');f.push("</label>");f.push('<label class="radio-inline">');f.push(' <input title="Switch to selecting folders" type="radio" name="jstree-radio" value="jstree-disable-files"> Folders');f.push("</label>");f.push('<label class="checkbox-inline jstree-preserve-structure" style="display:none;">');f.push(' <input class="preserve-checkbox" type="checkbox" value="preserve_directory_structure">');f.push("Preserve directory structure");f.push(" </label>");f.push('<label class="checkbox-inline jstree-link-files" style="display:none;">');f.push(' <input class="link-checkbox" type="checkbox" value="link_files">');f.push("Link files instead of copying");f.push(" </label>");f.push("</div>");f.push('<div class="alert alert-info jstree-files-message">All files you select will be imported into the current folder.</div>');f.push('<div class="alert alert-info jstree-folders-message" style="display:none;">All files within the selected folders and their subfolders will be imported into the current folder.</div>');f.push('<div id="jstree_browser">');f.push("</div>");f.push("</div>");return _.template(f.join(""))},templateImportPathModal:function(){var f=[];f.push('<div id="file_browser_modal">');f.push('<label class="checkbox-inline jstree-preserve-structure">');f.push(' <input class="preserve-checkbox" type="checkbox" value="preserve_directory_structure">');f.push("Preserve directory structure");f.push(" </label>");f.push('<label class="checkbox-inline jstree-link-files">');f.push(' <input class="link-checkbox" type="checkbox" value="link_files">');f.push("Link files instead of copying");f.push(" </label>");f.push("</div>");f.push('<div class="alert alert-info jstree-folders-message">All files within the given folders and their subfolders will be imported into the current folder.</div>');f.push('<textarea id="import_paths" class="form-control" rows="5" placeholder="Paths separated by newline"></textarea>');f.push("</div>");return _.template(f.join(""))},templateAddFilesFromHistory:function(){var f=[];f.push('<div id="add_files_modal">');f.push('<div id="history_modal_combo_bulk">');f.push("Select history: ");f.push('<select id="dataset_add_bulk" name="dataset_add_bulk" style="width:66%; "> ');f.push(" <% _.each(histories, function(history) { %>");f.push(' <option value="<%= _.escape(history.get("id")) %>"><%= _.escape(history.get("name")) %></option>');f.push(" <% }); %>");f.push("</select>");f.push("</div>");f.push("<br/>");f.push('<div id="selected_history_content">');f.push("</div>");f.push("</div>");return _.template(f.join(""))},templateHistoryContents:function(){var f=[];f.push("<strong>Choose the datasets to import:</strong>");f.push("<ul>");f.push(" <% _.each(history_contents, function(history_item) { %>");f.push(' <li data-id="<%= _.escape(history_item.get("id")) %>">');f.push(' <input style="margin: 0;" type="checkbox"><%= _.escape(history_item.get("hid")) %>: <%= _.escape(history_item.get("name")) %>');f.push(" </li>");f.push(" <% }); %>");f.push("</ul>");return _.template(f.join(""))}});return{FolderToolbarView:a}});
\ No newline at end of file
+define(["galaxy.masthead","utils/utils","libs/toastr","mvc/library/library-model"],function(b,d,e,c){var a=Backbone.View.extend({el:"#center",events:{"click #toolbtn_create_folder":"createFolderFromModal","click #toolbtn_bulk_import":"modalBulkImport","click #include_deleted_datasets_chk":"checkIncludeDeleted","click #toolbtn_show_libinfo":"showLibInfo","click #toolbtn_bulk_delete":"deleteSelectedDatasets"},defaults:{can_add_library_item:false,contains_file:false,chain_call_control:{total_number:0,failed_number:0},disabled_jstree_element:"folders"},modal:null,jstree:null,histories:null,initialize:function(f){this.options=_.defaults(f||{},this.defaults);this.render()},render:function(f){this.options=_.extend(this.options,f);var h=this.templateToolBar();var g={id:this.options.id,is_admin:false,is_anonym:true,user_library_import_dir:Galaxy.config.user_library_import_dir,allow_library_path_paste:Galaxy.config.allow_library_path_paste,library_import_dir:Galaxy.config.library_import_dir,mutiple_add_dataset_options:false};if(Galaxy.currUser){g.is_admin=Galaxy.currUser.isAdmin();g.is_anonym=Galaxy.currUser.isAnonymous();if(g.user_library_import_dir!==null||g.allow_library_path_paste!==false||g.library_import_dir!==null){g.mutiple_add_dataset_options=true}}this.$el.html(h(g))},configureElements:function(f){this.options=_.extend(this.options,f);if(this.options.can_add_library_item===true){$(".add-library-items").show()}else{$(".add-library-items").hide()}if(this.options.contains_file===true){if(Galaxy.currUser){if(!Galaxy.currUser.isAnonymous()){$(".logged-dataset-manipulation").show();$(".dataset-manipulation").show()}else{$(".dataset-manipulation").show();$(".logged-dataset-manipulation").hide()}}else{$(".logged-dataset-manipulation").hide();$(".dataset-manipulation").hide()}}else{$(".logged-dataset-manipulation").hide();$(".dataset-manipulation").hide()}this.$el.find("[data-toggle]").tooltip()},createFolderFromModal:function(h){h.preventDefault();h.stopPropagation();var f=this;var g=this.templateNewFolderInModal();this.modal=Galaxy.modal;this.modal.show({closing_events:true,title:"Create New Folder",body:g(),buttons:{Create:function(){f.create_new_folder_event()},Close:function(){Galaxy.modal.hide()}}})},create_new_folder_event:function(){var f=this.serialize_new_folder();if(this.validate_new_folder(f)){var g=new c.FolderAsModel();url_items=Backbone.history.fragment.split("/");current_folder_id=url_items[url_items.length-1];g.url=g.urlRoot+"/"+current_folder_id;g.save(f,{success:function(h){Galaxy.modal.hide();e.success("Folder created.");h.set({type:"folder"});Galaxy.libraries.folderListView.collection.add(h)},error:function(i,h){Galaxy.modal.hide();if(typeof h.responseJSON!=="undefined"){e.error(h.responseJSON.err_msg)}else{e.error("An error ocurred.")}}})}else{e.error("Folder's name is missing.")}return false},serialize_new_folder:function(){return{name:$("input[name='Name']").val(),description:$("input[name='Description']").val()}},validate_new_folder:function(f){return f.name!==""},modalBulkImport:function(){var f=$("#folder_table").find(":checked");if(f.length===0){e.info("You must select some datasets first.")}else{this.refreshUserHistoriesList(function(h){var g=h.templateBulkImportInModal();h.modal=Galaxy.modal;h.modal.show({closing_events:true,title:"Import into History",body:g({histories:h.histories.models}),buttons:{Import:function(){h.importAllIntoHistory()},Close:function(){Galaxy.modal.hide()}}})})}},refreshUserHistoriesList:function(g){var f=this;this.histories=new c.GalaxyHistories();this.histories.fetch({success:function(){g(f)},error:function(i,h){if(typeof h.responseJSON!=="undefined"){e.error(h.responseJSON.err_msg)}else{e.error("An error ocurred.")}}})},importAllIntoHistory:function(){this.modal.disableButton("Import");var j=$("select[name=dataset_import_bulk] option:selected").val();var m=$("select[name=dataset_import_bulk] option:selected").text();this.options.last_used_history_id=j;var g=[];$("#folder_table").find(":checked").each(function(){if(this.parentElement.parentElement.id!==""){g.push(this.parentElement.parentElement.id)}});var l=[];for(var h=g.length-1;h>=0;h--){var f=g[h];var k=new c.HistoryItem();k.url=k.urlRoot+j+"/contents";k.content=f;k.source="library";l.push(k)}this.initChainCallControl({length:l.length,action:"to_history",history_name:m});jQuery.getJSON(galaxy_config.root+"history/set_as_current?id="+j);this.chainCallImportingIntoHistory(l,m)},updateProgress:function(){this.progress+=this.progressStep;$(".progress-bar-import").width(Math.round(this.progress)+"%");txt_representation=Math.round(this.progress)+"% Complete";$(".completion_span").text(txt_representation)},download:function(f,j){var h=[];$("#folder_table").find(":checked").each(function(){if(this.parentElement.parentElement.id!==""){h.push(this.parentElement.parentElement.id)}});var g="/api/libraries/datasets/download/"+j;var i={ldda_ids:h};this.processDownload(g,i,"get")},processDownload:function(g,h,i){if(g&&h){h=typeof h==="string"?h:$.param(h);var f="";$.each(h.split("&"),function(){var j=this.split("=");f+='<input type="hidden" name="'+j[0]+'" value="'+j[1]+'" />'});$('<form action="'+g+'" method="'+(i||"post")+'">'+f+"</form>").appendTo("body").submit().remove();e.info("Your download will begin soon.")}else{e.error("An error occurred.")}},addFilesFromHistoryModal:function(){this.refreshUserHistoriesList(function(f){f.modal=Galaxy.modal;var g=f.templateAddFilesFromHistory();var h=f.options.full_path[f.options.full_path.length-1][1];f.modal.show({closing_events:true,title:"Adding datasets from your history to folder "+h,body:g({histories:f.histories.models}),buttons:{Add:function(){f.addAllDatasetsFromHistory()},Close:function(){Galaxy.modal.hide()}},closing_callback:function(){Galaxy.libraries.library_router.back()}});if(f.histories.models.length>0){f.fetchAndDisplayHistoryContents(f.histories.models[0].id);$("#dataset_add_bulk").change(function(i){f.fetchAndDisplayHistoryContents(i.target.value)})}else{e.error("An error ocurred.")}})},importFilesFromPathModal:function(){var g=this;this.modal=Galaxy.modal;var f=this.templateImportPathModal();this.modal.show({closing_events:true,title:"Enter paths relative to Galaxy root",body:f({}),buttons:{Import:function(){g.importFromPathsClicked(g)},Close:function(){Galaxy.modal.hide()}},closing_callback:function(){Galaxy.libraries.library_router.navigate("folders/"+g.id,{trigger:true})}})},importFilesFromUserdirModal:function(){var g=this;this.modal=Galaxy.modal;var f=this.templateBrowserModal();this.modal.show({closing_events:true,title:"Select folders or files to import",body:f({}),buttons:{Import:function(){g.importFromUserdirClicked(g)},Close:function(){Galaxy.modal.hide()}},closing_callback:function(){Galaxy.libraries.library_router.navigate("folders/"+g.id,{trigger:true})}});this.renderJstree({disabled_jstree_element:"folders"});$("input[type=radio]").change(function(h){if(h.target.value==="jstree-disable-folders"){g.renderJstree({disabled_jstree_element:"folders"});$(".jstree-folders-message").hide();$(".jstree-preserve-structure").hide();$(".jstree-link-files").hide();$(".jstree-files-message").show()}else{if(h.target.value==="jstree-disable-files"){$(".jstree-files-message").hide();$(".jstree-folders-message").show();$(".jstree-link-files").show();$(".jstree-preserve-structure").show();g.renderJstree({disabled_jstree_element:"files"})}}})},renderJstree:function(f){var h=this;this.options=_.extend(this.options,f);var g=this.options.disabled_jstree_element;this.jstree=new c.Jstree();this.jstree.url=this.jstree.urlRoot+"?target=userdir&format=jstree&disable="+g;this.jstree.fetch({success:function(j,i){define("jquery",function(){return jQuery});require(["libs/jquery/jstree"],function(k){$("#jstree_browser").jstree("destroy");$("#jstree_browser").jstree({core:{data:j},plugins:["types","checkbox"],types:{folder:{icon:"jstree-folder"},file:{icon:"jstree-file"}},checkbox:{three_state:false}})})},error:function(j,i){if(typeof i.responseJSON!=="undefined"){e.error(i.responseJSON.err_msg)}else{e.error("An error ocurred.")}}})},importFromPathsClicked:function(){var f=this.modal.$el.find(".preserve-checkbox").is(":checked");var k=this.modal.$el.find(".link-checkbox").is(":checked");var j=$("textarea#import_paths").val();var h=[];if(!j){e.info("Please enter a path relative to Galaxy root.")}else{this.modal.disableButton("Import");j=j.split("\n");for(var g=j.length-1;g>=0;g--){trimmed=j[g].trim();if(trimmed.length!==0){h.push(trimmed)}}this.initChainCallControl({length:h.length,action:"adding_datasets"});this.chainCallImportingFolders(h,f,k,"admin_path")}},initChainCallControl:function(f){var g;switch(f.action){case"adding_datasets":g=this.templateAddingDatasetsProgressBar();this.modal.$el.find(".modal-body").html(g({folder_name:this.options.folder_name}));break;case"deleting_datasets":g=this.templateDeletingDatasetsProgressBar();this.modal.$el.find(".modal-body").html(g());break;case"to_history":g=this.templateImportIntoHistoryProgressBar();this.modal.$el.find(".modal-body").html(g({history_name:f.history_name}));break;default:console.error("Wrong action specified.");break}this.progress=0;this.progressStep=100/f.length;this.options.chain_call_control.total_number=f.length;this.options.chain_call_control.failed_number=0},importFromUserdirClicked:function(k){var g=$("#jstree_browser").jstree().get_selected(true);var f=this.modal.$el.find(".preserve-checkbox").is(":checked");var m=this.modal.$el.find(".link-checkbox").is(":checked");var j=g[0].type;var l=[];if(g.length<1){e.info("You must select some items first.")}else{this.modal.disableButton("Import");for(var h=g.length-1;h>=0;h--){if(g[h].li_attr.full_path!==undefined){l.push(g[h].li_attr.full_path)}}this.initChainCallControl({length:l.length,action:"adding_datasets"});if(j==="folder"){this.chainCallImportingFolders(l,f,m,"userdir_folder")}else{if(j==="file"){this.chainCallImportingUserdirFiles(l)}}}},fetchAndDisplayHistoryContents:function(h){var g=new c.HistoryContents({id:h});var f=this;g.fetch({success:function(j){var i=f.templateHistoryContents();f.histories.get(h).set({contents:j});f.modal.$el.find("#selected_history_content").html(i({history_contents:j.models.reverse()}))},error:function(j,i){if(typeof i.responseJSON!=="undefined"){e.error(i.responseJSON.err_msg)}else{e.error("An error ocurred.")}}})},addAllDatasetsFromHistory:function(){var k=this.modal.$el.find("#selected_history_content").find(":checked");var f=[];var j=[];if(k.length<1){e.info("You must select some datasets first.")}else{this.modal.disableButton("Add");k.each(function(){var i=$(this.parentElement).data("id");if(i){f.push(i)}});for(var h=f.length-1;h>=0;h--){history_dataset_id=f[h];var g=new c.Item();g.url="/api/folders/"+this.options.id+"/contents";g.set({from_hda_id:history_dataset_id});j.push(g)}this.initChainCallControl({length:j.length,action:"adding_datasets"});this.chainCallAddingHdas(j)}},chainCallImportingIntoHistory:function(g,j){var f=this;var h=g.pop();if(typeof h=="undefined"){if(this.options.chain_call_control.failed_number===0){e.success("Selected datasets imported into history. Click this to start analysing it.","",{onclick:function(){window.location="/"}})}else{if(this.options.chain_call_control.failed_number===this.options.chain_call_control.total_number){e.error("There was an error and no datasets were imported into history.")}else{if(this.options.chain_call_control.failed_number<this.options.chain_call_control.total_number){e.warning("Some of the datasets could not be imported into history. Click this to see what was imported.","",{onclick:function(){window.location="/"}})}}}Galaxy.modal.hide();return true}var i=$.when(h.save({content:h.content,source:h.source}));i.done(function(){f.updateProgress();f.chainCallImportingIntoHistory(g,j)}).fail(function(){f.options.chain_call_control.failed_number+=1;f.updateProgress();f.chainCallImportingIntoHistory(g,j)})},chainCallImportingUserdirFiles:function(i){var f=this;var g=i.pop();if(typeof g==="undefined"){if(this.options.chain_call_control.failed_number===0){e.success("Selected files imported into the current folder");Galaxy.modal.hide()}else{e.error("An error occured.")}return true}var h=$.when($.post("/api/libraries/datasets?encoded_folder_id="+f.id+"&source=userdir_file&path="+g));h.done(function(j){f.updateProgress();f.chainCallImportingUserdirFiles(i)}).fail(function(){f.options.chain_call_control.failed_number+=1;f.updateProgress();f.chainCallImportingUserdirFiles(i)})},chainCallImportingFolders:function(k,f,l,i){var g=this;var h=k.pop();if(typeof h=="undefined"){if(this.options.chain_call_control.failed_number===0){e.success("Selected folders and their contents imported into the current folder.");Galaxy.modal.hide()}else{e.error("An error occured.")}return true}var j=$.when($.post("/api/libraries/datasets?encoded_folder_id="+g.id+"&source="+i+"&path="+h+"&preserve_dirs="+f+"&link_data="+l));j.done(function(m){g.updateProgress();g.chainCallImportingFolders(k,f,l,i)}).fail(function(){g.options.chain_call_control.failed_number+=1;g.updateProgress();g.chainCallImportingFolders(k,f,l,i)})},chainCallAddingHdas:function(g){var f=this;this.added_hdas=new c.Folder();var h=g.pop();if(typeof h=="undefined"){if(this.options.chain_call_control.failed_number===0){e.success("Selected datasets from history added to the folder")}else{if(this.options.chain_call_control.failed_number===this.options.chain_call_control.total_number){e.error("There was an error and no datasets were added to the folder.")}else{if(this.options.chain_call_control.failed_number<this.options.chain_call_control.total_number){e.warning("Some of the datasets could not be added to the folder")}}}Galaxy.modal.hide();return this.added_hdas}var i=$.when(h.save({from_hda_id:h.get("from_hda_id")}));i.done(function(j){Galaxy.libraries.folderListView.collection.add(j);f.updateProgress();f.chainCallAddingHdas(g)}).fail(function(){f.options.chain_call_control.failed_number+=1;f.updateProgress();f.chainCallAddingHdas(g)})},chainCallDeletingHdas:function(g){var f=this;this.deleted_lddas=new c.Folder();var h=g.pop();if(typeof h==="undefined"){if(this.options.chain_call_control.failed_number===0){e.success("Selected datasets deleted")}else{if(this.options.chain_call_control.failed_number===this.options.chain_call_control.total_number){e.error("There was an error and no datasets were deleted.")}else{if(this.options.chain_call_control.failed_number<this.options.chain_call_control.total_number){e.warning("Some of the datasets could not be deleted")}}}Galaxy.modal.hide();return this.deleted_lddas}var i=$.when(h.destroy());i.done(function(k){Galaxy.libraries.folderListView.collection.remove(h.id);f.updateProgress();if(Galaxy.libraries.folderListView.options.include_deleted){var j=new c.Item(k);Galaxy.libraries.folderListView.collection.add(j)}f.chainCallDeletingHdas(g)}).fail(function(){f.options.chain_call_control.failed_number+=1;f.updateProgress();f.chainCallDeletingHdas(g)})},checkIncludeDeleted:function(f){if(f.target.checked){Galaxy.libraries.folderListView.fetchFolder({include_deleted:true})}else{Galaxy.libraries.folderListView.fetchFolder({include_deleted:false})}},deleteSelectedDatasets:function(){var f=$("#folder_table").find(":checked");if(f.length===0){e.info("You must select at least one dataset for deletion.")}else{var j=this.templateDeletingDatasetsProgressBar();this.modal=Galaxy.modal;this.modal.show({closing_events:true,title:"Deleting selected datasets",body:j({}),buttons:{Close:function(){Galaxy.modal.hide()}}});this.options.chain_call_control.total_number=0;this.options.chain_call_control.failed_number=0;var g=[];f.each(function(){if(this.parentElement.parentElement.id!==""){g.push(this.parentElement.parentElement.id)}});this.progressStep=100/g.length;this.progress=0;var l=[];for(var h=g.length-1;h>=0;h--){var k=new c.Item({id:g[h]});l.push(k)}this.options.chain_call_control.total_number=g.length;this.chainCallDeletingHdas(l)}},showLibInfo:function(){var g=Galaxy.libraries.folderListView.folderContainer.attributes.metadata.parent_library_id;var f=null;var h=this;if(Galaxy.libraries.libraryListView!==null){f=Galaxy.libraries.libraryListView.collection.get(g);this.showLibInfoModal(f)}else{f=new c.Library({id:g});f.fetch({success:function(){h.showLibInfoModal(f)},error:function(j,i){if(typeof i.responseJSON!=="undefined"){e.error(i.responseJSON.err_msg)}else{e.error("An error ocurred.")}}})}},showLibInfoModal:function(f){var g=this.templateLibInfoInModal();this.modal=Galaxy.modal;this.modal.show({closing_events:true,title:"Library Information",body:g({library:f}),buttons:{Close:function(){Galaxy.modal.hide()}}})},showImportModal:function(f){switch(f.source){case"history":this.addFilesFromHistoryModal();break;case"importdir":break;case"path":this.importFilesFromPathModal();break;case"userdir":this.importFilesFromUserdirModal();break;default:Galaxy.libraries.library_router.back();e.error("Invalid import source.");break}},templateToolBar:function(){tmpl_array=[];tmpl_array.push('<div class="library_style_container">');tmpl_array.push(' <div id="library_toolbar">');tmpl_array.push(" <span><strong>DATA LIBRARIES</strong></span>");tmpl_array.push(' <span data-toggle="tooltip" data-placement="top" class="logged-dataset-manipulation" title="Include deleted datasets" style="display:none;"> | <input id="include_deleted_datasets_chk" style="margin: 0;" type="checkbox"> include deleted | </input></span>');tmpl_array.push(' <button style="display:none;" data-toggle="tooltip" data-placement="top" title="Create New Folder" id="toolbtn_create_folder" class="btn btn-default primary-button add-library-items" type="button"><span class="fa fa-plus"></span><span class="fa fa-folder"></span></button>');tmpl_array.push("<% if(mutiple_add_dataset_options) { %>");tmpl_array.push(' <div class="btn-group add-library-items" style="display:none;">');tmpl_array.push(' <button title="Add Datasets to Current Folder" id="" type="button" class="primary-button dropdown-toggle" data-toggle="dropdown">');tmpl_array.push(' <span class="fa fa-plus"></span><span class="fa fa-file"></span><span class="caret"></span>');tmpl_array.push(" </button>");tmpl_array.push(' <ul class="dropdown-menu" role="menu">');tmpl_array.push(' <li><a href="#folders/<%= id %>/import/history"> from History</a></li>');tmpl_array.push("<% if(user_library_import_dir !== null) { %>");tmpl_array.push(' <li><a href="#folders/<%= id %>/import/userdir"> from User Directory</a></li>');tmpl_array.push("<% } %>");tmpl_array.push("<% if(allow_library_path_paste) { %>");tmpl_array.push(' <li class="divider"></li>');tmpl_array.push(' <li class="dropdown-header">Admins only</li>');tmpl_array.push("<% if(allow_library_path_paste) { %>");tmpl_array.push(' <li><a href="#folders/<%= id %>/import/path">from Path</a></li>');tmpl_array.push("<% } %>");tmpl_array.push("<% } %>");tmpl_array.push(" </ul>");tmpl_array.push(" </div>");tmpl_array.push("<% } else { %>");tmpl_array.push(' <button style="display:none;" data-toggle="tooltip" data-placement="top" title="Add Datasets to Current Folder" id="toolbtn_add_files" class="btn btn-default toolbtn_add_files primary-button add-library-items" type="button"><span class="fa fa-plus"></span><span class="fa fa-file"></span></span></button>');tmpl_array.push("<% } %>");tmpl_array.push(' <button data-toggle="tooltip" data-placement="top" title="Import selected datasets into history" id="toolbtn_bulk_import" class="primary-button dataset-manipulation" style="margin-left: 0.5em; display:none;" type="button"><span class="fa fa-book"></span> to History</button>');tmpl_array.push(' <div id="toolbtn_dl" class="btn-group dataset-manipulation" style="margin-left: 0.5em; display:none; ">');tmpl_array.push(' <button title="Download selected datasets as archive" id="drop_toggle" type="button" class="primary-button dropdown-toggle" data-toggle="dropdown">');tmpl_array.push(' <span class="fa fa-download"></span> Download <span class="caret"></span>');tmpl_array.push(" </button>");tmpl_array.push(' <ul class="dropdown-menu" role="menu">');tmpl_array.push(' <li><a href="#/folders/<%= id %>/download/tgz">.tar.gz</a></li>');tmpl_array.push(' <li><a href="#/folders/<%= id %>/download/tbz">.tar.bz</a></li>');tmpl_array.push(' <li><a href="#/folders/<%= id %>/download/zip">.zip</a></li>');tmpl_array.push(" </ul>");tmpl_array.push(" </div>");tmpl_array.push(' <button data-toggle="tooltip" data-placement="top" title="Mark selected datasets deleted" id="toolbtn_bulk_delete" class="primary-button logged-dataset-manipulation" style="margin-left: 0.5em; display:none; " type="button"><span class="fa fa-times"></span> Delete</button>');tmpl_array.push(' <button data-id="<%- id %>" data-toggle="tooltip" data-placement="top" title="Show library information" id="toolbtn_show_libinfo" class="primary-button" style="margin-left: 0.5em;" type="button"><span class="fa fa-info-circle"></span> Library Info</button>');tmpl_array.push(' <span class="help-button" data-toggle="tooltip" data-placement="top" title="Visit Libraries Wiki"><a href="https://wiki.galaxyproject.org/DataLibraries/screen/FolderContents" target="_blank"><button class="primary-button btn-xs" type="button"><span class="fa fa-question-circle"></span> Help</button></a></span>');tmpl_array.push(" </div>");tmpl_array.push(' <div id="folder_items_element">');tmpl_array.push(" </div>");tmpl_array.push("</div>");return _.template(tmpl_array.join(""))},templateLibInfoInModal:function(){tmpl_array=[];tmpl_array.push('<div id="lif_info_modal">');tmpl_array.push("<h2>Library name:</h2>");tmpl_array.push('<p><%- library.get("name") %></p>');tmpl_array.push("<h3>Library description:</h3>");tmpl_array.push('<p><%- library.get("description") %></p>');tmpl_array.push("<h3>Library synopsis:</h3>");tmpl_array.push('<p><%- library.get("synopsis") %></p>');tmpl_array.push("</div>");return _.template(tmpl_array.join(""))},templateNewFolderInModal:function(){tmpl_array=[];tmpl_array.push('<div id="new_folder_modal">');tmpl_array.push("<form>");tmpl_array.push('<input type="text" name="Name" value="" placeholder="Name">');tmpl_array.push('<input type="text" name="Description" value="" placeholder="Description">');tmpl_array.push("</form>");tmpl_array.push("</div>");return _.template(tmpl_array.join(""))},templateBulkImportInModal:function(){var f=[];f.push('<span id="history_modal_combo_bulk" style="width:90%; margin-left: 1em; margin-right: 1em; ">');f.push("Select history: ");f.push('<select id="dataset_import_bulk" name="dataset_import_bulk" style="width:50%; margin-bottom: 1em; "> ');f.push(" <% _.each(histories, function(history) { %>");f.push(' <option value="<%= _.escape(history.get("id")) %>"><%= _.escape(history.get("name")) %></option>');f.push(" <% }); %>");f.push("</select>");f.push("</span>");return _.template(f.join(""))},templateImportIntoHistoryProgressBar:function(){var f=[];f.push('<div class="import_text">');f.push("Importing selected datasets to history <b><%= _.escape(history_name) %></b>");f.push("</div>");f.push('<div class="progress">');f.push(' <div class="progress-bar progress-bar-import" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 00%;">');f.push(' <span class="completion_span">0% Complete</span>');f.push(" </div>");f.push("</div>");f.push("");return _.template(f.join(""))},templateAddingDatasetsProgressBar:function(){var f=[];f.push('<div class="import_text">');f.push("Adding selected datasets to library folder <b><%= _.escape(folder_name) %></b>");f.push("</div>");f.push('<div class="progress">');f.push(' <div class="progress-bar progress-bar-import" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 00%;">');f.push(' <span class="completion_span">0% Complete</span>');f.push(" </div>");f.push("</div>");f.push("");return _.template(f.join(""))},templateDeletingDatasetsProgressBar:function(){var f=[];f.push('<div class="import_text">');f.push("</div>");f.push('<div class="progress">');f.push(' <div class="progress-bar progress-bar-import" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 00%;">');f.push(' <span class="completion_span">0% Complete</span>');f.push(" </div>");f.push("</div>");f.push("");return _.template(f.join(""))},templateBrowserModal:function(){var f=[];f.push('<div id="file_browser_modal">');f.push('<div style="margin-bottom:1em;">');f.push('<label class="radio-inline">');f.push(' <input title="Switch to selecting files" type="radio" name="jstree-radio" value="jstree-disable-folders" checked="checked"> Files');f.push("</label>");f.push('<label class="radio-inline">');f.push(' <input title="Switch to selecting folders" type="radio" name="jstree-radio" value="jstree-disable-files"> Folders');f.push("</label>");f.push('<label class="checkbox-inline jstree-preserve-structure" style="display:none;">');f.push(' <input class="preserve-checkbox" type="checkbox" value="preserve_directory_structure">');f.push("Preserve directory structure");f.push(" </label>");f.push('<label class="checkbox-inline jstree-link-files" style="display:none;">');f.push(' <input class="link-checkbox" type="checkbox" value="link_files">');f.push("Link files instead of copying");f.push(" </label>");f.push("</div>");f.push('<div class="alert alert-info jstree-files-message">All files you select will be imported into the current folder.</div>');f.push('<div class="alert alert-info jstree-folders-message" style="display:none;">All files within the selected folders and their subfolders will be imported into the current folder.</div>');f.push('<div id="jstree_browser">');f.push("</div>");f.push("</div>");return _.template(f.join(""))},templateImportPathModal:function(){var f=[];f.push('<div id="file_browser_modal">');f.push('<label class="checkbox-inline jstree-preserve-structure">');f.push(' <input class="preserve-checkbox" type="checkbox" value="preserve_directory_structure">');f.push("Preserve directory structure");f.push(" </label>");f.push('<label class="checkbox-inline jstree-link-files">');f.push(' <input class="link-checkbox" type="checkbox" value="link_files">');f.push("Link files instead of copying");f.push(" </label>");f.push("</div>");f.push('<div class="alert alert-info jstree-folders-message">All files within the given folders and their subfolders will be imported into the current folder.</div>');f.push('<textarea id="import_paths" class="form-control" rows="5" placeholder="Paths separated by newline"></textarea>');f.push("</div>");return _.template(f.join(""))},templateAddFilesFromHistory:function(){var f=[];f.push('<div id="add_files_modal">');f.push('<div id="history_modal_combo_bulk">');f.push("Select history: ");f.push('<select id="dataset_add_bulk" name="dataset_add_bulk" style="width:66%; "> ');f.push(" <% _.each(histories, function(history) { %>");f.push(' <option value="<%= _.escape(history.get("id")) %>"><%= _.escape(history.get("name")) %></option>');f.push(" <% }); %>");f.push("</select>");f.push("</div>");f.push("<br/>");f.push('<div id="selected_history_content">');f.push("</div>");f.push("</div>");return _.template(f.join(""))},templateHistoryContents:function(){var f=[];f.push("<strong>Choose the datasets to import:</strong>");f.push("<ul>");f.push(" <% _.each(history_contents, function(history_item) { %>");f.push(' <li data-id="<%= _.escape(history_item.get("id")) %>">');f.push(' <input style="margin: 0;" type="checkbox"><%= _.escape(history_item.get("hid")) %>: <%= _.escape(history_item.get("name")) %>');f.push(" </li>");f.push(" <% }); %>");f.push("</ul>");return _.template(f.join(""))}});return{FolderToolbarView:a}});
\ No newline at end of file
diff -r c059c1061efa625d6ad1ff2fc298db03b01e2c61 -r 48fc9b40fda9458d502055d4887f5028ee64aa64 static/scripts/packed/mvc/library/library-library-view.js
--- a/static/scripts/packed/mvc/library/library-library-view.js
+++ b/static/scripts/packed/mvc/library/library-library-view.js
@@ -1,1 +1,1 @@
-define(["libs/toastr","mvc/library/library-model","mvc/ui/ui-select"],function(d,c,a){var b=Backbone.View.extend({el:"#center",model:null,options:{},events:{"click .toolbtn_save_permissions":"savePermissions"},initialize:function(e){this.options=_.extend(this.options,e);if(this.options.id){this.fetchLibrary()}},fetchLibrary:function(e){this.options=_.extend(this.options,e);this.model=new c.Library({id:this.options.id});var f=this;this.model.fetch({success:function(){if(f.options.show_permissions){f.showPermissions()}else{f.render()}},error:function(h,g){if(typeof g.responseJSON!=="undefined"){d.error(g.responseJSON.err_msg+" Click this to go back.","",{onclick:function(){Galaxy.libraries.library_router.back()}})}else{d.error("An error ocurred :(. Click this to go back.","",{onclick:function(){Galaxy.libraries.library_router.back()}})}}})},render:function(e){$(".tooltip").remove();this.options=_.extend(this.options,e);var f=this.templateLibrary();this.$el.html(f({item:this.model}));$("#center [data-toggle]").tooltip()},shareDataset:function(){d.info("Feature coming soon.")},goBack:function(){Galaxy.libraries.library_router.back()},showPermissions:function(f){this.options=_.extend(this.options,f);$(".tooltip").remove();if(this.options.fetched_permissions!==undefined){if(this.options.fetched_permissions.access_library_role_list.length===0){this.model.set({is_unrestricted:true})}else{this.model.set({is_unrestricted:false})}}var h=false;if(Galaxy.currUser){h=Galaxy.currUser.isAdmin()}var g=this.templateLibraryPermissions();this.$el.html(g({library:this.model,is_admin:h}));var e=this;if(this.options.fetched_permissions===undefined){$.get("/api/libraries/"+e.id+"/permissions?scope=current").done(function(i){e.prepareSelectBoxes({fetched_permissions:i})}).fail(function(){d.error("An error occurred while fetching library permissions. :(")})}else{this.prepareSelectBoxes({})}$("#center [data-toggle]").tooltip();$("#center").css("overflow","auto")},_serializeRoles:function(g){var e=[];for(var f=0;f<g.length;f++){e.push(g[f][1]+":"+g[f][0])}return e},prepareSelectBoxes:function(i){this.options=_.extend(this.options,i);var e=this.options.fetched_permissions;var g=this;var f=this._serializeRoles(e.access_library_role_list);var j=this._serializeRoles(e.add_library_item_role_list);var h=this._serializeRoles(e.manage_library_role_list);var k=this._serializeRoles(e.modify_library_role_list);g.accessSelectObject=new a.View(this._createSelectOptions(this,"access_perm",f,true));g.addSelectObject=new a.View(this._createSelectOptions(this,"add_perm",j,false));g.manageSelectObject=new a.View(this._createSelectOptions(this,"manage_perm",h,false));g.modifySelectObject=new a.View(this._createSelectOptions(this,"modify_perm",k,false))},_createSelectOptions:function(f,k,i,e){e=e===true?e:false;var j={minimumInputLength:0,css:k,multiple:true,placeholder:"Click to select a role",container:f.$el.find("#"+k),ajax:{url:"/api/libraries/"+f.id+"/permissions?scope=available&is_library_access="+e,dataType:"json",quietMillis:100,data:function(l,m){return{q:l,page_limit:10,page:m}},results:function(n,m){var l=(m*10)<n.total;return{results:n.roles,more:l}}},formatResult:function g(l){return l.name+" type: "+l.type},formatSelection:function h(l){return l.name},initSelection:function(l,n){var m=[];$(l.val().split(",")).each(function(){var o=this.split(":");m.push({id:o[0],name:o[1]})});n(m)},initialData:i,dropdownCssClass:"bigdrop"};return j},comingSoon:function(){d.warning("Feature coming soon")},copyToClipboard:function(){var e=Backbone.history.location.href;if(e.lastIndexOf("/permissions")!==-1){e=e.substr(0,e.lastIndexOf("/permissions"))}window.prompt("Copy to clipboard: Ctrl+C, Enter",e)},makeDatasetPrivate:function(){var e=this;$.post("/api/libraries/datasets/"+e.id+"/permissions?action=make_private").done(function(f){e.model.set({is_unrestricted:false});e.showPermissions({fetched_permissions:f});d.success("The dataset is now private to you")}).fail(function(){d.error("An error occurred while making dataset private :(")})},removeDatasetRestrictions:function(){var e=this;$.post("/api/libraries/datasets/"+e.id+"/permissions?action=remove_restrictions").done(function(f){e.model.set({is_unrestricted:true});e.showPermissions({fetched_permissions:f});d.success("Access to this dataset is now unrestricted")}).fail(function(){d.error("An error occurred while making dataset unrestricted :(")})},_extractIds:function(e){ids_list=[];for(var f=e.length-1;f>=0;f--){ids_list.push(e[f].id)}return ids_list},savePermissions:function(h){var g=this;var i=this._extractIds(this.accessSelectObject.$el.select2("data"));var e=this._extractIds(this.addSelectObject.$el.select2("data"));var j=this._extractIds(this.manageSelectObject.$el.select2("data"));var f=this._extractIds(this.modifySelectObject.$el.select2("data"));$.post("/api/libraries/"+g.id+"/permissions?action=set_permissions",{"access_ids[]":i,"add_ids[]":e,"manage_ids[]":j,"modify_ids[]":f,}).done(function(k){g.showPermissions({fetched_permissions:k});d.success("Permissions saved")}).fail(function(){d.error("An error occurred while setting library permissions :(")})},templateLibrary:function(){var e=[];e.push('<div class="library_style_container">');e.push(' <div id="library_toolbar">');e.push(' <button data-toggle="tooltip" data-placement="top" title="Modify library item" class="btn btn-default toolbtn_modify_dataset primary-button" type="button"><span class="fa fa-pencil"></span> Modify</span></button>');e.push(' <a href="#folders/<%- item.get("folder_id") %>/datasets/<%- item.id %>/permissions"><button data-toggle="tooltip" data-placement="top" title="Manage permissions" class="btn btn-default toolbtn_change_permissions primary-button" type="button"><span class="fa fa-group"></span> Permissions</span></button></a>');e.push(' <button data-toggle="tooltip" data-placement="top" title="Share dataset" class="btn btn-default toolbtn-share-dataset primary-button" type="button"><span class="fa fa-share"></span> Share</span></button>');e.push(" </div>");e.push(" <p>");e.push(" This dataset is unrestricted so everybody can access it. Just share the URL of this page. ");e.push(' <button data-toggle="tooltip" data-placement="top" title="Copy to clipboard" class="btn btn-default btn-copy-link-to-clipboard primary-button" type="button"><span class="fa fa-clipboard"></span> To Clipboard</span></button> ');e.push(" </p>");e.push('<div class="dataset_table">');e.push(' <table class="grid table table-striped table-condensed">');e.push(" <tr>");e.push(' <th scope="row" id="id_row" data-id="<%= _.escape(item.get("ldda_id")) %>">Name</th>');e.push(' <td><%= _.escape(item.get("name")) %></td>');e.push(" </tr>");e.push(' <% if (item.get("file_ext")) { %>');e.push(" <tr>");e.push(' <th scope="row">Data type</th>');e.push(' <td><%= _.escape(item.get("file_ext")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(" </table>");e.push("</div>");e.push("</div>");return _.template(e.join(""))},templateLibraryPermissions:function(){var e=[];e.push('<div class="library_style_container">');e.push(' <div id="library_toolbar">');e.push(' <a href="#"><button data-toggle="tooltip" data-placement="top" title="Go back to the list of Libraries" class="btn btn-default primary-button" type="button"><span class="fa fa-list"></span> Libraries</span></button></a>');e.push(" </div>");e.push('<h1>Library: <%= _.escape(library.get("name")) %></h1>');e.push('<div class="alert alert-warning">');e.push("<% if (is_admin) { %>");e.push("You are logged in as an <strong>administrator</strong> therefore you can manage any library on this Galaxy instance. Please make sure you understand the consequences.");e.push("<% } else { %>");e.push("You can assign any number of roles to any of the following permission types. However please read carefully the implications of such actions.");e.push("<% }%>");e.push("</div>");e.push('<div class="dataset_table">');e.push("<h2>Library permissions</h2>");e.push("<h4>Roles that can access the library</h4>");e.push('<div id="access_perm" class="access_perm roles-selection"></div>');e.push('<div class="alert alert-info roles-selection">User with <strong>any</strong> of these roles can access this library. If there are no access roles set on the library it is considered <strong>unrestricted</strong>.</div>');e.push("<h4>Roles that can manage permissions on this library</h4>");e.push('<div id="manage_perm" class="manage_perm roles-selection"></div>');e.push('<div class="alert alert-info roles-selection">User with <strong>any</strong> of these roles can manage permissions on this library (includes giving access).</div>');e.push("<h4>Roles that can add items to this library</h4>");e.push('<div id="add_perm" class="add_perm roles-selection"></div>');e.push('<div class="alert alert-info roles-selection">User with <strong>any</strong> of these roles can add items to this library (folders and datasets).</div>');e.push("<h4>Roles that can modify this library</h4>");e.push('<div id="modify_perm" class="modify_perm roles-selection"></div>');e.push('<div class="alert alert-info roles-selection">User with <strong>any</strong> of these roles can modify this library (name, synopsis, etc.).</div>');e.push('<button data-toggle="tooltip" data-placement="top" title="Save modifications made on this page" class="btn btn-default toolbtn_save_permissions primary-button" type="button"><span class="fa fa-floppy-o"></span> Save</span></button>');e.push("</div>");e.push("</div>");return _.template(e.join(""))}});return{LibraryView:b}});
\ No newline at end of file
+define(["libs/toastr","mvc/library/library-model","mvc/ui/ui-select"],function(d,c,a){var b=Backbone.View.extend({el:"#center",model:null,options:{},events:{"click .toolbtn_save_permissions":"savePermissions"},initialize:function(e){this.options=_.extend(this.options,e);if(this.options.id){this.fetchLibrary()}},fetchLibrary:function(e){this.options=_.extend(this.options,e);this.model=new c.Library({id:this.options.id});var f=this;this.model.fetch({success:function(){if(f.options.show_permissions){f.showPermissions()}else{f.render()}},error:function(h,g){if(typeof g.responseJSON!=="undefined"){d.error(g.responseJSON.err_msg+" Click this to go back.","",{onclick:function(){Galaxy.libraries.library_router.back()}})}else{d.error("An error ocurred. Click this to go back.","",{onclick:function(){Galaxy.libraries.library_router.back()}})}}})},render:function(e){$(".tooltip").remove();this.options=_.extend(this.options,e);var f=this.templateLibrary();this.$el.html(f({item:this.model}));$("#center [data-toggle]").tooltip()},shareDataset:function(){d.info("Feature coming soon.")},goBack:function(){Galaxy.libraries.library_router.back()},showPermissions:function(f){this.options=_.extend(this.options,f);$(".tooltip").remove();if(this.options.fetched_permissions!==undefined){if(this.options.fetched_permissions.access_library_role_list.length===0){this.model.set({is_unrestricted:true})}else{this.model.set({is_unrestricted:false})}}var h=false;if(Galaxy.currUser){h=Galaxy.currUser.isAdmin()}var g=this.templateLibraryPermissions();this.$el.html(g({library:this.model,is_admin:h}));var e=this;if(this.options.fetched_permissions===undefined){$.get("/api/libraries/"+e.id+"/permissions?scope=current").done(function(i){e.prepareSelectBoxes({fetched_permissions:i})}).fail(function(){d.error("An error occurred while attempting to fetch library permissions.")})}else{this.prepareSelectBoxes({})}$("#center [data-toggle]").tooltip();$("#center").css("overflow","auto")},_serializeRoles:function(g){var e=[];for(var f=0;f<g.length;f++){e.push(g[f][1]+":"+g[f][0])}return e},prepareSelectBoxes:function(i){this.options=_.extend(this.options,i);var e=this.options.fetched_permissions;var g=this;var f=this._serializeRoles(e.access_library_role_list);var j=this._serializeRoles(e.add_library_item_role_list);var h=this._serializeRoles(e.manage_library_role_list);var k=this._serializeRoles(e.modify_library_role_list);g.accessSelectObject=new a.View(this._createSelectOptions(this,"access_perm",f,true));g.addSelectObject=new a.View(this._createSelectOptions(this,"add_perm",j,false));g.manageSelectObject=new a.View(this._createSelectOptions(this,"manage_perm",h,false));g.modifySelectObject=new a.View(this._createSelectOptions(this,"modify_perm",k,false))},_createSelectOptions:function(f,k,i,e){e=e===true?e:false;var j={minimumInputLength:0,css:k,multiple:true,placeholder:"Click to select a role",container:f.$el.find("#"+k),ajax:{url:"/api/libraries/"+f.id+"/permissions?scope=available&is_library_access="+e,dataType:"json",quietMillis:100,data:function(l,m){return{q:l,page_limit:10,page:m}},results:function(n,m){var l=(m*10)<n.total;return{results:n.roles,more:l}}},formatResult:function g(l){return l.name+" type: "+l.type},formatSelection:function h(l){return l.name},initSelection:function(l,n){var m=[];$(l.val().split(",")).each(function(){var o=this.split(":");m.push({id:o[0],name:o[1]})});n(m)},initialData:i,dropdownCssClass:"bigdrop"};return j},comingSoon:function(){d.warning("Feature coming soon.")},copyToClipboard:function(){var e=Backbone.history.location.href;if(e.lastIndexOf("/permissions")!==-1){e=e.substr(0,e.lastIndexOf("/permissions"))}window.prompt("Copy to clipboard: Ctrl+C, Enter",e)},makeDatasetPrivate:function(){var e=this;$.post("/api/libraries/datasets/"+e.id+"/permissions?action=make_private").done(function(f){e.model.set({is_unrestricted:false});e.showPermissions({fetched_permissions:f});d.success("The dataset is now private to you.")}).fail(function(){d.error("An error occurred while attempting to make dataset private.")})},removeDatasetRestrictions:function(){var e=this;$.post("/api/libraries/datasets/"+e.id+"/permissions?action=remove_restrictions").done(function(f){e.model.set({is_unrestricted:true});e.showPermissions({fetched_permissions:f});d.success("Access to this dataset is now unrestricted.")}).fail(function(){d.error("An error occurred while attempting to make dataset unrestricted.")})},_extractIds:function(e){ids_list=[];for(var f=e.length-1;f>=0;f--){ids_list.push(e[f].id)}return ids_list},savePermissions:function(h){var g=this;var i=this._extractIds(this.accessSelectObject.$el.select2("data"));var e=this._extractIds(this.addSelectObject.$el.select2("data"));var j=this._extractIds(this.manageSelectObject.$el.select2("data"));var f=this._extractIds(this.modifySelectObject.$el.select2("data"));$.post("/api/libraries/"+g.id+"/permissions?action=set_permissions",{"access_ids[]":i,"add_ids[]":e,"manage_ids[]":j,"modify_ids[]":f,}).done(function(k){g.showPermissions({fetched_permissions:k});d.success("Permissions saved.")}).fail(function(){d.error("An error occurred while attempting to set library permissions.")})},templateLibrary:function(){var e=[];e.push('<div class="library_style_container">');e.push(' <div id="library_toolbar">');e.push(' <button data-toggle="tooltip" data-placement="top" title="Modify library item" class="btn btn-default toolbtn_modify_dataset primary-button" type="button"><span class="fa fa-pencil"></span> Modify</span></button>');e.push(' <a href="#folders/<%- item.get("folder_id") %>/datasets/<%- item.id %>/permissions"><button data-toggle="tooltip" data-placement="top" title="Manage permissions" class="btn btn-default toolbtn_change_permissions primary-button" type="button"><span class="fa fa-group"></span> Permissions</span></button></a>');e.push(' <button data-toggle="tooltip" data-placement="top" title="Share dataset" class="btn btn-default toolbtn-share-dataset primary-button" type="button"><span class="fa fa-share"></span> Share</span></button>');e.push(" </div>");e.push(" <p>");e.push(" This dataset is unrestricted so everybody can access it. Just share the URL of this page. ");e.push(' <button data-toggle="tooltip" data-placement="top" title="Copy to clipboard" class="btn btn-default btn-copy-link-to-clipboard primary-button" type="button"><span class="fa fa-clipboard"></span> To Clipboard</span></button> ');e.push(" </p>");e.push('<div class="dataset_table">');e.push(' <table class="grid table table-striped table-condensed">');e.push(" <tr>");e.push(' <th scope="row" id="id_row" data-id="<%= _.escape(item.get("ldda_id")) %>">Name</th>');e.push(' <td><%= _.escape(item.get("name")) %></td>');e.push(" </tr>");e.push(' <% if (item.get("file_ext")) { %>');e.push(" <tr>");e.push(' <th scope="row">Data type</th>');e.push(' <td><%= _.escape(item.get("file_ext")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(" </table>");e.push("</div>");e.push("</div>");return _.template(e.join(""))},templateLibraryPermissions:function(){var e=[];e.push('<div class="library_style_container">');e.push(' <div id="library_toolbar">');e.push(' <a href="#"><button data-toggle="tooltip" data-placement="top" title="Go back to the list of Libraries" class="btn btn-default primary-button" type="button"><span class="fa fa-list"></span> Libraries</span></button></a>');e.push(" </div>");e.push('<h1>Library: <%= _.escape(library.get("name")) %></h1>');e.push('<div class="alert alert-warning">');e.push("<% if (is_admin) { %>");e.push("You are logged in as an <strong>administrator</strong> therefore you can manage any library on this Galaxy instance. Please make sure you understand the consequences.");e.push("<% } else { %>");e.push("You can assign any number of roles to any of the following permission types. However please read carefully the implications of such actions.");e.push("<% }%>");e.push("</div>");e.push('<div class="dataset_table">');e.push("<h2>Library permissions</h2>");e.push("<h4>Roles that can access the library</h4>");e.push('<div id="access_perm" class="access_perm roles-selection"></div>');e.push('<div class="alert alert-info roles-selection">User with <strong>any</strong> of these roles can access this library. If there are no access roles set on the library it is considered <strong>unrestricted</strong>.</div>');e.push("<h4>Roles that can manage permissions on this library</h4>");e.push('<div id="manage_perm" class="manage_perm roles-selection"></div>');e.push('<div class="alert alert-info roles-selection">User with <strong>any</strong> of these roles can manage permissions on this library (includes giving access).</div>');e.push("<h4>Roles that can add items to this library</h4>");e.push('<div id="add_perm" class="add_perm roles-selection"></div>');e.push('<div class="alert alert-info roles-selection">User with <strong>any</strong> of these roles can add items to this library (folders and datasets).</div>');e.push("<h4>Roles that can modify this library</h4>");e.push('<div id="modify_perm" class="modify_perm roles-selection"></div>');e.push('<div class="alert alert-info roles-selection">User with <strong>any</strong> of these roles can modify this library (name, synopsis, etc.).</div>');e.push('<button data-toggle="tooltip" data-placement="top" title="Save modifications made on this page" class="btn btn-default toolbtn_save_permissions primary-button" type="button"><span class="fa fa-floppy-o"></span> Save</span></button>');e.push("</div>");e.push("</div>");return _.template(e.join(""))}});return{LibraryView:b}});
\ No newline at end of file
diff -r c059c1061efa625d6ad1ff2fc298db03b01e2c61 -r 48fc9b40fda9458d502055d4887f5028ee64aa64 static/scripts/packed/mvc/library/library-librarylist-view.js
--- a/static/scripts/packed/mvc/library/library-librarylist-view.js
+++ b/static/scripts/packed/mvc/library/library-librarylist-view.js
@@ -1,1 +1,1 @@
-define(["galaxy.masthead","mvc/base-mvc","utils/utils","libs/toastr","mvc/library/library-model","mvc/library/library-libraryrow-view"],function(b,g,d,e,c,a){var f=Backbone.View.extend({el:"#libraries_element",events:{"click .sort-libraries-link":"sort_clicked"},modal:null,collection:null,rowViews:{},initialize:function(h){this.options=_.defaults(this.options||{},h);var i=this;this.rowViews={};this.collection=new c.Libraries();this.collection.fetch({success:function(){i.render()},error:function(k,j){if(typeof j.responseJSON!=="undefined"){e.error(j.responseJSON.err_msg)}else{e.error("An error ocurred :(")}}})},render:function(i){$(".tooltip").hide();var j=this.templateLibraryList();var k=null;var h=Galaxy.libraries.preferences.get("with_deleted");var l=null;if(typeof i!=="undefined"){h=typeof i.with_deleted!=="undefined"?i.with_deleted:false;l=typeof i.models!=="undefined"?i.models:null}if(this.collection!==null&&l===null){this.sortLibraries();if(h){k=this.collection.models}else{k=this.collection.where({deleted:false})}}else{if(l!==null){k=l}else{k=[]}}this.$el.html(j({length:k.length,order:Galaxy.libraries.preferences.get("sort_order")}));if(k.length>0){this.renderRows(k)}$("#center [data-toggle]").tooltip();$("#center").css("overflow","auto")},renderRows:function(l){for(var k=0;k<l.length;k++){var j=l[k];var h=_.findWhere(this.rowViews,{id:j.get("id")});if(h!==undefined&&this instanceof Backbone.View){h.delegateEvents();this.$el.find("#library_list_body").append(h.el)}else{this.renderOne({library:j})}}},renderOne:function(j){var i=j.library;var h=new a.LibraryRowView(i);if(j.prepend){this.$el.find("#library_list_body").prepend(h.el)}else{this.$el.find("#library_list_body").append(h.el)}this.rowViews[i.get("id")]=h},sort_clicked:function(){if(Galaxy.libraries.preferences.get("sort_order")==="asc"){Galaxy.libraries.preferences.set({sort_order:"desc"})}else{Galaxy.libraries.preferences.set({sort_order:"asc"})}this.render()},sortLibraries:function(){if(Galaxy.libraries.preferences.get("sort_by")==="name"){if(Galaxy.libraries.preferences.get("sort_order")==="asc"){this.collection.sortByNameAsc()}else{if(Galaxy.libraries.preferences.get("sort_order")==="desc"){this.collection.sortByNameDesc()}}}},templateLibraryList:function(){tmpl_array=[];tmpl_array.push('<div class="library_container table-responsive">');tmpl_array.push("<% if(length === 0) { %>");tmpl_array.push('<div>There are no libraries visible to you. If you expected some to show up please consult the <a href="https://wiki.galaxyproject.org/Admin/DataLibraries/LibrarySecurity">library security wikipage</a> or visit the <a href="https://biostar.usegalaxy.org/">Galaxy support site</a>.</div>');tmpl_array.push("<% } else{ %>");tmpl_array.push('<table class="grid table table-condensed">');tmpl_array.push(" <thead>");tmpl_array.push(' <th style="width:30%;"><a class="sort-libraries-link" title="Click to reverse order" href="#">name</a><span title="Sorted alphabetically" class="fa fa-sort-alpha-<%- order %>"></span></th>');tmpl_array.push(' <th style="width:22%;">description</th>');tmpl_array.push(' <th style="width:22%;">synopsis</th> ');tmpl_array.push(' <th style="width:26%;"></th> ');tmpl_array.push(" </thead>");tmpl_array.push(' <tbody id="library_list_body">');tmpl_array.push(" </tbody>");tmpl_array.push("</table>");tmpl_array.push("<% }%>");tmpl_array.push("</div>");return _.template(tmpl_array.join(""))},redirectToHome:function(){window.location="../"},redirectToLogin:function(){window.location="/user/login"},});return{LibraryListView:f}});
\ No newline at end of file
+define(["galaxy.masthead","mvc/base-mvc","utils/utils","libs/toastr","mvc/library/library-model","mvc/library/library-libraryrow-view"],function(b,g,d,e,c,a){var f=Backbone.View.extend({el:"#libraries_element",events:{"click .sort-libraries-link":"sort_clicked"},modal:null,collection:null,rowViews:{},initialize:function(h){this.options=_.defaults(this.options||{},h);var i=this;this.rowViews={};this.collection=new c.Libraries();this.collection.fetch({success:function(){i.render()},error:function(k,j){if(typeof j.responseJSON!=="undefined"){e.error(j.responseJSON.err_msg)}else{e.error("An error ocurred.")}}})},render:function(i){$(".tooltip").hide();var j=this.templateLibraryList();var k=null;var h=Galaxy.libraries.preferences.get("with_deleted");var l=null;if(typeof i!=="undefined"){h=typeof i.with_deleted!=="undefined"?i.with_deleted:false;l=typeof i.models!=="undefined"?i.models:null}if(this.collection!==null&&l===null){this.sortLibraries();if(h){k=this.collection.models}else{k=this.collection.where({deleted:false})}}else{if(l!==null){k=l}else{k=[]}}this.$el.html(j({length:k.length,order:Galaxy.libraries.preferences.get("sort_order")}));if(k.length>0){this.renderRows(k)}$("#center [data-toggle]").tooltip();$("#center").css("overflow","auto")},renderRows:function(l){for(var k=0;k<l.length;k++){var j=l[k];var h=_.findWhere(this.rowViews,{id:j.get("id")});if(h!==undefined&&this instanceof Backbone.View){h.delegateEvents();this.$el.find("#library_list_body").append(h.el)}else{this.renderOne({library:j})}}},renderOne:function(j){var i=j.library;var h=new a.LibraryRowView(i);if(j.prepend){this.$el.find("#library_list_body").prepend(h.el)}else{this.$el.find("#library_list_body").append(h.el)}this.rowViews[i.get("id")]=h},sort_clicked:function(){if(Galaxy.libraries.preferences.get("sort_order")==="asc"){Galaxy.libraries.preferences.set({sort_order:"desc"})}else{Galaxy.libraries.preferences.set({sort_order:"asc"})}this.render()},sortLibraries:function(){if(Galaxy.libraries.preferences.get("sort_by")==="name"){if(Galaxy.libraries.preferences.get("sort_order")==="asc"){this.collection.sortByNameAsc()}else{if(Galaxy.libraries.preferences.get("sort_order")==="desc"){this.collection.sortByNameDesc()}}}},templateLibraryList:function(){tmpl_array=[];tmpl_array.push('<div class="library_container table-responsive">');tmpl_array.push("<% if(length === 0) { %>");tmpl_array.push('<div>There are no libraries visible to you. If you expected some to show up please consult the <a href="https://wiki.galaxyproject.org/Admin/DataLibraries/LibrarySecurity">library security wikipage</a> or visit the <a href="https://biostar.usegalaxy.org/">Galaxy support site</a>.</div>');tmpl_array.push("<% } else{ %>");tmpl_array.push('<table class="grid table table-condensed">');tmpl_array.push(" <thead>");tmpl_array.push(' <th style="width:30%;"><a class="sort-libraries-link" title="Click to reverse order" href="#">name</a><span title="Sorted alphabetically" class="fa fa-sort-alpha-<%- order %>"></span></th>');tmpl_array.push(' <th style="width:22%;">description</th>');tmpl_array.push(' <th style="width:22%;">synopsis</th> ');tmpl_array.push(' <th style="width:26%;"></th> ');tmpl_array.push(" </thead>");tmpl_array.push(' <tbody id="library_list_body">');tmpl_array.push(" </tbody>");tmpl_array.push("</table>");tmpl_array.push("<% }%>");tmpl_array.push("</div>");return _.template(tmpl_array.join(""))},redirectToHome:function(){window.location="../"},redirectToLogin:function(){window.location="/user/login"},});return{LibraryListView:f}});
\ No newline at end of file
diff -r c059c1061efa625d6ad1ff2fc298db03b01e2c61 -r 48fc9b40fda9458d502055d4887f5028ee64aa64 static/scripts/packed/mvc/library/library-libraryrow-view.js
--- a/static/scripts/packed/mvc/library/library-libraryrow-view.js
+++ b/static/scripts/packed/mvc/library/library-libraryrow-view.js
@@ -1,1 +1,1 @@
-define(["galaxy.masthead","utils/utils","libs/toastr"],function(b,c,d){var a=Backbone.View.extend({events:{"click .edit_library_btn":"edit_button_clicked","click .cancel_library_btn":"cancel_library_modification","click .save_library_btn":"save_library_modification","click .delete_library_btn":"delete_library","click .undelete_library_btn":"undelete_library"},edit_mode:false,element_visibility_config:{upload_library_btn:false,edit_library_btn:false,permission_library_btn:false,save_library_btn:false,cancel_library_btn:false,delete_library_btn:false,undelete_library_btn:false},initialize:function(e){this.render(e)},render:function(f){if(typeof f==="undefined"){f=Galaxy.libraries.libraryListView.collection.get(this.$el.data("id"))}this.prepareButtons(f);var e=this.templateRow();this.setElement(e({library:f,button_config:this.element_visibility_config,edit_mode:this.edit_mode}));this.$el.show();return this},repaint:function(e){$(".tooltip").hide();var f=this.$el;this.render(e);f.replaceWith(this.$el);this.$el.find("[data-toggle]").tooltip()},prepareButtons:function(e){vis_config=this.element_visibility_config;if(this.edit_mode===false){vis_config.save_library_btn=false;vis_config.cancel_library_btn=false;vis_config.delete_library_btn=false;if(e.get("deleted")===true){vis_config.undelete_library_btn=true;vis_config.upload_library_btn=false;vis_config.edit_library_btn=false;vis_config.permission_library_btn=false}else{if(e.get("deleted")===false){vis_config.save_library_btn=false;vis_config.cancel_library_btn=false;vis_config.undelete_library_btn=false;if(e.get("can_user_add")===true){vis_config.upload_library_btn=true}if(e.get("can_user_modify")===true){vis_config.edit_library_btn=true}if(e.get("can_user_manage")===true){vis_config.permission_library_btn=true}}}}else{if(this.edit_mode===true){vis_config.upload_library_btn=false;vis_config.edit_library_btn=false;vis_config.permission_library_btn=false;vis_config.save_library_btn=true;vis_config.cancel_library_btn=true;vis_config.delete_library_btn=true;vis_config.undelete_library_btn=false}}this.element_visibility_config=vis_config},edit_button_clicked:function(){this.edit_mode=true;this.repaint()},cancel_library_modification:function(){this.edit_mode=false;this.repaint()},save_library_modification:function(){var f=Galaxy.libraries.libraryListView.collection.get(this.$el.data("id"));var g=false;var i=this.$el.find(".input_library_name").val();if(typeof i!=="undefined"&&i!==f.get("name")){if(i.length>2){f.set("name",i);g=true}else{d.warning("Library name has to be at least 3 characters long");return}}var h=this.$el.find(".input_library_description").val();if(typeof h!=="undefined"&&h!==f.get("description")){f.set("description",h);g=true}var j=this.$el.find(".input_library_synopsis").val();if(typeof j!=="undefined"&&j!==f.get("synopsis")){f.set("synopsis",j);g=true}if(g){var e=this;f.save(null,{patch:true,success:function(k){e.edit_mode=false;e.repaint(k);d.success("Changes to library saved")},error:function(l,k){if(typeof k.responseJSON!=="undefined"){d.error(k.responseJSON.err_msg)}else{d.error("An error occured during updating the library :(")}}})}else{this.edit_mode=false;this.repaint(f);d.info("Nothing has changed")}},delete_library:function(){var f=Galaxy.libraries.libraryListView.collection.get(this.$el.data("id"));var e=this;f.destroy({success:function(g){g.set("deleted",true);Galaxy.libraries.libraryListView.collection.add(g);e.edit_mode=false;if(Galaxy.libraries.preferences.get("with_deleted")===false){$(".tooltip").hide();e.repaint(g);e.$el.remove()}else{if(Galaxy.libraries.preferences.get("with_deleted")===true){e.repaint(g)}}d.success("Library has been marked deleted")},error:function(h,g){if(typeof g.responseJSON!=="undefined"){d.error(g.responseJSON.err_msg)}else{d.error("An error occured during deleting the library :(")}}})},undelete_library:function(){var f=Galaxy.libraries.libraryListView.collection.get(this.$el.data("id"));var e=this;f.url=f.urlRoot+f.id+"?undelete=true";f.destroy({success:function(g){g.set("deleted",false);Galaxy.libraries.libraryListView.collection.add(g);e.edit_mode=false;e.repaint(g);d.success("Library has been undeleted")},error:function(h,g){if(typeof g.responseJSON!=="undefined"){d.error(g.responseJSON.err_msg)}else{d.error("An error occured while undeleting the library :(")}}})},templateRow:function(){tmpl_array=[];tmpl_array.push(' <tr class="<% if(library.get("deleted") === true) { print("active") } %>" style="display:none;" data-id="<%- library.get("id") %>">');tmpl_array.push(" <% if(!edit_mode) { %>");tmpl_array.push(' <% if(library.get("deleted")) { %>');tmpl_array.push(' <td style="color:grey;"><span data-toggle="tooltip" data-placement="top" title="Marked deleted" style="color:grey;" class="fa fa-ban fa-lg deleted_lib_ico"></span><%- library.get("name") %></td>');tmpl_array.push(" <% } else { %>");tmpl_array.push(' <td><a href="#folders/<%- library.get("root_folder_id") %>"><%- library.get("name") %></a></td>');tmpl_array.push(" <% } %>");tmpl_array.push(' <% if(library.get("description")) { %>');tmpl_array.push(' <% if( (library.get("description")).length> 80 ) { %>');tmpl_array.push(' <td data-toggle="tooltip" data-placement="bottom" title="<%= _.escape(library.get("description")) %>"><%= _.escape(library.get("description")).substring(0, 80) + "..." %></td>');tmpl_array.push(" <% } else { %>");tmpl_array.push(' <td><%= _.escape(library.get("description"))%></td>');tmpl_array.push(" <% } %>");tmpl_array.push(" <% } else { %>");tmpl_array.push(" <td></td>");tmpl_array.push(" <% } %>");tmpl_array.push(' <% if(library.get("synopsis")) { %>');tmpl_array.push(' <% if( (library.get("synopsis")).length> 120 ) { %>');tmpl_array.push(' <td data-toggle="tooltip" data-placement="bottom" title="<%= _.escape(library.get("synopsis")) %>"><%= _.escape(library.get("synopsis")).substring(0, 120) + "..." %></td>');tmpl_array.push(" <% } else { %>");tmpl_array.push(' <td><%= _.escape(library.get("synopsis"))%></td>');tmpl_array.push(" <% } %>");tmpl_array.push(" <% } else { %>");tmpl_array.push(" <td></td>");tmpl_array.push(" <% } %>");tmpl_array.push(" <% } else if(edit_mode){ %>");tmpl_array.push(' <td><textarea rows="4" class="form-control input_library_name" placeholder="name" ><%- library.get("name") %></textarea></td>');tmpl_array.push(' <td><textarea rows="4" class="form-control input_library_description" placeholder="description" ><%- library.get("description") %></textarea></td>');tmpl_array.push(' <td><textarea rows="4" class="form-control input_library_synopsis" placeholder="synopsis" ><%- library.get("synopsis") %></textarea></td>');tmpl_array.push(" <% } %>");tmpl_array.push(' <td class="right-center">');tmpl_array.push(' <% if( (library.get("public")) && (library.get("deleted") === false) ) { %>');tmpl_array.push(' <span data-toggle="tooltip" data-placement="top" title="Unrestricted library" style="color:grey;" class="fa fa-globe fa-lg public_lib_ico"></span>');tmpl_array.push(" <% }%>");tmpl_array.push(' <button data-toggle="tooltip" data-placement="top" title="Modify <%- library.get("name") %>" class="primary-button btn-xs edit_library_btn" type="button" style="<% if(button_config.edit_library_btn === false) { print("display:none;") } %>"><span class="fa fa-pencil"></span></button>');tmpl_array.push(' <a href="#library/<%- library.get("id") %>/permissions"><button data-toggle="tooltip" data-placement="top" title="Modify permissions" class="primary-button btn-xs permission_library_btn" type="button" style="<% if(button_config.permission_library_btn === false) { print("display:none;") } %>"><span class="fa fa-group"></span></button></a>');tmpl_array.push(' <button data-toggle="tooltip" data-placement="top" title="Save changes" class="primary-button btn-xs save_library_btn" type="button" style="<% if(button_config.save_library_btn === false) { print("display:none;") } %>"><span class="fa fa-floppy-o"> Save</span></button>');tmpl_array.push(' <button data-toggle="tooltip" data-placement="top" title="Discard changes" class="primary-button btn-xs cancel_library_btn" type="button" style="<% if(button_config.cancel_library_btn === false) { print("display:none;") } %>"><span class="fa fa-times"> Cancel</span></button>');tmpl_array.push(' <button data-toggle="tooltip" data-placement="top" title="Delete <%- library.get("name") %>" class="primary-button btn-xs delete_library_btn" type="button" style="<% if(button_config.delete_library_btn === false) { print("display:none;") } %>"><span class="fa fa-trash-o"> Delete</span></button>');tmpl_array.push(' <button data-toggle="tooltip" data-placement="top" title="Undelete <%- library.get("name") %> " class="primary-button btn-xs undelete_library_btn" type="button" style="<% if(button_config.undelete_library_btn === false) { print("display:none;") } %>"><span class="fa fa-unlock"> Undelete</span></button>');tmpl_array.push(" </td>");tmpl_array.push(" </tr>");return _.template(tmpl_array.join(""))}});return{LibraryRowView:a}});
\ No newline at end of file
+define(["galaxy.masthead","utils/utils","libs/toastr"],function(b,c,d){var a=Backbone.View.extend({events:{"click .edit_library_btn":"edit_button_clicked","click .cancel_library_btn":"cancel_library_modification","click .save_library_btn":"save_library_modification","click .delete_library_btn":"delete_library","click .undelete_library_btn":"undelete_library"},edit_mode:false,element_visibility_config:{upload_library_btn:false,edit_library_btn:false,permission_library_btn:false,save_library_btn:false,cancel_library_btn:false,delete_library_btn:false,undelete_library_btn:false},initialize:function(e){this.render(e)},render:function(f){if(typeof f==="undefined"){f=Galaxy.libraries.libraryListView.collection.get(this.$el.data("id"))}this.prepareButtons(f);var e=this.templateRow();this.setElement(e({library:f,button_config:this.element_visibility_config,edit_mode:this.edit_mode}));this.$el.show();return this},repaint:function(e){$(".tooltip").hide();var f=this.$el;this.render(e);f.replaceWith(this.$el);this.$el.find("[data-toggle]").tooltip()},prepareButtons:function(e){vis_config=this.element_visibility_config;if(this.edit_mode===false){vis_config.save_library_btn=false;vis_config.cancel_library_btn=false;vis_config.delete_library_btn=false;if(e.get("deleted")===true){vis_config.undelete_library_btn=true;vis_config.upload_library_btn=false;vis_config.edit_library_btn=false;vis_config.permission_library_btn=false}else{if(e.get("deleted")===false){vis_config.save_library_btn=false;vis_config.cancel_library_btn=false;vis_config.undelete_library_btn=false;if(e.get("can_user_add")===true){vis_config.upload_library_btn=true}if(e.get("can_user_modify")===true){vis_config.edit_library_btn=true}if(e.get("can_user_manage")===true){vis_config.permission_library_btn=true}}}}else{if(this.edit_mode===true){vis_config.upload_library_btn=false;vis_config.edit_library_btn=false;vis_config.permission_library_btn=false;vis_config.save_library_btn=true;vis_config.cancel_library_btn=true;vis_config.delete_library_btn=true;vis_config.undelete_library_btn=false}}this.element_visibility_config=vis_config},edit_button_clicked:function(){this.edit_mode=true;this.repaint()},cancel_library_modification:function(){this.edit_mode=false;this.repaint()},save_library_modification:function(){var f=Galaxy.libraries.libraryListView.collection.get(this.$el.data("id"));var g=false;var i=this.$el.find(".input_library_name").val();if(typeof i!=="undefined"&&i!==f.get("name")){if(i.length>2){f.set("name",i);g=true}else{d.warning("Library name has to be at least 3 characters long.");return}}var h=this.$el.find(".input_library_description").val();if(typeof h!=="undefined"&&h!==f.get("description")){f.set("description",h);g=true}var j=this.$el.find(".input_library_synopsis").val();if(typeof j!=="undefined"&&j!==f.get("synopsis")){f.set("synopsis",j);g=true}if(g){var e=this;f.save(null,{patch:true,success:function(k){e.edit_mode=false;e.repaint(k);d.success("Changes to library saved.")},error:function(l,k){if(typeof k.responseJSON!=="undefined"){d.error(k.responseJSON.err_msg)}else{d.error("An error occured while attempting to update the library.")}}})}else{this.edit_mode=false;this.repaint(f);d.info("Nothing has changed.")}},delete_library:function(){var f=Galaxy.libraries.libraryListView.collection.get(this.$el.data("id"));var e=this;f.destroy({success:function(g){g.set("deleted",true);Galaxy.libraries.libraryListView.collection.add(g);e.edit_mode=false;if(Galaxy.libraries.preferences.get("with_deleted")===false){$(".tooltip").hide();e.repaint(g);e.$el.remove()}else{if(Galaxy.libraries.preferences.get("with_deleted")===true){e.repaint(g)}}d.success("Library has been marked deleted.")},error:function(h,g){if(typeof g.responseJSON!=="undefined"){d.error(g.responseJSON.err_msg)}else{d.error("An error occured during deleting the library.")}}})},undelete_library:function(){var f=Galaxy.libraries.libraryListView.collection.get(this.$el.data("id"));var e=this;f.url=f.urlRoot+f.id+"?undelete=true";f.destroy({success:function(g){g.set("deleted",false);Galaxy.libraries.libraryListView.collection.add(g);e.edit_mode=false;e.repaint(g);d.success("Library has been undeleted.")},error:function(h,g){if(typeof g.responseJSON!=="undefined"){d.error(g.responseJSON.err_msg)}else{d.error("An error occured while undeleting the library.")}}})},templateRow:function(){tmpl_array=[];tmpl_array.push(' <tr class="<% if(library.get("deleted") === true) { print("active") } %>" style="display:none;" data-id="<%- library.get("id") %>">');tmpl_array.push(" <% if(!edit_mode) { %>");tmpl_array.push(' <% if(library.get("deleted")) { %>');tmpl_array.push(' <td style="color:grey;"><span data-toggle="tooltip" data-placement="top" title="Marked deleted" style="color:grey;" class="fa fa-ban fa-lg deleted_lib_ico"></span><%- library.get("name") %></td>');tmpl_array.push(" <% } else { %>");tmpl_array.push(' <td><a href="#folders/<%- library.get("root_folder_id") %>"><%- library.get("name") %></a></td>');tmpl_array.push(" <% } %>");tmpl_array.push(' <% if(library.get("description")) { %>');tmpl_array.push(' <% if( (library.get("description")).length> 80 ) { %>');tmpl_array.push(' <td data-toggle="tooltip" data-placement="bottom" title="<%= _.escape(library.get("description")) %>"><%= _.escape(library.get("description")).substring(0, 80) + "..." %></td>');tmpl_array.push(" <% } else { %>");tmpl_array.push(' <td><%= _.escape(library.get("description"))%></td>');tmpl_array.push(" <% } %>");tmpl_array.push(" <% } else { %>");tmpl_array.push(" <td></td>");tmpl_array.push(" <% } %>");tmpl_array.push(' <% if(library.get("synopsis")) { %>');tmpl_array.push(' <% if( (library.get("synopsis")).length> 120 ) { %>');tmpl_array.push(' <td data-toggle="tooltip" data-placement="bottom" title="<%= _.escape(library.get("synopsis")) %>"><%= _.escape(library.get("synopsis")).substring(0, 120) + "..." %></td>');tmpl_array.push(" <% } else { %>");tmpl_array.push(' <td><%= _.escape(library.get("synopsis"))%></td>');tmpl_array.push(" <% } %>");tmpl_array.push(" <% } else { %>");tmpl_array.push(" <td></td>");tmpl_array.push(" <% } %>");tmpl_array.push(" <% } else if(edit_mode){ %>");tmpl_array.push(' <td><textarea rows="4" class="form-control input_library_name" placeholder="name" ><%- library.get("name") %></textarea></td>');tmpl_array.push(' <td><textarea rows="4" class="form-control input_library_description" placeholder="description" ><%- library.get("description") %></textarea></td>');tmpl_array.push(' <td><textarea rows="4" class="form-control input_library_synopsis" placeholder="synopsis" ><%- library.get("synopsis") %></textarea></td>');tmpl_array.push(" <% } %>");tmpl_array.push(' <td class="right-center">');tmpl_array.push(' <% if( (library.get("public")) && (library.get("deleted") === false) ) { %>');tmpl_array.push(' <span data-toggle="tooltip" data-placement="top" title="Unrestricted library" style="color:grey;" class="fa fa-globe fa-lg public_lib_ico"></span>');tmpl_array.push(" <% }%>");tmpl_array.push(' <button data-toggle="tooltip" data-placement="top" title="Modify <%- library.get("name") %>" class="primary-button btn-xs edit_library_btn" type="button" style="<% if(button_config.edit_library_btn === false) { print("display:none;") } %>"><span class="fa fa-pencil"></span></button>');tmpl_array.push(' <a href="#library/<%- library.get("id") %>/permissions"><button data-toggle="tooltip" data-placement="top" title="Modify permissions" class="primary-button btn-xs permission_library_btn" type="button" style="<% if(button_config.permission_library_btn === false) { print("display:none;") } %>"><span class="fa fa-group"></span></button></a>');tmpl_array.push(' <button data-toggle="tooltip" data-placement="top" title="Save changes" class="primary-button btn-xs save_library_btn" type="button" style="<% if(button_config.save_library_btn === false) { print("display:none;") } %>"><span class="fa fa-floppy-o"> Save</span></button>');tmpl_array.push(' <button data-toggle="tooltip" data-placement="top" title="Discard changes" class="primary-button btn-xs cancel_library_btn" type="button" style="<% if(button_config.cancel_library_btn === false) { print("display:none;") } %>"><span class="fa fa-times"> Cancel</span></button>');tmpl_array.push(' <button data-toggle="tooltip" data-placement="top" title="Delete <%- library.get("name") %>" class="primary-button btn-xs delete_library_btn" type="button" style="<% if(button_config.delete_library_btn === false) { print("display:none;") } %>"><span class="fa fa-trash-o"> Delete</span></button>');tmpl_array.push(' <button data-toggle="tooltip" data-placement="top" title="Undelete <%- library.get("name") %> " class="primary-button btn-xs undelete_library_btn" type="button" style="<% if(button_config.undelete_library_btn === false) { print("display:none;") } %>"><span class="fa fa-unlock"> Undelete</span></button>');tmpl_array.push(" </td>");tmpl_array.push(" </tr>");return _.template(tmpl_array.join(""))}});return{LibraryRowView:a}});
\ No newline at end of file
diff -r c059c1061efa625d6ad1ff2fc298db03b01e2c61 -r 48fc9b40fda9458d502055d4887f5028ee64aa64 static/scripts/packed/mvc/library/library-librarytoolbar-view.js
--- a/static/scripts/packed/mvc/library/library-librarytoolbar-view.js
+++ b/static/scripts/packed/mvc/library/library-librarytoolbar-view.js
@@ -1,1 +1,1 @@
-define(["libs/toastr","mvc/library/library-model"],function(b,a){var c=Backbone.View.extend({el:"#center",events:{"click #create_new_library_btn":"show_library_modal","click #include_deleted_chk":"check_include_deleted"},initialize:function(){this.render()},render:function(){var f=this.templateToolBar();var e=false;var d=true;if(Galaxy.currUser){e=Galaxy.currUser.isAdmin();d=Galaxy.currUser.isAnonymous()}this.$el.html(f({admin_user:e,anon_user:d}));if(e){this.$el.find("#include_deleted_chk")[0].checked=Galaxy.libraries.preferences.get("with_deleted")}},show_library_modal:function(e){e.preventDefault();e.stopPropagation();var d=this;this.modal=Galaxy.modal;this.modal.show({closing_events:true,title:"Create New Library",body:this.templateNewLibraryInModal(),buttons:{Create:function(){d.create_new_library_event()},Close:function(){d.modal.hide()}}})},create_new_library_event:function(){var f=this.serialize_new_library();if(this.validate_new_library(f)){var e=new a.Library();var d=this;e.save(f,{success:function(g){Galaxy.libraries.libraryListView.collection.add(g);d.modal.hide();d.clear_library_modal();Galaxy.libraries.libraryListView.render();b.success("Library created")},error:function(h,g){if(typeof g.responseJSON!=="undefined"){b.error(g.responseJSON.err_msg)}else{b.error("An error occured :(")}}})}else{b.error("Library's name is missing")}return false},clear_library_modal:function(){$("input[name='Name']").val("");$("input[name='Description']").val("");$("input[name='Synopsis']").val("")},serialize_new_library:function(){return{name:$("input[name='Name']").val(),description:$("input[name='Description']").val(),synopsis:$("input[name='Synopsis']").val()}},validate_new_library:function(d){return d.name!==""},check_include_deleted:function(d){if(d.target.checked){Galaxy.libraries.preferences.set({with_deleted:true});Galaxy.libraries.libraryListView.render()}else{Galaxy.libraries.preferences.set({with_deleted:false});Galaxy.libraries.libraryListView.render()}},templateToolBar:function(){tmpl_array=[];tmpl_array.push('<div class="library_style_container">');tmpl_array.push(' <div id="toolbar_form">');tmpl_array.push(' <div id="library_toolbar">');tmpl_array.push(" <span><strong>DATA LIBRARIES</strong></span>");tmpl_array.push(" <% if(admin_user === true) { %>");tmpl_array.push(' <span data-toggle="tooltip" data-placement="top" title="Include deleted libraries"> | <input id="include_deleted_chk" style="margin: 0;" type="checkbox"> include deleted |</input></span>');tmpl_array.push(' <span data-toggle="tooltip" data-placement="top" title="Create New Library"><button id="create_new_library_btn" class="primary-button btn-xs" type="button"><span class="fa fa-plus"></span> New Library</button></span>');tmpl_array.push(" <% } %>");tmpl_array.push(' <span class="help-button" data-toggle="tooltip" data-placement="top" title="Visit Libraries Wiki"><a href="https://wiki.galaxyproject.org/DataLibraries/screen/ListOfLibraries" target="_blank"><button class="primary-button btn-xs" type="button"><span class="fa fa-question-circle"></span> Help</button></a></span>');tmpl_array.push(" </div>");tmpl_array.push(" <div>");tmpl_array.push(" ");tmpl_array.push(" </div>");tmpl_array.push(" </div>");tmpl_array.push(' <div id="libraries_element">');tmpl_array.push(" </div>");tmpl_array.push("</div>");return _.template(tmpl_array.join(""))},templateNewLibraryInModal:function(){tmpl_array=[];tmpl_array.push('<div id="new_library_modal">');tmpl_array.push(" <form>");tmpl_array.push(' <input type="text" name="Name" value="" placeholder="Name">');tmpl_array.push(' <input type="text" name="Description" value="" placeholder="Description">');tmpl_array.push(' <input type="text" name="Synopsis" value="" placeholder="Synopsis">');tmpl_array.push(" </form>");tmpl_array.push("</div>");return tmpl_array.join("")}});return{LibraryToolbarView:c}});
\ No newline at end of file
+define(["libs/toastr","mvc/library/library-model"],function(b,a){var c=Backbone.View.extend({el:"#center",events:{"click #create_new_library_btn":"show_library_modal","click #include_deleted_chk":"check_include_deleted"},initialize:function(){this.render()},render:function(){var f=this.templateToolBar();var e=false;var d=true;if(Galaxy.currUser){e=Galaxy.currUser.isAdmin();d=Galaxy.currUser.isAnonymous()}this.$el.html(f({admin_user:e,anon_user:d}));if(e){this.$el.find("#include_deleted_chk")[0].checked=Galaxy.libraries.preferences.get("with_deleted")}},show_library_modal:function(e){e.preventDefault();e.stopPropagation();var d=this;this.modal=Galaxy.modal;this.modal.show({closing_events:true,title:"Create New Library",body:this.templateNewLibraryInModal(),buttons:{Create:function(){d.create_new_library_event()},Close:function(){d.modal.hide()}}})},create_new_library_event:function(){var f=this.serialize_new_library();if(this.validate_new_library(f)){var e=new a.Library();var d=this;e.save(f,{success:function(g){Galaxy.libraries.libraryListView.collection.add(g);d.modal.hide();d.clear_library_modal();Galaxy.libraries.libraryListView.render();b.success("Library created.")},error:function(h,g){if(typeof g.responseJSON!=="undefined"){b.error(g.responseJSON.err_msg)}else{b.error("An error occured.")}}})}else{b.error("Library's name is missing.")}return false},clear_library_modal:function(){$("input[name='Name']").val("");$("input[name='Description']").val("");$("input[name='Synopsis']").val("")},serialize_new_library:function(){return{name:$("input[name='Name']").val(),description:$("input[name='Description']").val(),synopsis:$("input[name='Synopsis']").val()}},validate_new_library:function(d){return d.name!==""},check_include_deleted:function(d){if(d.target.checked){Galaxy.libraries.preferences.set({with_deleted:true});Galaxy.libraries.libraryListView.render()}else{Galaxy.libraries.preferences.set({with_deleted:false});Galaxy.libraries.libraryListView.render()}},templateToolBar:function(){tmpl_array=[];tmpl_array.push('<div class="library_style_container">');tmpl_array.push(' <div id="toolbar_form">');tmpl_array.push(' <div id="library_toolbar">');tmpl_array.push(" <span><strong>DATA LIBRARIES</strong></span>");tmpl_array.push(" <% if(admin_user === true) { %>");tmpl_array.push(' <span data-toggle="tooltip" data-placement="top" title="Include deleted libraries"> | <input id="include_deleted_chk" style="margin: 0;" type="checkbox"> include deleted |</input></span>');tmpl_array.push(' <span data-toggle="tooltip" data-placement="top" title="Create New Library"><button id="create_new_library_btn" class="primary-button btn-xs" type="button"><span class="fa fa-plus"></span> New Library</button></span>');tmpl_array.push(" <% } %>");tmpl_array.push(' <span class="help-button" data-toggle="tooltip" data-placement="top" title="Visit Libraries Wiki"><a href="https://wiki.galaxyproject.org/DataLibraries/screen/ListOfLibraries" target="_blank"><button class="primary-button btn-xs" type="button"><span class="fa fa-question-circle"></span> Help</button></a></span>');tmpl_array.push(" </div>");tmpl_array.push(" <div>");tmpl_array.push(" ");tmpl_array.push(" </div>");tmpl_array.push(" </div>");tmpl_array.push(' <div id="libraries_element">');tmpl_array.push(" </div>");tmpl_array.push("</div>");return _.template(tmpl_array.join(""))},templateNewLibraryInModal:function(){tmpl_array=[];tmpl_array.push('<div id="new_library_modal">');tmpl_array.push(" <form>");tmpl_array.push(' <input type="text" name="Name" value="" placeholder="Name">');tmpl_array.push(' <input type="text" name="Description" value="" placeholder="Description">');tmpl_array.push(' <input type="text" name="Synopsis" value="" placeholder="Synopsis">');tmpl_array.push(" </form>");tmpl_array.push("</div>");return tmpl_array.join("")}});return{LibraryToolbarView:c}});
\ No newline at end of file
https://bitbucket.org/galaxy/galaxy-central/commits/ac8d29ffce54/
Changeset: ac8d29ffce54
User: martenson
Date: 2014-09-17 04:07:52+00:00
Summary: Merge
Affected #: 23 files
diff -r 48fc9b40fda9458d502055d4887f5028ee64aa64 -r ac8d29ffce549f2c1570b661e8747c5beed2e676 config/tool_shed.ini.sample
--- /dev/null
+++ b/config/tool_shed.ini.sample
@@ -0,0 +1,114 @@
+# ---- HTTP Server ----------------------------------------------------------
+
+[server:main]
+
+use = egg:Paste#http
+port = 9009
+
+# The address on which to listen. By default, only listen to localhost (the tool shed will not
+# be accessible over the network). Use '0.0.0.0' to listen on all available network interfaces.
+#host = 0.0.0.0
+host = 127.0.0.1
+
+use_threadpool = true
+threadpool_workers = 10
+# Set the number of seconds a thread can work before you should kill it (assuming it will never finish) to 3 hours.
+threadpool_kill_thread_limit = 10800
+
+# ---- Galaxy Webapps Community Interface -------------------------------------------------
+
+[app:main]
+
+# Specifies the factory for the universe WSGI application
+paste.app_factory = galaxy.webapps.tool_shed.buildapp:app_factory
+log_level = DEBUG
+
+# Database connection
+database_file = database/community.sqlite
+# You may use a SQLAlchemy connection string to specify an external database instead
+#database_connection = postgres:///community_test?host=/var/run/postgresql
+
+# Where the hgweb.config file is stored. The default is the Galaxy installation directory.
+#hgweb_config_dir = None
+
+# Where tool shed repositories are stored.
+file_path = database/community_files
+# Temporary storage for additional datasets, this should be shared through the cluster
+new_file_path = database/tmp
+
+# File containing old-style genome builds
+#builds_file_path = tool-data/shared/ucsc/builds.txt
+
+# Session support (beaker)
+use_beaker_session = True
+session_type = memory
+session_data_dir = %(here)s/database/beaker_sessions
+session_key = galaxysessions
+session_secret = changethisinproduction
+
+# -- Users and Security
+
+# Galaxy encodes various internal values when these values will be output in
+# some format (for example, in a URL or cookie). You should set a key to be
+# used by the algorithm that encodes and decodes these values. It can be any
+# string. If left unchanged, anyone could construct a cookie that would grant
+# them access to others' sessions.
+id_secret = changethisinproductiontoo
+
+# User authentication can be delegated to an upstream proxy server (usually
+# Apache). The upstream proxy should set a REMOTE_USER header in the request.
+# Enabling remote user disables regular logins. For more information, see:
+# https://wiki.galaxyproject.org/Admin/Config/ApacheProxy
+#use_remote_user = False
+
+# Configuration for debugging middleware
+debug = true
+use_lint = false
+
+# NEVER enable this on a public site (even test or QA)
+# use_interactive = true
+
+# this should be a comma-separated list of valid Galaxy users
+#admin_users = user1@example.org,user2@example.org
+
+# Force everyone to log in (disable anonymous access)
+require_login = False
+
+# path to sendmail
+sendmail_path = /usr/sbin/sendmail
+
+# Number of saved tool test results produced by the install and test framework for each repository.
+#num_tool_test_results_saved = 5
+
+# For use by email messages sent from the tool shed
+#smtp_server = smtp.your_tool_shed_server
+#email_from = your_tool_shed_email@server
+
+# The URL linked by the "Support" link in the "Help" menu.
+#support_url = https://wiki.galaxyproject.org/Support
+
+# Write thread status periodically to 'heartbeat.log' (careful, uses disk space rapidly!)
+## use_heartbeat = True
+
+# Profiling middleware (cProfile based)
+## use_profile = True
+
+# Enable creation of Galaxy flavor Docker Image
+#enable_galaxy_flavor_docker_image = False
+
+# Use the new iframe / javascript based layout
+use_new_layout = true
+
+# Show a message box under the masthead.
+#message_box_visible = False
+#message_box_content = None
+#message_box_class = info
+
+# Serving static files (needed if running standalone)
+#static_enabled = True
+#static_cache_time = 360
+#static_dir = static/
+#static_images_dir = static/images
+#static_favicon_dir = static/favicon.ico
+#static_scripts_dir = static/scripts/
+#static_style_dir = static/style/blue
diff -r 48fc9b40fda9458d502055d4887f5028ee64aa64 -r ac8d29ffce549f2c1570b661e8747c5beed2e676 config/tool_shed_wsgi.ini.sample
--- a/config/tool_shed_wsgi.ini.sample
+++ /dev/null
@@ -1,114 +0,0 @@
-# ---- HTTP Server ----------------------------------------------------------
-
-[server:main]
-
-use = egg:Paste#http
-port = 9009
-
-# The address on which to listen. By default, only listen to localhost (the tool shed will not
-# be accessible over the network). Use '0.0.0.0' to listen on all available network interfaces.
-#host = 0.0.0.0
-host = 127.0.0.1
-
-use_threadpool = true
-threadpool_workers = 10
-# Set the number of seconds a thread can work before you should kill it (assuming it will never finish) to 3 hours.
-threadpool_kill_thread_limit = 10800
-
-# ---- Galaxy Webapps Community Interface -------------------------------------------------
-
-[app:main]
-
-# Specifies the factory for the universe WSGI application
-paste.app_factory = galaxy.webapps.tool_shed.buildapp:app_factory
-log_level = DEBUG
-
-# Database connection
-database_file = database/community.sqlite
-# You may use a SQLAlchemy connection string to specify an external database instead
-#database_connection = postgres:///community_test?host=/var/run/postgresql
-
-# Where the hgweb.config file is stored. The default is the Galaxy installation directory.
-#hgweb_config_dir = None
-
-# Where tool shed repositories are stored.
-file_path = database/community_files
-# Temporary storage for additional datasets, this should be shared through the cluster
-new_file_path = database/tmp
-
-# File containing old-style genome builds
-#builds_file_path = tool-data/shared/ucsc/builds.txt
-
-# Session support (beaker)
-use_beaker_session = True
-session_type = memory
-session_data_dir = %(here)s/database/beaker_sessions
-session_key = galaxysessions
-session_secret = changethisinproduction
-
-# -- Users and Security
-
-# Galaxy encodes various internal values when these values will be output in
-# some format (for example, in a URL or cookie). You should set a key to be
-# used by the algorithm that encodes and decodes these values. It can be any
-# string. If left unchanged, anyone could construct a cookie that would grant
-# them access to others' sessions.
-id_secret = changethisinproductiontoo
-
-# User authentication can be delegated to an upstream proxy server (usually
-# Apache). The upstream proxy should set a REMOTE_USER header in the request.
-# Enabling remote user disables regular logins. For more information, see:
-# https://wiki.galaxyproject.org/Admin/Config/ApacheProxy
-#use_remote_user = False
-
-# Configuration for debugging middleware
-debug = true
-use_lint = false
-
-# NEVER enable this on a public site (even test or QA)
-# use_interactive = true
-
-# this should be a comma-separated list of valid Galaxy users
-#admin_users = user1@example.org,user2@example.org
-
-# Force everyone to log in (disable anonymous access)
-require_login = False
-
-# path to sendmail
-sendmail_path = /usr/sbin/sendmail
-
-# Number of saved tool test results produced by the install and test framework for each repository.
-#num_tool_test_results_saved = 5
-
-# For use by email messages sent from the tool shed
-#smtp_server = smtp.your_tool_shed_server
-#email_from = your_tool_shed_email@server
-
-# The URL linked by the "Support" link in the "Help" menu.
-#support_url = https://wiki.galaxyproject.org/Support
-
-# Write thread status periodically to 'heartbeat.log' (careful, uses disk space rapidly!)
-## use_heartbeat = True
-
-# Profiling middleware (cProfile based)
-## use_profile = True
-
-# Enable creation of Galaxy flavor Docker Image
-#enable_galaxy_flavor_docker_image = False
-
-# Use the new iframe / javascript based layout
-use_new_layout = true
-
-# Show a message box under the masthead.
-#message_box_visible = False
-#message_box_content = None
-#message_box_class = info
-
-# Serving static files (needed if running standalone)
-static_enabled = True
-static_cache_time = 360
-static_dir = %(here)s/static/
-static_images_dir = %(here)s/static/images
-static_favicon_dir = %(here)s/static/favicon.ico
-static_scripts_dir = %(here)s/static/scripts/
-static_style_dir = %(here)s/static/june_2007_style/blue
diff -r 48fc9b40fda9458d502055d4887f5028ee64aa64 -r ac8d29ffce549f2c1570b661e8747c5beed2e676 install_and_test_tool_shed_repositories.sh
--- a/install_and_test_tool_shed_repositories.sh
+++ b/install_and_test_tool_shed_repositories.sh
@@ -33,7 +33,7 @@
fi
if [ -z "$GALAXY_INSTALL_TEST_TOOL_SHEDS_CONF" ] ; then
- if grep --quiet $GALAXY_INSTALL_TEST_TOOL_SHED_URL tool_sheds_conf.xml; then
+ if grep --quiet $GALAXY_INSTALL_TEST_TOOL_SHED_URL config/tool_sheds_conf.xml.sample; then
echo "Tool sheds configuration tool_sheds_conf.xml ok, proceeding."
else
echo "ERROR: Tool sheds configuration tool_sheds_conf.xml does not have an entry for $GALAXY_INSTALL_TEST_TOOL_SHED_URL."
diff -r 48fc9b40fda9458d502055d4887f5028ee64aa64 -r ac8d29ffce549f2c1570b661e8747c5beed2e676 lib/galaxy/jobs/handler.py
--- a/lib/galaxy/jobs/handler.py
+++ b/lib/galaxy/jobs/handler.py
@@ -101,19 +101,22 @@
In case the activation is enforced it will filter out the jobs of inactive users.
"""
jobs_at_startup = []
+ if self.track_jobs_in_database:
+ in_list = ( model.Job.states.QUEUED,
+ model.Job.states.RUNNING )
+ else:
+ in_list = ( model.Job.states.NEW,
+ model.Job.states.QUEUED,
+ model.Job.states.RUNNING )
if self.app.config.user_activation_on:
jobs_at_startup = self.sa_session.query( model.Job ).enable_eagerloads( False ) \
.outerjoin( model.User ) \
- .filter( ( ( model.Job.state == model.Job.states.NEW ) \
- | ( model.Job.state == model.Job.states.RUNNING ) \
- | ( model.Job.state == model.Job.states.QUEUED ) ) \
+ .filter( model.Job.state.in_( in_list ) \
& ( model.Job.handler == self.app.config.server_name ) \
& or_( ( model.Job.user_id == None ), ( model.User.active == True ) ) ).all()
else:
jobs_at_startup = self.sa_session.query( model.Job ).enable_eagerloads( False ) \
- .filter( ( ( model.Job.state == model.Job.states.NEW ) \
- | ( model.Job.state == model.Job.states.RUNNING ) \
- | ( model.Job.state == model.Job.states.QUEUED ) ) \
+ .filter( model.Job.state.in_( in_list ) \
& ( model.Job.handler == self.app.config.server_name ) ).all()
for job in jobs_at_startup:
diff -r 48fc9b40fda9458d502055d4887f5028ee64aa64 -r ac8d29ffce549f2c1570b661e8747c5beed2e676 lib/galaxy/model/orm/scripts.py
--- a/lib/galaxy/model/orm/scripts.py
+++ b/lib/galaxy/model/orm/scripts.py
@@ -31,7 +31,7 @@
"tool_shed":
{
'repo': 'lib/galaxy/webapps/tool_shed/model/migrate',
- 'config_file': 'tool_shed_wsgi.ini',
+ 'config_file': 'config/tool_shed.ini',
'default_sqlite_file': './database/community.sqlite',
},
"install":
@@ -79,7 +79,7 @@
... p.add_section('app:main')
... p.set('app:main', property, value)
... with open(os.path.join(config_dir, path), 'w') as f: p.write(f)
- >>> write_ini('tool_shed_wsgi.ini', 'database_connection', 'sqlite:///pg/testdb1')
+ >>> write_ini('tool_shed.ini', 'database_connection', 'sqlite:///pg/testdb1')
>>> config = get_config(['manage_db.py', 'tool_shed'], cwd=config_dir)
>>> config['repo']
'lib/galaxy/webapps/tool_shed/model/migrate'
diff -r 48fc9b40fda9458d502055d4887f5028ee64aa64 -r ac8d29ffce549f2c1570b661e8747c5beed2e676 lib/galaxy/webapps/tool_shed/app.py
--- a/lib/galaxy/webapps/tool_shed/app.py
+++ b/lib/galaxy/webapps/tool_shed/app.py
@@ -20,7 +20,7 @@
def __init__( self, **kwd ):
print >> sys.stderr, "python path is: " + ", ".join( sys.path )
self.name = "tool_shed"
- # Read the tool_shed_wsgi.ini configuration file and check for errors.
+ # Read the tool_shed.ini configuration file and check for errors.
self.config = config.Configuration( **kwd )
self.config.check()
config.configure_logging( self.config )
diff -r 48fc9b40fda9458d502055d4887f5028ee64aa64 -r ac8d29ffce549f2c1570b661e8747c5beed2e676 lib/galaxy/webapps/tool_shed/buildapp.py
--- a/lib/galaxy/webapps/tool_shed/buildapp.py
+++ b/lib/galaxy/webapps/tool_shed/buildapp.py
@@ -220,11 +220,12 @@
# Send to dynamic app by default
urlmap["/"] = app
# Define static mappings from config
- urlmap["/static"] = Static( conf.get( "static_dir" ), cache_time )
- urlmap["/images"] = Static( conf.get( "static_images_dir" ), cache_time )
- urlmap["/static/scripts"] = Static( conf.get( "static_scripts_dir" ), cache_time )
- urlmap["/static/style"] = Static( conf.get( "static_style_dir" ), cache_time )
- urlmap["/favicon.ico"] = Static( conf.get( "static_favicon_dir" ), cache_time )
+ urlmap["/static"] = Static( conf.get( "static_dir", "./static/" ), cache_time )
+ urlmap["/images"] = Static( conf.get( "static_images_dir", "./static/images" ), cache_time )
+ urlmap["/static/scripts"] = Static( conf.get( "static_scripts_dir", "./static/scripts/" ), cache_time )
+ urlmap["/static/style"] = Static( conf.get( "static_style_dir", "./static/style/blue" ), cache_time )
+ urlmap["/favicon.ico"] = Static( conf.get( "static_favicon_dir", "./static/favicon.ico" ), cache_time )
+ urlmap["/robots.txt"] = Static( conf.get( "static_robots_txt", "./static/robots.txt" ), cache_time )
# URL mapper becomes the root webapp
return urlmap
diff -r 48fc9b40fda9458d502055d4887f5028ee64aa64 -r ac8d29ffce549f2c1570b661e8747c5beed2e676 lib/galaxy/webapps/tool_shed/config.py
--- a/lib/galaxy/webapps/tool_shed/config.py
+++ b/lib/galaxy/webapps/tool_shed/config.py
@@ -27,6 +27,10 @@
def __init__( self, **kwargs ):
self.config_dict = kwargs
self.root = kwargs.get( 'root_dir', '.' )
+
+ # Resolve paths of other config files
+ self.__parse_config_file_options( kwargs )
+
# Collect the umask and primary gid from the environment
self.umask = os.umask( 077 ) # get the current umask
os.umask( self.umask ) # can't get w/o set, so set it back
@@ -41,7 +45,6 @@
self.new_file_path = resolve_path( kwargs.get( "new_file_path", "database/tmp" ), self.root )
self.cookie_path = kwargs.get( "cookie_path", "/" )
self.enable_quotas = string_as_bool( kwargs.get( 'enable_quotas', False ) )
- self.datatypes_config = kwargs.get( 'datatypes_config_file', 'datatypes_conf.xml' )
self.test_conf = resolve_path( kwargs.get( "test_conf", "" ), self.root )
self.id_secret = kwargs.get( "id_secret", "USING THE DEFAULT IS NOT SECURE!" )
# Tool stuff
@@ -51,8 +54,6 @@
self.tool_path = resolve_path( kwargs.get( "tool_path", "tools" ), self.root )
self.tool_secret = kwargs.get( "tool_secret", "" )
self.tool_data_path = resolve_path( kwargs.get( "tool_data_path", "shed-tool-data" ), os.getcwd() )
- self.tool_data_table_config_path = resolve_path( kwargs.get( 'tool_data_table_config_path', 'tool_data_table_conf.xml' ), self.root )
- self.shed_tool_data_table_config = resolve_path( kwargs.get( 'shed_tool_data_table_config', 'shed_tool_data_table_conf.xml' ), self.root )
self.integrated_tool_panel_config = resolve_path( kwargs.get( 'integrated_tool_panel_config', 'integrated_tool_panel.xml' ), self.root )
self.builds_file_path = resolve_path( kwargs.get( "builds_file_path", os.path.join( self.tool_data_path, 'shared', 'ucsc', 'builds.txt') ), self.root )
self.len_file_path = resolve_path( kwargs.get( "len_file_path", os.path.join( self.tool_data_path, 'shared','ucsc','chrom') ), self.root )
@@ -136,6 +137,47 @@
self.citation_cache_data_dir = resolve_path( kwargs.get( "citation_cache_data_dir", "database/tool_shed_citations/data" ), self.root )
self.citation_cache_lock_dir = resolve_path( kwargs.get( "citation_cache_lock_dir", "database/tool_shed_citations/locks" ), self.root )
+ def __parse_config_file_options( self, kwargs ):
+ defaults = dict(
+ datatypes_config_file = [ 'datatypes_conf.xml', 'config/datatypes_conf.xml', 'config/datatypes_conf.xml.sample' ],
+ shed_tool_data_table_config = [ 'shed_tool_data_table_conf.xml', 'config/shed_tool_data_table_conf.xml' ],
+ )
+
+ listify_defaults = dict(
+ tool_data_table_config_path = [ 'tool_data_table_conf.xml', 'config/tool_data_table_conf.xml', 'config/tool_data_table_conf.xml.sample' ],
+ )
+
+ for var, defaults in defaults.items():
+ if kwargs.get( var, None ) is not None:
+ path = kwargs.get( var )
+ else:
+ for default in defaults:
+ if os.path.exists( resolve_path( default, self.root ) ):
+ path = default
+ break
+ else:
+ path = defaults[-1]
+ setattr( self, var, resolve_path( path, self.root ) )
+
+ for var, defaults in listify_defaults.items():
+ paths = []
+ if kwargs.get( var, None ) is not None:
+ paths = listify( kwargs.get( var ) )
+ else:
+ for default in defaults:
+ for path in listify( default ):
+ if not os.path.exists( resolve_path( path, self.root ) ):
+ break
+ else:
+ paths = listify( default )
+ break
+ else:
+ paths = listify( defaults[-1] )
+ setattr( self, var, [ resolve_path( x, self.root ) for x in paths ] )
+
+ # Backwards compatibility for names used in too many places to fix
+ self.datatypes_config = self.datatypes_config_file
+
def get( self, key, default ):
return self.config_dict.get( key, default )
diff -r 48fc9b40fda9458d502055d4887f5028ee64aa64 -r ac8d29ffce549f2c1570b661e8747c5beed2e676 lib/pulsar/client/__init__.py
--- a/lib/pulsar/client/__init__.py
+++ b/lib/pulsar/client/__init__.py
@@ -34,7 +34,7 @@
test_tool = pulsar://http://remotehost:8913
Remember this must be added after the ``[galaxy:tool_runners]`` header
-in the ``universe.ini`` file.
+in the ``galaxy.ini`` file.
"""
diff -r 48fc9b40fda9458d502055d4887f5028ee64aa64 -r ac8d29ffce549f2c1570b661e8747c5beed2e676 lib/pulsar/client/amqp_exchange.py
--- a/lib/pulsar/client/amqp_exchange.py
+++ b/lib/pulsar/client/amqp_exchange.py
@@ -85,18 +85,27 @@
if heartbeat_thread:
heartbeat_thread.join()
sleep(DEFAULT_RECONNECT_CONSUMER_WAIT)
+ except BaseException:
+ log.exception("Problem consuming queue, consumer quitting in problematic fashion!")
+ raise
def heartbeat(self, connection):
log.debug('AMQP heartbeat thread alive')
- while connection.connected:
- connection.heartbeat_check()
- sleep(DEFAULT_HEARTBEAT_WAIT)
+ try:
+ while connection.connected:
+ connection.heartbeat_check()
+ sleep(DEFAULT_HEARTBEAT_WAIT)
+ except BaseException:
+ log.exception("Problem with heartbeat, leaving heartbeat method in problematic state!")
+ raise
log.debug('AMQP heartbeat thread exiting')
def publish(self, name, payload):
+ key = self.__queue_name(name)
+ log.debug("Begin publishing to key %s" % key)
with self.connection(self.__url) as connection:
with pools.producers[connection].acquire() as producer:
- key = self.__queue_name(name)
+ log.debug("Have producer for publishing to key %s" % key)
producer.publish(
payload,
serializer='json',
@@ -105,6 +114,7 @@
routing_key=key,
**self.__publish_kwds
)
+ log.debug("Published to key %s" % key)
def __publish_errback(self, exc, interval):
log.error("Connection error while publishing: %r", exc, exc_info=1)
diff -r 48fc9b40fda9458d502055d4887f5028ee64aa64 -r ac8d29ffce549f2c1570b661e8747c5beed2e676 lib/pulsar/client/transport/__init__.py
--- a/lib/pulsar/client/transport/__init__.py
+++ b/lib/pulsar/client/transport/__init__.py
@@ -23,9 +23,16 @@
transport_type = 'curl'
return transport_type
-# TODO: Provide urllib implementation if these unavailable,
-# also explore a requests+poster option.
-from .curl import get_file
-from .curl import post_file
+from .curl import curl_available
+from .requests import requests_multipart_post_available
+if curl_available:
+ from .curl import get_file
+ from .curl import post_file
+elif requests_multipart_post_available:
+ from .requests import get_file
+ from .requests import post_file
+else:
+ from .poster import get_file
+ from .poster import post_file
__all__ = [get_transport, get_file, post_file]
diff -r 48fc9b40fda9458d502055d4887f5028ee64aa64 -r ac8d29ffce549f2c1570b661e8747c5beed2e676 lib/pulsar/client/transport/curl.py
--- a/lib/pulsar/client/transport/curl.py
+++ b/lib/pulsar/client/transport/curl.py
@@ -2,10 +2,11 @@
from cStringIO import StringIO
except ImportError:
from io import StringIO
+curl_available = True
try:
from pycurl import Curl
except ImportError:
- pass
+ curl_available = False
from os.path import getsize
diff -r 48fc9b40fda9458d502055d4887f5028ee64aa64 -r ac8d29ffce549f2c1570b661e8747c5beed2e676 lib/pulsar/client/transport/poster.py
--- /dev/null
+++ b/lib/pulsar/client/transport/poster.py
@@ -0,0 +1,56 @@
+from __future__ import absolute_import
+try:
+ from urllib2 import urlopen
+except ImportError:
+ from urllib.request import urlopen
+try:
+ from urllib2 import Request
+except ImportError:
+ from urllib.request import Request
+try:
+ from galaxy import eggs
+ eggs.require("poster")
+except ImportError:
+ pass
+
+try:
+ import poster
+except ImportError:
+ poster = None
+
+POSTER_UNAVAILABLE_MESSAGE = "Pulsar configured to use poster module - but it is unavailable. Please install poster."
+
+import logging
+log = logging.getLogger(__name__)
+
+
+if poster is not None:
+ poster.streaminghttp.register_openers()
+
+
+def post_file(url, path):
+ __ensure_poster()
+ try:
+ datagen, headers = poster.encode.multipart_encode({"file": open(path, "rb")})
+ request = Request(url, datagen, headers)
+ return urlopen(request).read()
+ except:
+ log.exception("problem")
+ raise
+
+
+def get_file(url, path):
+ __ensure_poster()
+ request = Request(url=url)
+ response = urlopen(request)
+ with open(path, 'wb') as output:
+ while True:
+ buffer = response.read(1024)
+ if not buffer:
+ break
+ output.write(buffer)
+
+
+def __ensure_poster():
+ if poster is None:
+ raise ImportError(POSTER_UNAVAILABLE_MESSAGE)
diff -r 48fc9b40fda9458d502055d4887f5028ee64aa64 -r ac8d29ffce549f2c1570b661e8747c5beed2e676 lib/pulsar/client/transport/requests.py
--- /dev/null
+++ b/lib/pulsar/client/transport/requests.py
@@ -0,0 +1,50 @@
+from __future__ import absolute_import
+try:
+ from galaxy import eggs
+ eggs.require("requests")
+except ImportError:
+ pass
+
+try:
+ import requests
+except ImportError:
+ requests = None
+requests_multipart_post_available = False
+try:
+ import requests_toolbelt
+ requests_multipart_post_available = True
+except ImportError:
+ requests_toolbelt = None
+
+
+REQUESTS_UNAVAILABLE_MESSAGE = "Pulsar configured to use requests module - but it is unavailable. Please install requests."
+REQUESTS_TOOLBELT_UNAVAILABLE_MESSAGE = "Pulsar configured to use requests_toolbelt module - but it is unavailable. Please install requests_toolbelt."
+
+import logging
+log = logging.getLogger(__name__)
+
+
+def post_file(url, path):
+ if requests_toolbelt is None:
+ raise ImportError(REQUESTS_TOOLBELT_UNAVAILABLE_MESSAGE)
+
+ __ensure_requests()
+ m = requests_toolbelt.MultipartEncoder(
+ fields={'file': ('filename', open(path, 'rb'))}
+ )
+ requests.post(url, data=m, headers={'Content-Type': m.content_type})
+
+
+def get_file(url, path):
+ __ensure_requests()
+ r = requests.get(url, stream=True)
+ with open(path, 'wb') as f:
+ for chunk in r.iter_content(chunk_size=1024):
+ if chunk: # filter out keep-alive new chunks
+ f.write(chunk)
+ f.flush()
+
+
+def __ensure_requests():
+ if requests is None:
+ raise ImportError(REQUESTS_UNAVAILABLE_MESSAGE)
diff -r 48fc9b40fda9458d502055d4887f5028ee64aa64 -r ac8d29ffce549f2c1570b661e8747c5beed2e676 lib/tool_shed/scripts/bootstrap_tool_shed/bootstrap_tool_shed.sh
--- a/lib/tool_shed/scripts/bootstrap_tool_shed/bootstrap_tool_shed.sh
+++ b/lib/tool_shed/scripts/bootstrap_tool_shed/bootstrap_tool_shed.sh
@@ -1,8 +1,10 @@
#!/bin/bash
+: ${TOOL_SHED_CONFIG_FILE:=config/tool_shed.ini.sample}
+
stop_err() {
echo $1
- python ./scripts/paster.py serve tool_shed_wsgi.ini --pid-file=tool_shed_bootstrap.pid --log-file=tool_shed_bootstrap.log --stop-daemon
+ python ./scripts/paster.py serve ${TOOL_SHED_CONFIG_FILE} --pid-file=tool_shed_bootstrap.pid --log-file=tool_shed_bootstrap.log --stop-daemon
exit 1
}
@@ -14,7 +16,7 @@
log_file="lib/tool_shed/scripts/bootstrap_tool_shed/bootstrap.log"
-database_result=`python ./lib/tool_shed/scripts/bootstrap_tool_shed/bootstrap_util.py --execute check_db --config_file tool_shed_wsgi.ini`
+database_result=`python ./lib/tool_shed/scripts/bootstrap_tool_shed/bootstrap_util.py --execute check_db --config_file ${TOOL_SHED_CONFIG_FILE}`
if [ $? -ne 0 ] ; then
stop_err "Unable to bootstrap tool shed. $database_result"
@@ -31,8 +33,8 @@
fi
if [ $? -eq 0 ] ; then
- user_auth=`python ./lib/tool_shed/scripts/bootstrap_tool_shed/bootstrap_util.py --execute admin_user_info --config_file tool_shed_wsgi.ini`
- local_shed_url=`python ./lib/tool_shed/scripts/bootstrap_tool_shed/bootstrap_util.py --execute get_url --config_file tool_shed_wsgi.ini`
+ user_auth=`python ./lib/tool_shed/scripts/bootstrap_tool_shed/bootstrap_util.py --execute admin_user_info --config_file ${TOOL_SHED_CONFIG_FILE}`
+ local_shed_url=`python ./lib/tool_shed/scripts/bootstrap_tool_shed/bootstrap_util.py --execute get_url --config_file ${TOOL_SHED_CONFIG_FILE}`
fi
admin_user_name=`echo $user_auth | awk 'BEGIN { FS="__SEP__" } ; { print \$1 }'`
@@ -41,18 +43,18 @@
echo -n "Creating user '$admin_user_name' with email address '$admin_user_email'..."
-python lib/tool_shed/scripts/bootstrap_tool_shed/create_user_with_api_key.py tool_shed_wsgi.ini >> $log_file
+python lib/tool_shed/scripts/bootstrap_tool_shed/create_user_with_api_key.py ${TOOL_SHED_CONFIG_FILE} >> $log_file
echo " done."
-sed -i "s/#admin_users = user1@example.org,user2@example.org/admin_users = $admin_user_email/" tool_shed_wsgi.ini
+sed -i "s/#admin_users = user1@example.org,user2@example.org/admin_users = $admin_user_email/" ${TOOL_SHED_CONFIG_FILE}
echo -n "Starting tool shed in order to populate users and categories... "
if [ -f tool_shed_bootstrap.pid ] ; then
stop_err "A bootstrap process is already running."
fi
-python ./scripts/paster.py serve tool_shed_wsgi.ini --pid-file=tool_shed_bootstrap.pid --log-file=tool_shed_bootstrap.log --daemon > /dev/null
+python ./scripts/paster.py serve ${TOOL_SHED_CONFIG_FILE} --pid-file=tool_shed_bootstrap.pid --log-file=tool_shed_bootstrap.log --daemon > /dev/null
shed_pid=`cat tool_shed_bootstrap.pid`
@@ -94,6 +96,6 @@
fi
echo "Bootstrap complete, shutting down temporary tool shed process. A log has been saved to tool_shed_bootstrap.log"
-python ./scripts/paster.py serve tool_shed_wsgi.ini --pid-file=tool_shed_bootstrap.pid --log-file=tool_shed_bootstrap.log --stop-daemon
+python ./scripts/paster.py serve ${TOOL_SHED_CONFIG_FILE} --pid-file=tool_shed_bootstrap.pid --log-file=tool_shed_bootstrap.log --stop-daemon
-exit 0
\ No newline at end of file
+exit 0
diff -r 48fc9b40fda9458d502055d4887f5028ee64aa64 -r ac8d29ffce549f2c1570b661e8747c5beed2e676 lib/tool_shed/scripts/bootstrap_tool_shed/bootstrap_util.py
--- a/lib/tool_shed/scripts/bootstrap_tool_shed/bootstrap_util.py
+++ b/lib/tool_shed/scripts/bootstrap_tool_shed/bootstrap_util.py
@@ -25,7 +25,7 @@
db_file = config_parser.get( 'app:main', 'database_file' )
dburi = "sqlite:///%s?isolation_level=IMMEDIATE" % db_file
else:
- print 'The database configuration setting is missing from the tool_shed_wsgi.ini file. Add this setting before attempting to bootstrap.'
+ print 'The database configuration setting is missing from the tool_shed.ini file. Add this setting before attempting to bootstrap.'
exit(1)
sa_session = None
@@ -122,7 +122,7 @@
return 1
parser = argparse.ArgumentParser()
-parser.add_argument( '-c', '--config_file', dest='config', action='store', default='tool_shed_wsgi.ini' )
+parser.add_argument( '-c', '--config_file', dest='config', action='store', default='config/tool_shed.ini.sample' )
parser.add_argument( '-e', '--execute', dest='method', action='store', default='check_db' )
args = parser.parse_args()
diff -r 48fc9b40fda9458d502055d4887f5028ee64aa64 -r ac8d29ffce549f2c1570b661e8747c5beed2e676 run.sh
--- a/run.sh
+++ b/run.sh
@@ -22,7 +22,7 @@
if [ -f universe_wsgi.ini ]; then
GALAXY_CONFIG_FILE=universe_wsgi.ini
elif [ -f config/galaxy.ini ]; then
- GALAXY_CONFIG_FILE=universe_wsgi.ini
+ GALAXY_CONFIG_FILE=config/galaxy.ini
else
GALAXY_CONFIG_FILE=config/galaxy.ini.sample
fi
diff -r 48fc9b40fda9458d502055d4887f5028ee64aa64 -r ac8d29ffce549f2c1570b661e8747c5beed2e676 run_tool_shed.sh
--- a/run_tool_shed.sh
+++ b/run_tool_shed.sh
@@ -12,4 +12,15 @@
args=`echo $@ | sed "s#-\?-bootstrap_from_tool_shed $tool_shed##"`
fi
-python ./scripts/paster.py serve tool_shed_wsgi.ini --pid-file=tool_shed_webapp.pid --log-file=tool_shed_webapp.log $args
+if [ -z "$TOOL_SHED_CONFIG_FILE" ]; then
+ if [ -f tool_shed_wsgi.ini ]; then
+ TOOL_SHED_CONFIG_FILE=tool_shed_wsgi.ini
+ elif [ -f config/tool_shed.ini ]; then
+ TOOL_SHED_CONFIG_FILE=config/tool_shed.ini
+ else
+ TOOL_SHED_CONFIG_FILE=config/tool_shed.ini.sample
+ fi
+ export TOOL_SHED_CONFIG_FILE
+fi
+
+python ./scripts/paster.py serve $TOOL_SHED_CONFIG_FILE --pid-file=tool_shed_webapp.pid --log-file=tool_shed_webapp.log $args
diff -r 48fc9b40fda9458d502055d4887f5028ee64aa64 -r ac8d29ffce549f2c1570b661e8747c5beed2e676 test/api/test_libraries.py
--- a/test/api/test_libraries.py
+++ b/test/api/test_libraries.py
@@ -43,7 +43,7 @@
library_dataset = show().json()
self._assert_has_keys( library_dataset, "peek", "data_type" )
assert library_dataset[ "peek" ].find("create_test") >= 0
- assert library_dataset[ "data_type" ] == "txt"
+ assert library_dataset[ "file_ext" ] == "txt", library_dataset[ "file_ext" ]
def _create_folder( self, library ):
create_data = dict(
diff -r 48fc9b40fda9458d502055d4887f5028ee64aa64 -r ac8d29ffce549f2c1570b661e8747c5beed2e676 test/api/test_workflows.py
--- a/test/api/test_workflows.py
+++ b/test/api/test_workflows.py
@@ -26,9 +26,9 @@
self.dataset_populator = DatasetPopulator( self.galaxy_interactor )
self.dataset_collection_populator = DatasetCollectionPopulator( self.galaxy_interactor )
- def test_show_invalid_is_404( self ):
- show_response = self._get( "workflow/%s" % self._random_key() )
- self._assert_status_code_is( show_response, 404 )
+ def test_show_invalid_key_is_400( self ):
+ show_response = self._get( "workflows/%s" % self._random_key() )
+ self._assert_status_code_is( show_response, 400 )
def test_cannot_show_private_workflow( self ):
workflow_id = self.workflow_populator.simple_workflow( "test_not_importportable" )
@@ -134,12 +134,12 @@
run_workflow_response = self._post( "workflows", data=workflow_request )
self._assert_status_code_is( run_workflow_response, 403 )
- def test_404_on_invalid_workflow( self ):
+ def test_400_on_invalid_workflow_id( self ):
workflow = self.workflow_populator.load_workflow( name="test_for_run_does_not_exist" )
workflow_request, history_id = self._setup_workflow_run( workflow )
workflow_request[ "workflow_id" ] = self._random_key()
run_workflow_response = self._post( "workflows", data=workflow_request )
- self._assert_status_code_is( run_workflow_response, 404 )
+ self._assert_status_code_is( run_workflow_response, 400 )
def test_cannot_run_against_other_users_history( self ):
workflow = self.workflow_populator.load_workflow( name="test_for_run_does_not_exist" )
@@ -558,21 +558,6 @@
for step in usage_details[ "steps" ]:
self._assert_has_keys( step, "workflow_step_id", "order_index", "id" )
- @skip_without_tool( "cat1" )
- def test_post_job_action( self ):
- """ Tests both import and execution of post job actions.
- """
- workflow = self.workflow_populator.load_workflow( name="test_for_pja_run", add_pja=True )
- workflow_request, history_id = self._setup_workflow_run( workflow )
- run_workflow_response = self._post( "workflows", data=workflow_request )
- self._assert_status_code_is( run_workflow_response, 200 )
- self.dataset_populator.wait_for_history( history_id, assert_ok=True )
- time.sleep(.1) # Give another little bit of time for rename (needed?)
- contents = self._get( "histories/%s/contents" % history_id ).json()
- # loading workflow with add_pja=True causes workflow output to be
- # renamed to 'the_new_name'.
- assert "the_new_name" in map( lambda hda: hda[ "name" ], contents )
-
def _invocation_details( self, workflow_id, invocation_id ):
invocation_details_response = self._get( "workflows/%s/usage/%s" % ( workflow_id, invocation_id ) )
self._assert_status_code_is( invocation_details_response, 200 )
diff -r 48fc9b40fda9458d502055d4887f5028ee64aa64 -r ac8d29ffce549f2c1570b661e8747c5beed2e676 test/functional/tools/samples_tool_conf.xml
--- a/test/functional/tools/samples_tool_conf.xml
+++ b/test/functional/tools/samples_tool_conf.xml
@@ -22,6 +22,8 @@
<tool file="multi_data_param.xml" /><tool file="special_params.xml" /><tool file="validation_default.xml" />
+ <tool file="validation_sanitizer.xml" />
+ <tool file="validation_repeat.xml" /><tool file="collection_paired_test.xml" /><tool file="collection_nested_test.xml" /><tool file="collection_mixed_param.xml" />
diff -r 48fc9b40fda9458d502055d4887f5028ee64aa64 -r ac8d29ffce549f2c1570b661e8747c5beed2e676 test/functional/tools/validation_repeat.xml
--- /dev/null
+++ b/test/functional/tools/validation_repeat.xml
@@ -0,0 +1,56 @@
+<tool id="validation_repeat" name="Validation (default)">
+ <command>
+ #for $r in $r1
+ echo "${r.text}" >> out1;
+ #end for
+ #for $r in $r2
+ echo "${r.text}" >> out2;
+ #end for
+ </command>
+ <inputs>
+ <repeat name="r1" label="Repeat 1">
+ <param name="text" type="text" label="text input" />
+ </repeat>
+ <repeat name="r2" label="Repeat 2">
+ <param name="text" type="text" label="text input">
+ <sanitizer>
+ <valid initial="none">
+ <add value="a"/>
+ <add value="b"/>
+ <add value="d"/>
+ <add value="e"/>
+ </valid>
+ <mapping initial="none">
+ <add source="@" target="c"/>
+ </mapping>
+ </sanitizer>
+ </param>
+ </repeat>
+ </inputs>
+ <outputs>
+ <data name="out_file1" from_work_dir="out1" />
+ <data name="out_file2" from_work_dir="out2" />
+ </outputs>
+ <tests>
+ <test>
+ <repeat name="r1">
+ <param name="text" value="" ; echo "moo" />
+ </repeat>
+ <repeat name="r2">
+ <param name="text" value="ab@de" />
+ </repeat>
+ <output name="out_file1">
+ <assert_contents>
+ <has_line line="__dq__ X echo __dq__moo" />
+ </assert_contents>
+ </output>
+ <output name="out_file2">
+ <assert_contents>
+ <has_line line="abcde" />
+ </assert_contents>
+ </output>
+ </test>
+ </tests>
+ <help>
+ </help>
+</tool>
diff -r 48fc9b40fda9458d502055d4887f5028ee64aa64 -r ac8d29ffce549f2c1570b661e8747c5beed2e676 test/functional/tools/validation_sanitizer.xml
--- /dev/null
+++ b/test/functional/tools/validation_sanitizer.xml
@@ -0,0 +1,35 @@
+<tool id="validation_sanitizer" name="Validation (simple sanitizer)">
+ <command>
+ echo "${text}" >> out1;
+ </command>
+ <inputs>
+ <param name="text" type="text" label="text input">
+ <sanitizer>
+ <valid initial="none">
+ <add value="a"/>
+ <add value="b"/>
+ <add value="d"/>
+ <add value="e"/>
+ </valid>
+ <mapping initial="none">
+ <add source="@" target="c"/>
+ </mapping>
+ </sanitizer>
+ </param>
+ </inputs>
+ <outputs>
+ <data name="out_file1" from_work_dir="out1" />
+ </outputs>
+ <tests>
+ <test>
+ <param name="text" value="ab@de" />
+ <output name="out_file1">
+ <assert_contents>
+ <has_line line="abcde" />
+ </assert_contents>
+ </output>
+ </test>
+ </tests>
+ <help>
+ </help>
+</tool>
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
commit/galaxy-central: jmchilton: Merged in martenson/galaxy-central-marten (pull request #497)
by commits-noreply@bitbucket.org 16 Sep '14
by commits-noreply@bitbucket.org 16 Sep '14
16 Sep '14
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/7ddb0d7b4b12/
Changeset: 7ddb0d7b4b12
User: jmchilton
Date: 2014-09-17 01:40:35+00:00
Summary: Merged in martenson/galaxy-central-marten (pull request #497)
importing into library folders from Galaxy filesystem
Affected #: 37 files
diff -r 38be704a932fafd27b01034ae9daf83a465062bf -r 7ddb0d7b4b128089322b441c77eceaea5d993312 client/galaxy/scripts/galaxy.library.js
--- a/client/galaxy/scripts/galaxy.library.js
+++ b/client/galaxy/scripts/galaxy.library.js
@@ -47,7 +47,8 @@
"folders/:folder_id/datasets/:dataset_id" : "dataset_detail",
"folders/:folder_id/datasets/:dataset_id/permissions" : "dataset_permissions",
"folders/:folder_id/datasets/:dataset_id/versions/:ldda_id" : "dataset_version",
- "folders/:folder_id/download/:format" : "download"
+ "folders/:folder_id/download/:format" : "download",
+ "folders/:folder_id/import/:source" : "import_datasets"
},
back: function() {
@@ -147,6 +148,15 @@
}
Galaxy.libraries.folderView = new mod_library_folder_view.FolderView({id: folder_id, show_permissions: true});
});
+ this.library_router.on('route:import_datasets', function(folder_id, source){
+ if (Galaxy.libraries.folderToolbarView && Galaxy.libraries.folderListView){
+ Galaxy.libraries.folderToolbarView.showImportModal({source:source});
+ } else {
+ Galaxy.libraries.folderToolbarView = new mod_foldertoolbar_view.FolderToolbarView({id: folder_id});
+ Galaxy.libraries.folderListView = new mod_folderlist_view.FolderListView({id: folder_id});
+ Galaxy.libraries.folderToolbarView.showImportModal({source: source});
+ }
+ });
Backbone.history.start({pushState: false});
}
This diff is so big that we needed to truncate the remainder.
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
11 new commits in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/cadad49537de/
Changeset: cadad49537de
User: martenson
Date: 2014-09-08 18:27:49+00:00
Summary: initial implementation of UI, API and flow for importing from Galaxy user directories, introduces jstree browser into the project, includes refactoring of some library API methods into common managers
Affected #: 22 files
diff -r 02852a8e49e23cd1090f798e99702057fa24bc1d -r cadad49537de2edd2128be108d0d631f35722ab5 lib/galaxy/util/dictobj.py
--- /dev/null
+++ b/lib/galaxy/util/dictobj.py
@@ -0,0 +1,229 @@
+import pickle
+
+class DictionaryObject(object):
+ """
+ A class that has all the functionality of a normal Python dictionary, except
+ for the fact it is itself immutable. It also has the added feature of
+ being able to lookup values by using keys as attributes.
+
+ The reason for the class being immutable by default is to help make it a
+ little easier to use in multiprocessing situations. Granted, the underlying
+ values themselves are not deeply copied, but the aim is to enforce some
+ ensurances of immutability on the container class.
+
+ When using positional arguments, the first argument must always be something
+ that would be a valid argument for a dict(). However, a second, optional
+ argument may be passed to create a default value when keys are not found.
+
+ Examples:
+ >>> d = DictionaryObject({'a':1, 'b':True, 3:'x'})
+ >>> print d.a, d.b, d[3]
+ 1 True x
+
+ >>> d = DictionaryObject((('a',1),('b',2)))
+ >>> print d.a, d.b
+ 1 2
+
+ >>> d = DictionaryObject(a=1, b=True)
+ >>> print d
+ DictionaryObject({'a': 1, 'b': True})
+
+ >>> d = DictionaryObject({'a':1, 'b':True}, None)
+ >>> print d.a, d.b, d.c, d.d
+ 1 True None None
+
+ >>> d = DictionaryObject({'a':1}, None)
+ >>> m = MutableDictionaryObject(d)
+ >>> print d == m
+ True
+ >>> m.a = 0
+ >>> print d == m, d < m, d > m, d != m, d <= m, d >= m
+ False False True True False True
+
+ >>> import pickle
+ >>> m1 = MutableDictionaryObject({'a':1}, None)
+ >>> m2 = pickle.loads(pickle.dumps(m1))
+ >>> print m1 == m2
+ True
+ >>> m1.a = 3
+ >>> print m1 == m2
+ False
+ >>> m1.a == 3
+ True
+ >>> m1['c'] = 5
+ >>> m1['c']
+ 5
+ """
+ def __init__(self, contents=(), *args, **kwargs):
+ """
+ Take as input a dictionary-like object and return a DictionaryObject.
+ It also makes sure any keys containing dictionaries are also converted
+ to DictionaryObjects.
+ """
+ super(DictionaryObject, self).__init__()
+ if isinstance(contents, DictionaryObject):
+ self.__dict__.update(pickle.loads(pickle.dumps(contents.__dict__)))
+ return
+
+ self.__dict__['_items'] = dict(contents, **kwargs)
+
+ if len(args) > 1:
+ raise TypeError("too many arguments")
+
+ # If we have more than one argument passed in, use the second argument
+ # as a default value.
+ if args:
+ try:
+ default = type(self)(args[0])
+ except:
+ default = args[0]
+ self.__dict__['_defaultValue'] = default
+ else:
+ self.__dict__['_defaultValue'] = None
+ self.__dict__['_defaultIsSet'] = len(args) > 0
+
+ for k in self._items:
+ if isinstance(self._items[k], dict):
+ self._items[k] = type(self)(self._items[k])
+
+ def __setstate__(self, dict):
+ self.__dict__.update(dict)
+
+ def __getstate__(self):
+ return self.__dict__.copy()
+
+ def __getattr__(self, name):
+ """
+ This is the method that makes all the magic happen. Search for
+ 'name' in self._items and return the value if found. If a default
+ value has been set and 'name' is not found in self._items, return it.
+ Otherwise raise an AttributeError.
+
+ Example:
+ >>> d = DictionaryObject({'keys':[1,2], 'values':3, 'x':1})
+ >>> d.keys
+ <bound method DictionaryObject.keys of DictionaryObject({'keys': [1, 2], 'x': 1, 'values': 3})>
+ >>> d.values
+ <bound method DictionaryObject.values of DictionaryObject({'keys': [1, 2], 'x': 1, 'values': 3})>
+ >>> d.x
+ 1
+ >>> d['keys']
+ [1, 2]
+ >>> d['values']
+ 3
+ """
+ if name in self._items:
+ return self._items[name]
+ if self._defaultIsSet:
+ return self._defaultValue
+ raise AttributeError("'%s' object has no attribute '%s'" % (type(self).__name__, name))
+
+ def __setattr__(self, name, value):
+ """
+ This class is immutable-by-default. See MutableDictionaryObject.
+ """
+ raise AttributeError("'%s' object does not support assignment" % type(self).__name__)
+
+ def __getitem__(self, name):
+ return self._items[name]
+
+ def __contains__(self, name):
+ return name in self._items
+
+ def __len__(self):
+ return len(self._items)
+
+ def __iter__(self):
+ return iter(self._items)
+
+ def __repr__(self):
+ if self._defaultIsSet:
+ params = "%s, %s" % (repr(self._items), self._defaultValue)
+ else:
+ params = repr(self._items)
+ return "%s(%s)" % (type(self).__name__, params)
+
+ def __cmp__(self, rhs):
+ if self < rhs:
+ return -1
+ if self > rhs:
+ return 1
+ return 0
+
+ def __eq__(self, rhs):
+ val = cmp(self._items, rhs._items)
+ if 0 == val:
+ return 0 == cmp(self._defaultValue, rhs._defaultValue)
+ return 0 == val
+
+ def __ne__(self, rhs):
+ return not (self == rhs)
+
+ def __lt__(self, rhs):
+ val = cmp(self._items, rhs._items)
+ if 0 == val:
+ return -1 == cmp(self._defaultValue, rhs._defaultValue)
+ return -1 == val
+
+ def __le__(self, rhs):
+ return self < rhs or self == rhs
+
+ def __gt__(self, rhs):
+ return not (self <= rhs)
+
+ def __ge__(self, rhs):
+ return self > rhs or self == rhs
+
+ def keys(self):
+ return self._items.keys()
+
+ def values(self):
+ return self._items.values()
+
+ def asdict(self):
+ """
+ Copy the data back out of here and into a dict. Then return it.
+ Some libraries may check specifically for dict objects, such
+ as the json library; so, this makes it convenient to get the data
+ back out.
+
+ >>> import dictobj
+ >>> d = {'a':1, 'b':2}
+ >>> dictobj.DictionaryObject(d).asdict() == d
+ True
+ >>> d['c'] = {1:2, 3:4}
+ >>> dictobj.DictionaryObject(d).asdict() == d
+ True
+ """
+ items = {}
+ for name in self._items:
+ value = self._items[name]
+ if isinstance(value, DictionaryObject):
+ items[name] = value.asdict()
+ else:
+ items[name] = value
+ return items
+
+class MutableDictionaryObject(DictionaryObject):
+ """
+ Slight enhancement of the DictionaryObject allowing one to add
+ attributes easily, in cases where that functionality is wanted.
+
+ Examples:
+ >>> d = MutableDictionaryObject({'a':1, 'b':True}, None)
+ >>> print d.a, d.b, d.c, d.d
+ 1 True None None
+ >>> d.c = 3
+ >>> del d.a
+ >>> print d.a, d.b, d.c, d.d
+ None True 3 None
+ """
+ def __setattr__(self, name, value):
+ self._items[name] = value
+
+ def __delattr__(self, name):
+ del self._items[name]
+
+ __setitem__ = __setattr__
+ __delitem__ = __delattr__
+
diff -r 02852a8e49e23cd1090f798e99702057fa24bc1d -r cadad49537de2edd2128be108d0d631f35722ab5 lib/galaxy/util/jstree.py
--- /dev/null
+++ b/lib/galaxy/util/jstree.py
@@ -0,0 +1,173 @@
+import os
+import copy
+from galaxy.util import dictobj
+from collections import namedtuple
+
+Path = namedtuple('Path', ('path', 'id', 'options'))
+
+
+class Node(dictobj.DictionaryObject):
+ """
+ This class exists as a helper to the JSTree. Its "jsonData" method can
+ generate sub-tree JSON without putting the logic directly into the JSTree.
+
+ This data structure is only semi-immutable. The JSTree uses a directly
+ iterative (i.e. no stack is managed) builder pattern to construct a
+ tree out of paths. Therefore, the children are not known in advance, and
+ we have to keep the children attribute mutable.
+ """
+
+ def __init__(self, path, oid, **kwargs):
+ """
+ kwargs allows users to pass arbitrary information into a Node that
+ will later be output in jsonData(). It allows for more advanced
+ configuration than the default path handling that JSTree currently allows.
+ For example, users may want to pass "attr" or some other valid jsTree options.
+
+ Example:
+ >>> import jstree
+ >>> node = jstree.Node('a', None)
+ >>> print node
+ Node({'text': 'a', 'children': MutableDictionaryObject({})})
+ >>> print node.jsonData()
+ {'text': 'a'}
+
+ >>> import jstree
+ >>> node = jstree.Node('a', 1)
+ >>> print node
+ Node({'text': 'a', 'children': MutableDictionaryObject({}), 'li_attr': DictionaryObject({'id': 1}), 'id': 1})
+ >>> print node.jsonData()
+ {'text': 'a', 'id': 1, 'li_attr': {'id': 1}}
+
+ >>> import jstree
+ >>> node = jstree.Node('a', 5, icon="folder", state = {'opened': True})
+ >>> print node
+ Node({'text': 'a', 'id': 5, 'state': DictionaryObject({'opened': True}), 'children': MutableDictionaryObject({}), 'li_attr': DictionaryObject({'id': 5}), 'icon': 'folder'})
+ >>> print node.jsonData()
+ {'text': 'a', 'state': {'opened': True}, 'id': 5, 'li_attr': {'id': 5}, 'icon': 'folder'}
+ """
+ super(Node, self).__init__()
+
+ children = kwargs.get('children', {})
+ if len(filter(lambda key: not isinstance(children[key], Node), children)):
+ raise TypeError(
+ "One or more children were not instances of '%s'" % Node.__name__)
+ if 'children' in kwargs:
+ del kwargs['children']
+ self._items['children'] = dictobj.MutableDictionaryObject(children)
+
+ if oid is not None:
+ li_attr = kwargs.get('li_attr', {})
+ li_attr['id'] = oid
+ kwargs['li_attr'] = li_attr
+ self._items['id'] = oid
+
+ self._items.update(dictobj.DictionaryObject(**kwargs))
+ self._items['text'] = path
+
+ def jsonData(self):
+ children = [self.children[k].jsonData() for k in sorted(self.children)]
+ output = {}
+ for k in self._items:
+ if 'children' == k:
+ continue
+ if isinstance(self._items[k], dictobj.DictionaryObject):
+ output[k] = self._items[k].asdict()
+ else:
+ output[k] = self._items[k]
+ if len(children):
+ output['children'] = children
+ return output
+
+
+class JSTree(dictobj.DictionaryObject):
+ """
+ An immutable dictionary-like object that converts a list of "paths"
+ into a tree structure suitable for jQuery's jsTree.
+ """
+
+ def __init__(self, paths, **kwargs):
+ """
+ Take a list of paths and put them into a tree. Paths with the same prefix should
+ be at the same level in the tree.
+
+ kwargs may be standard jsTree options used at all levels in the tree. These will be outputted
+ in the JSON.
+
+ Example (basic usage):
+ >>> import jstree
+ >>> paths = [jstree.Path("editor/2012-07/31/.classpath", 1), jstree.Path("editor/2012-07/31/.project", 2)]
+ >>> t1 = jstree.JSTree(paths)
+ >>> print t1.jsonData()
+ [{'text': 'editor/2012-07/31/.classpath', 'id': 1, 'li_attr': {'id': 1}}, {'text': 'editor/2012-07/31/.project', 'id': 2, 'li_attr': {'id': 2}}]
+ """
+ if len(filter(lambda p: not isinstance(p, Path), paths)):
+ raise TypeError(
+ "All paths must be instances of '%s'" % Path.__name__)
+
+ super(JSTree, self).__init__()
+
+ root = Node('', None, **kwargs)
+ for path in sorted(paths):
+ curr = root
+ subpaths = path.path.split(os.path.sep)
+ for i, subpath in enumerate(subpaths):
+ if subpath not in curr.children:
+ opt = copy.deepcopy(kwargs)
+ if len(subpaths) - 1 == i:
+ oid = path.id
+ opt.update(path.options) if path.options is not None else None
+ else:
+ oid = None
+ curr.children[subpath] = Node(subpath, oid, **opt)
+ # oid = path.id if len(subpaths) - 1 == i else None
+ # curr.children[subpath] = Node(subpath, oid, **kwargs)
+ curr = curr.children[subpath]
+ self._items['_root'] = root
+
+ def pretty(self, root=None, depth=0, spacing=2):
+ """
+ Create a "pretty print" represenation of the tree with customized indentation at each
+ level of the tree.
+
+ Example:
+ >>> import jstree
+ >>> paths = [jstree.Path("editor/2012-07/31/.classpath", 1), jstree.Path("editor/2012-07/31/.project", 2)]
+ >>> print jstree.JSTree(paths).pretty()
+ /
+ editor/
+ 2012-07/
+ 31/
+ .classpath
+ .project
+ """
+ if root is None:
+ root = self._root
+ fmt = "%s%s/" if root.children else "%s%s"
+ s = fmt % (" " * depth * spacing, root.text)
+ for child in root.children:
+ child = root.children[child]
+ s += "\n%s" % self.pretty(child, depth + 1, spacing)
+ return s
+
+ def jsonData(self):
+ """
+ Returns a copy of the internal tree in a JSON-friendly format,
+ ready for consumption by jsTree. The data is represented as a
+ list of dictionaries, each of which are our internal nodes.
+
+ Examples:
+ >>> import jstree
+ >>> paths = [jstree.Path("editor/2012-07/31/.classpath", 1), jstree.Path("editor/2012-07/31/.project", 2)]
+ >>> t = jstree.JSTree(paths)
+ >>> d = t.jsonData()
+ >>> print d
+ [{'data': 'editor', 'children': [{'data': '2012-07', 'children': [{'data': '31', 'children': [{'data': '.classpath', 'metadata': {'id': 1}}, {'data': '.project', 'metadata': {'id': 2}}]}]}]}]
+ >>> print d[0]['children'][0]['children'][0]['children'][1]
+ {'data': '.project', 'metadata': {'id': 2}}
+ >>> print d[0]['children'][0]['children'][0]['children'][1]['data']
+ .project
+ >>> print d[0]['children'][0]['children'][0]['children'][1]['metadata']['id']
+ 2
+ """
+ return [self._root.children[k].jsonData() for k in sorted(self._root.children)]
diff -r 02852a8e49e23cd1090f798e99702057fa24bc1d -r cadad49537de2edd2128be108d0d631f35722ab5 lib/galaxy/webapps/galaxy/api/folder_contents.py
--- a/lib/galaxy/webapps/galaxy/api/folder_contents.py
+++ b/lib/galaxy/webapps/galaxy/api/folder_contents.py
@@ -4,6 +4,7 @@
from galaxy import web
from galaxy import util
from galaxy import exceptions
+from galaxy.managers import folders
from galaxy.web import _future_expose_api as expose_api
from galaxy.web import _future_expose_api_anonymous as expose_api_anonymous
from sqlalchemy.orm.exc import MultipleResultsFound
@@ -19,6 +20,10 @@
Class controls retrieval, creation and updating of folder contents.
"""
+ def __init__( self, app ):
+ super( FolderContentsController, self ).__init__( app )
+ self.folder_manager = folders.FolderManager()
+
@expose_api_anonymous
def index( self, trans, folder_id, **kwd ):
"""
@@ -46,32 +51,17 @@
"""
is_admin = trans.user_is_admin()
deleted = kwd.get( 'include_deleted', 'missing' )
+ current_user_roles = trans.get_current_user_roles()
try:
deleted = util.asbool( deleted )
except ValueError:
deleted = False
- if ( len( folder_id ) == 17 and folder_id.startswith( 'F' ) ):
- try:
- decoded_folder_id = trans.security.decode_id( folder_id[ 1: ] )
- except TypeError:
- raise exceptions.MalformedId( 'Malformed folder id ( %s ) specified, unable to decode.' % str( folder_id ) )
- else:
- raise exceptions.MalformedId( 'Malformed folder id ( %s ) specified, unable to decode.' % str( folder_id ) )
-
- try:
- folder = trans.sa_session.query( trans.app.model.LibraryFolder ).filter( trans.app.model.LibraryFolder.table.c.id == decoded_folder_id ).one()
- except MultipleResultsFound:
- raise exceptions.InconsistentDatabase( 'Multiple folders with same id found.' )
- except NoResultFound:
- raise exceptions.ObjectNotFound( 'Folder with the id provided ( %s ) was not found' % str( folder_id ) )
- except Exception:
- raise exceptions.InternalServerError( 'Error loading from the database.' )
-
- current_user_roles = trans.get_current_user_roles()
+ decoded_folder_id = self.folder_manager.cut_and_decode( trans, folder_id )
+ folder = self.folder_manager.get( trans, decoded_folder_id )
# Special level of security on top of libraries.
- if trans.app.security_agent.can_access_library( current_user_roles, folder.parent_library ):
+ if trans.app.security_agent.can_access_library( current_user_roles, folder.parent_library ) or is_admin:
pass
else:
if trans.user:
@@ -80,29 +70,6 @@
log.warning( "SECURITY: Anonymous user is trying to load restricted folder with ID of %s" % ( decoded_folder_id ) )
raise exceptions.ObjectNotFound( 'Folder with the id provided ( %s ) was not found' % str( folder_id ) )
- # if not ( trans.user_is_admin() or trans.app.security_agent.can_access_library_item( current_user_roles, folder, trans.user ) ):
- # log.debug('folder parent id: ' + str(folder.parent_id))
- # if folder.parent_id is None:
- # try:
- # library = trans.sa_session.query( trans.app.model.Library ).filter( trans.app.model.Library.table.c.root_folder_id == decoded_folder_id ).one()
- # except Exception:
- # raise exceptions.InternalServerError( 'Error loading from the database.' )
- # if trans.app.security_agent.library_is_unrestricted( library ):
- # pass
- # else:
- # if trans.user:
- # log.warning( "SECURITY: User (id: %s) without proper access rights is trying to load folder with ID of %s" % ( trans.user.id, decoded_folder_id ) )
- # else:
- # log.warning( "SECURITY: Anonymous user without proper access rights is trying to load folder with ID of %s" % ( decoded_folder_id ) )
- # raise exceptions.ObjectNotFound( 'Folder with the id provided ( %s ) was not found' % str( folder_id ) )
- # else:
- # if trans.user:
- # log.warning( "SECURITY: User (id: %s) without proper access rights is trying to load folder with ID of %s" % ( trans.user.id, decoded_folder_id ) )
- # else:
- # log.debug('PARENT ID IS NOT NONE')
- # log.warning( "SECURITY: Anonymous user without proper access rights is trying to load folder with ID of %s" % ( decoded_folder_id ) )
- # raise exceptions.ObjectNotFound( 'Folder with the id provided ( %s ) was not found' % str( folder_id ) )
-
folder_contents = []
update_time = ''
create_time = ''
@@ -161,9 +128,11 @@
# Check whether user can modify the current folder
can_modify_folder = is_admin or trans.app.security_agent.can_modify_library_item( current_user_roles, folder )
+
parent_library_id = None
if folder.parent_library is not None:
parent_library_id = trans.security.encode_id( folder.parent_library.id )
+
metadata = dict( full_path=full_path,
can_add_library_item=can_add_library_item,
can_modify_folder=can_modify_folder,
diff -r 02852a8e49e23cd1090f798e99702057fa24bc1d -r cadad49537de2edd2128be108d0d631f35722ab5 lib/galaxy/webapps/galaxy/api/ftp_files.py
--- a/lib/galaxy/webapps/galaxy/api/ftp_files.py
+++ b/lib/galaxy/webapps/galaxy/api/ftp_files.py
@@ -1,60 +1,127 @@
"""
-API operations on ftp files.
+API operations on remote files.
"""
-import logging
-from galaxy.web.base.controller import BaseAPIController, url_for
-from galaxy import web
-import os.path
import os
import time
+import hashlib
+from galaxy import web
+from galaxy import exceptions
+from galaxy.web import _future_expose_api as expose_api
+from galaxy.util import jstree
+from galaxy.web.base.controller import BaseAPIController, url_for
from operator import itemgetter
+import logging
log = logging.getLogger( __name__ )
class FTPFilesAPIController( BaseAPIController ):
- @web.expose_api
+
+ @expose_api
def index( self, trans, **kwd ):
"""
GET /api/ftp_files/
- Displays local files.
+
+ Displays remote files.
+
+ :param target: target to load available datasets from, defaults to ftp
+ possible values: ftp, userdir
+ :type target: str
+
+ :param format: requested format of data, defaults to flat
+ possible values: flat, jstree, ajax
+
+ :returns: list of available files
+ :rtype: list
"""
-
- # look for ftp files
- try:
- # initialize response
- response = []
-
- # identify ftp directory
+ target = kwd.get( 'target', None )
+ format = kwd.get( 'format', None )
+
+ if target == 'userdir':
+ user_login = trans.user.email
+ user_base_dir = trans.app.config.user_library_import_dir
+ if user_base_dir is None:
+ raise exceptions.ConfigDoesNotAllowException( 'The configuration of this Galaxy instance does not allow upload from user directories.' )
+ full_import_dir = os.path.join( user_base_dir, user_login )
+ if full_import_dir is not None:
+ if format == 'jstree':
+ disable = kwd.get( 'disable', 'folders')
+ try:
+ userdir_jstree = self.__create_jstree( full_import_dir, disable )
+ response = userdir_jstree.jsonData()
+ except Exception, exception:
+ log.debug(str(exception))
+ raise exceptions.InternalServerError( 'Could not create tree representation of the given folder: ' + str( full_import_dir ) )
+ elif format == 'ajax':
+ raise exceptions.NotImplemented( 'Not implemented yet. Sorry.' )
+ else:
+ try:
+ response = self.__load_all_filenames( full_import_dir )
+ except Exception, exception:
+ log.error( 'Could not get user import files: %s', str( exception ), exc_info=True )
+ raise exceptions.InternalServerError( 'Could not get the files from your user directory folder.' )
+ else:
+ raise exceptions.InternalServerError( 'Could not get the files from your user directory folder.' )
+ else:
user_ftp_base_dir = trans.app.config.ftp_upload_dir
if user_ftp_base_dir is None:
- return []
-
- # identify user sub directory
- user_ftp_dir = None
- if user_ftp_base_dir is not None and trans is not None and trans.user is not None:
+ raise exceptions.ConfigDoesNotAllowException( 'The configuration of this Galaxy instance does not allow upload from FTP directories.' )
+ try:
+ user_ftp_dir = None
identifier = trans.app.config.ftp_upload_dir_identifier
user_ftp_dir = os.path.join( user_ftp_base_dir, getattr(trans.user, identifier) )
- if user_ftp_dir is None:
- return []
+ if user_ftp_dir is not None:
+ response = self.__load_all_filenames( user_ftp_dir )
+ else:
+ raise exceptions.ConfigDoesNotAllowException( 'You do not have an FTP directory named as your login at this Galaxy instance.' )
+ except Exception, exception:
+ log.error( 'Could not get ftp files: %s', str( exception ), exc_info=True )
+ raise exceptions.InternalServerError( 'Could not get the files from your FTP folder.' )
+ return response
- # read directory
- if os.path.exists( user_ftp_dir ):
- for ( dirpath, dirnames, filenames ) in os.walk( user_ftp_dir ):
- for filename in filenames:
- path = os.path.relpath( os.path.join( dirpath, filename ), user_ftp_dir )
- statinfo = os.lstat( os.path.join( dirpath, filename ) )
- response.append( dict( path = path,
- size = statinfo.st_size,
- ctime = time.strftime( "%m/%d/%Y %I:%M:%S %p", time.localtime( statinfo.st_ctime ) ) ) )
-
- # sort by path
- response = sorted(response, key=itemgetter("path"))
+ def __load_all_filenames( self, directory ):
+ """
+ Loads recursively all files within the given folder and its
+ subfolders and returns a flat list.
+ """
+ response = []
+ if os.path.exists( directory ):
+ for ( dirpath, dirnames, filenames ) in os.walk( directory ):
+ for filename in filenames:
+ path = os.path.relpath( os.path.join( dirpath, filename ), directory )
+ statinfo = os.lstat( os.path.join( dirpath, filename ) )
+ response.append( dict( path = path,
+ size = statinfo.st_size,
+ ctime = time.strftime( "%m/%d/%Y %I:%M:%S %p", time.localtime( statinfo.st_ctime ) ) ) )
+ else:
+ raise exceptions.ConfigDoesNotAllowException( 'The given directory does not exist.' )
+ # sort by path
+ response = sorted(response, key=itemgetter("path"))
+ return response
- # return
- return response
-
- except Exception, exception:
- log.error( 'could not get ftp files: %s', str( exception ), exc_info=True )
- trans.response.status = 500
- return { 'error': str( exception ) }
+ def __create_jstree( self, directory, disable='folders' ):
+ """
+ Loads recursively all files and folders within the given folder
+ and its subfolders and returns jstree representation
+ of its structure.
+ """
+ userdir_jstree = None
+ jstree_paths = []
+ if os.path.exists( directory ):
+ for ( dirpath, dirnames, filenames ) in os.walk( directory ):
+ for dirname in dirnames:
+ dir_path = os.path.relpath( os.path.join( dirpath, dirname ), directory )
+ dir_path_hash = hashlib.sha1( dir_path ).hexdigest()
+ disabled = True if disable == 'folders' else False
+ jstree_paths.append( jstree.Path( dir_path, dir_path_hash, { 'type': 'folder', 'state': { 'disabled': disabled }, 'li_attr': { 'full_path': dir_path } } ) )
+
+ for filename in filenames:
+ file_path = os.path.relpath( os.path.join( dirpath, filename ), directory )
+ file_path_hash = hashlib.sha1( file_path ).hexdigest()
+ disabled = True if disable == 'files' else False
+ jstree_paths.append( jstree.Path( file_path, file_path_hash, { 'type': 'file', 'state': { 'disabled': disabled }, 'li_attr': { 'full_path': file_path } } ) )
+ else:
+ raise exceptions.ConfigDoesNotAllowException( 'The given directory does not exist.' )
+
+ userdir_jstree = jstree.JSTree( jstree_paths )
+ return userdir_jstree
diff -r 02852a8e49e23cd1090f798e99702057fa24bc1d -r cadad49537de2edd2128be108d0d631f35722ab5 lib/galaxy/webapps/galaxy/api/lda_datasets.py
--- a/lib/galaxy/webapps/galaxy/api/lda_datasets.py
+++ b/lib/galaxy/webapps/galaxy/api/lda_datasets.py
@@ -1,5 +1,5 @@
"""
-API operations on the datasets from library.
+API operations on the library datasets.
"""
import glob
import operator
@@ -15,6 +15,7 @@
from galaxy import web
from galaxy import util
from galaxy import exceptions
+from galaxy.managers import folders, roles
from galaxy.exceptions import ObjectNotFound
from paste.httpexceptions import HTTPBadRequest, HTTPInternalServerError
from galaxy.web import _future_expose_api as expose_api
@@ -24,6 +25,9 @@
from galaxy.web.base.controller import BaseAPIController, UsesVisualizationMixin
from sqlalchemy.orm.exc import MultipleResultsFound
from sqlalchemy.orm.exc import NoResultFound
+from galaxy.tools.actions import upload_common
+from galaxy.util.json import to_json_string, from_json_string
+
import logging
log = logging.getLogger( __name__ )
@@ -31,6 +35,11 @@
class LibraryDatasetsController( BaseAPIController, UsesVisualizationMixin ):
+ def __init__( self, app ):
+ super( LibraryDatasetsController, self ).__init__( app )
+ self.folder_manager = folders.FolderManager()
+ self.role_manager = roles.RoleManager()
+
@expose_api_anonymous
def show( self, trans, id, **kwd ):
"""
@@ -41,8 +50,8 @@
:param id: the encoded id of the dataset to query
:type id: an encoded id string
+ :returns: detailed dataset information from base controller
:rtype: dictionary
- :returns: detailed dataset information from base controller
.. seealso:: :attr:`galaxy.web.base.controller.UsesLibraryMixinItems.get_library_dataset`
"""
@@ -144,7 +153,6 @@
raise exceptions.InsufficientPermissionsException( 'You do not have proper permission to access permissions.' )
scope = kwd.get( 'scope', None )
-
if scope == 'current' or scope is None:
return self._get_current_roles( trans, library_dataset )
@@ -394,6 +402,104 @@
rval[ 'folder_id' ] = 'F' + rval[ 'folder_id' ]
return rval
+ @expose_api
+ def load( self, trans, **kwd ):
+ """
+ Load dataset from the given source into the library.
+
+ :param encoded_folder_id: the encoded id of the folder to import dataset to
+ :type encoded_folder_id: an encoded id string
+ :param source: source of the dataset to be loaded
+ :type source: str
+ :param link_data: flag whether to link the dataset to data or copy it to Galaxy
+ :type link_data: bool
+ :param preserve_dirs: flag whether to preserver directory structure when importing dir
+ :type preserve_dirs: bool
+ """
+
+ kwd[ 'space_to_tab' ] = 'False'
+ kwd[ 'to_posix_lines' ] = 'True'
+ kwd[ 'dbkey' ] = '?'
+ kwd[ 'file_type' ] = 'auto'
+
+ kwd[' link_data_only' ] = 'link_to_files' if util.string_as_bool( kwd.get( 'link_data', False ) ) else 'copy_files'
+ encoded_folder_id = kwd.get( 'encoded_folder_id', None )
+ if encoded_folder_id is not None:
+ folder_id = self.folder_manager.cut_and_decode( trans, encoded_folder_id )
+ else:
+ raise exceptions.RequestParameterMissingException( 'The required atribute encoded_folder_id is missing.' )
+ path = kwd.get( 'path', None)
+ if path is None:
+ raise exceptions.RequestParameterMissingException( 'The required atribute path is missing.' )
+ folder = self.folder_manager.get( trans, folder_id )
+ link_data = util.string_as_bool( kwd.get( 'link_data', False ) )
+
+ source = kwd.get( 'source', None )
+ if source not in [ 'userdir_file', 'userdir_folder' ]:
+ raise exceptions.RequestParameterMissingException( 'You have to specify "source" parameter. Possible values are "userdir_file" and "userdir_folder". ')
+
+ user_login = trans.user.email
+ user_base_dir = trans.app.config.user_library_import_dir
+ if user_base_dir is None:
+ raise exceptions.ConfigDoesNotAllowException( 'The configuration of this Galaxy instance does not allow upload from user directories.' )
+ full_dir = os.path.join( user_base_dir, user_login )
+ # path_to_root_import_folder = None
+ if not path.lower().startswith( full_dir.lower() ):
+ # path_to_root_import_folder = path
+ path = os.path.join( full_dir, path )
+ if not os.path.exists( path ):
+ raise exceptions.RequestParameterInvalidException( 'Given path does not exist on the host.' )
+ if not self.folder_manager.can_add_item( trans, folder ):
+ raise exceptions.InsufficientPermissionsException( 'You do not have proper permission to add items to the given folder.' )
+
+ # Set up the traditional tool state/params
+ tool_id = 'upload1'
+ tool = trans.app.toolbox.get_tool( tool_id )
+ state = tool.new_state( trans )
+ errors = tool.update_state( trans, tool.inputs_by_page[ 0 ], state.inputs, kwd )
+ tool_params = state.inputs
+ dataset_upload_inputs = []
+ for input_name, input in tool.inputs.iteritems():
+ if input.type == "upload_dataset":
+ dataset_upload_inputs.append( input )
+ library_bunch = upload_common.handle_library_params( trans, {}, trans.security.encode_id( folder.id ) )
+ abspath_datasets = []
+ kwd[ 'filesystem_paths' ] = path
+ params = util.Params( kwd )
+ # file only
+ if source == "userdir_file":
+ file = os.path.abspath( path )
+ abspath_datasets.append( trans.webapp.controllers[ 'library_common' ].make_library_uploaded_dataset(
+ trans, 'api', params, os.path.basename( file ), file, 'server_dir', library_bunch ) )
+ # whole folder
+ if source == "userdir_folder":
+ # import_folder_root = [next(part for part in path.split(os.path.sep) if part) for path in [os.path.splitdrive(path_to_root_import_folder)[1]]]
+ # new_folder = self.folder_manager.create( trans, folder_id, import_folder_root[0] )
+
+ uploaded_datasets_bunch = trans.webapp.controllers[ 'library_common' ].get_path_paste_uploaded_datasets(
+ trans, 'api', params, library_bunch, 200, '' )
+
+ uploaded_datasets = uploaded_datasets_bunch[0]
+ if uploaded_datasets is None:
+ # TODO no files found - only create folders
+ return False
+
+ for ud in uploaded_datasets:
+ ud.path = os.path.abspath( ud.path )
+ abspath_datasets.append( ud )
+
+ json_file_path = upload_common.create_paramfile( trans, abspath_datasets )
+ data_list = [ ud.data for ud in abspath_datasets ]
+ job, output = upload_common.create_job( trans, tool_params, tool, json_file_path, data_list, folder=folder )
+ # HACK: Prevent outputs_to_working_directory from overwriting inputs when "linking"
+ job.add_parameter( 'link_data_only', to_json_string( kwd.get( 'link_data_only', 'copy_files' ) ) )
+ job.add_parameter( 'uuid', to_json_string( kwd.get( 'uuid', None ) ) )
+ trans.sa_session.add( job )
+ trans.sa_session.flush()
+ job_dict = job.to_dict()
+ job_dict[ 'id' ] = trans.security.encode_id( job_dict[ 'id' ] )
+ return job_dict
+
@web.expose
def download( self, trans, format, **kwd ):
"""
diff -r 02852a8e49e23cd1090f798e99702057fa24bc1d -r cadad49537de2edd2128be108d0d631f35722ab5 lib/galaxy/webapps/galaxy/buildapp.py
--- a/lib/galaxy/webapps/galaxy/buildapp.py
+++ b/lib/galaxy/webapps/galaxy/buildapp.py
@@ -258,6 +258,12 @@
action='show',
conditions=dict( method=[ "GET" ] ) )
+ webapp.mapper.connect( 'load_ld',
+ '/api/libraries/datasets/',
+ controller='lda_datasets',
+ action='load',
+ conditions=dict( method=[ "POST" ] ) )
+
webapp.mapper.connect( 'show_version_of_ld_item',
'/api/libraries/datasets/:encoded_dataset_id/versions/:encoded_ldda_id',
controller='lda_datasets',
diff -r 02852a8e49e23cd1090f798e99702057fa24bc1d -r cadad49537de2edd2128be108d0d631f35722ab5 static/images/jstree/32px.png
Binary file static/images/jstree/32px.png has changed
diff -r 02852a8e49e23cd1090f798e99702057fa24bc1d -r cadad49537de2edd2128be108d0d631f35722ab5 static/images/jstree/40px.png
Binary file static/images/jstree/40px.png has changed
diff -r 02852a8e49e23cd1090f798e99702057fa24bc1d -r cadad49537de2edd2128be108d0d631f35722ab5 static/images/jstree/throbber.gif
Binary file static/images/jstree/throbber.gif has changed
diff -r 02852a8e49e23cd1090f798e99702057fa24bc1d -r cadad49537de2edd2128be108d0d631f35722ab5 static/scripts/galaxy.library.js
--- a/static/scripts/galaxy.library.js
+++ b/static/scripts/galaxy.library.js
@@ -47,7 +47,8 @@
"folders/:folder_id/datasets/:dataset_id" : "dataset_detail",
"folders/:folder_id/datasets/:dataset_id/permissions" : "dataset_permissions",
"folders/:folder_id/datasets/:dataset_id/versions/:ldda_id" : "dataset_version",
- "folders/:folder_id/download/:format" : "download"
+ "folders/:folder_id/download/:format" : "download",
+ "folders/:folder_id/import/:source" : "import_datasets"
},
back: function() {
@@ -147,6 +148,15 @@
}
Galaxy.libraries.folderView = new mod_library_folder_view.FolderView({id: folder_id, show_permissions: true});
});
+ this.library_router.on('route:import_datasets', function(folder_id, source){
+ if (Galaxy.libraries.folderToolbarView && Galaxy.libraries.folderListView){
+ Galaxy.libraries.folderToolbarView.showImportModal({source:source});
+ } else {
+ Galaxy.libraries.folderToolbarView = new mod_foldertoolbar_view.FolderToolbarView({id: folder_id});
+ Galaxy.libraries.folderListView = new mod_folderlist_view.FolderListView({id: folder_id});
+ Galaxy.libraries.folderToolbarView.showImportModal({source: source});
+ }
+ });
Backbone.history.start({pushState: false});
}
This diff is so big that we needed to truncate the remainder.
https://bitbucket.org/galaxy/galaxy-central/commits/ecf83c3a2d03/
Changeset: ecf83c3a2d03
User: martenson
Date: 2014-09-08 18:45:37+00:00
Summary: adding compressed version of jstree jquery plugin
Affected #: 1 file
diff -r cadad49537de2edd2128be108d0d631f35722ab5 -r ecf83c3a2d0383c74e30dca41b602854326c7ee7 static/scripts/packed/libs/jquery/jstree.js
--- /dev/null
+++ b/static/scripts/packed/libs/jquery/jstree.js
@@ -0,0 +1,60 @@
+(function(a){if(typeof define==="function"&&define.amd){}else{if(typeof exports==="object"){a(require("jquery"))}else{a(jQuery)}}}(function(i,e){
+/*
+ * jsTree 3.0.3
+ * http://jstree.com/
+ *
+ * Copyright (c) 2014 Ivan Bozhanov (http://vakata.com)
+ *
+ * Licensed same as jquery - under the terms of the MIT License
+ * http://www.opensource.org/licenses/mit-license.php
+ */
+/*
+ * if using jslint please allow for the jQuery global and use following options:
+ * jslint: browser: true, ass: true, bitwise: true, continue: true, nomen: true, plusplus: true, regexp: true, unparam: true, todo: true, white: true
+ */
+if(i.jstree){return}var c=0,d=false,k=false,j=false,m=[],a=i("script:last").attr("src"),l=document,o=l.createElement("LI"),g,f;o.setAttribute("role","treeitem");g=l.createElement("I");g.className="jstree-icon jstree-ocl";o.appendChild(g);g=l.createElement("A");g.className="jstree-anchor";g.setAttribute("href","#");f=l.createElement("I");f.className="jstree-icon jstree-themeicon";g.appendChild(f);o.appendChild(g);g=f=null;i.jstree={version:"3.0.3",defaults:{plugins:[]},plugins:{},path:a&&a.indexOf("/")!==-1?a.replace(/\/[^\/]+$/,""):"",idregex:/[\\:&!^|()\[\]<>@*'+~#";.,=\- \/${}%]/g};i.jstree.create=function(s,p){var r=new i.jstree.core(++c),q=p;p=i.extend(true,{},i.jstree.defaults,p);if(q&&q.plugins){p.plugins=q.plugins}i.each(p.plugins,function(u,t){if(u!=="core"){r=r.plugin(t,p[t])}});r.init(s,p);return r};i.jstree.core=function(p){this._id=p;this._cnt=0;this._wrk=null;this._data={core:{themes:{name:false,dots:false,icons:false},selected:[],last_error:{},working:false,worker_queue:[]}}};i.jstree.reference=function(r){var p=null,q=null;if(r&&r.id){r=r.id}if(!q||!q.length){try{q=i(r)}catch(s){}}if(!q||!q.length){try{q=i("#"+r.replace(i.jstree.idregex,"\\$&"))}catch(s){}}if(q&&q.length&&(q=q.closest(".jstree")).length&&(q=q.data("jstree"))){p=q}else{i(".jstree").each(function(){var t=i(this).data("jstree");if(t&&t._model.data[r]){p=t;return false}})}return p};i.fn.jstree=function(q){var s=(typeof q==="string"),r=Array.prototype.slice.call(arguments,1),p=null;this.each(function(){var t=i.jstree.reference(this),u=s&&t?t[q]:null;p=s&&u?u.apply(t,r):null;if(!t&&!s&&(q===e||i.isPlainObject(q))){i(this).data("jstree",new i.jstree.create(this,q))}if((t&&!s)||q===true){p=t||false}if(p!==null&&p!==e){return false}});return p!==null&&p!==e?p:this};i.expr[":"].jstree=i.expr.createPseudo(function(p){return function(q){return i(q).hasClass("jstree")&&i(q).data("jstree")!==e}});i.jstree.defaults.core={data:false,strings:false,check_callback:false,error:i.noop,animation:200,multiple:true,themes:{name:false,url:false,dir:false,dots:true,icons:true,stripes:false,variant:false,responsive:false},expand_selected_onload:true,worker:true,force_text:false};i.jstree.core.prototype={plugin:function(r,q){var p=i.jstree.plugins[r];if(p){this._data[r]={};p.prototype=this;return new p(q,this)}return this},init:function(q,p){this._model={data:{"#":{id:"#",parent:null,parents:[],children:[],children_d:[],state:{loaded:false}}},changed:[],force_full_redraw:false,redraw_timeout:false,default_state:{loaded:true,opened:false,selected:false,disabled:false}};this.element=i(q).addClass("jstree jstree-"+this._id);this.settings=p;this.element.bind("destroyed",i.proxy(this.teardown,this));this._data.core.ready=false;this._data.core.loaded=false;this._data.core.rtl=(this.element.css("direction")==="rtl");this.element[this._data.core.rtl?"addClass":"removeClass"]("jstree-rtl");this.element.attr("role","tree");this.bind();this.trigger("init");this._data.core.original_container_html=this.element.find(" > ul > li").clone(true);this._data.core.original_container_html.find("li").addBack().contents().filter(function(){return this.nodeType===3&&(!this.nodeValue||/^\s+$/.test(this.nodeValue))}).remove();this.element.html("<ul class='jstree-container-ul jstree-children'><li class='jstree-initial-node jstree-loading jstree-leaf jstree-last'><i class='jstree-icon jstree-ocl'></i><a class='jstree-anchor' href='#'><i class='jstree-icon jstree-themeicon-hidden'></i>"+this.get_string("Loading ...")+"</a></li></ul>");this._data.core.li_height=this.get_container_ul().children("li:eq(0)").height()||24;this.trigger("loading");this.load_node("#")},destroy:function(p){if(!p){this.element.empty()}this.element.unbind("destroyed",this.teardown);this.teardown()},teardown:function(){this.unbind();this.element.removeClass("jstree").removeData("jstree").find("[class^='jstree']").addBack().attr("class",function(){return this.className.replace(/jstree[^ ]*|$/ig,"")});this.element=null},bind:function(){this.element.on("dblclick.jstree",function(){if(document.selection&&document.selection.empty){document.selection.empty()}else{if(window.getSelection){var p=window.getSelection();try{p.removeAllRanges();p.collapse()}catch(q){}}}}).on("click.jstree",".jstree-ocl",i.proxy(function(p){this.toggle_node(p.target)},this)).on("click.jstree",".jstree-anchor",i.proxy(function(p){p.preventDefault();i(p.currentTarget).focus();this.activate_node(p.currentTarget,p)},this)).on("keydown.jstree",".jstree-anchor",i.proxy(function(p){if(p.target.tagName==="INPUT"){return true}var q=null;switch(p.which){case 13:case 32:p.type="click";i(p.currentTarget).trigger(p);break;case 37:p.preventDefault();if(this.is_open(p.currentTarget)){this.close_node(p.currentTarget)}else{q=this.get_prev_dom(p.currentTarget);if(q&&q.length){q.children(".jstree-anchor").focus()}}break;case 38:p.preventDefault();q=this.get_prev_dom(p.currentTarget);if(q&&q.length){q.children(".jstree-anchor").focus()}break;case 39:p.preventDefault();if(this.is_closed(p.currentTarget)){this.open_node(p.currentTarget,function(r){this.get_node(r,true).children(".jstree-anchor").focus()})}else{q=this.get_next_dom(p.currentTarget);if(q&&q.length){q.children(".jstree-anchor").focus()}}break;case 40:p.preventDefault();q=this.get_next_dom(p.currentTarget);if(q&&q.length){q.children(".jstree-anchor").focus()}break;case 46:p.preventDefault();q=this.get_node(p.currentTarget);if(q&&q.id&&q.id!=="#"){q=this.is_selected(q)?this.get_selected():q}break;case 113:p.preventDefault();q=this.get_node(p.currentTarget);
+/*
+ if(o && o.id && o.id !== '#') {
+ // this.edit(o);
+ }
+ */
+break;default:break}},this)).on("load_node.jstree",i.proxy(function(t,s){if(s.status){if(s.node.id==="#"&&!this._data.core.loaded){this._data.core.loaded=true;this.trigger("loaded")}if(!this._data.core.ready&&!this.get_container_ul().find(".jstree-loading:eq(0)").length){this._data.core.ready=true;if(this._data.core.selected.length){if(this.settings.core.expand_selected_onload){var r=[],q,p;for(q=0,p=this._data.core.selected.length;q<p;q++){r=r.concat(this._model.data[this._data.core.selected[q]].parents)}r=i.vakata.array_unique(r);for(q=0,p=r.length;q<p;q++){this.open_node(r[q],false,0)}}this.trigger("changed",{action:"ready",selected:this._data.core.selected})}setTimeout(i.proxy(function(){this.trigger("ready")},this),0)}}},this)).on("init.jstree",i.proxy(function(){var p=this.settings.core.themes;this._data.core.themes.dots=p.dots;this._data.core.themes.stripes=p.stripes;this._data.core.themes.icons=p.icons;this.set_theme(p.name||"default",p.url);this.set_theme_variant(p.variant)},this)).on("loading.jstree",i.proxy(function(){this[this._data.core.themes.dots?"show_dots":"hide_dots"]();this[this._data.core.themes.icons?"show_icons":"hide_icons"]();this[this._data.core.themes.stripes?"show_stripes":"hide_stripes"]()},this)).on("blur.jstree",".jstree-anchor",i.proxy(function(p){i(p.currentTarget).filter(".jstree-hovered").mouseleave()},this)).on("focus.jstree",".jstree-anchor",i.proxy(function(p){this.element.find(".jstree-hovered").not(p.currentTarget).mouseleave();i(p.currentTarget).mouseenter()},this)).on("mouseenter.jstree",".jstree-anchor",i.proxy(function(p){this.hover_node(p.currentTarget)},this)).on("mouseleave.jstree",".jstree-anchor",i.proxy(function(p){this.dehover_node(p.currentTarget)},this))},unbind:function(){this.element.off(".jstree");i(document).off(".jstree-"+this._id)},trigger:function(p,q){if(!q){q={}}q.instance=this;this.element.triggerHandler(p.replace(".jstree","")+".jstree",q)},get_container:function(){return this.element},get_container_ul:function(){return this.element.children(".jstree-children:eq(0)")},get_string:function(q){var p=this.settings.core.strings;if(i.isFunction(p)){return p.call(this,q)}if(p&&p[q]){return p[q]}return q},_firstChild:function(p){p=p?p.firstChild:null;while(p!==null&&p.nodeType!==1){p=p.nextSibling}return p},_nextSibling:function(p){p=p?p.nextSibling:null;while(p!==null&&p.nodeType!==1){p=p.nextSibling}return p},_previousSibling:function(p){p=p?p.previousSibling:null;while(p!==null&&p.nodeType!==1){p=p.previousSibling}return p},get_node:function(r,p){if(r&&r.id){r=r.id}var s;try{if(this._model.data[r]){r=this._model.data[r]}else{if(((s=i(r,this.element)).length||(s=i("#"+r.replace(i.jstree.idregex,"\\$&"),this.element)).length)&&this._model.data[s.closest(".jstree-node").attr("id")]){r=this._model.data[s.closest(".jstree-node").attr("id")]}else{if((s=i(r,this.element)).length&&s.hasClass("jstree")){r=this._model.data["#"]}else{return false}}}if(p){r=r.id==="#"?this.element:i("#"+r.id.replace(i.jstree.idregex,"\\$&"),this.element)}return r}catch(q){return false}},get_path:function(v,t,s){v=v.parents?v:this.get_node(v);if(!v||v.id==="#"||!v.parents){return false}var r,q,u=[];u.push(s?v.id:v.text);for(r=0,q=v.parents.length;r<q;r++){u.push(s?v.parents[r]:this.get_text(v.parents[r]))}u=u.reverse().slice(1);return t?u.join(t):u},get_next_dom:function(r,p){var q;r=this.get_node(r,true);if(r[0]===this.element[0]){q=this._firstChild(this.get_container_ul()[0]);return q?i(q):false}if(!r||!r.length){return false}if(p){q=this._nextSibling(r[0]);return q?i(q):false}if(r.hasClass("jstree-open")){q=this._firstChild(r.children(".jstree-children")[0]);return q?i(q):false}if((q=this._nextSibling(r[0]))!==null){return i(q)}return r.parentsUntil(".jstree",".jstree-node").next(".jstree-node").eq(0)},get_prev_dom:function(r,p){var q;r=this.get_node(r,true);if(r[0]===this.element[0]){q=this.get_container_ul()[0].lastChild;return q?i(q):false}if(!r||!r.length){return false}if(p){q=this._previousSibling(r[0]);return q?i(q):false}if((q=this._previousSibling(r[0]))!==null){r=i(q);while(r.hasClass("jstree-open")){r=r.children(".jstree-children:eq(0)").children(".jstree-node:last")}return r}q=r[0].parentNode.parentNode;return q&&q.className&&q.className.indexOf("jstree-node")!==-1?i(q):false},get_parent:function(p){p=this.get_node(p);if(!p||p.id==="#"){return false}return p.parent},get_children_dom:function(p){p=this.get_node(p,true);if(p[0]===this.element[0]){return this.get_container_ul().children(".jstree-node")}if(!p||!p.length){return false}return p.children(".jstree-children").children(".jstree-node")},is_parent:function(p){p=this.get_node(p);return p&&(p.state.loaded===false||p.children.length>0)},is_loaded:function(p){p=this.get_node(p);return p&&p.state.loaded},is_loading:function(p){p=this.get_node(p);return p&&p.state&&p.state.loading},is_open:function(p){p=this.get_node(p);return p&&p.state.opened},is_closed:function(p){p=this.get_node(p);return p&&this.is_parent(p)&&!p.state.opened},is_leaf:function(p){return !this.is_parent(p)},load_node:function(t,v){var q,p,s,r,u;if(i.isArray(t)){this._load_nodes(t.slice(),v);return true}t=this.get_node(t);if(!t){if(v){v.call(this,t,false)}return false}if(t.state.loaded){t.state.loaded=false;for(q=0,p=t.children_d.length;q<p;q++){for(s=0,r=t.parents.length;s<r;s++){this._model.data[t.parents[s]].children_d=i.vakata.array_remove_item(this._model.data[t.parents[s]].children_d,t.children_d[q])}if(this._model.data[t.children_d[q]].state.selected){u=true;this._data.core.selected=i.vakata.array_remove_item(this._data.core.selected,t.children_d[q])}delete this._model.data[t.children_d[q]]}t.children=[];t.children_d=[];if(u){this.trigger("changed",{action:"load_node",node:t,selected:this._data.core.selected})}}t.state.loading=true;this.get_node(t,true).addClass("jstree-loading");this._load_node(t,i.proxy(function(w){t=this._model.data[t.id];t.state.loading=false;t.state.loaded=w;var x=this.get_node(t,true);if(t.state.loaded&&!t.children.length&&x&&x.length&&!x.hasClass("jstree-leaf")){x.removeClass("jstree-closed jstree-open").addClass("jstree-leaf")}x.removeClass("jstree-loading");this.trigger("load_node",{node:t,status:w});if(v){v.call(this,t,w)}},this));return true},_load_nodes:function(q,x,u){var v=true,w=function(){this._load_nodes(q,x,true)},p=this._model.data,t,s;for(t=0,s=q.length;t<s;t++){if(p[q[t]]&&(!p[q[t]].state.loaded||!u)){if(!this.is_loading(q[t])){this.load_node(q[t],w)}v=false}}if(v){if(x&&!x.done){x.call(this,q);x.done=true}}},_load_node:function(r,u){var q=this.settings.core.data,p;if(!q){if(r.id==="#"){return this._append_html_data(r,this._data.core.original_container_html.clone(true),function(s){u.call(this,s)})}else{return u.call(this,false)}}if(i.isFunction(q)){return q.call(this,r,i.proxy(function(s){if(s===false){u.call(this,false)}this[typeof s==="string"?"_append_html_data":"_append_json_data"](r,typeof s==="string"?i(s):s,function(t){u.call(this,t)})},this))}if(typeof q==="object"){if(q.url){q=i.extend(true,{},q);if(i.isFunction(q.url)){q.url=q.url.call(this,r)}if(i.isFunction(q.data)){q.data=q.data.call(this,r)}return i.ajax(q).done(i.proxy(function(y,v,s){var w=s.getResponseHeader("Content-Type");if(w.indexOf("json")!==-1||typeof y==="object"){return this._append_json_data(r,y,function(t){u.call(this,t)})}if(w.indexOf("html")!==-1||typeof y==="string"){return this._append_html_data(r,i(y),function(t){u.call(this,t)})}this._data.core.last_error={error:"ajax",plugin:"core",id:"core_04",reason:"Could not load node",data:JSON.stringify({id:r.id,xhr:s})};this.settings.core.error.call(this,this._data.core.last_error);return u.call(this,false)},this)).fail(i.proxy(function(s){u.call(this,false);this._data.core.last_error={error:"ajax",plugin:"core",id:"core_04",reason:"Could not load node",data:JSON.stringify({id:r.id,xhr:s})};this.settings.core.error.call(this,this._data.core.last_error)},this))}p=(i.isArray(q)||i.isPlainObject(q))?JSON.parse(JSON.stringify(q)):q;if(r.id==="#"){return this._append_json_data(r,p,function(s){u.call(this,s)})}else{this._data.core.last_error={error:"nodata",plugin:"core",id:"core_05",reason:"Could not load node",data:JSON.stringify({id:r.id})};this.settings.core.error.call(this,this._data.core.last_error);return u.call(this,false)}}if(typeof q==="string"){if(r.id==="#"){return this._append_html_data(r,i(q),function(s){u.call(this,s)})}else{this._data.core.last_error={error:"nodata",plugin:"core",id:"core_06",reason:"Could not load node",data:JSON.stringify({id:r.id})};this.settings.core.error.call(this,this._data.core.last_error);return u.call(this,false)}}return u.call(this,false)},_node_changed:function(p){p=this.get_node(p);if(p){this._model.changed.push(p.id)}},_append_html_data:function(v,y,t){v=this.get_node(v);v.children=[];v.children_d=[];var B=y.is("ul")?y.children():y,A=v.id,D=[],z=[],r=this._model.data,q=r[A],C=this._data.core.selected.length,x,w,u;B.each(i.proxy(function(s,p){x=this._parse_model_from_html(i(p),A,q.parents.concat());if(x){D.push(x);z.push(x);if(r[x].children_d.length){z=z.concat(r[x].children_d)}}},this));q.children=D;q.children_d=z;for(w=0,u=q.parents.length;w<u;w++){r[q.parents[w]].children_d=r[q.parents[w]].children_d.concat(z)}this.trigger("model",{nodes:z,parent:A});if(A!=="#"){this._node_changed(A);this.redraw()}else{this.get_container_ul().children(".jstree-initial-node").remove();this.redraw(true)}if(this._data.core.selected.length!==C){this.trigger("changed",{action:"model",selected:this._data.core.selected})}t.call(this,true)},_append_json_data:function(x,u,p){x=this.get_node(x);x.children=[];x.children_d=[];if(u.d){u=u.d;if(typeof u==="string"){u=JSON.parse(u)}}if(!i.isArray(u)){u=[u]}var r=null,s={df:this._model.default_state,dat:u,par:x.id,m:this._model.data,t_id:this._id,t_cnt:this._cnt,sel:this._data.core.selected},t=function(P,y){if(P.data){P=P.data}var K=P.dat,D=P.par,w=[],z=[],E=[],L=P.df,B=P.t_id,C=P.t_cnt,G=P.m,F=G[D],H=P.sel,N,J,I,M,O=function(X,R,Q){if(!Q){Q=[]}else{Q=Q.concat()}if(R){Q.unshift(R)}var S=X.id.toString(),V,T,Y,W,U={id:S,text:X.text||"",icon:X.icon!==y?X.icon:true,parent:R,parents:Q,children:X.children||[],children_d:X.children_d||[],data:X.data,state:{},li_attr:{id:false},a_attr:{href:"#"},original:false};for(V in L){if(L.hasOwnProperty(V)){U.state[V]=L[V]}}if(X&&X.data&&X.data.jstree&&X.data.jstree.icon){U.icon=X.data.jstree.icon}if(X&&X.data){U.data=X.data;if(X.data.jstree){for(V in X.data.jstree){if(X.data.jstree.hasOwnProperty(V)){U.state[V]=X.data.jstree[V]}}}}if(X&&typeof X.state==="object"){for(V in X.state){if(X.state.hasOwnProperty(V)){U.state[V]=X.state[V]}}}if(X&&typeof X.li_attr==="object"){for(V in X.li_attr){if(X.li_attr.hasOwnProperty(V)){U.li_attr[V]=X.li_attr[V]}}}if(!U.li_attr.id){U.li_attr.id=S}if(X&&typeof X.a_attr==="object"){for(V in X.a_attr){if(X.a_attr.hasOwnProperty(V)){U.a_attr[V]=X.a_attr[V]}}}if(X&&X.children&&X.children===true){U.state.loaded=false;U.children=[];U.children_d=[]}G[U.id]=U;for(V=0,T=U.children.length;V<T;V++){Y=O(G[U.children[V]],U.id,Q);W=G[Y];U.children_d.push(Y);if(W.children_d.length){U.children_d=U.children_d.concat(W.children_d)}}delete X.data;delete X.children;G[U.id].original=X;if(U.state.selected){E.push(U.id)}return U.id},A=function(X,R,Q){if(!Q){Q=[]}else{Q=Q.concat()}if(R){Q.unshift(R)}var S=false,V,T,Y,W,U;do{S="j"+B+"_"+(++C)}while(G[S]);U={id:false,text:typeof X==="string"?X:"",icon:typeof X==="object"&&X.icon!==y?X.icon:true,parent:R,parents:Q,children:[],children_d:[],data:null,state:{},li_attr:{id:false},a_attr:{href:"#"},original:false};for(V in L){if(L.hasOwnProperty(V)){U.state[V]=L[V]}}if(X&&X.id){U.id=X.id.toString()}if(X&&X.text){U.text=X.text}if(X&&X.data&&X.data.jstree&&X.data.jstree.icon){U.icon=X.data.jstree.icon}if(X&&X.data){U.data=X.data;if(X.data.jstree){for(V in X.data.jstree){if(X.data.jstree.hasOwnProperty(V)){U.state[V]=X.data.jstree[V]}}}}if(X&&typeof X.state==="object"){for(V in X.state){if(X.state.hasOwnProperty(V)){U.state[V]=X.state[V]}}}if(X&&typeof X.li_attr==="object"){for(V in X.li_attr){if(X.li_attr.hasOwnProperty(V)){U.li_attr[V]=X.li_attr[V]}}}if(U.li_attr.id&&!U.id){U.id=U.li_attr.id.toString()}if(!U.id){U.id=S}if(!U.li_attr.id){U.li_attr.id=U.id}if(X&&typeof X.a_attr==="object"){for(V in X.a_attr){if(X.a_attr.hasOwnProperty(V)){U.a_attr[V]=X.a_attr[V]}}}if(X&&X.children&&X.children.length){for(V=0,T=X.children.length;V<T;V++){Y=A(X.children[V],U.id,Q);W=G[Y];U.children.push(Y);if(W.children_d.length){U.children_d=U.children_d.concat(W.children_d)}}U.children_d=U.children_d.concat(U.children)}if(X&&X.children&&X.children===true){U.state.loaded=false;U.children=[];U.children_d=[]}delete X.data;delete X.children;U.original=X;G[U.id]=U;if(U.state.selected){E.push(U.id)}return U.id};if(K.length&&K[0].id!==y&&K[0].parent!==y){for(J=0,I=K.length;J<I;J++){if(!K[J].children){K[J].children=[]}G[K[J].id.toString()]=K[J]}for(J=0,I=K.length;J<I;J++){G[K[J].parent.toString()].children.push(K[J].id.toString());F.children_d.push(K[J].id.toString())}for(J=0,I=F.children.length;J<I;J++){N=O(G[F.children[J]],D,F.parents.concat());z.push(N);if(G[N].children_d.length){z=z.concat(G[N].children_d)}}for(J=0,I=F.parents.length;J<I;J++){G[F.parents[J]].children_d=G[F.parents[J]].children_d.concat(z)}M={cnt:C,mod:G,sel:H,par:D,dpc:z,add:E}}else{for(J=0,I=K.length;J<I;J++){N=A(K[J],D,F.parents.concat());if(N){w.push(N);z.push(N);if(G[N].children_d.length){z=z.concat(G[N].children_d)}}}F.children=w;F.children_d=z;for(J=0,I=F.parents.length;J<I;J++){G[F.parents[J]].children_d=G[F.parents[J]].children_d.concat(z)}M={cnt:C,mod:G,sel:H,par:D,dpc:z,add:E}}return M},q=function(z,E){this._cnt=z.cnt;this._model.data=z.mod;if(E){var B,A,y=z.add,D=z.sel,C=this._data.core.selected.slice(),w=this._model.data;if(D.length!==C.length||i.vakata.array_unique(D.concat(C)).length!==D.length){for(B=0,A=D.length;B<A;B++){if(i.inArray(D[B],y)===-1&&i.inArray(D[B],C)===-1){w[D[B]].state.selected=false}}for(B=0,A=C.length;B<A;B++){if(i.inArray(C[B],D)===-1){w[C[B]].state.selected=true}}}}if(z.add.length){this._data.core.selected=this._data.core.selected.concat(z.add)}this.trigger("model",{nodes:z.dpc,parent:z.par});if(z.par!=="#"){this._node_changed(z.par);this.redraw()}else{this.redraw(true)}if(z.add.length){this.trigger("changed",{action:"model",selected:this._data.core.selected})}p.call(this,true)};if(this.settings.core.worker&&window.Blob&&window.URL&&window.Worker){try{if(this._wrk===null){this._wrk=window.URL.createObjectURL(new window.Blob(["self.onmessage = "+t.toString().replace(/return ([^;}]+)[\s;}]+$/,"postMessage($1);}")],{type:"text/javascript"}))}r=new window.Worker(this._wrk);r.onmessage=i.proxy(function(w){q.call(this,w.data,true);this._data.core.working=false;if(this._data.core.worker_queue.length){this._append_json_data.apply(this,this._data.core.worker_queue.shift())}},this);if(!this._data.core.working){this._data.core.working=true;r.postMessage(s)}else{this._data.core.worker_queue.push([x,u,p])}}catch(v){q.call(this,t(s),false)}}else{q.call(this,t(s),false)}},_parse_model_from_html:function(y,r,q){if(!q){q=[]}else{q=[].concat(q)}if(r){q.unshift(r)}var z,x,s=this._model.data,v={id:false,text:false,icon:true,parent:r,parents:q,children:[],children_d:[],data:null,state:{},li_attr:{id:false},a_attr:{href:"#"},original:false},w,u,t;for(w in this._model.default_state){if(this._model.default_state.hasOwnProperty(w)){v.state[w]=this._model.default_state[w]}}u=i.vakata.attributes(y,true);i.each(u,function(A,p){p=i.trim(p);if(!p.length){return true}v.li_attr[A]=p;if(A==="id"){v.id=p.toString()}});u=y.children("a").eq(0);if(u.length){u=i.vakata.attributes(u,true);i.each(u,function(A,p){p=i.trim(p);if(p.length){v.a_attr[A]=p}})}u=y.children("a:eq(0)").length?y.children("a:eq(0)").clone():y.clone();u.children("ins, i, ul").remove();u=u.html();u=i("<div />").html(u);v.text=this.settings.core.force_text?u.text():u.html();u=y.data();v.data=u?i.extend(true,{},u):null;v.state.opened=y.hasClass("jstree-open");v.state.selected=y.children("a").hasClass("jstree-clicked");v.state.disabled=y.children("a").hasClass("jstree-disabled");if(v.data&&v.data.jstree){for(w in v.data.jstree){if(v.data.jstree.hasOwnProperty(w)){v.state[w]=v.data.jstree[w]}}}u=y.children("a").children(".jstree-themeicon");if(u.length){v.icon=u.hasClass("jstree-themeicon-hidden")?false:u.attr("rel")}if(v.state.icon){v.icon=v.state.icon}u=y.children("ul").children("li");do{t="j"+this._id+"_"+(++this._cnt)}while(s[t]);v.id=v.li_attr.id?v.li_attr.id.toString():t;if(u.length){u.each(i.proxy(function(A,p){z=this._parse_model_from_html(i(p),v.id,q);x=this._model.data[z];v.children.push(z);if(x.children_d.length){v.children_d=v.children_d.concat(x.children_d)}},this));v.children_d=v.children_d.concat(v.children)}else{if(y.hasClass("jstree-closed")){v.state.loaded=false}}if(v.li_attr["class"]){v.li_attr["class"]=v.li_attr["class"].replace("jstree-closed","").replace("jstree-open","")}if(v.a_attr["class"]){v.a_attr["class"]=v.a_attr["class"].replace("jstree-clicked","").replace("jstree-disabled","")}s[v.id]=v;if(v.state.selected){this._data.core.selected.push(v.id)}return v.id},_parse_model_from_flat_json:function(y,r,q){if(!q){q=[]}else{q=q.concat()}if(r){q.unshift(r)}var t=y.id.toString(),s=this._model.data,A=this._model.default_state,w,u,z,x,v={id:t,text:y.text||"",icon:y.icon!==e?y.icon:true,parent:r,parents:q,children:y.children||[],children_d:y.children_d||[],data:y.data,state:{},li_attr:{id:false},a_attr:{href:"#"},original:false};for(w in A){if(A.hasOwnProperty(w)){v.state[w]=A[w]}}if(y&&y.data&&y.data.jstree&&y.data.jstree.icon){v.icon=y.data.jstree.icon}if(y&&y.data){v.data=y.data;if(y.data.jstree){for(w in y.data.jstree){if(y.data.jstree.hasOwnProperty(w)){v.state[w]=y.data.jstree[w]}}}}if(y&&typeof y.state==="object"){for(w in y.state){if(y.state.hasOwnProperty(w)){v.state[w]=y.state[w]}}}if(y&&typeof y.li_attr==="object"){for(w in y.li_attr){if(y.li_attr.hasOwnProperty(w)){v.li_attr[w]=y.li_attr[w]}}}if(!v.li_attr.id){v.li_attr.id=t}if(y&&typeof y.a_attr==="object"){for(w in y.a_attr){if(y.a_attr.hasOwnProperty(w)){v.a_attr[w]=y.a_attr[w]}}}if(y&&y.children&&y.children===true){v.state.loaded=false;v.children=[];v.children_d=[]}s[v.id]=v;for(w=0,u=v.children.length;w<u;w++){z=this._parse_model_from_flat_json(s[v.children[w]],v.id,q);x=s[z];v.children_d.push(z);if(x.children_d.length){v.children_d=v.children_d.concat(x.children_d)}}delete y.data;delete y.children;s[v.id].original=y;if(v.state.selected){this._data.core.selected.push(v.id)}return v.id},_parse_model_from_json:function(y,r,q){if(!q){q=[]}else{q=q.concat()}if(r){q.unshift(r)}var t=false,w,u,z,x,s=this._model.data,A=this._model.default_state,v;do{t="j"+this._id+"_"+(++this._cnt)}while(s[t]);v={id:false,text:typeof y==="string"?y:"",icon:typeof y==="object"&&y.icon!==e?y.icon:true,parent:r,parents:q,children:[],children_d:[],data:null,state:{},li_attr:{id:false},a_attr:{href:"#"},original:false};for(w in A){if(A.hasOwnProperty(w)){v.state[w]=A[w]}}if(y&&y.id){v.id=y.id.toString()}if(y&&y.text){v.text=y.text}if(y&&y.data&&y.data.jstree&&y.data.jstree.icon){v.icon=y.data.jstree.icon}if(y&&y.data){v.data=y.data;if(y.data.jstree){for(w in y.data.jstree){if(y.data.jstree.hasOwnProperty(w)){v.state[w]=y.data.jstree[w]}}}}if(y&&typeof y.state==="object"){for(w in y.state){if(y.state.hasOwnProperty(w)){v.state[w]=y.state[w]}}}if(y&&typeof y.li_attr==="object"){for(w in y.li_attr){if(y.li_attr.hasOwnProperty(w)){v.li_attr[w]=y.li_attr[w]}}}if(v.li_attr.id&&!v.id){v.id=v.li_attr.id.toString()}if(!v.id){v.id=t}if(!v.li_attr.id){v.li_attr.id=v.id}if(y&&typeof y.a_attr==="object"){for(w in y.a_attr){if(y.a_attr.hasOwnProperty(w)){v.a_attr[w]=y.a_attr[w]}}}if(y&&y.children&&y.children.length){for(w=0,u=y.children.length;w<u;w++){z=this._parse_model_from_json(y.children[w],v.id,q);x=s[z];v.children.push(z);if(x.children_d.length){v.children_d=v.children_d.concat(x.children_d)}}v.children_d=v.children_d.concat(v.children)}if(y&&y.children&&y.children===true){v.state.loaded=false;v.children=[];v.children_d=[]}delete y.data;delete y.children;v.original=y;s[v.id]=v;if(v.state.selected){this._data.core.selected.push(v.id)}return v.id},_redraw:function(){var p=this._model.force_full_redraw?this._model.data["#"].children.concat([]):this._model.changed.concat([]),t=document.createElement("UL"),s,r,q;for(r=0,q=p.length;r<q;r++){s=this.redraw_node(p[r],true,this._model.force_full_redraw);if(s&&this._model.force_full_redraw){t.appendChild(s)}}if(this._model.force_full_redraw){t.className=this.get_container_ul()[0].className;this.element.empty().append(t)}this._model.force_full_redraw=false;this._model.changed=[];this.trigger("redraw",{nodes:p})},redraw:function(p){if(p){this._model.force_full_redraw=true}this._redraw()},redraw_node:function(t,E,D){var x=this.get_node(t),B=false,p=false,q=false,y=false,v=false,u=false,C="",A=document,r=this._model.data,z=false,F=false,w=null;if(!x){return false}if(x.id==="#"){return this.redraw(true)}E=E||x.children.length===0;t=!document.querySelector?document.getElementById(x.id):this.element[0].querySelector("#"+("0123456789".indexOf(x.id[0])!==-1?"\\3"+x.id[0]+" "+x.id.substr(1).replace(i.jstree.idregex,"\\$&"):x.id.replace(i.jstree.idregex,"\\$&")));if(!t){E=true;if(!D){B=x.parent!=="#"?i("#"+x.parent.replace(i.jstree.idregex,"\\$&"),this.element)[0]:null;if(B!==null&&(!B||!r[x.parent].state.opened)){return false}p=i.inArray(x.id,B===null?r["#"].children:r[x.parent].children)}}else{t=i(t);if(!D){B=t.parent().parent()[0];if(B===this.element[0]){B=null}p=t.index()}if(!E&&x.children.length&&!t.children(".jstree-children").length){E=true}if(!E){q=t.children(".jstree-children")[0]}F=t.attr("aria-selected");z=t.children(".jstree-anchor")[0]===document.activeElement;t.remove()}t=o.cloneNode(true);C="jstree-node ";for(y in x.li_attr){if(x.li_attr.hasOwnProperty(y)){if(y==="id"){continue}if(y!=="class"){t.setAttribute(y,x.li_attr[y])}else{C+=x.li_attr[y]}}}if(F&&F!=="false"){t.setAttribute("aria-selected",true)}if(x.state.loaded&&!x.children.length){C+=" jstree-leaf"}else{C+=x.state.opened&&x.state.loaded?" jstree-open":" jstree-closed";t.setAttribute("aria-expanded",(x.state.opened&&x.state.loaded))}if(x.parent!==null&&r[x.parent].children[r[x.parent].children.length-1]===x.id){C+=" jstree-last"}t.id=x.id;t.className=C;C=(x.state.selected?" jstree-clicked":"")+(x.state.disabled?" jstree-disabled":"");for(v in x.a_attr){if(x.a_attr.hasOwnProperty(v)){if(v==="href"&&x.a_attr[v]==="#"){continue}if(v!=="class"){t.childNodes[1].setAttribute(v,x.a_attr[v])}else{C+=" "+x.a_attr[v]}}}if(C.length){t.childNodes[1].className="jstree-anchor "+C}if((x.icon&&x.icon!==true)||x.icon===false){if(x.icon===false){t.childNodes[1].childNodes[0].className+=" jstree-themeicon-hidden"}else{if(x.icon.indexOf("/")===-1&&x.icon.indexOf(".")===-1){t.childNodes[1].childNodes[0].className+=" "+x.icon+" jstree-themeicon-custom"}else{t.childNodes[1].childNodes[0].style.backgroundImage="url("+x.icon+")";t.childNodes[1].childNodes[0].style.backgroundPosition="center center";t.childNodes[1].childNodes[0].style.backgroundSize="auto";t.childNodes[1].childNodes[0].className+=" jstree-themeicon-custom"}}}if(this.settings.core.force_text){t.childNodes[1].appendChild(A.createTextNode(x.text))}else{t.childNodes[1].innerHTML+=x.text}if(E&&x.children.length&&x.state.opened&&x.state.loaded){u=A.createElement("UL");u.setAttribute("role","group");u.className="jstree-children";for(y=0,v=x.children.length;y<v;y++){u.appendChild(this.redraw_node(x.children[y],E,true))}t.appendChild(u)}if(q){t.appendChild(q)}if(!D){if(!B){B=this.element[0]}for(y=0,v=B.childNodes.length;y<v;y++){if(B.childNodes[y]&&B.childNodes[y].className&&B.childNodes[y].className.indexOf("jstree-children")!==-1){w=B.childNodes[y];break}}if(!w){w=A.createElement("UL");w.setAttribute("role","group");w.className="jstree-children";B.appendChild(w)}B=w;if(p<B.childNodes.length){B.insertBefore(t,B.childNodes[p])}else{B.appendChild(t)}if(z){t.childNodes[1].focus()}}if(x.state.opened&&!x.state.loaded){x.state.opened=false;setTimeout(i.proxy(function(){this.open_node(x.id,false,0)},this),0)}return t},open_node:function(u,w,s){var r,q,v,p;if(i.isArray(u)){u=u.slice();for(r=0,q=u.length;r<q;r++){this.open_node(u[r],w,s)}return true}u=this.get_node(u);if(!u||u.id==="#"){return false}s=s===e?this.settings.core.animation:s;if(!this.is_closed(u)){if(w){w.call(this,u,false)}return false}if(!this.is_loaded(u)){if(this.is_loading(u)){return setTimeout(i.proxy(function(){this.open_node(u,w,s)},this),500)}this.load_node(u,function(x,t){return t?this.open_node(x,w,s):(w?w.call(this,x,false):false)})}else{v=this.get_node(u,true);p=this;if(v.length){if(u.children.length&&!this._firstChild(v.children(".jstree-children")[0])){u.state.opened=true;this.redraw_node(u,true);v=this.get_node(u,true)}if(!s){this.trigger("before_open",{node:u});v[0].className=v[0].className.replace("jstree-closed","jstree-open");v[0].setAttribute("aria-expanded",true)}else{this.trigger("before_open",{node:u});v.children(".jstree-children").css("display","none").end().removeClass("jstree-closed").addClass("jstree-open").attr("aria-expanded",true).children(".jstree-children").stop(true,true).slideDown(s,function(){this.style.display="";p.trigger("after_open",{node:u})})}}u.state.opened=true;if(w){w.call(this,u,true)}if(!v.length){this.trigger("before_open",{node:u})}this.trigger("open_node",{node:u});if(!s||!v.length){this.trigger("after_open",{node:u})}}},_open_to:function(t){t=this.get_node(t);if(!t||t.id==="#"){return false}var r,q,s=t.parents;for(r=0,q=s.length;r<q;r+=1){if(r!=="#"){this.open_node(s[r],false,0)}}return i("#"+t.id.replace(i.jstree.idregex,"\\$&"),this.element)},close_node:function(u,s){var r,q,p,v;if(i.isArray(u)){u=u.slice();for(r=0,q=u.length;r<q;r++){this.close_node(u[r],s)}return true}u=this.get_node(u);if(!u||u.id==="#"){return false}if(this.is_closed(u)){return false}s=s===e?this.settings.core.animation:s;p=this;v=this.get_node(u,true);if(v.length){if(!s){v[0].className=v[0].className.replace("jstree-open","jstree-closed");v.attr("aria-expanded",false).children(".jstree-children").remove()}else{v.children(".jstree-children").attr("style","display:block !important").end().removeClass("jstree-open").addClass("jstree-closed").attr("aria-expanded",false).children(".jstree-children").stop(true,true).slideUp(s,function(){this.style.display="";v.children(".jstree-children").remove();p.trigger("after_close",{node:u})})}}u.state.opened=false;this.trigger("close_node",{node:u});if(!s||!v.length){this.trigger("after_close",{node:u})}},toggle_node:function(r){var q,p;if(i.isArray(r)){r=r.slice();for(q=0,p=r.length;q<p;q++){this.toggle_node(r[q])}return true}if(this.is_closed(r)){return this.open_node(r)}if(this.is_open(r)){return this.close_node(r)}},open_all:function(t,s,p){if(!t){t="#"}t=this.get_node(t);if(!t){return false}var u=t.id==="#"?this.get_container_ul():this.get_node(t,true),r,q,v;if(!u.length){for(r=0,q=t.children_d.length;r<q;r++){if(this.is_closed(this._model.data[t.children_d[r]])){this._model.data[t.children_d[r]].state.opened=true}}return this.trigger("open_all",{node:t})}p=p||u;v=this;u=this.is_closed(t)?u.find(".jstree-closed").addBack():u.find(".jstree-closed");u.each(function(){v.open_node(this,function(x,w){if(w&&this.is_parent(x)){this.open_all(x,s,p)}},s||0)});if(p.find(".jstree-closed").length===0){this.trigger("open_all",{node:this.get_node(p)})}},close_all:function(s,r){if(!s){s="#"}s=this.get_node(s);if(!s){return false}var t=s.id==="#"?this.get_container_ul():this.get_node(s,true),u=this,q,p;if(!t.length){for(q=0,p=s.children_d.length;q<p;q++){this._model.data[s.children_d[q]].state.opened=false}return this.trigger("close_all",{node:s})}t=this.is_open(s)?t.find(".jstree-open").addBack():t.find(".jstree-open");i(t.get().reverse()).each(function(){u.close_node(this,r||0)});this.trigger("close_all",{node:s})},is_disabled:function(p){p=this.get_node(p);return p&&p.state&&p.state.disabled},enable_node:function(r){var q,p;if(i.isArray(r)){r=r.slice();for(q=0,p=r.length;q<p;q++){this.enable_node(r[q])}return true}r=this.get_node(r);if(!r||r.id==="#"){return false}r.state.disabled=false;this.get_node(r,true).children(".jstree-anchor").removeClass("jstree-disabled");this.trigger("enable_node",{node:r})},disable_node:function(r){var q,p;if(i.isArray(r)){r=r.slice();for(q=0,p=r.length;q<p;q++){this.disable_node(r[q])}return true}r=this.get_node(r);if(!r||r.id==="#"){return false}r.state.disabled=true;this.get_node(r,true).children(".jstree-anchor").addClass("jstree-disabled");this.trigger("disable_node",{node:r})},activate_node:function(v,u){if(this.is_disabled(v)){return false}this._data.core.last_clicked=this._data.core.last_clicked&&this._data.core.last_clicked.id!==e?this.get_node(this._data.core.last_clicked.id):null;if(this._data.core.last_clicked&&!this._data.core.last_clicked.state.selected){this._data.core.last_clicked=null}if(!this._data.core.last_clicked&&this._data.core.selected.length){this._data.core.last_clicked=this.get_node(this._data.core.selected[this._data.core.selected.length-1])}if(!this.settings.core.multiple||(!u.metaKey&&!u.ctrlKey&&!u.shiftKey)||(u.shiftKey&&(!this._data.core.last_clicked||!this.get_parent(v)||this.get_parent(v)!==this._data.core.last_clicked.parent))){if(!this.settings.core.multiple&&(u.metaKey||u.ctrlKey||u.shiftKey)&&this.is_selected(v)){this.deselect_node(v,false,u)}else{this.deselect_all(true);this.select_node(v,false,false,u);this._data.core.last_clicked=this.get_node(v)}}else{if(u.shiftKey){var w=this.get_node(v).id,q=this._data.core.last_clicked.id,t=this.get_node(this._data.core.last_clicked.parent).children,x=false,s,r;for(s=0,r=t.length;s<r;s+=1){if(t[s]===w){x=!x}if(t[s]===q){x=!x}if(x||t[s]===w||t[s]===q){this.select_node(t[s],false,false,u)}else{this.deselect_node(t[s],false,u)}}}else{if(!this.is_selected(v)){this.select_node(v,false,false,u)}else{this.deselect_node(v,false,u)}}}this.trigger("activate_node",{node:this.get_node(v)})},hover_node:function(q){q=this.get_node(q,true);if(!q||!q.length||q.children(".jstree-hovered").length){return false}var r=this.element.find(".jstree-hovered"),p=this.element;if(r&&r.length){this.dehover_node(r)}q.children(".jstree-anchor").addClass("jstree-hovered");this.trigger("hover_node",{node:this.get_node(q)});setTimeout(function(){p.attr("aria-activedescendant",q[0].id);q.attr("aria-selected",true)},0)},dehover_node:function(p){p=this.get_node(p,true);if(!p||!p.length||!p.children(".jstree-hovered").length){return false}p.attr("aria-selected",false).children(".jstree-anchor").removeClass("jstree-hovered");this.trigger("dehover_node",{node:this.get_node(p)})},select_node:function(u,w,p,t){var v,s,q,r;if(i.isArray(u)){u=u.slice();for(s=0,q=u.length;s<q;s++){this.select_node(u[s],w,p,t)}return true}u=this.get_node(u);if(!u||u.id==="#"){return false}v=this.get_node(u,true);if(!u.state.selected){u.state.selected=true;this._data.core.selected.push(u.id);if(!p){v=this._open_to(u)}if(v&&v.length){v.children(".jstree-anchor").addClass("jstree-clicked")}this.trigger("select_node",{node:u,selected:this._data.core.selected,event:t});if(!w){this.trigger("changed",{action:"select_node",node:u,selected:this._data.core.selected,event:t})}}},deselect_node:function(s,u,r){var q,p,t;if(i.isArray(s)){s=s.slice();for(q=0,p=s.length;q<p;q++){this.deselect_node(s[q],u,r)}return true}s=this.get_node(s);if(!s||s.id==="#"){return false}t=this.get_node(s,true);if(s.state.selected){s.state.selected=false;this._data.core.selected=i.vakata.array_remove_item(this._data.core.selected,s.id);if(t.length){t.children(".jstree-anchor").removeClass("jstree-clicked")}this.trigger("deselect_node",{node:s,selected:this._data.core.selected,event:r});if(!u){this.trigger("changed",{action:"deselect_node",node:s,selected:this._data.core.selected,event:r})}}},select_all:function(s){var r=this._data.core.selected.concat([]),q,p;this._data.core.selected=this._model.data["#"].children_d.concat();for(q=0,p=this._data.core.selected.length;q<p;q++){if(this._model.data[this._data.core.selected[q]]){this._model.data[this._data.core.selected[q]].state.selected=true}}this.redraw(true);this.trigger("select_all",{selected:this._data.core.selected});if(!s){this.trigger("changed",{action:"select_all",selected:this._data.core.selected,old_selection:r})}},deselect_all:function(s){var r=this._data.core.selected.concat([]),q,p;for(q=0,p=this._data.core.selected.length;q<p;q++){if(this._model.data[this._data.core.selected[q]]){this._model.data[this._data.core.selected[q]].state.selected=false}}this._data.core.selected=[];this.element.find(".jstree-clicked").removeClass("jstree-clicked");this.trigger("deselect_all",{selected:this._data.core.selected,node:r});if(!s){this.trigger("changed",{action:"deselect_all",selected:this._data.core.selected,old_selection:r})}},is_selected:function(p){p=this.get_node(p);if(!p||p.id==="#"){return false}return p.state.selected},get_selected:function(p){return p?i.map(this._data.core.selected,i.proxy(function(q){return this.get_node(q)},this)):this._data.core.selected.slice()},get_top_selected:function(u){var t=this.get_selected(true),v={},s,r,q,p;for(s=0,r=t.length;s<r;s++){v[t[s].id]=t[s]}for(s=0,r=t.length;s<r;s++){for(q=0,p=t[s].children_d.length;q<p;q++){if(v[t[s].children_d[q]]){delete v[t[s].children_d[q]]}}}t=[];for(s in v){if(v.hasOwnProperty(s)){t.push(s)}}return u?i.map(t,i.proxy(function(w){return this.get_node(w)},this)):t},get_bottom_selected:function(s){var r=this.get_selected(true),t=[],q,p;for(q=0,p=r.length;q<p;q++){if(!r[q].children.length){t.push(r[q].id)}}return s?i.map(t,i.proxy(function(u){return this.get_node(u)},this)):t},get_state:function(){var q={core:{open:[],scroll:{left:this.element.scrollLeft(),top:this.element.scrollTop()},
+/*
+ 'themes' : {
+ 'name' : this.get_theme(),
+ 'icons' : this._data.core.themes.icons,
+ 'dots' : this._data.core.themes.dots
+ },
+ */
+selected:[]}},p;for(p in this._model.data){if(this._model.data.hasOwnProperty(p)){if(p!=="#"){if(this._model.data[p].state.opened){q.core.open.push(p)}if(this._model.data[p].state.selected){q.core.selected.push(p)}}}}return q},set_state:function(r,v){if(r){if(r.core){var q,u,p,s;if(r.core.open){if(!i.isArray(r.core.open)){delete r.core.open;this.set_state(r,v);return false}q=true;u=false;p=this;i.each(r.core.open.concat([]),function(w,t){u=p.get_node(t);if(u){if(p.is_loaded(t)){if(p.is_closed(t)){p.open_node(t,false,0)}if(r&&r.core&&r.core.open){i.vakata.array_remove_item(r.core.open,t)}}else{if(!p.is_loading(t)){p.open_node(t,i.proxy(function(y,x){if(!x&&r&&r.core&&r.core.open){i.vakata.array_remove_item(r.core.open,y.id)}this.set_state(r,v)},p),0)}q=false}}});if(q){delete r.core.open;this.set_state(r,v)}return false}if(r.core.scroll){if(r.core.scroll&&r.core.scroll.left!==e){this.element.scrollLeft(r.core.scroll.left)}if(r.core.scroll&&r.core.scroll.top!==e){this.element.scrollTop(r.core.scroll.top)}delete r.core.scroll;this.set_state(r,v);return false;
+/*
+ if(state.core.themes) {
+ if(state.core.themes.name) {
+ this.set_theme(state.core.themes.name);
+ }
+ if(typeof state.core.themes.dots !== 'undefined') {
+ this[ state.core.themes.dots ? "show_dots" : "hide_dots" ]();
+ }
+ if(typeof state.core.themes.icons !== 'undefined') {
+ this[ state.core.themes.icons ? "show_icons" : "hide_icons" ]();
+ }
+ delete state.core.themes;
+ delete state.core.open;
+ this.set_state(state, callback);
+ return false;
+ }
+ */
+}if(r.core.selected){s=this;this.deselect_all();i.each(r.core.selected,function(w,t){s.select_node(t)});delete r.core.selected;this.set_state(r,v);return false}if(i.isEmptyObject(r.core)){delete r.core;this.set_state(r,v);return false}}if(i.isEmptyObject(r)){r=null;if(v){v.call(this)}this.trigger("set_state");return false}return true}return false},refresh:function(q,p){this._data.core.state=p===true?{}:this.get_state();if(p&&i.isFunction(p)){this._data.core.state=p.call(this,this._data.core.state)}this._cnt=0;this._model.data={"#":{id:"#",parent:null,parents:[],children:[],children_d:[],state:{loaded:false}}};var r=this.get_container_ul()[0].className;if(!q){this.element.html("<ul class='"+r+"'><li class='jstree-initial-node jstree-loading jstree-leaf jstree-last'><i class='jstree-icon jstree-ocl'></i><a class='jstree-anchor' href='#'><i class='jstree-icon jstree-themeicon-hidden'></i>"+this.get_string("Loading ...")+"</a></li></ul>")}this.load_node("#",function(u,t){if(t){this.get_container_ul()[0].className=r;this.set_state(i.extend(true,{},this._data.core.state),function(){this.trigger("refresh")})}this._data.core.state=null})},refresh_node:function(r){r=this.get_node(r);if(!r||r.id==="#"){return false}var t=[],p=[],q=this._data.core.selected.concat([]);p.push(r.id);if(r.state.opened===true){t.push(r.id)}this.get_node(r,true).find(".jstree-open").each(function(){t.push(this.id)});this._load_nodes(p,i.proxy(function(s){this.open_node(t,false,0);this.select_node(this._data.core.selected);this.trigger("refresh_node",{node:r,nodes:s})},this))},set_id:function(s,t){s=this.get_node(s);if(!s||s.id==="#"){return false}var r,q,p=this._model.data;t=t.toString();p[s.parent].children[i.inArray(s.id,p[s.parent].children)]=t;for(r=0,q=s.parents.length;r<q;r++){p[s.parents[r]].children_d[i.inArray(s.id,p[s.parents[r]].children_d)]=t}for(r=0,q=s.children.length;r<q;r++){p[s.children[r]].parent=t}for(r=0,q=s.children_d.length;r<q;r++){p[s.children_d[r]].parents[i.inArray(s.id,p[s.children_d[r]].parents)]=t}r=i.inArray(s.id,this._data.core.selected);if(r!==-1){this._data.core.selected[r]=t}r=this.get_node(s.id,true);if(r){r.attr("id",t)}delete p[s.id];s.id=t;p[t]=s;return true},get_text:function(p){p=this.get_node(p);return(!p||p.id==="#")?false:p.text},set_text:function(r,s){var q,p;if(i.isArray(r)){r=r.slice();for(q=0,p=r.length;q<p;q++){this.set_text(r[q],s)}return true}r=this.get_node(r);if(!r||r.id==="#"){return false}r.text=s;if(this.get_node(r,true).length){this.redraw_node(r.id)}this.trigger("set_text",{obj:r,text:s});return true},get_json:function(t,q,u){t=this.get_node(t||"#");if(!t){return false}if(q&&q.flat&&!u){u=[]}var s={id:t.id,text:t.text,icon:this.get_icon(t),li_attr:t.li_attr,a_attr:t.a_attr,state:{},data:q&&q.no_data?false:t.data},r,p;if(q&&q.flat){s.parent=t.parent}else{s.children=[]}if(!q||!q.no_state){for(r in t.state){if(t.state.hasOwnProperty(r)){s.state[r]=t.state[r]}}}if(q&&q.no_id){delete s.id;if(s.li_attr&&s.li_attr.id){delete s.li_attr.id}}if(q&&q.flat&&t.id!=="#"){u.push(s)}if(!q||!q.no_children){for(r=0,p=t.children.length;r<p;r++){if(q&&q.flat){this.get_json(t.children[r],q,u)}else{s.children.push(this.get_json(t.children[r],q))}}}return q&&q.flat?u:(t.id==="#"?s.children:s)},create_node:function(u,p,w,x,v){if(u===null){u="#"}u=this.get_node(u);if(!u){return false}w=w===e?"last":w;if(!w.toString().match(/^(before|after)$/)&&!v&&!this.is_loaded(u)){return this.load_node(u,function(){this.create_node(u,p,w,x,true)})}if(!p){p={text:this.get_string("New node")}}if(p.text===e){p.text=this.get_string("New node")}var r,t,s,q;if(u.id==="#"){if(w==="before"){w="first"}if(w==="after"){w="last"}}switch(w){case"before":r=this.get_node(u.parent);w=i.inArray(u.id,r.children);u=r;break;case"after":r=this.get_node(u.parent);w=i.inArray(u.id,r.children)+1;u=r;break;case"inside":case"first":w=0;break;case"last":w=u.children.length;break;default:if(!w){w=0}break}if(w>u.children.length){w=u.children.length}if(!p.id){p.id=true}if(!this.check("create_node",p,u,w)){this.settings.core.error.call(this,this._data.core.last_error);return false}if(p.id===true){delete p.id}p=this._parse_model_from_json(p,u.id,u.parents.concat());if(!p){return false}r=this.get_node(p);t=[];t.push(p);t=t.concat(r.children_d);this.trigger("model",{nodes:t,parent:u.id});u.children_d=u.children_d.concat(t);for(s=0,q=u.parents.length;s<q;s++){this._model.data[u.parents[s]].children_d=this._model.data[u.parents[s]].children_d.concat(t)}p=r;r=[];for(s=0,q=u.children.length;s<q;s++){r[s>=w?s+1:s]=u.children[s]}r[w]=p.id;u.children=r;this.redraw_node(u,true);if(x){x.call(this,this.get_node(p))}this.trigger("create_node",{node:this.get_node(p),parent:u.id,position:w});return p.id},rename_node:function(s,t){var r,q,p;if(i.isArray(s)){s=s.slice();for(r=0,q=s.length;r<q;r++){this.rename_node(s[r],t)}return true}s=this.get_node(s);if(!s||s.id==="#"){return false}p=s.text;if(!this.check("rename_node",s,this.get_parent(s),t)){this.settings.core.error.call(this,this._data.core.last_error);return false}this.set_text(s,t);this.trigger("rename_node",{node:s,text:t,old:p});return true},delete_node:function(s){var w,v,x,z,t,u,r,q,p,y;if(i.isArray(s)){s=s.slice();for(w=0,v=s.length;w<v;w++){this.delete_node(s[w])}return true}s=this.get_node(s);if(!s||s.id==="#"){return false}x=this.get_node(s.parent);z=i.inArray(s.id,x.children);y=false;if(!this.check("delete_node",s,x,z)){this.settings.core.error.call(this,this._data.core.last_error);return false}if(z!==-1){x.children=i.vakata.array_remove(x.children,z)}t=s.children_d.concat([]);t.push(s.id);for(q=0,p=t.length;q<p;q++){for(u=0,r=s.parents.length;u<r;u++){z=i.inArray(t[q],this._model.data[s.parents[u]].children_d);if(z!==-1){this._model.data[s.parents[u]].children_d=i.vakata.array_remove(this._model.data[s.parents[u]].children_d,z)}}if(this._model.data[t[q]].state.selected){y=true;z=i.inArray(t[q],this._data.core.selected);if(z!==-1){this._data.core.selected=i.vakata.array_remove(this._data.core.selected,z)}}}this.trigger("delete_node",{node:s,parent:x.id});if(y){this.trigger("changed",{action:"delete_node",node:s,selected:this._data.core.selected,parent:x.id})}for(q=0,p=t.length;q<p;q++){delete this._model.data[t[q]]}this.redraw_node(x,true);return true},check:function(p,t,s,v,r){t=t&&t.id?t:this.get_node(t);s=s&&s.id?s:this.get_node(s);var q=p.match(/^move_node|copy_node|create_node$/i)?s:t,u=this.settings.core.check_callback;if(p==="move_node"||p==="copy_node"){if((!r||!r.is_multi)&&(t.id===s.id||i.inArray(t.id,s.children)===v||i.inArray(s.id,t.children_d)!==-1)){this._data.core.last_error={error:"check",plugin:"core",id:"core_01",reason:"Moving parent inside child",data:JSON.stringify({chk:p,pos:v,obj:t&&t.id?t.id:false,par:s&&s.id?s.id:false})};return false}}if(q&&q.data){q=q.data}if(q&&q.functions&&(q.functions[p]===false||q.functions[p]===true)){if(q.functions[p]===false){this._data.core.last_error={error:"check",plugin:"core",id:"core_02",reason:"Node data prevents function: "+p,data:JSON.stringify({chk:p,pos:v,obj:t&&t.id?t.id:false,par:s&&s.id?s.id:false})}}return q.functions[p]}if(u===false||(i.isFunction(u)&&u.call(this,p,t,s,v,r)===false)||(u&&u[p]===false)){this._data.core.last_error={error:"check",plugin:"core",id:"core_03",reason:"User config for core.check_callback prevents function: "+p,data:JSON.stringify({chk:p,pos:v,obj:t&&t.id?t.id:false,par:s&&s.id?s.id:false})};return false}return true},last_error:function(){return this._data.core.last_error},move_node:function(y,A,t,r,z){var w,v,x,q,H,I,s,u,G,F,E,D,C,B;A=this.get_node(A);t=t===e?0:t;if(!A){return false}if(!t.toString().match(/^(before|after)$/)&&!z&&!this.is_loaded(A)){return this.load_node(A,function(){this.move_node(y,A,t,r,true)})}if(i.isArray(y)){y=y.reverse().slice();for(w=0,v=y.length;w<v;w++){this.move_node(y[w],A,t,r,z)}return true}y=y&&y.id?y:this.get_node(y);if(!y||y.id==="#"){return false}x=(y.parent||"#").toString();H=(!t.toString().match(/^(before|after)$/)||A.id==="#")?A:this.get_node(A.parent);I=y.instance?y.instance:(this._model.data[y.id]?this:i.jstree.reference(y.id));s=!I||!I._id||(this._id!==I._id);q=I&&I._id&&x&&I._model.data[x]&&I._model.data[x].children?i.inArray(y.id,I._model.data[x].children):-1;if(s){if(this.copy_node(y,A,t,r,z)){if(I){I.delete_node(y)}return true}return false}if(H.id==="#"){if(t==="before"){t="first"}if(t==="after"){t="last"}}switch(t){case"before":t=i.inArray(A.id,H.children);break;case"after":t=i.inArray(A.id,H.children)+1;break;case"inside":case"first":t=0;break;case"last":t=H.children.length;break;default:if(!t){t=0}break}if(t>H.children.length){t=H.children.length}if(!this.check("move_node",y,H,t,{core:true,is_multi:(I&&I._id&&I._id!==this._id),is_foreign:(!I||!I._id)})){this.settings.core.error.call(this,this._data.core.last_error);return false}if(y.parent===H.id){u=H.children.concat();G=i.inArray(y.id,u);if(G!==-1){u=i.vakata.array_remove(u,G);if(t>G){t--}}G=[];for(F=0,E=u.length;F<E;F++){G[F>=t?F+1:F]=u[F]}G[t]=y.id;H.children=G;this._node_changed(H.id);this.redraw(H.id==="#")}else{G=y.children_d.concat();G.push(y.id);for(F=0,E=y.parents.length;F<E;F++){u=[];B=I._model.data[y.parents[F]].children_d;for(D=0,C=B.length;D<C;D++){if(i.inArray(B[D],G)===-1){u.push(B[D])}}I._model.data[y.parents[F]].children_d=u}I._model.data[x].children=i.vakata.array_remove_item(I._model.data[x].children,y.id);for(F=0,E=H.parents.length;F<E;F++){this._model.data[H.parents[F]].children_d=this._model.data[H.parents[F]].children_d.concat(G)}u=[];for(F=0,E=H.children.length;F<E;F++){u[F>=t?F+1:F]=H.children[F]}u[t]=y.id;H.children=u;H.children_d.push(y.id);H.children_d=H.children_d.concat(y.children_d);y.parent=H.id;G=H.parents.concat();G.unshift(H.id);B=y.parents.length;y.parents=G;G=G.concat();for(F=0,E=y.children_d.length;F<E;F++){this._model.data[y.children_d[F]].parents=this._model.data[y.children_d[F]].parents.slice(0,B*-1);Array.prototype.push.apply(this._model.data[y.children_d[F]].parents,G)}this._node_changed(x);this._node_changed(H.id);this.redraw(x==="#"||H.id==="#")}if(r){r.call(this,y,H,t)}this.trigger("move_node",{node:y,parent:H.id,position:t,old_parent:x,old_position:q,is_multi:(I&&I._id&&I._id!==this._id),is_foreign:(!I||!I._id),old_instance:I,new_instance:this});return true},copy_node:function(v,B,D,E,C){var z,y,x,u,t,s,q,A,p,w,r;B=this.get_node(B);D=D===e?0:D;if(!B){return false}if(!D.toString().match(/^(before|after)$/)&&!C&&!this.is_loaded(B)){return this.load_node(B,function(){this.copy_node(v,B,D,E,true)})}if(i.isArray(v)){v=v.reverse().slice();for(z=0,y=v.length;z<y;z++){this.copy_node(v[z],B,D,E,C)}return true}v=v&&v.id?v:this.get_node(v);if(!v||v.id==="#"){return false}A=(v.parent||"#").toString();p=(!D.toString().match(/^(before|after)$/)||B.id==="#")?B:this.get_node(B.parent);w=v.instance?v.instance:(this._model.data[v.id]?this:i.jstree.reference(v.id));r=!w||!w._id||(this._id!==w._id);if(p.id==="#"){if(D==="before"){D="first"}if(D==="after"){D="last"}}switch(D){case"before":D=i.inArray(B.id,p.children);break;case"after":D=i.inArray(B.id,p.children)+1;break;case"inside":case"first":D=0;break;case"last":D=p.children.length;break;default:if(!D){D=0}break}if(D>p.children.length){D=p.children.length}if(!this.check("copy_node",v,p,D,{core:true,is_multi:(w&&w._id&&w._id!==this._id),is_foreign:(!w||!w._id)})){this.settings.core.error.call(this,this._data.core.last_error);return false}q=w?w.get_json(v,{no_id:true,no_data:true,no_state:true}):v;if(!q){return false}if(q.id===true){delete q.id}q=this._parse_model_from_json(q,p.id,p.parents.concat());if(!q){return false}u=this.get_node(q);if(v&&v.state&&v.state.loaded===false){u.state.loaded=false}x=[];x.push(q);x=x.concat(u.children_d);this.trigger("model",{nodes:x,parent:p.id});for(t=0,s=p.parents.length;t<s;t++){this._model.data[p.parents[t]].children_d=this._model.data[p.parents[t]].children_d.concat(x)}x=[];for(t=0,s=p.children.length;t<s;t++){x[t>=D?t+1:t]=p.children[t]}x[D]=u.id;p.children=x;p.children_d.push(u.id);p.children_d=p.children_d.concat(u.children_d);this._node_changed(p.id);this.redraw(p.id==="#");if(E){E.call(this,u,p,D)}this.trigger("copy_node",{node:u,original:v,parent:p.id,position:D,old_parent:A,old_position:w&&w._id&&A&&w._model.data[A]&&w._model.data[A].children?i.inArray(v.id,w._model.data[A].children):-1,is_multi:(w&&w._id&&w._id!==this._id),is_foreign:(!w||!w._id),old_instance:w,new_instance:this});return u.id},cut:function(s){if(!s){s=this._data.core.selected.concat()}if(!i.isArray(s)){s=[s]}if(!s.length){return false}var p=[],t,r,q;for(r=0,q=s.length;r<q;r++){t=this.get_node(s[r]);if(t&&t.id&&t.id!=="#"){p.push(t)}}if(!p.length){return false}d=p;j=this;k="move_node";this.trigger("cut",{node:s})},copy:function(s){if(!s){s=this._data.core.selected.concat()}if(!i.isArray(s)){s=[s]}if(!s.length){return false}var p=[],t,r,q;for(r=0,q=s.length;r<q;r++){t=this.get_node(s[r]);if(t&&t.id&&t.id!=="#"){p.push(t)}}if(!p.length){return false}d=p;j=this;k="copy_node";this.trigger("copy",{node:s})},get_buffer:function(){return{mode:k,node:d,inst:j}},can_paste:function(){return k!==false&&d!==false},paste:function(p,q){p=this.get_node(p);if(!p||!k||!k.match(/^(copy_node|move_node)$/)||!d){return false}if(this[k](d,p,q)){this.trigger("paste",{parent:p.id,node:d,mode:k})}d=false;k=false;j=false},edit:function(p,x){p=this.get_node(p);if(!p){return false}if(this.settings.core.check_callback===false){this._data.core.last_error={error:"check",plugin:"core",id:"core_07",reason:"Could not edit node because of check_callback"};this.settings.core.error.call(this,this._data.core.last_error);return false}x=typeof x==="string"?x:p.text;this.set_text(p,"");p=this._open_to(p);var v=this._data.core.rtl,z=this.element.width(),y=p.children(".jstree-anchor"),B=i("<span>")
+/*
+ oi = obj.children("i:visible"),
+ ai = a.children("i:visible"),
+ w1 = oi.width() * oi.length,
+ w2 = ai.width() * ai.length,
+ */
+,A=x,r=i("<div />",{css:{position:"absolute",top:"-200px",left:(v?"0px":"-1000px"),visibility:"hidden"}}).appendTo("body"),q=i("<input />",{value:A,"class":"jstree-rename-input",css:{padding:"0",border:"1px solid silver","box-sizing":"border-box",display:"inline-block",height:(this._data.core.li_height)+"px",lineHeight:(this._data.core.li_height)+"px",width:"150px"},blur:i.proxy(function(){var t=B.children(".jstree-rename-input"),s=t.val();if(s===""){s=A}r.remove();B.replaceWith(y);B.remove();this.set_text(p,A);if(this.rename_node(p,i("<div></div>").text(s)[this.settings.core.force_text?"text":"html"]())===false){this.set_text(p,A)}},this),keydown:function(t){var s=t.which;if(s===27){this.value=A}if(s===27||s===13||s===37||s===38||s===39||s===40||s===32){t.stopImmediatePropagation()}if(s===27||s===13){t.preventDefault();this.blur()}},click:function(s){s.stopImmediatePropagation()},mousedown:function(s){s.stopImmediatePropagation()},keyup:function(s){q.width(Math.min(r.text("pW"+this.value).width(),z))},keypress:function(s){if(s.which===13){return false}}}),u={fontFamily:y.css("fontFamily")||"",fontSize:y.css("fontSize")||"",fontWeight:y.css("fontWeight")||"",fontStyle:y.css("fontStyle")||"",fontStretch:y.css("fontStretch")||"",fontVariant:y.css("fontVariant")||"",letterSpacing:y.css("letterSpacing")||"",wordSpacing:y.css("wordSpacing")||""};B.attr("class",y.attr("class")).append(y.contents().clone()).append(q);y.replaceWith(B);r.css(u);q.css(u).width(Math.min(r.text("pW"+q[0].value).width(),z))[0].select()},set_theme:function(r,p){if(!r){return false}if(p===true){var q=this.settings.core.themes.dir;if(!q){q=i.jstree.path+"/themes"}p=q+"/"+r+"/style.css"}if(p&&i.inArray(p,m)===-1){i("head").append('<link rel="stylesheet" href="'+p+'" type="text/css" />');m.push(p)}if(this._data.core.themes.name){this.element.removeClass("jstree-"+this._data.core.themes.name)}this._data.core.themes.name=r;this.element.addClass("jstree-"+r);this.element[this.settings.core.themes.responsive?"addClass":"removeClass"]("jstree-"+r+"-responsive");this.trigger("set_theme",{theme:r})},get_theme:function(){return this._data.core.themes.name},set_theme_variant:function(p){if(this._data.core.themes.variant){this.element.removeClass("jstree-"+this._data.core.themes.name+"-"+this._data.core.themes.variant)}this._data.core.themes.variant=p;if(p){this.element.addClass("jstree-"+this._data.core.themes.name+"-"+this._data.core.themes.variant)}},get_theme_variant:function(){return this._data.core.themes.variant},show_stripes:function(){this._data.core.themes.stripes=true;this.get_container_ul().addClass("jstree-striped")},hide_stripes:function(){this._data.core.themes.stripes=false;this.get_container_ul().removeClass("jstree-striped")},toggle_stripes:function(){if(this._data.core.themes.stripes){this.hide_stripes()}else{this.show_stripes()}},show_dots:function(){this._data.core.themes.dots=true;this.get_container_ul().removeClass("jstree-no-dots")},hide_dots:function(){this._data.core.themes.dots=false;this.get_container_ul().addClass("jstree-no-dots")},toggle_dots:function(){if(this._data.core.themes.dots){this.hide_dots()}else{this.show_dots()}},show_icons:function(){this._data.core.themes.icons=true;this.get_container_ul().removeClass("jstree-no-icons")},hide_icons:function(){this._data.core.themes.icons=false;this.get_container_ul().addClass("jstree-no-icons")},toggle_icons:function(){if(this._data.core.themes.icons){this.hide_icons()}else{this.show_icons()}},set_icon:function(t,r){var s,q,u,p;if(i.isArray(t)){t=t.slice();for(s=0,q=t.length;s<q;s++){this.set_icon(t[s],r)}return true}t=this.get_node(t);if(!t||t.id==="#"){return false}p=t.icon;t.icon=r;u=this.get_node(t,true).children(".jstree-anchor").children(".jstree-themeicon");if(r===false){this.hide_icon(t)}else{if(r===true){u.removeClass("jstree-themeicon-custom "+p).css("background","").removeAttr("rel")}else{if(r.indexOf("/")===-1&&r.indexOf(".")===-1){u.removeClass(p).css("background","");u.addClass(r+" jstree-themeicon-custom").attr("rel",r)}else{u.removeClass(p).css("background","");u.addClass("jstree-themeicon-custom").css("background","url('"+r+"') center center no-repeat").attr("rel",r)}}}return true},get_icon:function(p){p=this.get_node(p);return(!p||p.id==="#")?false:p.icon},hide_icon:function(r){var q,p;if(i.isArray(r)){r=r.slice();for(q=0,p=r.length;q<p;q++){this.hide_icon(r[q])}return true}r=this.get_node(r);if(!r||r==="#"){return false}r.icon=false;this.get_node(r,true).children(".jstree-anchor").children(".jstree-themeicon").addClass("jstree-themeicon-hidden");return true},show_icon:function(r){var q,p,s;if(i.isArray(r)){r=r.slice();for(q=0,p=r.length;q<p;q++){this.show_icon(r[q])}return true}r=this.get_node(r);if(!r||r==="#"){return false}s=this.get_node(r,true);r.icon=s.length?s.children(".jstree-anchor").children(".jstree-themeicon").attr("rel"):true;if(!r.icon){r.icon=true}s.children(".jstree-anchor").children(".jstree-themeicon").removeClass("jstree-themeicon-hidden");return true}};i.vakata={};i.vakata.attributes=function(q,r){q=i(q)[0];var p=r?{}:[];if(q&&q.attributes){i.each(q.attributes,function(t,s){if(i.inArray(s.nodeName.toLowerCase(),["style","contenteditable","hasfocus","tabindex"])!==-1){return}if(s.nodeValue!==null&&i.trim(s.nodeValue)!==""){if(r){p[s.nodeName]=s.nodeValue}else{p.push(s.nodeName)}}})}return p};i.vakata.array_unique=function(t){var q=[],s,r,p;for(s=0,p=t.length;s<p;s++){for(r=0;r<=s;r++){if(t[s]===t[r]){break}}if(r===s){q.push(t[s])}}return q};i.vakata.array_remove=function(s,r,q){var p=s.slice((q||r)+1||s.length);s.length=r<0?s.length+r:r;s.push.apply(s,p);return s};i.vakata.array_remove_item=function(r,q){var p=i.inArray(q,r);return p!==-1?i.vakata.array_remove(r,p):r};var h=document.createElement("I");h.className="jstree-icon jstree-checkbox";i.jstree.defaults.checkbox={visible:true,three_state:true,whole_node:true,keep_selected_style:true,cascade:"",tie_selection:true};i.jstree.plugins.checkbox=function(p,q){this.bind=function(){q.bind.call(this);this._data.checkbox.uto=false;this._data.checkbox.selected=[];if(this.settings.checkbox.three_state){this.settings.checkbox.cascade="up+down+undetermined"}this.element.on("init.jstree",i.proxy(function(){this._data.checkbox.visible=this.settings.checkbox.visible;if(!this.settings.checkbox.keep_selected_style){this.element.addClass("jstree-checkbox-no-clicked")}if(this.settings.checkbox.tie_selection){this.element.addClass("jstree-checkbox-selection")}},this)).on("loading.jstree",i.proxy(function(){this[this._data.checkbox.visible?"show_checkboxes":"hide_checkboxes"]()},this));if(this.settings.checkbox.cascade.indexOf("undetermined")!==-1){this.element.on("changed.jstree uncheck_node.jstree check_node.jstree uncheck_all.jstree check_all.jstree move_node.jstree copy_node.jstree redraw.jstree open_node.jstree",i.proxy(function(){if(this._data.checkbox.uto){clearTimeout(this._data.checkbox.uto)}this._data.checkbox.uto=setTimeout(i.proxy(this._undetermined,this),50)},this))}if(!this.settings.checkbox.tie_selection){this.element.on("model.jstree",i.proxy(function(w,u){var r=this._model.data,v=r[u.parent],x=u.nodes,t,s;for(t=0,s=x.length;t<s;t++){r[x[t]].state.checked=(r[x[t]].original&&r[x[t]].original.state&&r[x[t]].original.state.checked);if(r[x[t]].state.checked){this._data.checkbox.selected.push(x[t])}}},this))}if(this.settings.checkbox.cascade.indexOf("up")!==-1||this.settings.checkbox.cascade.indexOf("down")!==-1){this.element.on("model.jstree",i.proxy(function(C,z){var u=this._model.data,r=u[z.parent],B=z.nodes,G=[],D,A,x,w,v,y,F=this.settings.checkbox.cascade,E=this.settings.checkbox.tie_selection;if(F.indexOf("down")!==-1){if(r.state[E?"selected":"checked"]){for(A=0,x=B.length;A<x;A++){u[B[A]].state[E?"selected":"checked"]=true}this._data[E?"core":"checkbox"].selected=this._data[E?"core":"checkbox"].selected.concat(B)}else{for(A=0,x=B.length;A<x;A++){if(u[B[A]].state[E?"selected":"checked"]){for(w=0,v=u[B[A]].children_d.length;w<v;w++){u[u[B[A]].children_d[w]].state[E?"selected":"checked"]=true}this._data[E?"core":"checkbox"].selected=this._data[E?"core":"checkbox"].selected.concat(u[B[A]].children_d)}}}}if(F.indexOf("up")!==-1){for(A=0,x=r.children_d.length;A<x;A++){if(!u[r.children_d[A]].children.length){G.push(u[r.children_d[A]].parent)}}G=i.vakata.array_unique(G);for(w=0,v=G.length;w<v;w++){r=u[G[w]];while(r&&r.id!=="#"){D=0;for(A=0,x=r.children.length;A<x;A++){D+=u[r.children[A]].state[E?"selected":"checked"]}if(D===x){r.state[E?"selected":"checked"]=true;this._data[E?"core":"checkbox"].selected.push(r.id);y=this.get_node(r,true);if(y&&y.length){y.children(".jstree-anchor").addClass(E?"jstree-clicked":"jstree-checked")}}else{break}r=this.get_node(r.parent)}}}this._data[E?"core":"checkbox"].selected=i.vakata.array_unique(this._data[E?"core":"checkbox"].selected)},this)).on(this.settings.checkbox.tie_selection?"select_node.jstree":"check_node.jstree",i.proxy(function(A,y){var x=y.node,r=this._model.data,B=this.get_node(x.parent),u=this.get_node(x,true),z,v,C,w,E=this.settings.checkbox.cascade,D=this.settings.checkbox.tie_selection;if(E.indexOf("down")!==-1){this._data[D?"core":"checkbox"].selected=i.vakata.array_unique(this._data[D?"core":"checkbox"].selected.concat(x.children_d));for(z=0,v=x.children_d.length;z<v;z++){w=r[x.children_d[z]];w.state[D?"selected":"checked"]=true;if(w&&w.original&&w.original.state&&w.original.state.undetermined){w.original.state.undetermined=false}}}if(E.indexOf("up")!==-1){while(B&&B.id!=="#"){C=0;for(z=0,v=B.children.length;z<v;z++){C+=r[B.children[z]].state[D?"selected":"checked"]}if(C===v){B.state[D?"selected":"checked"]=true;this._data[D?"core":"checkbox"].selected.push(B.id);w=this.get_node(B,true);if(w&&w.length){w.children(".jstree-anchor").addClass(D?"jstree-clicked":"jstree-checked")}}else{break}B=this.get_node(B.parent)}}if(E.indexOf("down")!==-1&&u.length){u.find(".jstree-anchor").addClass(D?"jstree-clicked":"jstree-checked")}},this)).on(this.settings.checkbox.tie_selection?"deselect_all.jstree":"uncheck_all.jstree",i.proxy(function(x,v){var w=this.get_node("#"),r=this._model.data,u,s,t;for(u=0,s=w.children_d.length;u<s;u++){t=r[w.children_d[u]];if(t&&t.original&&t.original.state&&t.original.state.undetermined){t.original.state.undetermined=false}}},this)).on(this.settings.checkbox.tie_selection?"deselect_node.jstree":"uncheck_node.jstree",i.proxy(function(z,w){var v=w.node,r=this.get_node(v,true),x,u,y,B=this.settings.checkbox.cascade,A=this.settings.checkbox.tie_selection;if(v&&v.original&&v.original.state&&v.original.state.undetermined){v.original.state.undetermined=false}if(B.indexOf("down")!==-1){for(x=0,u=v.children_d.length;x<u;x++){y=this._model.data[v.children_d[x]];y.state[A?"selected":"checked"]=false;if(y&&y.original&&y.original.state&&y.original.state.undetermined){y.original.state.undetermined=false}}}if(B.indexOf("up")!==-1){for(x=0,u=v.parents.length;x<u;x++){y=this._model.data[v.parents[x]];y.state[A?"selected":"checked"]=false;if(y&&y.original&&y.original.state&&y.original.state.undetermined){y.original.state.undetermined=false}y=this.get_node(v.parents[x],true);if(y&&y.length){y.children(".jstree-anchor").removeClass(A?"jstree-clicked":"jstree-checked")}}}y=[];for(x=0,u=this._data[A?"core":"checkbox"].selected.length;x<u;x++){if((B.indexOf("down")===-1||i.inArray(this._data[A?"core":"checkbox"].selected[x],v.children_d)===-1)&&(B.indexOf("up")===-1||i.inArray(this._data[A?"core":"checkbox"].selected[x],v.parents)===-1)){y.push(this._data[A?"core":"checkbox"].selected[x])}}this._data[A?"core":"checkbox"].selected=i.vakata.array_unique(y);if(B.indexOf("down")!==-1&&r.length){r.find(".jstree-anchor").removeClass(A?"jstree-clicked":"jstree-checked")}},this))}if(this.settings.checkbox.cascade.indexOf("up")!==-1){this.element.on("delete_node.jstree",i.proxy(function(y,v){var r=this.get_node(v.parent),s=this._model.data,w,u,z,x,A=this.settings.checkbox.tie_selection;while(r&&r.id!=="#"){z=0;for(w=0,u=r.children.length;w<u;w++){z+=s[r.children[w]].state[A?"selected":"checked"]}if(z===u){r.state[A?"selected":"checked"]=true;this._data[A?"core":"checkbox"].selected.push(r.id);x=this.get_node(r,true);if(x&&x.length){x.children(".jstree-anchor").addClass(A?"jstree-clicked":"jstree-checked")}}else{break}r=this.get_node(r.parent)}},this)).on("move_node.jstree",i.proxy(function(B,z){var v=z.is_multi,A=z.old_parent,r=this.get_node(z.parent),u=this._model.data,s,C,y,w,x,D=this.settings.checkbox.tie_selection;if(!v){s=this.get_node(A);while(s&&s.id!=="#"){C=0;for(y=0,w=s.children.length;y<w;y++){C+=u[s.children[y]].state[D?"selected":"checked"]}if(C===w){s.state[D?"selected":"checked"]=true;this._data[D?"core":"checkbox"].selected.push(s.id);x=this.get_node(s,true);if(x&&x.length){x.children(".jstree-anchor").addClass(D?"jstree-clicked":"jstree-checked")}}else{break}s=this.get_node(s.parent)}}s=r;while(s&&s.id!=="#"){C=0;for(y=0,w=s.children.length;y<w;y++){C+=u[s.children[y]].state[D?"selected":"checked"]}if(C===w){if(!s.state[D?"selected":"checked"]){s.state[D?"selected":"checked"]=true;this._data[D?"core":"checkbox"].selected.push(s.id);x=this.get_node(s,true);if(x&&x.length){x.children(".jstree-anchor").addClass(D?"jstree-clicked":"jstree-checked")}}}else{if(s.state[D?"selected":"checked"]){s.state[D?"selected":"checked"]=false;this._data[D?"core":"checkbox"].selected=i.vakata.array_remove_item(this._data[D?"core":"checkbox"].selected,s.id);x=this.get_node(s,true);if(x&&x.length){x.children(".jstree-anchor").removeClass(D?"jstree-clicked":"jstree-checked")}}else{break}}s=this.get_node(s.parent)}},this))}};this._undetermined=function(){var w,u,r=this._model.data,v=this.settings.checkbox.tie_selection,y=this._data[v?"core":"checkbox"].selected,z=[],x=this;for(w=0,u=y.length;w<u;w++){if(r[y[w]]&&r[y[w]].parents){z=z.concat(r[y[w]].parents)}}this.element.find(".jstree-closed").not(":has(.jstree-children)").each(function(){var s=x.get_node(this),t;if(!s.state.loaded){if(s.original&&s.original.state&&s.original.state.undetermined&&s.original.state.undetermined===true){z.push(s.id);z=z.concat(s.parents)}}else{for(w=0,u=s.children_d.length;w<u;w++){t=r[s.children_d[w]];if(!t.state.loaded&&t.original&&t.original.state&&t.original.state.undetermined&&t.original.state.undetermined===true){z.push(t.id);z=z.concat(t.parents)}}}});z=i.vakata.array_unique(z);z=i.vakata.array_remove_item(z,"#");this.element.find(".jstree-undetermined").removeClass("jstree-undetermined");for(w=0,u=z.length;w<u;w++){if(!r[z[w]].state[v?"selected":"checked"]){y=this.get_node(z[w],true);if(y&&y.length){y.children(".jstree-anchor").children(".jstree-checkbox").addClass("jstree-undetermined")}}}};this.redraw_node=function(w,r,v){w=q.redraw_node.call(this,w,r,v);if(w){var u,s,t=null;for(u=0,s=w.childNodes.length;u<s;u++){if(w.childNodes[u]&&w.childNodes[u].className&&w.childNodes[u].className.indexOf("jstree-anchor")!==-1){t=w.childNodes[u];break}}if(t){if(!this.settings.checkbox.tie_selection&&this._model.data[w.id].state.checked){t.className+=" jstree-checked"}t.insertBefore(h.cloneNode(false),t.childNodes[0])}}if(!v&&this.settings.checkbox.cascade.indexOf("undetermined")!==-1){if(this._data.checkbox.uto){clearTimeout(this._data.checkbox.uto)}this._data.checkbox.uto=setTimeout(i.proxy(this._undetermined,this),50)}return w};this.show_checkboxes=function(){this._data.core.themes.checkboxes=true;this.get_container_ul().removeClass("jstree-no-checkboxes")};this.hide_checkboxes=function(){this._data.core.themes.checkboxes=false;this.get_container_ul().addClass("jstree-no-checkboxes")};this.toggle_checkboxes=function(){if(this._data.core.themes.checkboxes){this.hide_checkboxes()}else{this.show_checkboxes()}};this.is_undetermined=function(y){y=this.get_node(y);var x=this.settings.checkbox.cascade,w,u,v=this.settings.checkbox.tie_selection,z=this._data[v?"core":"checkbox"].selected,r=this._model.data;if(!y||y.state[v?"selected":"checked"]===true||x.indexOf("undetermined")===-1||(x.indexOf("down")===-1&&x.indexOf("up")===-1)){return false}if(!y.state.loaded&&y.original.state.undetermined===true){return true}for(w=0,u=y.children_d.length;w<u;w++){if(i.inArray(y.children_d[w],z)!==-1||(!r[y.children_d[w]].state.loaded&&r[y.children_d[w]].original.state.undetermined)){return true}}return false};this.activate_node=function(s,r){if(this.settings.checkbox.tie_selection&&(this.settings.checkbox.whole_node||i(r.target).hasClass("jstree-checkbox"))){r.ctrlKey=true}if(this.settings.checkbox.tie_selection||(!this.settings.checkbox.whole_node&&!i(r.target).hasClass("jstree-checkbox"))){return q.activate_node.call(this,s,r)}if(this.is_checked(s)){this.uncheck_node(s,r)}else{this.check_node(s,r)}this.trigger("activate_node",{node:this.get_node(s)})};this.check_node=function(v,u){if(this.settings.checkbox.tie_selection){return this.select_node(v,false,true,u)}var w,t,r,s;if(i.isArray(v)){v=v.slice();for(t=0,r=v.length;t<r;t++){this.check_node(v[t],u)}return true}v=this.get_node(v);if(!v||v.id==="#"){return false}w=this.get_node(v,true);if(!v.state.checked){v.state.checked=true;this._data.checkbox.selected.push(v.id);if(w&&w.length){w.children(".jstree-anchor").addClass("jstree-checked")}this.trigger("check_node",{node:v,selected:this._data.checkbox.selected,event:u})}};this.uncheck_node=function(u,t){if(this.settings.checkbox.tie_selection){return this.deselect_node(u,false,t)}var s,r,v;if(i.isArray(u)){u=u.slice();for(s=0,r=u.length;s<r;s++){this.uncheck_node(u[s],t)}return true}u=this.get_node(u);if(!u||u.id==="#"){return false}v=this.get_node(u,true);if(u.state.checked){u.state.checked=false;this._data.checkbox.selected=i.vakata.array_remove_item(this._data.checkbox.selected,u.id);if(v.length){v.children(".jstree-anchor").removeClass("jstree-checked")}this.trigger("uncheck_node",{node:u,selected:this._data.checkbox.selected,event:t})}};this.check_all=function(){if(this.settings.checkbox.tie_selection){return this.select_all()}var t=this._data.checkbox.selected.concat([]),s,r;this._data.checkbox.selected=this._model.data["#"].children_d.concat();for(s=0,r=this._data.checkbox.selected.length;s<r;s++){if(this._model.data[this._data.checkbox.selected[s]]){this._model.data[this._data.checkbox.selected[s]].state.checked=true}}this.redraw(true);this.trigger("check_all",{selected:this._data.checkbox.selected})};this.uncheck_all=function(){if(this.settings.checkbox.tie_selection){return this.deselect_all()}var t=this._data.checkbox.selected.concat([]),s,r;for(s=0,r=this._data.checkbox.selected.length;s<r;s++){if(this._model.data[this._data.checkbox.selected[s]]){this._model.data[this._data.checkbox.selected[s]].state.checked=false}}this._data.checkbox.selected=[];this.element.find(".jstree-checked").removeClass("jstree-checked");this.trigger("uncheck_all",{selected:this._data.checkbox.selected,node:t})};this.is_checked=function(r){if(this.settings.checkbox.tie_selection){return this.is_selected(r)}r=this.get_node(r);if(!r||r.id==="#"){return false}return r.state.checked};this.get_checked=function(r){if(this.settings.checkbox.tie_selection){return this.get_selected(r)}return r?i.map(this._data.checkbox.selected,i.proxy(function(s){return this.get_node(s)},this)):this._data.checkbox.selected};this.get_top_checked=function(w){if(this.settings.checkbox.tie_selection){return this.get_top_selected(w)}var v=this.get_checked(true),x={},u,t,s,r;for(u=0,t=v.length;u<t;u++){x[v[u].id]=v[u]}for(u=0,t=v.length;u<t;u++){for(s=0,r=v[u].children_d.length;s<r;s++){if(x[v[u].children_d[s]]){delete x[v[u].children_d[s]]}}}v=[];for(u in x){if(x.hasOwnProperty(u)){v.push(u)}}return w?i.map(v,i.proxy(function(y){return this.get_node(y)},this)):v};this.get_bottom_checked=function(u){if(this.settings.checkbox.tie_selection){return this.get_bottom_selected(u)}var t=this.get_checked(true),v=[],s,r;for(s=0,r=t.length;s<r;s++){if(!t[s].children.length){v.push(t[s].id)}}return u?i.map(v,i.proxy(function(w){return this.get_node(w)},this)):v}};i.jstree.defaults.contextmenu={select_node:true,show_at_node:true,items:function(q,p){return{create:{separator_before:false,separator_after:true,_disabled:false,label:"Create",action:function(s){var r=i.jstree.reference(s.reference),t=r.get_node(s.reference);r.create_node(t,{},"last",function(u){setTimeout(function(){r.edit(u)},0)})}},rename:{separator_before:false,separator_after:false,_disabled:false,label:"Rename",action:function(s){var r=i.jstree.reference(s.reference),t=r.get_node(s.reference);r.edit(t)}},remove:{separator_before:false,icon:false,separator_after:false,_disabled:false,label:"Delete",action:function(s){var r=i.jstree.reference(s.reference),t=r.get_node(s.reference);if(r.is_selected(t)){r.delete_node(r.get_selected())}else{r.delete_node(t)}}},ccp:{separator_before:true,icon:false,separator_after:false,label:"Edit",action:false,submenu:{cut:{separator_before:false,separator_after:false,label:"Cut",action:function(s){var r=i.jstree.reference(s.reference),t=r.get_node(s.reference);if(r.is_selected(t)){r.cut(r.get_selected())}else{r.cut(t)}}},copy:{separator_before:false,icon:false,separator_after:false,label:"Copy",action:function(s){var r=i.jstree.reference(s.reference),t=r.get_node(s.reference);if(r.is_selected(t)){r.copy(r.get_selected())}else{r.copy(t)}}},paste:{separator_before:false,icon:false,_disabled:function(r){return !i.jstree.reference(r.reference).can_paste()},separator_after:false,label:"Paste",action:function(s){var r=i.jstree.reference(s.reference),t=r.get_node(s.reference);r.paste(t)}}}}}}};i.jstree.plugins.contextmenu=function(p,q){this.bind=function(){q.bind.call(this);var r=0;this.element.on("contextmenu.jstree",".jstree-anchor",i.proxy(function(s){s.preventDefault();r=s.ctrlKey?s.timeStamp:0;if(!this.is_loading(s.currentTarget)){this.show_contextmenu(s.currentTarget,s.pageX,s.pageY,s)}},this)).on("click.jstree",".jstree-anchor",i.proxy(function(s){if(this._data.contextmenu.visible&&(!r||s.timeStamp-r>250)){i.vakata.context.hide()}},this));i(document).on("context_hide.vakata",i.proxy(function(){this._data.contextmenu.visible=false},this))};this.teardown=function(){if(this._data.contextmenu.visible){i.vakata.context.hide()}q.teardown.call(this)};this.show_contextmenu=function(u,B,z,v){u=this.get_node(u);if(!u||u.id==="#"){return false}var C=this.settings.contextmenu,w=this.get_node(u,true),A=w.children(".jstree-anchor"),r=false,t=false;if(C.show_at_node||B===e||z===e){r=A.offset();B=r.left;z=r.top+this._data.core.li_height}if(this.settings.contextmenu.select_node&&!this.is_selected(u)){this.activate_node(u,v)}t=C.items;if(i.isFunction(t)){t=t.call(this,u,i.proxy(function(s){this._show_contextmenu(u,B,z,s)},this))}if(i.isPlainObject(t)){this._show_contextmenu(u,B,z,t)}};this._show_contextmenu=function(u,r,w,t){var v=this.get_node(u,true),s=v.children(".jstree-anchor");i(document).one("context_show.vakata",i.proxy(function(z,y){var x="jstree-contextmenu jstree-"+this.get_theme()+"-contextmenu";i(y.element).addClass(x)},this));this._data.contextmenu.visible=true;i.vakata.context.show(s,{x:r,y:w},t);this.trigger("show_contextmenu",{node:u,x:r,y:w})}};(function(q){var r=false,p={element:false,reference:false,position_x:0,position_y:0,items:[],html:"",is_visible:false};q.vakata.context={settings:{hide_onmouseleave:0,icons:true},_trigger:function(s){q(document).triggerHandler("context_"+s+".vakata",{reference:p.reference,element:p.element,position:{x:p.position_x,y:p.position_y}})},_execute:function(s){s=p.items[s];return s&&(!s._disabled||(q.isFunction(s._disabled)&&!s._disabled({item:s,reference:p.reference,element:p.element})))&&s.action?s.action.call(null,{item:s,reference:p.reference,element:p.element,position:{x:p.position_x,y:p.position_y}}):false},_parse:function(w,u){if(!w){return false}if(!u){p.html="";p.items=[]}var v="",s=false,t;if(u){v+="<ul>"}q.each(w,function(x,y){if(!y){return true}p.items.push(y);if(!s&&y.separator_before){v+="<li class='vakata-context-separator'><a href='#' "+(q.vakata.context.settings.icons?"":'style="margin-left:0px;"')+"> </a></li>"}s=false;v+="<li class='"+(y._class||"")+(y._disabled===true||(q.isFunction(y._disabled)&&y._disabled({item:y,reference:p.reference,element:p.element}))?" vakata-contextmenu-disabled ":"")+"' "+(y.shortcut?" data-shortcut='"+y.shortcut+"' ":"")+">";v+="<a href='#' rel='"+(p.items.length-1)+"'>";if(q.vakata.context.settings.icons){v+="<i ";if(y.icon){if(y.icon.indexOf("/")!==-1||y.icon.indexOf(".")!==-1){v+=" style='background:url(\""+y.icon+"\") center center no-repeat' "}else{v+=" class='"+y.icon+"' "}}v+="></i><span class='vakata-contextmenu-sep'> </span>"}v+=(q.isFunction(y.label)?y.label({item:x,reference:p.reference,element:p.element}):y.label)+(y.shortcut?' <span class="vakata-contextmenu-shortcut vakata-contextmenu-shortcut-'+y.shortcut+'">'+(y.shortcut_label||"")+"</span>":"")+"</a>";if(y.submenu){t=q.vakata.context._parse(y.submenu,true);if(t){v+=t}}v+="</li>";if(y.separator_after){v+="<li class='vakata-context-separator'><a href='#' "+(q.vakata.context.settings.icons?"":'style="margin-left:0px;"')+"> </a></li>";s=true}});v=v.replace(/<li class\='vakata-context-separator'\><\/li\>$/,"");if(u){v+="</ul>"}if(!u){p.html=v;q.vakata.context._trigger("parse")}return v.length>10?v:false},_show_submenu:function(B){B=q(B);if(!B.length||!B.children("ul").length){return}var A=B.children("ul"),s=B.offset().left+B.outerWidth(),C=B.offset().top,t=A.width(),v=A.height(),u=q(window).width()+q(window).scrollLeft(),z=q(window).height()+q(window).scrollTop();if(r){B[s-(t+10+B.outerWidth())<0?"addClass":"removeClass"]("vakata-context-left")}else{B[s+t+10>u?"addClass":"removeClass"]("vakata-context-right")}if(C+v+10>z){A.css("bottom","-1px")}A.show()},show:function(u,A,v){var t,B,F,E,G,z,s,D,C=true;if(p.element&&p.element.length){p.element.width("")}switch(C){case (!A&&!u):return false;case (!!A&&!!u):p.reference=u;p.position_x=A.x;p.position_y=A.y;break;case (!A&&!!u):p.reference=u;t=u.offset();p.position_x=t.left+u.outerHeight();p.position_y=t.top;break;case (!!A&&!u):p.position_x=A.x;p.position_y=A.y;break}if(!!u&&!v&&q(u).data("vakata_contextmenu")){v=q(u).data("vakata_contextmenu")}if(q.vakata.context._parse(v)){p.element.html(p.html)}if(p.items.length){B=p.element;F=p.position_x;E=p.position_y;G=B.width();z=B.height();s=q(window).width()+q(window).scrollLeft();D=q(window).height()+q(window).scrollTop();if(r){F-=B.outerWidth();if(F<q(window).scrollLeft()+20){F=q(window).scrollLeft()+20}}if(F+G+20>s){F=s-(G+20)}if(E+z+20>D){E=D-(z+20)}p.element.css({left:F,top:E}).show().find("a:eq(0)").focus().parent().addClass("vakata-context-hover");p.is_visible=true;q.vakata.context._trigger("show")}},hide:function(){if(p.is_visible){p.element.hide().find("ul").hide().end().find(":focus").blur();p.is_visible=false;q.vakata.context._trigger("hide")}}};q(function(){r=q("body").css("direction")==="rtl";var s=false;p.element=q("<ul class='vakata-context'></ul>");p.element.on("mouseenter","li",function(t){t.stopImmediatePropagation();if(q.contains(this,t.relatedTarget)){return}if(s){clearTimeout(s)}p.element.find(".vakata-context-hover").removeClass("vakata-context-hover").end();q(this).siblings().find("ul").hide().end().end().parentsUntil(".vakata-context","li").addBack().addClass("vakata-context-hover");q.vakata.context._show_submenu(this)}).on("mouseleave","li",function(t){if(q.contains(this,t.relatedTarget)){return}q(this).find(".vakata-context-hover").addBack().removeClass("vakata-context-hover")}).on("mouseleave",function(t){q(this).find(".vakata-context-hover").removeClass("vakata-context-hover");if(q.vakata.context.settings.hide_onmouseleave){s=setTimeout((function(u){return function(){q.vakata.context.hide()}}(this)),q.vakata.context.settings.hide_onmouseleave)}}).on("click","a",function(t){t.preventDefault();if(!q(this).blur().parent().hasClass("vakata-context-disabled")&&q.vakata.context._execute(q(this).attr("rel"))!==false){q.vakata.context.hide()}}).on("keydown","a",function(t){var u=null;switch(t.which){case 13:case 32:t.type="mouseup";t.preventDefault();q(t.currentTarget).trigger(t);break;case 37:if(p.is_visible){p.element.find(".vakata-context-hover").last().parents("li:eq(0)").find("ul").hide().find(".vakata-context-hover").removeClass("vakata-context-hover").end().end().children("a").focus();t.stopImmediatePropagation();t.preventDefault()}break;case 38:if(p.is_visible){u=p.element.find("ul:visible").addBack().last().children(".vakata-context-hover").removeClass("vakata-context-hover").prevAll("li:not(.vakata-context-separator)").first();if(!u.length){u=p.element.find("ul:visible").addBack().last().children("li:not(.vakata-context-separator)").last()}u.addClass("vakata-context-hover").children("a").focus();t.stopImmediatePropagation();t.preventDefault()}break;case 39:if(p.is_visible){p.element.find(".vakata-context-hover").last().children("ul").show().children("li:not(.vakata-context-separator)").removeClass("vakata-context-hover").first().addClass("vakata-context-hover").children("a").focus();t.stopImmediatePropagation();t.preventDefault()}break;case 40:if(p.is_visible){u=p.element.find("ul:visible").addBack().last().children(".vakata-context-hover").removeClass("vakata-context-hover").nextAll("li:not(.vakata-context-separator)").first();if(!u.length){u=p.element.find("ul:visible").addBack().last().children("li:not(.vakata-context-separator)").first()}u.addClass("vakata-context-hover").children("a").focus();t.stopImmediatePropagation();t.preventDefault()}break;case 27:q.vakata.context.hide();t.preventDefault();break;default:break}}).on("keydown",function(u){u.preventDefault();var t=p.element.find(".vakata-contextmenu-shortcut-"+u.which).parent();if(t.parent().not(".vakata-context-disabled")){t.mouseup()}}).appendTo("body");q(document).on("mousedown",function(t){if(p.is_visible&&!q.contains(p.element[0],t.target)){q.vakata.context.hide()}}).on("context_show.vakata",function(u,t){p.element.find("li:has(ul)").children("a").addClass("vakata-context-parent");if(r){p.element.addClass("vakata-context-rtl").css("direction","rtl")}p.element.find("ul").hide().end()})})}(i));i.jstree.defaults.dnd={copy:true,open_timeout:500,is_draggable:true,check_while_dragging:true,always_copy:false,inside_pos:0};i.jstree.plugins.dnd=function(p,q){this.bind=function(){q.bind.call(this);this.element.on("mousedown.jstree touchstart.jstree",".jstree-anchor",i.proxy(function(t){var s=this.get_node(t.target),r=this.is_selected(s)?this.get_selected().length:1;if(s&&s.id&&s.id!=="#"&&(t.which===1||t.type==="touchstart")&&(this.settings.dnd.is_draggable===true||(i.isFunction(this.settings.dnd.is_draggable)&&this.settings.dnd.is_draggable.call(this,(r>1?this.get_selected(true):[s]))))){this.element.trigger("mousedown.jstree");return i.vakata.dnd.start(t,{jstree:true,origin:this,obj:this.get_node(s,true),nodes:r>1?this.get_selected():[s.id]},'<div id="jstree-dnd" class="jstree-'+this.get_theme()+(this.settings.core.themes.responsive?" jstree-dnd-responsive":"")+'"><i class="jstree-icon jstree-er"></i>'+(r>1?r+" "+this.get_string("nodes"):this.get_text(t.currentTarget,true))+'<ins class="jstree-copy" style="display:none;">+</ins></div>')}},this))}};i(function(){var s=false,r=false,q=false,p=i('<div id="jstree-marker"> </div>').hide().appendTo("body");i(document).bind("dnd_start.vakata",function(u,t){s=false}).bind("dnd_move.vakata",function(L,N){if(q){clearTimeout(q)}if(!N||!N.data||!N.data.jstree){return}if(N.event.target.id&&N.event.target.id==="jstree-marker"){return}var u=i.jstree.reference(N.event.target),x=false,M=false,v=false,I,D,K,E,J,F,C,B,A,z,G,H,y,w;if(u&&u._data&&u._data.dnd){p.attr("class","jstree-"+u.get_theme()+(u.settings.core.themes.responsive?" jstree-dnd-responsive":""));N.helper.children().attr("class","jstree-"+u.get_theme()+(u.settings.core.themes.responsive?" jstree-dnd-responsive":"")).find(".jstree-copy:eq(0)")[N.data.origin&&(N.data.origin.settings.dnd.always_copy||(N.data.origin.settings.dnd.copy&&(N.event.metaKey||N.event.ctrlKey)))?"show":"hide"]();if((N.event.target===u.element[0]||N.event.target===u.get_container_ul()[0])&&u.get_container_ul().children().length===0){C=true;for(B=0,A=N.data.nodes.length;B<A;B++){C=C&&u.check((N.data.origin&&(N.data.origin.settings.dnd.always_copy||(N.data.origin.settings.dnd.copy&&(N.event.metaKey||N.event.ctrlKey)))?"copy_node":"move_node"),(N.data.origin&&N.data.origin!==u?N.data.origin.get_node(N.data.nodes[B]):N.data.nodes[B]),"#","last",{dnd:true,ref:u.get_node("#"),pos:"i",is_multi:(N.data.origin&&N.data.origin!==u),is_foreign:(!N.data.origin)});if(!C){break}}if(C){s={ins:u,par:"#",pos:"last"};p.hide();N.helper.find(".jstree-icon:eq(0)").removeClass("jstree-er").addClass("jstree-ok");return}}else{x=i(N.event.target).closest(".jstree-anchor");if(x&&x.length&&x.parent().is(".jstree-closed, .jstree-open, .jstree-leaf")){M=x.offset();v=N.event.pageY-M.top;K=x.height();if(v<K/3){F=["b","i","a"]}else{if(v>K-K/3){F=["a","i","b"]}else{F=v>K/2?["i","a","b"]:["i","b","a"]}}i.each(F,function(O,t){switch(t){case"b":I=M.left-6;D=M.top;E=u.get_parent(x);J=x.parent().index();break;case"i":y=u.settings.dnd.inside_pos;w=u.get_node(x.parent());I=M.left-2;D=M.top+K/2+1;E=w.id;J=y==="first"?0:(y==="last"?w.children.length:Math.min(y,w.children.length));break;case"a":I=M.left-6;D=M.top+K;E=u.get_parent(x);J=x.parent().index()+1;break}
+/*
+ // TODO: moving inside, but the node is not yet loaded?
+ // the check will work anyway, as when moving the node will be loaded first and checked again
+ if(v === 'i' && !ins.is_loaded(p)) { }
+ */
+C=true;for(B=0,A=N.data.nodes.length;B<A;B++){z=N.data.origin&&(N.data.origin.settings.dnd.always_copy||(N.data.origin.settings.dnd.copy&&(N.event.metaKey||N.event.ctrlKey)))?"copy_node":"move_node";G=J;if(z==="move_node"&&t==="a"&&(N.data.origin&&N.data.origin===u)&&E===u.get_parent(N.data.nodes[B])){H=u.get_node(E);if(G>i.inArray(N.data.nodes[B],H.children)){G-=1}}C=C&&((u&&u.settings&&u.settings.dnd&&u.settings.dnd.check_while_dragging===false)||u.check(z,(N.data.origin&&N.data.origin!==u?N.data.origin.get_node(N.data.nodes[B]):N.data.nodes[B]),E,G,{dnd:true,ref:u.get_node(x.parent()),pos:t,is_multi:(N.data.origin&&N.data.origin!==u),is_foreign:(!N.data.origin)}));if(!C){if(u&&u.last_error){r=u.last_error()}break}}if(C){if(t==="i"&&x.parent().is(".jstree-closed")&&u.settings.dnd.open_timeout){q=setTimeout((function(P,Q){return function(){P.open_node(Q)}}(u,x)),u.settings.dnd.open_timeout)}s={ins:u,par:E,pos:t==="i"&&y==="last"&&J===0&&!u.is_loaded(w)?"last":J};p.css({left:I+"px",top:D+"px"}).show();N.helper.find(".jstree-icon:eq(0)").removeClass("jstree-er").addClass("jstree-ok");r={};F=true;return false}});if(F===true){return}}}}s=false;N.helper.find(".jstree-icon").removeClass("jstree-ok").addClass("jstree-er");p.hide()}).bind("dnd_scroll.vakata",function(u,t){if(!t||!t.data||!t.data.jstree){return}p.hide();s=false;t.helper.find(".jstree-icon:eq(0)").removeClass("jstree-ok").addClass("jstree-er")}).bind("dnd_stop.vakata",function(x,w){if(q){clearTimeout(q)}if(!w||!w.data||!w.data.jstree){return}p.hide();var v,u,t=[];if(s){for(v=0,u=w.data.nodes.length;v<u;v++){t[v]=w.data.origin?w.data.origin.get_node(w.data.nodes[v]):w.data.nodes[v];if(w.data.origin){t[v].instance=w.data.origin}}s.ins[w.data.origin&&(w.data.origin.settings.dnd.always_copy||(w.data.origin.settings.dnd.copy&&(w.event.metaKey||w.event.ctrlKey)))?"copy_node":"move_node"](t,s.par,s.pos)}else{v=i(w.event.target).closest(".jstree");if(v.length&&r&&r.error&&r.error==="check"){v=v.jstree(true);if(v){v.settings.core.error.call(this,r)}}}}).bind("keyup keydown",function(u,t){t=i.vakata.dnd._get();if(t&&t.data&&t.data.jstree){t.helper.find(".jstree-copy:eq(0)")[t.data.origin&&(t.data.origin.settings.dnd.always_copy||(t.data.origin.settings.dnd.copy&&(u.metaKey||u.ctrlKey)))?"show":"hide"]()}})});(function(q){var p={element:false,target:false,is_down:false,is_drag:false,helper:false,helper_w:0,data:false,init_x:0,init_y:0,scroll_l:0,scroll_t:0,scroll_e:false,scroll_i:false,is_touch:false};q.vakata.dnd={settings:{scroll_speed:10,scroll_proximity:20,helper_left:5,helper_top:10,threshold:5,threshold_touch:50},_trigger:function(t,s){var r=q.vakata.dnd._get();r.event=s;q(document).triggerHandler("dnd_"+t+".vakata",r)},_get:function(){return{data:p.data,element:p.element,helper:p.helper}},_clean:function(){if(p.helper){p.helper.remove()}if(p.scroll_i){clearInterval(p.scroll_i);p.scroll_i=false}p={element:false,target:false,is_down:false,is_drag:false,helper:false,helper_w:0,data:false,init_x:0,init_y:0,scroll_l:0,scroll_t:0,scroll_e:false,scroll_i:false,is_touch:false};q(document).off("mousemove touchmove",q.vakata.dnd.drag);q(document).off("mouseup touchend",q.vakata.dnd.stop)},_scroll:function(t){if(!p.scroll_e||(!p.scroll_l&&!p.scroll_t)){if(p.scroll_i){clearInterval(p.scroll_i);p.scroll_i=false}return false}if(!p.scroll_i){p.scroll_i=setInterval(q.vakata.dnd._scroll,100);return false}if(t===true){return false}var s=p.scroll_e.scrollTop(),r=p.scroll_e.scrollLeft();p.scroll_e.scrollTop(s+p.scroll_t*q.vakata.dnd.settings.scroll_speed);p.scroll_e.scrollLeft(r+p.scroll_l*q.vakata.dnd.settings.scroll_speed);if(s!==p.scroll_e.scrollTop()||r!==p.scroll_e.scrollLeft()){q.vakata.dnd._trigger("scroll",p.scroll_e)}},start:function(t,s,r){if(t.type==="touchstart"&&t.originalEvent&&t.originalEvent.changedTouches&&t.originalEvent.changedTouches[0]){t.pageX=t.originalEvent.changedTouches[0].pageX;t.pageY=t.originalEvent.changedTouches[0].pageY;t.target=document.elementFromPoint(t.originalEvent.changedTouches[0].pageX-window.pageXOffset,t.originalEvent.changedTouches[0].pageY-window.pageYOffset)}if(p.is_drag){q.vakata.dnd.stop({})}try{t.currentTarget.unselectable="on";t.currentTarget.onselectstart=function(){return false};if(t.currentTarget.style){t.currentTarget.style.MozUserSelect="none"}}catch(u){}p.init_x=t.pageX;p.init_y=t.pageY;p.data=s;p.is_down=true;p.element=t.currentTarget;p.target=t.target;p.is_touch=t.type==="touchstart";if(r!==false){p.helper=q("<div id='vakata-dnd'></div>").html(r).css({display:"block",margin:"0",padding:"0",position:"absolute",top:"-2000px",lineHeight:"16px",zIndex:"10000"})}q(document).bind("mousemove touchmove",q.vakata.dnd.drag);q(document).bind("mouseup touchend",q.vakata.dnd.stop);return false},drag:function(y){if(y.type==="touchmove"&&y.originalEvent&&y.originalEvent.changedTouches&&y.originalEvent.changedTouches[0]){y.pageX=y.originalEvent.changedTouches[0].pageX;y.pageY=y.originalEvent.changedTouches[0].pageY;y.target=document.elementFromPoint(y.originalEvent.changedTouches[0].pageX-window.pageXOffset,y.originalEvent.changedTouches[0].pageY-window.pageYOffset)}if(!p.is_down){return}if(!p.is_drag){if(Math.abs(y.pageX-p.init_x)>(p.is_touch?q.vakata.dnd.settings.threshold_touch:q.vakata.dnd.settings.threshold)||Math.abs(y.pageY-p.init_y)>(p.is_touch?q.vakata.dnd.settings.threshold_touch:q.vakata.dnd.settings.threshold)){if(p.helper){p.helper.appendTo("body");p.helper_w=p.helper.outerWidth()}p.is_drag=true;q.vakata.dnd._trigger("start",y)}else{return}}var z=false,C=false,A=false,s=false,r=false,v=false,u=false,x=false,B=false,t=false;p.scroll_t=0;p.scroll_l=0;p.scroll_e=false;q(q(y.target).parentsUntil("body").addBack().get().reverse()).filter(function(){return(/^auto|scroll$/).test(q(this).css("overflow"))&&(this.scrollHeight>this.offsetHeight||this.scrollWidth>this.offsetWidth)}).each(function(){var w=q(this),D=w.offset();if(this.scrollHeight>this.offsetHeight){if(D.top+w.height()-y.pageY<q.vakata.dnd.settings.scroll_proximity){p.scroll_t=1}if(y.pageY-D.top<q.vakata.dnd.settings.scroll_proximity){p.scroll_t=-1}}if(this.scrollWidth>this.offsetWidth){if(D.left+w.width()-y.pageX<q.vakata.dnd.settings.scroll_proximity){p.scroll_l=1}if(y.pageX-D.left<q.vakata.dnd.settings.scroll_proximity){p.scroll_l=-1}}if(p.scroll_t||p.scroll_l){p.scroll_e=q(this);return false}});if(!p.scroll_e){z=q(document);C=q(window);A=z.height();s=C.height();r=z.width();v=C.width();u=z.scrollTop();x=z.scrollLeft();if(A>s&&y.pageY-u<q.vakata.dnd.settings.scroll_proximity){p.scroll_t=-1}if(A>s&&s-(y.pageY-u)<q.vakata.dnd.settings.scroll_proximity){p.scroll_t=1}if(r>v&&y.pageX-x<q.vakata.dnd.settings.scroll_proximity){p.scroll_l=-1}if(r>v&&v-(y.pageX-x)<q.vakata.dnd.settings.scroll_proximity){p.scroll_l=1}if(p.scroll_t||p.scroll_l){p.scroll_e=z}}if(p.scroll_e){q.vakata.dnd._scroll(true)}if(p.helper){B=parseInt(y.pageY+q.vakata.dnd.settings.helper_top,10);t=parseInt(y.pageX+q.vakata.dnd.settings.helper_left,10);if(A&&B+25>A){B=A-50}if(r&&t+p.helper_w>r){t=r-(p.helper_w+2)}p.helper.css({left:t+"px",top:B+"px"})}q.vakata.dnd._trigger("move",y);return false},stop:function(r){if(r.type==="touchend"&&r.originalEvent&&r.originalEvent.changedTouches&&r.originalEvent.changedTouches[0]){r.pageX=r.originalEvent.changedTouches[0].pageX;r.pageY=r.originalEvent.changedTouches[0].pageY;r.target=document.elementFromPoint(r.originalEvent.changedTouches[0].pageX-window.pageXOffset,r.originalEvent.changedTouches[0].pageY-window.pageYOffset)}if(p.is_drag){q.vakata.dnd._trigger("stop",r)}else{if(r.type==="touchend"&&r.target===p.target){var s=setTimeout(function(){q(r.target).click()},100);q(r.target).one("click",function(){if(s){clearTimeout(s)}})}}q.vakata.dnd._clean();return false}}}(i));i.jstree.defaults.search={ajax:false,fuzzy:false,case_sensitive:false,show_only_matches:false,close_opened_onclear:true,search_leaves_only:false,search_callback:false};i.jstree.plugins.search=function(p,q){this.bind=function(){q.bind.call(this);this._data.search.str="";this._data.search.dom=i();this._data.search.res=[];this._data.search.opn=[];this.element.on("before_open.jstree",i.proxy(function(z,y){var u,t,x,w=this._data.search.res,v=[],A=i();if(w&&w.length){this._data.search.dom=i(this.element[0].querySelectorAll("#"+i.map(w,function(r){return"0123456789".indexOf(r[0])!==-1?"\\3"+r[0]+" "+r.substr(1).replace(i.jstree.idregex,"\\$&"):r.replace(i.jstree.idregex,"\\$&")}).join(", #")));this._data.search.dom.children(".jstree-anchor").addClass("jstree-search");if(this.settings.search.show_only_matches&&this._data.search.res.length){for(u=0,t=w.length;u<t;u++){v=v.concat(this.get_node(w[u]).parents)}v=i.vakata.array_remove_item(i.vakata.array_unique(v),"#");A=v.length?i(this.element[0].querySelectorAll("#"+i.map(v,function(r){return"0123456789".indexOf(r[0])!==-1?"\\3"+r[0]+" "+r.substr(1).replace(i.jstree.idregex,"\\$&"):r.replace(i.jstree.idregex,"\\$&")}).join(", #"))):i();this.element.find(".jstree-node").hide().filter(".jstree-last").filter(function(){return this.nextSibling}).removeClass("jstree-last");A=A.add(this._data.search.dom);A.parentsUntil(".jstree").addBack().show().filter(".jstree-children").each(function(){i(this).children(".jstree-node:visible").eq(-1).addClass("jstree-last")})}}},this));if(this.settings.search.show_only_matches){this.element.on("search.jstree",function(s,r){if(r.nodes.length){i(this).find(".jstree-node").hide().filter(".jstree-last").filter(function(){return this.nextSibling}).removeClass("jstree-last");r.nodes.parentsUntil(".jstree").addBack().show().filter(".jstree-children").each(function(){i(this).children(".jstree-node:visible").eq(-1).addClass("jstree-last")})}}).on("clear_search.jstree",function(s,r){if(r.nodes.length){i(this).find(".jstree-node").css("display","").filter(".jstree-last").filter(function(){return this.nextSibling}).removeClass("jstree-last")}})}};this.search=function(y,A){if(y===false||i.trim(y.toString())===""){return this.clear_search()}y=y.toString();var B=this.settings.search,z=B.ajax?B.ajax:false,x=null,t=[],u=[],w,v;if(this._data.search.res.length){this.clear_search()}if(!A&&z!==false){if(i.isFunction(z)){return z.call(this,y,i.proxy(function(r){if(r&&r.d){r=r.d}this._load_nodes(!i.isArray(r)?[]:i.vakata.array_unique(r),function(){this.search(y,true)},true)},this))}else{z=i.extend({},z);if(!z.data){z.data={}}z.data.str=y;return i.ajax(z).fail(i.proxy(function(){this._data.core.last_error={error:"ajax",plugin:"search",id:"search_01",reason:"Could not load search parents",data:JSON.stringify(z)};this.settings.core.error.call(this,this._data.core.last_error)},this)).done(i.proxy(function(r){if(r&&r.d){r=r.d}this._load_nodes(!i.isArray(r)?[]:i.vakata.array_unique(r),function(){this.search(y,true)},true)},this))}}this._data.search.str=y;this._data.search.dom=i();this._data.search.res=[];this._data.search.opn=[];x=new i.vakata.search(y,true,{caseSensitive:B.case_sensitive,fuzzy:B.fuzzy});i.each(this._model.data,function(s,r){if(r.text&&((B.search_callback&&B.search_callback.call(this,y,r))||(!B.search_callback&&x.search(r.text).isMatch))&&(!B.search_leaves_only||(r.state.loaded&&r.children.length===0))){t.push(s);u=u.concat(r.parents)}});if(t.length){u=i.vakata.array_unique(u);this._search_open(u);this._data.search.dom=i(this.element[0].querySelectorAll("#"+i.map(t,function(r){return"0123456789".indexOf(r[0])!==-1?"\\3"+r[0]+" "+r.substr(1).replace(i.jstree.idregex,"\\$&"):r.replace(i.jstree.idregex,"\\$&")}).join(", #")));this._data.search.res=t;this._data.search.dom.children(".jstree-anchor").addClass("jstree-search")}this.trigger("search",{nodes:this._data.search.dom,str:y,res:this._data.search.res})};this.clear_search=function(){this._data.search.dom.children(".jstree-anchor").removeClass("jstree-search");if(this.settings.search.close_opened_onclear){this.close_node(this._data.search.opn,0)}this.trigger("clear_search",{nodes:this._data.search.dom,str:this._data.search.str,res:this._data.search.res});this._data.search.str="";this._data.search.res=[];this._data.search.opn=[];this._data.search.dom=i()};this._search_open=function(s){var r=this;i.each(s.concat([]),function(u,t){if(t==="#"){return true}try{t=i("#"+t.replace(i.jstree.idregex,"\\$&"),r.element)}catch(w){}if(t&&t.length){if(r.is_closed(t)){r._data.search.opn.push(t[0].id);r.open_node(t,function(){r._search_open(s)},0)}}})}};(function(p){p.vakata.search=function(v,t,A){A=A||{};if(A.fuzzy!==false){A.fuzzy=true}v=A.caseSensitive?v:v.toLowerCase();var x=A.location||0,y=A.distance||100,w=A.threshold||0.6,q=v.length,r,s,u,z;if(q>32){A.fuzzy=false}if(A.fuzzy){r=1<<(q-1);s=(function(){var B={},C=0;for(C=0;C<q;C++){B[v.charAt(C)]=0}for(C=0;C<q;C++){B[v.charAt(C)]|=1<<(q-C-1)}return B}());u=function(E,B){var D=E/q,C=Math.abs(x-B);if(!y){return C?1:D}return D+(C/y)}}z=function(O){O=A.caseSensitive?O:O.toLowerCase();if(v===O||O.indexOf(v)!==-1){return{isMatch:true,score:0}}if(!A.fuzzy){return{isMatch:false,score:1}}var J,I,N=O.length,F=w,H=O.indexOf(v,x),L,E,C=q+N,B,D,M,Q,P,G=1,K=[];if(H!==-1){F=Math.min(u(0,H),F);H=O.lastIndexOf(v,x+q);if(H!==-1){F=Math.min(u(0,H),F)}}H=-1;for(J=0;J<q;J++){L=0;E=C;while(L<E){if(u(J,x+E)<=F){L=E}else{C=E}E=Math.floor((C-L)/2+L)}C=E;D=Math.max(1,x-E+1);M=Math.min(x+E,N)+q;Q=new Array(M+2);Q[M+1]=(1<<J)-1;for(I=M;I>=D;I--){P=s[O.charAt(I-1)];if(J===0){Q[I]=((Q[I+1]<<1)|1)&P}else{Q[I]=((Q[I+1]<<1)|1)&P|(((B[I+1]|B[I])<<1)|1)|B[I+1]}if(Q[I]&r){G=u(J,I-1);if(G<=F){F=G;H=I-1;K.push(H);if(H>x){D=Math.max(1,2*x-H)}else{break}}}}if(u(J+1,x)>F){break}B=Q}return{isMatch:H>=0,score:G}};return t===true?{search:z}:z(t)}}(i));i.jstree.defaults.sort=function(q,p){return this.get_text(q)>this.get_text(p)?1:-1};i.jstree.plugins.sort=function(p,q){this.bind=function(){q.bind.call(this);this.element.on("model.jstree",i.proxy(function(s,r){this.sort(r.parent,true)},this)).on("rename_node.jstree create_node.jstree",i.proxy(function(s,r){this.sort(r.parent||r.node.parent,false);this.redraw_node(r.parent||r.node.parent,true)},this)).on("move_node.jstree copy_node.jstree",i.proxy(function(s,r){this.sort(r.parent,false);this.redraw_node(r.parent,true)},this))};this.sort=function(u,r){var t,s;u=this.get_node(u);if(u&&u.children&&u.children.length){u.children.sort(i.proxy(this.settings.sort,this));if(r){for(t=0,s=u.children_d.length;t<s;t++){this.sort(u.children_d[t],false)}}}}};var n=false;i.jstree.defaults.state={key:"jstree",events:"changed.jstree open_node.jstree close_node.jstree",ttl:false,filter:false};i.jstree.plugins.state=function(p,q){this.bind=function(){q.bind.call(this);var r=i.proxy(function(){this.element.on(this.settings.state.events,i.proxy(function(){if(n){clearTimeout(n)}n=setTimeout(i.proxy(function(){this.save_state()},this),100)},this))},this);this.element.on("ready.jstree",i.proxy(function(t,s){this.element.one("restore_state.jstree",r);if(!this.restore_state()){r()}},this))};this.save_state=function(){var r={state:this.get_state(),ttl:this.settings.state.ttl,sec:+(new Date())};i.vakata.storage.set(this.settings.state.key,JSON.stringify(r))};this.restore_state=function(){var r=i.vakata.storage.get(this.settings.state.key);if(!!r){try{r=JSON.parse(r)}catch(s){return false}}if(!!r&&r.ttl&&r.sec&&+(new Date())-r.sec>r.ttl){return false}if(!!r&&r.state){r=r.state}if(!!r&&i.isFunction(this.settings.state.filter)){r=this.settings.state.filter.call(this,r)}if(!!r){this.element.one("set_state.jstree",function(u,t){t.instance.trigger("restore_state",{state:i.extend(true,{},r)})});this.set_state(r);return true}return false};this.clear_state=function(){return i.vakata.storage.del(this.settings.state.key)}};(function(p,q){p.vakata.storage={set:function(r,s){return window.localStorage.setItem(r,s)},get:function(r){return window.localStorage.getItem(r)},del:function(r){return window.localStorage.removeItem(r)}}}(i));i.jstree.defaults.types={"#":{},"default":{}};i.jstree.plugins.types=function(p,q){this.init=function(u,s){var t,r;if(s&&s.types&&s.types["default"]){for(t in s.types){if(t!=="default"&&t!=="#"&&s.types.hasOwnProperty(t)){for(r in s.types["default"]){if(s.types["default"].hasOwnProperty(r)&&s.types[t][r]===e){s.types[t][r]=s.types["default"][r]}}}}}q.init.call(this,u,s);this._model.data["#"].type="#"};this.refresh=function(s,r){q.refresh.call(this,s,r);this._model.data["#"].type="#"};this.bind=function(){this.element.on("model.jstree",i.proxy(function(x,w){var r=this._model.data,z=w.nodes,v=this.settings.types,u,s,y="default";for(u=0,s=z.length;u<s;u++){y="default";if(r[z[u]].original&&r[z[u]].original.type&&v[r[z[u]].original.type]){y=r[z[u]].original.type}if(r[z[u]].data&&r[z[u]].data.jstree&&r[z[u]].data.jstree.type&&v[r[z[u]].data.jstree.type]){y=r[z[u]].data.jstree.type}r[z[u]].type=y;if(r[z[u]].icon===true&&v[y].icon!==e){r[z[u]].icon=v[y].icon}}r["#"].type="#"},this));q.bind.call(this)};this.get_json=function(x,t,y){var w,s,r=this._model.data,v=t?i.extend(true,{},t,{no_id:false}):{},u=q.get_json.call(this,x,v,y);if(u===false){return false}if(i.isArray(u)){for(w=0,s=u.length;w<s;w++){u[w].type=u[w].id&&r[u[w].id]&&r[u[w].id].type?r[u[w].id].type:"default";if(t&&t.no_id){delete u[w].id;if(u[w].li_attr&&u[w].li_attr.id){delete u[w].li_attr.id}}}}else{u.type=u.id&&r[u.id]&&r[u.id].type?r[u.id].type:"default";if(t&&t.no_id){u=this._delete_ids(u)}}return u};this._delete_ids=function(t){if(i.isArray(t)){for(var s=0,r=t.length;s<r;s++){t[s]=this._delete_ids(t[s])}return t}delete t.id;if(t.li_attr&&t.li_attr.id){delete t.li_attr.id}if(t.children&&i.isArray(t.children)){t.children=this._delete_ids(t.children)}return t};this.check=function(z,u,x,A,y){if(q.check.call(this,z,u,x,A,y)===false){return false}u=u&&u.id?u:this.get_node(u);x=x&&x.id?x:this.get_node(x);var r=u&&u.id?i.jstree.reference(u.id):null,v,w,t,s;r=r&&r._model&&r._model.data?r._model.data:null;switch(z){case"create_node":case"move_node":case"copy_node":if(z!=="move_node"||i.inArray(u.id,x.children)===-1){v=this.get_rules(x);if(v.max_children!==e&&v.max_children!==-1&&v.max_children===x.children.length){this._data.core.last_error={error:"check",plugin:"types",id:"types_01",reason:"max_children prevents function: "+z,data:JSON.stringify({chk:z,pos:A,obj:u&&u.id?u.id:false,par:x&&x.id?x.id:false})};return false}if(v.valid_children!==e&&v.valid_children!==-1&&i.inArray(u.type,v.valid_children)===-1){this._data.core.last_error={error:"check",plugin:"types",id:"types_02",reason:"valid_children prevents function: "+z,data:JSON.stringify({chk:z,pos:A,obj:u&&u.id?u.id:false,par:x&&x.id?x.id:false})};return false}if(r&&u.children_d&&u.parents){w=0;for(t=0,s=u.children_d.length;t<s;t++){w=Math.max(w,r[u.children_d[t]].parents.length)}w=w-u.parents.length+1}if(w<=0||w===e){w=1}do{if(v.max_depth!==e&&v.max_depth!==-1&&v.max_depth<w){this._data.core.last_error={error:"check",plugin:"types",id:"types_03",reason:"max_depth prevents function: "+z,data:JSON.stringify({chk:z,pos:A,obj:u&&u.id?u.id:false,par:x&&x.id?x.id:false})};return false}x=this.get_node(x.parent);v=this.get_rules(x);w++}while(x)}break}return true};this.get_rules=function(s){s=this.get_node(s);if(!s){return false}var r=this.get_type(s,true);if(r.max_depth===e){r.max_depth=-1}if(r.max_children===e){r.max_children=-1}if(r.valid_children===e){r.valid_children=-1}return r};this.get_type=function(r,s){r=this.get_node(r);return(!r)?false:(s?i.extend({type:r.type},this.settings.types[r.type]):r.type)};this.set_type=function(y,w){var u,x,v,s,r;if(i.isArray(y)){y=y.slice();for(x=0,v=y.length;x<v;x++){this.set_type(y[x],w)}return true}u=this.settings.types;y=this.get_node(y);if(!u[w]||!y){return false}s=y.type;r=this.get_icon(y);y.type=w;if(r===true||(u[s]&&u[s].icon&&r===u[s].icon)){this.set_icon(y,u[w].icon!==e?u[w].icon:true)}return true}};i.jstree.defaults.unique={case_sensitive:false,duplicate:function(q,p){return q+" ("+p+")"}};i.jstree.plugins.unique=function(p,q){this.check=function(A,w,x,B,y){if(q.check.call(this,A,w,x,B,y)===false){return false}w=w&&w.id?w:this.get_node(w);x=x&&x.id?x:this.get_node(x);if(!x||!x.children){return true}var r=A==="rename_node"?B:w.text,z=[],C=this.settings.unique.case_sensitive,t=this._model.data,v,u;for(v=0,u=x.children.length;v<u;v++){z.push(C?t[x.children[v]].text:t[x.children[v]].text.toLowerCase())}if(!C){r=r.toLowerCase()}switch(A){case"delete_node":return true;case"rename_node":v=(i.inArray(r,z)===-1||(w.text&&w.text[C?"toString":"toLowerCase"]()===r));if(!v){this._data.core.last_error={error:"check",plugin:"unique",id:"unique_01",reason:"Child with name "+r+" already exists. Preventing: "+A,data:JSON.stringify({chk:A,pos:B,obj:w&&w.id?w.id:false,par:x&&x.id?x.id:false})}}return v;case"create_node":v=(i.inArray(r,z)===-1);if(!v){this._data.core.last_error={error:"check",plugin:"unique",id:"unique_04",reason:"Child with name "+r+" already exists. Preventing: "+A,data:JSON.stringify({chk:A,pos:B,obj:w&&w.id?w.id:false,par:x&&x.id?x.id:false})}}return v;case"copy_node":v=(i.inArray(r,z)===-1);if(!v){this._data.core.last_error={error:"check",plugin:"unique",id:"unique_02",reason:"Child with name "+r+" already exists. Preventing: "+A,data:JSON.stringify({chk:A,pos:B,obj:w&&w.id?w.id:false,par:x&&x.id?x.id:false})}}return v;case"move_node":v=(w.parent===x.id||i.inArray(r,z)===-1);if(!v){this._data.core.last_error={error:"check",plugin:"unique",id:"unique_03",reason:"Child with name "+r+" already exists. Preventing: "+A,data:JSON.stringify({chk:A,pos:B,obj:w&&w.id?w.id:false,par:x&&x.id?x.id:false})}}return v}return true};this.create_node=function(A,u,C,D,B){if(!u||u.text===e){if(A===null){A="#"}A=this.get_node(A);if(!A){return q.create_node.call(this,A,u,C,D,B)}C=C===e?"last":C;if(!C.toString().match(/^(before|after)$/)&&!B&&!this.is_loaded(A)){return q.create_node.call(this,A,u,C,D,B)}if(!u){u={}}var y,r,z,x,w,t=this._model.data,E=this.settings.unique.case_sensitive,v=this.settings.unique.duplicate;r=y=this.get_string("New node");z=[];for(x=0,w=A.children.length;x<w;x++){z.push(E?t[A.children[x]].text:t[A.children[x]].text.toLowerCase())}x=1;while(i.inArray(E?r:r.toLowerCase(),z)!==-1){r=v.call(this,y,(++x)).toString()}u.text=r}return q.create_node.call(this,A,u,C,D,B)}};var b=document.createElement("DIV");b.setAttribute("unselectable","on");b.className="jstree-wholerow";b.innerHTML=" ";i.jstree.plugins.wholerow=function(p,q){this.bind=function(){q.bind.call(this);this.element.on("ready.jstree set_state.jstree",i.proxy(function(){this.hide_dots()},this)).on("init.jstree loading.jstree ready.jstree",i.proxy(function(){this.get_container_ul().addClass("jstree-wholerow-ul")},this)).on("deselect_all.jstree",i.proxy(function(s,r){this.element.find(".jstree-wholerow-clicked").removeClass("jstree-wholerow-clicked")},this)).on("changed.jstree",i.proxy(function(v,u){this.element.find(".jstree-wholerow-clicked").removeClass("jstree-wholerow-clicked");var t=false,s,r;for(s=0,r=u.selected.length;s<r;s++){t=this.get_node(u.selected[s],true);if(t&&t.length){t.children(".jstree-wholerow").addClass("jstree-wholerow-clicked")}}},this)).on("open_node.jstree",i.proxy(function(s,r){this.get_node(r.node,true).find(".jstree-clicked").parent().children(".jstree-wholerow").addClass("jstree-wholerow-clicked")},this)).on("hover_node.jstree dehover_node.jstree",i.proxy(function(s,r){this.get_node(r.node,true).children(".jstree-wholerow")[s.type==="hover_node"?"addClass":"removeClass"]("jstree-wholerow-hovered")},this)).on("contextmenu.jstree",".jstree-wholerow",i.proxy(function(s){s.preventDefault();var r=i.Event("contextmenu",{metaKey:s.metaKey,ctrlKey:s.ctrlKey,altKey:s.altKey,shiftKey:s.shiftKey,pageX:s.pageX,pageY:s.pageY});i(s.currentTarget).closest(".jstree-node").children(".jstree-anchor:eq(0)").trigger(r)},this)).on("click.jstree",".jstree-wholerow",function(s){s.stopImmediatePropagation();var r=i.Event("click",{metaKey:s.metaKey,ctrlKey:s.ctrlKey,altKey:s.altKey,shiftKey:s.shiftKey});i(s.currentTarget).closest(".jstree-node").children(".jstree-anchor:eq(0)").trigger(r).focus()}).on("click.jstree",".jstree-leaf > .jstree-ocl",i.proxy(function(s){s.stopImmediatePropagation();var r=i.Event("click",{metaKey:s.metaKey,ctrlKey:s.ctrlKey,altKey:s.altKey,shiftKey:s.shiftKey});i(s.currentTarget).closest(".jstree-node").children(".jstree-anchor:eq(0)").trigger(r).focus()},this)).on("mouseover.jstree",".jstree-wholerow, .jstree-icon",i.proxy(function(r){r.stopImmediatePropagation();this.hover_node(r.currentTarget);return false},this)).on("mouseleave.jstree",".jstree-node",i.proxy(function(r){this.dehover_node(r.currentTarget)},this))};this.teardown=function(){if(this.settings.wholerow){this.element.find(".jstree-wholerow").remove()}q.teardown.call(this)};this.redraw_node=function(t,r,u){t=q.redraw_node.call(this,t,r,u);if(t){var s=b.cloneNode(true);if(i.inArray(t.id,this._data.core.selected)!==-1){s.className+=" jstree-wholerow-clicked"}t.insertBefore(s,t.childNodes[0])}return t}}}));
\ No newline at end of file
https://bitbucket.org/galaxy/galaxy-central/commits/a5b5351b4cf3/
Changeset: a5b5351b4cf3
User: martenson
Date: 2014-09-08 18:59:10+00:00
Summary: attributions
Affected #: 2 files
diff -r ecf83c3a2d0383c74e30dca41b602854326c7ee7 -r a5b5351b4cf3bf74ccc841d7b8ffe9c859f5d03e lib/galaxy/util/dictobj.py
--- a/lib/galaxy/util/dictobj.py
+++ b/lib/galaxy/util/dictobj.py
@@ -2,6 +2,10 @@
class DictionaryObject(object):
"""
+ Helper class written by William Grim - grimwm
+ Original repo: https://github.com/grimwm/py-dictobj
+ Thank you!
+ ************************
A class that has all the functionality of a normal Python dictionary, except
for the fact it is itself immutable. It also has the added feature of
being able to lookup values by using keys as attributes.
diff -r ecf83c3a2d0383c74e30dca41b602854326c7ee7 -r a5b5351b4cf3bf74ccc841d7b8ffe9c859f5d03e lib/galaxy/util/jstree.py
--- a/lib/galaxy/util/jstree.py
+++ b/lib/galaxy/util/jstree.py
@@ -8,6 +8,11 @@
class Node(dictobj.DictionaryObject):
"""
+ Helper class written by William Grim - grimwm
+ Original repo: https://github.com/grimwm/py-jstree
+ Code adjusted according to the idea of Frank Blechschmidt - FraBle
+ Thank you!
+ ************************
This class exists as a helper to the JSTree. Its "jsonData" method can
generate sub-tree JSON without putting the logic directly into the JSTree.
https://bitbucket.org/galaxy/galaxy-central/commits/a4a6834f4b2f/
Changeset: a4a6834f4b2f
User: martenson
Date: 2014-09-08 19:03:47+00:00
Summary: more attributions
Affected #: 2 files
diff -r a5b5351b4cf3bf74ccc841d7b8ffe9c859f5d03e -r a4a6834f4b2fe443f40235fd6331a7da7fa09d57 lib/galaxy/util/dictobj.py
--- a/lib/galaxy/util/dictobj.py
+++ b/lib/galaxy/util/dictobj.py
@@ -2,6 +2,20 @@
class DictionaryObject(object):
"""
+ Copyright 2012 "Grim Apps"
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
Helper class written by William Grim - grimwm
Original repo: https://github.com/grimwm/py-dictobj
Thank you!
diff -r a5b5351b4cf3bf74ccc841d7b8ffe9c859f5d03e -r a4a6834f4b2fe443f40235fd6331a7da7fa09d57 lib/galaxy/util/jstree.py
--- a/lib/galaxy/util/jstree.py
+++ b/lib/galaxy/util/jstree.py
@@ -8,6 +8,20 @@
class Node(dictobj.DictionaryObject):
"""
+ Copyright 2012 "Grim Apps"
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
Helper class written by William Grim - grimwm
Original repo: https://github.com/grimwm/py-jstree
Code adjusted according to the idea of Frank Blechschmidt - FraBle
https://bitbucket.org/galaxy/galaxy-central/commits/858c12951cfa/
Changeset: 858c12951cfa
User: martenson
Date: 2014-09-16 15:39:17+00:00
Summary: allow admins to paste paths, pack scripts
Affected #: 6 files
diff -r a4a6834f4b2fe443f40235fd6331a7da7fa09d57 -r 858c12951cfa764fb8b948e360b29f8a9e90b89b lib/galaxy/webapps/galaxy/api/lda_datasets.py
--- a/lib/galaxy/webapps/galaxy/api/lda_datasets.py
+++ b/lib/galaxy/webapps/galaxy/api/lda_datasets.py
@@ -435,22 +435,28 @@
link_data = util.string_as_bool( kwd.get( 'link_data', False ) )
source = kwd.get( 'source', None )
- if source not in [ 'userdir_file', 'userdir_folder' ]:
- raise exceptions.RequestParameterMissingException( 'You have to specify "source" parameter. Possible values are "userdir_file" and "userdir_folder". ')
+ if source not in [ 'userdir_file', 'userdir_folder', 'admin_path' ]:
+ raise exceptions.RequestParameterMissingException( 'You have to specify "source" parameter. Possible values are "userdir_file", "userdir_folder" and "admin_path". ')
- user_login = trans.user.email
- user_base_dir = trans.app.config.user_library_import_dir
- if user_base_dir is None:
- raise exceptions.ConfigDoesNotAllowException( 'The configuration of this Galaxy instance does not allow upload from user directories.' )
- full_dir = os.path.join( user_base_dir, user_login )
- # path_to_root_import_folder = None
- if not path.lower().startswith( full_dir.lower() ):
- # path_to_root_import_folder = path
- path = os.path.join( full_dir, path )
- if not os.path.exists( path ):
- raise exceptions.RequestParameterInvalidException( 'Given path does not exist on the host.' )
- if not self.folder_manager.can_add_item( trans, folder ):
- raise exceptions.InsufficientPermissionsException( 'You do not have proper permission to add items to the given folder.' )
+ if source in [ 'userdir_file', 'userdir_folder' ]:
+ user_login = trans.user.email
+ user_base_dir = trans.app.config.user_library_import_dir
+ if user_base_dir is None:
+ raise exceptions.ConfigDoesNotAllowException( 'The configuration of this Galaxy instance does not allow upload from user directories.' )
+ full_dir = os.path.join( user_base_dir, user_login )
+ # path_to_root_import_folder = None
+ if not path.lower().startswith( full_dir.lower() ):
+ # path_to_root_import_folder = path
+ path = os.path.join( full_dir, path )
+ if not os.path.exists( path ):
+ raise exceptions.RequestParameterInvalidException( 'Given path does not exist on the host.' )
+ if not self.folder_manager.can_add_item( trans, folder ):
+ raise exceptions.InsufficientPermissionsException( 'You do not have proper permission to add items to the given folder.' )
+ if source == 'admin_path':
+ if not trans.app.config.allow_library_path_paste:
+ raise exceptions.ConfigDoesNotAllowException( 'The configuration of this Galaxy instance does not allow admins to import into library from path.' )
+ if not trans.user_is_admin:
+ raise exceptions.AdminRequiredException( 'Only admins can import from path.' )
# Set up the traditional tool state/params
tool_id = 'upload1'
@@ -466,24 +472,32 @@
abspath_datasets = []
kwd[ 'filesystem_paths' ] = path
params = util.Params( kwd )
- # file only
+ # user wants to import one file only
if source == "userdir_file":
file = os.path.abspath( path )
abspath_datasets.append( trans.webapp.controllers[ 'library_common' ].make_library_uploaded_dataset(
trans, 'api', params, os.path.basename( file ), file, 'server_dir', library_bunch ) )
- # whole folder
+ # user wants to import whole folder
if source == "userdir_folder":
# import_folder_root = [next(part for part in path.split(os.path.sep) if part) for path in [os.path.splitdrive(path_to_root_import_folder)[1]]]
# new_folder = self.folder_manager.create( trans, folder_id, import_folder_root[0] )
uploaded_datasets_bunch = trans.webapp.controllers[ 'library_common' ].get_path_paste_uploaded_datasets(
trans, 'api', params, library_bunch, 200, '' )
-
uploaded_datasets = uploaded_datasets_bunch[0]
if uploaded_datasets is None:
- # TODO no files found - only create folders
- return False
-
+ raise exceptions.ObjectNotFound( 'Given folder does not contain any datasets.' )
+ for ud in uploaded_datasets:
+ ud.path = os.path.abspath( ud.path )
+ abspath_datasets.append( ud )
+ # user wants to import from path (admins only)
+ if source == "admin_path":
+ # validate the path is within root
+ uploaded_datasets_bunch = trans.webapp.controllers[ 'library_common' ].get_path_paste_uploaded_datasets(
+ trans, 'api', params, library_bunch, 200, '' )
+ uploaded_datasets = uploaded_datasets_bunch[0]
+ if uploaded_datasets is None:
+ raise exceptions.ObjectNotFound( 'Given folder does not contain any datasets.' )
for ud in uploaded_datasets:
ud.path = os.path.abspath( ud.path )
abspath_datasets.append( ud )
diff -r a4a6834f4b2fe443f40235fd6331a7da7fa09d57 -r 858c12951cfa764fb8b948e360b29f8a9e90b89b static/scripts/mvc/library/library-foldertoolbar-view.js
--- a/static/scripts/mvc/library/library-foldertoolbar-view.js
+++ b/static/scripts/mvc/library/library-foldertoolbar-view.js
@@ -199,10 +199,9 @@
},
/**
- * import all selected datasets into history
+ * Import all selected datasets into history.
*/
importAllIntoHistory : function (){
- // disable the button to prevent multiple submission
this.modal.disableButton('Import');
// init the control counters
@@ -288,7 +287,11 @@
$('.completion_span').text(txt_representation);
},
- // download selected datasets
+ /**
+ * download selected datasets
+ * @param {str} folder_id id of the current folder
+ * @param {str} format requested archive format
+ */
download : function(folder_id, format){
var dataset_ids = [];
$('#folder_table').find(':checked').each(function(){
@@ -296,29 +299,34 @@
dataset_ids.push(this.parentElement.parentElement.id);
}
});
-
var url = '/api/libraries/datasets/download/' + format;
var data = {'ldda_ids' : dataset_ids};
this.processDownload(url, data, 'get');
},
- // create hidden form and submit through POST to initialize download
+ /**
+ * Create hidden form and submit it through POST
+ * to initialize the download.
+ * @param {str} url url to call
+ * @param {obj} data data to include in the request
+ * @param {str} method method of the request
+ */
processDownload: function(url, data, method){
- //url and data options required
- if( url && data ){
- //data can be string of parameters or array/object
- data = typeof data === 'string' ? data : $.param(data);
- //split params into form inputs
- var inputs = '';
- $.each(data.split('&'), function(){
- var pair = this.split('=');
- inputs+='<input type="hidden" name="'+ pair[0] +'" value="'+ pair[1] +'" />';
- });
- //send request
- $('<form action="'+ url +'" method="'+ (method||'post') +'">'+inputs+'</form>')
- .appendTo('body').submit().remove();
-
- mod_toastr.info('Your download will begin soon');
+ if ( url && data ){
+ // data can be string of parameters or array/object
+ data = typeof data === 'string' ? data : $.param(data);
+ // split params into form inputs
+ var inputs = '';
+ $.each(data.split('&'), function(){
+ var pair = this.split('=');
+ inputs+='<input type="hidden" name="'+ pair[0] +'" value="'+ pair[1] +'" />';
+ });
+ // send request
+ $('<form action="'+ url +'" method="'+ (method||'post') +'">'+inputs+'</form>')
+ .appendTo('body').submit().remove();
+ mod_toastr.info('Your download will begin soon');
+ } else {
+ mod_toastr.error('An error occurred :(');
}
},
@@ -352,6 +360,33 @@
});
},
+ /**
+ * Create modal for importing from Galaxy path.
+ * This feature is admin-only.
+ */
+ importFilesFromPathModal: function(){
+ var that = this;
+ this.modal = Galaxy.modal;
+ var template_modal = this.templateImportPathModal();
+ this.modal.show({
+ closing_events : true,
+ title : 'Enter paths relative to Galaxy root',
+ body : template_modal({}),
+ buttons : {
+ 'Import' : function() {that.importFromPathsClicked(that);},
+ 'Close' : function() {Galaxy.modal.hide();}
+ },
+ closing_callback: function(){
+ // TODO: should not trigger routes outside of the router
+ Galaxy.libraries.library_router.navigate('folders/' + that.id, {trigger: true});
+ }
+ });
+ },
+
+ /**
+ * Create modal for importing form user's directory
+ * on Galaxy. Bind jQuery events.
+ */
importFilesFromUserdirModal: function(){
var that = this;
this.modal = Galaxy.modal;
@@ -373,23 +408,28 @@
$('input[type=radio]').change(function(event){
if (event.target.value ==='jstree-disable-folders') {
+ that.renderJstree({disabled_jstree_element: 'folders'});
$('.jstree-folders-message').hide();
$('.jstree-preserve-structure').hide();
$('.jstree-link-files').hide();
$('.jstree-files-message').show();
-
- that.renderJstree({disabled_jstree_element: 'folders'});
} else if (event.target.value ==='jstree-disable-files'){
- that.renderJstree({disabled_jstree_element: 'files'});
$('.jstree-files-message').hide();
$('.jstree-folders-message').show();
$('.jstree-link-files').show();
$('.jstree-preserve-structure').show();
+ that.renderJstree({disabled_jstree_element: 'files'});
}
}
);
},
+ /**
+ * Fetch the contents of user directory on Galaxy
+ * and render jstree component based on received
+ * data.
+ * @param {[type]} options [description]
+ */
renderJstree: function(options){
var that = this;
this.options = _.extend(this.options, options);
@@ -427,13 +467,51 @@
})
},
- importFoldersFromUserdir: function(){
-
+ /**
+ * Take the paths from the textarea, split it, create
+ * a request queue and call a function that starts sending
+ * one by one to be imported on the server.
+ */
+ importFromPathsClicked: function(){
+ var preserve_dirs = this.modal.$el.find('.preserve-checkbox').is(':checked');
+ var link_data = this.modal.$el.find('.link-checkbox').is(':checked');
+ var paths = $('textarea#import_paths').val();
+ if (!paths){
+ mod_toastr.info('Please enter a path relative to Galaxy root');
+ } else {
+ this.modal.disableButton('Import');
+ paths = paths.split('\n');
+ var valid_paths = [];
+ for (var i = paths.length - 1; i >= 0; i--) {
+ trimmed = paths[i].trim();
+ if (trimmed.length!==0){
+ valid_paths.push(trimmed);
+ }
+ };
+ this.initChainCallControl(valid_paths.length);
+ this.chainCallImportingFolders(valid_paths, preserve_dirs, link_data, 'admin_path');
+ }
},
+ /**
+ * Initialize the control of chaining requests
+ * in the current modal.
+ */
+ initChainCallControl: function(length){
+ var progress_bar_tmpl = this.templateAddingDatasetsProgressBar();
+ this.modal.$el.find('.modal-body').html(progress_bar_tmpl({ folder_name : this.options.folder_name }));
+ this.progress = 0;
+ this.progressStep = 100 / length;
+ this.options.chain_call_control.total_number = length;
+ this.options.chain_call_control.failed_number = 0;
+ },
- // add all selected datasets from user directory into current folder
- importFromUserdirClicked : function (that){
+ /**
+ * Take the selected items from the jstree, create a request queue
+ * and send them one by one to the server for importing into
+ * the current folder.
+ */
+ importFromUserdirClicked: function (that){
var selected_nodes = $('#jstree_browser').jstree().get_selected(true);
var preserve_dirs = this.modal.$el.find('.preserve-checkbox').is(':checked');
var link_data = this.modal.$el.find('.link-checkbox').is(':checked');
@@ -443,7 +521,7 @@
} else {
// disable the button to prevent multiple submission
this.modal.disableButton('Import');
- // init the control counters
+ // init the chain control counters
this.options.chain_call_control.total_number = 0;
this.options.chain_call_control.failed_number = 0;
@@ -452,9 +530,8 @@
paths.push(selected_nodes[i].li_attr.full_path);
}
}
- var folder_name = this.options.folder_name;
var progress_bar_tmpl = this.templateAddingDatasetsProgressBar();
- this.modal.$el.find('.modal-body').html(progress_bar_tmpl({ folder_name : folder_name }));
+ this.modal.$el.find('.modal-body').html(progress_bar_tmpl({ folder_name : this.options.folder_name }));
// init the progress bar
this.progressStep = 100 / paths.length;
@@ -464,13 +541,18 @@
var selection_type = selected_nodes[0].type;
// call the recursive function to call ajax one after each other (request FIFO queue)
if (selection_type === 'folder'){
- this.chainCallImportingUserdirFolders(paths, preserve_dirs, link_data);
+ this.chainCallImportingFolders(paths, preserve_dirs, link_data, 'userdir_folder');
} else if (selection_type === 'file'){
this.chainCallImportingUserdirFiles(paths);
}
}
},
+ /**
+ * Take the array of paths and createa request for each of them
+ * calling them in chain. Update the progress bar in between each.
+ * @param {array} paths paths relative to user folder on Galaxy
+ */
chainCallImportingUserdirFiles: function(paths){
var that = this;
var popped_item = paths.pop();
@@ -483,21 +565,30 @@
}
return true;
}
- var promise = $.when($.post('/api/libraries/datasets?encoded_folder_id=' + that.id + '&source=userdir_file&path=' + popped_item))
+ var promise = $.when($.post('/api/libraries/datasets?encoded_folder_id=' + that.id +
+ '&source=userdir_file' +
+ '&path=' + popped_item))
promise.done(function(response){
- // we are fine
that.updateProgress();
that.chainCallImportingUserdirFiles(paths);
})
.fail(function(){
- // we have a problem
that.options.chain_call_control.failed_number += 1;
that.updateProgress();
that.chainCallImportingUserdirFiles(paths);
});
},
- chainCallImportingUserdirFolders: function(paths, preserve_dirs, link_data){
+ /**
+ * Take the array of paths and createa request for each of them
+ * calling them in chain. Update the progress bar in between each.
+ * @param {array} paths paths relative to Galaxy root folder
+ * @param {boolean} preserve_dirs indicates whether to preserve folder structure
+ * @param {boolean} link_data copy files to Galaxy or link instead
+ * @param {str} source string representing what type of folder
+ * is the source of import
+ */
+ chainCallImportingFolders: function(paths, preserve_dirs, link_data, source){
// need to check which paths to call
var that = this;
var popped_item = paths.pop();
@@ -508,23 +599,20 @@
} else {
mod_toastr.error('Something went wrong :(');
}
- return true;
}
var promise = $.when($.post('/api/libraries/datasets?encoded_folder_id=' + that.id +
- '&source=userdir_folder' +
+ '&source=' + source +
'&path=' + popped_item +
'&preserve_dirs=' + preserve_dirs +
- '&link_data=' + link_data ))
+ '&link_data=' + link_data))
promise.done(function(response){
- // we are fine
that.updateProgress();
- that.chainCallImportingUserdirFolders(paths);
+ that.chainCallImportingFolders(paths, preserve_dirs, link_data, source);
})
.fail(function(){
- // we have a problem
that.options.chain_call_control.failed_number += 1;
that.updateProgress();
- that.chainCallImportingUserdirFolders(paths);
+ that.chainCallImportingFolders(paths, preserve_dirs, link_data, source);
});
},
@@ -566,9 +654,8 @@
history_dataset_ids.push(hid);
}
});
- var folder_name = this.options.folder_name;
var progress_bar_tmpl = this.templateAddingDatasetsProgressBar();
- this.modal.$el.find('.modal-body').html(progress_bar_tmpl({ folder_name : folder_name }));
+ this.modal.$el.find('.modal-body').html(progress_bar_tmpl({ folder_name : this.options.folder_name }));
// init the progress bar
this.progressStep = 100 / history_dataset_ids.length;
@@ -759,7 +846,7 @@
case "importdir":
break;
case "path":
- mod_toastr.info('Coming soon.');
+ this.importFilesFromPathModal();
break;
case "userdir":
this.importFilesFromUserdirModal();
@@ -961,6 +1048,30 @@
return _.template(tmpl_array.join(''));
},
+ templateImportPathModal: function(){
+ var tmpl_array = [];
+
+ tmpl_array.push('<div id="file_browser_modal">');
+
+ tmpl_array.push('<label class="checkbox-inline jstree-preserve-structure">');
+ tmpl_array.push(' <input class="preserve-checkbox" type="checkbox" value="preserve_directory_structure">');
+ tmpl_array.push('Preserve directory structure');
+ tmpl_array.push(' </label>');
+
+ tmpl_array.push('<label class="checkbox-inline jstree-link-files">');
+ tmpl_array.push(' <input class="link-checkbox" type="checkbox" value="link_files">');
+ tmpl_array.push('Link files instead of copying');
+ tmpl_array.push(' </label>');
+ tmpl_array.push('</div>');
+
+ tmpl_array.push('<div class="alert alert-info jstree-folders-message">All files within the given folders and their subfolders will be imported into the current folder.</div>');
+
+ tmpl_array.push('<textarea id="import_paths" class="form-control" rows="5" placeholder="Paths separated by newline"></textarea>');
+ tmpl_array.push('</div>');
+
+ return _.template(tmpl_array.join(''));
+ },
+
templateAddFilesFromHistory: function (){
var tmpl_array = [];
diff -r a4a6834f4b2fe443f40235fd6331a7da7fa09d57 -r 858c12951cfa764fb8b948e360b29f8a9e90b89b static/scripts/packed/galaxy.library.js
--- a/static/scripts/packed/galaxy.library.js
+++ b/static/scripts/packed/galaxy.library.js
@@ -1,1 +1,1 @@
-define(["galaxy.masthead","utils/utils","libs/toastr","mvc/base-mvc","mvc/library/library-model","mvc/library/library-folderlist-view","mvc/library/library-librarylist-view","mvc/library/library-librarytoolbar-view","mvc/library/library-foldertoolbar-view","mvc/library/library-dataset-view","mvc/library/library-library-view","mvc/library/library-folder-view"],function(h,e,j,n,k,c,i,g,l,f,b,a){var o=Backbone.Router.extend({initialize:function(){this.routesHit=0;Backbone.history.on("route",function(){this.routesHit++},this)},routes:{"":"libraries","library/:library_id/permissions":"library_permissions","folders/:folder_id/permissions":"folder_permissions","folders/:id":"folder_content","folders/:folder_id/datasets/:dataset_id":"dataset_detail","folders/:folder_id/datasets/:dataset_id/permissions":"dataset_permissions","folders/:folder_id/datasets/:dataset_id/versions/:ldda_id":"dataset_version","folders/:folder_id/download/:format":"download"},back:function(){if(this.routesHit>1){window.history.back()}else{this.navigate("#",{trigger:true,replace:true})}}});var m=n.SessionStorageModel.extend({defaults:{with_deleted:false,sort_order:"asc",sort_by:"name"}});var d=Backbone.View.extend({libraryToolbarView:null,libraryListView:null,library_router:null,libraryView:null,folderToolbarView:null,folderListView:null,datasetView:null,initialize:function(){Galaxy.libraries=this;this.preferences=new m({id:"global-lib-prefs"});this.library_router=new o();this.library_router.on("route:libraries",function(){Galaxy.libraries.libraryToolbarView=new g.LibraryToolbarView();Galaxy.libraries.libraryListView=new i.LibraryListView()});this.library_router.on("route:folder_content",function(p){if(Galaxy.libraries.folderToolbarView){Galaxy.libraries.folderToolbarView.$el.unbind("click")}Galaxy.libraries.folderToolbarView=new l.FolderToolbarView({id:p});Galaxy.libraries.folderListView=new c.FolderListView({id:p})});this.library_router.on("route:download",function(p,q){if($("#folder_list_body").find(":checked").length===0){j.info("You have to select some datasets to download");Galaxy.libraries.library_router.navigate("folders/"+p,{trigger:true,replace:true})}else{Galaxy.libraries.folderToolbarView.download(p,q);Galaxy.libraries.library_router.navigate("folders/"+p,{trigger:false,replace:true})}});this.library_router.on("route:dataset_detail",function(q,p){if(Galaxy.libraries.datasetView){Galaxy.libraries.datasetView.$el.unbind("click")}Galaxy.libraries.datasetView=new f.LibraryDatasetView({id:p})});this.library_router.on("route:dataset_version",function(q,p,r){if(Galaxy.libraries.datasetView){Galaxy.libraries.datasetView.$el.unbind("click")}Galaxy.libraries.datasetView=new f.LibraryDatasetView({id:p,ldda_id:r,show_version:true})});this.library_router.on("route:dataset_permissions",function(q,p){if(Galaxy.libraries.datasetView){Galaxy.libraries.datasetView.$el.unbind("click")}Galaxy.libraries.datasetView=new f.LibraryDatasetView({id:p,show_permissions:true})});this.library_router.on("route:library_permissions",function(p){if(Galaxy.libraries.libraryView){Galaxy.libraries.libraryView.$el.unbind("click")}Galaxy.libraries.libraryView=new b.LibraryView({id:p,show_permissions:true})});this.library_router.on("route:folder_permissions",function(p){if(Galaxy.libraries.folderView){Galaxy.libraries.folderView.$el.unbind("click")}Galaxy.libraries.folderView=new a.FolderView({id:p,show_permissions:true})});Backbone.history.start({pushState:false})}});return{GalaxyApp:d}});
\ No newline at end of file
+define(["galaxy.masthead","utils/utils","libs/toastr","mvc/base-mvc","mvc/library/library-model","mvc/library/library-folderlist-view","mvc/library/library-librarylist-view","mvc/library/library-librarytoolbar-view","mvc/library/library-foldertoolbar-view","mvc/library/library-dataset-view","mvc/library/library-library-view","mvc/library/library-folder-view"],function(h,e,j,n,k,c,i,g,l,f,b,a){var o=Backbone.Router.extend({initialize:function(){this.routesHit=0;Backbone.history.on("route",function(){this.routesHit++},this)},routes:{"":"libraries","library/:library_id/permissions":"library_permissions","folders/:folder_id/permissions":"folder_permissions","folders/:id":"folder_content","folders/:folder_id/datasets/:dataset_id":"dataset_detail","folders/:folder_id/datasets/:dataset_id/permissions":"dataset_permissions","folders/:folder_id/datasets/:dataset_id/versions/:ldda_id":"dataset_version","folders/:folder_id/download/:format":"download","folders/:folder_id/import/:source":"import_datasets"},back:function(){if(this.routesHit>1){window.history.back()}else{this.navigate("#",{trigger:true,replace:true})}}});var m=n.SessionStorageModel.extend({defaults:{with_deleted:false,sort_order:"asc",sort_by:"name"}});var d=Backbone.View.extend({libraryToolbarView:null,libraryListView:null,library_router:null,libraryView:null,folderToolbarView:null,folderListView:null,datasetView:null,initialize:function(){Galaxy.libraries=this;this.preferences=new m({id:"global-lib-prefs"});this.library_router=new o();this.library_router.on("route:libraries",function(){Galaxy.libraries.libraryToolbarView=new g.LibraryToolbarView();Galaxy.libraries.libraryListView=new i.LibraryListView()});this.library_router.on("route:folder_content",function(p){if(Galaxy.libraries.folderToolbarView){Galaxy.libraries.folderToolbarView.$el.unbind("click")}Galaxy.libraries.folderToolbarView=new l.FolderToolbarView({id:p});Galaxy.libraries.folderListView=new c.FolderListView({id:p})});this.library_router.on("route:download",function(p,q){if($("#folder_list_body").find(":checked").length===0){j.info("You have to select some datasets to download");Galaxy.libraries.library_router.navigate("folders/"+p,{trigger:true,replace:true})}else{Galaxy.libraries.folderToolbarView.download(p,q);Galaxy.libraries.library_router.navigate("folders/"+p,{trigger:false,replace:true})}});this.library_router.on("route:dataset_detail",function(q,p){if(Galaxy.libraries.datasetView){Galaxy.libraries.datasetView.$el.unbind("click")}Galaxy.libraries.datasetView=new f.LibraryDatasetView({id:p})});this.library_router.on("route:dataset_version",function(q,p,r){if(Galaxy.libraries.datasetView){Galaxy.libraries.datasetView.$el.unbind("click")}Galaxy.libraries.datasetView=new f.LibraryDatasetView({id:p,ldda_id:r,show_version:true})});this.library_router.on("route:dataset_permissions",function(q,p){if(Galaxy.libraries.datasetView){Galaxy.libraries.datasetView.$el.unbind("click")}Galaxy.libraries.datasetView=new f.LibraryDatasetView({id:p,show_permissions:true})});this.library_router.on("route:library_permissions",function(p){if(Galaxy.libraries.libraryView){Galaxy.libraries.libraryView.$el.unbind("click")}Galaxy.libraries.libraryView=new b.LibraryView({id:p,show_permissions:true})});this.library_router.on("route:folder_permissions",function(p){if(Galaxy.libraries.folderView){Galaxy.libraries.folderView.$el.unbind("click")}Galaxy.libraries.folderView=new a.FolderView({id:p,show_permissions:true})});this.library_router.on("route:import_datasets",function(p,q){if(Galaxy.libraries.folderToolbarView&&Galaxy.libraries.folderListView){Galaxy.libraries.folderToolbarView.showImportModal({source:q})}else{Galaxy.libraries.folderToolbarView=new l.FolderToolbarView({id:p});Galaxy.libraries.folderListView=new c.FolderListView({id:p});Galaxy.libraries.folderToolbarView.showImportModal({source:q})}});Backbone.history.start({pushState:false})}});return{GalaxyApp:d}});
\ No newline at end of file
diff -r a4a6834f4b2fe443f40235fd6331a7da7fa09d57 -r 858c12951cfa764fb8b948e360b29f8a9e90b89b static/scripts/packed/mvc/library/library-foldertoolbar-view.js
--- a/static/scripts/packed/mvc/library/library-foldertoolbar-view.js
+++ b/static/scripts/packed/mvc/library/library-foldertoolbar-view.js
@@ -1,1 +1,1 @@
-define(["galaxy.masthead","utils/utils","libs/toastr","mvc/library/library-model"],function(b,d,e,c){var a=Backbone.View.extend({el:"#center",events:{"click #toolbtn_create_folder":"createFolderFromModal","click #toolbtn_bulk_import":"modalBulkImport","click .toolbtn_add_files":"addFilesToFolderModal","click #include_deleted_datasets_chk":"checkIncludeDeleted","click #toolbtn_show_libinfo":"showLibInfo","click #toolbtn_bulk_delete":"deleteSelectedDatasets"},defaults:{can_add_library_item:false,contains_file:false,chain_call_control:{total_number:0,failed_number:0}},modal:null,histories:null,initialize:function(f){this.options=_.defaults(f||{},this.defaults);this.render()},render:function(g){this.options=_.extend(this.options,g);var i=false;var f=true;if(Galaxy.currUser){i=Galaxy.currUser.isAdmin();f=Galaxy.currUser.isAnonymous()}var h=this.templateToolBar();this.$el.html(h({id:this.options.id,admin_user:i,anonym:f}))},configureElements:function(f){this.options=_.extend(this.options,f);if(this.options.can_add_library_item===true){$(".add-library-items").show()}else{$(".add-library-items").hide()}if(this.options.contains_file===true){if(Galaxy.currUser){if(!Galaxy.currUser.isAnonymous()){$(".logged-dataset-manipulation").show();$(".dataset-manipulation").show()}else{$(".dataset-manipulation").show();$(".logged-dataset-manipulation").hide()}}else{$(".logged-dataset-manipulation").hide();$(".dataset-manipulation").hide()}}else{$(".logged-dataset-manipulation").hide();$(".dataset-manipulation").hide()}this.$el.find("[data-toggle]").tooltip()},createFolderFromModal:function(h){h.preventDefault();h.stopPropagation();var f=this;var g=this.templateNewFolderInModal();this.modal=Galaxy.modal;this.modal.show({closing_events:true,title:"Create New Folder",body:g(),buttons:{Create:function(){f.create_new_folder_event()},Close:function(){Galaxy.modal.hide()}}})},create_new_folder_event:function(){var f=this.serialize_new_folder();if(this.validate_new_folder(f)){var g=new c.FolderAsModel();url_items=Backbone.history.fragment.split("/");current_folder_id=url_items[url_items.length-1];g.url=g.urlRoot+"/"+current_folder_id;g.save(f,{success:function(h){Galaxy.modal.hide();e.success("Folder created");h.set({type:"folder"});Galaxy.libraries.folderListView.collection.add(h)},error:function(i,h){Galaxy.modal.hide();if(typeof h.responseJSON!=="undefined"){e.error(h.responseJSON.err_msg)}else{e.error("An error ocurred :(")}}})}else{e.error("Folder's name is missing")}return false},serialize_new_folder:function(){return{name:$("input[name='Name']").val(),description:$("input[name='Description']").val()}},validate_new_folder:function(f){return f.name!==""},modalBulkImport:function(){var f=$("#folder_table").find(":checked");if(f.length===0){e.info("You have to select some datasets first")}else{this.refreshUserHistoriesList(function(g){var h=g.templateBulkImportInModal();g.modal=Galaxy.modal;g.modal.show({closing_events:true,title:"Import into History",body:h({histories:g.histories.models}),buttons:{Import:function(){g.importAllIntoHistory()},Close:function(){Galaxy.modal.hide()}}})})}},refreshUserHistoriesList:function(g){var f=this;this.histories=new c.GalaxyHistories();this.histories.fetch({success:function(){g(f)},error:function(i,h){if(typeof h.responseJSON!=="undefined"){e.error(h.responseJSON.err_msg)}else{e.error("An error ocurred :(")}}})},importAllIntoHistory:function(){this.modal.disableButton("Import");this.options.chain_call_control.total_number=0;this.options.chain_call_control.failed_number=0;var j=$("select[name=dataset_import_bulk] option:selected").val();this.options.last_used_history_id=j;var m=$("select[name=dataset_import_bulk] option:selected").text();var o=[];$("#folder_table").find(":checked").each(function(){if(this.parentElement.parentElement.id!==""){o.push(this.parentElement.parentElement.id)}});var n=this.templateImportIntoHistoryProgressBar();this.modal.$el.find(".modal-body").html(n({history_name:m}));var k=100/o.length;this.initProgress(k);var f=[];for(var g=o.length-1;g>=0;g--){var h=o[g];var l=new c.HistoryItem();l.url=l.urlRoot+j+"/contents";l.content=h;l.source="library";f.push(l)}this.options.chain_call_control.total_number=f.length;jQuery.getJSON(galaxy_config.root+"history/set_as_current?id="+historyId);this.chainCall(f,m)},chainCall:function(g,j){var f=this;var h=g.pop();if(typeof h==="undefined"){if(this.options.chain_call_control.failed_number===0){e.success("Selected datasets imported into history. Click this to start analysing it.","",{onclick:function(){window.location="/"}})}else{if(this.options.chain_call_control.failed_number===this.options.chain_call_control.total_number){e.error("There was an error and no datasets were imported into history.")}else{if(this.options.chain_call_control.failed_number<this.options.chain_call_control.total_number){e.warning("Some of the datasets could not be imported into history. Click this to see what was imported.","",{onclick:function(){window.location="/"}})}}}Galaxy.modal.hide();return}var i=$.when(h.save({content:h.content,source:h.source}));i.done(function(){f.updateProgress();f.chainCall(g,j)}).fail(function(){f.options.chain_call_control.failed_number+=1;f.updateProgress();f.chainCall(g,j)})},initProgress:function(f){this.progress=0;this.progressStep=f},updateProgress:function(){this.progress+=this.progressStep;$(".progress-bar-import").width(Math.round(this.progress)+"%");txt_representation=Math.round(this.progress)+"% Complete";$(".completion_span").text(txt_representation)},download:function(f,j){var h=[];$("#folder_table").find(":checked").each(function(){if(this.parentElement.parentElement.id!==""){h.push(this.parentElement.parentElement.id)}});var g="/api/libraries/datasets/download/"+j;var i={ldda_ids:h};this.processDownload(g,i,"get")},processDownload:function(g,h,i){if(g&&h){h=typeof h==="string"?h:$.param(h);var f="";$.each(h.split("&"),function(){var j=this.split("=");f+='<input type="hidden" name="'+j[0]+'" value="'+j[1]+'" />'});$('<form action="'+g+'" method="'+(i||"post")+'">'+f+"</form>").appendTo("body").submit().remove();e.info("Your download will begin soon")}},addFilesToFolderModal:function(){this.refreshUserHistoriesList(function(f){f.modal=Galaxy.modal;var g=f.templateAddFilesInModal();var h=f.options.full_path[f.options.full_path.length-1][1];f.modal.show({closing_events:true,title:"Add datasets from history to "+h,body:g({histories:f.histories.models}),buttons:{Add:function(){f.addAllDatasetsFromHistory()},Close:function(){Galaxy.modal.hide()}}});if(f.histories.models.length>0){f.fetchAndDisplayHistoryContents(f.histories.models[0].id);$("#dataset_add_bulk").change(function(i){f.fetchAndDisplayHistoryContents(i.target.value)})}else{e.error("An error ocurred :(")}})},fetchAndDisplayHistoryContents:function(h){var g=new c.HistoryContents({id:h});var f=this;g.fetch({success:function(j){var i=f.templateHistoryContents();f.histories.get(h).set({contents:j});f.modal.$el.find("#selected_history_content").html(i({history_contents:j.models.reverse()}))},error:function(j,i){if(typeof i.responseJSON!=="undefined"){e.error(i.responseJSON.err_msg)}else{e.error("An error ocurred :(")}}})},addAllDatasetsFromHistory:function(){this.modal.disableButton("Add");this.options.chain_call_control.total_number=0;this.options.chain_call_control.failed_number=0;var f=[];this.modal.$el.find("#selected_history_content").find(":checked").each(function(){var i=$(this.parentElement).data("id");if(i){f.push(i)}});var l=this.options.folder_name;var k=this.templateAddingDatasetsProgressBar();this.modal.$el.find(".modal-body").html(k({folder_name:l}));this.progressStep=100/f.length;this.progress=0;var j=[];for(var h=f.length-1;h>=0;h--){history_dataset_id=f[h];var g=new c.Item();g.url="/api/folders/"+this.options.id+"/contents";g.set({from_hda_id:history_dataset_id});j.push(g)}this.options.chain_call_control.total_number=j.length;this.chainCallAddingHdas(j)},chainCallAddingHdas:function(g){var f=this;this.added_hdas=new c.Folder();var h=g.pop();if(typeof h==="undefined"){if(this.options.chain_call_control.failed_number===0){e.success("Selected datasets from history added to the folder")}else{if(this.options.chain_call_control.failed_number===this.options.chain_call_control.total_number){e.error("There was an error and no datasets were added to the folder.")}else{if(this.options.chain_call_control.failed_number<this.options.chain_call_control.total_number){e.warning("Some of the datasets could not be added to the folder")}}}Galaxy.modal.hide();return this.added_hdas}var i=$.when(h.save({from_hda_id:h.get("from_hda_id")}));i.done(function(j){Galaxy.libraries.folderListView.collection.add(j);f.updateProgress();f.chainCallAddingHdas(g)}).fail(function(){f.options.chain_call_control.failed_number+=1;f.updateProgress();f.chainCallAddingHdas(g)})},checkIncludeDeleted:function(f){if(f.target.checked){Galaxy.libraries.folderListView.fetchFolder({include_deleted:true})}else{Galaxy.libraries.folderListView.fetchFolder({include_deleted:false})}},deleteSelectedDatasets:function(){var f=$("#folder_table").find(":checked");if(f.length===0){e.info("You have to select some datasets first")}else{var j=this.templateDeletingDatasetsProgressBar();this.modal=Galaxy.modal;this.modal.show({closing_events:true,title:"Deleting selected datasets",body:j({}),buttons:{Close:function(){Galaxy.modal.hide()}}});this.options.chain_call_control.total_number=0;this.options.chain_call_control.failed_number=0;var g=[];f.each(function(){if(this.parentElement.parentElement.id!==""){g.push(this.parentElement.parentElement.id)}});this.progressStep=100/g.length;this.progress=0;var l=[];for(var h=g.length-1;h>=0;h--){var k=new c.Item({id:g[h]});l.push(k)}this.options.chain_call_control.total_number=g.length;this.chainCallDeletingHdas(l)}},chainCallDeletingHdas:function(g){var f=this;this.deleted_lddas=new c.Folder();var h=g.pop();if(typeof h==="undefined"){if(this.options.chain_call_control.failed_number===0){e.success("Selected datasets deleted")}else{if(this.options.chain_call_control.failed_number===this.options.chain_call_control.total_number){e.error("There was an error and no datasets were deleted.")}else{if(this.options.chain_call_control.failed_number<this.options.chain_call_control.total_number){e.warning("Some of the datasets could not be deleted")}}}Galaxy.modal.hide();return this.deleted_lddas}var i=$.when(h.destroy());i.done(function(k){Galaxy.libraries.folderListView.collection.remove(h.id);f.updateProgress();if(Galaxy.libraries.folderListView.options.include_deleted){var j=new c.Item(k);Galaxy.libraries.folderListView.collection.add(j)}f.chainCallDeletingHdas(g)}).fail(function(){f.options.chain_call_control.failed_number+=1;f.updateProgress();f.chainCallDeletingHdas(g)})},showLibInfo:function(){var g=Galaxy.libraries.folderListView.folderContainer.attributes.metadata.parent_library_id;var f=null;var h=this;if(Galaxy.libraries.libraryListView!==null){f=Galaxy.libraries.libraryListView.collection.get(g)}else{f=new c.Library({id:g});f.fetch({success:function(){var i=h.templateLibInfoInModal();h.modal=Galaxy.modal;h.modal.show({closing_events:true,title:"Library Information",body:i({library:f}),buttons:{Close:function(){Galaxy.modal.hide()}}})},error:function(j,i){if(typeof i.responseJSON!=="undefined"){e.error(i.responseJSON.err_msg)}else{e.error("An error ocurred :(")}}})}},templateToolBar:function(){tmpl_array=[];tmpl_array.push('<div class="library_style_container">');tmpl_array.push(' <div id="library_toolbar">');tmpl_array.push(" <span><strong>DATA LIBRARIES</strong></span>");tmpl_array.push(' <span data-toggle="tooltip" data-placement="top" class="logged-dataset-manipulation" title="Include deleted datasets" style="display:none;"> | <input id="include_deleted_datasets_chk" style="margin: 0;" type="checkbox"> include deleted | </input></span>');tmpl_array.push(' <div class="btn-group add-library-items" style="display:none;">');tmpl_array.push(' <button data-toggle="tooltip" data-placement="top" title="Create New Folder" id="toolbtn_create_folder" class="btn btn-default primary-button" type="button"><span class="fa fa-plus"></span><span class="fa fa-folder"></span></button>');tmpl_array.push(' <button data-toggle="tooltip" data-placement="top" title="Add Datasets to Current Folder" id="toolbtn_add_files" class="btn btn-default toolbtn_add_files primary-button" type="button"><span class="fa fa-plus"></span><span class="fa fa-file"></span></span></button>');tmpl_array.push(" </div>");tmpl_array.push(' <button data-toggle="tooltip" data-placement="top" title="Import selected datasets into history" id="toolbtn_bulk_import" class="primary-button dataset-manipulation" style="margin-left: 0.5em; display:none;" type="button"><span class="fa fa-book"></span> to History</button>');tmpl_array.push(' <div id="toolbtn_dl" class="btn-group dataset-manipulation" style="margin-left: 0.5em; display:none; ">');tmpl_array.push(' <button title="Download selected datasets as archive" id="drop_toggle" type="button" class="primary-button dropdown-toggle" data-toggle="dropdown">');tmpl_array.push(' <span class="fa fa-download"></span> Download <span class="caret"></span>');tmpl_array.push(" </button>");tmpl_array.push(' <ul class="dropdown-menu" role="menu">');tmpl_array.push(' <li id="download_archive"><a href="#/folders/<%= id %>/download/tgz">.tar.gz</a></li>');tmpl_array.push(' <li id="download_archive"><a href="#/folders/<%= id %>/download/tbz">.tar.bz</a></li>');tmpl_array.push(' <li id="download_archive"><a href="#/folders/<%= id %>/download/zip">.zip</a></li>');tmpl_array.push(" </ul>");tmpl_array.push(" </div>");tmpl_array.push(' <button data-toggle="tooltip" data-placement="top" title="Mark selected datasets deleted" id="toolbtn_bulk_delete" class="primary-button logged-dataset-manipulation" style="margin-left: 0.5em; display:none; " type="button"><span class="fa fa-times"></span> Delete</button>');tmpl_array.push(' <button data-id="<%- id %>" data-toggle="tooltip" data-placement="top" title="Show library information" id="toolbtn_show_libinfo" class="primary-button" style="margin-left: 0.5em;" type="button"><span class="fa fa-info-circle"></span> Library Info</button>');tmpl_array.push(' <span class="help-button" data-toggle="tooltip" data-placement="top" title="Visit Libraries Wiki"><a href="https://wiki.galaxyproject.org/DataLibraries/screen/FolderContents" target="_blank"><button class="primary-button btn-xs" type="button"><span class="fa fa-question-circle"></span> Help</button></a></span>');tmpl_array.push(" </div>");tmpl_array.push(' <div id="folder_items_element">');tmpl_array.push(" </div>");tmpl_array.push("</div>");return _.template(tmpl_array.join(""))},templateLibInfoInModal:function(){tmpl_array=[];tmpl_array.push('<div id="lif_info_modal">');tmpl_array.push("<h2>Library name:</h2>");tmpl_array.push('<p><%- library.get("name") %></p>');tmpl_array.push("<h3>Library description:</h3>");tmpl_array.push('<p><%- library.get("description") %></p>');tmpl_array.push("<h3>Library synopsis:</h3>");tmpl_array.push('<p><%- library.get("synopsis") %></p>');tmpl_array.push("</div>");return _.template(tmpl_array.join(""))},templateNewFolderInModal:function(){tmpl_array=[];tmpl_array.push('<div id="new_folder_modal">');tmpl_array.push("<form>");tmpl_array.push('<input type="text" name="Name" value="" placeholder="Name">');tmpl_array.push('<input type="text" name="Description" value="" placeholder="Description">');tmpl_array.push("</form>");tmpl_array.push("</div>");return _.template(tmpl_array.join(""))},templateBulkImportInModal:function(){var f=[];f.push('<span id="history_modal_combo_bulk" style="width:90%; margin-left: 1em; margin-right: 1em; ">');f.push("Select history: ");f.push('<select id="dataset_import_bulk" name="dataset_import_bulk" style="width:50%; margin-bottom: 1em; "> ');f.push(" <% _.each(histories, function(history) { %>");f.push(' <option value="<%= _.escape(history.get("id")) %>"><%= _.escape(history.get("name")) %></option>');f.push(" <% }); %>");f.push("</select>");f.push("</span>");return _.template(f.join(""))},templateImportIntoHistoryProgressBar:function(){var f=[];f.push('<div class="import_text">');f.push("Importing selected datasets to history <b><%= _.escape(history_name) %></b>");f.push("</div>");f.push('<div class="progress">');f.push(' <div class="progress-bar progress-bar-import" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 00%;">');f.push(' <span class="completion_span">0% Complete</span>');f.push(" </div>");f.push("</div>");f.push("");return _.template(f.join(""))},templateAddingDatasetsProgressBar:function(){var f=[];f.push('<div class="import_text">');f.push("Adding selected datasets from history to library folder <b><%= _.escape(folder_name) %></b>");f.push("</div>");f.push('<div class="progress">');f.push(' <div class="progress-bar progress-bar-import" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 00%;">');f.push(' <span class="completion_span">0% Complete</span>');f.push(" </div>");f.push("</div>");f.push("");return _.template(f.join(""))},templateDeletingDatasetsProgressBar:function(){var f=[];f.push('<div class="import_text">');f.push("</div>");f.push('<div class="progress">');f.push(' <div class="progress-bar progress-bar-delete" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 00%;">');f.push(' <span class="completion_span">0% Complete</span>');f.push(" </div>");f.push("</div>");f.push("");return _.template(f.join(""))},templateAddFilesInModal:function(){var f=[];f.push('<div id="add_files_modal">');f.push('<div id="history_modal_combo_bulk">');f.push("Select history: ");f.push('<select id="dataset_add_bulk" name="dataset_add_bulk" style="width:66%; "> ');f.push(" <% _.each(histories, function(history) { %>");f.push(' <option value="<%= _.escape(history.get("id")) %>"><%= _.escape(history.get("name")) %></option>');f.push(" <% }); %>");f.push("</select>");f.push("</div>");f.push('<div id="selected_history_content">');f.push("</div>");f.push("</div>");return _.template(f.join(""))},templateHistoryContents:function(){var f=[];f.push("Choose the datasets to import:");f.push("<ul>");f.push(" <% _.each(history_contents, function(history_item) { %>");f.push(' <li data-id="<%= _.escape(history_item.get("id")) %>">');f.push(' <input style="margin: 0;" type="checkbox"><%= _.escape(history_item.get("hid")) %>: <%= _.escape(history_item.get("name")) %>');f.push(" </li>");f.push(" <% }); %>");f.push("</ul>");return _.template(f.join(""))}});return{FolderToolbarView:a}});
\ No newline at end of file
+define(["galaxy.masthead","utils/utils","libs/toastr","libs/jquery/jstree","mvc/library/library-model"],function(c,e,f,b,d){var a=Backbone.View.extend({el:"#center",events:{"click #toolbtn_create_folder":"createFolderFromModal","click #toolbtn_bulk_import":"modalBulkImport","click #include_deleted_datasets_chk":"checkIncludeDeleted","click #toolbtn_show_libinfo":"showLibInfo","click #toolbtn_bulk_delete":"deleteSelectedDatasets"},defaults:{can_add_library_item:false,contains_file:false,chain_call_control:{total_number:0,failed_number:0},disabled_jstree_element:"folders"},modal:null,jstree:null,histories:null,initialize:function(g){this.options=_.defaults(g||{},this.defaults);this.render()},render:function(g){this.options=_.extend(this.options,g);var i=this.templateToolBar();var h={id:this.options.id,is_admin:false,is_anonym:true,user_library_import_dir:Galaxy.config.user_library_import_dir,allow_library_path_paste:Galaxy.config.allow_library_path_paste,library_import_dir:Galaxy.config.library_import_dir,mutiple_add_dataset_options:false};if(Galaxy.currUser){h.is_admin=Galaxy.currUser.isAdmin();h.is_anonym=Galaxy.currUser.isAnonymous();if(h.user_library_import_dir!==null||h.allow_library_path_paste!==false||h.library_import_dir!==null){h.mutiple_add_dataset_options=true}}this.$el.html(i(h))},configureElements:function(g){this.options=_.extend(this.options,g);if(this.options.can_add_library_item===true){$(".add-library-items").show()}else{$(".add-library-items").hide()}if(this.options.contains_file===true){if(Galaxy.currUser){if(!Galaxy.currUser.isAnonymous()){$(".logged-dataset-manipulation").show();$(".dataset-manipulation").show()}else{$(".dataset-manipulation").show();$(".logged-dataset-manipulation").hide()}}else{$(".logged-dataset-manipulation").hide();$(".dataset-manipulation").hide()}}else{$(".logged-dataset-manipulation").hide();$(".dataset-manipulation").hide()}this.$el.find("[data-toggle]").tooltip()},createFolderFromModal:function(i){i.preventDefault();i.stopPropagation();var g=this;var h=this.templateNewFolderInModal();this.modal=Galaxy.modal;this.modal.show({closing_events:true,title:"Create New Folder",body:h(),buttons:{Create:function(){g.create_new_folder_event()},Close:function(){Galaxy.modal.hide()}}})},create_new_folder_event:function(){var g=this.serialize_new_folder();if(this.validate_new_folder(g)){var h=new d.FolderAsModel();url_items=Backbone.history.fragment.split("/");current_folder_id=url_items[url_items.length-1];h.url=h.urlRoot+"/"+current_folder_id;h.save(g,{success:function(i){Galaxy.modal.hide();f.success("Folder created");i.set({type:"folder"});Galaxy.libraries.folderListView.collection.add(i)},error:function(j,i){Galaxy.modal.hide();if(typeof i.responseJSON!=="undefined"){f.error(i.responseJSON.err_msg)}else{f.error("An error ocurred :(")}}})}else{f.error("Folder's name is missing")}return false},serialize_new_folder:function(){return{name:$("input[name='Name']").val(),description:$("input[name='Description']").val()}},validate_new_folder:function(g){return g.name!==""},modalBulkImport:function(){var g=$("#folder_table").find(":checked");if(g.length===0){f.info("You have to select some datasets first")}else{this.refreshUserHistoriesList(function(i){var h=i.templateBulkImportInModal();i.modal=Galaxy.modal;i.modal.show({closing_events:true,title:"Import into History",body:h({histories:i.histories.models}),buttons:{Import:function(){i.importAllIntoHistory()},Close:function(){Galaxy.modal.hide()}}})})}},refreshUserHistoriesList:function(h){var g=this;this.histories=new d.GalaxyHistories();this.histories.fetch({success:function(){h(g)},error:function(j,i){if(typeof i.responseJSON!=="undefined"){f.error(i.responseJSON.err_msg)}else{f.error("An error ocurred :(")}}})},importAllIntoHistory:function(){this.modal.disableButton("Import");this.options.chain_call_control.total_number=0;this.options.chain_call_control.failed_number=0;var k=$("select[name=dataset_import_bulk] option:selected").val();this.options.last_used_history_id=k;var n=$("select[name=dataset_import_bulk] option:selected").text();var p=[];$("#folder_table").find(":checked").each(function(){if(this.parentElement.parentElement.id!==""){p.push(this.parentElement.parentElement.id)}});var o=this.templateImportIntoHistoryProgressBar();this.modal.$el.find(".modal-body").html(o({history_name:n}));var l=100/p.length;this.initProgress(l);var g=[];for(var h=p.length-1;h>=0;h--){var j=p[h];var m=new d.HistoryItem();m.url=m.urlRoot+k+"/contents";m.content=j;m.source="library";g.push(m)}this.options.chain_call_control.total_number=g.length;jQuery.getJSON(galaxy_config.root+"history/set_as_current?id="+k);this.chainCall(g,n)},chainCall:function(h,k){var g=this;var i=h.pop();if(typeof i==="undefined"){if(this.options.chain_call_control.failed_number===0){f.success("Selected datasets imported into history. Click this to start analysing it.","",{onclick:function(){window.location="/"}})}else{if(this.options.chain_call_control.failed_number===this.options.chain_call_control.total_number){f.error("There was an error and no datasets were imported into history.")}else{if(this.options.chain_call_control.failed_number<this.options.chain_call_control.total_number){f.warning("Some of the datasets could not be imported into history. Click this to see what was imported.","",{onclick:function(){window.location="/"}})}}}Galaxy.modal.hide();return}var j=$.when(i.save({content:i.content,source:i.source}));j.done(function(){g.updateProgress();g.chainCall(h,k)}).fail(function(){g.options.chain_call_control.failed_number+=1;g.updateProgress();g.chainCall(h,k)})},initProgress:function(g){this.progress=0;this.progressStep=g},updateProgress:function(){this.progress+=this.progressStep;$(".progress-bar-import").width(Math.round(this.progress)+"%");txt_representation=Math.round(this.progress)+"% Complete";$(".completion_span").text(txt_representation)},download:function(g,k){var i=[];$("#folder_table").find(":checked").each(function(){if(this.parentElement.parentElement.id!==""){i.push(this.parentElement.parentElement.id)}});var h="/api/libraries/datasets/download/"+k;var j={ldda_ids:i};this.processDownload(h,j,"get")},processDownload:function(h,i,j){if(h&&i){i=typeof i==="string"?i:$.param(i);var g="";$.each(i.split("&"),function(){var k=this.split("=");g+='<input type="hidden" name="'+k[0]+'" value="'+k[1]+'" />'});$('<form action="'+h+'" method="'+(j||"post")+'">'+g+"</form>").appendTo("body").submit().remove();f.info("Your download will begin soon")}else{f.error("An error occurred :(")}},addFilesFromHistoryModal:function(){this.refreshUserHistoriesList(function(g){g.modal=Galaxy.modal;var h=g.templateAddFilesFromHistory();var i=g.options.full_path[g.options.full_path.length-1][1];g.modal.show({closing_events:true,title:"Adding datasets from your history to folder "+i,body:h({histories:g.histories.models}),buttons:{Add:function(){g.addAllDatasetsFromHistory()},Close:function(){Galaxy.modal.hide()}},closing_callback:function(){Galaxy.libraries.library_router.back()}});if(g.histories.models.length>0){g.fetchAndDisplayHistoryContents(g.histories.models[0].id);$("#dataset_add_bulk").change(function(j){g.fetchAndDisplayHistoryContents(j.target.value)})}else{f.error("An error ocurred :(")}})},importFilesFromPathModal:function(){var h=this;this.modal=Galaxy.modal;var g=this.templateImportPathModal();this.modal.show({closing_events:true,title:"Enter paths relative to Galaxy root",body:g({}),buttons:{Import:function(){h.importFromPathsClicked(h)},Close:function(){Galaxy.modal.hide()}},closing_callback:function(){Galaxy.libraries.library_router.navigate("folders/"+h.id,{trigger:true})}})},importFilesFromUserdirModal:function(){var h=this;this.modal=Galaxy.modal;var g=this.templateBrowserModal();this.modal.show({closing_events:true,title:"Select folders or files to import",body:g({}),buttons:{Import:function(){h.importFromUserdirClicked(h)},Close:function(){Galaxy.modal.hide()}},closing_callback:function(){Galaxy.libraries.library_router.navigate("folders/"+h.id,{trigger:true})}});this.renderJstree({disabled_jstree_element:"folders"});$("input[type=radio]").change(function(i){if(i.target.value==="jstree-disable-folders"){h.renderJstree({disabled_jstree_element:"folders"});$(".jstree-folders-message").hide();$(".jstree-preserve-structure").hide();$(".jstree-link-files").hide();$(".jstree-files-message").show()}else{if(i.target.value==="jstree-disable-files"){$(".jstree-files-message").hide();$(".jstree-folders-message").show();$(".jstree-link-files").show();$(".jstree-preserve-structure").show();h.renderJstree({disabled_jstree_element:"files"})}}})},renderJstree:function(g){var i=this;this.options=_.extend(this.options,g);var h=this.options.disabled_jstree_element;this.jstree=new d.Jstree();this.jstree.url=this.jstree.urlRoot+"?target=userdir&format=jstree&disable="+h;this.jstree.fetch({success:function(k,j){$("#jstree_browser").jstree("destroy");var l=$("#jstree_browser").jstree({core:{data:k},plugins:["types","checkbox"],types:{folder:{icon:"jstree-folder"},file:{icon:"jstree-file"}},checkbox:{three_state:false}})},error:function(k,j){if(typeof j.responseJSON!=="undefined"){f.error(j.responseJSON.err_msg)}else{f.error("An error ocurred :(")}}})},importFromPathsClicked:function(){var g=this.modal.$el.find(".preserve-checkbox").is(":checked");var l=this.modal.$el.find(".link-checkbox").is(":checked");var k=$("textarea#import_paths").val();if(!k){f.info("Please enter a path relative to Galaxy root")}else{this.modal.disableButton("Import");k=k.split("\n");var j=[];for(var h=k.length-1;h>=0;h--){trimmed=k[h].trim();if(trimmed.length!==0){j.push(trimmed)}}this.initChainCallControl(j.length);this.chainCallImportingFolders(j,g,l,"admin_path")}},initChainCallControl:function(g){var h=this.templateAddingDatasetsProgressBar();this.modal.$el.find(".modal-body").html(h({folder_name:this.options.folder_name}));this.progress=0;this.progressStep=100/g;this.options.chain_call_control.total_number=g;this.options.chain_call_control.failed_number=0},importFromUserdirClicked:function(l){var h=$("#jstree_browser").jstree().get_selected(true);var g=this.modal.$el.find(".preserve-checkbox").is(":checked");var o=this.modal.$el.find(".link-checkbox").is(":checked");var n=[];if(h.length<1){f.info("You have to select some items first")}else{this.modal.disableButton("Import");this.options.chain_call_control.total_number=0;this.options.chain_call_control.failed_number=0;for(var j=h.length-1;j>=0;j--){if(h[j].li_attr.full_path!==undefined){n.push(h[j].li_attr.full_path)}}var m=this.templateAddingDatasetsProgressBar();this.modal.$el.find(".modal-body").html(m({folder_name:this.options.folder_name}));this.progressStep=100/n.length;this.progress=0;this.options.chain_call_control.total_number=n.length;var k=h[0].type;if(k==="folder"){this.chainCallImportingFolders(n,g,o,"userdir_folder")}else{if(k==="file"){this.chainCallImportingUserdirFiles(n)}}}},chainCallImportingUserdirFiles:function(j){var g=this;var h=j.pop();if(typeof h==="undefined"){if(this.options.chain_call_control.failed_number===0){f.success("Selected files imported into the current folder");Galaxy.modal.hide()}else{f.error("Something went wrong :(")}return true}var i=$.when($.post("/api/libraries/datasets?encoded_folder_id="+g.id+"&source=userdir_file&path="+h));i.done(function(k){g.updateProgress();g.chainCallImportingUserdirFiles(j)}).fail(function(){g.options.chain_call_control.failed_number+=1;g.updateProgress();g.chainCallImportingUserdirFiles(j)})},chainCallImportingFolders:function(l,g,m,j){var h=this;var i=l.pop();if(typeof i==="undefined"){if(this.options.chain_call_control.failed_number===0){f.success("Selected folders and their contents imported into the current folder");Galaxy.modal.hide()}else{f.error("Something went wrong :(")}}var k=$.when($.post("/api/libraries/datasets?encoded_folder_id="+h.id+"&source="+j+"&path="+i+"&preserve_dirs="+g+"&link_data="+m));k.done(function(n){h.updateProgress();h.chainCallImportingFolders(l,g,m,j)}).fail(function(){h.options.chain_call_control.failed_number+=1;h.updateProgress();h.chainCallImportingFolders(l,g,m,j)})},fetchAndDisplayHistoryContents:function(i){var h=new d.HistoryContents({id:i});var g=this;h.fetch({success:function(k){var j=g.templateHistoryContents();g.histories.get(i).set({contents:k});g.modal.$el.find("#selected_history_content").html(j({history_contents:k.models.reverse()}))},error:function(k,j){if(typeof j.responseJSON!=="undefined"){f.error(j.responseJSON.err_msg)}else{f.error("An error ocurred :(")}}})},addAllDatasetsFromHistory:function(){var l=this.modal.$el.find("#selected_history_content").find(":checked");if(l.length<1){f.info("You have to select some datasets first")}else{this.modal.disableButton("Add");this.options.chain_call_control.total_number=0;this.options.chain_call_control.failed_number=0;var g=[];l.each(function(){var i=$(this.parentElement).data("id");if(i){g.push(i)}});var m=this.templateAddingDatasetsProgressBar();this.modal.$el.find(".modal-body").html(m({folder_name:this.options.folder_name}));this.progressStep=100/g.length;this.progress=0;var k=[];for(var j=g.length-1;j>=0;j--){history_dataset_id=g[j];var h=new d.Item();h.url="/api/folders/"+this.options.id+"/contents";h.set({from_hda_id:history_dataset_id});k.push(h)}this.options.chain_call_control.total_number=k.length;this.chainCallAddingHdas(k)}},chainCallAddingHdas:function(h){var g=this;this.added_hdas=new d.Folder();var i=h.pop();if(typeof i==="undefined"){if(this.options.chain_call_control.failed_number===0){f.success("Selected datasets from history added to the folder")}else{if(this.options.chain_call_control.failed_number===this.options.chain_call_control.total_number){f.error("There was an error and no datasets were added to the folder.")}else{if(this.options.chain_call_control.failed_number<this.options.chain_call_control.total_number){f.warning("Some of the datasets could not be added to the folder")}}}Galaxy.modal.hide();return this.added_hdas}var j=$.when(i.save({from_hda_id:i.get("from_hda_id")}));j.done(function(k){Galaxy.libraries.folderListView.collection.add(k);g.updateProgress();g.chainCallAddingHdas(h)}).fail(function(){g.options.chain_call_control.failed_number+=1;g.updateProgress();g.chainCallAddingHdas(h)})},checkIncludeDeleted:function(g){if(g.target.checked){Galaxy.libraries.folderListView.fetchFolder({include_deleted:true})}else{Galaxy.libraries.folderListView.fetchFolder({include_deleted:false})}},deleteSelectedDatasets:function(){var g=$("#folder_table").find(":checked");if(g.length===0){f.info("You have to select some datasets first")}else{var k=this.templateDeletingDatasetsProgressBar();this.modal=Galaxy.modal;this.modal.show({closing_events:true,title:"Deleting selected datasets",body:k({}),buttons:{Close:function(){Galaxy.modal.hide()}}});this.options.chain_call_control.total_number=0;this.options.chain_call_control.failed_number=0;var h=[];g.each(function(){if(this.parentElement.parentElement.id!==""){h.push(this.parentElement.parentElement.id)}});this.progressStep=100/h.length;this.progress=0;var m=[];for(var j=h.length-1;j>=0;j--){var l=new d.Item({id:h[j]});m.push(l)}this.options.chain_call_control.total_number=h.length;this.chainCallDeletingHdas(m)}},chainCallDeletingHdas:function(h){var g=this;this.deleted_lddas=new d.Folder();var i=h.pop();if(typeof i==="undefined"){if(this.options.chain_call_control.failed_number===0){f.success("Selected datasets deleted")}else{if(this.options.chain_call_control.failed_number===this.options.chain_call_control.total_number){f.error("There was an error and no datasets were deleted.")}else{if(this.options.chain_call_control.failed_number<this.options.chain_call_control.total_number){f.warning("Some of the datasets could not be deleted")}}}Galaxy.modal.hide();return this.deleted_lddas}var j=$.when(i.destroy());j.done(function(l){Galaxy.libraries.folderListView.collection.remove(i.id);g.updateProgress();if(Galaxy.libraries.folderListView.options.include_deleted){var k=new d.Item(l);Galaxy.libraries.folderListView.collection.add(k)}g.chainCallDeletingHdas(h)}).fail(function(){g.options.chain_call_control.failed_number+=1;g.updateProgress();g.chainCallDeletingHdas(h)})},showLibInfo:function(){var h=Galaxy.libraries.folderListView.folderContainer.attributes.metadata.parent_library_id;var g=null;var i=this;if(Galaxy.libraries.libraryListView!==null){g=Galaxy.libraries.libraryListView.collection.get(h);this.showLibInfoModal(g)}else{g=new d.Library({id:h});g.fetch({success:function(){i.showLibInfoModal(g)},error:function(k,j){if(typeof j.responseJSON!=="undefined"){f.error(j.responseJSON.err_msg)}else{f.error("An error ocurred :(")}}})}},showLibInfoModal:function(g){var h=this.templateLibInfoInModal();this.modal=Galaxy.modal;this.modal.show({closing_events:true,title:"Library Information",body:h({library:g}),buttons:{Close:function(){Galaxy.modal.hide()}}})},showImportModal:function(g){switch(g.source){case"history":this.addFilesFromHistoryModal();break;case"importdir":break;case"path":this.importFilesFromPathModal();break;case"userdir":this.importFilesFromUserdirModal();break;default:Galaxy.libraries.library_router.back();f.error("Invalid import source.");break}},templateToolBar:function(){tmpl_array=[];tmpl_array.push('<div class="library_style_container">');tmpl_array.push(' <div id="library_toolbar">');tmpl_array.push(" <span><strong>DATA LIBRARIES</strong></span>");tmpl_array.push(' <span data-toggle="tooltip" data-placement="top" class="logged-dataset-manipulation" title="Include deleted datasets" style="display:none;"> | <input id="include_deleted_datasets_chk" style="margin: 0;" type="checkbox"> include deleted | </input></span>');tmpl_array.push(' <button style="display:none;" data-toggle="tooltip" data-placement="top" title="Create New Folder" id="toolbtn_create_folder" class="btn btn-default primary-button add-library-items" type="button"><span class="fa fa-plus"></span><span class="fa fa-folder"></span></button>');tmpl_array.push("<% if(mutiple_add_dataset_options) { %>");tmpl_array.push(' <div class="btn-group add-library-items" style="display:none;">');tmpl_array.push(' <button title="Add Datasets to Current Folder" id="" type="button" class="primary-button dropdown-toggle" data-toggle="dropdown">');tmpl_array.push(' <span class="fa fa-plus"></span><span class="fa fa-file"></span><span class="caret"></span>');tmpl_array.push(" </button>");tmpl_array.push(' <ul class="dropdown-menu" role="menu">');tmpl_array.push(' <li><a href="#folders/<%= id %>/import/history"> from History</a></li>');tmpl_array.push("<% if(user_library_import_dir !== null) { %>");tmpl_array.push(' <li><a href="#folders/<%= id %>/import/userdir"> from User Directory</a></li>');tmpl_array.push("<% } %>");tmpl_array.push("<% if(allow_library_path_paste) { %>");tmpl_array.push(' <li class="divider"></li>');tmpl_array.push(' <li class="dropdown-header">Admins only</li>');tmpl_array.push("<% if(allow_library_path_paste) { %>");tmpl_array.push(' <li><a href="#folders/<%= id %>/import/path">from Path</a></li>');tmpl_array.push("<% } %>");tmpl_array.push("<% } %>");tmpl_array.push(" </ul>");tmpl_array.push(" </div>");tmpl_array.push("<% } else { %>");tmpl_array.push(' <button style="display:none;" data-toggle="tooltip" data-placement="top" title="Add Datasets to Current Folder" id="toolbtn_add_files" class="btn btn-default toolbtn_add_files primary-button add-library-items" type="button"><span class="fa fa-plus"></span><span class="fa fa-file"></span></span></button>');tmpl_array.push("<% } %>");tmpl_array.push(' <button data-toggle="tooltip" data-placement="top" title="Import selected datasets into history" id="toolbtn_bulk_import" class="primary-button dataset-manipulation" style="margin-left: 0.5em; display:none;" type="button"><span class="fa fa-book"></span> to History</button>');tmpl_array.push(' <div id="toolbtn_dl" class="btn-group dataset-manipulation" style="margin-left: 0.5em; display:none; ">');tmpl_array.push(' <button title="Download selected datasets as archive" id="drop_toggle" type="button" class="primary-button dropdown-toggle" data-toggle="dropdown">');tmpl_array.push(' <span class="fa fa-download"></span> Download <span class="caret"></span>');tmpl_array.push(" </button>");tmpl_array.push(' <ul class="dropdown-menu" role="menu">');tmpl_array.push(' <li><a href="#/folders/<%= id %>/download/tgz">.tar.gz</a></li>');tmpl_array.push(' <li><a href="#/folders/<%= id %>/download/tbz">.tar.bz</a></li>');tmpl_array.push(' <li><a href="#/folders/<%= id %>/download/zip">.zip</a></li>');tmpl_array.push(" </ul>");tmpl_array.push(" </div>");tmpl_array.push(' <button data-toggle="tooltip" data-placement="top" title="Mark selected datasets deleted" id="toolbtn_bulk_delete" class="primary-button logged-dataset-manipulation" style="margin-left: 0.5em; display:none; " type="button"><span class="fa fa-times"></span> Delete</button>');tmpl_array.push(' <button data-id="<%- id %>" data-toggle="tooltip" data-placement="top" title="Show library information" id="toolbtn_show_libinfo" class="primary-button" style="margin-left: 0.5em;" type="button"><span class="fa fa-info-circle"></span> Library Info</button>');tmpl_array.push(' <span class="help-button" data-toggle="tooltip" data-placement="top" title="Visit Libraries Wiki"><a href="https://wiki.galaxyproject.org/DataLibraries/screen/FolderContents" target="_blank"><button class="primary-button btn-xs" type="button"><span class="fa fa-question-circle"></span> Help</button></a></span>');tmpl_array.push(" </div>");tmpl_array.push(' <div id="folder_items_element">');tmpl_array.push(" </div>");tmpl_array.push("</div>");return _.template(tmpl_array.join(""))},templateLibInfoInModal:function(){tmpl_array=[];tmpl_array.push('<div id="lif_info_modal">');tmpl_array.push("<h2>Library name:</h2>");tmpl_array.push('<p><%- library.get("name") %></p>');tmpl_array.push("<h3>Library description:</h3>");tmpl_array.push('<p><%- library.get("description") %></p>');tmpl_array.push("<h3>Library synopsis:</h3>");tmpl_array.push('<p><%- library.get("synopsis") %></p>');tmpl_array.push("</div>");return _.template(tmpl_array.join(""))},templateNewFolderInModal:function(){tmpl_array=[];tmpl_array.push('<div id="new_folder_modal">');tmpl_array.push("<form>");tmpl_array.push('<input type="text" name="Name" value="" placeholder="Name">');tmpl_array.push('<input type="text" name="Description" value="" placeholder="Description">');tmpl_array.push("</form>");tmpl_array.push("</div>");return _.template(tmpl_array.join(""))},templateBulkImportInModal:function(){var g=[];g.push('<span id="history_modal_combo_bulk" style="width:90%; margin-left: 1em; margin-right: 1em; ">');g.push("Select history: ");g.push('<select id="dataset_import_bulk" name="dataset_import_bulk" style="width:50%; margin-bottom: 1em; "> ');g.push(" <% _.each(histories, function(history) { %>");g.push(' <option value="<%= _.escape(history.get("id")) %>"><%= _.escape(history.get("name")) %></option>');g.push(" <% }); %>");g.push("</select>");g.push("</span>");return _.template(g.join(""))},templateImportIntoHistoryProgressBar:function(){var g=[];g.push('<div class="import_text">');g.push("Importing selected datasets to history <b><%= _.escape(history_name) %></b>");g.push("</div>");g.push('<div class="progress">');g.push(' <div class="progress-bar progress-bar-import" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 00%;">');g.push(' <span class="completion_span">0% Complete</span>');g.push(" </div>");g.push("</div>");g.push("");return _.template(g.join(""))},templateAddingDatasetsProgressBar:function(){var g=[];g.push('<div class="import_text">');g.push("Adding selected datasets from history to library folder <b><%= _.escape(folder_name) %></b>");g.push("</div>");g.push('<div class="progress">');g.push(' <div class="progress-bar progress-bar-import" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 00%;">');g.push(' <span class="completion_span">0% Complete</span>');g.push(" </div>");g.push("</div>");g.push("");return _.template(g.join(""))},templateDeletingDatasetsProgressBar:function(){var g=[];g.push('<div class="import_text">');g.push("</div>");g.push('<div class="progress">');g.push(' <div class="progress-bar progress-bar-import" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 00%;">');g.push(' <span class="completion_span">0% Complete</span>');g.push(" </div>");g.push("</div>");g.push("");return _.template(g.join(""))},templateBrowserModal:function(){var g=[];g.push('<div id="file_browser_modal">');g.push('<div style="margin-bottom:1em;">');g.push('<label class="radio-inline">');g.push(' <input title="Switch to selecting files" type="radio" name="jstree-radio" value="jstree-disable-folders" checked="checked"> Files');g.push("</label>");g.push('<label class="radio-inline">');g.push(' <input title="Switch to selecting folders" type="radio" name="jstree-radio" value="jstree-disable-files"> Folders');g.push("</label>");g.push('<label class="checkbox-inline jstree-preserve-structure" style="display:none;">');g.push(' <input class="preserve-checkbox" type="checkbox" value="preserve_directory_structure">');g.push("Preserve directory structure");g.push(" </label>");g.push('<label class="checkbox-inline jstree-link-files" style="display:none;">');g.push(' <input class="link-checkbox" type="checkbox" value="link_files">');g.push("Link files instead of copying");g.push(" </label>");g.push("</div>");g.push('<div class="alert alert-info jstree-files-message">All files you select will be imported into the current folder.</div>');g.push('<div class="alert alert-info jstree-folders-message" style="display:none;">All files within the selected folders and their subfolders will be imported into the current folder.</div>');g.push('<div id="jstree_browser">');g.push("</div>");g.push("</div>");return _.template(g.join(""))},templateImportPathModal:function(){var g=[];g.push('<div id="file_browser_modal">');g.push('<label class="checkbox-inline jstree-preserve-structure">');g.push(' <input class="preserve-checkbox" type="checkbox" value="preserve_directory_structure">');g.push("Preserve directory structure");g.push(" </label>");g.push('<label class="checkbox-inline jstree-link-files">');g.push(' <input class="link-checkbox" type="checkbox" value="link_files">');g.push("Link files instead of copying");g.push(" </label>");g.push("</div>");g.push('<div class="alert alert-info jstree-folders-message">All files within the given folders and their subfolders will be imported into the current folder.</div>');g.push('<textarea id="import_paths" class="form-control" rows="5" placeholder="Paths separated by newline"></textarea>');g.push("</div>");return _.template(g.join(""))},templateAddFilesFromHistory:function(){var g=[];g.push('<div id="add_files_modal">');g.push('<div id="history_modal_combo_bulk">');g.push("Select history: ");g.push('<select id="dataset_add_bulk" name="dataset_add_bulk" style="width:66%; "> ');g.push(" <% _.each(histories, function(history) { %>");g.push(' <option value="<%= _.escape(history.get("id")) %>"><%= _.escape(history.get("name")) %></option>');g.push(" <% }); %>");g.push("</select>");g.push("</div>");g.push("<br/>");g.push('<div id="selected_history_content">');g.push("</div>");g.push("</div>");return _.template(g.join(""))},templateHistoryContents:function(){var g=[];g.push("<strong>Choose the datasets to import:</strong>");g.push("<ul>");g.push(" <% _.each(history_contents, function(history_item) { %>");g.push(' <li data-id="<%= _.escape(history_item.get("id")) %>">');g.push(' <input style="margin: 0;" type="checkbox"><%= _.escape(history_item.get("hid")) %>: <%= _.escape(history_item.get("name")) %>');g.push(" </li>");g.push(" <% }); %>");g.push("</ul>");return _.template(g.join(""))}});return{FolderToolbarView:a}});
\ No newline at end of file
diff -r a4a6834f4b2fe443f40235fd6331a7da7fa09d57 -r 858c12951cfa764fb8b948e360b29f8a9e90b89b static/scripts/packed/mvc/library/library-libraryrow-view.js
--- a/static/scripts/packed/mvc/library/library-libraryrow-view.js
+++ b/static/scripts/packed/mvc/library/library-libraryrow-view.js
@@ -1,1 +1,1 @@
-define(["galaxy.masthead","utils/utils","libs/toastr"],function(b,c,d){var a=Backbone.View.extend({events:{"click .edit_library_btn":"edit_button_clicked","click .cancel_library_btn":"cancel_library_modification","click .save_library_btn":"save_library_modification","click .delete_library_btn":"delete_library","click .undelete_library_btn":"undelete_library","click .permission_library_btn":"permissions_on_library"},edit_mode:false,element_visibility_config:{upload_library_btn:false,edit_library_btn:false,permission_library_btn:false,save_library_btn:false,cancel_library_btn:false,delete_library_btn:false,undelete_library_btn:false},initialize:function(e){this.render(e)},render:function(f){if(typeof f==="undefined"){f=Galaxy.libraries.libraryListView.collection.get(this.$el.data("id"))}this.prepareButtons(f);var e=this.templateRow();this.setElement(e({library:f,button_config:this.element_visibility_config,edit_mode:this.edit_mode}));this.$el.show();return this},repaint:function(e){$(".tooltip").hide();var f=this.$el;this.render(e);f.replaceWith(this.$el);this.$el.find("[data-toggle]").tooltip()},prepareButtons:function(e){vis_config=this.element_visibility_config;if(this.edit_mode===false){vis_config.save_library_btn=false;vis_config.cancel_library_btn=false;vis_config.delete_library_btn=false;if(e.get("deleted")===true){vis_config.undelete_library_btn=true;vis_config.upload_library_btn=false;vis_config.edit_library_btn=false;vis_config.permission_library_btn=false}else{if(e.get("deleted")===false){vis_config.save_library_btn=false;vis_config.cancel_library_btn=false;vis_config.undelete_library_btn=false;if(e.get("can_user_add")===true){vis_config.upload_library_btn=true}if(e.get("can_user_modify")===true){vis_config.edit_library_btn=true}if(e.get("can_user_manage")===true){vis_config.permission_library_btn=true}}}}else{if(this.edit_mode===true){vis_config.upload_library_btn=false;vis_config.edit_library_btn=false;vis_config.permission_library_btn=false;vis_config.save_library_btn=true;vis_config.cancel_library_btn=true;vis_config.delete_library_btn=true;vis_config.undelete_library_btn=false}}this.element_visibility_config=vis_config},permissions_on_library:function(e){this.options=_.extend(this.options,e);$(".tooltip").remove()},edit_button_clicked:function(){this.edit_mode=true;this.repaint()},cancel_library_modification:function(){this.edit_mode=false;this.repaint()},save_library_modification:function(){var f=Galaxy.libraries.libraryListView.collection.get(this.$el.data("id"));var g=false;var i=this.$el.find(".input_library_name").val();if(typeof i!=="undefined"&&i!==f.get("name")){if(i.length>2){f.set("name",i);g=true}else{d.warning("Library name has to be at least 3 characters long");return}}var h=this.$el.find(".input_library_description").val();if(typeof h!=="undefined"&&h!==f.get("description")){f.set("description",h);g=true}var j=this.$el.find(".input_library_synopsis").val();if(typeof j!=="undefined"&&j!==f.get("synopsis")){f.set("synopsis",j);g=true}if(g){var e=this;f.save(null,{patch:true,success:function(k){e.edit_mode=false;e.repaint(k);d.success("Changes to library saved")},error:function(l,k){if(typeof k.responseJSON!=="undefined"){d.error(k.responseJSON.err_msg)}else{d.error("An error occured during updating the library :(")}}})}else{this.edit_mode=false;this.repaint(f);d.info("Nothing has changed")}},delete_library:function(){var f=Galaxy.libraries.libraryListView.collection.get(this.$el.data("id"));var e=this;f.destroy({success:function(g){g.set("deleted",true);Galaxy.libraries.libraryListView.collection.add(g);e.edit_mode=false;if(Galaxy.libraries.preferences.get("with_deleted")===false){$(".tooltip").hide();e.repaint(g);e.$el.remove()}else{if(Galaxy.libraries.preferences.get("with_deleted")===true){e.repaint(g)}}d.success("Library has been marked deleted")},error:function(h,g){if(typeof g.responseJSON!=="undefined"){d.error(g.responseJSON.err_msg)}else{d.error("An error occured during deleting the library :(")}}})},undelete_library:function(){var f=Galaxy.libraries.libraryListView.collection.get(this.$el.data("id"));var e=this;f.url=f.urlRoot+f.id+"?undelete=true";f.destroy({success:function(g){g.set("deleted",false);Galaxy.libraries.libraryListView.collection.add(g);e.edit_mode=false;e.repaint(g);d.success("Library has been undeleted")},error:function(h,g){if(typeof g.responseJSON!=="undefined"){d.error(g.responseJSON.err_msg)}else{d.error("An error occured while undeleting the library :(")}}})},templateRow:function(){tmpl_array=[];tmpl_array.push(' <tr class="<% if(library.get("deleted") === true) { print("active") } %>" style="display:none;" data-id="<%- library.get("id") %>">');tmpl_array.push(" <% if(!edit_mode) { %>");tmpl_array.push(' <% if(library.get("deleted")) { %>');tmpl_array.push(' <td style="color:grey;"><span data-toggle="tooltip" data-placement="top" title="Marked deleted" style="color:grey;" class="fa fa-ban fa-lg deleted_lib_ico"></span><%- library.get("name") %></td>');tmpl_array.push(" <% } else { %>");tmpl_array.push(' <td><a href="#folders/<%- library.get("root_folder_id") %>"><%- library.get("name") %></a></td>');tmpl_array.push(" <% } %>");tmpl_array.push(' <% if(library.get("description")) { %>');tmpl_array.push(' <% if( (library.get("description")).length> 80 ) { %>');tmpl_array.push(' <td data-toggle="tooltip" data-placement="bottom" title="<%= _.escape(library.get("description")) %>"><%= _.escape(library.get("description")).substring(0, 80) + "..." %></td>');tmpl_array.push(" <% } else { %>");tmpl_array.push(' <td><%= _.escape(library.get("description"))%></td>');tmpl_array.push(" <% } %>");tmpl_array.push(" <% } else { %>");tmpl_array.push(" <td></td>");tmpl_array.push(" <% } %>");tmpl_array.push(' <% if(library.get("synopsis")) { %>');tmpl_array.push(' <% if( (library.get("synopsis")).length> 120 ) { %>');tmpl_array.push(' <td data-toggle="tooltip" data-placement="bottom" title="<%= _.escape(library.get("synopsis")) %>"><%= _.escape(library.get("synopsis")).substring(0, 120) + "..." %></td>');tmpl_array.push(" <% } else { %>");tmpl_array.push(' <td><%= _.escape(library.get("synopsis"))%></td>');tmpl_array.push(" <% } %>");tmpl_array.push(" <% } else { %>");tmpl_array.push(" <td></td>");tmpl_array.push(" <% } %>");tmpl_array.push(" <% } else if(edit_mode){ %>");tmpl_array.push(' <td><textarea rows="4" class="form-control input_library_name" placeholder="name" ><%- library.get("name") %></textarea></td>');tmpl_array.push(' <td><textarea rows="4" class="form-control input_library_description" placeholder="description" ><%- library.get("description") %></textarea></td>');tmpl_array.push(' <td><textarea rows="4" class="form-control input_library_synopsis" placeholder="synopsis" ><%- library.get("synopsis") %></textarea></td>');tmpl_array.push(" <% } %>");tmpl_array.push(' <td class="right-center">');tmpl_array.push(' <% if( (library.get("public")) && (library.get("deleted") === false) ) { %>');tmpl_array.push(' <span data-toggle="tooltip" data-placement="top" title="Unrestricted library" style="color:grey;" class="fa fa-globe fa-lg public_lib_ico"></span>');tmpl_array.push(" <% }%>");tmpl_array.push(' <button data-toggle="tooltip" data-placement="top" title="Modify <%- library.get("name") %>" class="primary-button btn-xs edit_library_btn" type="button" style="<% if(button_config.edit_library_btn === false) { print("display:none;") } %>"><span class="fa fa-pencil"></span></button>');tmpl_array.push(' <a href="#library/<%- library.get("id") %>/permissions"><button data-toggle="tooltip" data-placement="top" title="Modify permissions" class="primary-button btn-xs permission_library_btn" type="button" style="<% if(button_config.permission_library_btn === false) { print("display:none;") } %>"><span class="fa fa-group"></span></button></a>');tmpl_array.push(' <button data-toggle="tooltip" data-placement="top" title="Save changes" class="primary-button btn-xs save_library_btn" type="button" style="<% if(button_config.save_library_btn === false) { print("display:none;") } %>"><span class="fa fa-floppy-o"> Save</span></button>');tmpl_array.push(' <button data-toggle="tooltip" data-placement="top" title="Discard changes" class="primary-button btn-xs cancel_library_btn" type="button" style="<% if(button_config.cancel_library_btn === false) { print("display:none;") } %>"><span class="fa fa-times"> Cancel</span></button>');tmpl_array.push(' <button data-toggle="tooltip" data-placement="top" title="Delete <%- library.get("name") %>" class="primary-button btn-xs delete_library_btn" type="button" style="<% if(button_config.delete_library_btn === false) { print("display:none;") } %>"><span class="fa fa-trash-o"> Delete</span></button>');tmpl_array.push(' <button data-toggle="tooltip" data-placement="top" title="Undelete <%- library.get("name") %> " class="primary-button btn-xs undelete_library_btn" type="button" style="<% if(button_config.undelete_library_btn === false) { print("display:none;") } %>"><span class="fa fa-unlock"> Undelete</span></button>');tmpl_array.push(" </td>");tmpl_array.push(" </tr>");return _.template(tmpl_array.join(""))}});return{LibraryRowView:a}});
\ No newline at end of file
+define(["galaxy.masthead","utils/utils","libs/toastr"],function(b,c,d){var a=Backbone.View.extend({events:{"click .edit_library_btn":"edit_button_clicked","click .cancel_library_btn":"cancel_library_modification","click .save_library_btn":"save_library_modification","click .delete_library_btn":"delete_library","click .undelete_library_btn":"undelete_library"},edit_mode:false,element_visibility_config:{upload_library_btn:false,edit_library_btn:false,permission_library_btn:false,save_library_btn:false,cancel_library_btn:false,delete_library_btn:false,undelete_library_btn:false},initialize:function(e){this.render(e)},render:function(f){if(typeof f==="undefined"){f=Galaxy.libraries.libraryListView.collection.get(this.$el.data("id"))}this.prepareButtons(f);var e=this.templateRow();this.setElement(e({library:f,button_config:this.element_visibility_config,edit_mode:this.edit_mode}));this.$el.show();return this},repaint:function(e){$(".tooltip").hide();var f=this.$el;this.render(e);f.replaceWith(this.$el);this.$el.find("[data-toggle]").tooltip()},prepareButtons:function(e){vis_config=this.element_visibility_config;if(this.edit_mode===false){vis_config.save_library_btn=false;vis_config.cancel_library_btn=false;vis_config.delete_library_btn=false;if(e.get("deleted")===true){vis_config.undelete_library_btn=true;vis_config.upload_library_btn=false;vis_config.edit_library_btn=false;vis_config.permission_library_btn=false}else{if(e.get("deleted")===false){vis_config.save_library_btn=false;vis_config.cancel_library_btn=false;vis_config.undelete_library_btn=false;if(e.get("can_user_add")===true){vis_config.upload_library_btn=true}if(e.get("can_user_modify")===true){vis_config.edit_library_btn=true}if(e.get("can_user_manage")===true){vis_config.permission_library_btn=true}}}}else{if(this.edit_mode===true){vis_config.upload_library_btn=false;vis_config.edit_library_btn=false;vis_config.permission_library_btn=false;vis_config.save_library_btn=true;vis_config.cancel_library_btn=true;vis_config.delete_library_btn=true;vis_config.undelete_library_btn=false}}this.element_visibility_config=vis_config},edit_button_clicked:function(){this.edit_mode=true;this.repaint()},cancel_library_modification:function(){this.edit_mode=false;this.repaint()},save_library_modification:function(){var f=Galaxy.libraries.libraryListView.collection.get(this.$el.data("id"));var g=false;var i=this.$el.find(".input_library_name").val();if(typeof i!=="undefined"&&i!==f.get("name")){if(i.length>2){f.set("name",i);g=true}else{d.warning("Library name has to be at least 3 characters long");return}}var h=this.$el.find(".input_library_description").val();if(typeof h!=="undefined"&&h!==f.get("description")){f.set("description",h);g=true}var j=this.$el.find(".input_library_synopsis").val();if(typeof j!=="undefined"&&j!==f.get("synopsis")){f.set("synopsis",j);g=true}if(g){var e=this;f.save(null,{patch:true,success:function(k){e.edit_mode=false;e.repaint(k);d.success("Changes to library saved")},error:function(l,k){if(typeof k.responseJSON!=="undefined"){d.error(k.responseJSON.err_msg)}else{d.error("An error occured during updating the library :(")}}})}else{this.edit_mode=false;this.repaint(f);d.info("Nothing has changed")}},delete_library:function(){var f=Galaxy.libraries.libraryListView.collection.get(this.$el.data("id"));var e=this;f.destroy({success:function(g){g.set("deleted",true);Galaxy.libraries.libraryListView.collection.add(g);e.edit_mode=false;if(Galaxy.libraries.preferences.get("with_deleted")===false){$(".tooltip").hide();e.repaint(g);e.$el.remove()}else{if(Galaxy.libraries.preferences.get("with_deleted")===true){e.repaint(g)}}d.success("Library has been marked deleted")},error:function(h,g){if(typeof g.responseJSON!=="undefined"){d.error(g.responseJSON.err_msg)}else{d.error("An error occured during deleting the library :(")}}})},undelete_library:function(){var f=Galaxy.libraries.libraryListView.collection.get(this.$el.data("id"));var e=this;f.url=f.urlRoot+f.id+"?undelete=true";f.destroy({success:function(g){g.set("deleted",false);Galaxy.libraries.libraryListView.collection.add(g);e.edit_mode=false;e.repaint(g);d.success("Library has been undeleted")},error:function(h,g){if(typeof g.responseJSON!=="undefined"){d.error(g.responseJSON.err_msg)}else{d.error("An error occured while undeleting the library :(")}}})},templateRow:function(){tmpl_array=[];tmpl_array.push(' <tr class="<% if(library.get("deleted") === true) { print("active") } %>" style="display:none;" data-id="<%- library.get("id") %>">');tmpl_array.push(" <% if(!edit_mode) { %>");tmpl_array.push(' <% if(library.get("deleted")) { %>');tmpl_array.push(' <td style="color:grey;"><span data-toggle="tooltip" data-placement="top" title="Marked deleted" style="color:grey;" class="fa fa-ban fa-lg deleted_lib_ico"></span><%- library.get("name") %></td>');tmpl_array.push(" <% } else { %>");tmpl_array.push(' <td><a href="#folders/<%- library.get("root_folder_id") %>"><%- library.get("name") %></a></td>');tmpl_array.push(" <% } %>");tmpl_array.push(' <% if(library.get("description")) { %>');tmpl_array.push(' <% if( (library.get("description")).length> 80 ) { %>');tmpl_array.push(' <td data-toggle="tooltip" data-placement="bottom" title="<%= _.escape(library.get("description")) %>"><%= _.escape(library.get("description")).substring(0, 80) + "..." %></td>');tmpl_array.push(" <% } else { %>");tmpl_array.push(' <td><%= _.escape(library.get("description"))%></td>');tmpl_array.push(" <% } %>");tmpl_array.push(" <% } else { %>");tmpl_array.push(" <td></td>");tmpl_array.push(" <% } %>");tmpl_array.push(' <% if(library.get("synopsis")) { %>');tmpl_array.push(' <% if( (library.get("synopsis")).length> 120 ) { %>');tmpl_array.push(' <td data-toggle="tooltip" data-placement="bottom" title="<%= _.escape(library.get("synopsis")) %>"><%= _.escape(library.get("synopsis")).substring(0, 120) + "..." %></td>');tmpl_array.push(" <% } else { %>");tmpl_array.push(' <td><%= _.escape(library.get("synopsis"))%></td>');tmpl_array.push(" <% } %>");tmpl_array.push(" <% } else { %>");tmpl_array.push(" <td></td>");tmpl_array.push(" <% } %>");tmpl_array.push(" <% } else if(edit_mode){ %>");tmpl_array.push(' <td><textarea rows="4" class="form-control input_library_name" placeholder="name" ><%- library.get("name") %></textarea></td>');tmpl_array.push(' <td><textarea rows="4" class="form-control input_library_description" placeholder="description" ><%- library.get("description") %></textarea></td>');tmpl_array.push(' <td><textarea rows="4" class="form-control input_library_synopsis" placeholder="synopsis" ><%- library.get("synopsis") %></textarea></td>');tmpl_array.push(" <% } %>");tmpl_array.push(' <td class="right-center">');tmpl_array.push(' <% if( (library.get("public")) && (library.get("deleted") === false) ) { %>');tmpl_array.push(' <span data-toggle="tooltip" data-placement="top" title="Unrestricted library" style="color:grey;" class="fa fa-globe fa-lg public_lib_ico"></span>');tmpl_array.push(" <% }%>");tmpl_array.push(' <button data-toggle="tooltip" data-placement="top" title="Modify <%- library.get("name") %>" class="primary-button btn-xs edit_library_btn" type="button" style="<% if(button_config.edit_library_btn === false) { print("display:none;") } %>"><span class="fa fa-pencil"></span></button>');tmpl_array.push(' <a href="#library/<%- library.get("id") %>/permissions"><button data-toggle="tooltip" data-placement="top" title="Modify permissions" class="primary-button btn-xs permission_library_btn" type="button" style="<% if(button_config.permission_library_btn === false) { print("display:none;") } %>"><span class="fa fa-group"></span></button></a>');tmpl_array.push(' <button data-toggle="tooltip" data-placement="top" title="Save changes" class="primary-button btn-xs save_library_btn" type="button" style="<% if(button_config.save_library_btn === false) { print("display:none;") } %>"><span class="fa fa-floppy-o"> Save</span></button>');tmpl_array.push(' <button data-toggle="tooltip" data-placement="top" title="Discard changes" class="primary-button btn-xs cancel_library_btn" type="button" style="<% if(button_config.cancel_library_btn === false) { print("display:none;") } %>"><span class="fa fa-times"> Cancel</span></button>');tmpl_array.push(' <button data-toggle="tooltip" data-placement="top" title="Delete <%- library.get("name") %>" class="primary-button btn-xs delete_library_btn" type="button" style="<% if(button_config.delete_library_btn === false) { print("display:none;") } %>"><span class="fa fa-trash-o"> Delete</span></button>');tmpl_array.push(' <button data-toggle="tooltip" data-placement="top" title="Undelete <%- library.get("name") %> " class="primary-button btn-xs undelete_library_btn" type="button" style="<% if(button_config.undelete_library_btn === false) { print("display:none;") } %>"><span class="fa fa-unlock"> Undelete</span></button>');tmpl_array.push(" </td>");tmpl_array.push(" </tr>");return _.template(tmpl_array.join(""))}});return{LibraryRowView:a}});
\ No newline at end of file
diff -r a4a6834f4b2fe443f40235fd6331a7da7fa09d57 -r 858c12951cfa764fb8b948e360b29f8a9e90b89b static/scripts/packed/mvc/library/library-model.js
--- a/static/scripts/packed/mvc/library/library-model.js
+++ b/static/scripts/packed/mvc/library/library-model.js
@@ -1,1 +1,1 @@
-define([],function(){var f=Backbone.Model.extend({urlRoot:"/api/libraries/",isVisible:function(m){var l=true;if((!m)&&(this.get("deleted"))){l=false}return l}});var i=Backbone.Collection.extend({url:"/api/libraries",model:f,sort_key:"name",sort_order:null,initialize:function(l){l=l||{}},getVisible:function(m,n){n=n||[];var l=new i(this.filter(function(o){return o.isVisible(m)}));return l},sortByNameAsc:function(){this.comparator=function(m,l){if(m.get("name").toLowerCase()>l.get("name").toLowerCase()){return 1}if(l.get("name").toLowerCase()>m.get("name").toLowerCase()){return -1}return 0};this.sort();return this},sortByNameDesc:function(){this.comparator=function(m,l){if(m.get("name").toLowerCase()>l.get("name").toLowerCase()){return -1}if(l.get("name").toLowerCase()>m.get("name").toLowerCase()){return 1}return 0};this.sort();return this}});var g=Backbone.Model.extend({urlRoot:"/api/libraries/datasets/"});var k=Backbone.Model.extend({urlRoot:"/api/libraries/datasets/"});var a=Backbone.Model.extend({urlRoot:"/api/folders"});var c=Backbone.Collection.extend({model:g,sortByNameAsc:function(){this.comparator=function(m,l){if(m.get("type")===l.get("type")){if(m.get("name").toLowerCase()>l.get("name").toLowerCase()){return 1}if(l.get("name").toLowerCase()>m.get("name").toLowerCase()){return -1}return 0}else{if(m.get("type")==="folder"){return -1}else{return 1}}};this.sort();return this},sortByNameDesc:function(){this.comparator=function(m,l){if(m.get("type")===l.get("type")){if(m.get("name").toLowerCase()>l.get("name").toLowerCase()){return -1}if(l.get("name").toLowerCase()>m.get("name").toLowerCase()){return 1}return 0}else{if(m.get("type")==="folder"){return -1}else{return 1}}};this.sort();return this}});var e=Backbone.Model.extend({defaults:{folder:new c(),urlRoot:"/api/folders/",id:"unknown"},parse:function(l){this.get("folder").reset(l.folder_contents);return l}});var b=Backbone.Model.extend({urlRoot:"/api/histories/"});var d=Backbone.Collection.extend({urlRoot:"/api/histories/",initialize:function(l){this.id=l.id},url:function(){return this.urlRoot+this.id+"/contents"},model:b});var h=Backbone.Model.extend({urlRoot:"/api/histories/"});var j=Backbone.Collection.extend({url:"/api/histories",model:h});return{Library:f,FolderAsModel:a,Libraries:i,Item:g,Ldda:k,Folder:c,FolderContainer:e,HistoryItem:b,HistoryContents:d,GalaxyHistory:h,GalaxyHistories:j}});
\ No newline at end of file
+define([],function(){var f=Backbone.Model.extend({urlRoot:"/api/libraries/",isVisible:function(n){var m=true;if((!n)&&(this.get("deleted"))){m=false}return m}});var i=Backbone.Collection.extend({url:"/api/libraries",model:f,sort_key:"name",sort_order:null,initialize:function(m){m=m||{}},getVisible:function(n,o){o=o||[];var m=new i(this.filter(function(p){return p.isVisible(n)}));return m},sortByNameAsc:function(){this.comparator=function(n,m){if(n.get("name").toLowerCase()>m.get("name").toLowerCase()){return 1}if(m.get("name").toLowerCase()>n.get("name").toLowerCase()){return -1}return 0};this.sort();return this},sortByNameDesc:function(){this.comparator=function(n,m){if(n.get("name").toLowerCase()>m.get("name").toLowerCase()){return -1}if(m.get("name").toLowerCase()>n.get("name").toLowerCase()){return 1}return 0};this.sort();return this}});var g=Backbone.Model.extend({urlRoot:"/api/libraries/datasets/"});var l=Backbone.Model.extend({urlRoot:"/api/libraries/datasets/"});var a=Backbone.Model.extend({urlRoot:"/api/folders"});var c=Backbone.Collection.extend({model:g,sortByNameAsc:function(){this.comparator=function(n,m){if(n.get("type")===m.get("type")){if(n.get("name").toLowerCase()>m.get("name").toLowerCase()){return 1}if(m.get("name").toLowerCase()>n.get("name").toLowerCase()){return -1}return 0}else{if(n.get("type")==="folder"){return -1}else{return 1}}};this.sort();return this},sortByNameDesc:function(){this.comparator=function(n,m){if(n.get("type")===m.get("type")){if(n.get("name").toLowerCase()>m.get("name").toLowerCase()){return -1}if(m.get("name").toLowerCase()>n.get("name").toLowerCase()){return 1}return 0}else{if(n.get("type")==="folder"){return -1}else{return 1}}};this.sort();return this}});var e=Backbone.Model.extend({defaults:{folder:new c(),urlRoot:"/api/folders/",id:"unknown"},parse:function(m){this.get("folder").reset(m.folder_contents);return m}});var b=Backbone.Model.extend({urlRoot:"/api/histories/"});var d=Backbone.Collection.extend({urlRoot:"/api/histories/",initialize:function(m){this.id=m.id},url:function(){return this.urlRoot+this.id+"/contents"},model:b});var h=Backbone.Model.extend({urlRoot:"/api/histories/"});var k=Backbone.Collection.extend({url:"/api/histories",model:h});var j=Backbone.Model.extend({urlRoot:"/api/ftp_files"});return{Library:f,FolderAsModel:a,Libraries:i,Item:g,Ldda:l,Folder:c,FolderContainer:e,HistoryItem:b,HistoryContents:d,GalaxyHistory:h,GalaxyHistories:k,Jstree:j}});
\ No newline at end of file
https://bitbucket.org/galaxy/galaxy-central/commits/d277478dce50/
Changeset: d277478dce50
User: martenson
Date: 2014-09-16 15:40:08+00:00
Summary: Merge
Affected #: 293 files
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 config/plugins/visualizations/charts/templates/charts.mako
--- a/config/plugins/visualizations/charts/templates/charts.mako
+++ b/config/plugins/visualizations/charts/templates/charts.mako
@@ -86,8 +86,8 @@
require(['plugin/app'], function(App) {
// load options
var options = {
- id : ${h.to_json_string( visualization_id )} || undefined,
- config : ${h.to_json_string( config )}
+ id : ${h.dumps( visualization_id )} || undefined,
+ config : ${h.dumps( config )}
}
// create application
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 config/plugins/visualizations/common/templates/config_utils.mako
--- a/config/plugins/visualizations/common/templates/config_utils.mako
+++ b/config/plugins/visualizations/common/templates/config_utils.mako
@@ -36,7 +36,7 @@
'action' : 'saved',
'type' : visualization_name,
'title' : title,
- 'config' : h.to_json_string( config )
+ 'config' : h.dumps( config )
}
# save to existing visualization
if visualization_id:
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 config/plugins/visualizations/scatterplot/templates/scatterplot.mako
--- a/config/plugins/visualizations/scatterplot/templates/scatterplot.mako
+++ b/config/plugins/visualizations/scatterplot/templates/scatterplot.mako
@@ -50,11 +50,11 @@
<script type="text/javascript">
$(function(){
var model = new ScatterplotModel({
- id : ${h.to_json_string( visualization_id )} || undefined,
+ id : ${h.dumps( visualization_id )} || undefined,
title : "${title}",
- config : ${h.to_json_string( config, indent=2 )}
+ config : ${h.dumps( config, indent=2 )}
});
- hdaJson = ${h.to_json_string( trans.security.encode_dict_ids( hda.to_dict() ), indent=2 )},
+ hdaJson = ${h.dumps( trans.security.encode_dict_ids( hda.to_dict() ), indent=2 )},
display = new ScatterplotDisplay({
el : $( '.scatterplot-display' ).attr( 'id', 'scatterplot-display-' + '${visualization_id}' ),
model : model,
@@ -78,11 +78,11 @@
<script type="text/javascript">
$(function(){
var model = new ScatterplotModel({
- id : ${h.to_json_string( visualization_id )} || undefined,
+ id : ${h.dumps( visualization_id )} || undefined,
title : "${title or default_title}",
- config : ${h.to_json_string( config, indent=2 )}
+ config : ${h.dumps( config, indent=2 )}
}),
- hdaJson = ${h.to_json_string( trans.security.encode_dict_ids( hda.to_dict() ), indent=2 )},
+ hdaJson = ${h.dumps( trans.security.encode_dict_ids( hda.to_dict() ), indent=2 )},
editor = new ScatterplotConfigEditor({
el : $( '.scatterplot-editor' ).attr( 'id', 'scatterplot-editor-hda-' + hdaJson.id ),
model : model,
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 display_applications/igv/bam.xml
--- a/display_applications/igv/bam.xml
+++ b/display_applications/igv/bam.xml
@@ -12,15 +12,19 @@
<dynamic_param name="site_organisms" value="4" split="True" separator="," /><!-- Filter out some of the links based upon matching site_dbkeys to dataset dbkey -->
- <filter>${dataset.dbkey in $site_dbkeys}</filter>
-
+ <filter>${$site_id.startswith( 'local_' ) or $dataset.dbkey in $site_dbkeys}</filter>
+
<!-- We define url and params as normal, but values defined in dynamic_param are available by specified name --><url>${redirect_url}</url><param type="data" name="bam_file" url="galaxy_${DATASET_HASH}.bam" /><param type="data" name="bai_file" url="galaxy_${DATASET_HASH}.bam.bai" metadata="bam_index" /><param type="template" name="site_organism" strip="True" >
- $site_organisms[ $site_dbkeys.index( $bam_file.dbkey ) ]
+ #if ($dataset.dbkey in $site_dbkeys)
+ $site_organisms[ $site_dbkeys.index( $bam_file.dbkey ) ]
+ #else:
+ $bam_file.dbkey
+ #end if
</param><param type="template" name="jnlp" url="galaxy_${DATASET_HASH}.jnlp" viewable="True" mimetype="application/x-java-jnlp-file"><?xml version="1.0" encoding="utf-8"?>
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 display_applications/igv/vcf.xml
--- a/display_applications/igv/vcf.xml
+++ b/display_applications/igv/vcf.xml
@@ -12,15 +12,19 @@
<dynamic_param name="site_organisms" value="4" split="True" separator="," /><!-- Filter out some of the links based upon matching site_dbkeys to dataset dbkey -->
- <filter>${dataset.dbkey in $site_dbkeys}</filter>
-
+ <filter>${$site_id.startswith( 'local_' ) or $dataset.dbkey in $site_dbkeys}</filter>
+
<!-- We define url and params as normal, but values defined in dynamic_param are available by specified name --><url>${redirect_url}</url><param type="data" name="bgzip_file" url="galaxy_${DATASET_HASH}.vcf.gz" format="vcf_bgzip" /><param type="data" name="tabix_file" dataset="bgzip_file" url="galaxy_${DATASET_HASH}.vcf.gz.tbi" format="tabix" /><param type="template" name="site_organism" strip="True" >
- $site_organisms[ $site_dbkeys.index( $bgzip_file.dbkey ) ]
+ #if ($dataset.dbkey in $site_dbkeys)
+ $site_organisms[ $site_dbkeys.index( $bgzip_file.dbkey ) ]
+ #else:
+ $bgzip_file.dbkey
+ #end if
</param><param type="template" name="jnlp" url="galaxy_${DATASET_HASH}.jnlp" viewable="True" mimetype="application/x-java-jnlp-file"><?xml version="1.0" encoding="utf-8"?>
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 display_applications/ucsc/bam.xml
--- a/display_applications/ucsc/bam.xml
+++ b/display_applications/ucsc/bam.xml
@@ -6,7 +6,7 @@
<dynamic_param name="ucsc_link" value="1"/><dynamic_param name="builds" value="2" split="True" separator="," /><!-- Filter out some of the links based upon matching site_id to a Galaxy application configuration parameter and by dataset dbkey -->
- <filter>${site_id in $APP.config.ucsc_display_sites}</filter>
+ <filter>${site_id in $APP.datatypes_registry.get_display_sites('ucsc')}</filter><filter>${dataset.dbkey in $builds}</filter><!-- We define url and params as normal, but values defined in dynamic_param are available by specified name --><url>${ucsc_link}db=${qp($bam_file.dbkey)}&hgt.customText=${qp($track.url)}</url>
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 display_applications/ucsc/bigbed.xml
--- a/display_applications/ucsc/bigbed.xml
+++ b/display_applications/ucsc/bigbed.xml
@@ -6,7 +6,7 @@
<dynamic_param name="ucsc_link" value="1"/><dynamic_param name="builds" value="2" split="True" separator="," /><!-- Filter out some of the links based upon matching site_id to a Galaxy application configuration parameter and by dataset dbkey -->
- <filter>${site_id in $APP.config.ucsc_display_sites}</filter>
+ <filter>${site_id in $APP.datatypes_registry.get_display_sites('ucsc')}</filter><filter>${dataset.dbkey in $builds}</filter><!-- We define url and params as normal, but values defined in dynamic_param are available by specified name --><url>${ucsc_link}db=${qp($bigbed_file.dbkey)}&hgt.customText=${qp($track.url)}</url>
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 display_applications/ucsc/bigwig.xml
--- a/display_applications/ucsc/bigwig.xml
+++ b/display_applications/ucsc/bigwig.xml
@@ -6,7 +6,7 @@
<dynamic_param name="ucsc_link" value="1"/><dynamic_param name="builds" value="2" split="True" separator="," /><!-- Filter out some of the links based upon matching site_id to a Galaxy application configuration parameter and by dataset dbkey -->
- <filter>${site_id in $APP.config.ucsc_display_sites}</filter>
+ <filter>${site_id in $APP.datatypes_registry.get_display_sites('ucsc')}</filter><filter>${dataset.dbkey in $builds}</filter><!-- We define url and params as normal, but values defined in dynamic_param are available by specified name --><url>${ucsc_link}db=${qp($bigwig_file.dbkey)}&hgt.customText=${qp($track.url)}</url>
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 display_applications/ucsc/interval_as_bed.xml
--- a/display_applications/ucsc/interval_as_bed.xml
+++ b/display_applications/ucsc/interval_as_bed.xml
@@ -6,7 +6,7 @@
<dynamic_param name="ucsc_link" value="1"/><dynamic_param name="builds" value="2" split="True" separator="," /><!-- Filter out some of the links based upon matching site_id to a Galaxy application configuration parameter and by dataset dbkey -->
- <filter>${site_id in $APP.config.ucsc_display_sites}</filter>
+ <filter>${site_id in $APP.datatypes_registry.get_display_sites('ucsc')}</filter><filter>${dataset.dbkey in $builds}</filter><!-- We define url and params as normal, but values defined in dynamic_param are available by specified name --><url>${ucsc_link}db=${qp($bed_file.dbkey)}&position=${position.qp}&hgt.customText=${bed_file.qp}</url>
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 display_applications/ucsc/maf_customtrack.xml
--- a/display_applications/ucsc/maf_customtrack.xml
+++ b/display_applications/ucsc/maf_customtrack.xml
@@ -6,7 +6,7 @@
<dynamic_param name="ucsc_link" value="1"/><dynamic_param name="builds" value="2" split="True" separator="," /><!-- Filter out some of the links based upon matching site_id to a Galaxy application configuration parameter and by dataset dbkey -->
- <filter>${site_id in $APP.config.ucsc_display_sites}</filter>
+ <filter>${site_id in $APP.datatypes_registry.get_display_sites('ucsc')}</filter><filter>${dataset.dbkey in $builds}</filter><!-- We define url and params as normal, but values defined in dynamic_param are available by specified name --><url>${ucsc_link}db=${qp($maf_customtrack_file.dbkey)}&position=${maf_customtrack_file.metadata.vp_chromosome}:${maf_customtrack_file.metadata.vp_start}-${maf_customtrack_file.metadata.vp_end}&hgt.customText=${maf_customtrack_file.qp}</url>
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 display_applications/ucsc/vcf.xml
--- a/display_applications/ucsc/vcf.xml
+++ b/display_applications/ucsc/vcf.xml
@@ -6,7 +6,7 @@
<dynamic_param name="ucsc_link" value="1"/><dynamic_param name="builds" value="2" split="True" separator="," /><!-- Filter out some of the links based upon matching site_id to a Galaxy application configuration parameter and by dataset dbkey -->
- <filter>${site_id in $APP.config.ucsc_display_sites}</filter>
+ <filter>${site_id in $APP.datatypes_registry.get_display_sites('ucsc')}</filter><filter>${dataset.dbkey in $builds}</filter><!-- We define url and params as normal, but values defined in dynamic_param are available by specified name --><url>${ucsc_link}db=${qp($bgzip_file.dbkey)}&hgt.customText=${qp($track.url)}</url>
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/app.py
--- a/lib/galaxy/app.py
+++ b/lib/galaxy/app.py
@@ -5,7 +5,7 @@
from galaxy import config, jobs
import galaxy.model
import galaxy.security
-from galaxy import dataset_collections
+from galaxy.managers.collections import DatasetCollectionManager
import galaxy.quota
from galaxy.tags.tag_handler import GalaxyTagHandler
from galaxy.visualization.genomes import Genomes
@@ -57,7 +57,7 @@
# Tag handler
self.tag_handler = GalaxyTagHandler()
# Dataset Collection Plugins
- self.dataset_collections_service = dataset_collections.DatasetCollectionsService(self)
+ self.dataset_collections_service = DatasetCollectionManager(self)
# Tool Data Tables
self._configure_tool_data_tables( from_shed_config=False )
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/dataset_collections/__init__.py
--- a/lib/galaxy/dataset_collections/__init__.py
+++ b/lib/galaxy/dataset_collections/__init__.py
@@ -1,295 +0,0 @@
-from .registry import DatasetCollectionTypesRegistry
-from .matching import MatchingCollections
-from .type_description import CollectionTypeDescriptionFactory
-
-
-from galaxy import model
-from galaxy.exceptions import MessageException
-from galaxy.exceptions import ItemAccessibilityException
-from galaxy.exceptions import RequestParameterInvalidException
-from galaxy.web.base.controller import (
- UsesHistoryDatasetAssociationMixin,
- UsesLibraryMixinItems,
- UsesTagsMixin,
-)
-from galaxy.managers import hdas # TODO: Refactor all mixin use into managers.
-from galaxy.managers.collections_util import validate_input_element_identifiers
-from galaxy.util import validation
-from galaxy.util import odict
-
-import logging
-log = logging.getLogger( __name__ )
-
-
-ERROR_INVALID_ELEMENTS_SPECIFICATION = "Create called with invalid parameters, must specify element identifiers."
-ERROR_NO_COLLECTION_TYPE = "Create called without specifing a collection type."
-
-
-class DatasetCollectionsService(
- UsesHistoryDatasetAssociationMixin,
- UsesLibraryMixinItems,
- UsesTagsMixin,
-):
- """
- Abstraction for interfacing with dataset collections instance - ideally abstarcts
- out model and plugin details.
- """
-
- def __init__( self, app ):
- self.type_registry = DatasetCollectionTypesRegistry( app )
- self.collection_type_descriptions = CollectionTypeDescriptionFactory( self.type_registry )
- self.model = app.model
- self.security = app.security
- self.hda_manager = hdas.HDAManager()
-
- def create(
- self,
- trans,
- parent, # PRECONDITION: security checks on ability to add to parent occurred during load.
- name,
- collection_type,
- element_identifiers=None,
- elements=None,
- implicit_collection_info=None,
- ):
- """
- """
- # Trust embedded, newly created objects created by tool subsystem.
- trusted_identifiers = implicit_collection_info is not None
-
- if element_identifiers and not trusted_identifiers:
- validate_input_element_identifiers( element_identifiers )
-
- dataset_collection = self.__create_dataset_collection(
- trans=trans,
- collection_type=collection_type,
- element_identifiers=element_identifiers,
- elements=elements,
- )
- if isinstance( parent, model.History ):
- dataset_collection_instance = self.model.HistoryDatasetCollectionAssociation(
- collection=dataset_collection,
- name=name,
- )
- if implicit_collection_info:
- for input_name, input_collection in implicit_collection_info[ "implicit_inputs" ]:
- dataset_collection_instance.add_implicit_input_collection( input_name, input_collection )
- for output_dataset in implicit_collection_info.get( "outputs" ):
- output_dataset.hidden_beneath_collection_instance = dataset_collection_instance
- trans.sa_session.add( output_dataset )
-
- dataset_collection_instance.implicit_output_name = implicit_collection_info[ "implicit_output_name" ]
- log.debug("Created collection with %d elements" % ( len( dataset_collection_instance.collection.elements ) ) )
- # Handle setting hid
- parent.add_dataset_collection( dataset_collection_instance )
- elif isinstance( parent, model.LibraryFolder ):
- dataset_collection_instance = self.model.LibraryDatasetCollectionAssociation(
- collection=dataset_collection,
- folder=parent,
- name=name,
- )
- else:
- message = "Internal logic error - create called with unknown parent type %s" % type( parent )
- log.exception( message )
- raise MessageException( message )
-
- return self.__persist( dataset_collection_instance )
-
- def __create_dataset_collection(
- self,
- trans,
- collection_type,
- element_identifiers=None,
- elements=None,
- ):
- if element_identifiers is None and elements is None:
- raise RequestParameterInvalidException( ERROR_INVALID_ELEMENTS_SPECIFICATION )
- if not collection_type:
- raise RequestParameterInvalidException( ERROR_NO_COLLECTION_TYPE )
- collection_type_description = self.collection_type_descriptions.for_collection_type( collection_type )
- # If we have elements, this is an internal request, don't need to load
- # objects from identifiers.
- if elements is None:
- if collection_type_description.has_subcollections( ):
- # Nested collection - recursively create collections and update identifiers.
- self.__recursively_create_collections( trans, element_identifiers )
- elements = self.__load_elements( trans, element_identifiers )
- # else if elements is set, it better be an ordered dict!
-
- type_plugin = collection_type_description.rank_type_plugin()
- dataset_collection = type_plugin.build_collection( elements )
- dataset_collection.collection_type = collection_type
- return dataset_collection
-
- def delete( self, trans, instance_type, id ):
- dataset_collection_instance = self.get_dataset_collection_instance( trans, instance_type, id, check_ownership=True )
- dataset_collection_instance.deleted = True
- trans.sa_session.add( dataset_collection_instance )
- trans.sa_session.flush( )
-
- def update( self, trans, instance_type, id, payload ):
- dataset_collection_instance = self.get_dataset_collection_instance( trans, instance_type, id, check_ownership=True )
- if trans.user is None:
- anon_allowed_payload = {}
- if 'deleted' in payload:
- anon_allowed_payload[ 'deleted' ] = payload[ 'deleted' ]
- if 'visible' in payload:
- anon_allowed_payload[ 'visible' ] = payload[ 'visible' ]
- payload = self._validate_and_parse_update_payload( anon_allowed_payload )
- else:
- payload = self._validate_and_parse_update_payload( payload )
- changed = self._set_from_dict( trans, dataset_collection_instance, payload )
- return changed
-
- def copy(
- self,
- trans,
- parent, # PRECONDITION: security checks on ability to add to parent occurred during load.
- source,
- encoded_source_id,
- ):
- assert source == "hdca" # for now
- source_hdca = self.__get_history_collection_instance( trans, encoded_source_id )
- new_hdca = source_hdca.copy()
- parent.add_dataset_collection( new_hdca )
- trans.sa_session.add( new_hdca )
- trans.sa_session.flush()
- return source_hdca
-
- def _set_from_dict( self, trans, dataset_collection_instance, new_data ):
- # Blatantly stolen from UsesHistoryDatasetAssociationMixin.set_hda_from_dict.
-
- # send what we can down into the model
- changed = dataset_collection_instance.set_from_dict( new_data )
- # the rest (often involving the trans) - do here
- if 'annotation' in new_data.keys() and trans.get_user():
- dataset_collection_instance.add_item_annotation( trans.sa_session, trans.get_user(), dataset_collection_instance, new_data[ 'annotation' ] )
- changed[ 'annotation' ] = new_data[ 'annotation' ]
- if 'tags' in new_data.keys() and trans.get_user():
- self.set_tags_from_list( trans, dataset_collection_instance, new_data[ 'tags' ], user=trans.user )
-
- if changed.keys():
- trans.sa_session.flush()
-
- return changed
-
- def _validate_and_parse_update_payload( self, payload ):
- validated_payload = {}
- for key, val in payload.items():
- if val is None:
- continue
- if key in ( 'name' ):
- val = validation.validate_and_sanitize_basestring( key, val )
- validated_payload[ key ] = val
- if key in ( 'deleted', 'visible' ):
- validated_payload[ key ] = validation.validate_boolean( key, val )
- elif key == 'tags':
- validated_payload[ key ] = validation.validate_and_sanitize_basestring_list( key, val )
- return validated_payload
-
- def history_dataset_collections(self, history, query):
- collections = history.active_dataset_collections
- collections = filter( query.direct_match, collections )
- return collections
-
- def __persist( self, dataset_collection_instance ):
- context = self.model.context
- context.add( dataset_collection_instance )
- context.flush()
- return dataset_collection_instance
-
- def __recursively_create_collections( self, trans, element_identifiers ):
- for index, element_identifier in enumerate( element_identifiers ):
- try:
- if not element_identifier[ "src" ] == "new_collection":
- # not a new collection, keep moving...
- continue
- except KeyError:
- # Not a dictionary, just an id of an HDA - move along.
- continue
-
- # element identifier is a dict with src new_collection...
- collection_type = element_identifier.get( "collection_type", None )
- collection = self.__create_dataset_collection(
- trans=trans,
- collection_type=collection_type,
- element_identifiers=element_identifier[ "element_identifiers" ],
- )
- element_identifier[ "__object__" ] = collection
-
- return element_identifiers
-
- def __load_elements( self, trans, element_identifiers ):
- elements = odict.odict()
- for element_identifier in element_identifiers:
- elements[ element_identifier[ "name" ] ] = self.__load_element( trans, element_identifier )
- return elements
-
- def __load_element( self, trans, element_identifier ):
- #if not isinstance( element_identifier, dict ):
- # # Is allowing this to just be the id of an hda too clever? Somewhat
- # # consistent with other API methods though.
- # element_identifier = dict( src='hda', id=str( element_identifier ) )
-
- # Previously created collection already found in request, just pass
- # through as is.
- if "__object__" in element_identifier:
- return element_identifier[ "__object__" ]
-
- # dateset_identifier is dict {src=hda|ldda|hdca|new_collection, id=<encoded_id>}
- try:
- src_type = element_identifier.get( 'src', 'hda' )
- except AttributeError:
- raise MessageException( "Dataset collection element definition (%s) not dictionary-like." % element_identifier )
- encoded_id = element_identifier.get( 'id', None )
- if not src_type or not encoded_id:
- raise RequestParameterInvalidException( "Problem decoding element identifier %s" % element_identifier )
-
- if src_type == 'hda':
- decoded_id = int( trans.app.security.decode_id( encoded_id ) )
- element = self.hda_manager.get( trans, decoded_id, check_ownership=False )
- elif src_type == 'ldda':
- element = self.get_library_dataset_dataset_association( trans, encoded_id )
- elif src_type == 'hdca':
- # TODO: Option to copy? Force copy? Copy or allow if not owned?
- element = self.__get_history_collection_instance( trans, encoded_id ).collection
- # TODO: ldca.
- else:
- raise RequestParameterInvalidException( "Unknown src_type parameter supplied '%s'." % src_type )
- return element
-
- def match_collections( self, collections_to_match ):
- """
- May seem odd to place it here, but planning to grow sophistication and
- get plugin types involved so it will likely make sense in the future.
- """
- return MatchingCollections.for_collections( collections_to_match, self.collection_type_descriptions )
-
- def get_dataset_collection_instance( self, trans, instance_type, id, **kwds ):
- """
- """
- if instance_type == "history":
- return self.__get_history_collection_instance( trans, id, **kwds )
- elif instance_type == "library":
- return self.__get_library_collection_instance( trans, id, **kwds )
-
- def get_dataset_collection( self, trans, encoded_id ):
- collection_id = int( trans.app.security.decode_id( encoded_id ) )
- collection = trans.sa_session.query( trans.app.model.DatasetCollection ).get( collection_id )
- return collection
-
- def __get_history_collection_instance( self, trans, id, check_ownership=False, check_accessible=True ):
- instance_id = int( trans.app.security.decode_id( id ) )
- collection_instance = trans.sa_session.query( trans.app.model.HistoryDatasetCollectionAssociation ).get( instance_id )
- self.security_check( trans, collection_instance.history, check_ownership=check_ownership, check_accessible=check_accessible )
- return collection_instance
-
- def __get_library_collection_instance( self, trans, id, check_ownership=False, check_accessible=True ):
- if check_ownership:
- raise NotImplemented( "Functionality (getting library dataset collection with ownership check) unimplemented." )
- instance_id = int( trans.security.decode_id( id ) )
- collection_instance = trans.sa_session.query( trans.app.model.LibraryDatasetCollectionAssociation ).get( instance_id )
- if check_accessible:
- if not trans.app.security_agent.can_access_library_item( trans.get_current_user_roles(), collection_instance, trans.user ):
- raise ItemAccessibilityException( "LibraryDatasetCollectionAssociation is not accessible to the current user", type='error' )
- return collection_instance
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/datatypes/converters/bedgraph_to_array_tree_converter.py
--- a/lib/galaxy/datatypes/converters/bedgraph_to_array_tree_converter.py
+++ b/lib/galaxy/datatypes/converters/bedgraph_to_array_tree_converter.py
@@ -52,4 +52,4 @@
FileArrayTreeDict.dict_to_file( d, open( out_fname, "w" ) )
if __name__ == "__main__":
- main()
\ No newline at end of file
+ main()
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/datatypes/converters/fasta_to_len.py
--- a/lib/galaxy/datatypes/converters/fasta_to_len.py
+++ b/lib/galaxy/datatypes/converters/fasta_to_len.py
@@ -49,4 +49,4 @@
out.close()
if __name__ == "__main__" :
- compute_fasta_length( sys.argv[1], sys.argv[2], sys.argv[3], True )
\ No newline at end of file
+ compute_fasta_length( sys.argv[1], sys.argv[2], sys.argv[3], True )
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/datatypes/converters/fasta_to_tabular_converter.py
--- a/lib/galaxy/datatypes/converters/fasta_to_tabular_converter.py
+++ b/lib/galaxy/datatypes/converters/fasta_to_tabular_converter.py
@@ -40,4 +40,4 @@
print >> out, "%s\t%s" %( fasta_title, sequence )
out.close()
-if __name__ == "__main__" : __main__()
\ No newline at end of file
+if __name__ == "__main__" : __main__()
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/datatypes/converters/fastqsolexa_to_fasta_converter.py
--- a/lib/galaxy/datatypes/converters/fastqsolexa_to_fasta_converter.py
+++ b/lib/galaxy/datatypes/converters/fastqsolexa_to_fasta_converter.py
@@ -52,4 +52,4 @@
outfile.close()
-if __name__ == "__main__": __main__()
\ No newline at end of file
+if __name__ == "__main__": __main__()
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/datatypes/converters/interval_to_coverage.py
--- a/lib/galaxy/datatypes/converters/interval_to_coverage.py
+++ b/lib/galaxy/datatypes/converters/interval_to_coverage.py
@@ -149,4 +149,4 @@
fix_strand=True )
main( interval, coverage )
temp_file.close()
- coverage.close()
\ No newline at end of file
+ coverage.close()
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/datatypes/converters/wiggle_to_array_tree_converter.py
--- a/lib/galaxy/datatypes/converters/wiggle_to_array_tree_converter.py
+++ b/lib/galaxy/datatypes/converters/wiggle_to_array_tree_converter.py
@@ -26,4 +26,4 @@
FileArrayTreeDict.dict_to_file( d, open( out_fname, "w" ) )
if __name__ == "__main__":
- main()
\ No newline at end of file
+ main()
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/datatypes/tabular.py
--- a/lib/galaxy/datatypes/tabular.py
+++ b/lib/galaxy/datatypes/tabular.py
@@ -14,7 +14,7 @@
from galaxy.datatypes.checkers import is_gzip
from galaxy.datatypes.metadata import MetadataElement
from galaxy.datatypes.sniff import get_headers, get_test_fname
-from galaxy.util.json import to_json_string
+from galaxy.util.json import dumps
import dataproviders
log = logging.getLogger(__name__)
@@ -272,7 +272,7 @@
while cursor and ck_data[-1] != '\n':
ck_data += cursor
cursor = f.read(1)
- return to_json_string( { 'ck_data': util.unicodify( ck_data ), 'ck_index': ck_index + 1 } )
+ return dumps( { 'ck_data': util.unicodify( ck_data ), 'ck_index': ck_index + 1 } )
def display_data(self, trans, dataset, preview=False, filename=None, to_ext=None, chunk=None, **kwd):
preview = util.string_as_bool( preview )
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/datatypes/util/__init__.py
--- a/lib/galaxy/datatypes/util/__init__.py
+++ b/lib/galaxy/datatypes/util/__init__.py
@@ -1,3 +1,3 @@
"""
Utilities for Galaxy datatypes.
-"""
\ No newline at end of file
+"""
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/external_services/result_handlers/basic.py
--- a/lib/galaxy/external_services/result_handlers/basic.py
+++ b/lib/galaxy/external_services/result_handlers/basic.py
@@ -1,4 +1,4 @@
-from galaxy.util.json import to_json_string, from_json_string
+from galaxy.util.json import dumps, loads
from galaxy.util.template import fill_template
import logging
@@ -44,7 +44,7 @@
type = 'json_display'
def handle_result( self, result, param_dict, trans ):
- rval = from_json_string( result.content )
+ rval = loads( result.content )
return trans.fill_template( '/external_services/generic_json.mako', result = rval, param_dict = param_dict, action=self.parent )
class ExternalServiceActionJQueryGridResultHandler( ExternalServiceActionResultHandler ):
@@ -53,7 +53,7 @@
type = 'jquery_grid'
def handle_result( self, result, param_dict, trans ):
- rval = from_json_string( result.content )
+ rval = loads( result.content )
return trans.fill_template( '/external_services/generic_jquery_grid.mako', result = rval, param_dict = param_dict, action=self.parent )
result_type_to_class = {}
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/jobs/__init__.py
--- a/lib/galaxy/jobs/__init__.py
+++ b/lib/galaxy/jobs/__init__.py
@@ -25,7 +25,7 @@
from galaxy.jobs.runners import BaseJobRunner, JobState
from galaxy.util.bunch import Bunch
from galaxy.util.expressions import ExpressionContext
-from galaxy.util.json import from_json_string
+from galaxy.util.json import loads
from galaxy.util import unicodify
from .output_checker import check_output
@@ -723,7 +723,7 @@
self.job_runner_mapper = JobRunnerMapper( self, queue.dispatcher.url_to_destination, self.app.job_config )
self.params = None
if job.params:
- self.params = from_json_string( job.params )
+ self.params = loads( job.params )
if use_persisted_destination:
self.job_runner_mapper.cached_job_destination = JobDestination( from_job=job )
@@ -1390,7 +1390,7 @@
if os.path.exists( meta_file ):
for line in open( meta_file, 'r' ):
try:
- line = from_json_string( line )
+ line = loads( line )
assert 'type' in line
except:
log.exception( '(%s) Got JSON data from tool, but data is improperly formatted or no "type" key in data' % self.job_id )
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/jobs/actions/__init__.py
--- a/lib/galaxy/jobs/actions/__init__.py
+++ b/lib/galaxy/jobs/actions/__init__.py
@@ -1,4 +1,4 @@
"""
This package contains job action classes.
-"""
\ No newline at end of file
+"""
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/jobs/actions/post.py
--- a/lib/galaxy/jobs/actions/post.py
+++ b/lib/galaxy/jobs/actions/post.py
@@ -5,7 +5,7 @@
import datetime
import logging
from galaxy.util import send_mail
-from galaxy.util.json import to_json_string
+from galaxy.util.json import dumps
log = logging.getLogger( __name__ )
@@ -461,7 +461,7 @@
else:
# Not pja stuff.
pass
- return to_json_string(npd)
+ return dumps(npd)
@classmethod
def get_add_list(cls):
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/jobs/deferred/pacific_biosciences_smrt_portal.py
--- a/lib/galaxy/jobs/deferred/pacific_biosciences_smrt_portal.py
+++ b/lib/galaxy/jobs/deferred/pacific_biosciences_smrt_portal.py
@@ -83,7 +83,7 @@
return self.job_states.INVALID
url = 'http://' + job.params[ 'smrt_host' ] + self.api_path + '/Jobs/' + job.params[ 'smrt_job_id' ] + '/Status'
r = urllib2.urlopen( url )
- status = json.from_json_string( r.read() )
+ status = json.loads( r.read() )
# TODO: error handling: unexpected json or bad response, bad url, etc.
if status[ 'Code' ] == 'Completed':
log.debug( "SMRT Portal job '%s' is Completed. Initiating transfer." % job.params[ 'smrt_job_id' ] )
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/jobs/transfer_manager.py
--- a/lib/galaxy/jobs/transfer_manager.py
+++ b/lib/galaxy/jobs/transfer_manager.py
@@ -82,7 +82,7 @@
sock = socket.socket( socket.AF_INET, socket.SOCK_STREAM )
sock.settimeout( 5 )
sock.connect( ( 'localhost', tj.socket ) )
- sock.send( json.to_json_string( request ) )
+ sock.send( json.dumps( request ) )
response = sock.recv( 8192 )
valid, response = json.validate_jsonrpc_response( response, id=request['id'] )
if not valid:
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/managers/base.py
--- a/lib/galaxy/managers/base.py
+++ b/lib/galaxy/managers/base.py
@@ -1,7 +1,120 @@
+from galaxy import exceptions
+
+from galaxy import model
+from galaxy.model import tool_shed_install
+
+
+import logging
+log = logging.getLogger( __name__ )
class ModelManager( object ):
pass
+
class ModelSerializer( object ):
pass
+
+
+def security_check( trans, item, check_ownership=False, check_accessible=False ):
+ """ Security checks for an item: checks if (a) user owns item or (b) item
+ is accessible to user. This is a generic method for dealing with objects
+ uniformly from the older controller mixin code - however whenever possible
+ the managers for a particular model should be used to perform security
+ checks.
+ """
+
+ # all items are accessible to an admin
+ if trans.user_is_admin():
+ return item
+
+ # Verify ownership: there is a current user and that user is the same as the item's
+ if check_ownership:
+ if not trans.user:
+ raise exceptions.ItemOwnershipException( "Must be logged in to manage Galaxy items", type='error' )
+ if item.user != trans.user:
+ raise exceptions.ItemOwnershipException( "%s is not owned by the current user" % item.__class__.__name__, type='error' )
+
+ # Verify accessible:
+ # if it's part of a lib - can they access via security
+ # if it's something else (sharable) have they been added to the item's users_shared_with_dot_users
+ if check_accessible:
+ if type( item ) in ( trans.app.model.LibraryFolder, trans.app.model.LibraryDatasetDatasetAssociation, trans.app.model.LibraryDataset ):
+ if not trans.app.security_agent.can_access_library_item( trans.get_current_user_roles(), item, trans.user ):
+ raise exceptions.ItemAccessibilityException( "%s is not accessible to the current user" % item.__class__.__name__, type='error' )
+ else:
+ if ( item.user != trans.user ) and ( not item.importable ) and ( trans.user not in item.users_shared_with_dot_users ):
+ raise exceptions.ItemAccessibilityException( "%s is not accessible to the current user" % item.__class__.__name__, type='error' )
+ return item
+
+
+def get_class( class_name ):
+ """ Returns the class object that a string denotes. Without this method, we'd have to do eval(<class_name>). """
+ if class_name == 'History':
+ item_class = model.History
+ elif class_name == 'HistoryDatasetAssociation':
+ item_class = model.HistoryDatasetAssociation
+ elif class_name == 'Page':
+ item_class = model.Page
+ elif class_name == 'StoredWorkflow':
+ item_class = model.StoredWorkflow
+ elif class_name == 'Visualization':
+ item_class = model.Visualization
+ elif class_name == 'Tool':
+ item_class = model.Tool
+ elif class_name == 'Job':
+ item_class = model.Job
+ elif class_name == 'User':
+ item_class = model.User
+ elif class_name == 'Group':
+ item_class = model.Group
+ elif class_name == 'Role':
+ item_class = model.Role
+ elif class_name == 'Quota':
+ item_class = model.Quota
+ elif class_name == 'Library':
+ item_class = model.Library
+ elif class_name == 'LibraryFolder':
+ item_class = model.LibraryFolder
+ elif class_name == 'LibraryDatasetDatasetAssociation':
+ item_class = model.LibraryDatasetDatasetAssociation
+ elif class_name == 'LibraryDataset':
+ item_class = model.LibraryDataset
+ elif class_name == 'ToolShedRepository':
+ item_class = tool_shed_install.ToolShedRepository
+ else:
+ item_class = None
+ return item_class
+
+
+def get_object( trans, id, class_name, check_ownership=False, check_accessible=False, deleted=None ):
+ """
+ Convenience method to get a model object with the specified checks. This is
+ a generic method for dealing with objects uniformly from the older
+ controller mixin code - however whenever possible the managers for a
+ particular model should be used to load objects.
+ """
+ try:
+ decoded_id = trans.security.decode_id( id )
+ except:
+ raise exceptions.MessageException( "Malformed %s id ( %s ) specified, unable to decode"
+ % ( class_name, str( id ) ), type='error' )
+ try:
+ item_class = get_class( class_name )
+ assert item_class is not None
+ item = trans.sa_session.query( item_class ).get( decoded_id )
+ assert item is not None
+ except Exception:
+ log.exception( "Invalid %s id ( %s ) specified." % ( class_name, id ) )
+ raise exceptions.MessageException( "Invalid %s id ( %s ) specified" % ( class_name, id ), type="error" )
+
+ if check_ownership or check_accessible:
+ security_check( trans, item, check_ownership, check_accessible )
+ if deleted is True and not item.deleted:
+ raise exceptions.ItemDeletionException( '%s "%s" is not deleted'
+ % ( class_name, getattr( item, 'name', id ) ), type="warning" )
+ elif deleted is False and item.deleted:
+ raise exceptions.ItemDeletionException( '%s "%s" is deleted'
+ % ( class_name, getattr( item, 'name', id ) ), type="warning" )
+ return item
+
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/managers/collections.py
--- a/lib/galaxy/managers/collections.py
+++ b/lib/galaxy/managers/collections.py
@@ -1,1 +1,291 @@
-""" Future home of dataset collections managers. """
+from galaxy.dataset_collections.registry import DatasetCollectionTypesRegistry
+from galaxy.dataset_collections.matching import MatchingCollections
+from galaxy.dataset_collections.type_description import CollectionTypeDescriptionFactory
+
+from galaxy import model
+from galaxy.exceptions import MessageException
+from galaxy.exceptions import ItemAccessibilityException
+from galaxy.exceptions import RequestParameterInvalidException
+from galaxy.managers import hdas # TODO: Refactor all mixin use into managers.
+from galaxy.managers import histories
+from galaxy.managers import lddas
+from galaxy.managers import tags
+from galaxy.managers.collections_util import validate_input_element_identifiers
+from galaxy.util import validation
+from galaxy.util import odict
+
+import logging
+log = logging.getLogger( __name__ )
+
+
+ERROR_INVALID_ELEMENTS_SPECIFICATION = "Create called with invalid parameters, must specify element identifiers."
+ERROR_NO_COLLECTION_TYPE = "Create called without specifing a collection type."
+
+
+class DatasetCollectionManager( object ):
+ """
+ Abstraction for interfacing with dataset collections instance - ideally abstarcts
+ out model and plugin details.
+ """
+
+ def __init__( self, app ):
+ self.type_registry = DatasetCollectionTypesRegistry( app )
+ self.collection_type_descriptions = CollectionTypeDescriptionFactory( self.type_registry )
+ self.model = app.model
+ self.security = app.security
+ self.hda_manager = hdas.HDAManager()
+ self.history_manager = histories.HistoryManager()
+ self.tag_manager = tags.TagsManager( app )
+ self.ldda_manager = lddas.LDDAManager( )
+
+ def create(
+ self,
+ trans,
+ parent, # PRECONDITION: security checks on ability to add to parent occurred during load.
+ name,
+ collection_type,
+ element_identifiers=None,
+ elements=None,
+ implicit_collection_info=None,
+ ):
+ """
+ """
+ # Trust embedded, newly created objects created by tool subsystem.
+ trusted_identifiers = implicit_collection_info is not None
+
+ if element_identifiers and not trusted_identifiers:
+ validate_input_element_identifiers( element_identifiers )
+
+ dataset_collection = self.__create_dataset_collection(
+ trans=trans,
+ collection_type=collection_type,
+ element_identifiers=element_identifiers,
+ elements=elements,
+ )
+ if isinstance( parent, model.History ):
+ dataset_collection_instance = self.model.HistoryDatasetCollectionAssociation(
+ collection=dataset_collection,
+ name=name,
+ )
+ if implicit_collection_info:
+ for input_name, input_collection in implicit_collection_info[ "implicit_inputs" ]:
+ dataset_collection_instance.add_implicit_input_collection( input_name, input_collection )
+ for output_dataset in implicit_collection_info.get( "outputs" ):
+ output_dataset.hidden_beneath_collection_instance = dataset_collection_instance
+ trans.sa_session.add( output_dataset )
+
+ dataset_collection_instance.implicit_output_name = implicit_collection_info[ "implicit_output_name" ]
+ log.debug("Created collection with %d elements" % ( len( dataset_collection_instance.collection.elements ) ) )
+ # Handle setting hid
+ parent.add_dataset_collection( dataset_collection_instance )
+ elif isinstance( parent, model.LibraryFolder ):
+ dataset_collection_instance = self.model.LibraryDatasetCollectionAssociation(
+ collection=dataset_collection,
+ folder=parent,
+ name=name,
+ )
+ else:
+ message = "Internal logic error - create called with unknown parent type %s" % type( parent )
+ log.exception( message )
+ raise MessageException( message )
+
+ return self.__persist( dataset_collection_instance )
+
+ def __create_dataset_collection(
+ self,
+ trans,
+ collection_type,
+ element_identifiers=None,
+ elements=None,
+ ):
+ if element_identifiers is None and elements is None:
+ raise RequestParameterInvalidException( ERROR_INVALID_ELEMENTS_SPECIFICATION )
+ if not collection_type:
+ raise RequestParameterInvalidException( ERROR_NO_COLLECTION_TYPE )
+ collection_type_description = self.collection_type_descriptions.for_collection_type( collection_type )
+ # If we have elements, this is an internal request, don't need to load
+ # objects from identifiers.
+ if elements is None:
+ if collection_type_description.has_subcollections( ):
+ # Nested collection - recursively create collections and update identifiers.
+ self.__recursively_create_collections( trans, element_identifiers )
+ elements = self.__load_elements( trans, element_identifiers )
+ # else if elements is set, it better be an ordered dict!
+
+ type_plugin = collection_type_description.rank_type_plugin()
+ dataset_collection = type_plugin.build_collection( elements )
+ dataset_collection.collection_type = collection_type
+ return dataset_collection
+
+ def delete( self, trans, instance_type, id ):
+ dataset_collection_instance = self.get_dataset_collection_instance( trans, instance_type, id, check_ownership=True )
+ dataset_collection_instance.deleted = True
+ trans.sa_session.add( dataset_collection_instance )
+ trans.sa_session.flush( )
+
+ def update( self, trans, instance_type, id, payload ):
+ dataset_collection_instance = self.get_dataset_collection_instance( trans, instance_type, id, check_ownership=True )
+ if trans.user is None:
+ anon_allowed_payload = {}
+ if 'deleted' in payload:
+ anon_allowed_payload[ 'deleted' ] = payload[ 'deleted' ]
+ if 'visible' in payload:
+ anon_allowed_payload[ 'visible' ] = payload[ 'visible' ]
+ payload = self._validate_and_parse_update_payload( anon_allowed_payload )
+ else:
+ payload = self._validate_and_parse_update_payload( payload )
+ changed = self._set_from_dict( trans, dataset_collection_instance, payload )
+ return changed
+
+ def copy(
+ self,
+ trans,
+ parent, # PRECONDITION: security checks on ability to add to parent occurred during load.
+ source,
+ encoded_source_id,
+ ):
+ assert source == "hdca" # for now
+ source_hdca = self.__get_history_collection_instance( trans, encoded_source_id )
+ new_hdca = source_hdca.copy()
+ parent.add_dataset_collection( new_hdca )
+ trans.sa_session.add( new_hdca )
+ trans.sa_session.flush()
+ return source_hdca
+
+ def _set_from_dict( self, trans, dataset_collection_instance, new_data ):
+ # Blatantly stolen from UsesHistoryDatasetAssociationMixin.set_hda_from_dict.
+
+ # send what we can down into the model
+ changed = dataset_collection_instance.set_from_dict( new_data )
+ # the rest (often involving the trans) - do here
+ if 'annotation' in new_data.keys() and trans.get_user():
+ dataset_collection_instance.add_item_annotation( trans.sa_session, trans.get_user(), dataset_collection_instance, new_data[ 'annotation' ] )
+ changed[ 'annotation' ] = new_data[ 'annotation' ]
+ if 'tags' in new_data.keys() and trans.get_user():
+ self.tag_manager.set_tags_from_list( trans, dataset_collection_instance, new_data[ 'tags' ], user=trans.user )
+
+ if changed.keys():
+ trans.sa_session.flush()
+
+ return changed
+
+ def _validate_and_parse_update_payload( self, payload ):
+ validated_payload = {}
+ for key, val in payload.items():
+ if val is None:
+ continue
+ if key in ( 'name' ):
+ val = validation.validate_and_sanitize_basestring( key, val )
+ validated_payload[ key ] = val
+ if key in ( 'deleted', 'visible' ):
+ validated_payload[ key ] = validation.validate_boolean( key, val )
+ elif key == 'tags':
+ validated_payload[ key ] = validation.validate_and_sanitize_basestring_list( key, val )
+ return validated_payload
+
+ def history_dataset_collections(self, history, query):
+ collections = history.active_dataset_collections
+ collections = filter( query.direct_match, collections )
+ return collections
+
+ def __persist( self, dataset_collection_instance ):
+ context = self.model.context
+ context.add( dataset_collection_instance )
+ context.flush()
+ return dataset_collection_instance
+
+ def __recursively_create_collections( self, trans, element_identifiers ):
+ for index, element_identifier in enumerate( element_identifiers ):
+ try:
+ if not element_identifier[ "src" ] == "new_collection":
+ # not a new collection, keep moving...
+ continue
+ except KeyError:
+ # Not a dictionary, just an id of an HDA - move along.
+ continue
+
+ # element identifier is a dict with src new_collection...
+ collection_type = element_identifier.get( "collection_type", None )
+ collection = self.__create_dataset_collection(
+ trans=trans,
+ collection_type=collection_type,
+ element_identifiers=element_identifier[ "element_identifiers" ],
+ )
+ element_identifier[ "__object__" ] = collection
+
+ return element_identifiers
+
+ def __load_elements( self, trans, element_identifiers ):
+ elements = odict.odict()
+ for element_identifier in element_identifiers:
+ elements[ element_identifier[ "name" ] ] = self.__load_element( trans, element_identifier )
+ return elements
+
+ def __load_element( self, trans, element_identifier ):
+ #if not isinstance( element_identifier, dict ):
+ # # Is allowing this to just be the id of an hda too clever? Somewhat
+ # # consistent with other API methods though.
+ # element_identifier = dict( src='hda', id=str( element_identifier ) )
+
+ # Previously created collection already found in request, just pass
+ # through as is.
+ if "__object__" in element_identifier:
+ return element_identifier[ "__object__" ]
+
+ # dateset_identifier is dict {src=hda|ldda|hdca|new_collection, id=<encoded_id>}
+ try:
+ src_type = element_identifier.get( 'src', 'hda' )
+ except AttributeError:
+ raise MessageException( "Dataset collection element definition (%s) not dictionary-like." % element_identifier )
+ encoded_id = element_identifier.get( 'id', None )
+ if not src_type or not encoded_id:
+ raise RequestParameterInvalidException( "Problem decoding element identifier %s" % element_identifier )
+
+ if src_type == 'hda':
+ decoded_id = int( trans.app.security.decode_id( encoded_id ) )
+ element = self.hda_manager.get( trans, decoded_id, check_ownership=False )
+ elif src_type == 'ldda':
+ element = self.ldda_manager.get( trans, encoded_id )
+ elif src_type == 'hdca':
+ # TODO: Option to copy? Force copy? Copy or allow if not owned?
+ element = self.__get_history_collection_instance( trans, encoded_id ).collection
+ # TODO: ldca.
+ else:
+ raise RequestParameterInvalidException( "Unknown src_type parameter supplied '%s'." % src_type )
+ return element
+
+ def match_collections( self, collections_to_match ):
+ """
+ May seem odd to place it here, but planning to grow sophistication and
+ get plugin types involved so it will likely make sense in the future.
+ """
+ return MatchingCollections.for_collections( collections_to_match, self.collection_type_descriptions )
+
+ def get_dataset_collection_instance( self, trans, instance_type, id, **kwds ):
+ """
+ """
+ if instance_type == "history":
+ return self.__get_history_collection_instance( trans, id, **kwds )
+ elif instance_type == "library":
+ return self.__get_library_collection_instance( trans, id, **kwds )
+
+ def get_dataset_collection( self, trans, encoded_id ):
+ collection_id = int( trans.app.security.decode_id( encoded_id ) )
+ collection = trans.sa_session.query( trans.app.model.DatasetCollection ).get( collection_id )
+ return collection
+
+ def __get_history_collection_instance( self, trans, id, check_ownership=False, check_accessible=True ):
+ instance_id = int( trans.app.security.decode_id( id ) )
+ collection_instance = trans.sa_session.query( trans.app.model.HistoryDatasetCollectionAssociation ).get( instance_id )
+ self.history_manager.secure( trans, collection_instance.history, check_ownership=check_ownership, check_accessible=check_accessible )
+ return collection_instance
+
+ def __get_library_collection_instance( self, trans, id, check_ownership=False, check_accessible=True ):
+ if check_ownership:
+ raise NotImplemented( "Functionality (getting library dataset collection with ownership check) unimplemented." )
+ instance_id = int( trans.security.decode_id( id ) )
+ collection_instance = trans.sa_session.query( trans.app.model.LibraryDatasetCollectionAssociation ).get( instance_id )
+ if check_accessible:
+ if not trans.app.security_agent.can_access_library_item( trans.get_current_user_roles(), collection_instance, trans.user ):
+ raise ItemAccessibilityException( "LibraryDatasetCollectionAssociation is not accessible to the current user", type='error' )
+ return collection_instance
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/managers/context.py
--- a/lib/galaxy/managers/context.py
+++ b/lib/galaxy/managers/context.py
@@ -4,7 +4,7 @@
import os
-from galaxy.util.json import to_json_string
+from galaxy.util.json import dumps
from galaxy.util import bunch
class ProvidesAppContext( object ):
@@ -19,7 +19,7 @@
Application-level logging of user actions.
"""
if self.app.config.log_actions:
- action = self.app.model.UserAction(action=action, context=context, params=unicode( to_json_string( params ) ) )
+ action = self.app.model.UserAction(action=action, context=context, params=unicode( dumps( params ) ) )
try:
if user:
action.user = user
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/managers/lddas.py
--- /dev/null
+++ b/lib/galaxy/managers/lddas.py
@@ -0,0 +1,16 @@
+from galaxy.managers import base as manager_base
+
+
+class LDDAManager( manager_base.ModelManager ):
+ """ A fairly sparse manager for LDDAs.
+ """
+
+ def __init__( self ):
+ """
+ Set up and initialize other managers needed by lddas.
+ """
+ pass
+
+ def get( self, trans, id, check_accessible=True ):
+ return manager_base.get_object( trans, id, 'LibraryDatasetDatasetAssociation',
+ check_ownership=False, check_accessible=check_accessible )
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/managers/tags.py
--- /dev/null
+++ b/lib/galaxy/managers/tags.py
@@ -0,0 +1,20 @@
+
+
+class TagsManager( object ):
+ """ Manages CRUD operations related to tagging objects.
+ """
+
+ def __init__( self, app ):
+ self.app = app
+ self.tag_handler = app.tag_handler
+
+ def set_tags_from_list( self, trans, item, new_tags_list, user=None ):
+ #precondition: item is already security checked against user
+ #precondition: incoming tags is a list of sanitized/formatted strings
+ user = user or trans.user
+
+ self.tag_handler.delete_item_tags( trans, user, item )
+ new_tags_str = ','.join( new_tags_list )
+ self.tag_handler.apply_item_tags( trans, user, item, unicode( new_tags_str.encode( 'utf-8' ), 'utf-8' ) )
+ trans.sa_session.flush()
+ return item.tags
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/model/item_attrs.py
--- a/lib/galaxy/model/item_attrs.py
+++ b/lib/galaxy/model/item_attrs.py
@@ -4,6 +4,7 @@
import galaxy
import logging
import datetime
+import uuid
log = logging.getLogger( __name__ )
@@ -186,6 +187,8 @@
return value_mapper.get( key )( item )
if type(item) == datetime.datetime:
return item.isoformat()
+ elif type(item) == uuid.UUID:
+ return str(item)
# Leaving this for future reference, though we may want a more
# generic way to handle special type mappings going forward.
# If the item is of a class that needs to be 'stringified' before being put into a JSON data structure
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/model/migrate/versions/0052_sample_dataset_table.py
--- a/lib/galaxy/model/migrate/versions/0052_sample_dataset_table.py
+++ b/lib/galaxy/model/migrate/versions/0052_sample_dataset_table.py
@@ -10,7 +10,7 @@
from sqlalchemy.exc import *
from galaxy.model.custom_types import *
-from galaxy.util.json import from_json_string, to_json_string
+from galaxy.util.json import loads, dumps
import datetime
now = datetime.datetime.utcnow
@@ -62,7 +62,7 @@
for r in result:
sample_id = r[0]
if r[1]:
- dataset_files = from_json_string(r[1])
+ dataset_files = loads(r[1])
for df in dataset_files:
if type(df) == type(dict()):
cmd = "INSERT INTO sample_dataset VALUES (%s, %s, %s, %s, '%s', '%s', '%s', '%s', '%s')"
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/model/migrate/versions/0054_visualization_dbkey.py
--- a/lib/galaxy/model/migrate/versions/0054_visualization_dbkey.py
+++ b/lib/galaxy/model/migrate/versions/0054_visualization_dbkey.py
@@ -6,7 +6,7 @@
from sqlalchemy.orm import *
from migrate import *
from migrate.changeset import *
-from galaxy.util.json import from_json_string
+from galaxy.util.json import loads
import logging
log = logging.getLogger( __name__ )
@@ -41,7 +41,7 @@
viz_id = viz['viz_id']
viz_rev_id = viz['viz_rev_id']
if viz[Visualization_revision_table.c.config]:
- dbkey = from_json_string(viz[Visualization_revision_table.c.config]).get('dbkey', "").replace("'", "\\'")
+ dbkey = loads(viz[Visualization_revision_table.c.config]).get('dbkey', "").replace("'", "\\'")
migrate_engine.execute("UPDATE visualization_revision SET dbkey='%s' WHERE id=%s" % (dbkey, viz_rev_id))
migrate_engine.execute("UPDATE visualization SET dbkey='%s' WHERE id=%s" % (dbkey, viz_id))
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/model/migrate/versions/0057_request_notify.py
--- a/lib/galaxy/model/migrate/versions/0057_request_notify.py
+++ b/lib/galaxy/model/migrate/versions/0057_request_notify.py
@@ -10,7 +10,7 @@
from sqlalchemy.exc import *
from galaxy.model.custom_types import *
-from galaxy.util.json import from_json_string, to_json_string
+from galaxy.util.json import loads, dumps
import datetime
now = datetime.datetime.utcnow
@@ -46,13 +46,13 @@
id = int(r[0])
notify_old = r[1]
notify_new = dict(email=[], sample_states=[], body='', subject='')
- cmd = "update request set notification='%s' where id=%i" % (to_json_string(notify_new), id)
+ cmd = "update request set notification='%s' where id=%i" % (dumps(notify_new), id)
migrate_engine.execute( cmd )
cmd = "SELECT id, notification FROM request"
result = migrate_engine.execute( cmd )
for r in result:
- rr = from_json_string(str(r[1]))
+ rr = loads(str(r[1]))
# remove the 'notify' column for non-sqlite databases.
if migrate_engine.name != 'sqlite':
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/model/migrate/versions/0059_sample_dataset_file_path.py
--- a/lib/galaxy/model/migrate/versions/0059_sample_dataset_file_path.py
+++ b/lib/galaxy/model/migrate/versions/0059_sample_dataset_file_path.py
@@ -10,7 +10,7 @@
from sqlalchemy.exc import *
from galaxy.model.custom_types import *
-from galaxy.util.json import from_json_string, to_json_string
+from galaxy.util.json import loads, dumps
import datetime
now = datetime.datetime.utcnow
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/model/migrate/versions/0065_add_name_to_form_fields_and_values.py
--- a/lib/galaxy/model/migrate/versions/0065_add_name_to_form_fields_and_values.py
+++ b/lib/galaxy/model/migrate/versions/0065_add_name_to_form_fields_and_values.py
@@ -9,7 +9,7 @@
from migrate import *
from migrate.changeset import *
from sqlalchemy.exc import *
-from galaxy.util.json import from_json_string, to_json_string
+from galaxy.util.json import loads, dumps
from galaxy.model.custom_types import _sniffnfix_pg9_hex
import datetime
@@ -53,13 +53,13 @@
fields = str( row[1] )
if not fields.strip():
continue
- fields_list = from_json_string( _sniffnfix_pg9_hex( fields ) )
+ fields_list = loads( _sniffnfix_pg9_hex( fields ) )
if len( fields_list ):
for index, field in enumerate( fields_list ):
field[ 'name' ] = 'field_%i' % index
field[ 'helptext' ] = field[ 'helptext' ].replace("'", "''").replace('"', "")
field[ 'label' ] = field[ 'label' ].replace("'", "''")
- fields_json = to_json_string( fields_list )
+ fields_json = dumps( fields_list )
if migrate_engine.name == 'mysql':
cmd = "UPDATE form_definition AS f SET f.fields='%s' WHERE f.id=%i" %( fields_json, form_definition_id )
else:
@@ -76,16 +76,16 @@
if not str( row[1] ).strip():
continue
row1 = str(row[1]).replace('\n', '').replace('\r', '')
- values_list = from_json_string( str( row1 ).strip() )
+ values_list = loads( str( row1 ).strip() )
if not str( row[2] ).strip():
continue
- fields_list = from_json_string( str( row[2] ).strip() )
+ fields_list = loads( str( row[2] ).strip() )
if fields_list and type(values_list) == type(list()):
values_dict = {}
for field_index, field in enumerate( fields_list ):
field_name = field[ 'name' ]
values_dict[ field_name ] = get_value(values_list, field_index )
- cmd = "UPDATE form_values SET content='%s' WHERE id=%i" %( to_json_string( values_dict ), form_values_id )
+ cmd = "UPDATE form_values SET content='%s' WHERE id=%i" %( dumps( values_dict ), form_values_id )
migrate_engine.execute( cmd )
def downgrade(migrate_engine):
@@ -110,17 +110,17 @@
form_values_id = int( row[0] )
if not str( row[1] ).strip():
continue
- values_dict = from_json_string( str( row[1] ) )
+ values_dict = loads( str( row[1] ) )
if not str( row[2] ).strip():
continue
- fields_list = from_json_string( str( row[2] ) )
+ fields_list = loads( str( row[2] ) )
if fields_list:
values_list = []
for field_index, field in enumerate( fields_list ):
field_name = field[ 'name' ]
field_value = values_dict[ field_name ]
values_list.append( field_value )
- cmd = "UPDATE form_values SET content='%s' WHERE id=%i" %( to_json_string( values_list ), form_values_id )
+ cmd = "UPDATE form_values SET content='%s' WHERE id=%i" %( dumps( values_list ), form_values_id )
migrate_engine.execute( cmd )
# remove name attribute from the field column of the form_definition table
cmd = "SELECT f.id, f.fields FROM form_definition AS f"
@@ -130,13 +130,13 @@
fields = str( row[1] )
if not fields.strip():
continue
- fields_list = from_json_string( _sniffnfix_pg9_hex( fields ) )
+ fields_list = loads( _sniffnfix_pg9_hex( fields ) )
if len( fields_list ):
for index, field in enumerate( fields_list ):
if field.has_key( 'name' ):
del field[ 'name' ]
if migrate_engine.name == 'mysql':
- cmd = "UPDATE form_definition AS f SET f.fields='%s' WHERE f.id=%i" %( to_json_string( fields_list ), form_definition_id )
+ cmd = "UPDATE form_definition AS f SET f.fields='%s' WHERE f.id=%i" %( dumps( fields_list ), form_definition_id )
else:
- cmd = "UPDATE form_definition SET fields='%s' WHERE id=%i" %( to_json_string( fields_list ), form_definition_id )
+ cmd = "UPDATE form_definition SET fields='%s' WHERE id=%i" %( dumps( fields_list ), form_definition_id )
migrate_engine.execute( cmd )
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/model/migrate/versions/0067_populate_sequencer_table.py
--- a/lib/galaxy/model/migrate/versions/0067_populate_sequencer_table.py
+++ b/lib/galaxy/model/migrate/versions/0067_populate_sequencer_table.py
@@ -13,7 +13,7 @@
from galaxy.model.custom_types import *
-from galaxy.util.json import from_json_string, to_json_string
+from galaxy.util.json import loads, dumps
import datetime
now = datetime.datetime.utcnow
@@ -104,7 +104,7 @@
'layout': 'none',
'default': '' } )
form_definition_type = 'Sequencer Information Form'
- form_definition_layout = to_json_string('[]')
+ form_definition_layout = dumps('[]')
cmd = "INSERT INTO form_definition VALUES ( %s, %s, %s, '%s', '%s', %s, '%s', '%s', '%s' )"
cmd = cmd % ( nextval( 'form_definition' ),
localtimestamp(),
@@ -112,7 +112,7 @@
form_definition_name,
form_definition_desc,
form_definition_current_id,
- to_json_string( form_definition_fields ),
+ dumps( form_definition_fields ),
form_definition_type,
form_definition_layout )
migrate_engine.execute( cmd )
@@ -134,7 +134,7 @@
values = str( row[1] )
if not values.strip():
continue
- values = from_json_string( values )
+ values = loads( values )
# proceed only if sequencer_info is a valid list
if values and type( values ) == type( dict() ):
if sequencer_info.get( 'host', '' ) == values.get( 'field_0', '' ) \
@@ -148,7 +148,7 @@
def add_sequencer( sequencer_index, sequencer_form_definition_id, sequencer_info ):
'''Adds a new sequencer to the sequencer table along with its form values.'''
# Create a new form values record with the supplied sequencer information
- values = to_json_string( { 'field_0': sequencer_info.get( 'host', '' ),
+ values = dumps( { 'field_0': sequencer_info.get( 'host', '' ),
'field_1': sequencer_info.get( 'username', '' ),
'field_2': sequencer_info.get( 'password', '' ),
'field_3': sequencer_info.get( 'data_dir', '' ),
@@ -233,7 +233,7 @@
# skip if sequencer_info is empty
if not sequencer_info.strip() or sequencer_info in ['None', 'null']:
continue
- sequencer_info = from_json_string( sequencer_info.strip() )
+ sequencer_info = loads( sequencer_info.strip() )
# proceed only if sequencer_info is a valid dict
if sequencer_info and type( sequencer_info ) == type( dict() ):
# check if this sequencer has already been added to the sequencer table
@@ -277,9 +277,9 @@
result = migrate_engine.execute( cmd )
for row in result:
request_type_id = row[0]
- seq_values = from_json_string( str( row[1] ) )
+ seq_values = loads( str( row[1] ) )
# create the datatx_info json dict
- datatx_info = to_json_string( dict( host = seq_values.get( 'field_0', '' ),
+ datatx_info = dumps( dict( host = seq_values.get( 'field_0', '' ),
username = seq_values.get( 'field_1', '' ),
password = seq_values.get( 'field_2', '' ),
data_dir = seq_values.get( 'field_3', '' ),
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/model/migrate/versions/0068_rename_sequencer_to_external_services.py
--- a/lib/galaxy/model/migrate/versions/0068_rename_sequencer_to_external_services.py
+++ b/lib/galaxy/model/migrate/versions/0068_rename_sequencer_to_external_services.py
@@ -15,7 +15,7 @@
from galaxy.model.custom_types import *
-from galaxy.util.json import from_json_string, to_json_string
+from galaxy.util.json import loads, dumps
import datetime
now = datetime.datetime.utcnow
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/model/migrate/versions/0076_fix_form_values_data_corruption.py
--- a/lib/galaxy/model/migrate/versions/0076_fix_form_values_data_corruption.py
+++ b/lib/galaxy/model/migrate/versions/0076_fix_form_values_data_corruption.py
@@ -9,7 +9,7 @@
from sqlalchemy.exc import *
import binascii
-from galaxy.util.json import from_json_string, to_json_string
+from galaxy.util.json import loads, dumps
import logging
log = logging.getLogger( __name__ )
@@ -42,11 +42,11 @@
# first check if loading the dict from the json succeeds
# if that fails, it means that the content field is corrupted.
try:
- field_values_dict = from_json_string( _sniffnfix_pg9_hex( str( row['field_values'] ) ) )
+ field_values_dict = loads( _sniffnfix_pg9_hex( str( row['field_values'] ) ) )
except Exception, e:
corrupted_rows = corrupted_rows + 1
# content field is corrupted
- fields_list = from_json_string( _sniffnfix_pg9_hex( str( row['fdfields'] ) ) )
+ fields_list = loads( _sniffnfix_pg9_hex( str( row['fdfields'] ) ) )
field_values_str = _sniffnfix_pg9_hex( str( row['field_values'] ) )
try:
#Encoding errors? Just to be safe.
@@ -85,7 +85,7 @@
# add to the new values dict
field_values_dict[ field['name'] ] = value
# update the db
- json_values = to_json_string(field_values_dict)
+ json_values = dumps(field_values_dict)
cmd = "UPDATE form_values SET content='%s' WHERE id=%i" %( json_values, int( row['id'] ) )
migrate_engine.execute( cmd )
try:
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/model/migrate/versions/0091_add_tool_version_tables.py
--- a/lib/galaxy/model/migrate/versions/0091_add_tool_version_tables.py
+++ b/lib/galaxy/model/migrate/versions/0091_add_tool_version_tables.py
@@ -12,7 +12,7 @@
# Need our custom types, but don't import anything else from model
from galaxy.model.custom_types import *
from galaxy.model.custom_types import _sniffnfix_pg9_hex
-from galaxy.util.json import from_json_string, to_json_string
+from galaxy.util.json import loads, dumps
import sys, logging
log = logging.getLogger( __name__ )
@@ -77,7 +77,7 @@
for row in result:
if row[1]:
tool_shed_repository_id = row[0]
- repository_metadata = from_json_string( _sniffnfix_pg9_hex( str( row[1] ) ) )
+ repository_metadata = loads( _sniffnfix_pg9_hex( str( row[1] ) ) )
# Create a new row in the tool table for each tool included in repository. We will NOT
# handle tool_version_associaions because we do not have the information we need to do so.
tools = repository_metadata.get( 'tools', [] )
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/model/migrate/versions/0115_longer_user_password_field.py
--- a/lib/galaxy/model/migrate/versions/0115_longer_user_password_field.py
+++ b/lib/galaxy/model/migrate/versions/0115_longer_user_password_field.py
@@ -22,4 +22,4 @@
try:
user.c.password.alter(type=String(40))
except:
- log.exception( "Altering password column failed" )
\ No newline at end of file
+ log.exception( "Altering password column failed" )
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/model/migrate/versions/0117_add_user_activation.py
--- a/lib/galaxy/model/migrate/versions/0117_add_user_activation.py
+++ b/lib/galaxy/model/migrate/versions/0117_add_user_activation.py
@@ -54,4 +54,4 @@
user_active.drop()
user_activation_token.drop()
except Exception, e:
- log.debug( "Dropping 'active' and 'activation_token' columns from galaxy_user table failed: %s" % ( str( e ) ) )
\ No newline at end of file
+ log.debug( "Dropping 'active' and 'activation_token' columns from galaxy_user table failed: %s" % ( str( e ) ) )
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/model/orm/logging_connection_proxy.py
--- a/lib/galaxy/model/orm/logging_connection_proxy.py
+++ b/lib/galaxy/model/orm/logging_connection_proxy.py
@@ -45,4 +45,4 @@
self.trace_logger.log( "sqlalchemy_query",
message="Query executed", statement=statement, parameters=parameters,
executemany=executemany, duration=duration )
- return rval
\ No newline at end of file
+ return rval
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/model/search.py
--- a/lib/galaxy/model/search.py
+++ b/lib/galaxy/model/search.py
@@ -39,7 +39,7 @@
Page, PageRevision)
from galaxy.model.tool_shed_install import ToolVersion
-from galaxy.util.json import to_json_string
+from galaxy.util.json import dumps
from sqlalchemy import and_
from sqlalchemy.orm import aliased
@@ -429,7 +429,7 @@
and_(
Job.id == alias.job_id,
alias.name == param_name,
- alias.value == to_json_string(right)
+ alias.value == dumps(right)
)
)
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/openid/__init__.py
--- a/lib/galaxy/openid/__init__.py
+++ b/lib/galaxy/openid/__init__.py
@@ -1,3 +1,3 @@
"""
OpenID functionality
-"""
\ No newline at end of file
+"""
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/tools/__init__.py
--- a/lib/galaxy/tools/__init__.py
+++ b/lib/galaxy/tools/__init__.py
@@ -756,7 +756,6 @@
tarball_files.append( ( filesystem_path, tarball_path ) )
image_found = True
tool_xml = tool_xml.replace( '${static_path}/%s' % tarball_path, tarball_path )
- log.debug( tarball_files )
# If one or more tool help images were found, add the modified tool XML to the tarball instead of the original.
if image_found:
fd, new_tool_config = tempfile.mkstemp( suffix='.xml' )
@@ -817,8 +816,7 @@
if len( data_table_definitions ) > 0:
# Put the data table definition XML in a temporary file.
table_definition = '<?xml version="1.0" encoding="utf-8"?>\n<tables>\n %s</tables>'
- table_xml = [ data_table.xml_string for data_table in data_table_definitions ]
- table_definition = table_definition % '\n'.join( table_xml )
+ table_definition = table_definition % '\n'.join( data_table_definitions )
fd, table_conf = tempfile.mkstemp()
os.close( fd )
file( table_conf, 'w' ).write( table_definition )
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/tools/actions/__init__.py
--- a/lib/galaxy/tools/actions/__init__.py
+++ b/lib/galaxy/tools/actions/__init__.py
@@ -4,7 +4,7 @@
from galaxy.tools.parameters import DataToolParameter
from galaxy.tools.parameters import DataCollectionToolParameter
from galaxy.tools.parameters.wrapped import WrappedParameters
-from galaxy.util.json import to_json_string
+from galaxy.util.json import dumps
from galaxy.util.none_like import NoneDataset
from galaxy.util.odict import odict
from galaxy.util.template import fill_template
@@ -324,7 +324,7 @@
job.add_output_dataset( name, dataset )
job.object_store_id = object_store_populator.object_store_id
if job_params:
- job.params = to_json_string( job_params )
+ job.params = dumps( job_params )
job.set_handler(tool.get_job_handler(job_params))
trans.sa_session.add( job )
# Now that we have a job id, we can remap any outputs if this is a rerun and the user chose to continue dependent jobs
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/tools/actions/metadata.py
--- a/lib/galaxy/tools/actions/metadata.py
+++ b/lib/galaxy/tools/actions/metadata.py
@@ -1,7 +1,7 @@
from __init__ import ToolAction
from galaxy.datatypes.metadata import JobExternalOutputMetadataWrapper
from galaxy.util.odict import odict
-from galaxy.util.json import to_json_string
+from galaxy.util.json import dumps
import logging
log = logging.getLogger( __name__ )
@@ -50,7 +50,7 @@
if user:
job.user_id = user.id
if job_params:
- job.params = to_json_string( job_params )
+ job.params = dumps( job_params )
start_job_state = job.state #should be job.states.NEW
try:
# For backward compatibility, some tools may not have versions yet.
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/tools/actions/upload_common.py
--- a/lib/galaxy/tools/actions/upload_common.py
+++ b/lib/galaxy/tools/actions/upload_common.py
@@ -7,7 +7,7 @@
from galaxy import datatypes, util
from galaxy.util.odict import odict
from galaxy.datatypes import sniff
-from galaxy.util.json import to_json_string
+from galaxy.util.json import dumps
from galaxy.model.orm import eagerload_all
from galaxy.exceptions import ObjectInvalid
@@ -342,7 +342,7 @@
# user cannot remove it unless the parent directory is writable.
if link_data_only == 'copy_files' and trans.app.config.external_chown_script:
_chown( uploaded_dataset.path )
- json_file.write( to_json_string( json ) + '\n' )
+ json_file.write( dumps( json ) + '\n' )
json_file.close()
if trans.app.config.external_chown_script:
_chown( json_file_path )
@@ -375,7 +375,7 @@
for name, value in tool.params_to_strings( params, trans.app ).iteritems():
job.add_parameter( name, value )
- job.add_parameter( 'paramfile', to_json_string( json_file_path ) )
+ job.add_parameter( 'paramfile', dumps( json_file_path ) )
object_store_id = None
for i, dataset in enumerate( data_list ):
if folder:
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/tools/imp_exp/__init__.py
--- a/lib/galaxy/tools/imp_exp/__init__.py
+++ b/lib/galaxy/tools/imp_exp/__init__.py
@@ -8,7 +8,7 @@
from galaxy.tools.parameters.basic import UnvalidatedValue
from galaxy.web.framework.helpers import to_unicode
from galaxy.model.item_attrs import UsesAnnotations
-from galaxy.util.json import from_json_string, to_json_string
+from galaxy.util.json import loads, dumps
from galaxy.web.base.controller import UsesHistoryMixin
log = logging.getLogger(__name__)
@@ -108,7 +108,7 @@
#
history_attr_file_name = os.path.join( archive_dir, 'history_attrs.txt')
history_attr_str = read_file_contents( history_attr_file_name )
- history_attrs = from_json_string( history_attr_str )
+ history_attrs = loads( history_attr_str )
# Create history.
new_history = model.History( name='imported from archive: %s' % history_attrs['name'].encode( 'utf-8' ), \
@@ -134,12 +134,12 @@
#
datasets_attrs_file_name = os.path.join( archive_dir, 'datasets_attrs.txt')
datasets_attr_str = read_file_contents( datasets_attrs_file_name )
- datasets_attrs = from_json_string( datasets_attr_str )
-
+ datasets_attrs = loads( datasets_attr_str )
+
if os.path.exists( datasets_attrs_file_name + ".provenance" ):
provenance_attr_str = read_file_contents( datasets_attrs_file_name + ".provenance" )
- provenance_attrs = from_json_string( provenance_attr_str )
- datasets_attrs += provenance_attrs
+ provenance_attrs = loads( provenance_attr_str )
+ datasets_attrs += provenance_attrs
# Get counts of how often each dataset file is used; a file can
# be linked to multiple dataset objects (HDAs).
@@ -230,7 +230,7 @@
return self.sa_session.query( model.HistoryDatasetAssociation ) \
.filter_by( history=new_history, hid=obj_dct['hid'] ).first()
return obj_dct
- jobs_attrs = from_json_string( jobs_attr_str, object_hook=as_hda )
+ jobs_attrs = loads( jobs_attr_str, object_hook=as_hda )
# Create each job.
for job_attrs in jobs_attrs:
@@ -279,7 +279,7 @@
.filter_by( history=new_history, hid=value.hid ).first()
value = input_hda.id
#print "added parameter %s-->%s to job %i" % ( name, value, imported_job.id )
- imported_job.add_parameter( name, to_json_string( value, cls=HistoryDatasetAssociationIDEncoder ) )
+ imported_job.add_parameter( name, dumps( value, cls=HistoryDatasetAssociationIDEncoder ) )
# TODO: Connect jobs to input datasets.
@@ -292,14 +292,14 @@
imported_job.add_output_dataset( output_hda.name, output_hda )
# Connect jobs to input datasets.
- if 'input_mapping' in job_attrs:
+ if 'input_mapping' in job_attrs:
for input_name, input_hid in job_attrs[ 'input_mapping' ].items():
#print "%s job has input dataset %i" % (imported_job.id, input_hid)
input_hda = self.sa_session.query( model.HistoryDatasetAssociation ) \
.filter_by( history=new_history, hid=input_hid ).first()
if input_hda:
imported_job.add_input_dataset( input_name, input_hda )
-
+
self.sa_session.flush()
@@ -409,7 +409,7 @@
}
history_attrs_filename = tempfile.NamedTemporaryFile( dir=temp_output_dir ).name
history_attrs_out = open( history_attrs_filename, 'w' )
- history_attrs_out.write( to_json_string( history_attrs ) )
+ history_attrs_out.write( dumps( history_attrs ) )
history_attrs_out.close()
jeha.history_attrs_filename = history_attrs_filename
@@ -427,12 +427,12 @@
included_datasets.append( dataset )
datasets_attrs_filename = tempfile.NamedTemporaryFile( dir=temp_output_dir ).name
datasets_attrs_out = open( datasets_attrs_filename, 'w' )
- datasets_attrs_out.write( to_json_string( datasets_attrs, cls=HistoryDatasetAssociationEncoder ) )
+ datasets_attrs_out.write( dumps( datasets_attrs, cls=HistoryDatasetAssociationEncoder ) )
datasets_attrs_out.close()
jeha.datasets_attrs_filename = datasets_attrs_filename
-
+
provenance_attrs_out = open( datasets_attrs_filename + ".provenance", 'w' )
- provenance_attrs_out.write( to_json_string( provenance_attrs, cls=HistoryDatasetAssociationEncoder ) )
+ provenance_attrs_out.write( dumps( provenance_attrs, cls=HistoryDatasetAssociationEncoder ) )
provenance_attrs_out.close()
#
@@ -477,7 +477,7 @@
job_attrs[ 'exit_code' ] = job.exit_code
job_attrs[ 'create_time' ] = job.create_time.isoformat()
job_attrs[ 'update_time' ] = job.update_time.isoformat()
-
+
# Get the job's parameters
try:
@@ -509,7 +509,7 @@
jobs_attrs_filename = tempfile.NamedTemporaryFile( dir=temp_output_dir ).name
jobs_attrs_out = open( jobs_attrs_filename, 'w' )
- jobs_attrs_out.write( to_json_string( jobs_attrs, cls=HistoryDatasetAssociationEncoder ) )
+ jobs_attrs_out.write( dumps( jobs_attrs, cls=HistoryDatasetAssociationEncoder ) )
jobs_attrs_out.close()
jeha.jobs_attrs_filename = jobs_attrs_filename
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/tools/imp_exp/export_history.py
--- a/lib/galaxy/tools/imp_exp/export_history.py
+++ b/lib/galaxy/tools/imp_exp/export_history.py
@@ -39,7 +39,7 @@
except OverflowError:
pass
datasets_attr_in.close()
- datasets_attrs = from_json_string( datasets_attr_str )
+ datasets_attrs = loads( datasets_attr_str )
# Add datasets to archive and update dataset attributes.
# TODO: security check to ensure that files added are in Galaxy dataset directory?
@@ -54,7 +54,7 @@
# Rewrite dataset attributes file.
datasets_attrs_out = open( datasets_attrs_file, 'w' )
- datasets_attrs_out.write( to_json_string( datasets_attrs ) )
+ datasets_attrs_out.write( dumps( datasets_attrs ) )
datasets_attrs_out.close()
# Finish archive.
@@ -80,4 +80,4 @@
# Create archive.
status = create_archive( history_attrs, dataset_attrs, job_attrs, out_file, gzip )
- print status
\ No newline at end of file
+ print status
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/tools/parameters/__init__.py
--- a/lib/galaxy/tools/parameters/__init__.py
+++ b/lib/galaxy/tools/parameters/__init__.py
@@ -85,7 +85,7 @@
for key, value in param_values.iteritems():
if key in params:
value = params[ key ].value_to_basic( value, app )
- rval[ key ] = str( to_json_string( value ) )
+ rval[ key ] = str( dumps( value ) )
return rval
@@ -98,7 +98,7 @@
"""
rval = dict()
for key, value in param_values.iteritems():
- value = json_fix( from_json_string( value ) )
+ value = json_fix( loads( value ) )
if key in params:
value = params[key].value_from_basic( value, app, ignore_errors )
rval[ key ] = value
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/tools/util/__init__.py
--- a/lib/galaxy/tools/util/__init__.py
+++ b/lib/galaxy/tools/util/__init__.py
@@ -3,4 +3,4 @@
FIXME: These are used by tool scripts, not the framework, and should not live
in this package.
-"""
\ No newline at end of file
+"""
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/util/__init__.py
--- a/lib/galaxy/util/__init__.py
+++ b/lib/galaxy/util/__init__.py
@@ -338,8 +338,8 @@
def pretty_print_json(json_data, is_json_string=False):
if is_json_string:
- json_data = json.from_json_string(json_data)
- return json.to_json_string(json_data, sort_keys=True, indent=4)
+ json_data = json.loads(json_data)
+ return json.dumps(json_data, sort_keys=True, indent=4)
# characters that are valid
valid_chars = set(string.letters + string.digits + " -=_.()/+*^,:?!")
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/util/backports/__init__.py
--- a/lib/galaxy/util/backports/__init__.py
+++ b/lib/galaxy/util/backports/__init__.py
@@ -1,3 +1,3 @@
"""
Modules for providing backward compatibility with future versions of Python
-"""
\ No newline at end of file
+"""
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/util/backports/importlib/__init__.py
--- a/lib/galaxy/util/backports/importlib/__init__.py
+++ b/lib/galaxy/util/backports/importlib/__init__.py
@@ -39,4 +39,4 @@
## Note: this was copied from
## http://svn.python.org/projects/python/trunk/Lib/importlib/__init__.py
- ## on 24 September 2012
\ No newline at end of file
+ ## on 24 September 2012
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/util/dbkeys.py
--- a/lib/galaxy/util/dbkeys.py
+++ b/lib/galaxy/util/dbkeys.py
@@ -3,7 +3,7 @@
"""
#dbkeys read from disk using builds.txt
from galaxy.util import read_dbnames
-from galaxy.util.json import from_json_string
+from galaxy.util.json import loads
import os.path
@@ -38,7 +38,7 @@
rval.append( ( dataset.dbkey, "%s (%s) [History]" % ( dataset.name, dataset.dbkey ) ) )
user = trans.user
if user and 'dbkeys' in user.preferences:
- user_keys = from_json_string( user.preferences['dbkeys'] )
+ user_keys = loads( user.preferences['dbkeys'] )
for key, chrom_dict in user_keys.iteritems():
rval.append( ( key, "%s (%s) [Custom]" % ( chrom_dict['name'], key ) ) )
# Load old builds.txt static keys
@@ -61,8 +61,8 @@
chrom_info = db_dataset.file_name
else:
# Do Custom Build handling
- if trans.user and ( 'dbkeys' in trans.user.preferences ) and ( dbkey in from_json_string( trans.user.preferences[ 'dbkeys' ] ) ):
- custom_build_dict = from_json_string( trans.user.preferences[ 'dbkeys' ] )[ dbkey ]
+ if trans.user and ( 'dbkeys' in trans.user.preferences ) and ( dbkey in loads( trans.user.preferences[ 'dbkeys' ] ) ):
+ custom_build_dict = loads( trans.user.preferences[ 'dbkeys' ] )[ dbkey ]
# HACK: the attempt to get chrom_info below will trigger the
# fasta-to-len converter if the dataset is not available or,
# which will in turn create a recursive loop when
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/util/json.py
--- a/lib/galaxy/util/json.py
+++ b/lib/galaxy/util/json.py
@@ -1,14 +1,16 @@
from __future__ import absolute_import
-__all__ = [ "to_json_string", "from_json_string", "json_fix", "validate_jsonrpc_request", "validate_jsonrpc_response", "jsonrpc_request", "jsonrpc_response" ]
+__all__ = [ "dumps", "loads", "json_fix", "validate_jsonrpc_request", "validate_jsonrpc_response", "jsonrpc_request", "jsonrpc_response" ]
import json
import logging
import random
import string
-to_json_string = json.dumps
-from_json_string = json.loads
+to_json_string = json.dumps # deprecated
+from_json_string = json.loads # deprecated
+dumps = json.dumps
+loads = json.loads
log = logging.getLogger( __name__ )
@@ -23,12 +25,12 @@
else:
return val
+
# Methods for handling JSON-RPC
-
def validate_jsonrpc_request( request, regular_methods, notification_methods ):
try:
- request = from_json_string( request )
+ request = loads( request )
except Exception, e:
return False, request, jsonrpc_response( id=None,
error=dict( code=-32700,
@@ -65,7 +67,7 @@
def validate_jsonrpc_response( response, id=None ):
try:
- response = from_json_string( response )
+ response = loads( response )
except Exception, e:
log.error( 'Response was not valid JSON: %s' % str( e ) )
log.debug( 'Response was: %s' % response )
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/util/log/__init__.py
--- a/lib/galaxy/util/log/__init__.py
+++ b/lib/galaxy/util/log/__init__.py
@@ -2,4 +2,4 @@
def __init__( self, name ):
self.name = name
def log( **kwargs ):
- raise TypeError( "Abstract Method" )
\ No newline at end of file
+ raise TypeError( "Abstract Method" )
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/util/pastescript/serve.py
--- a/lib/galaxy/util/pastescript/serve.py
+++ b/lib/galaxy/util/pastescript/serve.py
@@ -1056,4 +1056,4 @@
except BadCommand, e:
print e.message
exit_code = e.exit_code
- sys.exit(exit_code)
\ No newline at end of file
+ sys.exit(exit_code)
diff -r 858c12951cfa764fb8b948e360b29f8a9e90b89b -r d277478dce504dac182886b89192459bc6f83db3 lib/galaxy/visualization/data_providers/__init__.py
--- a/lib/galaxy/visualization/data_providers/__init__.py
+++ b/lib/galaxy/visualization/data_providers/__init__.py
@@ -1,3 +1,3 @@
"""
Galaxy visualization/visual analysis data providers.
-"""
\ No newline at end of file
+"""
This diff is so big that we needed to truncate the remainder.
https://bitbucket.org/galaxy/galaxy-central/commits/3497f7509b00/
Changeset: 3497f7509b00
User: martenson
Date: 2014-09-16 15:56:13+00:00
Summary: trying to merge
Affected #: 35 files
diff -r 80d68ea889c01357b520ecefc56f86b0a44549fc -r 3497f7509b007b04a4db905daf3509f1f3c76626 client/galaxy/scripts/galaxy.library.js
--- a/client/galaxy/scripts/galaxy.library.js
+++ b/client/galaxy/scripts/galaxy.library.js
@@ -47,7 +47,8 @@
"folders/:folder_id/datasets/:dataset_id" : "dataset_detail",
"folders/:folder_id/datasets/:dataset_id/permissions" : "dataset_permissions",
"folders/:folder_id/datasets/:dataset_id/versions/:ldda_id" : "dataset_version",
- "folders/:folder_id/download/:format" : "download"
+ "folders/:folder_id/download/:format" : "download",
+ "folders/:folder_id/import/:source" : "import_datasets"
},
back: function() {
@@ -147,6 +148,15 @@
}
Galaxy.libraries.folderView = new mod_library_folder_view.FolderView({id: folder_id, show_permissions: true});
});
+ this.library_router.on('route:import_datasets', function(folder_id, source){
+ if (Galaxy.libraries.folderToolbarView && Galaxy.libraries.folderListView){
+ Galaxy.libraries.folderToolbarView.showImportModal({source:source});
+ } else {
+ Galaxy.libraries.folderToolbarView = new mod_foldertoolbar_view.FolderToolbarView({id: folder_id});
+ Galaxy.libraries.folderListView = new mod_folderlist_view.FolderListView({id: folder_id});
+ Galaxy.libraries.folderToolbarView.showImportModal({source: source});
+ }
+ });
Backbone.history.start({pushState: false});
}
This diff is so big that we needed to truncate the remainder.
https://bitbucket.org/galaxy/galaxy-central/commits/aec146e3828b/
Changeset: aec146e3828b
User: martenson
Date: 2014-09-16 17:15:32+00:00
Summary: removed bug with missing return
Affected #: 5 files
diff -r 3497f7509b007b04a4db905daf3509f1f3c76626 -r aec146e3828b16812ca24c5f8651ba3d0d483a6a client/galaxy/scripts/mvc/library/library-foldertoolbar-view.js
--- a/client/galaxy/scripts/mvc/library/library-foldertoolbar-view.js
+++ b/client/galaxy/scripts/mvc/library/library-foldertoolbar-view.js
@@ -592,13 +592,15 @@
// need to check which paths to call
var that = this;
var popped_item = paths.pop();
- if (typeof popped_item === "undefined") {
+ if (typeof popped_item == "undefined") {
if (this.options.chain_call_control.failed_number === 0){
mod_toastr.success('Selected folders and their contents imported into the current folder');
Galaxy.modal.hide();
} else {
+ // TODO better error report
mod_toastr.error('Something went wrong :(');
}
+ return true;
}
var promise = $.when($.post('/api/libraries/datasets?encoded_folder_id=' + that.id +
'&source=' + source +
diff -r 3497f7509b007b04a4db905daf3509f1f3c76626 -r aec146e3828b16812ca24c5f8651ba3d0d483a6a static/scripts/mvc/library/library-foldertoolbar-view.js
--- a/static/scripts/mvc/library/library-foldertoolbar-view.js
+++ b/static/scripts/mvc/library/library-foldertoolbar-view.js
@@ -592,13 +592,14 @@
// need to check which paths to call
var that = this;
var popped_item = paths.pop();
- if (typeof popped_item === "undefined") {
+ if (typeof popped_item == "undefined") {
if (this.options.chain_call_control.failed_number === 0){
mod_toastr.success('Selected folders and their contents imported into the current folder');
Galaxy.modal.hide();
} else {
mod_toastr.error('Something went wrong :(');
}
+ return true;
}
var promise = $.when($.post('/api/libraries/datasets?encoded_folder_id=' + that.id +
'&source=' + source +
diff -r 3497f7509b007b04a4db905daf3509f1f3c76626 -r aec146e3828b16812ca24c5f8651ba3d0d483a6a static/scripts/packed/mvc/library/library-folderrow-view.js
--- a/static/scripts/packed/mvc/library/library-folderrow-view.js
+++ b/static/scripts/packed/mvc/library/library-folderrow-view.js
@@ -1,1 +1,1 @@
-define(["galaxy.masthead","utils/utils","libs/toastr","mvc/library/library-model","mvc/library/library-dataset-view"],function(c,e,f,d,b){var a=Backbone.View.extend({lastSelectedHistory:"",events:{"click .undelete_dataset_btn":"undelete_dataset"},options:{type:null},initialize:function(g){this.render(g)},render:function(g){var h=null;if(g.get("type")==="folder"){this.options.type="folder";h=this.templateRowFolder()}else{this.options.type="file";if(g.get("deleted")){h=this.templateRowDeletedFile()}else{h=this.templateRowFile()}}this.setElement(h({content_item:g}));this.$el.show();return this},showDatasetDetails:function(){Galaxy.libraries.datasetView=new b.LibraryDatasetView({id:this.id})},undelete_dataset:function(i){$(".tooltip").hide();var h=this;var g=$(i.target).closest("tr")[0].id;var j=Galaxy.libraries.folderListView.collection.get(g);j.url=j.urlRoot+j.id+"?undelete=true";j.destroy({success:function(l,k){Galaxy.libraries.folderListView.collection.remove(g);var m=new d.Item(k);Galaxy.libraries.folderListView.collection.add(m);f.success("Dataset undeleted. Click this to see it.","",{onclick:function(){h.showDatasetDetails()}})},error:function(l,k){if(typeof k.responseJSON!=="undefined"){f.error("Dataset was not undeleted. "+k.responseJSON.err_msg)}else{f.error("An error occured! Dataset was not undeleted. Please try again.")}}})},templateRowFolder:function(){tmpl_array=[];tmpl_array.push('<tr class="folder_row light library-row" id="<%- content_item.id %>">');tmpl_array.push(" <td>");tmpl_array.push(' <span title="Folder" class="fa fa-folder-o"></span>');tmpl_array.push(" </td>");tmpl_array.push(" <td></td>");tmpl_array.push(" <td>");tmpl_array.push(' <a href="#folders/<%- content_item.id %>"><%- content_item.get("name") %></a>');tmpl_array.push(" </td>");tmpl_array.push(" <td>folder</td>");tmpl_array.push(" <td></td>");tmpl_array.push(' <td><%= _.escape(content_item.get("update_time")) %></td>');tmpl_array.push(" <td>");tmpl_array.push(' <% if (content_item.get("can_manage")) { %><a href="#/folders/<%- content_item.id %>/permissions"><button data-toggle="tooltip" data-placement="top" class="primary-button btn-xs permissions-folder-btn show_on_hover" title="Manage permissions" style="display:none;"><span class="fa fa-group"></span></button></a><% } %>');tmpl_array.push(" </td>");tmpl_array.push("</tr>");return _.template(tmpl_array.join(""))},templateRowFile:function(){tmpl_array=[];tmpl_array.push('<tr class="dataset_row light library-row" id="<%- content_item.id %>">');tmpl_array.push(" <td>");tmpl_array.push(' <span title="Dataset" class="fa fa-file-o"></span>');tmpl_array.push(" </td>");tmpl_array.push(' <td style="text-align: center; "><input style="margin: 0;" type="checkbox"></td>');tmpl_array.push(' <td><a href="#folders/<%- content_item.get("folder_id") %>/datasets/<%- content_item.id %>" class="library-dataset"><%- content_item.get("name") %><a></td>');tmpl_array.push(' <td><%= _.escape(content_item.get("file_ext")) %></td>');tmpl_array.push(' <td><%= _.escape(content_item.get("file_size")) %></td>');tmpl_array.push(' <td><%= _.escape(content_item.get("update_time")) %></td>');tmpl_array.push(" <td>");tmpl_array.push(' <% if (content_item.get("is_unrestricted")) { %><span data-toggle="tooltip" data-placement="top" title="Unrestricted dataset" style="color:grey;" class="fa fa-globe fa-lg"></span><% } %>');tmpl_array.push(' <% if (content_item.get("is_private")) { %><span data-toggle="tooltip" data-placement="top" title="Private dataset" style="color:grey;" class="fa fa-key fa-lg"></span><% } %>');tmpl_array.push(' <% if ((content_item.get("is_unrestricted") === false) && (content_item.get("is_private") === false)) { %><span data-toggle="tooltip" data-placement="top" title="Restricted dataset" style="color:grey;" class="fa fa-shield fa-lg"></span><% } %>');tmpl_array.push(' <% if (content_item.get("can_manage")) { %><a href="#folders/<%- content_item.get("folder_id") %>/datasets/<%- content_item.id %>/permissions"><button data-toggle="tooltip" data-placement="top" class="primary-button btn-xs permissions-dataset-btn show_on_hover" title="Manage permissions" style="display:none;"><span class="fa fa-group"></span></button></a><% } %>');tmpl_array.push(" </td>");tmpl_array.push("</tr>");return _.template(tmpl_array.join(""))},templateRowDeletedFile:function(){tmpl_array=[];tmpl_array.push('<tr class="active deleted_dataset" id="<%- content_item.id %>">');tmpl_array.push(" <td>");tmpl_array.push(' <span title="Dataset" class="fa fa-file-o"></span>');tmpl_array.push(" </td>");tmpl_array.push(" <td></td>");tmpl_array.push(' <td style="color:grey;"><%- content_item.get("name") %></td>');tmpl_array.push(' <td><%= _.escape(content_item.get("file_ext")) %></td>');tmpl_array.push(' <td><%= _.escape(content_item.get("file_size")) %></td>');tmpl_array.push(' <td><%= _.escape(content_item.get("update_time")) %></td>');tmpl_array.push(' <td><span data-toggle="tooltip" data-placement="top" title="Marked deleted" style="color:grey;" class="fa fa-ban fa-lg"></span><button data-toggle="tooltip" data-placement="top" title="Undelete <%- content_item.get("name") %>" class="primary-button btn-xs undelete_dataset_btn show_on_hover" type="button" style="display:none; margin-left:1em;"><span class="fa fa-unlock"> Undelete</span></button></td>');tmpl_array.push("</tr>");return _.template(tmpl_array.join(""))}});return{FolderRowView:a}});
\ No newline at end of file
+define(["galaxy.masthead","utils/utils","libs/toastr","mvc/library/library-model","mvc/library/library-dataset-view"],function(c,e,f,d,b){var a=Backbone.View.extend({lastSelectedHistory:"",events:{"click .undelete_dataset_btn":"undelete_dataset"},options:{type:null},initialize:function(g){this.model=g;this.render(g)},render:function(g){var h=null;if(g.get("type")==="folder"){this.options.type="folder";h=this.templateRowFolder()}else{this.options.type="file";if(g.get("deleted")){h=this.templateRowDeletedFile()}else{h=this.templateRowFile()}}this.setElement(h({content_item:g}));this.$el.show();return this},showDatasetDetails:function(){Galaxy.libraries.datasetView=new b.LibraryDatasetView({id:this.id})},undelete_dataset:function(i){$(".tooltip").hide();var h=this;var g=$(i.target).closest("tr")[0].id;var j=Galaxy.libraries.folderListView.collection.get(g);j.url=j.urlRoot+j.id+"?undelete=true";j.destroy({success:function(l,k){Galaxy.libraries.folderListView.collection.remove(g);var m=new d.Item(k);Galaxy.libraries.folderListView.collection.add(m);f.success("Dataset undeleted. Click this to see it.","",{onclick:function(){var n=h.model.get("folder_id");window.location="#folders/"+n+"/datasets/"+h.id}})},error:function(l,k){if(typeof k.responseJSON!=="undefined"){f.error("Dataset was not undeleted. "+k.responseJSON.err_msg)}else{f.error("An error occured! Dataset was not undeleted. Please try again.")}}})},templateRowFolder:function(){tmpl_array=[];tmpl_array.push('<tr class="folder_row light library-row" id="<%- content_item.id %>">');tmpl_array.push(" <td>");tmpl_array.push(' <span title="Folder" class="fa fa-folder-o"></span>');tmpl_array.push(" </td>");tmpl_array.push(" <td></td>");tmpl_array.push(" <td>");tmpl_array.push(' <a href="#folders/<%- content_item.id %>"><%- content_item.get("name") %></a>');tmpl_array.push(" </td>");tmpl_array.push(" <td>folder</td>");tmpl_array.push(" <td></td>");tmpl_array.push(' <td><%= _.escape(content_item.get("update_time")) %></td>');tmpl_array.push(" <td>");tmpl_array.push(' <% if (content_item.get("can_manage")) { %><a href="#/folders/<%- content_item.id %>/permissions"><button data-toggle="tooltip" data-placement="top" class="primary-button btn-xs permissions-folder-btn show_on_hover" title="Manage permissions" style="display:none;"><span class="fa fa-group"></span></button></a><% } %>');tmpl_array.push(" </td>");tmpl_array.push("</tr>");return _.template(tmpl_array.join(""))},templateRowFile:function(){tmpl_array=[];tmpl_array.push('<tr class="dataset_row light library-row" id="<%- content_item.id %>">');tmpl_array.push(" <td>");tmpl_array.push(' <span title="Dataset" class="fa fa-file-o"></span>');tmpl_array.push(" </td>");tmpl_array.push(' <td style="text-align: center; "><input style="margin: 0;" type="checkbox"></td>');tmpl_array.push(' <td><a href="#folders/<%- content_item.get("folder_id") %>/datasets/<%- content_item.id %>" class="library-dataset"><%- content_item.get("name") %><a></td>');tmpl_array.push(' <td><%= _.escape(content_item.get("file_ext")) %></td>');tmpl_array.push(' <td><%= _.escape(content_item.get("file_size")) %></td>');tmpl_array.push(' <td><%= _.escape(content_item.get("update_time")) %></td>');tmpl_array.push(" <td>");tmpl_array.push(' <% if (content_item.get("is_unrestricted")) { %><span data-toggle="tooltip" data-placement="top" title="Unrestricted dataset" style="color:grey;" class="fa fa-globe fa-lg"></span><% } %>');tmpl_array.push(' <% if (content_item.get("is_private")) { %><span data-toggle="tooltip" data-placement="top" title="Private dataset" style="color:grey;" class="fa fa-key fa-lg"></span><% } %>');tmpl_array.push(' <% if ((content_item.get("is_unrestricted") === false) && (content_item.get("is_private") === false)) { %><span data-toggle="tooltip" data-placement="top" title="Restricted dataset" style="color:grey;" class="fa fa-shield fa-lg"></span><% } %>');tmpl_array.push(' <% if (content_item.get("can_manage")) { %><a href="#folders/<%- content_item.get("folder_id") %>/datasets/<%- content_item.id %>/permissions"><button data-toggle="tooltip" data-placement="top" class="primary-button btn-xs permissions-dataset-btn show_on_hover" title="Manage permissions" style="display:none;"><span class="fa fa-group"></span></button></a><% } %>');tmpl_array.push(" </td>");tmpl_array.push("</tr>");return _.template(tmpl_array.join(""))},templateRowDeletedFile:function(){tmpl_array=[];tmpl_array.push('<tr class="active deleted_dataset library-row" id="<%- content_item.id %>">');tmpl_array.push(" <td>");tmpl_array.push(' <span title="Dataset" class="fa fa-file-o"></span>');tmpl_array.push(" </td>");tmpl_array.push(" <td></td>");tmpl_array.push(' <td style="color:grey;"><%- content_item.get("name") %></td>');tmpl_array.push(' <td><%= _.escape(content_item.get("file_ext")) %></td>');tmpl_array.push(' <td><%= _.escape(content_item.get("file_size")) %></td>');tmpl_array.push(' <td><%= _.escape(content_item.get("update_time")) %></td>');tmpl_array.push(' <td><span data-toggle="tooltip" data-placement="top" title="Marked deleted" style="color:grey;" class="fa fa-ban fa-lg"></span><button data-toggle="tooltip" data-placement="top" title="Undelete <%- content_item.get("name") %>" class="primary-button btn-xs undelete_dataset_btn show_on_hover" type="button" style="display:none; margin-left:1em;"><span class="fa fa-unlock"> Undelete</span></button></td>');tmpl_array.push("</tr>");return _.template(tmpl_array.join(""))}});return{FolderRowView:a}});
\ No newline at end of file
diff -r 3497f7509b007b04a4db905daf3509f1f3c76626 -r aec146e3828b16812ca24c5f8651ba3d0d483a6a static/scripts/packed/mvc/library/library-foldertoolbar-view.js
--- a/static/scripts/packed/mvc/library/library-foldertoolbar-view.js
+++ b/static/scripts/packed/mvc/library/library-foldertoolbar-view.js
@@ -1,1 +1,1 @@
-define(["galaxy.masthead","utils/utils","libs/toastr","libs/jquery/jstree","mvc/library/library-model"],function(c,e,f,b,d){var a=Backbone.View.extend({el:"#center",events:{"click #toolbtn_create_folder":"createFolderFromModal","click #toolbtn_bulk_import":"modalBulkImport","click #include_deleted_datasets_chk":"checkIncludeDeleted","click #toolbtn_show_libinfo":"showLibInfo","click #toolbtn_bulk_delete":"deleteSelectedDatasets"},defaults:{can_add_library_item:false,contains_file:false,chain_call_control:{total_number:0,failed_number:0},disabled_jstree_element:"folders"},modal:null,jstree:null,histories:null,initialize:function(g){this.options=_.defaults(g||{},this.defaults);this.render()},render:function(g){this.options=_.extend(this.options,g);var i=this.templateToolBar();var h={id:this.options.id,is_admin:false,is_anonym:true,user_library_import_dir:Galaxy.config.user_library_import_dir,allow_library_path_paste:Galaxy.config.allow_library_path_paste,library_import_dir:Galaxy.config.library_import_dir,mutiple_add_dataset_options:false};if(Galaxy.currUser){h.is_admin=Galaxy.currUser.isAdmin();h.is_anonym=Galaxy.currUser.isAnonymous();if(h.user_library_import_dir!==null||h.allow_library_path_paste!==false||h.library_import_dir!==null){h.mutiple_add_dataset_options=true}}this.$el.html(i(h))},configureElements:function(g){this.options=_.extend(this.options,g);if(this.options.can_add_library_item===true){$(".add-library-items").show()}else{$(".add-library-items").hide()}if(this.options.contains_file===true){if(Galaxy.currUser){if(!Galaxy.currUser.isAnonymous()){$(".logged-dataset-manipulation").show();$(".dataset-manipulation").show()}else{$(".dataset-manipulation").show();$(".logged-dataset-manipulation").hide()}}else{$(".logged-dataset-manipulation").hide();$(".dataset-manipulation").hide()}}else{$(".logged-dataset-manipulation").hide();$(".dataset-manipulation").hide()}this.$el.find("[data-toggle]").tooltip()},createFolderFromModal:function(i){i.preventDefault();i.stopPropagation();var g=this;var h=this.templateNewFolderInModal();this.modal=Galaxy.modal;this.modal.show({closing_events:true,title:"Create New Folder",body:h(),buttons:{Create:function(){g.create_new_folder_event()},Close:function(){Galaxy.modal.hide()}}})},create_new_folder_event:function(){var g=this.serialize_new_folder();if(this.validate_new_folder(g)){var h=new d.FolderAsModel();url_items=Backbone.history.fragment.split("/");current_folder_id=url_items[url_items.length-1];h.url=h.urlRoot+"/"+current_folder_id;h.save(g,{success:function(i){Galaxy.modal.hide();f.success("Folder created");i.set({type:"folder"});Galaxy.libraries.folderListView.collection.add(i)},error:function(j,i){Galaxy.modal.hide();if(typeof i.responseJSON!=="undefined"){f.error(i.responseJSON.err_msg)}else{f.error("An error ocurred :(")}}})}else{f.error("Folder's name is missing")}return false},serialize_new_folder:function(){return{name:$("input[name='Name']").val(),description:$("input[name='Description']").val()}},validate_new_folder:function(g){return g.name!==""},modalBulkImport:function(){var g=$("#folder_table").find(":checked");if(g.length===0){f.info("You have to select some datasets first")}else{this.refreshUserHistoriesList(function(i){var h=i.templateBulkImportInModal();i.modal=Galaxy.modal;i.modal.show({closing_events:true,title:"Import into History",body:h({histories:i.histories.models}),buttons:{Import:function(){i.importAllIntoHistory()},Close:function(){Galaxy.modal.hide()}}})})}},refreshUserHistoriesList:function(h){var g=this;this.histories=new d.GalaxyHistories();this.histories.fetch({success:function(){h(g)},error:function(j,i){if(typeof i.responseJSON!=="undefined"){f.error(i.responseJSON.err_msg)}else{f.error("An error ocurred :(")}}})},importAllIntoHistory:function(){this.modal.disableButton("Import");this.options.chain_call_control.total_number=0;this.options.chain_call_control.failed_number=0;var k=$("select[name=dataset_import_bulk] option:selected").val();this.options.last_used_history_id=k;var n=$("select[name=dataset_import_bulk] option:selected").text();var p=[];$("#folder_table").find(":checked").each(function(){if(this.parentElement.parentElement.id!==""){p.push(this.parentElement.parentElement.id)}});var o=this.templateImportIntoHistoryProgressBar();this.modal.$el.find(".modal-body").html(o({history_name:n}));var l=100/p.length;this.initProgress(l);var g=[];for(var h=p.length-1;h>=0;h--){var j=p[h];var m=new d.HistoryItem();m.url=m.urlRoot+k+"/contents";m.content=j;m.source="library";g.push(m)}this.options.chain_call_control.total_number=g.length;jQuery.getJSON(galaxy_config.root+"history/set_as_current?id="+k);this.chainCall(g,n)},chainCall:function(h,k){var g=this;var i=h.pop();if(typeof i==="undefined"){if(this.options.chain_call_control.failed_number===0){f.success("Selected datasets imported into history. Click this to start analysing it.","",{onclick:function(){window.location="/"}})}else{if(this.options.chain_call_control.failed_number===this.options.chain_call_control.total_number){f.error("There was an error and no datasets were imported into history.")}else{if(this.options.chain_call_control.failed_number<this.options.chain_call_control.total_number){f.warning("Some of the datasets could not be imported into history. Click this to see what was imported.","",{onclick:function(){window.location="/"}})}}}Galaxy.modal.hide();return}var j=$.when(i.save({content:i.content,source:i.source}));j.done(function(){g.updateProgress();g.chainCall(h,k)}).fail(function(){g.options.chain_call_control.failed_number+=1;g.updateProgress();g.chainCall(h,k)})},initProgress:function(g){this.progress=0;this.progressStep=g},updateProgress:function(){this.progress+=this.progressStep;$(".progress-bar-import").width(Math.round(this.progress)+"%");txt_representation=Math.round(this.progress)+"% Complete";$(".completion_span").text(txt_representation)},download:function(g,k){var i=[];$("#folder_table").find(":checked").each(function(){if(this.parentElement.parentElement.id!==""){i.push(this.parentElement.parentElement.id)}});var h="/api/libraries/datasets/download/"+k;var j={ldda_ids:i};this.processDownload(h,j,"get")},processDownload:function(h,i,j){if(h&&i){i=typeof i==="string"?i:$.param(i);var g="";$.each(i.split("&"),function(){var k=this.split("=");g+='<input type="hidden" name="'+k[0]+'" value="'+k[1]+'" />'});$('<form action="'+h+'" method="'+(j||"post")+'">'+g+"</form>").appendTo("body").submit().remove();f.info("Your download will begin soon")}else{f.error("An error occurred :(")}},addFilesFromHistoryModal:function(){this.refreshUserHistoriesList(function(g){g.modal=Galaxy.modal;var h=g.templateAddFilesFromHistory();var i=g.options.full_path[g.options.full_path.length-1][1];g.modal.show({closing_events:true,title:"Adding datasets from your history to folder "+i,body:h({histories:g.histories.models}),buttons:{Add:function(){g.addAllDatasetsFromHistory()},Close:function(){Galaxy.modal.hide()}},closing_callback:function(){Galaxy.libraries.library_router.back()}});if(g.histories.models.length>0){g.fetchAndDisplayHistoryContents(g.histories.models[0].id);$("#dataset_add_bulk").change(function(j){g.fetchAndDisplayHistoryContents(j.target.value)})}else{f.error("An error ocurred :(")}})},importFilesFromPathModal:function(){var h=this;this.modal=Galaxy.modal;var g=this.templateImportPathModal();this.modal.show({closing_events:true,title:"Enter paths relative to Galaxy root",body:g({}),buttons:{Import:function(){h.importFromPathsClicked(h)},Close:function(){Galaxy.modal.hide()}},closing_callback:function(){Galaxy.libraries.library_router.navigate("folders/"+h.id,{trigger:true})}})},importFilesFromUserdirModal:function(){var h=this;this.modal=Galaxy.modal;var g=this.templateBrowserModal();this.modal.show({closing_events:true,title:"Select folders or files to import",body:g({}),buttons:{Import:function(){h.importFromUserdirClicked(h)},Close:function(){Galaxy.modal.hide()}},closing_callback:function(){Galaxy.libraries.library_router.navigate("folders/"+h.id,{trigger:true})}});this.renderJstree({disabled_jstree_element:"folders"});$("input[type=radio]").change(function(i){if(i.target.value==="jstree-disable-folders"){h.renderJstree({disabled_jstree_element:"folders"});$(".jstree-folders-message").hide();$(".jstree-preserve-structure").hide();$(".jstree-link-files").hide();$(".jstree-files-message").show()}else{if(i.target.value==="jstree-disable-files"){$(".jstree-files-message").hide();$(".jstree-folders-message").show();$(".jstree-link-files").show();$(".jstree-preserve-structure").show();h.renderJstree({disabled_jstree_element:"files"})}}})},renderJstree:function(g){var i=this;this.options=_.extend(this.options,g);var h=this.options.disabled_jstree_element;this.jstree=new d.Jstree();this.jstree.url=this.jstree.urlRoot+"?target=userdir&format=jstree&disable="+h;this.jstree.fetch({success:function(k,j){$("#jstree_browser").jstree("destroy");var l=$("#jstree_browser").jstree({core:{data:k},plugins:["types","checkbox"],types:{folder:{icon:"jstree-folder"},file:{icon:"jstree-file"}},checkbox:{three_state:false}})},error:function(k,j){if(typeof j.responseJSON!=="undefined"){f.error(j.responseJSON.err_msg)}else{f.error("An error ocurred :(")}}})},importFromPathsClicked:function(){var g=this.modal.$el.find(".preserve-checkbox").is(":checked");var l=this.modal.$el.find(".link-checkbox").is(":checked");var k=$("textarea#import_paths").val();if(!k){f.info("Please enter a path relative to Galaxy root")}else{this.modal.disableButton("Import");k=k.split("\n");var j=[];for(var h=k.length-1;h>=0;h--){trimmed=k[h].trim();if(trimmed.length!==0){j.push(trimmed)}}this.initChainCallControl(j.length);this.chainCallImportingFolders(j,g,l,"admin_path")}},initChainCallControl:function(g){var h=this.templateAddingDatasetsProgressBar();this.modal.$el.find(".modal-body").html(h({folder_name:this.options.folder_name}));this.progress=0;this.progressStep=100/g;this.options.chain_call_control.total_number=g;this.options.chain_call_control.failed_number=0},importFromUserdirClicked:function(l){var h=$("#jstree_browser").jstree().get_selected(true);var g=this.modal.$el.find(".preserve-checkbox").is(":checked");var o=this.modal.$el.find(".link-checkbox").is(":checked");var n=[];if(h.length<1){f.info("You have to select some items first")}else{this.modal.disableButton("Import");this.options.chain_call_control.total_number=0;this.options.chain_call_control.failed_number=0;for(var j=h.length-1;j>=0;j--){if(h[j].li_attr.full_path!==undefined){n.push(h[j].li_attr.full_path)}}var m=this.templateAddingDatasetsProgressBar();this.modal.$el.find(".modal-body").html(m({folder_name:this.options.folder_name}));this.progressStep=100/n.length;this.progress=0;this.options.chain_call_control.total_number=n.length;var k=h[0].type;if(k==="folder"){this.chainCallImportingFolders(n,g,o,"userdir_folder")}else{if(k==="file"){this.chainCallImportingUserdirFiles(n)}}}},chainCallImportingUserdirFiles:function(j){var g=this;var h=j.pop();if(typeof h==="undefined"){if(this.options.chain_call_control.failed_number===0){f.success("Selected files imported into the current folder");Galaxy.modal.hide()}else{f.error("Something went wrong :(")}return true}var i=$.when($.post("/api/libraries/datasets?encoded_folder_id="+g.id+"&source=userdir_file&path="+h));i.done(function(k){g.updateProgress();g.chainCallImportingUserdirFiles(j)}).fail(function(){g.options.chain_call_control.failed_number+=1;g.updateProgress();g.chainCallImportingUserdirFiles(j)})},chainCallImportingFolders:function(l,g,m,j){var h=this;var i=l.pop();if(typeof i==="undefined"){if(this.options.chain_call_control.failed_number===0){f.success("Selected folders and their contents imported into the current folder");Galaxy.modal.hide()}else{f.error("Something went wrong :(")}}var k=$.when($.post("/api/libraries/datasets?encoded_folder_id="+h.id+"&source="+j+"&path="+i+"&preserve_dirs="+g+"&link_data="+m));k.done(function(n){h.updateProgress();h.chainCallImportingFolders(l,g,m,j)}).fail(function(){h.options.chain_call_control.failed_number+=1;h.updateProgress();h.chainCallImportingFolders(l,g,m,j)})},fetchAndDisplayHistoryContents:function(i){var h=new d.HistoryContents({id:i});var g=this;h.fetch({success:function(k){var j=g.templateHistoryContents();g.histories.get(i).set({contents:k});g.modal.$el.find("#selected_history_content").html(j({history_contents:k.models.reverse()}))},error:function(k,j){if(typeof j.responseJSON!=="undefined"){f.error(j.responseJSON.err_msg)}else{f.error("An error ocurred :(")}}})},addAllDatasetsFromHistory:function(){var l=this.modal.$el.find("#selected_history_content").find(":checked");if(l.length<1){f.info("You have to select some datasets first")}else{this.modal.disableButton("Add");this.options.chain_call_control.total_number=0;this.options.chain_call_control.failed_number=0;var g=[];l.each(function(){var i=$(this.parentElement).data("id");if(i){g.push(i)}});var m=this.templateAddingDatasetsProgressBar();this.modal.$el.find(".modal-body").html(m({folder_name:this.options.folder_name}));this.progressStep=100/g.length;this.progress=0;var k=[];for(var j=g.length-1;j>=0;j--){history_dataset_id=g[j];var h=new d.Item();h.url="/api/folders/"+this.options.id+"/contents";h.set({from_hda_id:history_dataset_id});k.push(h)}this.options.chain_call_control.total_number=k.length;this.chainCallAddingHdas(k)}},chainCallAddingHdas:function(h){var g=this;this.added_hdas=new d.Folder();var i=h.pop();if(typeof i==="undefined"){if(this.options.chain_call_control.failed_number===0){f.success("Selected datasets from history added to the folder")}else{if(this.options.chain_call_control.failed_number===this.options.chain_call_control.total_number){f.error("There was an error and no datasets were added to the folder.")}else{if(this.options.chain_call_control.failed_number<this.options.chain_call_control.total_number){f.warning("Some of the datasets could not be added to the folder")}}}Galaxy.modal.hide();return this.added_hdas}var j=$.when(i.save({from_hda_id:i.get("from_hda_id")}));j.done(function(k){Galaxy.libraries.folderListView.collection.add(k);g.updateProgress();g.chainCallAddingHdas(h)}).fail(function(){g.options.chain_call_control.failed_number+=1;g.updateProgress();g.chainCallAddingHdas(h)})},checkIncludeDeleted:function(g){if(g.target.checked){Galaxy.libraries.folderListView.fetchFolder({include_deleted:true})}else{Galaxy.libraries.folderListView.fetchFolder({include_deleted:false})}},deleteSelectedDatasets:function(){var g=$("#folder_table").find(":checked");if(g.length===0){f.info("You have to select some datasets first")}else{var k=this.templateDeletingDatasetsProgressBar();this.modal=Galaxy.modal;this.modal.show({closing_events:true,title:"Deleting selected datasets",body:k({}),buttons:{Close:function(){Galaxy.modal.hide()}}});this.options.chain_call_control.total_number=0;this.options.chain_call_control.failed_number=0;var h=[];g.each(function(){if(this.parentElement.parentElement.id!==""){h.push(this.parentElement.parentElement.id)}});this.progressStep=100/h.length;this.progress=0;var m=[];for(var j=h.length-1;j>=0;j--){var l=new d.Item({id:h[j]});m.push(l)}this.options.chain_call_control.total_number=h.length;this.chainCallDeletingHdas(m)}},chainCallDeletingHdas:function(h){var g=this;this.deleted_lddas=new d.Folder();var i=h.pop();if(typeof i==="undefined"){if(this.options.chain_call_control.failed_number===0){f.success("Selected datasets deleted")}else{if(this.options.chain_call_control.failed_number===this.options.chain_call_control.total_number){f.error("There was an error and no datasets were deleted.")}else{if(this.options.chain_call_control.failed_number<this.options.chain_call_control.total_number){f.warning("Some of the datasets could not be deleted")}}}Galaxy.modal.hide();return this.deleted_lddas}var j=$.when(i.destroy());j.done(function(l){Galaxy.libraries.folderListView.collection.remove(i.id);g.updateProgress();if(Galaxy.libraries.folderListView.options.include_deleted){var k=new d.Item(l);Galaxy.libraries.folderListView.collection.add(k)}g.chainCallDeletingHdas(h)}).fail(function(){g.options.chain_call_control.failed_number+=1;g.updateProgress();g.chainCallDeletingHdas(h)})},showLibInfo:function(){var h=Galaxy.libraries.folderListView.folderContainer.attributes.metadata.parent_library_id;var g=null;var i=this;if(Galaxy.libraries.libraryListView!==null){g=Galaxy.libraries.libraryListView.collection.get(h);this.showLibInfoModal(g)}else{g=new d.Library({id:h});g.fetch({success:function(){i.showLibInfoModal(g)},error:function(k,j){if(typeof j.responseJSON!=="undefined"){f.error(j.responseJSON.err_msg)}else{f.error("An error ocurred :(")}}})}},showLibInfoModal:function(g){var h=this.templateLibInfoInModal();this.modal=Galaxy.modal;this.modal.show({closing_events:true,title:"Library Information",body:h({library:g}),buttons:{Close:function(){Galaxy.modal.hide()}}})},showImportModal:function(g){switch(g.source){case"history":this.addFilesFromHistoryModal();break;case"importdir":break;case"path":this.importFilesFromPathModal();break;case"userdir":this.importFilesFromUserdirModal();break;default:Galaxy.libraries.library_router.back();f.error("Invalid import source.");break}},templateToolBar:function(){tmpl_array=[];tmpl_array.push('<div class="library_style_container">');tmpl_array.push(' <div id="library_toolbar">');tmpl_array.push(" <span><strong>DATA LIBRARIES</strong></span>");tmpl_array.push(' <span data-toggle="tooltip" data-placement="top" class="logged-dataset-manipulation" title="Include deleted datasets" style="display:none;"> | <input id="include_deleted_datasets_chk" style="margin: 0;" type="checkbox"> include deleted | </input></span>');tmpl_array.push(' <button style="display:none;" data-toggle="tooltip" data-placement="top" title="Create New Folder" id="toolbtn_create_folder" class="btn btn-default primary-button add-library-items" type="button"><span class="fa fa-plus"></span><span class="fa fa-folder"></span></button>');tmpl_array.push("<% if(mutiple_add_dataset_options) { %>");tmpl_array.push(' <div class="btn-group add-library-items" style="display:none;">');tmpl_array.push(' <button title="Add Datasets to Current Folder" id="" type="button" class="primary-button dropdown-toggle" data-toggle="dropdown">');tmpl_array.push(' <span class="fa fa-plus"></span><span class="fa fa-file"></span><span class="caret"></span>');tmpl_array.push(" </button>");tmpl_array.push(' <ul class="dropdown-menu" role="menu">');tmpl_array.push(' <li><a href="#folders/<%= id %>/import/history"> from History</a></li>');tmpl_array.push("<% if(user_library_import_dir !== null) { %>");tmpl_array.push(' <li><a href="#folders/<%= id %>/import/userdir"> from User Directory</a></li>');tmpl_array.push("<% } %>");tmpl_array.push("<% if(allow_library_path_paste) { %>");tmpl_array.push(' <li class="divider"></li>');tmpl_array.push(' <li class="dropdown-header">Admins only</li>');tmpl_array.push("<% if(allow_library_path_paste) { %>");tmpl_array.push(' <li><a href="#folders/<%= id %>/import/path">from Path</a></li>');tmpl_array.push("<% } %>");tmpl_array.push("<% } %>");tmpl_array.push(" </ul>");tmpl_array.push(" </div>");tmpl_array.push("<% } else { %>");tmpl_array.push(' <button style="display:none;" data-toggle="tooltip" data-placement="top" title="Add Datasets to Current Folder" id="toolbtn_add_files" class="btn btn-default toolbtn_add_files primary-button add-library-items" type="button"><span class="fa fa-plus"></span><span class="fa fa-file"></span></span></button>');tmpl_array.push("<% } %>");tmpl_array.push(' <button data-toggle="tooltip" data-placement="top" title="Import selected datasets into history" id="toolbtn_bulk_import" class="primary-button dataset-manipulation" style="margin-left: 0.5em; display:none;" type="button"><span class="fa fa-book"></span> to History</button>');tmpl_array.push(' <div id="toolbtn_dl" class="btn-group dataset-manipulation" style="margin-left: 0.5em; display:none; ">');tmpl_array.push(' <button title="Download selected datasets as archive" id="drop_toggle" type="button" class="primary-button dropdown-toggle" data-toggle="dropdown">');tmpl_array.push(' <span class="fa fa-download"></span> Download <span class="caret"></span>');tmpl_array.push(" </button>");tmpl_array.push(' <ul class="dropdown-menu" role="menu">');tmpl_array.push(' <li><a href="#/folders/<%= id %>/download/tgz">.tar.gz</a></li>');tmpl_array.push(' <li><a href="#/folders/<%= id %>/download/tbz">.tar.bz</a></li>');tmpl_array.push(' <li><a href="#/folders/<%= id %>/download/zip">.zip</a></li>');tmpl_array.push(" </ul>");tmpl_array.push(" </div>");tmpl_array.push(' <button data-toggle="tooltip" data-placement="top" title="Mark selected datasets deleted" id="toolbtn_bulk_delete" class="primary-button logged-dataset-manipulation" style="margin-left: 0.5em; display:none; " type="button"><span class="fa fa-times"></span> Delete</button>');tmpl_array.push(' <button data-id="<%- id %>" data-toggle="tooltip" data-placement="top" title="Show library information" id="toolbtn_show_libinfo" class="primary-button" style="margin-left: 0.5em;" type="button"><span class="fa fa-info-circle"></span> Library Info</button>');tmpl_array.push(' <span class="help-button" data-toggle="tooltip" data-placement="top" title="Visit Libraries Wiki"><a href="https://wiki.galaxyproject.org/DataLibraries/screen/FolderContents" target="_blank"><button class="primary-button btn-xs" type="button"><span class="fa fa-question-circle"></span> Help</button></a></span>');tmpl_array.push(" </div>");tmpl_array.push(' <div id="folder_items_element">');tmpl_array.push(" </div>");tmpl_array.push("</div>");return _.template(tmpl_array.join(""))},templateLibInfoInModal:function(){tmpl_array=[];tmpl_array.push('<div id="lif_info_modal">');tmpl_array.push("<h2>Library name:</h2>");tmpl_array.push('<p><%- library.get("name") %></p>');tmpl_array.push("<h3>Library description:</h3>");tmpl_array.push('<p><%- library.get("description") %></p>');tmpl_array.push("<h3>Library synopsis:</h3>");tmpl_array.push('<p><%- library.get("synopsis") %></p>');tmpl_array.push("</div>");return _.template(tmpl_array.join(""))},templateNewFolderInModal:function(){tmpl_array=[];tmpl_array.push('<div id="new_folder_modal">');tmpl_array.push("<form>");tmpl_array.push('<input type="text" name="Name" value="" placeholder="Name">');tmpl_array.push('<input type="text" name="Description" value="" placeholder="Description">');tmpl_array.push("</form>");tmpl_array.push("</div>");return _.template(tmpl_array.join(""))},templateBulkImportInModal:function(){var g=[];g.push('<span id="history_modal_combo_bulk" style="width:90%; margin-left: 1em; margin-right: 1em; ">');g.push("Select history: ");g.push('<select id="dataset_import_bulk" name="dataset_import_bulk" style="width:50%; margin-bottom: 1em; "> ');g.push(" <% _.each(histories, function(history) { %>");g.push(' <option value="<%= _.escape(history.get("id")) %>"><%= _.escape(history.get("name")) %></option>');g.push(" <% }); %>");g.push("</select>");g.push("</span>");return _.template(g.join(""))},templateImportIntoHistoryProgressBar:function(){var g=[];g.push('<div class="import_text">');g.push("Importing selected datasets to history <b><%= _.escape(history_name) %></b>");g.push("</div>");g.push('<div class="progress">');g.push(' <div class="progress-bar progress-bar-import" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 00%;">');g.push(' <span class="completion_span">0% Complete</span>');g.push(" </div>");g.push("</div>");g.push("");return _.template(g.join(""))},templateAddingDatasetsProgressBar:function(){var g=[];g.push('<div class="import_text">');g.push("Adding selected datasets from history to library folder <b><%= _.escape(folder_name) %></b>");g.push("</div>");g.push('<div class="progress">');g.push(' <div class="progress-bar progress-bar-import" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 00%;">');g.push(' <span class="completion_span">0% Complete</span>');g.push(" </div>");g.push("</div>");g.push("");return _.template(g.join(""))},templateDeletingDatasetsProgressBar:function(){var g=[];g.push('<div class="import_text">');g.push("</div>");g.push('<div class="progress">');g.push(' <div class="progress-bar progress-bar-import" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 00%;">');g.push(' <span class="completion_span">0% Complete</span>');g.push(" </div>");g.push("</div>");g.push("");return _.template(g.join(""))},templateBrowserModal:function(){var g=[];g.push('<div id="file_browser_modal">');g.push('<div style="margin-bottom:1em;">');g.push('<label class="radio-inline">');g.push(' <input title="Switch to selecting files" type="radio" name="jstree-radio" value="jstree-disable-folders" checked="checked"> Files');g.push("</label>");g.push('<label class="radio-inline">');g.push(' <input title="Switch to selecting folders" type="radio" name="jstree-radio" value="jstree-disable-files"> Folders');g.push("</label>");g.push('<label class="checkbox-inline jstree-preserve-structure" style="display:none;">');g.push(' <input class="preserve-checkbox" type="checkbox" value="preserve_directory_structure">');g.push("Preserve directory structure");g.push(" </label>");g.push('<label class="checkbox-inline jstree-link-files" style="display:none;">');g.push(' <input class="link-checkbox" type="checkbox" value="link_files">');g.push("Link files instead of copying");g.push(" </label>");g.push("</div>");g.push('<div class="alert alert-info jstree-files-message">All files you select will be imported into the current folder.</div>');g.push('<div class="alert alert-info jstree-folders-message" style="display:none;">All files within the selected folders and their subfolders will be imported into the current folder.</div>');g.push('<div id="jstree_browser">');g.push("</div>");g.push("</div>");return _.template(g.join(""))},templateImportPathModal:function(){var g=[];g.push('<div id="file_browser_modal">');g.push('<label class="checkbox-inline jstree-preserve-structure">');g.push(' <input class="preserve-checkbox" type="checkbox" value="preserve_directory_structure">');g.push("Preserve directory structure");g.push(" </label>");g.push('<label class="checkbox-inline jstree-link-files">');g.push(' <input class="link-checkbox" type="checkbox" value="link_files">');g.push("Link files instead of copying");g.push(" </label>");g.push("</div>");g.push('<div class="alert alert-info jstree-folders-message">All files within the given folders and their subfolders will be imported into the current folder.</div>');g.push('<textarea id="import_paths" class="form-control" rows="5" placeholder="Paths separated by newline"></textarea>');g.push("</div>");return _.template(g.join(""))},templateAddFilesFromHistory:function(){var g=[];g.push('<div id="add_files_modal">');g.push('<div id="history_modal_combo_bulk">');g.push("Select history: ");g.push('<select id="dataset_add_bulk" name="dataset_add_bulk" style="width:66%; "> ');g.push(" <% _.each(histories, function(history) { %>");g.push(' <option value="<%= _.escape(history.get("id")) %>"><%= _.escape(history.get("name")) %></option>');g.push(" <% }); %>");g.push("</select>");g.push("</div>");g.push("<br/>");g.push('<div id="selected_history_content">');g.push("</div>");g.push("</div>");return _.template(g.join(""))},templateHistoryContents:function(){var g=[];g.push("<strong>Choose the datasets to import:</strong>");g.push("<ul>");g.push(" <% _.each(history_contents, function(history_item) { %>");g.push(' <li data-id="<%= _.escape(history_item.get("id")) %>">');g.push(' <input style="margin: 0;" type="checkbox"><%= _.escape(history_item.get("hid")) %>: <%= _.escape(history_item.get("name")) %>');g.push(" </li>");g.push(" <% }); %>");g.push("</ul>");return _.template(g.join(""))}});return{FolderToolbarView:a}});
\ No newline at end of file
+define(["galaxy.masthead","utils/utils","libs/toastr","libs/jquery/jstree","mvc/library/library-model"],function(c,e,f,b,d){var a=Backbone.View.extend({el:"#center",events:{"click #toolbtn_create_folder":"createFolderFromModal","click #toolbtn_bulk_import":"modalBulkImport","click #include_deleted_datasets_chk":"checkIncludeDeleted","click #toolbtn_show_libinfo":"showLibInfo","click #toolbtn_bulk_delete":"deleteSelectedDatasets"},defaults:{can_add_library_item:false,contains_file:false,chain_call_control:{total_number:0,failed_number:0},disabled_jstree_element:"folders"},modal:null,jstree:null,histories:null,initialize:function(g){this.options=_.defaults(g||{},this.defaults);this.render()},render:function(g){this.options=_.extend(this.options,g);var i=this.templateToolBar();var h={id:this.options.id,is_admin:false,is_anonym:true,user_library_import_dir:Galaxy.config.user_library_import_dir,allow_library_path_paste:Galaxy.config.allow_library_path_paste,library_import_dir:Galaxy.config.library_import_dir,mutiple_add_dataset_options:false};if(Galaxy.currUser){h.is_admin=Galaxy.currUser.isAdmin();h.is_anonym=Galaxy.currUser.isAnonymous();if(h.user_library_import_dir!==null||h.allow_library_path_paste!==false||h.library_import_dir!==null){h.mutiple_add_dataset_options=true}}this.$el.html(i(h))},configureElements:function(g){this.options=_.extend(this.options,g);if(this.options.can_add_library_item===true){$(".add-library-items").show()}else{$(".add-library-items").hide()}if(this.options.contains_file===true){if(Galaxy.currUser){if(!Galaxy.currUser.isAnonymous()){$(".logged-dataset-manipulation").show();$(".dataset-manipulation").show()}else{$(".dataset-manipulation").show();$(".logged-dataset-manipulation").hide()}}else{$(".logged-dataset-manipulation").hide();$(".dataset-manipulation").hide()}}else{$(".logged-dataset-manipulation").hide();$(".dataset-manipulation").hide()}this.$el.find("[data-toggle]").tooltip()},createFolderFromModal:function(i){i.preventDefault();i.stopPropagation();var g=this;var h=this.templateNewFolderInModal();this.modal=Galaxy.modal;this.modal.show({closing_events:true,title:"Create New Folder",body:h(),buttons:{Create:function(){g.create_new_folder_event()},Close:function(){Galaxy.modal.hide()}}})},create_new_folder_event:function(){var g=this.serialize_new_folder();if(this.validate_new_folder(g)){var h=new d.FolderAsModel();url_items=Backbone.history.fragment.split("/");current_folder_id=url_items[url_items.length-1];h.url=h.urlRoot+"/"+current_folder_id;h.save(g,{success:function(i){Galaxy.modal.hide();f.success("Folder created");i.set({type:"folder"});Galaxy.libraries.folderListView.collection.add(i)},error:function(j,i){Galaxy.modal.hide();if(typeof i.responseJSON!=="undefined"){f.error(i.responseJSON.err_msg)}else{f.error("An error ocurred :(")}}})}else{f.error("Folder's name is missing")}return false},serialize_new_folder:function(){return{name:$("input[name='Name']").val(),description:$("input[name='Description']").val()}},validate_new_folder:function(g){return g.name!==""},modalBulkImport:function(){var g=$("#folder_table").find(":checked");if(g.length===0){f.info("You have to select some datasets first")}else{this.refreshUserHistoriesList(function(i){var h=i.templateBulkImportInModal();i.modal=Galaxy.modal;i.modal.show({closing_events:true,title:"Import into History",body:h({histories:i.histories.models}),buttons:{Import:function(){i.importAllIntoHistory()},Close:function(){Galaxy.modal.hide()}}})})}},refreshUserHistoriesList:function(h){var g=this;this.histories=new d.GalaxyHistories();this.histories.fetch({success:function(){h(g)},error:function(j,i){if(typeof i.responseJSON!=="undefined"){f.error(i.responseJSON.err_msg)}else{f.error("An error ocurred :(")}}})},importAllIntoHistory:function(){this.modal.disableButton("Import");this.options.chain_call_control.total_number=0;this.options.chain_call_control.failed_number=0;var k=$("select[name=dataset_import_bulk] option:selected").val();this.options.last_used_history_id=k;var n=$("select[name=dataset_import_bulk] option:selected").text();var p=[];$("#folder_table").find(":checked").each(function(){if(this.parentElement.parentElement.id!==""){p.push(this.parentElement.parentElement.id)}});var o=this.templateImportIntoHistoryProgressBar();this.modal.$el.find(".modal-body").html(o({history_name:n}));var l=100/p.length;this.initProgress(l);var g=[];for(var h=p.length-1;h>=0;h--){var j=p[h];var m=new d.HistoryItem();m.url=m.urlRoot+k+"/contents";m.content=j;m.source="library";g.push(m)}this.options.chain_call_control.total_number=g.length;jQuery.getJSON(galaxy_config.root+"history/set_as_current?id="+k);this.chainCall(g,n)},chainCall:function(h,k){var g=this;var i=h.pop();if(typeof i==="undefined"){if(this.options.chain_call_control.failed_number===0){f.success("Selected datasets imported into history. Click this to start analysing it.","",{onclick:function(){window.location="/"}})}else{if(this.options.chain_call_control.failed_number===this.options.chain_call_control.total_number){f.error("There was an error and no datasets were imported into history.")}else{if(this.options.chain_call_control.failed_number<this.options.chain_call_control.total_number){f.warning("Some of the datasets could not be imported into history. Click this to see what was imported.","",{onclick:function(){window.location="/"}})}}}Galaxy.modal.hide();return}var j=$.when(i.save({content:i.content,source:i.source}));j.done(function(){g.updateProgress();g.chainCall(h,k)}).fail(function(){g.options.chain_call_control.failed_number+=1;g.updateProgress();g.chainCall(h,k)})},initProgress:function(g){this.progress=0;this.progressStep=g},updateProgress:function(){this.progress+=this.progressStep;$(".progress-bar-import").width(Math.round(this.progress)+"%");txt_representation=Math.round(this.progress)+"% Complete";$(".completion_span").text(txt_representation)},download:function(g,k){var i=[];$("#folder_table").find(":checked").each(function(){if(this.parentElement.parentElement.id!==""){i.push(this.parentElement.parentElement.id)}});var h="/api/libraries/datasets/download/"+k;var j={ldda_ids:i};this.processDownload(h,j,"get")},processDownload:function(h,i,j){if(h&&i){i=typeof i==="string"?i:$.param(i);var g="";$.each(i.split("&"),function(){var k=this.split("=");g+='<input type="hidden" name="'+k[0]+'" value="'+k[1]+'" />'});$('<form action="'+h+'" method="'+(j||"post")+'">'+g+"</form>").appendTo("body").submit().remove();f.info("Your download will begin soon")}else{f.error("An error occurred :(")}},addFilesFromHistoryModal:function(){this.refreshUserHistoriesList(function(g){g.modal=Galaxy.modal;var h=g.templateAddFilesFromHistory();var i=g.options.full_path[g.options.full_path.length-1][1];g.modal.show({closing_events:true,title:"Adding datasets from your history to folder "+i,body:h({histories:g.histories.models}),buttons:{Add:function(){g.addAllDatasetsFromHistory()},Close:function(){Galaxy.modal.hide()}},closing_callback:function(){Galaxy.libraries.library_router.back()}});if(g.histories.models.length>0){g.fetchAndDisplayHistoryContents(g.histories.models[0].id);$("#dataset_add_bulk").change(function(j){g.fetchAndDisplayHistoryContents(j.target.value)})}else{f.error("An error ocurred :(")}})},importFilesFromPathModal:function(){var h=this;this.modal=Galaxy.modal;var g=this.templateImportPathModal();this.modal.show({closing_events:true,title:"Enter paths relative to Galaxy root",body:g({}),buttons:{Import:function(){h.importFromPathsClicked(h)},Close:function(){Galaxy.modal.hide()}},closing_callback:function(){Galaxy.libraries.library_router.navigate("folders/"+h.id,{trigger:true})}})},importFilesFromUserdirModal:function(){var h=this;this.modal=Galaxy.modal;var g=this.templateBrowserModal();this.modal.show({closing_events:true,title:"Select folders or files to import",body:g({}),buttons:{Import:function(){h.importFromUserdirClicked(h)},Close:function(){Galaxy.modal.hide()}},closing_callback:function(){Galaxy.libraries.library_router.navigate("folders/"+h.id,{trigger:true})}});this.renderJstree({disabled_jstree_element:"folders"});$("input[type=radio]").change(function(i){if(i.target.value==="jstree-disable-folders"){h.renderJstree({disabled_jstree_element:"folders"});$(".jstree-folders-message").hide();$(".jstree-preserve-structure").hide();$(".jstree-link-files").hide();$(".jstree-files-message").show()}else{if(i.target.value==="jstree-disable-files"){$(".jstree-files-message").hide();$(".jstree-folders-message").show();$(".jstree-link-files").show();$(".jstree-preserve-structure").show();h.renderJstree({disabled_jstree_element:"files"})}}})},renderJstree:function(g){var i=this;this.options=_.extend(this.options,g);var h=this.options.disabled_jstree_element;this.jstree=new d.Jstree();this.jstree.url=this.jstree.urlRoot+"?target=userdir&format=jstree&disable="+h;this.jstree.fetch({success:function(k,j){$("#jstree_browser").jstree("destroy");var l=$("#jstree_browser").jstree({core:{data:k},plugins:["types","checkbox"],types:{folder:{icon:"jstree-folder"},file:{icon:"jstree-file"}},checkbox:{three_state:false}})},error:function(k,j){if(typeof j.responseJSON!=="undefined"){f.error(j.responseJSON.err_msg)}else{f.error("An error ocurred :(")}}})},importFromPathsClicked:function(){var g=this.modal.$el.find(".preserve-checkbox").is(":checked");var l=this.modal.$el.find(".link-checkbox").is(":checked");var k=$("textarea#import_paths").val();if(!k){f.info("Please enter a path relative to Galaxy root")}else{this.modal.disableButton("Import");k=k.split("\n");var j=[];for(var h=k.length-1;h>=0;h--){trimmed=k[h].trim();if(trimmed.length!==0){j.push(trimmed)}}this.initChainCallControl(j.length);this.chainCallImportingFolders(j,g,l,"admin_path")}},initChainCallControl:function(g){var h=this.templateAddingDatasetsProgressBar();this.modal.$el.find(".modal-body").html(h({folder_name:this.options.folder_name}));this.progress=0;this.progressStep=100/g;this.options.chain_call_control.total_number=g;this.options.chain_call_control.failed_number=0},importFromUserdirClicked:function(l){var h=$("#jstree_browser").jstree().get_selected(true);var g=this.modal.$el.find(".preserve-checkbox").is(":checked");var o=this.modal.$el.find(".link-checkbox").is(":checked");var n=[];if(h.length<1){f.info("You have to select some items first")}else{this.modal.disableButton("Import");this.options.chain_call_control.total_number=0;this.options.chain_call_control.failed_number=0;for(var j=h.length-1;j>=0;j--){if(h[j].li_attr.full_path!==undefined){n.push(h[j].li_attr.full_path)}}var m=this.templateAddingDatasetsProgressBar();this.modal.$el.find(".modal-body").html(m({folder_name:this.options.folder_name}));this.progressStep=100/n.length;this.progress=0;this.options.chain_call_control.total_number=n.length;var k=h[0].type;if(k==="folder"){this.chainCallImportingFolders(n,g,o,"userdir_folder")}else{if(k==="file"){this.chainCallImportingUserdirFiles(n)}}}},chainCallImportingUserdirFiles:function(j){var g=this;var h=j.pop();if(typeof h==="undefined"){if(this.options.chain_call_control.failed_number===0){f.success("Selected files imported into the current folder");Galaxy.modal.hide()}else{f.error("Something went wrong :(")}return true}var i=$.when($.post("/api/libraries/datasets?encoded_folder_id="+g.id+"&source=userdir_file&path="+h));i.done(function(k){g.updateProgress();g.chainCallImportingUserdirFiles(j)}).fail(function(){g.options.chain_call_control.failed_number+=1;g.updateProgress();g.chainCallImportingUserdirFiles(j)})},chainCallImportingFolders:function(l,g,m,j){var h=this;var i=l.pop();if(typeof i=="undefined"){if(this.options.chain_call_control.failed_number===0){f.success("Selected folders and their contents imported into the current folder");Galaxy.modal.hide()}else{f.error("Something went wrong :(")}return true}var k=$.when($.post("/api/libraries/datasets?encoded_folder_id="+h.id+"&source="+j+"&path="+i+"&preserve_dirs="+g+"&link_data="+m));k.done(function(n){h.updateProgress();h.chainCallImportingFolders(l,g,m,j)}).fail(function(){h.options.chain_call_control.failed_number+=1;h.updateProgress();h.chainCallImportingFolders(l,g,m,j)})},fetchAndDisplayHistoryContents:function(i){var h=new d.HistoryContents({id:i});var g=this;h.fetch({success:function(k){var j=g.templateHistoryContents();g.histories.get(i).set({contents:k});g.modal.$el.find("#selected_history_content").html(j({history_contents:k.models.reverse()}))},error:function(k,j){if(typeof j.responseJSON!=="undefined"){f.error(j.responseJSON.err_msg)}else{f.error("An error ocurred :(")}}})},addAllDatasetsFromHistory:function(){var l=this.modal.$el.find("#selected_history_content").find(":checked");if(l.length<1){f.info("You have to select some datasets first")}else{this.modal.disableButton("Add");this.options.chain_call_control.total_number=0;this.options.chain_call_control.failed_number=0;var g=[];l.each(function(){var i=$(this.parentElement).data("id");if(i){g.push(i)}});var m=this.templateAddingDatasetsProgressBar();this.modal.$el.find(".modal-body").html(m({folder_name:this.options.folder_name}));this.progressStep=100/g.length;this.progress=0;var k=[];for(var j=g.length-1;j>=0;j--){history_dataset_id=g[j];var h=new d.Item();h.url="/api/folders/"+this.options.id+"/contents";h.set({from_hda_id:history_dataset_id});k.push(h)}this.options.chain_call_control.total_number=k.length;this.chainCallAddingHdas(k)}},chainCallAddingHdas:function(h){var g=this;this.added_hdas=new d.Folder();var i=h.pop();if(typeof i==="undefined"){if(this.options.chain_call_control.failed_number===0){f.success("Selected datasets from history added to the folder")}else{if(this.options.chain_call_control.failed_number===this.options.chain_call_control.total_number){f.error("There was an error and no datasets were added to the folder.")}else{if(this.options.chain_call_control.failed_number<this.options.chain_call_control.total_number){f.warning("Some of the datasets could not be added to the folder")}}}Galaxy.modal.hide();return this.added_hdas}var j=$.when(i.save({from_hda_id:i.get("from_hda_id")}));j.done(function(k){Galaxy.libraries.folderListView.collection.add(k);g.updateProgress();g.chainCallAddingHdas(h)}).fail(function(){g.options.chain_call_control.failed_number+=1;g.updateProgress();g.chainCallAddingHdas(h)})},checkIncludeDeleted:function(g){if(g.target.checked){Galaxy.libraries.folderListView.fetchFolder({include_deleted:true})}else{Galaxy.libraries.folderListView.fetchFolder({include_deleted:false})}},deleteSelectedDatasets:function(){var g=$("#folder_table").find(":checked");if(g.length===0){f.info("You have to select some datasets first")}else{var k=this.templateDeletingDatasetsProgressBar();this.modal=Galaxy.modal;this.modal.show({closing_events:true,title:"Deleting selected datasets",body:k({}),buttons:{Close:function(){Galaxy.modal.hide()}}});this.options.chain_call_control.total_number=0;this.options.chain_call_control.failed_number=0;var h=[];g.each(function(){if(this.parentElement.parentElement.id!==""){h.push(this.parentElement.parentElement.id)}});this.progressStep=100/h.length;this.progress=0;var m=[];for(var j=h.length-1;j>=0;j--){var l=new d.Item({id:h[j]});m.push(l)}this.options.chain_call_control.total_number=h.length;this.chainCallDeletingHdas(m)}},chainCallDeletingHdas:function(h){var g=this;this.deleted_lddas=new d.Folder();var i=h.pop();if(typeof i==="undefined"){if(this.options.chain_call_control.failed_number===0){f.success("Selected datasets deleted")}else{if(this.options.chain_call_control.failed_number===this.options.chain_call_control.total_number){f.error("There was an error and no datasets were deleted.")}else{if(this.options.chain_call_control.failed_number<this.options.chain_call_control.total_number){f.warning("Some of the datasets could not be deleted")}}}Galaxy.modal.hide();return this.deleted_lddas}var j=$.when(i.destroy());j.done(function(l){Galaxy.libraries.folderListView.collection.remove(i.id);g.updateProgress();if(Galaxy.libraries.folderListView.options.include_deleted){var k=new d.Item(l);Galaxy.libraries.folderListView.collection.add(k)}g.chainCallDeletingHdas(h)}).fail(function(){g.options.chain_call_control.failed_number+=1;g.updateProgress();g.chainCallDeletingHdas(h)})},showLibInfo:function(){var h=Galaxy.libraries.folderListView.folderContainer.attributes.metadata.parent_library_id;var g=null;var i=this;if(Galaxy.libraries.libraryListView!==null){g=Galaxy.libraries.libraryListView.collection.get(h);this.showLibInfoModal(g)}else{g=new d.Library({id:h});g.fetch({success:function(){i.showLibInfoModal(g)},error:function(k,j){if(typeof j.responseJSON!=="undefined"){f.error(j.responseJSON.err_msg)}else{f.error("An error ocurred :(")}}})}},showLibInfoModal:function(g){var h=this.templateLibInfoInModal();this.modal=Galaxy.modal;this.modal.show({closing_events:true,title:"Library Information",body:h({library:g}),buttons:{Close:function(){Galaxy.modal.hide()}}})},showImportModal:function(g){switch(g.source){case"history":this.addFilesFromHistoryModal();break;case"importdir":break;case"path":this.importFilesFromPathModal();break;case"userdir":this.importFilesFromUserdirModal();break;default:Galaxy.libraries.library_router.back();f.error("Invalid import source.");break}},templateToolBar:function(){tmpl_array=[];tmpl_array.push('<div class="library_style_container">');tmpl_array.push(' <div id="library_toolbar">');tmpl_array.push(" <span><strong>DATA LIBRARIES</strong></span>");tmpl_array.push(' <span data-toggle="tooltip" data-placement="top" class="logged-dataset-manipulation" title="Include deleted datasets" style="display:none;"> | <input id="include_deleted_datasets_chk" style="margin: 0;" type="checkbox"> include deleted | </input></span>');tmpl_array.push(' <button style="display:none;" data-toggle="tooltip" data-placement="top" title="Create New Folder" id="toolbtn_create_folder" class="btn btn-default primary-button add-library-items" type="button"><span class="fa fa-plus"></span><span class="fa fa-folder"></span></button>');tmpl_array.push("<% if(mutiple_add_dataset_options) { %>");tmpl_array.push(' <div class="btn-group add-library-items" style="display:none;">');tmpl_array.push(' <button title="Add Datasets to Current Folder" id="" type="button" class="primary-button dropdown-toggle" data-toggle="dropdown">');tmpl_array.push(' <span class="fa fa-plus"></span><span class="fa fa-file"></span><span class="caret"></span>');tmpl_array.push(" </button>");tmpl_array.push(' <ul class="dropdown-menu" role="menu">');tmpl_array.push(' <li><a href="#folders/<%= id %>/import/history"> from History</a></li>');tmpl_array.push("<% if(user_library_import_dir !== null) { %>");tmpl_array.push(' <li><a href="#folders/<%= id %>/import/userdir"> from User Directory</a></li>');tmpl_array.push("<% } %>");tmpl_array.push("<% if(allow_library_path_paste) { %>");tmpl_array.push(' <li class="divider"></li>');tmpl_array.push(' <li class="dropdown-header">Admins only</li>');tmpl_array.push("<% if(allow_library_path_paste) { %>");tmpl_array.push(' <li><a href="#folders/<%= id %>/import/path">from Path</a></li>');tmpl_array.push("<% } %>");tmpl_array.push("<% } %>");tmpl_array.push(" </ul>");tmpl_array.push(" </div>");tmpl_array.push("<% } else { %>");tmpl_array.push(' <button style="display:none;" data-toggle="tooltip" data-placement="top" title="Add Datasets to Current Folder" id="toolbtn_add_files" class="btn btn-default toolbtn_add_files primary-button add-library-items" type="button"><span class="fa fa-plus"></span><span class="fa fa-file"></span></span></button>');tmpl_array.push("<% } %>");tmpl_array.push(' <button data-toggle="tooltip" data-placement="top" title="Import selected datasets into history" id="toolbtn_bulk_import" class="primary-button dataset-manipulation" style="margin-left: 0.5em; display:none;" type="button"><span class="fa fa-book"></span> to History</button>');tmpl_array.push(' <div id="toolbtn_dl" class="btn-group dataset-manipulation" style="margin-left: 0.5em; display:none; ">');tmpl_array.push(' <button title="Download selected datasets as archive" id="drop_toggle" type="button" class="primary-button dropdown-toggle" data-toggle="dropdown">');tmpl_array.push(' <span class="fa fa-download"></span> Download <span class="caret"></span>');tmpl_array.push(" </button>");tmpl_array.push(' <ul class="dropdown-menu" role="menu">');tmpl_array.push(' <li><a href="#/folders/<%= id %>/download/tgz">.tar.gz</a></li>');tmpl_array.push(' <li><a href="#/folders/<%= id %>/download/tbz">.tar.bz</a></li>');tmpl_array.push(' <li><a href="#/folders/<%= id %>/download/zip">.zip</a></li>');tmpl_array.push(" </ul>");tmpl_array.push(" </div>");tmpl_array.push(' <button data-toggle="tooltip" data-placement="top" title="Mark selected datasets deleted" id="toolbtn_bulk_delete" class="primary-button logged-dataset-manipulation" style="margin-left: 0.5em; display:none; " type="button"><span class="fa fa-times"></span> Delete</button>');tmpl_array.push(' <button data-id="<%- id %>" data-toggle="tooltip" data-placement="top" title="Show library information" id="toolbtn_show_libinfo" class="primary-button" style="margin-left: 0.5em;" type="button"><span class="fa fa-info-circle"></span> Library Info</button>');tmpl_array.push(' <span class="help-button" data-toggle="tooltip" data-placement="top" title="Visit Libraries Wiki"><a href="https://wiki.galaxyproject.org/DataLibraries/screen/FolderContents" target="_blank"><button class="primary-button btn-xs" type="button"><span class="fa fa-question-circle"></span> Help</button></a></span>');tmpl_array.push(" </div>");tmpl_array.push(' <div id="folder_items_element">');tmpl_array.push(" </div>");tmpl_array.push("</div>");return _.template(tmpl_array.join(""))},templateLibInfoInModal:function(){tmpl_array=[];tmpl_array.push('<div id="lif_info_modal">');tmpl_array.push("<h2>Library name:</h2>");tmpl_array.push('<p><%- library.get("name") %></p>');tmpl_array.push("<h3>Library description:</h3>");tmpl_array.push('<p><%- library.get("description") %></p>');tmpl_array.push("<h3>Library synopsis:</h3>");tmpl_array.push('<p><%- library.get("synopsis") %></p>');tmpl_array.push("</div>");return _.template(tmpl_array.join(""))},templateNewFolderInModal:function(){tmpl_array=[];tmpl_array.push('<div id="new_folder_modal">');tmpl_array.push("<form>");tmpl_array.push('<input type="text" name="Name" value="" placeholder="Name">');tmpl_array.push('<input type="text" name="Description" value="" placeholder="Description">');tmpl_array.push("</form>");tmpl_array.push("</div>");return _.template(tmpl_array.join(""))},templateBulkImportInModal:function(){var g=[];g.push('<span id="history_modal_combo_bulk" style="width:90%; margin-left: 1em; margin-right: 1em; ">');g.push("Select history: ");g.push('<select id="dataset_import_bulk" name="dataset_import_bulk" style="width:50%; margin-bottom: 1em; "> ');g.push(" <% _.each(histories, function(history) { %>");g.push(' <option value="<%= _.escape(history.get("id")) %>"><%= _.escape(history.get("name")) %></option>');g.push(" <% }); %>");g.push("</select>");g.push("</span>");return _.template(g.join(""))},templateImportIntoHistoryProgressBar:function(){var g=[];g.push('<div class="import_text">');g.push("Importing selected datasets to history <b><%= _.escape(history_name) %></b>");g.push("</div>");g.push('<div class="progress">');g.push(' <div class="progress-bar progress-bar-import" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 00%;">');g.push(' <span class="completion_span">0% Complete</span>');g.push(" </div>");g.push("</div>");g.push("");return _.template(g.join(""))},templateAddingDatasetsProgressBar:function(){var g=[];g.push('<div class="import_text">');g.push("Adding selected datasets from history to library folder <b><%= _.escape(folder_name) %></b>");g.push("</div>");g.push('<div class="progress">');g.push(' <div class="progress-bar progress-bar-import" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 00%;">');g.push(' <span class="completion_span">0% Complete</span>');g.push(" </div>");g.push("</div>");g.push("");return _.template(g.join(""))},templateDeletingDatasetsProgressBar:function(){var g=[];g.push('<div class="import_text">');g.push("</div>");g.push('<div class="progress">');g.push(' <div class="progress-bar progress-bar-import" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 00%;">');g.push(' <span class="completion_span">0% Complete</span>');g.push(" </div>");g.push("</div>");g.push("");return _.template(g.join(""))},templateBrowserModal:function(){var g=[];g.push('<div id="file_browser_modal">');g.push('<div style="margin-bottom:1em;">');g.push('<label class="radio-inline">');g.push(' <input title="Switch to selecting files" type="radio" name="jstree-radio" value="jstree-disable-folders" checked="checked"> Files');g.push("</label>");g.push('<label class="radio-inline">');g.push(' <input title="Switch to selecting folders" type="radio" name="jstree-radio" value="jstree-disable-files"> Folders');g.push("</label>");g.push('<label class="checkbox-inline jstree-preserve-structure" style="display:none;">');g.push(' <input class="preserve-checkbox" type="checkbox" value="preserve_directory_structure">');g.push("Preserve directory structure");g.push(" </label>");g.push('<label class="checkbox-inline jstree-link-files" style="display:none;">');g.push(' <input class="link-checkbox" type="checkbox" value="link_files">');g.push("Link files instead of copying");g.push(" </label>");g.push("</div>");g.push('<div class="alert alert-info jstree-files-message">All files you select will be imported into the current folder.</div>');g.push('<div class="alert alert-info jstree-folders-message" style="display:none;">All files within the selected folders and their subfolders will be imported into the current folder.</div>');g.push('<div id="jstree_browser">');g.push("</div>");g.push("</div>");return _.template(g.join(""))},templateImportPathModal:function(){var g=[];g.push('<div id="file_browser_modal">');g.push('<label class="checkbox-inline jstree-preserve-structure">');g.push(' <input class="preserve-checkbox" type="checkbox" value="preserve_directory_structure">');g.push("Preserve directory structure");g.push(" </label>");g.push('<label class="checkbox-inline jstree-link-files">');g.push(' <input class="link-checkbox" type="checkbox" value="link_files">');g.push("Link files instead of copying");g.push(" </label>");g.push("</div>");g.push('<div class="alert alert-info jstree-folders-message">All files within the given folders and their subfolders will be imported into the current folder.</div>');g.push('<textarea id="import_paths" class="form-control" rows="5" placeholder="Paths separated by newline"></textarea>');g.push("</div>");return _.template(g.join(""))},templateAddFilesFromHistory:function(){var g=[];g.push('<div id="add_files_modal">');g.push('<div id="history_modal_combo_bulk">');g.push("Select history: ");g.push('<select id="dataset_add_bulk" name="dataset_add_bulk" style="width:66%; "> ');g.push(" <% _.each(histories, function(history) { %>");g.push(' <option value="<%= _.escape(history.get("id")) %>"><%= _.escape(history.get("name")) %></option>');g.push(" <% }); %>");g.push("</select>");g.push("</div>");g.push("<br/>");g.push('<div id="selected_history_content">');g.push("</div>");g.push("</div>");return _.template(g.join(""))},templateHistoryContents:function(){var g=[];g.push("<strong>Choose the datasets to import:</strong>");g.push("<ul>");g.push(" <% _.each(history_contents, function(history_item) { %>");g.push(' <li data-id="<%= _.escape(history_item.get("id")) %>">');g.push(' <input style="margin: 0;" type="checkbox"><%= _.escape(history_item.get("hid")) %>: <%= _.escape(history_item.get("name")) %>');g.push(" </li>");g.push(" <% }); %>");g.push("</ul>");return _.template(g.join(""))}});return{FolderToolbarView:a}});
\ No newline at end of file
diff -r 3497f7509b007b04a4db905daf3509f1f3c76626 -r aec146e3828b16812ca24c5f8651ba3d0d483a6a static/scripts/packed/mvc/library/library-library-view.js
--- a/static/scripts/packed/mvc/library/library-library-view.js
+++ b/static/scripts/packed/mvc/library/library-library-view.js
@@ -1,1 +1,1 @@
-define(["libs/toastr","mvc/library/library-model","mvc/ui/ui-select"],function(d,c,a){var b=Backbone.View.extend({el:"#center",model:null,options:{},events:{"click .toolbtn_save_permissions":"savePermissions"},initialize:function(e){this.options=_.extend(this.options,e);if(this.options.id){this.fetchLibrary()}},fetchLibrary:function(e){this.options=_.extend(this.options,e);this.model=new c.Library({id:this.options.id});var f=this;this.model.fetch({success:function(){if(f.options.show_permissions){f.showPermissions()}else{f.render()}},error:function(h,g){if(typeof g.responseJSON!=="undefined"){d.error(g.responseJSON.err_msg+" Click this to go back.","",{onclick:function(){Galaxy.libraries.library_router.back()}})}else{d.error("An error ocurred :(. Click this to go back.","",{onclick:function(){Galaxy.libraries.library_router.back()}})}}})},render:function(e){$(".tooltip").remove();this.options=_.extend(this.options,e);var f=this.templateLibrary();this.$el.html(f({item:this.model}));$("#center [data-toggle]").tooltip()},shareDataset:function(){d.info("Feature coming soon.")},goBack:function(){Galaxy.libraries.library_router.back()},showPermissions:function(f){this.options=_.extend(this.options,f);$(".tooltip").remove();if(this.options.fetched_permissions!==undefined){if(this.options.fetched_permissions.access_library_role_list.length===0){this.model.set({is_unrestricted:true})}else{this.model.set({is_unrestricted:false})}}var h=false;if(Galaxy.currUser){h=Galaxy.currUser.isAdmin()}var g=this.templateLibraryPermissions();this.$el.html(g({library:this.model,is_admin:h}));var e=this;if(this.options.fetched_permissions===undefined){$.get("/api/libraries/"+e.id+"/permissions?scope=current").done(function(i){e.prepareSelectBoxes({fetched_permissions:i})}).fail(function(){d.error("An error occurred while fetching library permissions. :(")})}else{this.prepareSelectBoxes({})}$("#center [data-toggle]").tooltip();$("#center").css("overflow","auto")},_serializeRoles:function(g){var e=[];for(var f=0;f<g.length;f++){e.push(g[f]+":"+g[f])}return e},prepareSelectBoxes:function(i){this.options=_.extend(this.options,i);var e=this.options.fetched_permissions;var g=this;var f=this._serializeRoles(e.access_library_role_list);var j=this._serializeRoles(e.add_library_item_role_list);var h=this._serializeRoles(e.manage_library_role_list);var k=this._serializeRoles(e.modify_library_role_list);g.accessSelectObject=new a.View(this._createSelectOptions(this,"access_perm",f,true));g.addSelectObject=new a.View(this._createSelectOptions(this,"add_perm",j,false));g.manageSelectObject=new a.View(this._createSelectOptions(this,"manage_perm",h,false));g.modifySelectObject=new a.View(this._createSelectOptions(this,"modify_perm",k,false))},_createSelectOptions:function(f,k,i,e){e=e===true?e:false;var j={minimumInputLength:0,css:k,multiple:true,placeholder:"Click to select a role",container:f.$el.find("#"+k),ajax:{url:"/api/libraries/"+f.id+"/permissions?scope=available&is_library_access="+e,dataType:"json",quietMillis:100,data:function(l,m){return{q:l,page_limit:10,page:m}},results:function(n,m){var l=(m*10)<n.total;return{results:n.roles,more:l}}},formatResult:function g(l){return l.name+" type: "+l.type},formatSelection:function h(l){return l.name},initSelection:function(l,n){var m=[];$(l.val().split(",")).each(function(){var o=this.split(":");m.push({id:o[1],name:o[1]})});n(m)},initialData:i.join(","),dropdownCssClass:"bigdrop"};return j},comingSoon:function(){d.warning("Feature coming soon")},copyToClipboard:function(){var e=Backbone.history.location.href;if(e.lastIndexOf("/permissions")!==-1){e=e.substr(0,e.lastIndexOf("/permissions"))}window.prompt("Copy to clipboard: Ctrl+C, Enter",e)},makeDatasetPrivate:function(){var e=this;$.post("/api/libraries/datasets/"+e.id+"/permissions?action=make_private").done(function(f){e.model.set({is_unrestricted:false});e.showPermissions({fetched_permissions:f});d.success("The dataset is now private to you")}).fail(function(){d.error("An error occurred while making dataset private :(")})},removeDatasetRestrictions:function(){var e=this;$.post("/api/libraries/datasets/"+e.id+"/permissions?action=remove_restrictions").done(function(f){e.model.set({is_unrestricted:true});e.showPermissions({fetched_permissions:f});d.success("Access to this dataset is now unrestricted")}).fail(function(){d.error("An error occurred while making dataset unrestricted :(")})},_extractIds:function(e){ids_list=[];for(var f=e.length-1;f>=0;f--){ids_list.push(e[f].id)}return ids_list},savePermissions:function(h){var g=this;var i=this._extractIds(this.accessSelectObject.$el.select2("data"));var e=this._extractIds(this.addSelectObject.$el.select2("data"));var j=this._extractIds(this.manageSelectObject.$el.select2("data"));var f=this._extractIds(this.modifySelectObject.$el.select2("data"));$.post("/api/libraries/"+g.id+"/permissions?action=set_permissions",{"access_ids[]":i,"add_ids[]":e,"manage_ids[]":j,"modify_ids[]":f,}).done(function(k){g.showPermissions({fetched_permissions:k});d.success("Permissions saved")}).fail(function(){d.error("An error occurred while setting library permissions :(")})},templateLibrary:function(){var e=[];e.push('<div class="library_style_container">');e.push(' <div id="library_toolbar">');e.push(' <button data-toggle="tooltip" data-placement="top" title="Modify library item" class="btn btn-default toolbtn_modify_dataset primary-button" type="button"><span class="fa fa-pencil"></span> Modify</span></button>');e.push(' <a href="#folders/<%- item.get("folder_id") %>/datasets/<%- item.id %>/permissions"><button data-toggle="tooltip" data-placement="top" title="Manage permissions" class="btn btn-default toolbtn_change_permissions primary-button" type="button"><span class="fa fa-group"></span> Permissions</span></button></a>');e.push(' <button data-toggle="tooltip" data-placement="top" title="Share dataset" class="btn btn-default toolbtn-share-dataset primary-button" type="button"><span class="fa fa-share"></span> Share</span></button>');e.push(" </div>");e.push(" <p>");e.push(" This dataset is unrestricted so everybody can access it. Just share the URL of this page. ");e.push(' <button data-toggle="tooltip" data-placement="top" title="Copy to clipboard" class="btn btn-default btn-copy-link-to-clipboard primary-button" type="button"><span class="fa fa-clipboard"></span> To Clipboard</span></button> ');e.push(" </p>");e.push('<div class="dataset_table">');e.push(' <table class="grid table table-striped table-condensed">');e.push(" <tr>");e.push(' <th scope="row" id="id_row" data-id="<%= _.escape(item.get("ldda_id")) %>">Name</th>');e.push(' <td><%= _.escape(item.get("name")) %></td>');e.push(" </tr>");e.push(' <% if (item.get("file_ext")) { %>');e.push(" <tr>");e.push(' <th scope="row">Data type</th>');e.push(' <td><%= _.escape(item.get("file_ext")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(" </table>");e.push("</div>");e.push("</div>");return _.template(e.join(""))},templateLibraryPermissions:function(){var e=[];e.push('<div class="library_style_container">');e.push(' <div id="library_toolbar">');e.push(' <a href="#"><button data-toggle="tooltip" data-placement="top" title="Go back to the list of Libraries" class="btn btn-default primary-button" type="button"><span class="fa fa-list"></span> Libraries</span></button></a>');e.push(" </div>");e.push('<h1>Library: <%= _.escape(library.get("name")) %></h1>');e.push('<div class="alert alert-warning">');e.push("<% if (is_admin) { %>");e.push("You are logged in as an <strong>administrator</strong> therefore you can manage any library on this Galaxy instance. Please make sure you understand the consequences.");e.push("<% } else { %>");e.push("You can assign any number of roles to any of the following permission types. However please read carefully the implications of such actions.");e.push("<% }%>");e.push("</div>");e.push('<div class="dataset_table">');e.push("<h2>Library permissions</h2>");e.push("<h4>Roles that can access the library</h4>");e.push('<div id="access_perm" class="access_perm roles-selection"></div>');e.push('<div class="alert alert-info roles-selection">User with <strong>any</strong> of these roles can access this library. If there are no access roles set on the library it is considered <strong>unrestricted</strong>.</div>');e.push("<h4>Roles that can manage permissions on this library</h4>");e.push('<div id="manage_perm" class="manage_perm roles-selection"></div>');e.push('<div class="alert alert-info roles-selection">User with <strong>any</strong> of these roles can manage permissions on this library (includes giving access).</div>');e.push("<h4>Roles that can add items to this library</h4>");e.push('<div id="add_perm" class="add_perm roles-selection"></div>');e.push('<div class="alert alert-info roles-selection">User with <strong>any</strong> of these roles can add items to this library (folders and datasets).</div>');e.push("<h4>Roles that can modify this library</h4>");e.push('<div id="modify_perm" class="modify_perm roles-selection"></div>');e.push('<div class="alert alert-info roles-selection">User with <strong>any</strong> of these roles can modify this library (name, synopsis, etc.).</div>');e.push('<button data-toggle="tooltip" data-placement="top" title="Save modifications made on this page" class="btn btn-default toolbtn_save_permissions primary-button" type="button"><span class="fa fa-floppy-o"></span> Save</span></button>');e.push("</div>");e.push("</div>");return _.template(e.join(""))}});return{LibraryView:b}});
\ No newline at end of file
+define(["libs/toastr","mvc/library/library-model","mvc/ui/ui-select"],function(d,c,a){var b=Backbone.View.extend({el:"#center",model:null,options:{},events:{"click .toolbtn_save_permissions":"savePermissions"},initialize:function(e){this.options=_.extend(this.options,e);if(this.options.id){this.fetchLibrary()}},fetchLibrary:function(e){this.options=_.extend(this.options,e);this.model=new c.Library({id:this.options.id});var f=this;this.model.fetch({success:function(){if(f.options.show_permissions){f.showPermissions()}else{f.render()}},error:function(h,g){if(typeof g.responseJSON!=="undefined"){d.error(g.responseJSON.err_msg+" Click this to go back.","",{onclick:function(){Galaxy.libraries.library_router.back()}})}else{d.error("An error ocurred :(. Click this to go back.","",{onclick:function(){Galaxy.libraries.library_router.back()}})}}})},render:function(e){$(".tooltip").remove();this.options=_.extend(this.options,e);var f=this.templateLibrary();this.$el.html(f({item:this.model}));$("#center [data-toggle]").tooltip()},shareDataset:function(){d.info("Feature coming soon.")},goBack:function(){Galaxy.libraries.library_router.back()},showPermissions:function(f){this.options=_.extend(this.options,f);$(".tooltip").remove();if(this.options.fetched_permissions!==undefined){if(this.options.fetched_permissions.access_library_role_list.length===0){this.model.set({is_unrestricted:true})}else{this.model.set({is_unrestricted:false})}}var h=false;if(Galaxy.currUser){h=Galaxy.currUser.isAdmin()}var g=this.templateLibraryPermissions();this.$el.html(g({library:this.model,is_admin:h}));var e=this;if(this.options.fetched_permissions===undefined){$.get("/api/libraries/"+e.id+"/permissions?scope=current").done(function(i){e.prepareSelectBoxes({fetched_permissions:i})}).fail(function(){d.error("An error occurred while fetching library permissions. :(")})}else{this.prepareSelectBoxes({})}$("#center [data-toggle]").tooltip();$("#center").css("overflow","auto")},_serializeRoles:function(g){var e=[];for(var f=0;f<g.length;f++){e.push(g[f][1]+":"+g[f][0])}return e},prepareSelectBoxes:function(i){this.options=_.extend(this.options,i);var e=this.options.fetched_permissions;var g=this;var f=this._serializeRoles(e.access_library_role_list);var j=this._serializeRoles(e.add_library_item_role_list);var h=this._serializeRoles(e.manage_library_role_list);var k=this._serializeRoles(e.modify_library_role_list);g.accessSelectObject=new a.View(this._createSelectOptions(this,"access_perm",f,true));g.addSelectObject=new a.View(this._createSelectOptions(this,"add_perm",j,false));g.manageSelectObject=new a.View(this._createSelectOptions(this,"manage_perm",h,false));g.modifySelectObject=new a.View(this._createSelectOptions(this,"modify_perm",k,false))},_createSelectOptions:function(f,k,i,e){e=e===true?e:false;var j={minimumInputLength:0,css:k,multiple:true,placeholder:"Click to select a role",container:f.$el.find("#"+k),ajax:{url:"/api/libraries/"+f.id+"/permissions?scope=available&is_library_access="+e,dataType:"json",quietMillis:100,data:function(l,m){return{q:l,page_limit:10,page:m}},results:function(n,m){var l=(m*10)<n.total;return{results:n.roles,more:l}}},formatResult:function g(l){return l.name+" type: "+l.type},formatSelection:function h(l){return l.name},initSelection:function(l,n){var m=[];$(l.val().split(",")).each(function(){var o=this.split(":");m.push({id:o[0],name:o[1]})});n(m)},initialData:i,dropdownCssClass:"bigdrop"};return j},comingSoon:function(){d.warning("Feature coming soon")},copyToClipboard:function(){var e=Backbone.history.location.href;if(e.lastIndexOf("/permissions")!==-1){e=e.substr(0,e.lastIndexOf("/permissions"))}window.prompt("Copy to clipboard: Ctrl+C, Enter",e)},makeDatasetPrivate:function(){var e=this;$.post("/api/libraries/datasets/"+e.id+"/permissions?action=make_private").done(function(f){e.model.set({is_unrestricted:false});e.showPermissions({fetched_permissions:f});d.success("The dataset is now private to you")}).fail(function(){d.error("An error occurred while making dataset private :(")})},removeDatasetRestrictions:function(){var e=this;$.post("/api/libraries/datasets/"+e.id+"/permissions?action=remove_restrictions").done(function(f){e.model.set({is_unrestricted:true});e.showPermissions({fetched_permissions:f});d.success("Access to this dataset is now unrestricted")}).fail(function(){d.error("An error occurred while making dataset unrestricted :(")})},_extractIds:function(e){ids_list=[];for(var f=e.length-1;f>=0;f--){ids_list.push(e[f].id)}return ids_list},savePermissions:function(h){var g=this;var i=this._extractIds(this.accessSelectObject.$el.select2("data"));var e=this._extractIds(this.addSelectObject.$el.select2("data"));var j=this._extractIds(this.manageSelectObject.$el.select2("data"));var f=this._extractIds(this.modifySelectObject.$el.select2("data"));$.post("/api/libraries/"+g.id+"/permissions?action=set_permissions",{"access_ids[]":i,"add_ids[]":e,"manage_ids[]":j,"modify_ids[]":f,}).done(function(k){g.showPermissions({fetched_permissions:k});d.success("Permissions saved")}).fail(function(){d.error("An error occurred while setting library permissions :(")})},templateLibrary:function(){var e=[];e.push('<div class="library_style_container">');e.push(' <div id="library_toolbar">');e.push(' <button data-toggle="tooltip" data-placement="top" title="Modify library item" class="btn btn-default toolbtn_modify_dataset primary-button" type="button"><span class="fa fa-pencil"></span> Modify</span></button>');e.push(' <a href="#folders/<%- item.get("folder_id") %>/datasets/<%- item.id %>/permissions"><button data-toggle="tooltip" data-placement="top" title="Manage permissions" class="btn btn-default toolbtn_change_permissions primary-button" type="button"><span class="fa fa-group"></span> Permissions</span></button></a>');e.push(' <button data-toggle="tooltip" data-placement="top" title="Share dataset" class="btn btn-default toolbtn-share-dataset primary-button" type="button"><span class="fa fa-share"></span> Share</span></button>');e.push(" </div>");e.push(" <p>");e.push(" This dataset is unrestricted so everybody can access it. Just share the URL of this page. ");e.push(' <button data-toggle="tooltip" data-placement="top" title="Copy to clipboard" class="btn btn-default btn-copy-link-to-clipboard primary-button" type="button"><span class="fa fa-clipboard"></span> To Clipboard</span></button> ');e.push(" </p>");e.push('<div class="dataset_table">');e.push(' <table class="grid table table-striped table-condensed">');e.push(" <tr>");e.push(' <th scope="row" id="id_row" data-id="<%= _.escape(item.get("ldda_id")) %>">Name</th>');e.push(' <td><%= _.escape(item.get("name")) %></td>');e.push(" </tr>");e.push(' <% if (item.get("file_ext")) { %>');e.push(" <tr>");e.push(' <th scope="row">Data type</th>');e.push(' <td><%= _.escape(item.get("file_ext")) %></td>');e.push(" </tr>");e.push(" <% } %>");e.push(" </table>");e.push("</div>");e.push("</div>");return _.template(e.join(""))},templateLibraryPermissions:function(){var e=[];e.push('<div class="library_style_container">');e.push(' <div id="library_toolbar">');e.push(' <a href="#"><button data-toggle="tooltip" data-placement="top" title="Go back to the list of Libraries" class="btn btn-default primary-button" type="button"><span class="fa fa-list"></span> Libraries</span></button></a>');e.push(" </div>");e.push('<h1>Library: <%= _.escape(library.get("name")) %></h1>');e.push('<div class="alert alert-warning">');e.push("<% if (is_admin) { %>");e.push("You are logged in as an <strong>administrator</strong> therefore you can manage any library on this Galaxy instance. Please make sure you understand the consequences.");e.push("<% } else { %>");e.push("You can assign any number of roles to any of the following permission types. However please read carefully the implications of such actions.");e.push("<% }%>");e.push("</div>");e.push('<div class="dataset_table">');e.push("<h2>Library permissions</h2>");e.push("<h4>Roles that can access the library</h4>");e.push('<div id="access_perm" class="access_perm roles-selection"></div>');e.push('<div class="alert alert-info roles-selection">User with <strong>any</strong> of these roles can access this library. If there are no access roles set on the library it is considered <strong>unrestricted</strong>.</div>');e.push("<h4>Roles that can manage permissions on this library</h4>");e.push('<div id="manage_perm" class="manage_perm roles-selection"></div>');e.push('<div class="alert alert-info roles-selection">User with <strong>any</strong> of these roles can manage permissions on this library (includes giving access).</div>');e.push("<h4>Roles that can add items to this library</h4>");e.push('<div id="add_perm" class="add_perm roles-selection"></div>');e.push('<div class="alert alert-info roles-selection">User with <strong>any</strong> of these roles can add items to this library (folders and datasets).</div>');e.push("<h4>Roles that can modify this library</h4>");e.push('<div id="modify_perm" class="modify_perm roles-selection"></div>');e.push('<div class="alert alert-info roles-selection">User with <strong>any</strong> of these roles can modify this library (name, synopsis, etc.).</div>');e.push('<button data-toggle="tooltip" data-placement="top" title="Save modifications made on this page" class="btn btn-default toolbtn_save_permissions primary-button" type="button"><span class="fa fa-floppy-o"></span> Save</span></button>');e.push("</div>");e.push("</div>");return _.template(e.join(""))}});return{LibraryView:b}});
\ No newline at end of file
https://bitbucket.org/galaxy/galaxy-central/commits/f163dd7c2ccd/
Changeset: f163dd7c2ccd
User: martenson
Date: 2014-09-16 22:02:12+00:00
Summary: jstree refactoring, removed from global space, documentation to library imports, general JS cleanup
Affected #: 7 files
diff -r aec146e3828b16812ca24c5f8651ba3d0d483a6a -r f163dd7c2ccdd908b4f1f4e30defbbd20ee0da58 client/galaxy/scripts/libs/jquery/jstree.js
--- a/client/galaxy/scripts/libs/jquery/jstree.js
+++ b/client/galaxy/scripts/libs/jquery/jstree.js
@@ -2,7 +2,7 @@
(function (factory) {
"use strict";
if (typeof define === 'function' && define.amd) {
- // define(['jquery'], factory);
+ define(['jquery'], factory);
}
else if(typeof exports === 'object') {
factory(require('jquery'));
diff -r aec146e3828b16812ca24c5f8651ba3d0d483a6a -r f163dd7c2ccdd908b4f1f4e30defbbd20ee0da58 client/galaxy/scripts/mvc/library/library-foldertoolbar-view.js
--- a/client/galaxy/scripts/mvc/library/library-foldertoolbar-view.js
+++ b/client/galaxy/scripts/mvc/library/library-foldertoolbar-view.js
@@ -2,13 +2,11 @@
"galaxy.masthead",
"utils/utils",
"libs/toastr",
- "libs/jquery/jstree",
"mvc/library/library-model"],
-function(mod_masthead,
+function( mod_masthead,
mod_utils,
mod_toastr,
- ignore_jstree,
- mod_library_model) {
+ mod_library_model ) {
var FolderToolbarView = Backbone.View.extend({
el: '#center',
@@ -40,7 +38,7 @@
histories : null,
initialize: function(options){
- this.options = _.defaults(options || {}, this.defaults);
+ this.options = _.defaults( options || {}, this.defaults );
this.render();
},
@@ -202,89 +200,42 @@
* Import all selected datasets into history.
*/
importAllIntoHistory : function (){
- this.modal.disableButton('Import');
-
- // init the control counters
- this.options.chain_call_control.total_number = 0;
- this.options.chain_call_control.failed_number = 0;
-
- var history_id = $("select[name=dataset_import_bulk] option:selected").val();
- // we can save last used history to pre-select it next time
- this.options.last_used_history_id = history_id;
- var history_name = $("select[name=dataset_import_bulk] option:selected").text();
-
- var dataset_ids = [];
- $('#folder_table').find(':checked').each(function(){
- if (this.parentElement.parentElement.id !== '') {
- dataset_ids.push(this.parentElement.parentElement.id);
- }
- });
- var progress_bar_tmpl = this.templateImportIntoHistoryProgressBar();
- this.modal.$el.find('.modal-body').html(progress_bar_tmpl({ history_name : history_name }));
-
- // init the progress bar
- var progressStep = 100 / dataset_ids.length;
- this.initProgress(progressStep);
-
- // prepare the dataset objects to be imported
- var datasets_to_import = [];
- for (var i = dataset_ids.length - 1; i >= 0; i--) {
- var library_dataset_id = dataset_ids[i];
- var historyItem = new mod_library_model.HistoryItem();
- historyItem.url = historyItem.urlRoot + history_id + '/contents';
- historyItem.content = library_dataset_id;
- historyItem.source = 'library';
- datasets_to_import.push(historyItem);
- }
- this.options.chain_call_control.total_number = datasets_to_import.length;
-
- // set the used history as current so user will see the last one
- // that he imported into in the history panel on the 'analysis' page
- jQuery.getJSON( galaxy_config.root + 'history/set_as_current?id=' + history_id );
-
- // call the recursive function to call ajax one after each other (request FIFO queue)
- this.chainCall(datasets_to_import, history_name);
+ this.modal.disableButton('Import');
+ var history_id = $("select[name=dataset_import_bulk] option:selected").val();
+ var history_name = $("select[name=dataset_import_bulk] option:selected").text();
+ // we can save last used history to pre-select it next time
+ this.options.last_used_history_id = history_id;
+ var dataset_ids = [];
+ $('#folder_table').find(':checked').each(function(){
+ if (this.parentElement.parentElement.id !== '') {
+ dataset_ids.push(this.parentElement.parentElement.id);
+ }
+ });
+ // prepare the dataset objects to be imported
+ var datasets_to_import = [];
+ for (var i = dataset_ids.length - 1; i >= 0; i--) {
+ var library_dataset_id = dataset_ids[i];
+ var historyItem = new mod_library_model.HistoryItem();
+ historyItem.url = historyItem.urlRoot + history_id + '/contents';
+ historyItem.content = library_dataset_id;
+ historyItem.source = 'library';
+ datasets_to_import.push(historyItem);
+ }
+ this.initChainCallControl( { length: datasets_to_import.length, action: 'to_history', history_name: history_name } );
+ // set the used history as current so user will see the last one
+ // that he imported into in the history panel on the 'analysis' page
+ jQuery.getJSON( galaxy_config.root + 'history/set_as_current?id=' + history_id );
+ this.chainCallImportingIntoHistory( datasets_to_import, history_name );
},
- chainCall: function(history_item_set, history_name){
- var self = this;
- var popped_item = history_item_set.pop();
- if (typeof popped_item === "undefined") {
- if (this.options.chain_call_control.failed_number === 0){
- mod_toastr.success('Selected datasets imported into history. Click this to start analysing it.', '', {onclick: function() {window.location='/'}});
- } else if (this.options.chain_call_control.failed_number === this.options.chain_call_control.total_number){
- mod_toastr.error('There was an error and no datasets were imported into history.');
- } else if (this.options.chain_call_control.failed_number < this.options.chain_call_control.total_number){
- mod_toastr.warning('Some of the datasets could not be imported into history. Click this to see what was imported.', '', {onclick: function() {window.location='/'}});
- }
- Galaxy.modal.hide();
- return;
- }
- var promise = $.when(popped_item.save({content: popped_item.content, source: popped_item.source}));
-
- promise.done(function(){
- // we are fine
- self.updateProgress();
- self.chainCall(history_item_set, history_name);
- })
- .fail(function(){
- // we have a problem
- self.options.chain_call_control.failed_number += 1;
- self.updateProgress();
- self.chainCall(history_item_set, history_name);
- });
- },
-
- initProgress: function(progressStep){
- this.progress = 0;
- this.progressStep = progressStep;
- },
-
+ /**
+ * Update the progress bar in modal window.
+ */
updateProgress: function(){
this.progress += this.progressStep;
- $('.progress-bar-import').width(Math.round(this.progress) + '%');
- txt_representation = Math.round(this.progress) + '% Complete';
- $('.completion_span').text(txt_representation);
+ $( '.progress-bar-import' ).width( Math.round( this.progress ) + '%' );
+ txt_representation = Math.round( this.progress ) + '% Complete';
+ $( '.completion_span' ).text( txt_representation );
},
/**
@@ -292,16 +243,16 @@
* @param {str} folder_id id of the current folder
* @param {str} format requested archive format
*/
- download : function(folder_id, format){
+ download : function( folder_id, format ){
var dataset_ids = [];
- $('#folder_table').find(':checked').each(function(){
- if (this.parentElement.parentElement.id !== '') {
- dataset_ids.push(this.parentElement.parentElement.id);
+ $( '#folder_table' ).find( ':checked' ).each( function(){
+ if ( this.parentElement.parentElement.id !== '' ) {
+ dataset_ids.push( this.parentElement.parentElement.id );
}
- });
+ } );
var url = '/api/libraries/datasets/download/' + format;
- var data = {'ldda_ids' : dataset_ids};
- this.processDownload(url, data, 'get');
+ var data = { 'ldda_ids' : dataset_ids };
+ this.processDownload( url, data, 'get' );
},
/**
@@ -311,27 +262,27 @@
* @param {obj} data data to include in the request
* @param {str} method method of the request
*/
- processDownload: function(url, data, method){
+ processDownload: function( url, data, method ){
if ( url && data ){
// data can be string of parameters or array/object
- data = typeof data === 'string' ? data : $.param(data);
+ data = typeof data === 'string' ? data : $.param( data );
// split params into form inputs
var inputs = '';
- $.each(data.split('&'), function(){
- var pair = this.split('=');
+ $.each( data.split( '&' ), function(){
+ var pair = this.split( '=' );
inputs+='<input type="hidden" name="'+ pair[0] +'" value="'+ pair[1] +'" />';
});
// send request
$('<form action="'+ url +'" method="'+ (method||'post') +'">'+inputs+'</form>')
- .appendTo('body').submit().remove();
- mod_toastr.info('Your download will begin soon');
+ .appendTo( 'body' ).submit().remove();
+ mod_toastr.info( 'Your download will begin soon' );
} else {
- mod_toastr.error('An error occurred :(');
+ mod_toastr.error( 'An error occurred :(' );
}
},
addFilesFromHistoryModal: function(){
- this.refreshUserHistoriesList(function(self){
+ this.refreshUserHistoriesList( function( self ){
self.modal = Galaxy.modal;
var template_modal = self.templateAddFilesFromHistory();
var folder_name = self.options.full_path[self.options.full_path.length - 1][1]
@@ -355,7 +306,7 @@
self.fetchAndDisplayHistoryContents(event.target.value);
});
} else {
- mod_toastr.error('An error ocurred :(');
+ mod_toastr.error( 'An error ocurred :(' );
}
});
},
@@ -438,23 +389,28 @@
this.jstree.url = this.jstree.urlRoot + '?target=userdir&format=jstree&disable=' + disabled_jstree_element;
this.jstree.fetch({
success: function(model, response){
- $('#jstree_browser').jstree("destroy");
- var jstreeObject = $('#jstree_browser').jstree({
- 'core':{
- 'data': model
- },
- 'plugins': ['types', 'checkbox'],
- 'types': {
- "folder": {
- "icon": "jstree-folder"
+ // This is to prevent double jquery load. I think. Carl is magician.
+ define( 'jquery', function(){ return jQuery; });
+ // Now we need jstree, time to lazy load it.
+ require([ 'libs/jquery/jstree' ], function(jstree){
+ $('#jstree_browser').jstree("destroy");
+ $('#jstree_browser').jstree({
+ 'core':{
+ 'data': model
},
- "file": {
- "icon": "jstree-file"
+ 'plugins': ['types', 'checkbox'],
+ 'types': {
+ "folder": {
+ "icon": "jstree-folder"
+ },
+ "file": {
+ "icon": "jstree-file"
+ }
+ },
+ 'checkbox': {
+ three_state: false
}
- },
- 'checkbox': {
- three_state: false
- }
+ });
});
},
error: function(model, response){
@@ -476,19 +432,19 @@
var preserve_dirs = this.modal.$el.find('.preserve-checkbox').is(':checked');
var link_data = this.modal.$el.find('.link-checkbox').is(':checked');
var paths = $('textarea#import_paths').val();
+ var valid_paths = [];
if (!paths){
mod_toastr.info('Please enter a path relative to Galaxy root');
} else {
this.modal.disableButton('Import');
paths = paths.split('\n');
- var valid_paths = [];
for (var i = paths.length - 1; i >= 0; i--) {
trimmed = paths[i].trim();
if (trimmed.length!==0){
valid_paths.push(trimmed);
}
};
- this.initChainCallControl(valid_paths.length);
+ this.initChainCallControl( { length: valid_paths.length, action: 'adding_datasets' } );
this.chainCallImportingFolders(valid_paths, preserve_dirs, link_data, 'admin_path');
}
},
@@ -496,87 +452,178 @@
/**
* Initialize the control of chaining requests
* in the current modal.
+ * @param {int} length The number of items in the chain call.
*/
- initChainCallControl: function(length){
- var progress_bar_tmpl = this.templateAddingDatasetsProgressBar();
- this.modal.$el.find('.modal-body').html(progress_bar_tmpl({ folder_name : this.options.folder_name }));
+ initChainCallControl: function( options ){
+ var template;
+ switch( options.action ){
+ case "adding_datasets":
+ template = this.templateAddingDatasetsProgressBar();
+ this.modal.$el.find( '.modal-body' ).html( template( { folder_name : this.options.folder_name } ) );
+ break;
+ case "deleting_datasets":
+ template = this.templateDeletingDatasetsProgressBar();
+ this.modal.$el.find( '.modal-body' ).html( template() );
+ break;
+ case "to_history":
+ template = this.templateImportIntoHistoryProgressBar();
+ this.modal.$el.find( '.modal-body' ).html( template( { history_name : options.history_name } ) );
+ break;
+ default:
+ console.error( 'Wrong action specified.')
+ break;
+ }
+
+ // var progress_bar_tmpl = this.templateAddingDatasetsProgressBar();
+ // this.modal.$el.find( '.modal-body' ).html( progress_bar_tmpl( { folder_name : this.options.folder_name } ) );
this.progress = 0;
- this.progressStep = 100 / length;
- this.options.chain_call_control.total_number = length;
+ this.progressStep = 100 / options.length;
+ this.options.chain_call_control.total_number = options.length;
this.options.chain_call_control.failed_number = 0;
},
/**
* Take the selected items from the jstree, create a request queue
* and send them one by one to the server for importing into
- * the current folder.
+ * the current folder.
+ *
+ * jstree.js has to be loaded before
+ * @see renderJstree
*/
- importFromUserdirClicked: function (that){
- var selected_nodes = $('#jstree_browser').jstree().get_selected(true);
- var preserve_dirs = this.modal.$el.find('.preserve-checkbox').is(':checked');
- var link_data = this.modal.$el.find('.link-checkbox').is(':checked');
+ importFromUserdirClicked: function ( that ){
+ var selected_nodes = $( '#jstree_browser' ).jstree().get_selected( true );
+ var preserve_dirs = this.modal.$el.find( '.preserve-checkbox' ).is( ':checked' );
+ var link_data = this.modal.$el.find( '.link-checkbox' ).is( ':checked' );
+ var selection_type = selected_nodes[0].type;
var paths = [];
- if (selected_nodes.length < 1){
- mod_toastr.info('You have to select some items first');
+ if ( selected_nodes.length < 1 ){
+ mod_toastr.info( 'You have to select some items first' );
} else {
- // disable the button to prevent multiple submission
- this.modal.disableButton('Import');
- // init the chain control counters
- this.options.chain_call_control.total_number = 0;
- this.options.chain_call_control.failed_number = 0;
-
- for (var i = selected_nodes.length - 1; i >= 0; i--){
- if(selected_nodes[i].li_attr.full_path !== undefined){
- paths.push(selected_nodes[i].li_attr.full_path);
+ this.modal.disableButton( 'Import' );
+ for ( var i = selected_nodes.length - 1; i >= 0; i-- ){
+ if ( selected_nodes[i].li_attr.full_path !== undefined ){
+ paths.push( selected_nodes[i].li_attr.full_path );
}
}
- var progress_bar_tmpl = this.templateAddingDatasetsProgressBar();
- this.modal.$el.find('.modal-body').html(progress_bar_tmpl({ folder_name : this.options.folder_name }));
-
- // init the progress bar
- this.progressStep = 100 / paths.length;
- this.progress = 0;
- this.options.chain_call_control.total_number = paths.length;
-
- var selection_type = selected_nodes[0].type;
- // call the recursive function to call ajax one after each other (request FIFO queue)
- if (selection_type === 'folder'){
- this.chainCallImportingFolders(paths, preserve_dirs, link_data, 'userdir_folder');
- } else if (selection_type === 'file'){
- this.chainCallImportingUserdirFiles(paths);
+ this.initChainCallControl( { length: paths.length, action: 'adding_datasets' } );
+ if ( selection_type === 'folder' ){
+ this.chainCallImportingFolders( paths, preserve_dirs, link_data, 'userdir_folder' );
+ } else if ( selection_type === 'file' ){
+ this.chainCallImportingUserdirFiles( paths );
}
}
},
+ fetchAndDisplayHistoryContents: function(history_id){
+ var history_contents = new mod_library_model.HistoryContents({id:history_id});
+ var self = this;
+ history_contents.fetch({
+ success: function(history_contents){
+ var history_contents_template = self.templateHistoryContents();
+ self.histories.get(history_id).set({'contents' : history_contents});
+ self.modal.$el.find('#selected_history_content').html(history_contents_template({history_contents: history_contents.models.reverse()}));
+ },
+ error: function(model, response){
+ if (typeof response.responseJSON !== "undefined"){
+ mod_toastr.error(response.responseJSON.err_msg);
+ } else {
+ mod_toastr.error('An error ocurred :(');
+ }
+ }
+ });
+ },
+
+ /**
+ * Import all selected datasets from history into the current folder.
+ */
+ addAllDatasetsFromHistory : function (){
+ var checked_hdas = this.modal.$el.find( '#selected_history_content' ).find( ':checked' );
+ var history_dataset_ids = [];
+ var hdas_to_add = [];
+ if ( checked_hdas.length < 1 ){
+ mod_toastr.info( 'You have to select some datasets first' );
+ } else {
+ this.modal.disableButton( 'Add' );
+ checked_hdas.each(function(){
+ var hid = $( this.parentElement ).data( 'id' );
+ if ( hid ) {
+ history_dataset_ids.push( hid );
+ }
+ });
+ for ( var i = history_dataset_ids.length - 1; i >= 0; i-- ) {
+ history_dataset_id = history_dataset_ids[i];
+ var folder_item = new mod_library_model.Item();
+ folder_item.url = '/api/folders/' + this.options.id + '/contents';
+ folder_item.set( { 'from_hda_id':history_dataset_id } );
+ hdas_to_add.push( folder_item );
+ }
+ this.initChainCallControl( { length: hdas_to_add.length, action: 'adding_datasets' } );
+ this.chainCallAddingHdas( hdas_to_add );
+ }
+ },
+
+ /**
+ * Take array of empty history items and make request for each of them
+ * to create it on server. Update progress in between calls.
+ * @param {array} history_item_set array of empty history items
+ * @param {str} history_name name of the history to import to
+ */
+ chainCallImportingIntoHistory: function( history_item_set, history_name ){
+ var self = this;
+ var popped_item = history_item_set.pop();
+ if ( typeof popped_item == "undefined" ) {
+ if ( this.options.chain_call_control.failed_number === 0 ){
+ mod_toastr.success( 'Selected datasets imported into history. Click this to start analysing it.', '', { onclick: function() { window.location='/' } } );
+ } else if ( this.options.chain_call_control.failed_number === this.options.chain_call_control.total_number ){
+ mod_toastr.error( 'There was an error and no datasets were imported into history.' );
+ } else if ( this.options.chain_call_control.failed_number < this.options.chain_call_control.total_number ){
+ mod_toastr.warning( 'Some of the datasets could not be imported into history. Click this to see what was imported.', '', { onclick: function() { window.location='/' } } );
+ }
+ Galaxy.modal.hide();
+ return true;
+ }
+ var promise = $.when( popped_item.save( { content: popped_item.content, source: popped_item.source } ) );
+
+ promise.done( function(){
+ self.updateProgress();
+ self.chainCallImportingIntoHistory( history_item_set, history_name );
+ } )
+ .fail( function(){
+ self.options.chain_call_control.failed_number += 1;
+ self.updateProgress();
+ self.chainCallImportingIntoHistory( history_item_set, history_name );
+ } );
+ },
+
/**
* Take the array of paths and createa request for each of them
* calling them in chain. Update the progress bar in between each.
* @param {array} paths paths relative to user folder on Galaxy
*/
- chainCallImportingUserdirFiles: function(paths){
+ chainCallImportingUserdirFiles: function( paths ){
var that = this;
var popped_item = paths.pop();
- if (typeof popped_item === "undefined") {
- if (this.options.chain_call_control.failed_number === 0){
- mod_toastr.success('Selected files imported into the current folder');
+ if ( typeof popped_item === "undefined" ) {
+ if ( this.options.chain_call_control.failed_number === 0 ){
+ mod_toastr.success( 'Selected files imported into the current folder' );
Galaxy.modal.hide();
} else {
- mod_toastr.error('Something went wrong :(');
+ mod_toastr.error( 'Something went wrong :(' );
}
return true;
}
- var promise = $.when($.post('/api/libraries/datasets?encoded_folder_id=' + that.id +
+ var promise = $.when( $.post( '/api/libraries/datasets?encoded_folder_id=' + that.id +
'&source=userdir_file' +
- '&path=' + popped_item))
- promise.done(function(response){
+ '&path=' + popped_item ) )
+ promise.done( function( response ){
that.updateProgress();
- that.chainCallImportingUserdirFiles(paths);
- })
- .fail(function(){
+ that.chainCallImportingUserdirFiles( paths );
+ } )
+ .fail( function(){
that.options.chain_call_control.failed_number += 1;
that.updateProgress();
- that.chainCallImportingUserdirFiles(paths);
- });
+ that.chainCallImportingUserdirFiles( paths );
+ } );
},
/**
@@ -618,98 +665,80 @@
});
},
- fetchAndDisplayHistoryContents: function(history_id){
- var history_contents = new mod_library_model.HistoryContents({id:history_id});
- var self = this;
- history_contents.fetch({
- success: function(history_contents){
- var history_contents_template = self.templateHistoryContents();
- self.histories.get(history_id).set({'contents' : history_contents});
- self.modal.$el.find('#selected_history_content').html(history_contents_template({history_contents: history_contents.models.reverse()}));
- },
- error: function(model, response){
- if (typeof response.responseJSON !== "undefined"){
- mod_toastr.error(response.responseJSON.err_msg);
- } else {
- mod_toastr.error('An error ocurred :(');
- }
- }
- });
- },
-
- // add all selected datasets from history into current folder
- addAllDatasetsFromHistory : function (){
- var checked_hdas = this.modal.$el.find('#selected_history_content').find(':checked');
- if (checked_hdas.length < 1){
- mod_toastr.info('You have to select some datasets first');
- } else {
- // disable the button to prevent multiple submission
- this.modal.disableButton('Add');
- // init the control counters
- this.options.chain_call_control.total_number = 0;
- this.options.chain_call_control.failed_number = 0;
-
- var history_dataset_ids = [];
- checked_hdas.each(function(){
- var hid = $(this.parentElement).data('id');
- if (hid) {
- history_dataset_ids.push(hid);
- }
- });
- var progress_bar_tmpl = this.templateAddingDatasetsProgressBar();
- this.modal.$el.find('.modal-body').html(progress_bar_tmpl({ folder_name : this.options.folder_name }));
-
- // init the progress bar
- this.progressStep = 100 / history_dataset_ids.length;
- this.progress = 0;
-
- // prepare the dataset items to be added
- var hdas_to_add = [];
- for (var i = history_dataset_ids.length - 1; i >= 0; i--) {
- history_dataset_id = history_dataset_ids[i];
- var folder_item = new mod_library_model.Item();
- folder_item.url = '/api/folders/' + this.options.id + '/contents';
- folder_item.set({'from_hda_id':history_dataset_id});
- hdas_to_add.push(folder_item);
- }
- this.options.chain_call_control.total_number = hdas_to_add.length;
- // call the recursive function to call ajax one after each other (request FIFO queue)
- this.chainCallAddingHdas(hdas_to_add);
- }
- },
-
- chainCallAddingHdas: function(hdas_set){
+ /**
+ * Take the array of hdas and create a request for each.
+ * Call them in chain and update progress bar in between each.
+ * @param {array} hdas_set array of empty hda objects
+ */
+ chainCallAddingHdas: function( hdas_set ){
var self = this;
this.added_hdas = new mod_library_model.Folder();
var popped_item = hdas_set.pop();
- if (typeof popped_item === "undefined") {
- if (this.options.chain_call_control.failed_number === 0){
- mod_toastr.success('Selected datasets from history added to the folder');
- } else if (this.options.chain_call_control.failed_number === this.options.chain_call_control.total_number){
- mod_toastr.error('There was an error and no datasets were added to the folder.');
- } else if (this.options.chain_call_control.failed_number < this.options.chain_call_control.total_number){
- mod_toastr.warning('Some of the datasets could not be added to the folder');
+ if ( typeof popped_item == "undefined" ) {
+ if ( this.options.chain_call_control.failed_number === 0 ){
+ mod_toastr.success( 'Selected datasets from history added to the folder' );
+ } else if ( this.options.chain_call_control.failed_number === this.options.chain_call_control.total_number ){
+ mod_toastr.error( 'There was an error and no datasets were added to the folder.' );
+ } else if ( this.options.chain_call_control.failed_number < this.options.chain_call_control.total_number ){
+ mod_toastr.warning( 'Some of the datasets could not be added to the folder' );
}
Galaxy.modal.hide();
return this.added_hdas;
}
- var promise = $.when(popped_item.save({from_hda_id: popped_item.get('from_hda_id')}));
+ var promise = $.when( popped_item.save( { from_hda_id: popped_item.get( 'from_hda_id' ) } ) );
- promise.done(function(model){
- // we are fine
- Galaxy.libraries.folderListView.collection.add(model);
+ promise.done( function( model ){
+ Galaxy.libraries.folderListView.collection.add( model );
self.updateProgress();
- self.chainCallAddingHdas(hdas_set);
+ self.chainCallAddingHdas( hdas_set );
})
- .fail(function(){
- // we have a problem
+ .fail( function(){
self.options.chain_call_control.failed_number += 1;
self.updateProgress();
- self.chainCallAddingHdas(hdas_set);
+ self.chainCallAddingHdas( hdas_set );
});
},
/**
+ * Take the array of lddas, create request for each and
+ * call them in chain. Update progress bar in between each.
+ * @param {array} lddas_set array of lddas to delete
+ */
+ chainCallDeletingHdas: function( lddas_set ){
+ var self = this;
+ this.deleted_lddas = new mod_library_model.Folder();
+ var popped_item = lddas_set.pop();
+ if ( typeof popped_item === "undefined" ) {
+ if ( this.options.chain_call_control.failed_number === 0 ){
+ mod_toastr.success( 'Selected datasets deleted' );
+ } else if ( this.options.chain_call_control.failed_number === this.options.chain_call_control.total_number ){
+ mod_toastr.error( 'There was an error and no datasets were deleted.' );
+ } else if ( this.options.chain_call_control.failed_number < this.options.chain_call_control.total_number ){
+ mod_toastr.warning( 'Some of the datasets could not be deleted' );
+ }
+ Galaxy.modal.hide();
+ return this.deleted_lddas;
+ }
+ var promise = $.when( popped_item.destroy() );
+
+ promise.done( function( dataset ){
+ Galaxy.libraries.folderListView.collection.remove( popped_item.id );
+ self.updateProgress();
+ // add the deleted dataset to collection, triggers rendering
+ if ( Galaxy.libraries.folderListView.options.include_deleted ){
+ var updated_dataset = new mod_library_model.Item( dataset );
+ Galaxy.libraries.folderListView.collection.add( updated_dataset );
+ }
+ self.chainCallDeletingHdas( lddas_set );
+ })
+ .fail( function(){
+ self.options.chain_call_control.failed_number += 1;
+ self.updateProgress();
+ self.chainCallDeletingHdas( lddas_set );
+ });
+ },
+
+ /**
* Handles the click on 'show deleted' checkbox
*/
checkIncludeDeleted: function(event){
@@ -765,43 +794,6 @@
}
},
- chainCallDeletingHdas: function(lddas_set){
- var self = this;
- this.deleted_lddas = new mod_library_model.Folder();
- var popped_item = lddas_set.pop();
- if (typeof popped_item === "undefined") {
- if (this.options.chain_call_control.failed_number === 0){
- mod_toastr.success('Selected datasets deleted');
- } else if (this.options.chain_call_control.failed_number === this.options.chain_call_control.total_number){
- mod_toastr.error('There was an error and no datasets were deleted.');
- } else if (this.options.chain_call_control.failed_number < this.options.chain_call_control.total_number){
- mod_toastr.warning('Some of the datasets could not be deleted');
- }
- Galaxy.modal.hide();
- return this.deleted_lddas;
- }
- var promise = $.when(popped_item.destroy());
-
- promise.done(function(dataset){
- // we are fine
- Galaxy.libraries.folderListView.collection.remove(popped_item.id);
- self.updateProgress();
- // add the deleted dataset to collection, triggers rendering
- if (Galaxy.libraries.folderListView.options.include_deleted){
- var updated_dataset = new mod_library_model.Item(dataset);
- Galaxy.libraries.folderListView.collection.add(updated_dataset);
- }
- // execute next request
- self.chainCallDeletingHdas(lddas_set);
- })
- .fail(function(){
- // we have a problem
- self.options.chain_call_control.failed_number += 1;
- self.updateProgress();
- // execute next request
- self.chainCallDeletingHdas(lddas_set);
- });
- },
showLibInfo: function(){
var library_id = Galaxy.libraries.folderListView.folderContainer.attributes.metadata.parent_library_id;
@@ -989,7 +981,7 @@
var tmpl_array = [];
tmpl_array.push('<div class="import_text">');
- tmpl_array.push('Adding selected datasets from history to library folder <b><%= _.escape(folder_name) %></b>');
+ tmpl_array.push('Adding selected datasets to library folder <b><%= _.escape(folder_name) %></b>');
tmpl_array.push('</div>');
tmpl_array.push('<div class="progress">');
tmpl_array.push(' <div class="progress-bar progress-bar-import" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 00%;">');
diff -r aec146e3828b16812ca24c5f8651ba3d0d483a6a -r f163dd7c2ccdd908b4f1f4e30defbbd20ee0da58 static/scripts/libs/jquery/jstree.js
--- a/static/scripts/libs/jquery/jstree.js
+++ b/static/scripts/libs/jquery/jstree.js
@@ -2,7 +2,7 @@
(function (factory) {
"use strict";
if (typeof define === 'function' && define.amd) {
- // define(['jquery'], factory);
+ define(['jquery'], factory);
}
else if(typeof exports === 'object') {
factory(require('jquery'));
diff -r aec146e3828b16812ca24c5f8651ba3d0d483a6a -r f163dd7c2ccdd908b4f1f4e30defbbd20ee0da58 static/scripts/mvc/library/library-foldertoolbar-view.js
--- a/static/scripts/mvc/library/library-foldertoolbar-view.js
+++ b/static/scripts/mvc/library/library-foldertoolbar-view.js
@@ -2,13 +2,11 @@
"galaxy.masthead",
"utils/utils",
"libs/toastr",
- "libs/jquery/jstree",
"mvc/library/library-model"],
-function(mod_masthead,
+function( mod_masthead,
mod_utils,
mod_toastr,
- ignore_jstree,
- mod_library_model) {
+ mod_library_model ) {
var FolderToolbarView = Backbone.View.extend({
el: '#center',
@@ -40,7 +38,7 @@
histories : null,
initialize: function(options){
- this.options = _.defaults(options || {}, this.defaults);
+ this.options = _.defaults( options || {}, this.defaults );
this.render();
},
@@ -202,89 +200,42 @@
* Import all selected datasets into history.
*/
importAllIntoHistory : function (){
- this.modal.disableButton('Import');
-
- // init the control counters
- this.options.chain_call_control.total_number = 0;
- this.options.chain_call_control.failed_number = 0;
-
- var history_id = $("select[name=dataset_import_bulk] option:selected").val();
- // we can save last used history to pre-select it next time
- this.options.last_used_history_id = history_id;
- var history_name = $("select[name=dataset_import_bulk] option:selected").text();
-
- var dataset_ids = [];
- $('#folder_table').find(':checked').each(function(){
- if (this.parentElement.parentElement.id !== '') {
- dataset_ids.push(this.parentElement.parentElement.id);
- }
- });
- var progress_bar_tmpl = this.templateImportIntoHistoryProgressBar();
- this.modal.$el.find('.modal-body').html(progress_bar_tmpl({ history_name : history_name }));
-
- // init the progress bar
- var progressStep = 100 / dataset_ids.length;
- this.initProgress(progressStep);
-
- // prepare the dataset objects to be imported
- var datasets_to_import = [];
- for (var i = dataset_ids.length - 1; i >= 0; i--) {
- var library_dataset_id = dataset_ids[i];
- var historyItem = new mod_library_model.HistoryItem();
- historyItem.url = historyItem.urlRoot + history_id + '/contents';
- historyItem.content = library_dataset_id;
- historyItem.source = 'library';
- datasets_to_import.push(historyItem);
- }
- this.options.chain_call_control.total_number = datasets_to_import.length;
-
- // set the used history as current so user will see the last one
- // that he imported into in the history panel on the 'analysis' page
- jQuery.getJSON( galaxy_config.root + 'history/set_as_current?id=' + history_id );
-
- // call the recursive function to call ajax one after each other (request FIFO queue)
- this.chainCall(datasets_to_import, history_name);
+ this.modal.disableButton('Import');
+ var history_id = $("select[name=dataset_import_bulk] option:selected").val();
+ var history_name = $("select[name=dataset_import_bulk] option:selected").text();
+ // we can save last used history to pre-select it next time
+ this.options.last_used_history_id = history_id;
+ var dataset_ids = [];
+ $('#folder_table').find(':checked').each(function(){
+ if (this.parentElement.parentElement.id !== '') {
+ dataset_ids.push(this.parentElement.parentElement.id);
+ }
+ });
+ // prepare the dataset objects to be imported
+ var datasets_to_import = [];
+ for (var i = dataset_ids.length - 1; i >= 0; i--) {
+ var library_dataset_id = dataset_ids[i];
+ var historyItem = new mod_library_model.HistoryItem();
+ historyItem.url = historyItem.urlRoot + history_id + '/contents';
+ historyItem.content = library_dataset_id;
+ historyItem.source = 'library';
+ datasets_to_import.push(historyItem);
+ }
+ this.initChainCallControl( { length: datasets_to_import.length, action: 'to_history', history_name: history_name } );
+ // set the used history as current so user will see the last one
+ // that he imported into in the history panel on the 'analysis' page
+ jQuery.getJSON( galaxy_config.root + 'history/set_as_current?id=' + history_id );
+ this.chainCallImportingIntoHistory( datasets_to_import, history_name );
},
- chainCall: function(history_item_set, history_name){
- var self = this;
- var popped_item = history_item_set.pop();
- if (typeof popped_item === "undefined") {
- if (this.options.chain_call_control.failed_number === 0){
- mod_toastr.success('Selected datasets imported into history. Click this to start analysing it.', '', {onclick: function() {window.location='/'}});
- } else if (this.options.chain_call_control.failed_number === this.options.chain_call_control.total_number){
- mod_toastr.error('There was an error and no datasets were imported into history.');
- } else if (this.options.chain_call_control.failed_number < this.options.chain_call_control.total_number){
- mod_toastr.warning('Some of the datasets could not be imported into history. Click this to see what was imported.', '', {onclick: function() {window.location='/'}});
- }
- Galaxy.modal.hide();
- return;
- }
- var promise = $.when(popped_item.save({content: popped_item.content, source: popped_item.source}));
-
- promise.done(function(){
- // we are fine
- self.updateProgress();
- self.chainCall(history_item_set, history_name);
- })
- .fail(function(){
- // we have a problem
- self.options.chain_call_control.failed_number += 1;
- self.updateProgress();
- self.chainCall(history_item_set, history_name);
- });
- },
-
- initProgress: function(progressStep){
- this.progress = 0;
- this.progressStep = progressStep;
- },
-
+ /**
+ * Update the progress bar in modal window.
+ */
updateProgress: function(){
this.progress += this.progressStep;
- $('.progress-bar-import').width(Math.round(this.progress) + '%');
- txt_representation = Math.round(this.progress) + '% Complete';
- $('.completion_span').text(txt_representation);
+ $( '.progress-bar-import' ).width( Math.round( this.progress ) + '%' );
+ txt_representation = Math.round( this.progress ) + '% Complete';
+ $( '.completion_span' ).text( txt_representation );
},
/**
@@ -292,16 +243,16 @@
* @param {str} folder_id id of the current folder
* @param {str} format requested archive format
*/
- download : function(folder_id, format){
+ download : function( folder_id, format ){
var dataset_ids = [];
- $('#folder_table').find(':checked').each(function(){
- if (this.parentElement.parentElement.id !== '') {
- dataset_ids.push(this.parentElement.parentElement.id);
+ $( '#folder_table' ).find( ':checked' ).each( function(){
+ if ( this.parentElement.parentElement.id !== '' ) {
+ dataset_ids.push( this.parentElement.parentElement.id );
}
- });
+ } );
var url = '/api/libraries/datasets/download/' + format;
- var data = {'ldda_ids' : dataset_ids};
- this.processDownload(url, data, 'get');
+ var data = { 'ldda_ids' : dataset_ids };
+ this.processDownload( url, data, 'get' );
},
/**
@@ -311,27 +262,27 @@
* @param {obj} data data to include in the request
* @param {str} method method of the request
*/
- processDownload: function(url, data, method){
+ processDownload: function( url, data, method ){
if ( url && data ){
// data can be string of parameters or array/object
- data = typeof data === 'string' ? data : $.param(data);
+ data = typeof data === 'string' ? data : $.param( data );
// split params into form inputs
var inputs = '';
- $.each(data.split('&'), function(){
- var pair = this.split('=');
+ $.each( data.split( '&' ), function(){
+ var pair = this.split( '=' );
inputs+='<input type="hidden" name="'+ pair[0] +'" value="'+ pair[1] +'" />';
});
// send request
$('<form action="'+ url +'" method="'+ (method||'post') +'">'+inputs+'</form>')
- .appendTo('body').submit().remove();
- mod_toastr.info('Your download will begin soon');
+ .appendTo( 'body' ).submit().remove();
+ mod_toastr.info( 'Your download will begin soon' );
} else {
- mod_toastr.error('An error occurred :(');
+ mod_toastr.error( 'An error occurred :(' );
}
},
addFilesFromHistoryModal: function(){
- this.refreshUserHistoriesList(function(self){
+ this.refreshUserHistoriesList( function( self ){
self.modal = Galaxy.modal;
var template_modal = self.templateAddFilesFromHistory();
var folder_name = self.options.full_path[self.options.full_path.length - 1][1]
@@ -355,7 +306,7 @@
self.fetchAndDisplayHistoryContents(event.target.value);
});
} else {
- mod_toastr.error('An error ocurred :(');
+ mod_toastr.error( 'An error ocurred :(' );
}
});
},
@@ -438,23 +389,28 @@
this.jstree.url = this.jstree.urlRoot + '?target=userdir&format=jstree&disable=' + disabled_jstree_element;
this.jstree.fetch({
success: function(model, response){
- $('#jstree_browser').jstree("destroy");
- var jstreeObject = $('#jstree_browser').jstree({
- 'core':{
- 'data': model
- },
- 'plugins': ['types', 'checkbox'],
- 'types': {
- "folder": {
- "icon": "jstree-folder"
+ // This is to prevent double jquery load. I think. Carl is magician.
+ define( 'jquery', function(){ return jQuery; });
+ // Now we need jstree, time to lazy load it.
+ require([ 'libs/jquery/jstree' ], function(jstree){
+ $('#jstree_browser').jstree("destroy");
+ $('#jstree_browser').jstree({
+ 'core':{
+ 'data': model
},
- "file": {
- "icon": "jstree-file"
+ 'plugins': ['types', 'checkbox'],
+ 'types': {
+ "folder": {
+ "icon": "jstree-folder"
+ },
+ "file": {
+ "icon": "jstree-file"
+ }
+ },
+ 'checkbox': {
+ three_state: false
}
- },
- 'checkbox': {
- three_state: false
- }
+ });
});
},
error: function(model, response){
@@ -476,19 +432,19 @@
var preserve_dirs = this.modal.$el.find('.preserve-checkbox').is(':checked');
var link_data = this.modal.$el.find('.link-checkbox').is(':checked');
var paths = $('textarea#import_paths').val();
+ var valid_paths = [];
if (!paths){
mod_toastr.info('Please enter a path relative to Galaxy root');
} else {
this.modal.disableButton('Import');
paths = paths.split('\n');
- var valid_paths = [];
for (var i = paths.length - 1; i >= 0; i--) {
trimmed = paths[i].trim();
if (trimmed.length!==0){
valid_paths.push(trimmed);
}
};
- this.initChainCallControl(valid_paths.length);
+ this.initChainCallControl( { length: valid_paths.length, action: 'adding_datasets' } );
this.chainCallImportingFolders(valid_paths, preserve_dirs, link_data, 'admin_path');
}
},
@@ -496,127 +452,68 @@
/**
* Initialize the control of chaining requests
* in the current modal.
+ * @param {int} length The number of items in the chain call.
*/
- initChainCallControl: function(length){
- var progress_bar_tmpl = this.templateAddingDatasetsProgressBar();
- this.modal.$el.find('.modal-body').html(progress_bar_tmpl({ folder_name : this.options.folder_name }));
+ initChainCallControl: function( options ){
+ var template;
+ switch( options.action ){
+ case "adding_datasets":
+ template = this.templateAddingDatasetsProgressBar();
+ this.modal.$el.find( '.modal-body' ).html( template( { folder_name : this.options.folder_name } ) );
+ break;
+ case "deleting_datasets":
+ template = this.templateDeletingDatasetsProgressBar();
+ this.modal.$el.find( '.modal-body' ).html( template() );
+ break;
+ case "to_history":
+ template = this.templateImportIntoHistoryProgressBar();
+ this.modal.$el.find( '.modal-body' ).html( template( { history_name : options.history_name } ) );
+ break;
+ default:
+ console.error( 'Wrong action specified.')
+ break;
+ }
+
+ // var progress_bar_tmpl = this.templateAddingDatasetsProgressBar();
+ // this.modal.$el.find( '.modal-body' ).html( progress_bar_tmpl( { folder_name : this.options.folder_name } ) );
this.progress = 0;
- this.progressStep = 100 / length;
- this.options.chain_call_control.total_number = length;
+ this.progressStep = 100 / options.length;
+ this.options.chain_call_control.total_number = options.length;
this.options.chain_call_control.failed_number = 0;
},
/**
* Take the selected items from the jstree, create a request queue
* and send them one by one to the server for importing into
- * the current folder.
+ * the current folder.
+ *
+ * jstree.js has to be loaded before
+ * @see renderJstree
*/
- importFromUserdirClicked: function (that){
- var selected_nodes = $('#jstree_browser').jstree().get_selected(true);
- var preserve_dirs = this.modal.$el.find('.preserve-checkbox').is(':checked');
- var link_data = this.modal.$el.find('.link-checkbox').is(':checked');
+ importFromUserdirClicked: function ( that ){
+ var selected_nodes = $( '#jstree_browser' ).jstree().get_selected( true );
+ var preserve_dirs = this.modal.$el.find( '.preserve-checkbox' ).is( ':checked' );
+ var link_data = this.modal.$el.find( '.link-checkbox' ).is( ':checked' );
+ var selection_type = selected_nodes[0].type;
var paths = [];
- if (selected_nodes.length < 1){
- mod_toastr.info('You have to select some items first');
+ if ( selected_nodes.length < 1 ){
+ mod_toastr.info( 'You have to select some items first' );
} else {
- // disable the button to prevent multiple submission
- this.modal.disableButton('Import');
- // init the chain control counters
- this.options.chain_call_control.total_number = 0;
- this.options.chain_call_control.failed_number = 0;
-
- for (var i = selected_nodes.length - 1; i >= 0; i--){
- if(selected_nodes[i].li_attr.full_path !== undefined){
- paths.push(selected_nodes[i].li_attr.full_path);
+ this.modal.disableButton( 'Import' );
+ for ( var i = selected_nodes.length - 1; i >= 0; i-- ){
+ if ( selected_nodes[i].li_attr.full_path !== undefined ){
+ paths.push( selected_nodes[i].li_attr.full_path );
}
}
- var progress_bar_tmpl = this.templateAddingDatasetsProgressBar();
- this.modal.$el.find('.modal-body').html(progress_bar_tmpl({ folder_name : this.options.folder_name }));
-
- // init the progress bar
- this.progressStep = 100 / paths.length;
- this.progress = 0;
- this.options.chain_call_control.total_number = paths.length;
-
- var selection_type = selected_nodes[0].type;
- // call the recursive function to call ajax one after each other (request FIFO queue)
- if (selection_type === 'folder'){
- this.chainCallImportingFolders(paths, preserve_dirs, link_data, 'userdir_folder');
- } else if (selection_type === 'file'){
- this.chainCallImportingUserdirFiles(paths);
+ this.initChainCallControl( { length: paths.length, action: 'adding_datasets' } );
+ if ( selection_type === 'folder' ){
+ this.chainCallImportingFolders( paths, preserve_dirs, link_data, 'userdir_folder' );
+ } else if ( selection_type === 'file' ){
+ this.chainCallImportingUserdirFiles( paths );
}
}
},
- /**
- * Take the array of paths and createa request for each of them
- * calling them in chain. Update the progress bar in between each.
- * @param {array} paths paths relative to user folder on Galaxy
- */
- chainCallImportingUserdirFiles: function(paths){
- var that = this;
- var popped_item = paths.pop();
- if (typeof popped_item === "undefined") {
- if (this.options.chain_call_control.failed_number === 0){
- mod_toastr.success('Selected files imported into the current folder');
- Galaxy.modal.hide();
- } else {
- mod_toastr.error('Something went wrong :(');
- }
- return true;
- }
- var promise = $.when($.post('/api/libraries/datasets?encoded_folder_id=' + that.id +
- '&source=userdir_file' +
- '&path=' + popped_item))
- promise.done(function(response){
- that.updateProgress();
- that.chainCallImportingUserdirFiles(paths);
- })
- .fail(function(){
- that.options.chain_call_control.failed_number += 1;
- that.updateProgress();
- that.chainCallImportingUserdirFiles(paths);
- });
- },
-
- /**
- * Take the array of paths and createa request for each of them
- * calling them in chain. Update the progress bar in between each.
- * @param {array} paths paths relative to Galaxy root folder
- * @param {boolean} preserve_dirs indicates whether to preserve folder structure
- * @param {boolean} link_data copy files to Galaxy or link instead
- * @param {str} source string representing what type of folder
- * is the source of import
- */
- chainCallImportingFolders: function(paths, preserve_dirs, link_data, source){
- // need to check which paths to call
- var that = this;
- var popped_item = paths.pop();
- if (typeof popped_item == "undefined") {
- if (this.options.chain_call_control.failed_number === 0){
- mod_toastr.success('Selected folders and their contents imported into the current folder');
- Galaxy.modal.hide();
- } else {
- mod_toastr.error('Something went wrong :(');
- }
- return true;
- }
- var promise = $.when($.post('/api/libraries/datasets?encoded_folder_id=' + that.id +
- '&source=' + source +
- '&path=' + popped_item +
- '&preserve_dirs=' + preserve_dirs +
- '&link_data=' + link_data))
- promise.done(function(response){
- that.updateProgress();
- that.chainCallImportingFolders(paths, preserve_dirs, link_data, source);
- })
- .fail(function(){
- that.options.chain_call_control.failed_number += 1;
- that.updateProgress();
- that.chainCallImportingFolders(paths, preserve_dirs, link_data, source);
- });
- },
-
fetchAndDisplayHistoryContents: function(history_id){
var history_contents = new mod_library_model.HistoryContents({id:history_id});
var self = this;
@@ -636,79 +533,212 @@
});
},
- // add all selected datasets from history into current folder
+ /**
+ * Import all selected datasets from history into the current folder.
+ */
addAllDatasetsFromHistory : function (){
- var checked_hdas = this.modal.$el.find('#selected_history_content').find(':checked');
- if (checked_hdas.length < 1){
- mod_toastr.info('You have to select some datasets first');
- } else {
- // disable the button to prevent multiple submission
- this.modal.disableButton('Add');
- // init the control counters
- this.options.chain_call_control.total_number = 0;
- this.options.chain_call_control.failed_number = 0;
-
- var history_dataset_ids = [];
- checked_hdas.each(function(){
- var hid = $(this.parentElement).data('id');
- if (hid) {
- history_dataset_ids.push(hid);
- }
- });
- var progress_bar_tmpl = this.templateAddingDatasetsProgressBar();
- this.modal.$el.find('.modal-body').html(progress_bar_tmpl({ folder_name : this.options.folder_name }));
-
- // init the progress bar
- this.progressStep = 100 / history_dataset_ids.length;
- this.progress = 0;
-
- // prepare the dataset items to be added
- var hdas_to_add = [];
- for (var i = history_dataset_ids.length - 1; i >= 0; i--) {
- history_dataset_id = history_dataset_ids[i];
- var folder_item = new mod_library_model.Item();
- folder_item.url = '/api/folders/' + this.options.id + '/contents';
- folder_item.set({'from_hda_id':history_dataset_id});
- hdas_to_add.push(folder_item);
- }
- this.options.chain_call_control.total_number = hdas_to_add.length;
- // call the recursive function to call ajax one after each other (request FIFO queue)
- this.chainCallAddingHdas(hdas_to_add);
+ var checked_hdas = this.modal.$el.find( '#selected_history_content' ).find( ':checked' );
+ var history_dataset_ids = [];
+ var hdas_to_add = [];
+ if ( checked_hdas.length < 1 ){
+ mod_toastr.info( 'You have to select some datasets first' );
+ } else {
+ this.modal.disableButton( 'Add' );
+ checked_hdas.each(function(){
+ var hid = $( this.parentElement ).data( 'id' );
+ if ( hid ) {
+ history_dataset_ids.push( hid );
+ }
+ });
+ for ( var i = history_dataset_ids.length - 1; i >= 0; i-- ) {
+ history_dataset_id = history_dataset_ids[i];
+ var folder_item = new mod_library_model.Item();
+ folder_item.url = '/api/folders/' + this.options.id + '/contents';
+ folder_item.set( { 'from_hda_id':history_dataset_id } );
+ hdas_to_add.push( folder_item );
}
+ this.initChainCallControl( { length: hdas_to_add.length, action: 'adding_datasets' } );
+ this.chainCallAddingHdas( hdas_to_add );
+ }
},
- chainCallAddingHdas: function(hdas_set){
+ /**
+ * Take array of empty history items and make request for each of them
+ * to create it on server. Update progress in between calls.
+ * @param {array} history_item_set array of empty history items
+ * @param {str} history_name name of the history to import to
+ */
+ chainCallImportingIntoHistory: function( history_item_set, history_name ){
+ var self = this;
+ var popped_item = history_item_set.pop();
+ if ( typeof popped_item == "undefined" ) {
+ if ( this.options.chain_call_control.failed_number === 0 ){
+ mod_toastr.success( 'Selected datasets imported into history. Click this to start analysing it.', '', { onclick: function() { window.location='/' } } );
+ } else if ( this.options.chain_call_control.failed_number === this.options.chain_call_control.total_number ){
+ mod_toastr.error( 'There was an error and no datasets were imported into history.' );
+ } else if ( this.options.chain_call_control.failed_number < this.options.chain_call_control.total_number ){
+ mod_toastr.warning( 'Some of the datasets could not be imported into history. Click this to see what was imported.', '', { onclick: function() { window.location='/' } } );
+ }
+ Galaxy.modal.hide();
+ return true;
+ }
+ var promise = $.when( popped_item.save( { content: popped_item.content, source: popped_item.source } ) );
+
+ promise.done( function(){
+ self.updateProgress();
+ self.chainCallImportingIntoHistory( history_item_set, history_name );
+ } )
+ .fail( function(){
+ self.options.chain_call_control.failed_number += 1;
+ self.updateProgress();
+ self.chainCallImportingIntoHistory( history_item_set, history_name );
+ } );
+ },
+
+ /**
+ * Take the array of paths and createa request for each of them
+ * calling them in chain. Update the progress bar in between each.
+ * @param {array} paths paths relative to user folder on Galaxy
+ */
+ chainCallImportingUserdirFiles: function( paths ){
+ var that = this;
+ var popped_item = paths.pop();
+ if ( typeof popped_item === "undefined" ) {
+ if ( this.options.chain_call_control.failed_number === 0 ){
+ mod_toastr.success( 'Selected files imported into the current folder' );
+ Galaxy.modal.hide();
+ } else {
+ mod_toastr.error( 'Something went wrong :(' );
+ }
+ return true;
+ }
+ var promise = $.when( $.post( '/api/libraries/datasets?encoded_folder_id=' + that.id +
+ '&source=userdir_file' +
+ '&path=' + popped_item ) )
+ promise.done( function( response ){
+ that.updateProgress();
+ that.chainCallImportingUserdirFiles( paths );
+ } )
+ .fail( function(){
+ that.options.chain_call_control.failed_number += 1;
+ that.updateProgress();
+ that.chainCallImportingUserdirFiles( paths );
+ } );
+ },
+
+ /**
+ * Take the array of paths and createa request for each of them
+ * calling them in chain. Update the progress bar in between each.
+ * @param {array} paths paths relative to Galaxy root folder
+ * @param {boolean} preserve_dirs indicates whether to preserve folder structure
+ * @param {boolean} link_data copy files to Galaxy or link instead
+ * @param {str} source string representing what type of folder
+ * is the source of import
+ */
+ chainCallImportingFolders: function(paths, preserve_dirs, link_data, source){
+ // need to check which paths to call
+ var that = this;
+ var popped_item = paths.pop();
+ if (typeof popped_item == "undefined") {
+ if (this.options.chain_call_control.failed_number === 0){
+ mod_toastr.success('Selected folders and their contents imported into the current folder');
+ Galaxy.modal.hide();
+ } else {
+ // TODO better error report
+ mod_toastr.error('Something went wrong :(');
+ }
+ return true;
+ }
+ var promise = $.when($.post('/api/libraries/datasets?encoded_folder_id=' + that.id +
+ '&source=' + source +
+ '&path=' + popped_item +
+ '&preserve_dirs=' + preserve_dirs +
+ '&link_data=' + link_data))
+ promise.done(function(response){
+ that.updateProgress();
+ that.chainCallImportingFolders(paths, preserve_dirs, link_data, source);
+ })
+ .fail(function(){
+ that.options.chain_call_control.failed_number += 1;
+ that.updateProgress();
+ that.chainCallImportingFolders(paths, preserve_dirs, link_data, source);
+ });
+ },
+
+ /**
+ * Take the array of hdas and create a request for each.
+ * Call them in chain and update progress bar in between each.
+ * @param {array} hdas_set array of empty hda objects
+ */
+ chainCallAddingHdas: function( hdas_set ){
var self = this;
this.added_hdas = new mod_library_model.Folder();
var popped_item = hdas_set.pop();
- if (typeof popped_item === "undefined") {
- if (this.options.chain_call_control.failed_number === 0){
- mod_toastr.success('Selected datasets from history added to the folder');
- } else if (this.options.chain_call_control.failed_number === this.options.chain_call_control.total_number){
- mod_toastr.error('There was an error and no datasets were added to the folder.');
- } else if (this.options.chain_call_control.failed_number < this.options.chain_call_control.total_number){
- mod_toastr.warning('Some of the datasets could not be added to the folder');
+ if ( typeof popped_item == "undefined" ) {
+ if ( this.options.chain_call_control.failed_number === 0 ){
+ mod_toastr.success( 'Selected datasets from history added to the folder' );
+ } else if ( this.options.chain_call_control.failed_number === this.options.chain_call_control.total_number ){
+ mod_toastr.error( 'There was an error and no datasets were added to the folder.' );
+ } else if ( this.options.chain_call_control.failed_number < this.options.chain_call_control.total_number ){
+ mod_toastr.warning( 'Some of the datasets could not be added to the folder' );
}
Galaxy.modal.hide();
return this.added_hdas;
}
- var promise = $.when(popped_item.save({from_hda_id: popped_item.get('from_hda_id')}));
+ var promise = $.when( popped_item.save( { from_hda_id: popped_item.get( 'from_hda_id' ) } ) );
- promise.done(function(model){
- // we are fine
- Galaxy.libraries.folderListView.collection.add(model);
+ promise.done( function( model ){
+ Galaxy.libraries.folderListView.collection.add( model );
self.updateProgress();
- self.chainCallAddingHdas(hdas_set);
+ self.chainCallAddingHdas( hdas_set );
})
- .fail(function(){
- // we have a problem
+ .fail( function(){
self.options.chain_call_control.failed_number += 1;
self.updateProgress();
- self.chainCallAddingHdas(hdas_set);
+ self.chainCallAddingHdas( hdas_set );
});
},
/**
+ * Take the array of lddas, create request for each and
+ * call them in chain. Update progress bar in between each.
+ * @param {array} lddas_set array of lddas to delete
+ */
+ chainCallDeletingHdas: function( lddas_set ){
+ var self = this;
+ this.deleted_lddas = new mod_library_model.Folder();
+ var popped_item = lddas_set.pop();
+ if ( typeof popped_item === "undefined" ) {
+ if ( this.options.chain_call_control.failed_number === 0 ){
+ mod_toastr.success( 'Selected datasets deleted' );
+ } else if ( this.options.chain_call_control.failed_number === this.options.chain_call_control.total_number ){
+ mod_toastr.error( 'There was an error and no datasets were deleted.' );
+ } else if ( this.options.chain_call_control.failed_number < this.options.chain_call_control.total_number ){
+ mod_toastr.warning( 'Some of the datasets could not be deleted' );
+ }
+ Galaxy.modal.hide();
+ return this.deleted_lddas;
+ }
+ var promise = $.when( popped_item.destroy() );
+
+ promise.done( function( dataset ){
+ Galaxy.libraries.folderListView.collection.remove( popped_item.id );
+ self.updateProgress();
+ // add the deleted dataset to collection, triggers rendering
+ if ( Galaxy.libraries.folderListView.options.include_deleted ){
+ var updated_dataset = new mod_library_model.Item( dataset );
+ Galaxy.libraries.folderListView.collection.add( updated_dataset );
+ }
+ self.chainCallDeletingHdas( lddas_set );
+ })
+ .fail( function(){
+ self.options.chain_call_control.failed_number += 1;
+ self.updateProgress();
+ self.chainCallDeletingHdas( lddas_set );
+ });
+ },
+
+ /**
* Handles the click on 'show deleted' checkbox
*/
checkIncludeDeleted: function(event){
@@ -764,43 +794,6 @@
}
},
- chainCallDeletingHdas: function(lddas_set){
- var self = this;
- this.deleted_lddas = new mod_library_model.Folder();
- var popped_item = lddas_set.pop();
- if (typeof popped_item === "undefined") {
- if (this.options.chain_call_control.failed_number === 0){
- mod_toastr.success('Selected datasets deleted');
- } else if (this.options.chain_call_control.failed_number === this.options.chain_call_control.total_number){
- mod_toastr.error('There was an error and no datasets were deleted.');
- } else if (this.options.chain_call_control.failed_number < this.options.chain_call_control.total_number){
- mod_toastr.warning('Some of the datasets could not be deleted');
- }
- Galaxy.modal.hide();
- return this.deleted_lddas;
- }
- var promise = $.when(popped_item.destroy());
-
- promise.done(function(dataset){
- // we are fine
- Galaxy.libraries.folderListView.collection.remove(popped_item.id);
- self.updateProgress();
- // add the deleted dataset to collection, triggers rendering
- if (Galaxy.libraries.folderListView.options.include_deleted){
- var updated_dataset = new mod_library_model.Item(dataset);
- Galaxy.libraries.folderListView.collection.add(updated_dataset);
- }
- // execute next request
- self.chainCallDeletingHdas(lddas_set);
- })
- .fail(function(){
- // we have a problem
- self.options.chain_call_control.failed_number += 1;
- self.updateProgress();
- // execute next request
- self.chainCallDeletingHdas(lddas_set);
- });
- },
showLibInfo: function(){
var library_id = Galaxy.libraries.folderListView.folderContainer.attributes.metadata.parent_library_id;
@@ -988,7 +981,7 @@
var tmpl_array = [];
tmpl_array.push('<div class="import_text">');
- tmpl_array.push('Adding selected datasets from history to library folder <b><%= _.escape(folder_name) %></b>');
+ tmpl_array.push('Adding selected datasets to library folder <b><%= _.escape(folder_name) %></b>');
tmpl_array.push('</div>');
tmpl_array.push('<div class="progress">');
tmpl_array.push(' <div class="progress-bar progress-bar-import" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 00%;">');
diff -r aec146e3828b16812ca24c5f8651ba3d0d483a6a -r f163dd7c2ccdd908b4f1f4e30defbbd20ee0da58 static/scripts/packed/libs/jquery/jstree.js
--- a/static/scripts/packed/libs/jquery/jstree.js
+++ b/static/scripts/packed/libs/jquery/jstree.js
@@ -1,4 +1,4 @@
-(function(a){if(typeof define==="function"&&define.amd){}else{if(typeof exports==="object"){a(require("jquery"))}else{a(jQuery)}}}(function(i,e){
+(function(a){if(typeof define==="function"&&define.amd){define(["jquery"],a)}else{if(typeof exports==="object"){a(require("jquery"))}else{a(jQuery)}}}(function(i,e){
/*
* jsTree 3.0.3
* http://jstree.com/
diff -r aec146e3828b16812ca24c5f8651ba3d0d483a6a -r f163dd7c2ccdd908b4f1f4e30defbbd20ee0da58 static/scripts/packed/mvc/library/library-foldertoolbar-view.js
--- a/static/scripts/packed/mvc/library/library-foldertoolbar-view.js
+++ b/static/scripts/packed/mvc/library/library-foldertoolbar-view.js
@@ -1,1 +1,1 @@
-define(["galaxy.masthead","utils/utils","libs/toastr","libs/jquery/jstree","mvc/library/library-model"],function(c,e,f,b,d){var a=Backbone.View.extend({el:"#center",events:{"click #toolbtn_create_folder":"createFolderFromModal","click #toolbtn_bulk_import":"modalBulkImport","click #include_deleted_datasets_chk":"checkIncludeDeleted","click #toolbtn_show_libinfo":"showLibInfo","click #toolbtn_bulk_delete":"deleteSelectedDatasets"},defaults:{can_add_library_item:false,contains_file:false,chain_call_control:{total_number:0,failed_number:0},disabled_jstree_element:"folders"},modal:null,jstree:null,histories:null,initialize:function(g){this.options=_.defaults(g||{},this.defaults);this.render()},render:function(g){this.options=_.extend(this.options,g);var i=this.templateToolBar();var h={id:this.options.id,is_admin:false,is_anonym:true,user_library_import_dir:Galaxy.config.user_library_import_dir,allow_library_path_paste:Galaxy.config.allow_library_path_paste,library_import_dir:Galaxy.config.library_import_dir,mutiple_add_dataset_options:false};if(Galaxy.currUser){h.is_admin=Galaxy.currUser.isAdmin();h.is_anonym=Galaxy.currUser.isAnonymous();if(h.user_library_import_dir!==null||h.allow_library_path_paste!==false||h.library_import_dir!==null){h.mutiple_add_dataset_options=true}}this.$el.html(i(h))},configureElements:function(g){this.options=_.extend(this.options,g);if(this.options.can_add_library_item===true){$(".add-library-items").show()}else{$(".add-library-items").hide()}if(this.options.contains_file===true){if(Galaxy.currUser){if(!Galaxy.currUser.isAnonymous()){$(".logged-dataset-manipulation").show();$(".dataset-manipulation").show()}else{$(".dataset-manipulation").show();$(".logged-dataset-manipulation").hide()}}else{$(".logged-dataset-manipulation").hide();$(".dataset-manipulation").hide()}}else{$(".logged-dataset-manipulation").hide();$(".dataset-manipulation").hide()}this.$el.find("[data-toggle]").tooltip()},createFolderFromModal:function(i){i.preventDefault();i.stopPropagation();var g=this;var h=this.templateNewFolderInModal();this.modal=Galaxy.modal;this.modal.show({closing_events:true,title:"Create New Folder",body:h(),buttons:{Create:function(){g.create_new_folder_event()},Close:function(){Galaxy.modal.hide()}}})},create_new_folder_event:function(){var g=this.serialize_new_folder();if(this.validate_new_folder(g)){var h=new d.FolderAsModel();url_items=Backbone.history.fragment.split("/");current_folder_id=url_items[url_items.length-1];h.url=h.urlRoot+"/"+current_folder_id;h.save(g,{success:function(i){Galaxy.modal.hide();f.success("Folder created");i.set({type:"folder"});Galaxy.libraries.folderListView.collection.add(i)},error:function(j,i){Galaxy.modal.hide();if(typeof i.responseJSON!=="undefined"){f.error(i.responseJSON.err_msg)}else{f.error("An error ocurred :(")}}})}else{f.error("Folder's name is missing")}return false},serialize_new_folder:function(){return{name:$("input[name='Name']").val(),description:$("input[name='Description']").val()}},validate_new_folder:function(g){return g.name!==""},modalBulkImport:function(){var g=$("#folder_table").find(":checked");if(g.length===0){f.info("You have to select some datasets first")}else{this.refreshUserHistoriesList(function(i){var h=i.templateBulkImportInModal();i.modal=Galaxy.modal;i.modal.show({closing_events:true,title:"Import into History",body:h({histories:i.histories.models}),buttons:{Import:function(){i.importAllIntoHistory()},Close:function(){Galaxy.modal.hide()}}})})}},refreshUserHistoriesList:function(h){var g=this;this.histories=new d.GalaxyHistories();this.histories.fetch({success:function(){h(g)},error:function(j,i){if(typeof i.responseJSON!=="undefined"){f.error(i.responseJSON.err_msg)}else{f.error("An error ocurred :(")}}})},importAllIntoHistory:function(){this.modal.disableButton("Import");this.options.chain_call_control.total_number=0;this.options.chain_call_control.failed_number=0;var k=$("select[name=dataset_import_bulk] option:selected").val();this.options.last_used_history_id=k;var n=$("select[name=dataset_import_bulk] option:selected").text();var p=[];$("#folder_table").find(":checked").each(function(){if(this.parentElement.parentElement.id!==""){p.push(this.parentElement.parentElement.id)}});var o=this.templateImportIntoHistoryProgressBar();this.modal.$el.find(".modal-body").html(o({history_name:n}));var l=100/p.length;this.initProgress(l);var g=[];for(var h=p.length-1;h>=0;h--){var j=p[h];var m=new d.HistoryItem();m.url=m.urlRoot+k+"/contents";m.content=j;m.source="library";g.push(m)}this.options.chain_call_control.total_number=g.length;jQuery.getJSON(galaxy_config.root+"history/set_as_current?id="+k);this.chainCall(g,n)},chainCall:function(h,k){var g=this;var i=h.pop();if(typeof i==="undefined"){if(this.options.chain_call_control.failed_number===0){f.success("Selected datasets imported into history. Click this to start analysing it.","",{onclick:function(){window.location="/"}})}else{if(this.options.chain_call_control.failed_number===this.options.chain_call_control.total_number){f.error("There was an error and no datasets were imported into history.")}else{if(this.options.chain_call_control.failed_number<this.options.chain_call_control.total_number){f.warning("Some of the datasets could not be imported into history. Click this to see what was imported.","",{onclick:function(){window.location="/"}})}}}Galaxy.modal.hide();return}var j=$.when(i.save({content:i.content,source:i.source}));j.done(function(){g.updateProgress();g.chainCall(h,k)}).fail(function(){g.options.chain_call_control.failed_number+=1;g.updateProgress();g.chainCall(h,k)})},initProgress:function(g){this.progress=0;this.progressStep=g},updateProgress:function(){this.progress+=this.progressStep;$(".progress-bar-import").width(Math.round(this.progress)+"%");txt_representation=Math.round(this.progress)+"% Complete";$(".completion_span").text(txt_representation)},download:function(g,k){var i=[];$("#folder_table").find(":checked").each(function(){if(this.parentElement.parentElement.id!==""){i.push(this.parentElement.parentElement.id)}});var h="/api/libraries/datasets/download/"+k;var j={ldda_ids:i};this.processDownload(h,j,"get")},processDownload:function(h,i,j){if(h&&i){i=typeof i==="string"?i:$.param(i);var g="";$.each(i.split("&"),function(){var k=this.split("=");g+='<input type="hidden" name="'+k[0]+'" value="'+k[1]+'" />'});$('<form action="'+h+'" method="'+(j||"post")+'">'+g+"</form>").appendTo("body").submit().remove();f.info("Your download will begin soon")}else{f.error("An error occurred :(")}},addFilesFromHistoryModal:function(){this.refreshUserHistoriesList(function(g){g.modal=Galaxy.modal;var h=g.templateAddFilesFromHistory();var i=g.options.full_path[g.options.full_path.length-1][1];g.modal.show({closing_events:true,title:"Adding datasets from your history to folder "+i,body:h({histories:g.histories.models}),buttons:{Add:function(){g.addAllDatasetsFromHistory()},Close:function(){Galaxy.modal.hide()}},closing_callback:function(){Galaxy.libraries.library_router.back()}});if(g.histories.models.length>0){g.fetchAndDisplayHistoryContents(g.histories.models[0].id);$("#dataset_add_bulk").change(function(j){g.fetchAndDisplayHistoryContents(j.target.value)})}else{f.error("An error ocurred :(")}})},importFilesFromPathModal:function(){var h=this;this.modal=Galaxy.modal;var g=this.templateImportPathModal();this.modal.show({closing_events:true,title:"Enter paths relative to Galaxy root",body:g({}),buttons:{Import:function(){h.importFromPathsClicked(h)},Close:function(){Galaxy.modal.hide()}},closing_callback:function(){Galaxy.libraries.library_router.navigate("folders/"+h.id,{trigger:true})}})},importFilesFromUserdirModal:function(){var h=this;this.modal=Galaxy.modal;var g=this.templateBrowserModal();this.modal.show({closing_events:true,title:"Select folders or files to import",body:g({}),buttons:{Import:function(){h.importFromUserdirClicked(h)},Close:function(){Galaxy.modal.hide()}},closing_callback:function(){Galaxy.libraries.library_router.navigate("folders/"+h.id,{trigger:true})}});this.renderJstree({disabled_jstree_element:"folders"});$("input[type=radio]").change(function(i){if(i.target.value==="jstree-disable-folders"){h.renderJstree({disabled_jstree_element:"folders"});$(".jstree-folders-message").hide();$(".jstree-preserve-structure").hide();$(".jstree-link-files").hide();$(".jstree-files-message").show()}else{if(i.target.value==="jstree-disable-files"){$(".jstree-files-message").hide();$(".jstree-folders-message").show();$(".jstree-link-files").show();$(".jstree-preserve-structure").show();h.renderJstree({disabled_jstree_element:"files"})}}})},renderJstree:function(g){var i=this;this.options=_.extend(this.options,g);var h=this.options.disabled_jstree_element;this.jstree=new d.Jstree();this.jstree.url=this.jstree.urlRoot+"?target=userdir&format=jstree&disable="+h;this.jstree.fetch({success:function(k,j){$("#jstree_browser").jstree("destroy");var l=$("#jstree_browser").jstree({core:{data:k},plugins:["types","checkbox"],types:{folder:{icon:"jstree-folder"},file:{icon:"jstree-file"}},checkbox:{three_state:false}})},error:function(k,j){if(typeof j.responseJSON!=="undefined"){f.error(j.responseJSON.err_msg)}else{f.error("An error ocurred :(")}}})},importFromPathsClicked:function(){var g=this.modal.$el.find(".preserve-checkbox").is(":checked");var l=this.modal.$el.find(".link-checkbox").is(":checked");var k=$("textarea#import_paths").val();if(!k){f.info("Please enter a path relative to Galaxy root")}else{this.modal.disableButton("Import");k=k.split("\n");var j=[];for(var h=k.length-1;h>=0;h--){trimmed=k[h].trim();if(trimmed.length!==0){j.push(trimmed)}}this.initChainCallControl(j.length);this.chainCallImportingFolders(j,g,l,"admin_path")}},initChainCallControl:function(g){var h=this.templateAddingDatasetsProgressBar();this.modal.$el.find(".modal-body").html(h({folder_name:this.options.folder_name}));this.progress=0;this.progressStep=100/g;this.options.chain_call_control.total_number=g;this.options.chain_call_control.failed_number=0},importFromUserdirClicked:function(l){var h=$("#jstree_browser").jstree().get_selected(true);var g=this.modal.$el.find(".preserve-checkbox").is(":checked");var o=this.modal.$el.find(".link-checkbox").is(":checked");var n=[];if(h.length<1){f.info("You have to select some items first")}else{this.modal.disableButton("Import");this.options.chain_call_control.total_number=0;this.options.chain_call_control.failed_number=0;for(var j=h.length-1;j>=0;j--){if(h[j].li_attr.full_path!==undefined){n.push(h[j].li_attr.full_path)}}var m=this.templateAddingDatasetsProgressBar();this.modal.$el.find(".modal-body").html(m({folder_name:this.options.folder_name}));this.progressStep=100/n.length;this.progress=0;this.options.chain_call_control.total_number=n.length;var k=h[0].type;if(k==="folder"){this.chainCallImportingFolders(n,g,o,"userdir_folder")}else{if(k==="file"){this.chainCallImportingUserdirFiles(n)}}}},chainCallImportingUserdirFiles:function(j){var g=this;var h=j.pop();if(typeof h==="undefined"){if(this.options.chain_call_control.failed_number===0){f.success("Selected files imported into the current folder");Galaxy.modal.hide()}else{f.error("Something went wrong :(")}return true}var i=$.when($.post("/api/libraries/datasets?encoded_folder_id="+g.id+"&source=userdir_file&path="+h));i.done(function(k){g.updateProgress();g.chainCallImportingUserdirFiles(j)}).fail(function(){g.options.chain_call_control.failed_number+=1;g.updateProgress();g.chainCallImportingUserdirFiles(j)})},chainCallImportingFolders:function(l,g,m,j){var h=this;var i=l.pop();if(typeof i=="undefined"){if(this.options.chain_call_control.failed_number===0){f.success("Selected folders and their contents imported into the current folder");Galaxy.modal.hide()}else{f.error("Something went wrong :(")}return true}var k=$.when($.post("/api/libraries/datasets?encoded_folder_id="+h.id+"&source="+j+"&path="+i+"&preserve_dirs="+g+"&link_data="+m));k.done(function(n){h.updateProgress();h.chainCallImportingFolders(l,g,m,j)}).fail(function(){h.options.chain_call_control.failed_number+=1;h.updateProgress();h.chainCallImportingFolders(l,g,m,j)})},fetchAndDisplayHistoryContents:function(i){var h=new d.HistoryContents({id:i});var g=this;h.fetch({success:function(k){var j=g.templateHistoryContents();g.histories.get(i).set({contents:k});g.modal.$el.find("#selected_history_content").html(j({history_contents:k.models.reverse()}))},error:function(k,j){if(typeof j.responseJSON!=="undefined"){f.error(j.responseJSON.err_msg)}else{f.error("An error ocurred :(")}}})},addAllDatasetsFromHistory:function(){var l=this.modal.$el.find("#selected_history_content").find(":checked");if(l.length<1){f.info("You have to select some datasets first")}else{this.modal.disableButton("Add");this.options.chain_call_control.total_number=0;this.options.chain_call_control.failed_number=0;var g=[];l.each(function(){var i=$(this.parentElement).data("id");if(i){g.push(i)}});var m=this.templateAddingDatasetsProgressBar();this.modal.$el.find(".modal-body").html(m({folder_name:this.options.folder_name}));this.progressStep=100/g.length;this.progress=0;var k=[];for(var j=g.length-1;j>=0;j--){history_dataset_id=g[j];var h=new d.Item();h.url="/api/folders/"+this.options.id+"/contents";h.set({from_hda_id:history_dataset_id});k.push(h)}this.options.chain_call_control.total_number=k.length;this.chainCallAddingHdas(k)}},chainCallAddingHdas:function(h){var g=this;this.added_hdas=new d.Folder();var i=h.pop();if(typeof i==="undefined"){if(this.options.chain_call_control.failed_number===0){f.success("Selected datasets from history added to the folder")}else{if(this.options.chain_call_control.failed_number===this.options.chain_call_control.total_number){f.error("There was an error and no datasets were added to the folder.")}else{if(this.options.chain_call_control.failed_number<this.options.chain_call_control.total_number){f.warning("Some of the datasets could not be added to the folder")}}}Galaxy.modal.hide();return this.added_hdas}var j=$.when(i.save({from_hda_id:i.get("from_hda_id")}));j.done(function(k){Galaxy.libraries.folderListView.collection.add(k);g.updateProgress();g.chainCallAddingHdas(h)}).fail(function(){g.options.chain_call_control.failed_number+=1;g.updateProgress();g.chainCallAddingHdas(h)})},checkIncludeDeleted:function(g){if(g.target.checked){Galaxy.libraries.folderListView.fetchFolder({include_deleted:true})}else{Galaxy.libraries.folderListView.fetchFolder({include_deleted:false})}},deleteSelectedDatasets:function(){var g=$("#folder_table").find(":checked");if(g.length===0){f.info("You have to select some datasets first")}else{var k=this.templateDeletingDatasetsProgressBar();this.modal=Galaxy.modal;this.modal.show({closing_events:true,title:"Deleting selected datasets",body:k({}),buttons:{Close:function(){Galaxy.modal.hide()}}});this.options.chain_call_control.total_number=0;this.options.chain_call_control.failed_number=0;var h=[];g.each(function(){if(this.parentElement.parentElement.id!==""){h.push(this.parentElement.parentElement.id)}});this.progressStep=100/h.length;this.progress=0;var m=[];for(var j=h.length-1;j>=0;j--){var l=new d.Item({id:h[j]});m.push(l)}this.options.chain_call_control.total_number=h.length;this.chainCallDeletingHdas(m)}},chainCallDeletingHdas:function(h){var g=this;this.deleted_lddas=new d.Folder();var i=h.pop();if(typeof i==="undefined"){if(this.options.chain_call_control.failed_number===0){f.success("Selected datasets deleted")}else{if(this.options.chain_call_control.failed_number===this.options.chain_call_control.total_number){f.error("There was an error and no datasets were deleted.")}else{if(this.options.chain_call_control.failed_number<this.options.chain_call_control.total_number){f.warning("Some of the datasets could not be deleted")}}}Galaxy.modal.hide();return this.deleted_lddas}var j=$.when(i.destroy());j.done(function(l){Galaxy.libraries.folderListView.collection.remove(i.id);g.updateProgress();if(Galaxy.libraries.folderListView.options.include_deleted){var k=new d.Item(l);Galaxy.libraries.folderListView.collection.add(k)}g.chainCallDeletingHdas(h)}).fail(function(){g.options.chain_call_control.failed_number+=1;g.updateProgress();g.chainCallDeletingHdas(h)})},showLibInfo:function(){var h=Galaxy.libraries.folderListView.folderContainer.attributes.metadata.parent_library_id;var g=null;var i=this;if(Galaxy.libraries.libraryListView!==null){g=Galaxy.libraries.libraryListView.collection.get(h);this.showLibInfoModal(g)}else{g=new d.Library({id:h});g.fetch({success:function(){i.showLibInfoModal(g)},error:function(k,j){if(typeof j.responseJSON!=="undefined"){f.error(j.responseJSON.err_msg)}else{f.error("An error ocurred :(")}}})}},showLibInfoModal:function(g){var h=this.templateLibInfoInModal();this.modal=Galaxy.modal;this.modal.show({closing_events:true,title:"Library Information",body:h({library:g}),buttons:{Close:function(){Galaxy.modal.hide()}}})},showImportModal:function(g){switch(g.source){case"history":this.addFilesFromHistoryModal();break;case"importdir":break;case"path":this.importFilesFromPathModal();break;case"userdir":this.importFilesFromUserdirModal();break;default:Galaxy.libraries.library_router.back();f.error("Invalid import source.");break}},templateToolBar:function(){tmpl_array=[];tmpl_array.push('<div class="library_style_container">');tmpl_array.push(' <div id="library_toolbar">');tmpl_array.push(" <span><strong>DATA LIBRARIES</strong></span>");tmpl_array.push(' <span data-toggle="tooltip" data-placement="top" class="logged-dataset-manipulation" title="Include deleted datasets" style="display:none;"> | <input id="include_deleted_datasets_chk" style="margin: 0;" type="checkbox"> include deleted | </input></span>');tmpl_array.push(' <button style="display:none;" data-toggle="tooltip" data-placement="top" title="Create New Folder" id="toolbtn_create_folder" class="btn btn-default primary-button add-library-items" type="button"><span class="fa fa-plus"></span><span class="fa fa-folder"></span></button>');tmpl_array.push("<% if(mutiple_add_dataset_options) { %>");tmpl_array.push(' <div class="btn-group add-library-items" style="display:none;">');tmpl_array.push(' <button title="Add Datasets to Current Folder" id="" type="button" class="primary-button dropdown-toggle" data-toggle="dropdown">');tmpl_array.push(' <span class="fa fa-plus"></span><span class="fa fa-file"></span><span class="caret"></span>');tmpl_array.push(" </button>");tmpl_array.push(' <ul class="dropdown-menu" role="menu">');tmpl_array.push(' <li><a href="#folders/<%= id %>/import/history"> from History</a></li>');tmpl_array.push("<% if(user_library_import_dir !== null) { %>");tmpl_array.push(' <li><a href="#folders/<%= id %>/import/userdir"> from User Directory</a></li>');tmpl_array.push("<% } %>");tmpl_array.push("<% if(allow_library_path_paste) { %>");tmpl_array.push(' <li class="divider"></li>');tmpl_array.push(' <li class="dropdown-header">Admins only</li>');tmpl_array.push("<% if(allow_library_path_paste) { %>");tmpl_array.push(' <li><a href="#folders/<%= id %>/import/path">from Path</a></li>');tmpl_array.push("<% } %>");tmpl_array.push("<% } %>");tmpl_array.push(" </ul>");tmpl_array.push(" </div>");tmpl_array.push("<% } else { %>");tmpl_array.push(' <button style="display:none;" data-toggle="tooltip" data-placement="top" title="Add Datasets to Current Folder" id="toolbtn_add_files" class="btn btn-default toolbtn_add_files primary-button add-library-items" type="button"><span class="fa fa-plus"></span><span class="fa fa-file"></span></span></button>');tmpl_array.push("<% } %>");tmpl_array.push(' <button data-toggle="tooltip" data-placement="top" title="Import selected datasets into history" id="toolbtn_bulk_import" class="primary-button dataset-manipulation" style="margin-left: 0.5em; display:none;" type="button"><span class="fa fa-book"></span> to History</button>');tmpl_array.push(' <div id="toolbtn_dl" class="btn-group dataset-manipulation" style="margin-left: 0.5em; display:none; ">');tmpl_array.push(' <button title="Download selected datasets as archive" id="drop_toggle" type="button" class="primary-button dropdown-toggle" data-toggle="dropdown">');tmpl_array.push(' <span class="fa fa-download"></span> Download <span class="caret"></span>');tmpl_array.push(" </button>");tmpl_array.push(' <ul class="dropdown-menu" role="menu">');tmpl_array.push(' <li><a href="#/folders/<%= id %>/download/tgz">.tar.gz</a></li>');tmpl_array.push(' <li><a href="#/folders/<%= id %>/download/tbz">.tar.bz</a></li>');tmpl_array.push(' <li><a href="#/folders/<%= id %>/download/zip">.zip</a></li>');tmpl_array.push(" </ul>");tmpl_array.push(" </div>");tmpl_array.push(' <button data-toggle="tooltip" data-placement="top" title="Mark selected datasets deleted" id="toolbtn_bulk_delete" class="primary-button logged-dataset-manipulation" style="margin-left: 0.5em; display:none; " type="button"><span class="fa fa-times"></span> Delete</button>');tmpl_array.push(' <button data-id="<%- id %>" data-toggle="tooltip" data-placement="top" title="Show library information" id="toolbtn_show_libinfo" class="primary-button" style="margin-left: 0.5em;" type="button"><span class="fa fa-info-circle"></span> Library Info</button>');tmpl_array.push(' <span class="help-button" data-toggle="tooltip" data-placement="top" title="Visit Libraries Wiki"><a href="https://wiki.galaxyproject.org/DataLibraries/screen/FolderContents" target="_blank"><button class="primary-button btn-xs" type="button"><span class="fa fa-question-circle"></span> Help</button></a></span>');tmpl_array.push(" </div>");tmpl_array.push(' <div id="folder_items_element">');tmpl_array.push(" </div>");tmpl_array.push("</div>");return _.template(tmpl_array.join(""))},templateLibInfoInModal:function(){tmpl_array=[];tmpl_array.push('<div id="lif_info_modal">');tmpl_array.push("<h2>Library name:</h2>");tmpl_array.push('<p><%- library.get("name") %></p>');tmpl_array.push("<h3>Library description:</h3>");tmpl_array.push('<p><%- library.get("description") %></p>');tmpl_array.push("<h3>Library synopsis:</h3>");tmpl_array.push('<p><%- library.get("synopsis") %></p>');tmpl_array.push("</div>");return _.template(tmpl_array.join(""))},templateNewFolderInModal:function(){tmpl_array=[];tmpl_array.push('<div id="new_folder_modal">');tmpl_array.push("<form>");tmpl_array.push('<input type="text" name="Name" value="" placeholder="Name">');tmpl_array.push('<input type="text" name="Description" value="" placeholder="Description">');tmpl_array.push("</form>");tmpl_array.push("</div>");return _.template(tmpl_array.join(""))},templateBulkImportInModal:function(){var g=[];g.push('<span id="history_modal_combo_bulk" style="width:90%; margin-left: 1em; margin-right: 1em; ">');g.push("Select history: ");g.push('<select id="dataset_import_bulk" name="dataset_import_bulk" style="width:50%; margin-bottom: 1em; "> ');g.push(" <% _.each(histories, function(history) { %>");g.push(' <option value="<%= _.escape(history.get("id")) %>"><%= _.escape(history.get("name")) %></option>');g.push(" <% }); %>");g.push("</select>");g.push("</span>");return _.template(g.join(""))},templateImportIntoHistoryProgressBar:function(){var g=[];g.push('<div class="import_text">');g.push("Importing selected datasets to history <b><%= _.escape(history_name) %></b>");g.push("</div>");g.push('<div class="progress">');g.push(' <div class="progress-bar progress-bar-import" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 00%;">');g.push(' <span class="completion_span">0% Complete</span>');g.push(" </div>");g.push("</div>");g.push("");return _.template(g.join(""))},templateAddingDatasetsProgressBar:function(){var g=[];g.push('<div class="import_text">');g.push("Adding selected datasets from history to library folder <b><%= _.escape(folder_name) %></b>");g.push("</div>");g.push('<div class="progress">');g.push(' <div class="progress-bar progress-bar-import" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 00%;">');g.push(' <span class="completion_span">0% Complete</span>');g.push(" </div>");g.push("</div>");g.push("");return _.template(g.join(""))},templateDeletingDatasetsProgressBar:function(){var g=[];g.push('<div class="import_text">');g.push("</div>");g.push('<div class="progress">');g.push(' <div class="progress-bar progress-bar-import" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 00%;">');g.push(' <span class="completion_span">0% Complete</span>');g.push(" </div>");g.push("</div>");g.push("");return _.template(g.join(""))},templateBrowserModal:function(){var g=[];g.push('<div id="file_browser_modal">');g.push('<div style="margin-bottom:1em;">');g.push('<label class="radio-inline">');g.push(' <input title="Switch to selecting files" type="radio" name="jstree-radio" value="jstree-disable-folders" checked="checked"> Files');g.push("</label>");g.push('<label class="radio-inline">');g.push(' <input title="Switch to selecting folders" type="radio" name="jstree-radio" value="jstree-disable-files"> Folders');g.push("</label>");g.push('<label class="checkbox-inline jstree-preserve-structure" style="display:none;">');g.push(' <input class="preserve-checkbox" type="checkbox" value="preserve_directory_structure">');g.push("Preserve directory structure");g.push(" </label>");g.push('<label class="checkbox-inline jstree-link-files" style="display:none;">');g.push(' <input class="link-checkbox" type="checkbox" value="link_files">');g.push("Link files instead of copying");g.push(" </label>");g.push("</div>");g.push('<div class="alert alert-info jstree-files-message">All files you select will be imported into the current folder.</div>');g.push('<div class="alert alert-info jstree-folders-message" style="display:none;">All files within the selected folders and their subfolders will be imported into the current folder.</div>');g.push('<div id="jstree_browser">');g.push("</div>");g.push("</div>");return _.template(g.join(""))},templateImportPathModal:function(){var g=[];g.push('<div id="file_browser_modal">');g.push('<label class="checkbox-inline jstree-preserve-structure">');g.push(' <input class="preserve-checkbox" type="checkbox" value="preserve_directory_structure">');g.push("Preserve directory structure");g.push(" </label>");g.push('<label class="checkbox-inline jstree-link-files">');g.push(' <input class="link-checkbox" type="checkbox" value="link_files">');g.push("Link files instead of copying");g.push(" </label>");g.push("</div>");g.push('<div class="alert alert-info jstree-folders-message">All files within the given folders and their subfolders will be imported into the current folder.</div>');g.push('<textarea id="import_paths" class="form-control" rows="5" placeholder="Paths separated by newline"></textarea>');g.push("</div>");return _.template(g.join(""))},templateAddFilesFromHistory:function(){var g=[];g.push('<div id="add_files_modal">');g.push('<div id="history_modal_combo_bulk">');g.push("Select history: ");g.push('<select id="dataset_add_bulk" name="dataset_add_bulk" style="width:66%; "> ');g.push(" <% _.each(histories, function(history) { %>");g.push(' <option value="<%= _.escape(history.get("id")) %>"><%= _.escape(history.get("name")) %></option>');g.push(" <% }); %>");g.push("</select>");g.push("</div>");g.push("<br/>");g.push('<div id="selected_history_content">');g.push("</div>");g.push("</div>");return _.template(g.join(""))},templateHistoryContents:function(){var g=[];g.push("<strong>Choose the datasets to import:</strong>");g.push("<ul>");g.push(" <% _.each(history_contents, function(history_item) { %>");g.push(' <li data-id="<%= _.escape(history_item.get("id")) %>">');g.push(' <input style="margin: 0;" type="checkbox"><%= _.escape(history_item.get("hid")) %>: <%= _.escape(history_item.get("name")) %>');g.push(" </li>");g.push(" <% }); %>");g.push("</ul>");return _.template(g.join(""))}});return{FolderToolbarView:a}});
\ No newline at end of file
+define(["galaxy.masthead","utils/utils","libs/toastr","mvc/library/library-model"],function(b,d,e,c){var a=Backbone.View.extend({el:"#center",events:{"click #toolbtn_create_folder":"createFolderFromModal","click #toolbtn_bulk_import":"modalBulkImport","click #include_deleted_datasets_chk":"checkIncludeDeleted","click #toolbtn_show_libinfo":"showLibInfo","click #toolbtn_bulk_delete":"deleteSelectedDatasets"},defaults:{can_add_library_item:false,contains_file:false,chain_call_control:{total_number:0,failed_number:0},disabled_jstree_element:"folders"},modal:null,jstree:null,histories:null,initialize:function(f){this.options=_.defaults(f||{},this.defaults);this.render()},render:function(f){this.options=_.extend(this.options,f);var h=this.templateToolBar();var g={id:this.options.id,is_admin:false,is_anonym:true,user_library_import_dir:Galaxy.config.user_library_import_dir,allow_library_path_paste:Galaxy.config.allow_library_path_paste,library_import_dir:Galaxy.config.library_import_dir,mutiple_add_dataset_options:false};if(Galaxy.currUser){g.is_admin=Galaxy.currUser.isAdmin();g.is_anonym=Galaxy.currUser.isAnonymous();if(g.user_library_import_dir!==null||g.allow_library_path_paste!==false||g.library_import_dir!==null){g.mutiple_add_dataset_options=true}}this.$el.html(h(g))},configureElements:function(f){this.options=_.extend(this.options,f);if(this.options.can_add_library_item===true){$(".add-library-items").show()}else{$(".add-library-items").hide()}if(this.options.contains_file===true){if(Galaxy.currUser){if(!Galaxy.currUser.isAnonymous()){$(".logged-dataset-manipulation").show();$(".dataset-manipulation").show()}else{$(".dataset-manipulation").show();$(".logged-dataset-manipulation").hide()}}else{$(".logged-dataset-manipulation").hide();$(".dataset-manipulation").hide()}}else{$(".logged-dataset-manipulation").hide();$(".dataset-manipulation").hide()}this.$el.find("[data-toggle]").tooltip()},createFolderFromModal:function(h){h.preventDefault();h.stopPropagation();var f=this;var g=this.templateNewFolderInModal();this.modal=Galaxy.modal;this.modal.show({closing_events:true,title:"Create New Folder",body:g(),buttons:{Create:function(){f.create_new_folder_event()},Close:function(){Galaxy.modal.hide()}}})},create_new_folder_event:function(){var f=this.serialize_new_folder();if(this.validate_new_folder(f)){var g=new c.FolderAsModel();url_items=Backbone.history.fragment.split("/");current_folder_id=url_items[url_items.length-1];g.url=g.urlRoot+"/"+current_folder_id;g.save(f,{success:function(h){Galaxy.modal.hide();e.success("Folder created");h.set({type:"folder"});Galaxy.libraries.folderListView.collection.add(h)},error:function(i,h){Galaxy.modal.hide();if(typeof h.responseJSON!=="undefined"){e.error(h.responseJSON.err_msg)}else{e.error("An error ocurred :(")}}})}else{e.error("Folder's name is missing")}return false},serialize_new_folder:function(){return{name:$("input[name='Name']").val(),description:$("input[name='Description']").val()}},validate_new_folder:function(f){return f.name!==""},modalBulkImport:function(){var f=$("#folder_table").find(":checked");if(f.length===0){e.info("You have to select some datasets first")}else{this.refreshUserHistoriesList(function(h){var g=h.templateBulkImportInModal();h.modal=Galaxy.modal;h.modal.show({closing_events:true,title:"Import into History",body:g({histories:h.histories.models}),buttons:{Import:function(){h.importAllIntoHistory()},Close:function(){Galaxy.modal.hide()}}})})}},refreshUserHistoriesList:function(g){var f=this;this.histories=new c.GalaxyHistories();this.histories.fetch({success:function(){g(f)},error:function(i,h){if(typeof h.responseJSON!=="undefined"){e.error(h.responseJSON.err_msg)}else{e.error("An error ocurred :(")}}})},importAllIntoHistory:function(){this.modal.disableButton("Import");var j=$("select[name=dataset_import_bulk] option:selected").val();var m=$("select[name=dataset_import_bulk] option:selected").text();this.options.last_used_history_id=j;var g=[];$("#folder_table").find(":checked").each(function(){if(this.parentElement.parentElement.id!==""){g.push(this.parentElement.parentElement.id)}});var l=[];for(var h=g.length-1;h>=0;h--){var f=g[h];var k=new c.HistoryItem();k.url=k.urlRoot+j+"/contents";k.content=f;k.source="library";l.push(k)}this.initChainCallControl({length:l.length,action:"to_history",history_name:m});jQuery.getJSON(galaxy_config.root+"history/set_as_current?id="+j);this.chainCallImportingIntoHistory(l,m)},updateProgress:function(){this.progress+=this.progressStep;$(".progress-bar-import").width(Math.round(this.progress)+"%");txt_representation=Math.round(this.progress)+"% Complete";$(".completion_span").text(txt_representation)},download:function(f,j){var h=[];$("#folder_table").find(":checked").each(function(){if(this.parentElement.parentElement.id!==""){h.push(this.parentElement.parentElement.id)}});var g="/api/libraries/datasets/download/"+j;var i={ldda_ids:h};this.processDownload(g,i,"get")},processDownload:function(g,h,i){if(g&&h){h=typeof h==="string"?h:$.param(h);var f="";$.each(h.split("&"),function(){var j=this.split("=");f+='<input type="hidden" name="'+j[0]+'" value="'+j[1]+'" />'});$('<form action="'+g+'" method="'+(i||"post")+'">'+f+"</form>").appendTo("body").submit().remove();e.info("Your download will begin soon")}else{e.error("An error occurred :(")}},addFilesFromHistoryModal:function(){this.refreshUserHistoriesList(function(f){f.modal=Galaxy.modal;var g=f.templateAddFilesFromHistory();var h=f.options.full_path[f.options.full_path.length-1][1];f.modal.show({closing_events:true,title:"Adding datasets from your history to folder "+h,body:g({histories:f.histories.models}),buttons:{Add:function(){f.addAllDatasetsFromHistory()},Close:function(){Galaxy.modal.hide()}},closing_callback:function(){Galaxy.libraries.library_router.back()}});if(f.histories.models.length>0){f.fetchAndDisplayHistoryContents(f.histories.models[0].id);$("#dataset_add_bulk").change(function(i){f.fetchAndDisplayHistoryContents(i.target.value)})}else{e.error("An error ocurred :(")}})},importFilesFromPathModal:function(){var g=this;this.modal=Galaxy.modal;var f=this.templateImportPathModal();this.modal.show({closing_events:true,title:"Enter paths relative to Galaxy root",body:f({}),buttons:{Import:function(){g.importFromPathsClicked(g)},Close:function(){Galaxy.modal.hide()}},closing_callback:function(){Galaxy.libraries.library_router.navigate("folders/"+g.id,{trigger:true})}})},importFilesFromUserdirModal:function(){var g=this;this.modal=Galaxy.modal;var f=this.templateBrowserModal();this.modal.show({closing_events:true,title:"Select folders or files to import",body:f({}),buttons:{Import:function(){g.importFromUserdirClicked(g)},Close:function(){Galaxy.modal.hide()}},closing_callback:function(){Galaxy.libraries.library_router.navigate("folders/"+g.id,{trigger:true})}});this.renderJstree({disabled_jstree_element:"folders"});$("input[type=radio]").change(function(h){if(h.target.value==="jstree-disable-folders"){g.renderJstree({disabled_jstree_element:"folders"});$(".jstree-folders-message").hide();$(".jstree-preserve-structure").hide();$(".jstree-link-files").hide();$(".jstree-files-message").show()}else{if(h.target.value==="jstree-disable-files"){$(".jstree-files-message").hide();$(".jstree-folders-message").show();$(".jstree-link-files").show();$(".jstree-preserve-structure").show();g.renderJstree({disabled_jstree_element:"files"})}}})},renderJstree:function(f){var h=this;this.options=_.extend(this.options,f);var g=this.options.disabled_jstree_element;this.jstree=new c.Jstree();this.jstree.url=this.jstree.urlRoot+"?target=userdir&format=jstree&disable="+g;this.jstree.fetch({success:function(j,i){define("jquery",function(){return jQuery});require(["libs/jquery/jstree"],function(k){$("#jstree_browser").jstree("destroy");$("#jstree_browser").jstree({core:{data:j},plugins:["types","checkbox"],types:{folder:{icon:"jstree-folder"},file:{icon:"jstree-file"}},checkbox:{three_state:false}})})},error:function(j,i){if(typeof i.responseJSON!=="undefined"){e.error(i.responseJSON.err_msg)}else{e.error("An error ocurred :(")}}})},importFromPathsClicked:function(){var f=this.modal.$el.find(".preserve-checkbox").is(":checked");var k=this.modal.$el.find(".link-checkbox").is(":checked");var j=$("textarea#import_paths").val();var h=[];if(!j){e.info("Please enter a path relative to Galaxy root")}else{this.modal.disableButton("Import");j=j.split("\n");for(var g=j.length-1;g>=0;g--){trimmed=j[g].trim();if(trimmed.length!==0){h.push(trimmed)}}this.initChainCallControl({length:h.length,action:"adding_datasets"});this.chainCallImportingFolders(h,f,k,"admin_path")}},initChainCallControl:function(f){var g;switch(f.action){case"adding_datasets":g=this.templateAddingDatasetsProgressBar();this.modal.$el.find(".modal-body").html(g({folder_name:this.options.folder_name}));break;case"deleting_datasets":g=this.templateDeletingDatasetsProgressBar();this.modal.$el.find(".modal-body").html(g());break;case"to_history":g=this.templateImportIntoHistoryProgressBar();this.modal.$el.find(".modal-body").html(g({history_name:f.history_name}));break;default:console.error("Wrong action specified.");break}this.progress=0;this.progressStep=100/f.length;this.options.chain_call_control.total_number=f.length;this.options.chain_call_control.failed_number=0},importFromUserdirClicked:function(k){var g=$("#jstree_browser").jstree().get_selected(true);var f=this.modal.$el.find(".preserve-checkbox").is(":checked");var m=this.modal.$el.find(".link-checkbox").is(":checked");var j=g[0].type;var l=[];if(g.length<1){e.info("You have to select some items first")}else{this.modal.disableButton("Import");for(var h=g.length-1;h>=0;h--){if(g[h].li_attr.full_path!==undefined){l.push(g[h].li_attr.full_path)}}this.initChainCallControl({length:l.length,action:"adding_datasets"});if(j==="folder"){this.chainCallImportingFolders(l,f,m,"userdir_folder")}else{if(j==="file"){this.chainCallImportingUserdirFiles(l)}}}},fetchAndDisplayHistoryContents:function(h){var g=new c.HistoryContents({id:h});var f=this;g.fetch({success:function(j){var i=f.templateHistoryContents();f.histories.get(h).set({contents:j});f.modal.$el.find("#selected_history_content").html(i({history_contents:j.models.reverse()}))},error:function(j,i){if(typeof i.responseJSON!=="undefined"){e.error(i.responseJSON.err_msg)}else{e.error("An error ocurred :(")}}})},addAllDatasetsFromHistory:function(){var k=this.modal.$el.find("#selected_history_content").find(":checked");var f=[];var j=[];if(k.length<1){e.info("You have to select some datasets first")}else{this.modal.disableButton("Add");k.each(function(){var i=$(this.parentElement).data("id");if(i){f.push(i)}});for(var h=f.length-1;h>=0;h--){history_dataset_id=f[h];var g=new c.Item();g.url="/api/folders/"+this.options.id+"/contents";g.set({from_hda_id:history_dataset_id});j.push(g)}this.initChainCallControl({length:j.length,action:"adding_datasets"});this.chainCallAddingHdas(j)}},chainCallImportingIntoHistory:function(g,j){var f=this;var h=g.pop();if(typeof h=="undefined"){if(this.options.chain_call_control.failed_number===0){e.success("Selected datasets imported into history. Click this to start analysing it.","",{onclick:function(){window.location="/"}})}else{if(this.options.chain_call_control.failed_number===this.options.chain_call_control.total_number){e.error("There was an error and no datasets were imported into history.")}else{if(this.options.chain_call_control.failed_number<this.options.chain_call_control.total_number){e.warning("Some of the datasets could not be imported into history. Click this to see what was imported.","",{onclick:function(){window.location="/"}})}}}Galaxy.modal.hide();return true}var i=$.when(h.save({content:h.content,source:h.source}));i.done(function(){f.updateProgress();f.chainCallImportingIntoHistory(g,j)}).fail(function(){f.options.chain_call_control.failed_number+=1;f.updateProgress();f.chainCallImportingIntoHistory(g,j)})},chainCallImportingUserdirFiles:function(i){var f=this;var g=i.pop();if(typeof g==="undefined"){if(this.options.chain_call_control.failed_number===0){e.success("Selected files imported into the current folder");Galaxy.modal.hide()}else{e.error("Something went wrong :(")}return true}var h=$.when($.post("/api/libraries/datasets?encoded_folder_id="+f.id+"&source=userdir_file&path="+g));h.done(function(j){f.updateProgress();f.chainCallImportingUserdirFiles(i)}).fail(function(){f.options.chain_call_control.failed_number+=1;f.updateProgress();f.chainCallImportingUserdirFiles(i)})},chainCallImportingFolders:function(k,f,l,i){var g=this;var h=k.pop();if(typeof h=="undefined"){if(this.options.chain_call_control.failed_number===0){e.success("Selected folders and their contents imported into the current folder");Galaxy.modal.hide()}else{e.error("Something went wrong :(")}return true}var j=$.when($.post("/api/libraries/datasets?encoded_folder_id="+g.id+"&source="+i+"&path="+h+"&preserve_dirs="+f+"&link_data="+l));j.done(function(m){g.updateProgress();g.chainCallImportingFolders(k,f,l,i)}).fail(function(){g.options.chain_call_control.failed_number+=1;g.updateProgress();g.chainCallImportingFolders(k,f,l,i)})},chainCallAddingHdas:function(g){var f=this;this.added_hdas=new c.Folder();var h=g.pop();if(typeof h=="undefined"){if(this.options.chain_call_control.failed_number===0){e.success("Selected datasets from history added to the folder")}else{if(this.options.chain_call_control.failed_number===this.options.chain_call_control.total_number){e.error("There was an error and no datasets were added to the folder.")}else{if(this.options.chain_call_control.failed_number<this.options.chain_call_control.total_number){e.warning("Some of the datasets could not be added to the folder")}}}Galaxy.modal.hide();return this.added_hdas}var i=$.when(h.save({from_hda_id:h.get("from_hda_id")}));i.done(function(j){Galaxy.libraries.folderListView.collection.add(j);f.updateProgress();f.chainCallAddingHdas(g)}).fail(function(){f.options.chain_call_control.failed_number+=1;f.updateProgress();f.chainCallAddingHdas(g)})},chainCallDeletingHdas:function(g){var f=this;this.deleted_lddas=new c.Folder();var h=g.pop();if(typeof h==="undefined"){if(this.options.chain_call_control.failed_number===0){e.success("Selected datasets deleted")}else{if(this.options.chain_call_control.failed_number===this.options.chain_call_control.total_number){e.error("There was an error and no datasets were deleted.")}else{if(this.options.chain_call_control.failed_number<this.options.chain_call_control.total_number){e.warning("Some of the datasets could not be deleted")}}}Galaxy.modal.hide();return this.deleted_lddas}var i=$.when(h.destroy());i.done(function(k){Galaxy.libraries.folderListView.collection.remove(h.id);f.updateProgress();if(Galaxy.libraries.folderListView.options.include_deleted){var j=new c.Item(k);Galaxy.libraries.folderListView.collection.add(j)}f.chainCallDeletingHdas(g)}).fail(function(){f.options.chain_call_control.failed_number+=1;f.updateProgress();f.chainCallDeletingHdas(g)})},checkIncludeDeleted:function(f){if(f.target.checked){Galaxy.libraries.folderListView.fetchFolder({include_deleted:true})}else{Galaxy.libraries.folderListView.fetchFolder({include_deleted:false})}},deleteSelectedDatasets:function(){var f=$("#folder_table").find(":checked");if(f.length===0){e.info("You have to select some datasets first")}else{var j=this.templateDeletingDatasetsProgressBar();this.modal=Galaxy.modal;this.modal.show({closing_events:true,title:"Deleting selected datasets",body:j({}),buttons:{Close:function(){Galaxy.modal.hide()}}});this.options.chain_call_control.total_number=0;this.options.chain_call_control.failed_number=0;var g=[];f.each(function(){if(this.parentElement.parentElement.id!==""){g.push(this.parentElement.parentElement.id)}});this.progressStep=100/g.length;this.progress=0;var l=[];for(var h=g.length-1;h>=0;h--){var k=new c.Item({id:g[h]});l.push(k)}this.options.chain_call_control.total_number=g.length;this.chainCallDeletingHdas(l)}},showLibInfo:function(){var g=Galaxy.libraries.folderListView.folderContainer.attributes.metadata.parent_library_id;var f=null;var h=this;if(Galaxy.libraries.libraryListView!==null){f=Galaxy.libraries.libraryListView.collection.get(g);this.showLibInfoModal(f)}else{f=new c.Library({id:g});f.fetch({success:function(){h.showLibInfoModal(f)},error:function(j,i){if(typeof i.responseJSON!=="undefined"){e.error(i.responseJSON.err_msg)}else{e.error("An error ocurred :(")}}})}},showLibInfoModal:function(f){var g=this.templateLibInfoInModal();this.modal=Galaxy.modal;this.modal.show({closing_events:true,title:"Library Information",body:g({library:f}),buttons:{Close:function(){Galaxy.modal.hide()}}})},showImportModal:function(f){switch(f.source){case"history":this.addFilesFromHistoryModal();break;case"importdir":break;case"path":this.importFilesFromPathModal();break;case"userdir":this.importFilesFromUserdirModal();break;default:Galaxy.libraries.library_router.back();e.error("Invalid import source.");break}},templateToolBar:function(){tmpl_array=[];tmpl_array.push('<div class="library_style_container">');tmpl_array.push(' <div id="library_toolbar">');tmpl_array.push(" <span><strong>DATA LIBRARIES</strong></span>");tmpl_array.push(' <span data-toggle="tooltip" data-placement="top" class="logged-dataset-manipulation" title="Include deleted datasets" style="display:none;"> | <input id="include_deleted_datasets_chk" style="margin: 0;" type="checkbox"> include deleted | </input></span>');tmpl_array.push(' <button style="display:none;" data-toggle="tooltip" data-placement="top" title="Create New Folder" id="toolbtn_create_folder" class="btn btn-default primary-button add-library-items" type="button"><span class="fa fa-plus"></span><span class="fa fa-folder"></span></button>');tmpl_array.push("<% if(mutiple_add_dataset_options) { %>");tmpl_array.push(' <div class="btn-group add-library-items" style="display:none;">');tmpl_array.push(' <button title="Add Datasets to Current Folder" id="" type="button" class="primary-button dropdown-toggle" data-toggle="dropdown">');tmpl_array.push(' <span class="fa fa-plus"></span><span class="fa fa-file"></span><span class="caret"></span>');tmpl_array.push(" </button>");tmpl_array.push(' <ul class="dropdown-menu" role="menu">');tmpl_array.push(' <li><a href="#folders/<%= id %>/import/history"> from History</a></li>');tmpl_array.push("<% if(user_library_import_dir !== null) { %>");tmpl_array.push(' <li><a href="#folders/<%= id %>/import/userdir"> from User Directory</a></li>');tmpl_array.push("<% } %>");tmpl_array.push("<% if(allow_library_path_paste) { %>");tmpl_array.push(' <li class="divider"></li>');tmpl_array.push(' <li class="dropdown-header">Admins only</li>');tmpl_array.push("<% if(allow_library_path_paste) { %>");tmpl_array.push(' <li><a href="#folders/<%= id %>/import/path">from Path</a></li>');tmpl_array.push("<% } %>");tmpl_array.push("<% } %>");tmpl_array.push(" </ul>");tmpl_array.push(" </div>");tmpl_array.push("<% } else { %>");tmpl_array.push(' <button style="display:none;" data-toggle="tooltip" data-placement="top" title="Add Datasets to Current Folder" id="toolbtn_add_files" class="btn btn-default toolbtn_add_files primary-button add-library-items" type="button"><span class="fa fa-plus"></span><span class="fa fa-file"></span></span></button>');tmpl_array.push("<% } %>");tmpl_array.push(' <button data-toggle="tooltip" data-placement="top" title="Import selected datasets into history" id="toolbtn_bulk_import" class="primary-button dataset-manipulation" style="margin-left: 0.5em; display:none;" type="button"><span class="fa fa-book"></span> to History</button>');tmpl_array.push(' <div id="toolbtn_dl" class="btn-group dataset-manipulation" style="margin-left: 0.5em; display:none; ">');tmpl_array.push(' <button title="Download selected datasets as archive" id="drop_toggle" type="button" class="primary-button dropdown-toggle" data-toggle="dropdown">');tmpl_array.push(' <span class="fa fa-download"></span> Download <span class="caret"></span>');tmpl_array.push(" </button>");tmpl_array.push(' <ul class="dropdown-menu" role="menu">');tmpl_array.push(' <li><a href="#/folders/<%= id %>/download/tgz">.tar.gz</a></li>');tmpl_array.push(' <li><a href="#/folders/<%= id %>/download/tbz">.tar.bz</a></li>');tmpl_array.push(' <li><a href="#/folders/<%= id %>/download/zip">.zip</a></li>');tmpl_array.push(" </ul>");tmpl_array.push(" </div>");tmpl_array.push(' <button data-toggle="tooltip" data-placement="top" title="Mark selected datasets deleted" id="toolbtn_bulk_delete" class="primary-button logged-dataset-manipulation" style="margin-left: 0.5em; display:none; " type="button"><span class="fa fa-times"></span> Delete</button>');tmpl_array.push(' <button data-id="<%- id %>" data-toggle="tooltip" data-placement="top" title="Show library information" id="toolbtn_show_libinfo" class="primary-button" style="margin-left: 0.5em;" type="button"><span class="fa fa-info-circle"></span> Library Info</button>');tmpl_array.push(' <span class="help-button" data-toggle="tooltip" data-placement="top" title="Visit Libraries Wiki"><a href="https://wiki.galaxyproject.org/DataLibraries/screen/FolderContents" target="_blank"><button class="primary-button btn-xs" type="button"><span class="fa fa-question-circle"></span> Help</button></a></span>');tmpl_array.push(" </div>");tmpl_array.push(' <div id="folder_items_element">');tmpl_array.push(" </div>");tmpl_array.push("</div>");return _.template(tmpl_array.join(""))},templateLibInfoInModal:function(){tmpl_array=[];tmpl_array.push('<div id="lif_info_modal">');tmpl_array.push("<h2>Library name:</h2>");tmpl_array.push('<p><%- library.get("name") %></p>');tmpl_array.push("<h3>Library description:</h3>");tmpl_array.push('<p><%- library.get("description") %></p>');tmpl_array.push("<h3>Library synopsis:</h3>");tmpl_array.push('<p><%- library.get("synopsis") %></p>');tmpl_array.push("</div>");return _.template(tmpl_array.join(""))},templateNewFolderInModal:function(){tmpl_array=[];tmpl_array.push('<div id="new_folder_modal">');tmpl_array.push("<form>");tmpl_array.push('<input type="text" name="Name" value="" placeholder="Name">');tmpl_array.push('<input type="text" name="Description" value="" placeholder="Description">');tmpl_array.push("</form>");tmpl_array.push("</div>");return _.template(tmpl_array.join(""))},templateBulkImportInModal:function(){var f=[];f.push('<span id="history_modal_combo_bulk" style="width:90%; margin-left: 1em; margin-right: 1em; ">');f.push("Select history: ");f.push('<select id="dataset_import_bulk" name="dataset_import_bulk" style="width:50%; margin-bottom: 1em; "> ');f.push(" <% _.each(histories, function(history) { %>");f.push(' <option value="<%= _.escape(history.get("id")) %>"><%= _.escape(history.get("name")) %></option>');f.push(" <% }); %>");f.push("</select>");f.push("</span>");return _.template(f.join(""))},templateImportIntoHistoryProgressBar:function(){var f=[];f.push('<div class="import_text">');f.push("Importing selected datasets to history <b><%= _.escape(history_name) %></b>");f.push("</div>");f.push('<div class="progress">');f.push(' <div class="progress-bar progress-bar-import" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 00%;">');f.push(' <span class="completion_span">0% Complete</span>');f.push(" </div>");f.push("</div>");f.push("");return _.template(f.join(""))},templateAddingDatasetsProgressBar:function(){var f=[];f.push('<div class="import_text">');f.push("Adding selected datasets to library folder <b><%= _.escape(folder_name) %></b>");f.push("</div>");f.push('<div class="progress">');f.push(' <div class="progress-bar progress-bar-import" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 00%;">');f.push(' <span class="completion_span">0% Complete</span>');f.push(" </div>");f.push("</div>");f.push("");return _.template(f.join(""))},templateDeletingDatasetsProgressBar:function(){var f=[];f.push('<div class="import_text">');f.push("</div>");f.push('<div class="progress">');f.push(' <div class="progress-bar progress-bar-import" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 00%;">');f.push(' <span class="completion_span">0% Complete</span>');f.push(" </div>");f.push("</div>");f.push("");return _.template(f.join(""))},templateBrowserModal:function(){var f=[];f.push('<div id="file_browser_modal">');f.push('<div style="margin-bottom:1em;">');f.push('<label class="radio-inline">');f.push(' <input title="Switch to selecting files" type="radio" name="jstree-radio" value="jstree-disable-folders" checked="checked"> Files');f.push("</label>");f.push('<label class="radio-inline">');f.push(' <input title="Switch to selecting folders" type="radio" name="jstree-radio" value="jstree-disable-files"> Folders');f.push("</label>");f.push('<label class="checkbox-inline jstree-preserve-structure" style="display:none;">');f.push(' <input class="preserve-checkbox" type="checkbox" value="preserve_directory_structure">');f.push("Preserve directory structure");f.push(" </label>");f.push('<label class="checkbox-inline jstree-link-files" style="display:none;">');f.push(' <input class="link-checkbox" type="checkbox" value="link_files">');f.push("Link files instead of copying");f.push(" </label>");f.push("</div>");f.push('<div class="alert alert-info jstree-files-message">All files you select will be imported into the current folder.</div>');f.push('<div class="alert alert-info jstree-folders-message" style="display:none;">All files within the selected folders and their subfolders will be imported into the current folder.</div>');f.push('<div id="jstree_browser">');f.push("</div>");f.push("</div>");return _.template(f.join(""))},templateImportPathModal:function(){var f=[];f.push('<div id="file_browser_modal">');f.push('<label class="checkbox-inline jstree-preserve-structure">');f.push(' <input class="preserve-checkbox" type="checkbox" value="preserve_directory_structure">');f.push("Preserve directory structure");f.push(" </label>");f.push('<label class="checkbox-inline jstree-link-files">');f.push(' <input class="link-checkbox" type="checkbox" value="link_files">');f.push("Link files instead of copying");f.push(" </label>");f.push("</div>");f.push('<div class="alert alert-info jstree-folders-message">All files within the given folders and their subfolders will be imported into the current folder.</div>');f.push('<textarea id="import_paths" class="form-control" rows="5" placeholder="Paths separated by newline"></textarea>');f.push("</div>");return _.template(f.join(""))},templateAddFilesFromHistory:function(){var f=[];f.push('<div id="add_files_modal">');f.push('<div id="history_modal_combo_bulk">');f.push("Select history: ");f.push('<select id="dataset_add_bulk" name="dataset_add_bulk" style="width:66%; "> ');f.push(" <% _.each(histories, function(history) { %>");f.push(' <option value="<%= _.escape(history.get("id")) %>"><%= _.escape(history.get("name")) %></option>');f.push(" <% }); %>");f.push("</select>");f.push("</div>");f.push("<br/>");f.push('<div id="selected_history_content">');f.push("</div>");f.push("</div>");return _.template(f.join(""))},templateHistoryContents:function(){var f=[];f.push("<strong>Choose the datasets to import:</strong>");f.push("<ul>");f.push(" <% _.each(history_contents, function(history_item) { %>");f.push(' <li data-id="<%= _.escape(history_item.get("id")) %>">');f.push(' <input style="margin: 0;" type="checkbox"><%= _.escape(history_item.get("hid")) %>: <%= _.escape(history_item.get("name")) %>');f.push(" </li>");f.push(" <% }); %>");f.push("</ul>");return _.template(f.join(""))}});return{FolderToolbarView:a}});
\ No newline at end of file
diff -r aec146e3828b16812ca24c5f8651ba3d0d483a6a -r f163dd7c2ccdd908b4f1f4e30defbbd20ee0da58 templates/webapps/galaxy/galaxy.panels.mako
--- a/templates/webapps/galaxy/galaxy.panels.mako
+++ b/templates/webapps/galaxy/galaxy.panels.mako
@@ -32,7 +32,6 @@
'libs/jquery/jquery',
'libs/jquery/jquery-ui',
"libs/jquery/select2",
- "libs/jquery/jstree",
'libs/bootstrap',
'libs/underscore',
'libs/backbone/backbone',
https://bitbucket.org/galaxy/galaxy-central/commits/c059c1061efa/
Changeset: c059c1061efa
User: martenson
Date: 2014-09-16 22:03:05+00:00
Summary: Merge
Affected #: 7 files
diff -r f163dd7c2ccdd908b4f1f4e30defbbd20ee0da58 -r c059c1061efa625d6ad1ff2fc298db03b01e2c61 client/GruntFile.js
--- a/client/GruntFile.js
+++ b/client/GruntFile.js
@@ -2,8 +2,10 @@
// Project configuration.
grunt.initConfig({
- pkg: grunt.file.readJSON('package.json'),
+ pkg: grunt.file.readJSON( 'package.json' ),
+ // default task
+ // use 'grunt copy' to copy the entire <galaxy>/client/galaxy/scripts dir into <galaxy>/static/scripts
copy: {
main: {
expand: true,
@@ -11,11 +13,18 @@
src: '**',
dest: '../static/scripts/'
}
+ },
+
+ // use 'grunt watch' (from a new tab in your terminal) to have grunt re-copy changed files automatically
+ watch: {
+ // watch for changes in the src dir
+ files: [ 'galaxy/scripts/**' ],
+ tasks: [ 'default' ]
}
-
});
- grunt.loadNpmTasks('grunt-contrib-copy');
+ grunt.loadNpmTasks( 'grunt-contrib-watch' );
+ grunt.loadNpmTasks( 'grunt-contrib-copy');
- grunt.registerTask('default', ['copy']);
+ grunt.registerTask( 'default', [ 'copy' ] );
};
diff -r f163dd7c2ccdd908b4f1f4e30defbbd20ee0da58 -r c059c1061efa625d6ad1ff2fc298db03b01e2c61 client/package.json
--- a/client/package.json
+++ b/client/package.json
@@ -6,6 +6,8 @@
"galaxy"
],
"devDependencies": {
- "grunt-contrib-copy": "^0.5.0"
+ "grunt": "^0.4.5",
+ "grunt-contrib-copy": "^0.5.0",
+ "grunt-contrib-watch": "^0.6.1"
}
}
diff -r f163dd7c2ccdd908b4f1f4e30defbbd20ee0da58 -r c059c1061efa625d6ad1ff2fc298db03b01e2c61 lib/galaxy/config.py
--- a/lib/galaxy/config.py
+++ b/lib/galaxy/config.py
@@ -137,7 +137,6 @@
self.collect_outputs_from = [ x.strip() for x in kwargs.get( 'collect_outputs_from', 'new_file_path,job_working_directory' ).lower().split(',') ]
self.template_path = resolve_path( kwargs.get( "template_path", "templates" ), self.root )
self.template_cache = resolve_path( kwargs.get( "template_cache_path", "database/compiled_templates" ), self.root )
- self.dependency_resolvers_config_file = resolve_path( kwargs.get( 'dependency_resolvers_config_file', 'dependency_resolvers_conf.xml' ), self.root )
self.local_job_queue_workers = int( kwargs.get( "local_job_queue_workers", "5" ) )
self.cluster_job_queue_workers = int( kwargs.get( "cluster_job_queue_workers", "3" ) )
self.job_queue_cleanup_interval = int( kwargs.get("job_queue_cleanup_interval", "5") )
@@ -384,6 +383,7 @@
external_service_type_config_file = [ 'external_service_types_conf.xml', 'config/external_service_types_conf.xml.sample', 'config/external_service_types_conf.xml.sample' ],
job_config_file = [ 'job_conf.xml', 'config/job_conf.xml' ],
job_metrics_config_file = [ 'job_metrics_conf.xml', 'config/job_metrics_conf.xml' ],
+ dependency_resolvers_config_file = [ 'dependency_resolvers_conf.xml', 'config/dependency_resolvers_conf.xml' ],
job_resource_params_file = [ 'job_resource_params_conf.xml', 'config/job_resource_params_conf.xml' ],
migrated_tools_config = [ 'migrated_tools_conf.xml', 'config/migrated_tools_conf.xml' ],
object_store_config_file = [ 'object_store_conf.xml', 'config/object_store_conf.xml' ],
diff -r f163dd7c2ccdd908b4f1f4e30defbbd20ee0da58 -r c059c1061efa625d6ad1ff2fc298db03b01e2c61 static/scripts/mvc/ui/ui-checkbox.js
--- /dev/null
+++ b/static/scripts/mvc/ui/ui-checkbox.js
@@ -0,0 +1,91 @@
+// dependencies
+define(['utils/utils'], function(Utils) {
+
+// plugin
+var View = Backbone.View.extend({
+ // options
+ optionsDefault: {
+ value : '',
+ visible : true,
+ cls : '',
+ data : [],
+ id : Utils.uuid()
+ },
+
+ // initialize
+ initialize : function(options) {
+ // configure options
+ this.options = Utils.merge(options, this.optionsDefault);
+
+ // create new element
+ this.setElement(this._template(this.options));
+
+ // hide input field
+ if (!this.options.visible) {
+ this.$el.hide();
+ }
+
+ // set initial value
+ if (this.options.value) {
+ this.value(this.options.value);
+ }
+
+ // current value
+ this.current = this.options.value;
+
+ // onchange event handler. fires on user activity.
+ var self = this;
+ this.$el.find('input').on('change', function() {
+ self.value(self._getValue());
+ });
+ },
+
+ // value
+ value : function (new_val) {
+ // get current value
+ var before = this.current;
+
+ // set new value
+ if (new_val !== undefined) {
+ this.$el.find('label').removeClass('active');
+ this.$el.find('[value="' + new_val + '"]').closest('label').addClass('active');
+ this.current = new_val;
+ }
+
+ // check value
+ var after = this.current;
+ if (after != before && this.options.onchange) {
+ this.options.onchange(this.current);
+ }
+
+ // get and return value
+ return this.current;
+ },
+
+ // get value
+ _getValue: function() {
+ var selected = this.$el.find(':checked');
+ var value = null;
+ if (selected.length > 0) {
+ value = selected.val();
+ }
+ return value;
+ },
+
+ // element
+ _template: function(options) {
+ var tmpl = '<div class="ui-checkbox">';
+ for (key in options.data) {
+ var pair = options.data[key];
+ tmpl += '<input type="checkbox" name="' + options.id + '" value="' + pair.value + '" selected>' + pair.label + '<br>';
+ }
+ tmpl += '</div>';
+ return tmpl;
+ }
+});
+
+return {
+ View : View
+};
+
+});
diff -r f163dd7c2ccdd908b4f1f4e30defbbd20ee0da58 -r c059c1061efa625d6ad1ff2fc298db03b01e2c61 static/scripts/mvc/ui/ui-radiobutton.js
--- /dev/null
+++ b/static/scripts/mvc/ui/ui-radiobutton.js
@@ -0,0 +1,93 @@
+// dependencies
+define(['utils/utils'], function(Utils) {
+
+// plugin
+var View = Backbone.View.extend({
+ // options
+ optionsDefault: {
+ value : '',
+ visible : true,
+ cls : '',
+ data : [],
+ id : Utils.uuid()
+ },
+
+ // initialize
+ initialize : function(options) {
+ // configure options
+ this.options = Utils.merge(options, this.optionsDefault);
+
+ // create new element
+ this.setElement(this._template(this.options));
+
+ // hide input field
+ if (!this.options.visible) {
+ this.$el.hide();
+ }
+
+ // set initial value
+ if (this.options.value) {
+ this.value(this.options.value);
+ }
+
+ // current value
+ this.current = this.options.value;
+
+ // onchange event handler. fires on user activity.
+ var self = this;
+ this.$el.find('input').on('change', function() {
+ self.value(self._getValue());
+ });
+ },
+
+ // value
+ value : function (new_val) {
+ // get current value
+ var before = this.current;
+
+ // set new value
+ if (new_val !== undefined) {
+ this.$el.find('label').removeClass('active');
+ this.$el.find('[value="' + new_val + '"]').closest('label').addClass('active');
+ this.current = new_val;
+ }
+
+ // check value
+ var after = this.current;
+ if (after != before && this.options.onchange) {
+ this.options.onchange(this.current);
+ }
+
+ // get and return value
+ return this.current;
+ },
+
+ // get value
+ _getValue: function() {
+ var selected = this.$el.find(':checked');
+ var value = null;
+ if (selected.length > 0) {
+ value = selected.val();
+ }
+ return value;
+ },
+
+ // element
+ _template: function(options) {
+ var tmpl = '<div class="btn-group ui-radiobutton" data-toggle="buttons">';
+ for (key in options.data) {
+ var pair = options.data[key];
+ tmpl += '<label class="btn btn-default">' +
+ '<input type="radio" name="' + options.id + '" value="' + pair.value + '" selected>' + pair.label +
+ '</label>';
+ }
+ tmpl += '</div>';
+ return tmpl;
+ }
+});
+
+return {
+ View : View
+};
+
+});
diff -r f163dd7c2ccdd908b4f1f4e30defbbd20ee0da58 -r c059c1061efa625d6ad1ff2fc298db03b01e2c61 static/scripts/packed/mvc/ui/ui-checkbox.js
--- /dev/null
+++ b/static/scripts/packed/mvc/ui/ui-checkbox.js
@@ -0,0 +1,1 @@
+define(["utils/utils"],function(a){var b=Backbone.View.extend({optionsDefault:{value:"",visible:true,cls:"",data:[],id:a.uuid()},initialize:function(d){this.options=a.merge(d,this.optionsDefault);this.setElement(this._template(this.options));if(!this.options.visible){this.$el.hide()}if(this.options.value){this.value(this.options.value)}this.current=this.options.value;var c=this;this.$el.find("input").on("change",function(){c.value(c._getValue())})},value:function(c){var d=this.current;if(c!==undefined){this.$el.find("label").removeClass("active");this.$el.find('[value="'+c+'"]').closest("label").addClass("active");this.current=c}var e=this.current;if(e!=d&&this.options.onchange){this.options.onchange(this.current)}return this.current},_getValue:function(){var c=this.$el.find(":checked");var d=null;if(c.length>0){d=c.val()}return d},_template:function(d){var c='<div class="ui-checkbox">';for(key in d.data){var e=d.data[key];c+='<input type="checkbox" name="'+d.id+'" value="'+e.value+'" selected>'+e.label+"<br>"}c+="</div>";return c}});return{View:b}});
\ No newline at end of file
diff -r f163dd7c2ccdd908b4f1f4e30defbbd20ee0da58 -r c059c1061efa625d6ad1ff2fc298db03b01e2c61 static/scripts/packed/mvc/ui/ui-radiobutton.js
--- /dev/null
+++ b/static/scripts/packed/mvc/ui/ui-radiobutton.js
@@ -0,0 +1,1 @@
+define(["utils/utils"],function(a){var b=Backbone.View.extend({optionsDefault:{value:"",visible:true,cls:"",data:[],id:a.uuid()},initialize:function(d){this.options=a.merge(d,this.optionsDefault);this.setElement(this._template(this.options));if(!this.options.visible){this.$el.hide()}if(this.options.value){this.value(this.options.value)}this.current=this.options.value;var c=this;this.$el.find("input").on("change",function(){c.value(c._getValue())})},value:function(c){var d=this.current;if(c!==undefined){this.$el.find("label").removeClass("active");this.$el.find('[value="'+c+'"]').closest("label").addClass("active");this.current=c}var e=this.current;if(e!=d&&this.options.onchange){this.options.onchange(this.current)}return this.current},_getValue:function(){var c=this.$el.find(":checked");var d=null;if(c.length>0){d=c.val()}return d},_template:function(d){var c='<div class="btn-group ui-radiobutton" data-toggle="buttons">';for(key in d.data){var e=d.data[key];c+='<label class="btn btn-default"><input type="radio" name="'+d.id+'" value="'+e.value+'" selected>'+e.label+"</label>"}c+="</div>";return c}});return{View:b}});
\ No newline at end of file
https://bitbucket.org/galaxy/galaxy-central/commits/7ddb0d7b4b12/
Changeset: 7ddb0d7b4b12
User: jmchilton
Date: 2014-09-17 01:40:35+00:00
Summary: Merged in martenson/galaxy-central-marten (pull request #497)
importing into library folders from Galaxy filesystem
Affected #: 37 files
diff -r 38be704a932fafd27b01034ae9daf83a465062bf -r 7ddb0d7b4b128089322b441c77eceaea5d993312 client/galaxy/scripts/galaxy.library.js
--- a/client/galaxy/scripts/galaxy.library.js
+++ b/client/galaxy/scripts/galaxy.library.js
@@ -47,7 +47,8 @@
"folders/:folder_id/datasets/:dataset_id" : "dataset_detail",
"folders/:folder_id/datasets/:dataset_id/permissions" : "dataset_permissions",
"folders/:folder_id/datasets/:dataset_id/versions/:ldda_id" : "dataset_version",
- "folders/:folder_id/download/:format" : "download"
+ "folders/:folder_id/download/:format" : "download",
+ "folders/:folder_id/import/:source" : "import_datasets"
},
back: function() {
@@ -147,6 +148,15 @@
}
Galaxy.libraries.folderView = new mod_library_folder_view.FolderView({id: folder_id, show_permissions: true});
});
+ this.library_router.on('route:import_datasets', function(folder_id, source){
+ if (Galaxy.libraries.folderToolbarView && Galaxy.libraries.folderListView){
+ Galaxy.libraries.folderToolbarView.showImportModal({source:source});
+ } else {
+ Galaxy.libraries.folderToolbarView = new mod_foldertoolbar_view.FolderToolbarView({id: folder_id});
+ Galaxy.libraries.folderListView = new mod_folderlist_view.FolderListView({id: folder_id});
+ Galaxy.libraries.folderToolbarView.showImportModal({source: source});
+ }
+ });
Backbone.history.start({pushState: false});
}
This diff is so big that we needed to truncate the remainder.
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
commit/galaxy-central: jmchilton: More tool functional tests for validation stuff.
by commits-noreply@bitbucket.org 16 Sep '14
by commits-noreply@bitbucket.org 16 Sep '14
16 Sep '14
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/38be704a932f/
Changeset: 38be704a932f
User: jmchilton
Date: 2014-09-17 01:29:10+00:00
Summary: More tool functional tests for validation stuff.
Test default sanitization in repeat. Basic test of simpler santizer and mapping.
Affected #: 3 files
diff -r dc14dc1d9d539a4d9901b22396cb625d45354ae5 -r 38be704a932fafd27b01034ae9daf83a465062bf test/functional/tools/samples_tool_conf.xml
--- a/test/functional/tools/samples_tool_conf.xml
+++ b/test/functional/tools/samples_tool_conf.xml
@@ -22,6 +22,8 @@
<tool file="multi_data_param.xml" /><tool file="special_params.xml" /><tool file="validation_default.xml" />
+ <tool file="validation_sanitizer.xml" />
+ <tool file="validation_repeat.xml" /><tool file="collection_paired_test.xml" /><tool file="collection_nested_test.xml" /><tool file="collection_mixed_param.xml" />
diff -r dc14dc1d9d539a4d9901b22396cb625d45354ae5 -r 38be704a932fafd27b01034ae9daf83a465062bf test/functional/tools/validation_repeat.xml
--- /dev/null
+++ b/test/functional/tools/validation_repeat.xml
@@ -0,0 +1,56 @@
+<tool id="validation_repeat" name="Validation (default)">
+ <command>
+ #for $r in $r1
+ echo "${r.text}" >> out1;
+ #end for
+ #for $r in $r2
+ echo "${r.text}" >> out2;
+ #end for
+ </command>
+ <inputs>
+ <repeat name="r1" label="Repeat 1">
+ <param name="text" type="text" label="text input" />
+ </repeat>
+ <repeat name="r2" label="Repeat 2">
+ <param name="text" type="text" label="text input">
+ <sanitizer>
+ <valid initial="none">
+ <add value="a"/>
+ <add value="b"/>
+ <add value="d"/>
+ <add value="e"/>
+ </valid>
+ <mapping initial="none">
+ <add source="@" target="c"/>
+ </mapping>
+ </sanitizer>
+ </param>
+ </repeat>
+ </inputs>
+ <outputs>
+ <data name="out_file1" from_work_dir="out1" />
+ <data name="out_file2" from_work_dir="out2" />
+ </outputs>
+ <tests>
+ <test>
+ <repeat name="r1">
+ <param name="text" value="" ; echo "moo" />
+ </repeat>
+ <repeat name="r2">
+ <param name="text" value="ab@de" />
+ </repeat>
+ <output name="out_file1">
+ <assert_contents>
+ <has_line line="__dq__ X echo __dq__moo" />
+ </assert_contents>
+ </output>
+ <output name="out_file2">
+ <assert_contents>
+ <has_line line="abcde" />
+ </assert_contents>
+ </output>
+ </test>
+ </tests>
+ <help>
+ </help>
+</tool>
diff -r dc14dc1d9d539a4d9901b22396cb625d45354ae5 -r 38be704a932fafd27b01034ae9daf83a465062bf test/functional/tools/validation_sanitizer.xml
--- /dev/null
+++ b/test/functional/tools/validation_sanitizer.xml
@@ -0,0 +1,35 @@
+<tool id="validation_sanitizer" name="Validation (simple sanitizer)">
+ <command>
+ echo "${text}" >> out1;
+ </command>
+ <inputs>
+ <param name="text" type="text" label="text input">
+ <sanitizer>
+ <valid initial="none">
+ <add value="a"/>
+ <add value="b"/>
+ <add value="d"/>
+ <add value="e"/>
+ </valid>
+ <mapping initial="none">
+ <add source="@" target="c"/>
+ </mapping>
+ </sanitizer>
+ </param>
+ </inputs>
+ <outputs>
+ <data name="out_file1" from_work_dir="out1" />
+ </outputs>
+ <tests>
+ <test>
+ <param name="text" value="ab@de" />
+ <output name="out_file1">
+ <assert_contents>
+ <has_line line="abcde" />
+ </assert_contents>
+ </output>
+ </test>
+ </tests>
+ <help>
+ </help>
+</tool>
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
Branch: refs/heads/master
Home: https://github.com/galaxyproject/usegalaxy-playbook
Commit: 88a99073a19b76cf9beb37c0553031c93c86368c
https://github.com/galaxyproject/usegalaxy-playbook/commit/88a99073a19b76cf…
Author: Nate Coraor <nate(a)bx.psu.edu>
Date: 2014-09-16 (Tue, 16 Sep 2014)
Changed paths:
M stage/group_vars/all.yml
Log Message:
-----------
Update Test
1
0
2 new commits in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/78d9f01226d8/
Changeset: 78d9f01226d8
User: natefoo
Date: 2014-09-16 22:29:12+00:00
Summary: Fix another instance of the renaming that I broke.
Affected #: 1 file
diff -r 3d92d6f0ec740391c9b69c0faef1b4cd0c66e946 -r 78d9f01226d8f3a6d7bdc8dc122e01127edc739a install_and_test_tool_shed_repositories.sh
--- a/install_and_test_tool_shed_repositories.sh
+++ b/install_and_test_tool_shed_repositories.sh
@@ -33,7 +33,7 @@
fi
if [ -z "$GALAXY_INSTALL_TEST_TOOL_SHEDS_CONF" ] ; then
- if grep --quiet $GALAXY_INSTALL_TEST_TOOL_SHED_URL tool_sheds_conf.xml; then
+ if grep --quiet $GALAXY_INSTALL_TEST_TOOL_SHED_URL config/tool_sheds_conf.xml.sample; then
echo "Tool sheds configuration tool_sheds_conf.xml ok, proceeding."
else
echo "ERROR: Tool sheds configuration tool_sheds_conf.xml does not have an entry for $GALAXY_INSTALL_TEST_TOOL_SHED_URL."
https://bitbucket.org/galaxy/galaxy-central/commits/dc14dc1d9d53/
Changeset: dc14dc1d9d53
User: natefoo
Date: 2014-09-16 22:29:23+00:00
Summary: Fix typo in Pulsar client lib.
Affected #: 1 file
diff -r 78d9f01226d8f3a6d7bdc8dc122e01127edc739a -r dc14dc1d9d539a4d9901b22396cb625d45354ae5 lib/pulsar/client/transport/requests.py
--- a/lib/pulsar/client/transport/requests.py
+++ b/lib/pulsar/client/transport/requests.py
@@ -1,7 +1,7 @@
from __future__ import absolute_import
try:
from galaxy import eggs
- eggs.require("requets")
+ eggs.require("requests")
except ImportError:
pass
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
[galaxyproject/usegalaxy-playbook] b1697e: cuff* were not supposed to get the Stampede select...
by GitHub 16 Sep '14
by GitHub 16 Sep '14
16 Sep '14
Branch: refs/heads/master
Home: https://github.com/galaxyproject/usegalaxy-playbook
Commit: b1697e62b0cbdd9c34982fadbf4e9486d3503540
https://github.com/galaxyproject/usegalaxy-playbook/commit/b1697e62b0cbdd9c…
Author: Nate Coraor <nate(a)bx.psu.edu>
Date: 2014-09-16 (Tue, 16 Sep 2014)
Changed paths:
M templates/galaxy/usegalaxy.org/config/job_conf.xml.j2
Log Message:
-----------
cuff* were not supposed to get the Stampede selector yet.
1
0
commit/galaxy-central: natefoo: Stop recovering jobs that don't need to be recovered - jobs in the 'NEW' state when tracking in the database.
by commits-noreply@bitbucket.org 16 Sep '14
by commits-noreply@bitbucket.org 16 Sep '14
16 Sep '14
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/3d92d6f0ec74/
Changeset: 3d92d6f0ec74
User: natefoo
Date: 2014-09-16 23:51:40
Summary: Stop recovering jobs that don't need to be recovered - jobs in the 'NEW' state when tracking in the database.
Affected #: 1 file
diff -r 77ec2da4bab3d7649aaff20edc8a8a1aa6594bdd -r 3d92d6f0ec740391c9b69c0faef1b4cd0c66e946 lib/galaxy/jobs/handler.py
--- a/lib/galaxy/jobs/handler.py
+++ b/lib/galaxy/jobs/handler.py
@@ -101,19 +101,22 @@
In case the activation is enforced it will filter out the jobs of inactive users.
"""
jobs_at_startup = []
+ if self.track_jobs_in_database:
+ in_list = ( model.Job.states.QUEUED,
+ model.Job.states.RUNNING )
+ else:
+ in_list = ( model.Job.states.NEW,
+ model.Job.states.QUEUED,
+ model.Job.states.RUNNING )
if self.app.config.user_activation_on:
jobs_at_startup = self.sa_session.query( model.Job ).enable_eagerloads( False ) \
.outerjoin( model.User ) \
- .filter( ( ( model.Job.state == model.Job.states.NEW ) \
- | ( model.Job.state == model.Job.states.RUNNING ) \
- | ( model.Job.state == model.Job.states.QUEUED ) ) \
+ .filter( model.Job.state.in_( in_list ) \
& ( model.Job.handler == self.app.config.server_name ) \
& or_( ( model.Job.user_id == None ), ( model.User.active == True ) ) ).all()
else:
jobs_at_startup = self.sa_session.query( model.Job ).enable_eagerloads( False ) \
- .filter( ( ( model.Job.state == model.Job.states.NEW ) \
- | ( model.Job.state == model.Job.states.RUNNING ) \
- | ( model.Job.state == model.Job.states.QUEUED ) ) \
+ .filter( model.Job.state.in_( in_list ) \
& ( model.Job.handler == self.app.config.server_name ) ).all()
for job in jobs_at_startup:
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0