diff --git a/client/gulpfile.js b/client/gulpfile.js
new file mode 100644
index 00000000000..ab64e4540eb
--- /dev/null
+++ b/client/gulpfile.js
@@ -0,0 +1,27 @@
+var gulp = require('gulp');
+var uglify = require('gulp-uglify');
+var sourcemaps = require('gulp-sourcemaps');
+var del = require('del');
+
+var paths = {
+ scripts: ['galaxy/scripts/**/*.js',
+ 'galaxy/scripts/!apps/**/*.js'
+ ]
+};
+
+gulp.task('scripts', ['clean'], function() {
+ return gulp.src(paths.scripts)
+ .pipe(sourcemaps.init())
+ // Transpile here prior to uglify.
+ .pipe(uglify())
+ .pipe(sourcemaps.write('../maps/'))
+ .pipe(gulp.dest('../static/scripts/'));
+});
+
+gulp.task('clean', function(){
+ // This currently wipes out webpack bundles, too, but it'll keep us from
+ // shipping cruft. Need to add a whitelist.
+ return del(['../static/scripts/'], {force: true});
+});
+
+gulp.task('default', ['scripts']);
diff --git a/client/package.json b/client/package.json
index e1b27d9893e..428d90b5635 100644
--- a/client/package.json
+++ b/client/package.json
@@ -15,6 +15,7 @@
"babel-core": "^6.24.0",
"babel-loader": "^6.4.1",
"babel-preset-env": "^1.3.2",
+ "del": "^2.2.2",
"grunt": "^0.4.5",
"grunt-bower-install-simple": "^1.1.0",
"grunt-check-modules": "^1.0.0",
@@ -26,6 +27,9 @@
"grunt-contrib-watch": "^0.6.1",
"grunt-exec": "^0.4.6",
"grunt-spritesmith": "^4.7.1",
+ "gulp": "^3.9.1",
+ "gulp-sourcemaps": "^2.5.1",
+ "gulp-uglify": "^2.1.2",
"webpack": "^2.3.3"
},
"scripts": {
@@ -33,6 +37,7 @@
"webpack": "webpack -p",
"webpack-dev": "webpack -d",
"webpack-dev-watch": "webpack -d --watch",
- "build-style": "grunt style"
+ "build-style": "grunt style",
+ "gulp": "gulp"
}
}
diff --git a/static/maps/galaxy.interactive_environments.js.map b/static/maps/galaxy.interactive_environments.js.map
index 75370a01be8..28d5c261ff2 100644
--- a/static/maps/galaxy.interactive_environments.js.map
+++ b/static/maps/galaxy.interactive_environments.js.map
@@ -1 +1 @@
-{"version":3,"file":"galaxy.interactive_environments.js","sources":["../src/galaxy.interactive_environments.js"],"names":["append_notebook","url","clear_main_area","$","append","remove","children","display_spinner","galaxy_root","load_when_ready","success_callback","request_count","timeout_time","timeout_time_max","timeout_time_step","timeout","ajax","xhrFields","withCredentials","type","dataType","success","data","console","log","toastr","clear","info","closeButton","tapToDismiss","window","setTimeout","error","test_ie_availability","interval","setInterval","clearInterval","timeOut"],"mappings":"AAIA,QAASA,iBAAgBC,GACrBC,kBACAC,EAAE,SAASC,OAAO,uHAAwHH,EAAK,eAInJ,QAASC,mBACLC,EAAE,YAAYE,SACdF,EAAE,SAASG,WAAWD,SAG1B,QAASE,mBACDJ,EAAE,SAASC,OAAO,0BAA4BI,YAAc,wGAMpE,QAASC,iBAAgBR,EAAKS,GAC1B,GAAIC,GAAgB,EAChBC,EAAe,IACfC,EAAmB,KACnBC,EAAoB,IACpBC,EAAU,WACVZ,EAAEa,MACEf,IAAKA,EACLgB,WACIC,iBAAiB,GAErBC,KAAM,MACNJ,QAAS,IACTK,SAAU,OACVC,QAAS,SAASC,GACH,GAARA,GACCC,QAAQC,IAAI,gDACZtB,kBACAuB,OAAOC,QACPhB,KACa,GAARY,GACe,GAAjBX,IACCJ,kBACAkB,OAAOE,KACH,gGACCC,aAAe,EAAMC,cAAgB,KAG9ClB,IACkBE,EAAfD,IACCA,GAAgBE,GAEpBS,QAAQC,IAAI,qBAAuBb,EAAgB,aAAeC,EAAe,IAAO,KACxFkB,OAAOC,WAAWhB,EAASH,KAE3BV,kBACAuB,OAAOC,QACPD,OAAOO,MACH,gHACA,SACCJ,aAAe,EAAMC,cAAgB,QAM1DC,QAAOC,WAAWhB,EAASH,GAY/B,QAASqB,sBAAqBhC,EAAKS,GAC/B,GAAIC,GAAgB,CACpBJ,mBACA2B,SAAWC,YAAY,WACnBhC,EAAEa,MACEf,IAAKA,EACLgB,WACIC,iBAAiB,GAErBC,KAAM,MACNJ,QAAS,IACTM,QAAS,WACLE,QAAQC,IAAI,8BACZY,cAAcF,UACdxB,KAEJsB,MAAO,WACHrB,IACAY,QAAQC,IAAI,wBAA0Bb,GACnCA,EAAgB,KACfyB,cAAcF,UACdhC,kBACAuB,OAAOO,MACH,sDACA,SACCJ,aAAe,EAAMS,QAAW,IAAOR,cAAgB,SAKzE"}
\ No newline at end of file
+{"version":3,"sources":["galaxy.interactive_environments.js"],"names":["append_notebook","url","clear_main_area","$","append","remove","children","display_spinner","galaxy_root","load_when_ready","success_callback","request_count","timeout_time","timeout","ajax","xhrFields","withCredentials","type","dataType","success","data","console","log","toastr","clear","info","closeButton","tapToDismiss","window","setTimeout","error","test_ie_availability","interval","setInterval","clearInterval","jqxhr","status","timeOut"],"mappings":"AAIA,QAASA,iBAAgBC,GACrBC,kBACAC,EAAE,SAASC,OAAO,uHAAwHH,EAAK,eAInJ,QAASC,mBACLC,EAAE,YAAYE,SACdF,EAAE,SAASG,WAAWD,SAG1B,QAASE,mBACDJ,EAAE,SAASC,OAAO,0BAA4BI,YAAc,wGAMpE,QAASC,iBAAgBR,EAAKS,GAC1B,GAAIC,GAAgB,EAChBC,EAAe,IAGfC,EAAU,WACVV,EAAEW,MACEb,IAAKA,EACLc,WACIC,iBAAiB,GAErBC,KAAM,MACNJ,QAAS,IACTK,SAAU,OACVC,QAAS,SAASC,GACH,GAARA,GACCC,QAAQC,IAAI,gDACZpB,kBACAqB,OAAOC,QACPd,KACa,GAARU,GACe,GAAjBT,IACCJ,kBACAgB,OAAOE,KACH,gGACCC,aAAe,EAAMC,cAAgB,KAG9ChB,IACGC,EA1BI,OA2BHA,GA1BI,KA4BRS,QAAQC,IAAI,qBAAuBX,EAAgB,aAAeC,EAAe,IAAO,KACxFgB,OAAOC,WAAWhB,EAASD,KAE3BV,kBACAqB,OAAOC,QACPD,OAAOO,MACH,gHACA,SACCJ,aAAe,EAAMC,cAAgB,QAM1DC,QAAOC,WAAWhB,EAASD,GAY/B,QAASmB,sBAAqB9B,EAAKS,GAC/B,GAAIC,GAAgB,CACpBJ,mBACAyB,SAAWC,YAAY,WACnB9B,EAAEW,MACEb,IAAKA,EACLc,WACIC,iBAAiB,GAErBC,KAAM,MACNJ,QAAS,IACTM,QAAS,WACLE,QAAQC,IAAI,8BACZY,cAAcF,UACdtB,KAEJoB,MAAO,SAASK,EAAOC,EAAQN,GAC3BnB,IACAU,QAAQC,IAAI,wBAA0BX,GACnCA,EAAgB,KACfuB,cAAcF,UACd9B,kBACAqB,OAAOO,MACH,sDACA,SACCJ,aAAe,EAAMW,QAAW,IAAOV,cAAgB,SAKzE","file":"../scripts/galaxy.interactive_environments.js","sourcesContent":["/**\n * Internal function to remove content from the main area and add the notebook.\n * Not idempotent\n */\nfunction append_notebook(url){\n clear_main_area();\n $('#main').append(''\n );\n}\n\nfunction clear_main_area(){\n $('#spinner').remove();\n $('#main').children().remove();\n}\n\nfunction display_spinner(){\n $('#main').append('');\n}\n\n/**\n * Check a URL for a boolean true/false and call a callback when done.\n */\nfunction load_when_ready(url, success_callback){\n var request_count = 0;\n var timeout_time = 1000;\n var timeout_time_max = 15000;\n var timeout_time_step = 1000;\n var timeout = function(){\n $.ajax({\n url: url,\n xhrFields: {\n withCredentials: true\n },\n type: \"GET\",\n timeout: 500,\n dataType: \"json\",\n success: function(data){\n if(data == true){\n console.log(\"Galaxy reports IE container ready, returning\");\n clear_main_area();\n toastr.clear();\n success_callback();\n }else if(data == false){\n if(request_count == 0){\n display_spinner();\n toastr.info(\n \"Galaxy is launching a container in which to run this interactive environment. Please wait...\",\n {'closeButton': true, 'tapToDismiss': false}\n );\n }\n request_count++;\n if(timeout_time < timeout_time_max){\n timeout_time += timeout_time_step;\n }\n console.log(\"Readiness request \" + request_count + \" sleeping \" + timeout_time / 1000 + \"s\");\n window.setTimeout(timeout, timeout_time)\n }else{\n clear_main_area();\n toastr.clear();\n toastr.error(\n \"Galaxy failed to launch a container in which to run this interactive environment, contact your administrator.\",\n \"Error\",\n {'closeButton': true, 'tapToDismiss': false}\n );\n }\n }\n });\n }\n window.setTimeout(timeout, timeout_time);\n}\n\n\n\n/**\n * Test availability of a URL, and call a callback when done.\n * http://stackoverflow.com/q/25390206/347368\n * @param {String} url: URL to test availability of. Must return a 200 (302->200 is OK).\n * @param {String} callback: function to call once successfully connected.\n *\n */\nfunction test_ie_availability(url, success_callback){\n var request_count = 0;\n display_spinner();\n interval = setInterval(function(){\n $.ajax({\n url: url,\n xhrFields: {\n withCredentials: true\n },\n type: \"GET\",\n timeout: 500,\n success: function(){\n console.log(\"Connected to IE, returning\");\n clearInterval(interval);\n success_callback();\n },\n error: function(jqxhr, status, error){\n request_count++;\n console.log(\"Availability request \" + request_count);\n if(request_count > 30){\n clearInterval(interval);\n clear_main_area();\n toastr.error(\n \"Could not connect to IE, contact your administrator\",\n \"Error\",\n {'closeButton': true, 'timeOut': 20000, 'tapToDismiss': false}\n );\n }\n }\n });\n }, 1000);\n}\n"]}
\ No newline at end of file
diff --git a/static/maps/galaxy.js.map b/static/maps/galaxy.js.map
index 13cf261b083..6d8f762b807 100644
--- a/static/maps/galaxy.js.map
+++ b/static/maps/galaxy.js.map
@@ -1 +1 @@
-{"version":3,"file":"galaxy.js","sources":["../src/galaxy.js"],"names":["define","_","Backbone","BASE_MVC","userModel","metricsLogger","addLogging","localize","GalaxyApp","options","bootstrapped","self","this","_init","DEBUGGING_KEY","NAMESPACE_KEY","localDebugging","localStorage","getItem","storageErr","console","log","prototype","extend","Events","logger","debug","_processOptions","root","_initConfig","config","_patchGalaxy","window","Galaxy","_initLogger","loggerOptions","_initLocale","_initUser","user","_setUpListeners","trigger","defaultOptions","patchExisting","defaults","k","hasOwnProperty","patchWith","consoleLogger","consoleLevel","MetricsLogger","ALL","consoleNamespaceWhitelist","split","emit","map","i","arguments","Array","slice","call","LoggableMixin","_l","userJSON","User","lastAjax","$","document","bind","ev","xhr","data","JSON","parse","err","url","location","href","debugging","setting","undefined","setItem","removeItem","debuggingNamespaces","namespaces","csv","newSettings","toString","userEmail","get"],"mappings":"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"}
\ No newline at end of file
+{"version":3,"sources":["galaxy.js"],"names":["define","_","Backbone","BASE_MVC","userModel","metricsLogger","addLogging","localize","GalaxyApp","options","bootstrapped","this","_init","NAMESPACE_KEY","DEBUGGING_KEY","localDebugging","localStorage","getItem","storageErr","console","log","prototype","self","extend","Events","logger","debug","_processOptions","root","_initConfig","config","_patchGalaxy","window","Galaxy","_initLogger","loggerOptions","_initLocale","_initUser","user","_setUpListeners","trigger","defaultOptions","patchExisting","defaults","k","hasOwnProperty","patchWith","consoleLogger","consoleLevel","MetricsLogger","ALL","consoleNamespaceWhitelist","split","emit","map","i","data","arguments","Array","slice","call","LoggableMixin","_l","userJSON","User","lastAjax","$","document","bind","ev","xhr","JSON","parse","err","url","location","href","debugging","setting","undefined","setItem","removeItem","debuggingNamespaces","namespaces","csv","newSettings","toString","get"],"mappings":"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","file":"../scripts/galaxy.js","sourcesContent":["define([\n 'libs/underscore',\n 'libs/backbone',\n 'mvc/base-mvc',\n 'mvc/user/user-model',\n 'utils/metrics-logger',\n 'utils/add-logging',\n 'utils/localization'\n], function( _, Backbone, BASE_MVC, userModel, metricsLogger, addLogging, localize ){\n\n// TODO: move into a singleton pattern and have dependents import Galaxy\n// ============================================================================\n/** Base galaxy client-side application.\n * Iniitializes:\n * logger : the logger/metrics-logger\n * localize : the string localizer\n * config : the current configuration (any k/v in\n * galaxy.ini available from the configuration API)\n * user : the current user (as a mvc/user/user-model)\n */\nfunction GalaxyApp( options, bootstrapped ){\n var self = this;\n return self._init( options || {}, bootstrapped || {} );\n}\n\n// add logging shortcuts for this object\naddLogging( GalaxyApp, 'GalaxyApp' );\n\n// a debug flag can be set via local storage and made available during script/page loading\nvar DEBUGGING_KEY = 'galaxy:debug',\n NAMESPACE_KEY = DEBUGGING_KEY + ':namespaces',\n localDebugging = false;\ntry {\n localDebugging = localStorage.getItem( DEBUGGING_KEY ) == 'true';\n} catch( storageErr ){\n console.log( localize( 'localStorage not available for debug flag retrieval' ) );\n}\n\n/** initalize options and sub-components */\nGalaxyApp.prototype._init = function __init( options, bootstrapped ){\n var self = this;\n _.extend( self, Backbone.Events );\n if( localDebugging ){\n self.logger = console;\n console.debug( 'debugging galaxy:', 'options:', options, 'bootstrapped:', bootstrapped );\n }\n\n self._processOptions( options );\n // special case for root\n self.root = options.root || '/';\n\n self._initConfig( options.config || {} );\n self._patchGalaxy( window.Galaxy );\n\n self._initLogger( self.options.loggerOptions || {} );\n // at this point, either logging or not and namespaces are enabled - chat it up\n self.debug( 'GalaxyApp.options: ', self.options );\n self.debug( 'GalaxyApp.config: ', self.config );\n self.debug( 'GalaxyApp.logger: ', self.logger );\n\n self._initLocale();\n self.debug( 'GalaxyApp.localize: ', self.localize );\n\n self.config = options.config || {};\n self.debug( 'GalaxyApp.config: ', self.config );\n\n self._initUser( options.user || {} );\n self.debug( 'GalaxyApp.user: ', self.user );\n\n self._setUpListeners();\n self.trigger( 'ready', self );\n\n return self;\n};\n\n/** default options */\nGalaxyApp.prototype.defaultOptions = {\n /** monkey patch attributes from existing window.Galaxy object? */\n patchExisting : true,\n /** root url of this app */\n root : '/'\n};\n\n/** filter to options present in defaultOptions (and default to them) */\nGalaxyApp.prototype._processOptions = function _processOptions( options ){\n var self = this,\n defaults = self.defaultOptions;\n\n self.options = {};\n for( var k in defaults ){\n if( defaults.hasOwnProperty( k ) ){\n self.options[ k ] = ( options.hasOwnProperty( k ) )?( options[ k ] ):( defaults[ k ] );\n }\n }\n return self;\n};\n\n/** parse the config and any extra info derived from it */\nGalaxyApp.prototype._initConfig = function _initConfig( config ){\n var self = this;\n self.config = config;\n\n // give precendence to localdebugging for this setting\n self.config.debug = localDebugging || self.config.debug;\n\n return self;\n};\n\n/** add an option from options if the key matches an option in defaultOptions */\nGalaxyApp.prototype._patchGalaxy = function _patchGalaxy( patchWith ){\n var self = this;\n // in case req or plain script tag order has created a prev. version of the Galaxy obj...\n if( self.options.patchExisting && patchWith ){\n // self.debug( 'found existing Galaxy object:', patchWith );\n // ...(for now) monkey patch any added attributes that the previous Galaxy may have had\n //TODO: move those attributes to more formal assignment in GalaxyApp\n for( var k in patchWith ){\n if( patchWith.hasOwnProperty( k ) ){\n // self.debug( '\\t patching in ' + k + ' to Galaxy:', self[ k ] );\n self[ k ] = patchWith[ k ];\n }\n }\n }\n};\n\n/** set up the metrics logger (utils/metrics-logger) and pass loggerOptions */\nGalaxyApp.prototype._initLogger = function _initLogger( loggerOptions ){\n var self = this;\n\n // default to console logging at the debug level if the debug flag is set\n if( self.config.debug ){\n loggerOptions.consoleLogger = loggerOptions.consoleLogger || console;\n loggerOptions.consoleLevel = loggerOptions.consoleLevel || metricsLogger.MetricsLogger.ALL;\n // load any logging namespaces from localStorage if we can\n try {\n loggerOptions.consoleNamespaceWhitelist = localStorage.getItem( NAMESPACE_KEY ).split( ',' );\n } catch( storageErr ){}\n }\n\n self.logger = new metricsLogger.MetricsLogger( loggerOptions );\n self.emit = {};\n [ 'log', 'debug', 'info', 'warn', 'error', 'metric' ].map(function( i ) {\n self.emit[ i ] = function( data ){\n self.logger.emit( i, arguments[ 0 ], Array.prototype.slice.call( arguments, 1 ) );\n };\n });\n\n if( self.config.debug ){\n // add this logger to mvc's loggable mixin so that all models can use the logger\n BASE_MVC.LoggableMixin.logger = self.logger;\n }\n return self;\n};\n\n/** add the localize fn to this object and the window namespace (as '_l') */\nGalaxyApp.prototype._initLocale = function _initLocale( options ){\n var self = this;\n self.debug( '_initLocale:', options );\n self.localize = localize;\n // add to window as global shortened alias\n // TODO: temporary - remove when can require for plugins\n window._l = self.localize;\n return self;\n};\n\n/** set up the current user as a Backbone model (mvc/user/user-model) */\nGalaxyApp.prototype._initUser = function _initUser( userJSON ){\n var self = this;\n self.debug( '_initUser:', userJSON );\n self.user = new userModel.User( userJSON );\n self.user.logger = self.logger;\n return self;\n};\n\n/** Set up DOM/jQuery/Backbone event listeners enabled for all pages */\nGalaxyApp.prototype._setUpListeners = function _setUpListeners(){\n var self = this;\n\n // hook to jq beforeSend to record the most recent ajax call and cache some data about it\n /** cached info about the last ajax call made through jQuery */\n self.lastAjax = {};\n $( document ).bind( 'ajaxSend', function( ev, xhr, options ){\n var data = options.data;\n try {\n data = JSON.parse( data );\n } catch( err ){}\n\n self.lastAjax = {\n url : location.href.slice( 0, -1 ) + options.url,\n data : data\n };\n //TODO:?? we might somehow manage to *retry* ajax using either this hook or Backbone.sync\n });\n return self;\n};\n\n/** Turn debugging/console-output on/off by passing boolean. Pass nothing to get current setting. */\nGalaxyApp.prototype.debugging = function _debugging( setting ){\n var self = this;\n try {\n if( setting === undefined ){\n return localStorage.getItem( DEBUGGING_KEY ) === 'true';\n }\n if( setting ){\n localStorage.setItem( DEBUGGING_KEY, true );\n return true;\n }\n\n localStorage.removeItem( DEBUGGING_KEY );\n // also remove all namespaces\n self.debuggingNamespaces( null );\n\n } catch( storageErr ){\n console.log( localize( 'localStorage not available for debug flag retrieval' ) );\n }\n return false;\n};\n\n/** Add, remove, or clear namespaces from the debugging filters\n * Pass no arguments to retrieve the existing namespaces as an array.\n * Pass in null to clear all namespaces (all logging messages will show now).\n * Pass in an array of strings or single string of the namespaces to filter to.\n * Returns the new/current namespaces as an array;\n */\nGalaxyApp.prototype.debuggingNamespaces = function _debuggingNamespaces( namespaces ){\n var self = this;\n try {\n if( namespaces === undefined ){\n var csv = localStorage.getItem( NAMESPACE_KEY );\n return typeof( csv ) === 'string'? csv.split( ',' ) : [];\n } else if( namespaces === null ) {\n localStorage.removeItem( NAMESPACE_KEY );\n } else {\n localStorage.setItem( NAMESPACE_KEY, namespaces );\n }\n var newSettings = self.debuggingNamespaces();\n if( self.logger ){\n self.logger.options.consoleNamespaceWhitelist = newSettings;\n }\n return newSettings;\n } catch( storageErr ){\n console.log( localize( 'localStorage not available for debug namespace retrieval' ) );\n }\n};\n\n/** string rep */\nGalaxyApp.prototype.toString = function toString(){\n var userEmail = this.user? ( this.user.get( 'email' ) || '(anonymous)' ) : 'uninitialized';\n return 'GalaxyApp(' + userEmail + ')';\n};\n\n// ============================================================================\n return {\n GalaxyApp : GalaxyApp\n };\n});\n"]}
\ No newline at end of file
diff --git a/static/maps/galaxy.library.js.map b/static/maps/galaxy.library.js.map
index 67ae9bf7111..e04b822d2bd 100644
--- a/static/maps/galaxy.library.js.map
+++ b/static/maps/galaxy.library.js.map
@@ -1 +1 @@
-{"version":3,"file":"galaxy.library.js","sources":["../src/galaxy.library.js"],"names":["define","mod_masthead","mod_utils","mod_toastr","mod_baseMVC","mod_library_model","mod_folderlist_view","mod_librarylist_view","mod_librarytoolbar_view","mod_foldertoolbar_view","mod_library_dataset_view","mod_library_library_view","mod_library_folder_view","LibraryRouter","Backbone","Router","extend","initialize","this","routesHit","history","on","bind","trackPageview","routes","page/:show_page","library/:library_id/permissions","folders/:folder_id/permissions","folders/:id","folders/:id/page/:show_page","folders/:folder_id/datasets/:dataset_id","folders/:folder_id/datasets/:dataset_id/permissions","folders/:folder_id/datasets/:dataset_id/versions/:ldda_id","folders/:folder_id/download/:format","folders/:folder_id/import/:source","back","window","navigate","trigger","replace","url","getFragment","test","ga","Galaxy","root","LibraryPrefs","SessionStorageModel","defaults","with_deleted","sort_order","sort_by","library_page_size","folder_page_size","GalaxyLibrary","View","libraryToolbarView","libraryListView","library_router","libraryView","folderToolbarView","folderListView","datasetView","config","ga_code","i","s","o","g","r","a","m","q","push","arguments","l","Date","createElement","getElementsByTagName","async","src","parentNode","insertBefore","document","libraries","preferences","id","$el","unbind","LibraryToolbarView","LibraryListView","show_page","render","FolderToolbarView","FolderListView","parseInt","folder_id","format","$","find","length","info","download","dataset_id","LibraryDatasetView","show_version","show_permissions","ldda_id","library_id","LibraryView","folderView","FolderView","source","showImportModal","start","pushState","GalaxyApp"],"mappings":"AAIAA,QACE,kBACA,cACA,cACA,eACA,4BACA,sCACA,uCACA,0CACA,yCACA,mCACA,mCACA,mCAEA,SAASC,EACPC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GAQJ,GAAIC,GAAgBC,SAASC,OAAOC,QAElCC,WAAY,WACVC,KAAKC,UAAY,EAEjBL,SAASM,QAAQC,GAAI,QAAS,WAAaH,KAAKC,aAAgBD,MAEhEA,KAAKI,KAAM,QAASJ,KAAKK,gBAG3BC,QACE,GAAkE,YAClEC,kBAAkE,iBAClEC,kCAAkE,sBAClEC,iCAAkE,qBAClEC,cAAkE,iBAClEC,8BAAkE,cAClEC,0CAAkE,iBAClEC,sDAAkE,sBAClEC,4DAAkE,kBAClEC,sCAAkE,WAClEC,oCAAkE,mBASpEC,KAAM,WACAjB,KAAKC,UAAY,EACnBiB,OAAOhB,QAAQe,OAEfjB,KAAKmB,SAAU,KAAOC,SAAQ,EAAMC,SAAQ,KAOhDhB,cAAe,WACb,GAAIiB,GAAM1B,SAASM,QAAQqB,aAEtB,OAAMC,KAAKF,IAAe,IAAPA,IACtBA,EAAM,IAAMA,GAEK,mBAAPG,KACVA,GAAI,OAAQ,WAAYC,OAAOC,KAAO,eAAiBL,MAOzDM,EAAe1C,EAAY2C,oBAAoB/B,QAC/CgC,UACIC,cAAoB,EACpBC,WAAoB,MACpBC,QAAoB,OACpBC,kBAAoB,GACpBC,iBAAoB,MASxBC,EAAgBxC,SAASyC,KAAKvC,QAE9BwC,mBAAoB,KACpBC,gBAAiB,KACjBC,eAAgB,KAChBC,YAAa,KACbC,kBAAmB,KACnBC,eAAgB,KAChBC,YAAa,KAEb7C,WAAa,WAGNmB,OAAOQ,OAAOmB,OAAOC,WAC1B,SAAUC,EAAEC,EAAEC,EAAEC,EAAEC,EAAEC,EAAEC,GAAGN,EAAyB,sBAAEI,EAAEJ,EAAEI,GAAGJ,EAAEI,IAAI,YAC1DJ,EAAEI,GAAGG,EAAEP,EAAEI,GAAGG,OAAOC,KAAKC,YAAYT,EAAEI,GAAGM,EAAE,EAAE,GAAIC,MAAON,EAAEJ,EAAEW,cAAcV,GAC3EI,EAAEL,EAAEY,qBAAqBX,GAAG,GAAGG,EAAES,MAAM,EAAET,EAAEU,IAAIZ,EAAEG,EAAEU,WAAWC,aAAaZ,EAAEC,IAC1EnC,OAAO+C,SAAS,SAAS,0CAA0C,MACtExC,GAAG,SAAUP,OAAOQ,OAAOmB,OAAOC,QAAS,QAC3CrB,GAAG,OAAQ,aAGfC,OAAOwC,UAAYlE,KAEnBA,KAAKmE,YAAc,GAAIvC,IAAgBwC,GAAI,qBAE3CpE,KAAKwC,eAAiB,GAAI7C,GAE1BK,KAAKwC,eAAerC,GAAI,kBAAmB,WAClCuB,OAAOwC,UAAU5B,oBAClBZ,OAAOwC,UAAU5B,mBAAmB+B,IAAIC,OAAO,SAEnD5C,OAAOwC,UAAU5B,mBAAqB,GAAIhD,GAAwBiF,mBAClE7C,OAAOwC,UAAU3B,gBAAkB,GAAIlD,GAAqBmF,kBAGhExE,KAAKwC,eAAerC,GAAG,uBAAwB,SAAUsE,GACR,OAAxC/C,OAAOwC,UAAU5B,oBAClBZ,OAAOwC,UAAU5B,mBAAqB,GAAIhD,GAAwBiF,mBAClE7C,OAAOwC,UAAU3B,gBAAkB,GAAIlD,GAAqBmF,iBAAmBC,UAAWA,KAE1F/C,OAAOwC,UAAU3B,gBAAgBmC,QAAUD,UAAWA,MAI9DzE,KAAKwC,eAAerC,GAAI,uBAAwB,SAAUiE,GAClD1C,OAAOwC,UAAUxB,mBACjBhB,OAAOwC,UAAUxB,kBAAkB2B,IAAIC,OAAQ,SAEnD5C,OAAOwC,UAAUxB,kBAAoB,GAAInD,GAAuBoF,mBAAqBP,GAAIA,IACzF1C,OAAOwC,UAAUvB,eAAiB,GAAIvD,GAAoBwF,gBAAkBR,GAAIA,MAGpFpE,KAAKwC,eAAerC,GAAI,oBAAqB,SAAUiE,EAAIK,GACX,OAAvC/C,OAAOwC,UAAUxB,mBAClBhB,OAAOwC,UAAUxB,kBAAoB,GAAInD,GAAuBoF,mBAAoBP,GAAIA,IACxF1C,OAAOwC,UAAUvB,eAAiB,GAAIvD,GAAoBwF,gBAAkBR,GAAIA,EAAIK,UAAWA,KAE/F/C,OAAOwC,UAAUvB,eAAe+B,QAAUN,GAAIA,EAAIK,UAAWI,SAAUJ,OAI/EzE,KAAKwC,eAAerC,GAAI,iBAAkB,SAAU2E,EAAWC,GACC,IAAvDC,EAAG,qBAAsBC,KAAM,YAAaC,QAC7CjG,EAAWkG,KAAM,oDACjBzD,OAAOwC,UAAU1B,eAAerB,SAAU,WAAa2D,GAAa1D,SAAS,EAAMC,SAAS,MAE5FK,OAAOwC,UAAUxB,kBAAkB0C,SAAUN,EAAWC,GACxDrD,OAAOwC,UAAU1B,eAAerB,SAAU,WAAa2D,GAAa1D,SAAS,EAAOC,SAAS,OAIrGrB,KAAKwC,eAAerC,GAAI,uBAAwB,SAAS2E,EAAWO,GAC5D3D,OAAOwC,UAAUtB,aACjBlB,OAAOwC,UAAUtB,YAAYyB,IAAIC,OAAO,SAE5C5C,OAAOwC,UAAUtB,YAAc,GAAIpD,GAAyB8F,oBAAoBlB,GAAIiB,EAAYE,cAAc,EAAOC,kBAAkB,MAG3IxF,KAAKwC,eAAerC,GAAI,wBAAyB,SAAS2E,EAAWO,EAAYI,GACzE/D,OAAOwC,UAAUtB,aACjBlB,OAAOwC,UAAUtB,YAAYyB,IAAIC,OAAO,SAE5C5C,OAAOwC,UAAUtB,YAAc,GAAIpD,GAAyB8F,oBAAoBlB,GAAIiB,EAAYI,QAASA,EAASF,cAAc,MAGpIvF,KAAKwC,eAAerC,GAAI,4BAA6B,SAAS2E,EAAWO,GACjE3D,OAAOwC,UAAUtB,aACjBlB,OAAOwC,UAAUtB,YAAYyB,IAAIC,OAAO,SAE5C5C,OAAOwC,UAAUtB,YAAc,GAAIpD,GAAyB8F,oBAAoBlB,GAAIiB,EAAYG,kBAAkB,MAGtHxF,KAAKwC,eAAerC,GAAI,4BAA6B,SAASuF,GACtDhE,OAAOwC,UAAUzB,aACjBf,OAAOwC,UAAUzB,YAAY4B,IAAIC,OAAO,SAE5C5C,OAAOwC,UAAUzB,YAAc,GAAIhD,GAAyBkG,aAAavB,GAAIsB,EAAYF,kBAAkB,MAG/GxF,KAAKwC,eAAerC,GAAI,2BAA4B,SAAS2E,GACrDpD,OAAOwC,UAAU0B,YACjBlE,OAAOwC,UAAU0B,WAAWvB,IAAIC,OAAO,SAE3C5C,OAAOwC,UAAU0B,WAAa,GAAIlG,GAAwBmG,YAAYzB,GAAIU,EAAWU,kBAAkB,MAG3GxF,KAAKwC,eAAerC,GAAI,wBAAyB,SAAU2E,EAAWgB,GAC7DpE,OAAOwC,UAAUxB,mBAAqBhB,OAAOwC,UAAUvB,eACxDjB,OAAOwC,UAAUxB,kBAAkBqD,iBAAmBD,OAAOA,KAE7DpE,OAAOwC,UAAUxB,kBAAoB,GAAInD,GAAuBoF,mBAAqBP,GAAIU,IACzFpD,OAAOwC,UAAUvB,eAAiB,GAAIvD,GAAoBwF,gBAAkBR,GAAIU,IAChFpD,OAAOwC,UAAUxB,kBAAkBqD,iBAAmBD,OAAQA,OAItElG,SAASM,QAAQ8F,OAAOC,WAAW,MAI3C,QACIC,UAAW9D"}
\ No newline at end of file
+{"version":3,"sources":["galaxy.library.js"],"names":["define","mod_masthead","mod_utils","mod_toastr","mod_baseMVC","mod_library_model","mod_folderlist_view","mod_librarylist_view","mod_librarytoolbar_view","mod_foldertoolbar_view","mod_library_dataset_view","mod_library_library_view","mod_library_folder_view","LibraryRouter","Backbone","Router","extend","initialize","this","routesHit","history","on","bind","trackPageview","routes","","page/:show_page","library/:library_id/permissions","folders/:folder_id/permissions","folders/:id","folders/:id/page/:show_page","folders/:folder_id/datasets/:dataset_id","folders/:folder_id/datasets/:dataset_id/permissions","folders/:folder_id/datasets/:dataset_id/versions/:ldda_id","folders/:folder_id/download/:format","folders/:folder_id/import/:source","back","window","navigate","trigger","replace","url","getFragment","test","ga","Galaxy","root","LibraryPrefs","SessionStorageModel","defaults","with_deleted","sort_order","sort_by","library_page_size","folder_page_size","GalaxyApp","View","libraryToolbarView","libraryListView","library_router","libraryView","folderToolbarView","folderListView","datasetView","config","ga_code","i","s","o","g","r","a","m","q","push","arguments","l","Date","createElement","getElementsByTagName","async","src","parentNode","insertBefore","document","libraries","preferences","id","$el","unbind","LibraryToolbarView","LibraryListView","show_page","render","FolderToolbarView","FolderListView","parseInt","folder_id","format","$","find","length","info","download","dataset_id","LibraryDatasetView","show_version","show_permissions","ldda_id","library_id","LibraryView","folderView","FolderView","source","showImportModal","start","pushState"],"mappings":"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","file":"../scripts/galaxy.library.js","sourcesContent":["// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\n// === MAIN GALAXY LIBRARY MODULE ====\n// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\n\ndefine([\n \"layout/masthead\",\n \"utils/utils\",\n \"libs/toastr\",\n \"mvc/base-mvc\",\n \"mvc/library/library-model\",\n \"mvc/library/library-folderlist-view\",\n \"mvc/library/library-librarylist-view\",\n \"mvc/library/library-librarytoolbar-view\",\n \"mvc/library/library-foldertoolbar-view\",\n \"mvc/library/library-dataset-view\",\n \"mvc/library/library-library-view\",\n \"mvc/library/library-folder-view\"\n ],\n function(mod_masthead,\n mod_utils,\n mod_toastr,\n mod_baseMVC,\n mod_library_model,\n mod_folderlist_view,\n mod_librarylist_view,\n mod_librarytoolbar_view,\n mod_foldertoolbar_view,\n mod_library_dataset_view,\n mod_library_library_view,\n mod_library_folder_view\n ) {\n\n// ============================================================================\n/**\n * The Data Libraries router. Takes care about triggering routes\n * and sends users to proper pieces of the application.\n */\nvar LibraryRouter = Backbone.Router.extend({\n\n initialize: function() {\n this.routesHit = 0;\n // keep count of number of routes handled by the application\n Backbone.history.on( 'route', function() { this.routesHit++; }, this );\n\n this.bind( 'route', this.trackPageview );\n },\n\n routes: {\n \"\" : \"libraries\",\n \"page/:show_page\" : \"libraries_page\",\n \"library/:library_id/permissions\" : \"library_permissions\",\n \"folders/:folder_id/permissions\" : \"folder_permissions\",\n \"folders/:id\" : \"folder_content\",\n \"folders/:id/page/:show_page\" : \"folder_page\",\n \"folders/:folder_id/datasets/:dataset_id\" : \"dataset_detail\",\n \"folders/:folder_id/datasets/:dataset_id/permissions\" : \"dataset_permissions\",\n \"folders/:folder_id/datasets/:dataset_id/versions/:ldda_id\" : \"dataset_version\",\n \"folders/:folder_id/download/:format\" : \"download\",\n \"folders/:folder_id/import/:source\" : \"import_datasets\"\n },\n\n /**\n * If more than one route has been hit the user did not land on current\n * page directly so we can go back safely. Otherwise go to the home page.\n * Use replaceState if available so the navigation doesn't create an\n * extra history entry\n */\n back: function() {\n if( this.routesHit > 1 ) {\n window.history.back();\n } else {\n this.navigate( '#', { trigger:true, replace:true } );\n }\n },\n\n /**\n * Track every route change as a page view in Google Analytics.\n */\n trackPageview: function () {\n var url = Backbone.history.getFragment();\n //prepend slash\n if (!/^\\//.test(url) && url != \"\") {\n url = \"/\" + url;\n }\n if ( typeof ga !== 'undefined' ) {\n ga( 'send', 'pageview', Galaxy.root + 'library/list' + url );\n }\n }\n});\n\n// ============================================================================\n/** session storage for library preferences */\nvar LibraryPrefs = mod_baseMVC.SessionStorageModel.extend({\n defaults : {\n with_deleted : false,\n sort_order : 'asc',\n sort_by : 'name',\n library_page_size : 20,\n folder_page_size : 15\n }\n});\n\n// ============================================================================\n/**\n * Main view of the Galaxy Data Libraries. Stores pointers to other subviews\n * and defines what router should do on the route triggers.\n */\nvar GalaxyLibrary = Backbone.View.extend({\n\n libraryToolbarView: null,\n libraryListView: null,\n library_router: null,\n libraryView: null,\n folderToolbarView: null,\n folderListView: null,\n datasetView: null,\n\n initialize : function(){\n\n // This should go upstream in the js app once available\n if ( window.Galaxy.config.ga_code ){\n (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n })(window,document,'script','//www.google-analytics.com/analytics.js','ga');\n ga('create', window.Galaxy.config.ga_code, 'auto');\n ga('send', 'pageview');\n }\n\n Galaxy.libraries = this;\n\n this.preferences = new LibraryPrefs( { id: 'global-lib-prefs' } );\n\n this.library_router = new LibraryRouter();\n\n this.library_router.on( 'route:libraries', function() {\n if ( Galaxy.libraries.libraryToolbarView){\n Galaxy.libraries.libraryToolbarView.$el.unbind('click');\n }\n Galaxy.libraries.libraryToolbarView = new mod_librarytoolbar_view.LibraryToolbarView();\n Galaxy.libraries.libraryListView = new mod_librarylist_view.LibraryListView();\n });\n\n this.library_router.on('route:libraries_page', function( show_page ) {\n if ( Galaxy.libraries.libraryToolbarView === null ){\n Galaxy.libraries.libraryToolbarView = new mod_librarytoolbar_view.LibraryToolbarView();\n Galaxy.libraries.libraryListView = new mod_librarylist_view.LibraryListView( { show_page: show_page } );\n } else {\n Galaxy.libraries.libraryListView.render( { show_page: show_page } );\n }\n });\n\n this.library_router.on( 'route:folder_content', function( id ) {\n if (Galaxy.libraries.folderToolbarView){\n Galaxy.libraries.folderToolbarView.$el.unbind( 'click' );\n }\n Galaxy.libraries.folderToolbarView = new mod_foldertoolbar_view.FolderToolbarView( { id: id } );\n Galaxy.libraries.folderListView = new mod_folderlist_view.FolderListView( { id: id } );\n });\n\n this.library_router.on( 'route:folder_page', function( id, show_page ) {\n if ( Galaxy.libraries.folderToolbarView === null ){\n Galaxy.libraries.folderToolbarView = new mod_foldertoolbar_view.FolderToolbarView( {id: id} );\n Galaxy.libraries.folderListView = new mod_folderlist_view.FolderListView( { id: id, show_page: show_page } );\n } else {\n Galaxy.libraries.folderListView.render( { id: id, show_page: parseInt( show_page ) } );\n }\n });\n\n this.library_router.on( 'route:download', function( folder_id, format ) {\n if ( $( '#folder_list_body' ).find( ':checked' ).length === 0 ) {\n mod_toastr.info( 'You must select at least one dataset to download' );\n Galaxy.libraries.library_router.navigate( 'folders/' + folder_id, { trigger: true, replace: true } );\n } else {\n Galaxy.libraries.folderToolbarView.download( folder_id, format );\n Galaxy.libraries.library_router.navigate( 'folders/' + folder_id, { trigger: false, replace: true } );\n }\n });\n\n this.library_router.on( 'route:dataset_detail', function(folder_id, dataset_id){\n if (Galaxy.libraries.datasetView){\n Galaxy.libraries.datasetView.$el.unbind('click');\n }\n Galaxy.libraries.datasetView = new mod_library_dataset_view.LibraryDatasetView({id: dataset_id, show_version: false, show_permissions: false});\n });\n\n this.library_router.on( 'route:dataset_version', function(folder_id, dataset_id, ldda_id){\n if (Galaxy.libraries.datasetView){\n Galaxy.libraries.datasetView.$el.unbind('click');\n }\n Galaxy.libraries.datasetView = new mod_library_dataset_view.LibraryDatasetView({id: dataset_id, ldda_id: ldda_id, show_version: true});\n });\n\n this.library_router.on( 'route:dataset_permissions', function(folder_id, dataset_id){\n if (Galaxy.libraries.datasetView){\n Galaxy.libraries.datasetView.$el.unbind('click');\n }\n Galaxy.libraries.datasetView = new mod_library_dataset_view.LibraryDatasetView({id: dataset_id, show_permissions: true});\n });\n\n this.library_router.on( 'route:library_permissions', function(library_id){\n if (Galaxy.libraries.libraryView){\n Galaxy.libraries.libraryView.$el.unbind('click');\n }\n Galaxy.libraries.libraryView = new mod_library_library_view.LibraryView({id: library_id, show_permissions: true});\n });\n\n this.library_router.on( 'route:folder_permissions', function(folder_id){\n if (Galaxy.libraries.folderView){\n Galaxy.libraries.folderView.$el.unbind('click');\n }\n Galaxy.libraries.folderView = new mod_library_folder_view.FolderView({id: folder_id, show_permissions: true});\n });\n\n this.library_router.on( 'route:import_datasets', function( folder_id, source ){\n if ( Galaxy.libraries.folderToolbarView && Galaxy.libraries.folderListView ){\n Galaxy.libraries.folderToolbarView.showImportModal( { source:source } );\n } else {\n Galaxy.libraries.folderToolbarView = new mod_foldertoolbar_view.FolderToolbarView( { id: folder_id } );\n Galaxy.libraries.folderListView = new mod_folderlist_view.FolderListView( { id: folder_id } );\n Galaxy.libraries.folderToolbarView.showImportModal( { source: source } );\n }\n });\n\n Backbone.history.start({pushState: false});\n }\n});\n\nreturn {\n GalaxyApp: GalaxyLibrary\n};\n\n});\n"]}
\ No newline at end of file
diff --git a/static/maps/galaxy.pages.js.map b/static/maps/galaxy.pages.js.map
index 8ac6e3af8fd..a3d936fdbc0 100644
--- a/static/maps/galaxy.pages.js.map
+++ b/static/maps/galaxy.pages.js.map
@@ -1 +1 @@
-{"version":3,"file":"galaxy.pages.js","sources":["../src/galaxy.pages.js"],"names":["init_galaxy_elts","wym","$","_doc","body","each","this","click","range","createRange","selectNodeContents","selection","window","getSelection","removeAllRanges","addRange","get_item_info","dialog_type","item_singular","item_plural","item_controller","CONTROLS","item_class","item_list_action","toLowerCase","ajax_url","list_objects_url","replace","singular","plural","controller","iclass","list_ajax_url","make_item_importable","item_id","item_type","set_accessible_url","ajax","type","url","data","id","accessible","error","alert","ITEM_HISTORY","ITEM_DATASET","ITEM_WORKFLOW","ITEM_PAGE","ITEM_VISUALIZATION","DIALOG_HISTORY_LINK","DIALOG_DATASET_LINK","DIALOG_WORKFLOW_LINK","DIALOG_PAGE_LINK","DIALOG_VISUALIZATION_LINK","DIALOG_EMBED_HISTORY","DIALOG_EMBED_DATASET","DIALOG_EMBED_WORKFLOW","DIALOG_EMBED_PAGE","DIALOG_EMBED_VISUALIZATION","WYMeditor","editor","prototype","dialog","dialogType","set_link_id","text","attribute_input","addClass","removeClass","selected","val","attr","remove","sStamp","uniqueStamp","DIALOG_LINK","_options","hrefSelector","HREF","srcSelector","SRC","titleSelector","TITLE","altSelector","ALT","curURL","curTitle","undefined","show_modal","Make link","sUrl","sId","sName","_exec","CREATE_LINK","link","indexOf","hide_modal","Cancel","DIALOG_IMAGE","_selected_image","dialogImageSelector","Insert","length","INSERT_IMAGE","DIALOG_TABLE","iRows","rowsSelector","iCols","colsSelector","table","createElement","TABLE","newRow","sCaption","captionSelector","newCaption","createCaption","innerHTML","x","insertRow","y","insertCell","summarySelector","node","findUp","container","MAIN_CONTAINERS","get","parentNode","after","append","item_info","success","table_html","make_importable","Array","url_template","get_name_and_link_url","getJSON","returned_item_info","link_text","insert","name","list_html","Embed","item_name","item_elt_id","item_embed_html","join","document","ajaxError","e","message","responseText","statusText","Ignore error","wymeditor","skin","basePath","editor_base_path","iframeBasePath","iframe_base_path","boxHtml","TOOLS","IFRAME","STATUS","toolsItems","title","css","wymeditors","save","callback","save_url","page_id","content","xhtml","annotations","JSON","stringify","Object","_","changed","do_close","onbeforeunload","location","page_list_url","Save Changes","Don't Save","containers_menu","items","containersItems","k","v","tagname","make_popupmenu","insert_link_menu_button","Insert History Link","Insert Dataset Link","Insert Workflow Link","Insert Page Link","Insert Visualization Link","embed_object_button","Embed History","Embed Dataset","Embed Workflow","Embed Visualization"],"mappings":"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"}
\ No newline at end of file
+{"version":3,"sources":["galaxy.pages.js"],"names":["init_galaxy_elts","wym","$","_doc","body","each","this","click","range","createRange","selectNodeContents","selection","window","getSelection","removeAllRanges","addRange","get_item_info","dialog_type","item_singular","item_plural","item_controller","CONTROLS","item_class","item_list_action","toLowerCase","ajax_url","list_objects_url","replace","singular","plural","controller","iclass","list_ajax_url","make_item_importable","item_id","item_type","set_accessible_url","ajax","type","url","data","id","accessible","error","alert","ITEM_HISTORY","ITEM_DATASET","ITEM_WORKFLOW","ITEM_PAGE","ITEM_VISUALIZATION","DIALOG_HISTORY_LINK","DIALOG_DATASET_LINK","DIALOG_WORKFLOW_LINK","DIALOG_PAGE_LINK","DIALOG_VISUALIZATION_LINK","DIALOG_EMBED_HISTORY","DIALOG_EMBED_DATASET","DIALOG_EMBED_WORKFLOW","DIALOG_EMBED_PAGE","DIALOG_EMBED_VISUALIZATION","WYMeditor","editor","prototype","dialog","dialogType","dialogFeatures","bodyHtml","set_link_id","text","attribute_input","addClass","removeClass","selected","val","attr","remove","sStamp","uniqueStamp","DIALOG_LINK","_options","hrefSelector","HREF","srcSelector","SRC","titleSelector","TITLE","altSelector","ALT","curURL","curTitle","undefined","show_modal","Make link","sUrl","sId","sName","_exec","CREATE_LINK","link","indexOf","hide_modal","Cancel","DIALOG_IMAGE","_selected_image","dialogImageSelector","Insert","length","INSERT_IMAGE","DIALOG_TABLE","iRows","rowsSelector","iCols","colsSelector","table","createElement","TABLE","newRow","sCaption","captionSelector","newCaption","createCaption","innerHTML","x","insertRow","y","insertCell","summarySelector","node","findUp","container","MAIN_CONTAINERS","get","parentNode","after","append","item_info","success","table_html","make_importable","Array","url_template","get_name_and_link_url","getJSON","returned_item_info","link_text","insert","name","list_html","Embed","item_name","item_elt_id","item_embed_html","join","document","ajaxError","e","message","responseText","statusText","Ignore error","wymeditor","skin","basePath","editor_base_path","iframeBasePath","iframe_base_path","boxHtml","TOOLS","IFRAME","STATUS","toolsItems","title","css","wymeditors","save","callback","save_url","page_id","content","xhtml","annotations","JSON","stringify","Object","_","location","page_list_url","containers_menu","items","containersItems","k","v","tagname","make_popupmenu","insert_link_menu_button","Insert History Link","Insert Dataset Link","Insert Workflow Link","Insert Page Link","Insert Visualization Link","embed_object_button","Embed History","Embed Dataset","Embed Workflow","Embed Visualization"],"mappings":"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","file":"../scripts/galaxy.pages.js","sourcesContent":["\nvar CONTROLS =\n{\n // Item types.\n ITEM_HISTORY : \"item_history\",\n ITEM_DATASET : \"item_dataset\",\n ITEM_WORKFLOW : \"item_workflow\",\n ITEM_PAGE : \"item_page\",\n ITEM_VISUALIZATION : \"item_visualization\",\n\n // Link dialogs.\n DIALOG_HISTORY_LINK : \"link_history\",\n DIALOG_DATASET_LINK : \"link_dataset\",\n DIALOG_WORKFLOW_LINK : \"link_workflow\",\n DIALOG_PAGE_LINK : \"link_page\",\n DIALOG_VISUALIZATION_LINK : \"link_visualization\",\n\n // Embed dialogs.\n DIALOG_EMBED_HISTORY : \"embed_history\",\n DIALOG_EMBED_DATASET : \"embed_dataset\",\n DIALOG_EMBED_WORKFLOW : \"embed_workflow\",\n DIALOG_EMBED_PAGE : \"embed_page\",\n DIALOG_EMBED_VISUALIZATION : \"embed_visualization\"\n};\n\n// Initialize Galaxy elements.\nfunction init_galaxy_elts(wym)\n{\n // Set up events to make annotation easy.\n $('.annotation', wym._doc.body).each( function()\n {\n $(this).click( function() {\n // Works in Safari, not in Firefox.\n var range = wym._doc.createRange();\n range.selectNodeContents( this );\n var selection = window.getSelection();\n selection.removeAllRanges();\n selection.addRange(range);\n var t = \"\";\n });\n });\n\n};\n\n// Based on the dialog type, return a dictionary of information about an item\nfunction get_item_info( dialog_type )\n{\n var\n item_singular,\n item_plural,\n item_controller;\n switch( dialog_type ) {\n case( CONTROLS.ITEM_HISTORY ):\n item_singular = \"History\";\n item_plural = \"Histories\";\n item_controller = \"history\";\n item_class = \"History\";\n break;\n case( CONTROLS.ITEM_DATASET ):\n item_singular = \"Dataset\";\n item_plural = \"Datasets\";\n item_controller = \"dataset\";\n item_class = \"HistoryDatasetAssociation\";\n break;\n case( CONTROLS.ITEM_WORKFLOW ):\n item_singular = \"Workflow\";\n item_plural = \"Workflows\";\n item_controller = \"workflow\";\n item_class = \"StoredWorkflow\";\n break;\n case( CONTROLS.ITEM_PAGE ):\n item_singular = \"Page\";\n item_plural = \"Pages\";\n item_controller = \"page\";\n item_class = \"Page\";\n break;\n case( CONTROLS.ITEM_VISUALIZATION ):\n item_singular = \"Visualization\";\n item_plural = \"Visualizations\";\n item_controller = \"visualization\";\n item_class = \"Visualization\";\n break;\n }\n\n // Build ajax URL that lists items for selection.\n var item_list_action = \"list_\" + item_plural.toLowerCase() + \"_for_selection\";\n var ajax_url = list_objects_url.replace( \"LIST_ACTION\", item_list_action );\n\n // Set up and return dict.\n return {\n singular : item_singular,\n plural : item_plural,\n controller : item_controller,\n iclass : item_class,\n list_ajax_url : ajax_url\n };\n};\n\n// Make an item importable.\nfunction make_item_importable( item_controller, item_id, item_type )\n{\n ajax_url = set_accessible_url.replace( \"ITEM_CONTROLLER\", item_controller );\n $.ajax({\n type: \"POST\",\n url: ajax_url,\n data: { id: item_id, accessible: 'True' },\n error: function() { alert(\"Making \" + item_type + \" accessible failed\"); }\n });\n};\n\n// Completely replace WYM's dialog handling\nWYMeditor.editor.prototype.dialog = function( dialogType, dialogFeatures, bodyHtml ) {\n\n var wym = this;\n var sStamp = wym.uniqueStamp();\n var selected = wym.selected();\n\n // Swap out URL attribute for id/name attribute in link creation to enable anchor creation in page.\n function set_link_id()\n {\n // When \"set link id\" link clicked, update UI.\n $('#set_link_id').click( function()\n {\n // Set label.\n $(\"#link_attribute_label\").text(\"ID/Name\");\n\n // Set input elt class, value.\n var attribute_input = $(\".wym_href\");\n attribute_input.addClass(\"wym_id\").removeClass(\"wym_href\");\n if (selected)\n attribute_input.val( $(selected).attr('id') );\n\n // Remove link.\n $(this).remove();\n });\n }\n\n // LINK DIALOG\n if ( dialogType == WYMeditor.DIALOG_LINK ) {\n if(selected) {\n $(wym._options.hrefSelector).val($(selected).attr(WYMeditor.HREF));\n $(wym._options.srcSelector).val($(selected).attr(WYMeditor.SRC));\n $(wym._options.titleSelector).val($(selected).attr(WYMeditor.TITLE));\n $(wym._options.altSelector).val($(selected).attr(WYMeditor.ALT));\n }\n // Get current URL, title.\n var curURL, curTitle;\n if (selected)\n {\n curURL = $(selected).attr(\"href\");\n if (curURL == undefined)\n curURL = \"\";\n curTitle = $(selected).attr(\"title\");\n if (curTitle == undefined)\n curTitle = \"\";\n }\n show_modal(\n \"Create Link\",\n \"
\",\n \"Embedded Galaxy \", item_info.singular, \" '\", item_name, \"'\",\n \"
\",\n \"\",\n \"[Do not edit this block; Galaxy will fill it in with the annotated \",\n item_info.singular.toLowerCase(), \" when it is displayed.]\",\n \"
\",\n \"\"\n + WYMeditor.TOOLS\n + \" |
| \"\n + \" \"\n // + WYMeditor.HTML\n + WYMeditor.IFRAME\n + WYMeditor.STATUS\n + \" \"\n + \"\"\n + \" |
Sparkline: 1,4,6,6,8,5,3,5
\n* $('.sparkline').sparkline();\n* There must be no spaces in the enclosed data set\n*\n* Otherwise values must be an array of numbers or null values\n*Sparkline: This text replaced if the browser is compatible
\n* $('#sparkline1').sparkline([1,4,6,6,8,5,3,5])\n* $('#sparkline2').sparkline([1,4,6,null,null,5,3,5])\n*\n* Values can also be specified in an HTML comment, or as a values attribute:\n*Sparkline:
\n*Sparkline:
\n* $('.sparkline').sparkline();\n*\n* For line charts, x values can also be specified:\n*Sparkline: 1:1,2.7:4,3.4:6,5:6,6:8,8.7:5,9:3,10:5
\n* $('#sparkline1').sparkline([ [1,1], [2.7,4], [3.4,6], [5,6], [6,8], [8.7,5], [9,3], [10,5] ])\n*\n* By default, options should be passed in as teh second argument to the sparkline function:\n* $('.sparkline').sparkline([1,2,3,4], {type: 'bar'})\n*\n* Options can also be set by passing them on the tag itself. This feature is disabled by default though\n* as there's a slight performance overhead:\n* $('.sparkline').sparkline([1,2,3,4], {enableTagOptions: true})\n*Sparkline: loading
\n* Prefix all options supplied as tag attribute with \"spark\" (configurable by setting tagOptionPrefix)\n*\n* Supported options:\n* lineColor - Color of the line used for the chart\n* fillColor - Color used to fill in the chart - Set to '' or false for a transparent chart\n* width - Width of the chart - Defaults to 3 times the number of values in pixels\n* height - Height of the chart - Defaults to the height of the containing element\n* chartRangeMin - Specify the minimum value to use for the Y range of the chart - Defaults to the minimum value supplied\n* chartRangeMax - Specify the maximum value to use for the Y range of the chart - Defaults to the maximum value supplied\n* chartRangeClip - Clip out of range values to the max/min specified by chartRangeMin and chartRangeMax\n* chartRangeMinX - Specify the minimum value to use for the X range of the chart - Defaults to the minimum value supplied\n* chartRangeMaxX - Specify the maximum value to use for the X range of the chart - Defaults to the maximum value supplied\n* composite - If true then don't erase any existing chart attached to the tag, but draw\n* another chart over the top - Note that width and height are ignored if an\n* existing chart is detected.\n* tagValuesAttribute - Name of tag attribute to check for data values - Defaults to 'values'\n* enableTagOptions - Whether to check tags for sparkline options\n* tagOptionPrefix - Prefix used for options supplied as tag attributes - Defaults to 'spark'\n* disableHiddenCheck - If set to true, then the plugin will assume that charts will never be drawn into a\n* hidden dom element, avoding a browser reflow\n* disableInteraction - If set to true then all mouseover/click interaction behaviour will be disabled,\n* making the plugin perform much like it did in 1.x\n* disableTooltips - If set to true then tooltips will be disabled - Defaults to false (tooltips enabled)\n* disableHighlight - If set to true then highlighting of selected chart elements on mouseover will be disabled\n* defaults to false (highlights enabled)\n* highlightLighten - Factor to lighten/darken highlighted chart values by - Defaults to 1.4 for a 40% increase\n* tooltipContainer - Specify which DOM element the tooltip should be rendered into - defaults to document.body\n* tooltipClassname - Optional CSS classname to apply to tooltips - If not specified then a default style will be applied\n* tooltipOffsetX - How many pixels away from the mouse pointer to render the tooltip on the X axis\n* tooltipOffsetY - How many pixels away from the mouse pointer to render the tooltip on the r axis\n* tooltipFormatter - Optional callback that allows you to override the HTML displayed in the tooltip\n* callback is given arguments of (sparkline, options, fields)\n* tooltipChartTitle - If specified then the tooltip uses the string specified by this setting as a title\n* tooltipFormat - A format string or SPFormat object (or an array thereof for multiple entries)\n* to control the format of the tooltip\n* tooltipPrefix - A string to prepend to each field displayed in a tooltip\n* tooltipSuffix - A string to append to each field displayed in a tooltip\n* tooltipSkipNull - If true then null values will not have a tooltip displayed (defaults to true)\n* tooltipValueLookups - An object or range map to map field values to tooltip strings\n* (eg. to map -1 to \"Lost\", 0 to \"Draw\", and 1 to \"Win\")\n* numberFormatter - Optional callback for formatting numbers in tooltips\n* numberDigitGroupSep - Character to use for group separator in numbers \"1,234\" - Defaults to \",\"\n* numberDecimalMark - Character to use for the decimal point when formatting numbers - Defaults to \".\"\n* numberDigitGroupCount - Number of digits between group separator - Defaults to 3\n*\n* There are 7 types of sparkline, selected by supplying a \"type\" option of 'line' (default),\n* 'bar', 'tristate', 'bullet', 'discrete', 'pie' or 'box'\n* line - Line chart. Options:\n* spotColor - Set to '' to not end each line in a circular spot\n* minSpotColor - If set, color of spot at minimum value\n* maxSpotColor - If set, color of spot at maximum value\n* spotRadius - Radius in pixels\n* lineWidth - Width of line in pixels\n* normalRangeMin\n* normalRangeMax - If set draws a filled horizontal bar between these two values marking the \"normal\"\n* or expected range of values\n* normalRangeColor - Color to use for the above bar\n* drawNormalOnTop - Draw the normal range above the chart fill color if true\n* defaultPixelsPerValue - Defaults to 3 pixels of width for each value in the chart\n* highlightSpotColor - The color to use for drawing a highlight spot on mouseover - Set to null to disable\n* highlightLineColor - The color to use for drawing a highlight line on mouseover - Set to null to disable\n* valueSpots - Specify which points to draw spots on, and in which color. Accepts a range map\n*\n* bar - Bar chart. Options:\n* barColor - Color of bars for postive values\n* negBarColor - Color of bars for negative values\n* zeroColor - Color of bars with zero values\n* nullColor - Color of bars with null values - Defaults to omitting the bar entirely\n* barWidth - Width of bars in pixels\n* colorMap - Optional mappnig of values to colors to override the *BarColor values above\n* can be an Array of values to control the color of individual bars or a range map\n* to specify colors for individual ranges of values\n* barSpacing - Gap between bars in pixels\n* zeroAxis - Centers the y-axis around zero if true\n*\n* tristate - Charts values of win (>0), lose (<0) or draw (=0)\n* posBarColor - Color of win values\n* negBarColor - Color of lose values\n* zeroBarColor - Color of draw values\n* barWidth - Width of bars in pixels\n* barSpacing - Gap between bars in pixels\n* colorMap - Optional mappnig of values to colors to override the *BarColor values above\n* can be an Array of values to control the color of individual bars or a range map\n* to specify colors for individual ranges of values\n*\n* discrete - Options:\n* lineHeight - Height of each line in pixels - Defaults to 30% of the graph height\n* thesholdValue - Values less than this value will be drawn using thresholdColor instead of lineColor\n* thresholdColor\n*\n* bullet - Values for bullet graphs msut be in the order: target, performance, range1, range2, range3, ...\n* options:\n* targetColor - The color of the vertical target marker\n* targetWidth - The width of the target marker in pixels\n* performanceColor - The color of the performance measure horizontal bar\n* rangeColors - Colors to use for each qualitative range background color\n*\n* pie - Pie chart. Options:\n* sliceColors - An array of colors to use for pie slices\n* offset - Angle in degrees to offset the first slice - Try -90 or +90\n* borderWidth - Width of border to draw around the pie chart, in pixels - Defaults to 0 (no border)\n* borderColor - Color to use for the pie chart border - Defaults to #000\n*\n* box - Box plot. Options:\n* raw - Set to true to supply pre-computed plot points as values\n* values should be: low_outlier, low_whisker, q1, median, q3, high_whisker, high_outlier\n* When set to false you can supply any number of values and the box plot will\n* be computed for you. Default is false.\n* showOutliers - Set to true (default) to display outliers as circles\n* outlierIQR - Interquartile range used to determine outliers. Default 1.5\n* boxLineColor - Outline color of the box\n* boxFillColor - Fill color for the box\n* whiskerColor - Line color used for whiskers\n* outlierLineColor - Outline color of outlier circles\n* outlierFillColor - Fill color of the outlier circles\n* spotRadius - Radius of outlier circles\n* medianColor - Line color of the median line\n* target - Draw a target cross hair at the supplied value (default undefined)\n*\n*\n*\n* Examples:\n* $('#sparkline1').sparkline(myvalues, { lineColor: '#f00', fillColor: false });\n* $('.barsparks').sparkline('html', { type:'bar', height:'40px', barWidth:5 });\n* $('#tristate').sparkline([1,1,-1,1,0,0,-1], { type:'tristate' }):\n* $('#discrete').sparkline([1,3,4,5,5,3,4,5], { type:'discrete' });\n* $('#bullet').sparkline([10,12,12,9,7], { type:'bullet' });\n* $('#pie').sparkline([1,1,2], { type:'pie' });\n*/\n\n/*jslint regexp: true, browser: true, jquery: true, white: true, nomen: false, plusplus: false, maxerr: 500, indent: 4 */\n\n(function(document, Math, undefined) { // performance/minified-size optimization\n(function(factory) {\n if(typeof define === 'function' && define.amd) {\n define(['jquery'], factory);\n } else if (jQuery && !jQuery.fn.sparkline) {\n factory(jQuery);\n }\n}\n(function($) {\n 'use strict';\n\n var UNSET_OPTION = {},\n getDefaults, createClass, SPFormat, clipval, quartile, normalizeValue, normalizeValues,\n remove, isNumber, all, sum, addCSS, ensureArray, formatNumber, RangeMap,\n MouseHandler, Tooltip, barHighlightMixin,\n line, bar, tristate, discrete, bullet, pie, box, defaultStyles, initStyles,\n VShape, VCanvas_base, VCanvas_canvas, VCanvas_vml, pending, shapeCount = 0;\n\n /**\n * Default configuration settings\n */\n getDefaults = function () {\n return {\n // Settings common to most/all chart types\n common: {\n type: 'line',\n lineColor: '#00f',\n fillColor: '#cdf',\n defaultPixelsPerValue: 3,\n width: 'auto',\n height: 'auto',\n composite: false,\n tagValuesAttribute: 'values',\n tagOptionsPrefix: 'spark',\n enableTagOptions: false,\n enableHighlight: true,\n highlightLighten: 1.4,\n tooltipSkipNull: true,\n tooltipPrefix: '',\n tooltipSuffix: '',\n disableHiddenCheck: false,\n numberFormatter: false,\n numberDigitGroupCount: 3,\n numberDigitGroupSep: ',',\n numberDecimalMark: '.',\n disableTooltips: false,\n disableInteraction: false\n },\n // Defaults for line charts\n line: {\n spotColor: '#f80',\n highlightSpotColor: '#5f5',\n highlightLineColor: '#f22',\n spotRadius: 1.5,\n minSpotColor: '#f80',\n maxSpotColor: '#f80',\n lineWidth: 1,\n normalRangeMin: undefined,\n normalRangeMax: undefined,\n normalRangeColor: '#ccc',\n drawNormalOnTop: false,\n chartRangeMin: undefined,\n chartRangeMax: undefined,\n chartRangeMinX: undefined,\n chartRangeMaxX: undefined,\n tooltipFormat: new SPFormat('● {{prefix}}{{y}}{{suffix}}')\n },\n // Defaults for bar charts\n bar: {\n barColor: '#3366cc',\n negBarColor: '#f44',\n stackedBarColor: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',\n '#dd4477', '#0099c6', '#990099'],\n zeroColor: undefined,\n nullColor: undefined,\n zeroAxis: true,\n barWidth: 4,\n barSpacing: 1,\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n chartRangeClip: false,\n colorMap: undefined,\n tooltipFormat: new SPFormat('● {{prefix}}{{value}}{{suffix}}')\n },\n // Defaults for tristate charts\n tristate: {\n barWidth: 4,\n barSpacing: 1,\n posBarColor: '#6f6',\n negBarColor: '#f44',\n zeroBarColor: '#999',\n colorMap: {},\n tooltipFormat: new SPFormat('● {{value:map}}'),\n tooltipValueLookups: { map: { '-1': 'Loss', '0': 'Draw', '1': 'Win' } }\n },\n // Defaults for discrete charts\n discrete: {\n lineHeight: 'auto',\n thresholdColor: undefined,\n thresholdValue: 0,\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n chartRangeClip: false,\n tooltipFormat: new SPFormat('{{prefix}}{{value}}{{suffix}}')\n },\n // Defaults for bullet charts\n bullet: {\n targetColor: '#f33',\n targetWidth: 3, // width of the target bar in pixels\n performanceColor: '#33f',\n rangeColors: ['#d3dafe', '#a8b6ff', '#7f94ff'],\n base: undefined, // set this to a number to change the base start number\n tooltipFormat: new SPFormat('{{fieldkey:fields}} - {{value}}'),\n tooltipValueLookups: { fields: {r: 'Range', p: 'Performance', t: 'Target'} }\n },\n // Defaults for pie charts\n pie: {\n offset: 0,\n sliceColors: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',\n '#dd4477', '#0099c6', '#990099'],\n borderWidth: 0,\n borderColor: '#000',\n tooltipFormat: new SPFormat('● {{value}} ({{percent.1}}%)')\n },\n // Defaults for box plots\n box: {\n raw: false,\n boxLineColor: '#000',\n boxFillColor: '#cdf',\n whiskerColor: '#000',\n outlierLineColor: '#333',\n outlierFillColor: '#fff',\n medianColor: '#f00',\n showOutliers: true,\n outlierIQR: 1.5,\n spotRadius: 1.5,\n target: undefined,\n targetColor: '#4a2',\n chartRangeMax: undefined,\n chartRangeMin: undefined,\n tooltipFormat: new SPFormat('{{field:fields}}: {{value}}'),\n tooltipFormatFieldlistKey: 'field',\n tooltipValueLookups: { fields: { lq: 'Lower Quartile', med: 'Median',\n uq: 'Upper Quartile', lo: 'Left Outlier', ro: 'Right Outlier',\n lw: 'Left Whisker', rw: 'Right Whisker'} }\n }\n };\n };\n\n // You can have tooltips use a css class other than jqstooltip by specifying tooltipClassname\n defaultStyles = '.jqstooltip { ' +\n 'position: absolute;' +\n 'left: 0px;' +\n 'top: 0px;' +\n 'visibility: hidden;' +\n 'background: rgb(0, 0, 0) transparent;' +\n 'background-color: rgba(0,0,0,0.6);' +\n 'filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);' +\n '-ms-filter: \"progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)\";' +\n 'color: white;' +\n 'font: 10px arial, san serif;' +\n 'text-align: left;' +\n 'white-space: nowrap;' +\n 'padding: 5px;' +\n 'border: 1px solid white;' +\n 'z-index: 10000;' +\n '}' +\n '.jqsfield { ' +\n 'color: white;' +\n 'font: 10px arial, san serif;' +\n 'text-align: left;' +\n '}';\n\n /**\n * Utilities\n */\n\n createClass = function (/* [baseclass, [mixin, ...]], definition */) {\n var Class, args;\n Class = function () {\n this.init.apply(this, arguments);\n };\n if (arguments.length > 1) {\n if (arguments[0]) {\n Class.prototype = $.extend(new arguments[0](), arguments[arguments.length - 1]);\n Class._super = arguments[0].prototype;\n } else {\n Class.prototype = arguments[arguments.length - 1];\n }\n if (arguments.length > 2) {\n args = Array.prototype.slice.call(arguments, 1, -1);\n args.unshift(Class.prototype);\n $.extend.apply($, args);\n }\n } else {\n Class.prototype = arguments[0];\n }\n Class.prototype.cls = Class;\n return Class;\n };\n\n /**\n * Wraps a format string for tooltips\n * {{x}}\n * {{x.2}\n * {{x:months}}\n */\n $.SPFormatClass = SPFormat = createClass({\n fre: /\\{\\{([\\w.]+?)(:(.+?))?\\}\\}/g,\n precre: /(\\w+)\\.(\\d+)/,\n\n init: function (format, fclass) {\n this.format = format;\n this.fclass = fclass;\n },\n\n render: function (fieldset, lookups, options) {\n var self = this,\n fields = fieldset,\n match, token, lookupkey, fieldvalue, prec;\n return this.format.replace(this.fre, function () {\n var lookup;\n token = arguments[1];\n lookupkey = arguments[3];\n match = self.precre.exec(token);\n if (match) {\n prec = match[2];\n token = match[1];\n } else {\n prec = false;\n }\n fieldvalue = fields[token];\n if (fieldvalue === undefined) {\n return '';\n }\n if (lookupkey && lookups && lookups[lookupkey]) {\n lookup = lookups[lookupkey];\n if (lookup.get) { // RangeMap\n return lookups[lookupkey].get(fieldvalue) || fieldvalue;\n } else {\n return lookups[lookupkey][fieldvalue] || fieldvalue;\n }\n }\n if (isNumber(fieldvalue)) {\n if (options.get('numberFormatter')) {\n fieldvalue = options.get('numberFormatter')(fieldvalue);\n } else {\n fieldvalue = formatNumber(fieldvalue, prec,\n options.get('numberDigitGroupCount'),\n options.get('numberDigitGroupSep'),\n options.get('numberDecimalMark'));\n }\n }\n return fieldvalue;\n });\n }\n });\n\n // convience method to avoid needing the new operator\n $.spformat = function(format, fclass) {\n return new SPFormat(format, fclass);\n };\n\n clipval = function (val, min, max) {\n if (val < min) {\n return min;\n }\n if (val > max) {\n return max;\n }\n return val;\n };\n\n quartile = function (values, q) {\n var vl;\n if (q === 2) {\n vl = Math.floor(values.length / 2);\n return values.length % 2 ? values[vl] : (values[vl-1] + values[vl]) / 2;\n } else {\n if (values.length % 2 ) { // odd\n vl = (values.length * q + q) / 4;\n return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];\n } else { //even\n vl = (values.length * q + 2) / 4;\n return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];\n\n }\n }\n };\n\n normalizeValue = function (val) {\n var nf;\n switch (val) {\n case 'undefined':\n val = undefined;\n break;\n case 'null':\n val = null;\n break;\n case 'true':\n val = true;\n break;\n case 'false':\n val = false;\n break;\n default:\n nf = parseFloat(val);\n if (val == nf) {\n val = nf;\n }\n }\n return val;\n };\n\n normalizeValues = function (vals) {\n var i, result = [];\n for (i = vals.length; i--;) {\n result[i] = normalizeValue(vals[i]);\n }\n return result;\n };\n\n remove = function (vals, filter) {\n var i, vl, result = [];\n for (i = 0, vl = vals.length; i < vl; i++) {\n if (vals[i] !== filter) {\n result.push(vals[i]);\n }\n }\n return result;\n };\n\n isNumber = function (num) {\n return !isNaN(parseFloat(num)) && isFinite(num);\n };\n\n formatNumber = function (num, prec, groupsize, groupsep, decsep) {\n var p, i;\n num = (prec === false ? parseFloat(num).toString() : num.toFixed(prec)).split('');\n p = (p = $.inArray('.', num)) < 0 ? num.length : p;\n if (p < num.length) {\n num[p] = decsep;\n }\n for (i = p - groupsize; i > 0; i -= groupsize) {\n num.splice(i, 0, groupsep);\n }\n return num.join('');\n };\n\n // determine if all values of an array match a value\n // returns true if the array is empty\n all = function (val, arr, ignoreNull) {\n var i;\n for (i = arr.length; i--; ) {\n if (ignoreNull && arr[i] === null) continue;\n if (arr[i] !== val) {\n return false;\n }\n }\n return true;\n };\n\n // sums the numeric values in an array, ignoring other values\n sum = function (vals) {\n var total = 0, i;\n for (i = vals.length; i--;) {\n total += typeof vals[i] === 'number' ? vals[i] : 0;\n }\n return total;\n };\n\n ensureArray = function (val) {\n return $.isArray(val) ? val : [val];\n };\n\n // http://paulirish.com/2008/bookmarklet-inject-new-css-rules/\n addCSS = function(css) {\n var tag;\n //if ('\\v' == 'v') /* ie only */ {\n if (document.createStyleSheet) {\n document.createStyleSheet().cssText = css;\n } else {\n tag = document.createElement('style');\n tag.type = 'text/css';\n document.getElementsByTagName('head')[0].appendChild(tag);\n tag[(typeof document.body.style.WebkitAppearance == 'string') /* webkit only */ ? 'innerText' : 'innerHTML'] = css;\n }\n };\n\n // Provide a cross-browser interface to a few simple drawing primitives\n $.fn.simpledraw = function (width, height, useExisting, interact) {\n var target, mhandler;\n if (useExisting && (target = this.data('_jqs_vcanvas'))) {\n return target;\n }\n\n if ($.fn.sparkline.canvas === false) {\n // We've already determined that neither Canvas nor VML are available\n return false;\n\n } else if ($.fn.sparkline.canvas === undefined) {\n // No function defined yet -- need to see if we support Canvas or VML\n var el = document.createElement('canvas');\n if (!!(el.getContext && el.getContext('2d'))) {\n // Canvas is available\n $.fn.sparkline.canvas = function(width, height, target, interact) {\n return new VCanvas_canvas(width, height, target, interact);\n };\n } else if (document.namespaces && !document.namespaces.v) {\n // VML is available\n document.namespaces.add('v', 'urn:schemas-microsoft-com:vml', '#default#VML');\n $.fn.sparkline.canvas = function(width, height, target, interact) {\n return new VCanvas_vml(width, height, target);\n };\n } else {\n // Neither Canvas nor VML are available\n $.fn.sparkline.canvas = false;\n return false;\n }\n }\n\n if (width === undefined) {\n width = $(this).innerWidth();\n }\n if (height === undefined) {\n height = $(this).innerHeight();\n }\n\n target = $.fn.sparkline.canvas(width, height, this, interact);\n\n mhandler = $(this).data('_jqs_mhandler');\n if (mhandler) {\n mhandler.registerCanvas(target);\n }\n return target;\n };\n\n $.fn.cleardraw = function () {\n var target = this.data('_jqs_vcanvas');\n if (target) {\n target.reset();\n }\n };\n\n $.RangeMapClass = RangeMap = createClass({\n init: function (map) {\n var key, range, rangelist = [];\n for (key in map) {\n if (map.hasOwnProperty(key) && typeof key === 'string' && key.indexOf(':') > -1) {\n range = key.split(':');\n range[0] = range[0].length === 0 ? -Infinity : parseFloat(range[0]);\n range[1] = range[1].length === 0 ? Infinity : parseFloat(range[1]);\n range[2] = map[key];\n rangelist.push(range);\n }\n }\n this.map = map;\n this.rangelist = rangelist || false;\n },\n\n get: function (value) {\n var rangelist = this.rangelist,\n i, range, result;\n if ((result = this.map[value]) !== undefined) {\n return result;\n }\n if (rangelist) {\n for (i = rangelist.length; i--;) {\n range = rangelist[i];\n if (range[0] <= value && range[1] >= value) {\n return range[2];\n }\n }\n }\n return undefined;\n }\n });\n\n // Convenience function\n $.range_map = function(map) {\n return new RangeMap(map);\n };\n\n MouseHandler = createClass({\n init: function (el, options) {\n var $el = $(el);\n this.$el = $el;\n this.options = options;\n this.currentPageX = 0;\n this.currentPageY = 0;\n this.el = el;\n this.splist = [];\n this.tooltip = null;\n this.over = false;\n this.displayTooltips = !options.get('disableTooltips');\n this.highlightEnabled = !options.get('disableHighlight');\n },\n\n registerSparkline: function (sp) {\n this.splist.push(sp);\n if (this.over) {\n this.updateDisplay();\n }\n },\n\n registerCanvas: function (canvas) {\n var $canvas = $(canvas.canvas);\n this.canvas = canvas;\n this.$canvas = $canvas;\n $canvas.mouseenter($.proxy(this.mouseenter, this));\n $canvas.mouseleave($.proxy(this.mouseleave, this));\n $canvas.click($.proxy(this.mouseclick, this));\n },\n\n reset: function (removeTooltip) {\n this.splist = [];\n if (this.tooltip && removeTooltip) {\n this.tooltip.remove();\n this.tooltip = undefined;\n }\n },\n\n mouseclick: function (e) {\n var clickEvent = $.Event('sparklineClick');\n clickEvent.originalEvent = e;\n clickEvent.sparklines = this.splist;\n this.$el.trigger(clickEvent);\n },\n\n mouseenter: function (e) {\n $(document.body).unbind('mousemove.jqs');\n $(document.body).bind('mousemove.jqs', $.proxy(this.mousemove, this));\n this.over = true;\n this.currentPageX = e.pageX;\n this.currentPageY = e.pageY;\n this.currentEl = e.target;\n if (!this.tooltip && this.displayTooltips) {\n this.tooltip = new Tooltip(this.options);\n this.tooltip.updatePosition(e.pageX, e.pageY);\n }\n this.updateDisplay();\n },\n\n mouseleave: function () {\n $(document.body).unbind('mousemove.jqs');\n var splist = this.splist,\n spcount = splist.length,\n needsRefresh = false,\n sp, i;\n this.over = false;\n this.currentEl = null;\n\n if (this.tooltip) {\n this.tooltip.remove();\n this.tooltip = null;\n }\n\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n if (sp.clearRegionHighlight()) {\n needsRefresh = true;\n }\n }\n\n if (needsRefresh) {\n this.canvas.render();\n }\n },\n\n mousemove: function (e) {\n this.currentPageX = e.pageX;\n this.currentPageY = e.pageY;\n this.currentEl = e.target;\n if (this.tooltip) {\n this.tooltip.updatePosition(e.pageX, e.pageY);\n }\n this.updateDisplay();\n },\n\n updateDisplay: function () {\n var splist = this.splist,\n spcount = splist.length,\n needsRefresh = false,\n offset = this.$canvas.offset(),\n localX = this.currentPageX - offset.left,\n localY = this.currentPageY - offset.top,\n tooltiphtml, sp, i, result, changeEvent;\n if (!this.over) {\n return;\n }\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n result = sp.setRegionHighlight(this.currentEl, localX, localY);\n if (result) {\n needsRefresh = true;\n }\n }\n if (needsRefresh) {\n changeEvent = $.Event('sparklineRegionChange');\n changeEvent.sparklines = this.splist;\n this.$el.trigger(changeEvent);\n if (this.tooltip) {\n tooltiphtml = '';\n for (i = 0; i < spcount; i++) {\n sp = splist[i];\n tooltiphtml += sp.getCurrentRegionTooltip();\n }\n this.tooltip.setContent(tooltiphtml);\n }\n if (!this.disableHighlight) {\n this.canvas.render();\n }\n }\n if (result === null) {\n this.mouseleave();\n }\n }\n });\n\n\n Tooltip = createClass({\n sizeStyle: 'position: static !important;' +\n 'display: block !important;' +\n 'visibility: hidden !important;' +\n 'float: left !important;',\n\n init: function (options) {\n var tooltipClassname = options.get('tooltipClassname', 'jqstooltip'),\n sizetipStyle = this.sizeStyle,\n offset;\n this.container = options.get('tooltipContainer') || document.body;\n this.tooltipOffsetX = options.get('tooltipOffsetX', 10);\n this.tooltipOffsetY = options.get('tooltipOffsetY', 12);\n // remove any previous lingering tooltip\n $('#jqssizetip').remove();\n $('#jqstooltip').remove();\n this.sizetip = $('', {\n id: 'jqssizetip',\n style: sizetipStyle,\n 'class': tooltipClassname\n });\n this.tooltip = $('', {\n id: 'jqstooltip',\n 'class': tooltipClassname\n }).appendTo(this.container);\n // account for the container's location\n offset = this.tooltip.offset();\n this.offsetLeft = offset.left;\n this.offsetTop = offset.top;\n this.hidden = true;\n $(window).unbind('resize.jqs scroll.jqs');\n $(window).bind('resize.jqs scroll.jqs', $.proxy(this.updateWindowDims, this));\n this.updateWindowDims();\n },\n\n updateWindowDims: function () {\n this.scrollTop = $(window).scrollTop();\n this.scrollLeft = $(window).scrollLeft();\n this.scrollRight = this.scrollLeft + $(window).width();\n this.updatePosition();\n },\n\n getSize: function (content) {\n this.sizetip.html(content).appendTo(this.container);\n this.width = this.sizetip.width() + 1;\n this.height = this.sizetip.height();\n this.sizetip.remove();\n },\n\n setContent: function (content) {\n if (!content) {\n this.tooltip.css('visibility', 'hidden');\n this.hidden = true;\n return;\n }\n this.getSize(content);\n this.tooltip.html(content)\n .css({\n 'width': this.width,\n 'height': this.height,\n 'visibility': 'visible'\n });\n if (this.hidden) {\n this.hidden = false;\n this.updatePosition();\n }\n },\n\n updatePosition: function (x, y) {\n if (x === undefined) {\n if (this.mousex === undefined) {\n return;\n }\n x = this.mousex - this.offsetLeft;\n y = this.mousey - this.offsetTop;\n\n } else {\n this.mousex = x = x - this.offsetLeft;\n this.mousey = y = y - this.offsetTop;\n }\n if (!this.height || !this.width || this.hidden) {\n return;\n }\n\n y -= this.height + this.tooltipOffsetY;\n x += this.tooltipOffsetX;\n\n if (y < this.scrollTop) {\n y = this.scrollTop;\n }\n if (x < this.scrollLeft) {\n x = this.scrollLeft;\n } else if (x + this.width > this.scrollRight) {\n x = this.scrollRight - this.width;\n }\n\n this.tooltip.css({\n 'left': x,\n 'top': y\n });\n },\n\n remove: function () {\n this.tooltip.remove();\n this.sizetip.remove();\n this.sizetip = this.tooltip = undefined;\n $(window).unbind('resize.jqs scroll.jqs');\n }\n });\n\n initStyles = function() {\n addCSS(defaultStyles);\n };\n\n $(initStyles);\n\n pending = [];\n $.fn.sparkline = function (userValues, userOptions) {\n return this.each(function () {\n var options = new $.fn.sparkline.options(this, userOptions),\n $this = $(this),\n render, i;\n render = function () {\n var values, width, height, tmp, mhandler, sp, vals;\n if (userValues === 'html' || userValues === undefined) {\n vals = this.getAttribute(options.get('tagValuesAttribute'));\n if (vals === undefined || vals === null) {\n vals = $this.html();\n }\n values = vals.replace(/(^\\s*\\s*$)|\\s+/g, '').split(',');\n } else {\n values = userValues;\n }\n\n width = options.get('width') === 'auto' ? values.length * options.get('defaultPixelsPerValue') : options.get('width');\n if (options.get('height') === 'auto') {\n if (!options.get('composite') || !$.data(this, '_jqs_vcanvas')) {\n // must be a better way to get the line height\n tmp = document.createElement('span');\n tmp.innerHTML = 'a';\n $this.html(tmp);\n height = $(tmp).innerHeight() || $(tmp).height();\n $(tmp).remove();\n tmp = null;\n }\n } else {\n height = options.get('height');\n }\n\n if (!options.get('disableInteraction')) {\n mhandler = $.data(this, '_jqs_mhandler');\n if (!mhandler) {\n mhandler = new MouseHandler(this, options);\n $.data(this, '_jqs_mhandler', mhandler);\n } else if (!options.get('composite')) {\n mhandler.reset();\n }\n } else {\n mhandler = false;\n }\n\n if (options.get('composite') && !$.data(this, '_jqs_vcanvas')) {\n if (!$.data(this, '_jqs_errnotify')) {\n alert('Attempted to attach a composite sparkline to an element with no existing sparkline');\n $.data(this, '_jqs_errnotify', true);\n }\n return;\n }\n\n sp = new $.fn.sparkline[options.get('type')](this, values, options, width, height);\n\n sp.render();\n\n if (mhandler) {\n mhandler.registerSparkline(sp);\n }\n };\n if (($(this).html() && !options.get('disableHiddenCheck') && $(this).is(':hidden')) || !$(this).parents('body').length) {\n if (!options.get('composite') && $.data(this, '_jqs_pending')) {\n // remove any existing references to the element\n for (i = pending.length; i; i--) {\n if (pending[i - 1][0] == this) {\n pending.splice(i - 1, 1);\n }\n }\n }\n pending.push([this, render]);\n $.data(this, '_jqs_pending', true);\n } else {\n render.call(this);\n }\n });\n };\n\n $.fn.sparkline.defaults = getDefaults();\n\n\n $.sparkline_display_visible = function () {\n var el, i, pl;\n var done = [];\n for (i = 0, pl = pending.length; i < pl; i++) {\n el = pending[i][0];\n if ($(el).is(':visible') && !$(el).parents().is(':hidden')) {\n pending[i][1].call(el);\n $.data(pending[i][0], '_jqs_pending', false);\n done.push(i);\n } else if (!$(el).closest('html').length && !$.data(el, '_jqs_pending')) {\n // element has been inserted and removed from the DOM\n // If it was not yet inserted into the dom then the .data request\n // will return true.\n // removing from the dom causes the data to be removed.\n $.data(pending[i][0], '_jqs_pending', false);\n done.push(i);\n }\n }\n for (i = done.length; i; i--) {\n pending.splice(done[i - 1], 1);\n }\n };\n\n\n /**\n * User option handler\n */\n $.fn.sparkline.options = createClass({\n init: function (tag, userOptions) {\n var extendedOptions, defaults, base, tagOptionType;\n this.userOptions = userOptions = userOptions || {};\n this.tag = tag;\n this.tagValCache = {};\n defaults = $.fn.sparkline.defaults;\n base = defaults.common;\n this.tagOptionsPrefix = userOptions.enableTagOptions && (userOptions.tagOptionsPrefix || base.tagOptionsPrefix);\n\n tagOptionType = this.getTagSetting('type');\n if (tagOptionType === UNSET_OPTION) {\n extendedOptions = defaults[userOptions.type || base.type];\n } else {\n extendedOptions = defaults[tagOptionType];\n }\n this.mergedOptions = $.extend({}, base, extendedOptions, userOptions);\n },\n\n\n getTagSetting: function (key) {\n var prefix = this.tagOptionsPrefix,\n val, i, pairs, keyval;\n if (prefix === false || prefix === undefined) {\n return UNSET_OPTION;\n }\n if (this.tagValCache.hasOwnProperty(key)) {\n val = this.tagValCache.key;\n } else {\n val = this.tag.getAttribute(prefix + key);\n if (val === undefined || val === null) {\n val = UNSET_OPTION;\n } else if (val.substr(0, 1) === '[') {\n val = val.substr(1, val.length - 2).split(',');\n for (i = val.length; i--;) {\n val[i] = normalizeValue(val[i].replace(/(^\\s*)|(\\s*$)/g, ''));\n }\n } else if (val.substr(0, 1) === '{') {\n pairs = val.substr(1, val.length - 2).split(',');\n val = {};\n for (i = pairs.length; i--;) {\n keyval = pairs[i].split(':', 2);\n val[keyval[0].replace(/(^\\s*)|(\\s*$)/g, '')] = normalizeValue(keyval[1].replace(/(^\\s*)|(\\s*$)/g, ''));\n }\n } else {\n val = normalizeValue(val);\n }\n this.tagValCache.key = val;\n }\n return val;\n },\n\n get: function (key, defaultval) {\n var tagOption = this.getTagSetting(key),\n result;\n if (tagOption !== UNSET_OPTION) {\n return tagOption;\n }\n return (result = this.mergedOptions[key]) === undefined ? defaultval : result;\n }\n });\n\n\n $.fn.sparkline._base = createClass({\n disabled: false,\n\n init: function (el, values, options, width, height) {\n this.el = el;\n this.$el = $(el);\n this.values = values;\n this.options = options;\n this.width = width;\n this.height = height;\n this.currentRegion = undefined;\n },\n\n /**\n * Setup the canvas\n */\n initTarget: function () {\n var interactive = !this.options.get('disableInteraction');\n if (!(this.target = this.$el.simpledraw(this.width, this.height, this.options.get('composite'), interactive))) {\n this.disabled = true;\n } else {\n this.canvasWidth = this.target.pixelWidth;\n this.canvasHeight = this.target.pixelHeight;\n }\n },\n\n /**\n * Actually render the chart to the canvas\n */\n render: function () {\n if (this.disabled) {\n this.el.innerHTML = '';\n return false;\n }\n return true;\n },\n\n /**\n * Return a region id for a given x/y co-ordinate\n */\n getRegion: function (x, y) {\n },\n\n /**\n * Highlight an item based on the moused-over x,y co-ordinate\n */\n setRegionHighlight: function (el, x, y) {\n var currentRegion = this.currentRegion,\n highlightEnabled = !this.options.get('disableHighlight'),\n newRegion;\n if (x > this.canvasWidth || y > this.canvasHeight || x < 0 || y < 0) {\n return null;\n }\n newRegion = this.getRegion(el, x, y);\n if (currentRegion !== newRegion) {\n if (currentRegion !== undefined && highlightEnabled) {\n this.removeHighlight();\n }\n this.currentRegion = newRegion;\n if (newRegion !== undefined && highlightEnabled) {\n this.renderHighlight();\n }\n return true;\n }\n return false;\n },\n\n /**\n * Reset any currently highlighted item\n */\n clearRegionHighlight: function () {\n if (this.currentRegion !== undefined) {\n this.removeHighlight();\n this.currentRegion = undefined;\n return true;\n }\n return false;\n },\n\n renderHighlight: function () {\n this.changeHighlight(true);\n },\n\n removeHighlight: function () {\n this.changeHighlight(false);\n },\n\n changeHighlight: function (highlight) {},\n\n /**\n * Fetch the HTML to display as a tooltip\n */\n getCurrentRegionTooltip: function () {\n var options = this.options,\n header = '',\n entries = [],\n fields, formats, formatlen, fclass, text, i,\n showFields, showFieldsKey, newFields, fv,\n formatter, format, fieldlen, j;\n if (this.currentRegion === undefined) {\n return '';\n }\n fields = this.getCurrentRegionFields();\n formatter = options.get('tooltipFormatter');\n if (formatter) {\n return formatter(this, options, fields);\n }\n if (options.get('tooltipChartTitle')) {\n header += '