diff --git a/client/galaxy/scripts/galaxy.js b/client/galaxy/scripts/galaxy.js
index 6e9032673e6..e0613f2ea32 100644
--- a/client/galaxy/scripts/galaxy.js
+++ b/client/galaxy/scripts/galaxy.js
@@ -1,25 +1,13 @@
-define(
- [
- "libs/underscore",
- "libs/backbone",
- "mvc/base-mvc",
- "mvc/user/user-model",
- "utils/metrics-logger",
- "utils/add-logging",
- "utils/localization"
- ],
- function(
- _,
- Backbone,
- BASE_MVC,
- userModel,
- metricsLogger,
- addLogging,
- localize
- ) {
- // TODO: move into a singleton pattern and have dependents import Galaxy
- // ============================================================================
- /** Base galaxy client-side application.
+import _ from "libs/underscore";
+import Backbone from "libs/backbone";
+import BASE_MVC from "mvc/base-mvc";
+import userModel from "mvc/user/user-model";
+import metricsLogger from "utils/metrics-logger";
+import addLogging from "utils/add-logging";
+import localize from "utils/localization";
+// TODO: move into a singleton pattern and have dependents import Galaxy
+// ============================================================================
+/** Base galaxy client-side application.
* Iniitializes:
* logger : the logger/metrics-logger
* localize : the string localizer
@@ -27,278 +15,266 @@ define(
* galaxy.ini available from the configuration API)
* user : the current user (as a mvc/user/user-model)
*/
- function GalaxyApp(options, bootstrapped) {
- var self = this;
- return self._init(options || {}, bootstrapped || {});
+function GalaxyApp(options, bootstrapped) {
+ var self = this;
+ return self._init(options || {}, bootstrapped || {});
+}
+
+// add logging shortcuts for this object
+addLogging(GalaxyApp, "GalaxyApp");
+
+// a debug flag can be set via local storage and made available during script/page loading
+var DEBUGGING_KEY = "galaxy:debug",
+ NAMESPACE_KEY = DEBUGGING_KEY + ":namespaces",
+ localDebugging = false;
+try {
+ localDebugging = localStorage.getItem(DEBUGGING_KEY) == "true";
+} catch (storageErr) {
+ console.log(
+ localize("localStorage not available for debug flag retrieval")
+ );
+}
+
+/** initalize options and sub-components */
+GalaxyApp.prototype._init = function __init(options, bootstrapped) {
+ var self = this;
+ _.extend(self, Backbone.Events);
+ if (localDebugging) {
+ self.logger = console;
+ console.debug(
+ "debugging galaxy:",
+ "options:",
+ options,
+ "bootstrapped:",
+ bootstrapped
+ );
+ }
+
+ self._processOptions(options);
+
+ // add root and url parameters
+ self.root = options.root || "/";
+ self.params = options.params || {};
+ self.session_csrf_token = options.session_csrf_token || null;
+
+ self._initConfig(options.config || {});
+ self._patchGalaxy(window.Galaxy);
+
+ self._initLogger(self.options.loggerOptions || {});
+ // at this point, either logging or not and namespaces are enabled - chat it up
+ self.debug("GalaxyApp.options: ", self.options);
+ self.debug("GalaxyApp.config: ", self.config);
+ self.debug("GalaxyApp.logger: ", self.logger);
+
+ self._initLocale();
+ self.debug("GalaxyApp.localize: ", self.localize);
+
+ self.config = options.config || {};
+ self.debug("GalaxyApp.config: ", self.config);
+
+ self._initUser(options.user || {});
+ self.debug("GalaxyApp.user: ", self.user);
+
+ self._setUpListeners();
+ self.trigger("ready", self);
+
+ return self;
+};
+
+/** default options */
+GalaxyApp.prototype.defaultOptions = {
+ /** monkey patch attributes from existing window.Galaxy object? */
+ patchExisting: true,
+ /** root url of this app */
+ root: "/",
+ session_csrf_token: null
+};
+
+/** filter to options present in defaultOptions (and default to them) */
+GalaxyApp.prototype._processOptions = function _processOptions(options) {
+ var self = this,
+ defaults = self.defaultOptions;
+
+ self.options = {};
+ for (var k in defaults) {
+ if (defaults.hasOwnProperty(k)) {
+ self.options[k] = options.hasOwnProperty(k)
+ ? options[k]
+ : defaults[k];
}
+ }
+ return self;
+};
- // add logging shortcuts for this object
- addLogging(GalaxyApp, "GalaxyApp");
+/** parse the config and any extra info derived from it */
+GalaxyApp.prototype._initConfig = function _initConfig(config) {
+ var self = this;
+ self.config = config;
- // a debug flag can be set via local storage and made available during script/page loading
- var DEBUGGING_KEY = "galaxy:debug",
- NAMESPACE_KEY = DEBUGGING_KEY + ":namespaces",
- localDebugging = false;
+ // give precendence to localdebugging for this setting
+ self.config.debug = localDebugging || self.config.debug;
+
+ return self;
+};
+
+/** add an option from options if the key matches an option in defaultOptions */
+GalaxyApp.prototype._patchGalaxy = function _patchGalaxy(patchWith) {
+ var self = this;
+ // in case req or plain script tag order has created a prev. version of the Galaxy obj...
+ if (self.options.patchExisting && patchWith) {
+ // self.debug( 'found existing Galaxy object:', patchWith );
+ // ...(for now) monkey patch any added attributes that the previous Galaxy may have had
+ //TODO: move those attributes to more formal assignment in GalaxyApp
+ for (var k in patchWith) {
+ if (patchWith.hasOwnProperty(k)) {
+ // self.debug( '\t patching in ' + k + ' to Galaxy:', self[ k ] );
+ self[k] = patchWith[k];
+ }
+ }
+ }
+};
+
+/** set up the metrics logger (utils/metrics-logger) and pass loggerOptions */
+GalaxyApp.prototype._initLogger = function _initLogger(loggerOptions) {
+ var self = this;
+
+ // default to console logging at the debug level if the debug flag is set
+ if (self.config.debug) {
+ loggerOptions.consoleLogger = loggerOptions.consoleLogger || console;
+ loggerOptions.consoleLevel =
+ loggerOptions.consoleLevel || metricsLogger.MetricsLogger.ALL;
+ // load any logging namespaces from localStorage if we can
try {
- localDebugging = localStorage.getItem(DEBUGGING_KEY) == "true";
- } catch (storageErr) {
- console.log(
- localize("localStorage not available for debug flag retrieval")
+ loggerOptions.consoleNamespaceWhitelist = localStorage
+ .getItem(NAMESPACE_KEY)
+ .split(",");
+ } catch (storageErr) {}
+ }
+
+ self.logger = new metricsLogger.MetricsLogger(loggerOptions);
+ self.emit = {};
+ ["log", "debug", "info", "warn", "error", "metric"].map(function(i) {
+ self.emit[i] = function(data) {
+ self.logger.emit(
+ i,
+ arguments[0],
+ Array.prototype.slice.call(arguments, 1)
);
+ };
+ });
+
+ if (self.config.debug) {
+ // add this logger to mvc's loggable mixin so that all models can use the logger
+ BASE_MVC.LoggableMixin.logger = self.logger;
+ }
+ return self;
+};
+
+/** add the localize fn to this object and the window namespace (as '_l') */
+GalaxyApp.prototype._initLocale = function _initLocale(options) {
+ var self = this;
+ self.debug("_initLocale:", options);
+ self.localize = localize;
+ // add to window as global shortened alias
+ // TODO: temporary - remove when can require for plugins
+ window._l = self.localize;
+ return self;
+};
+
+/** set up the current user as a Backbone model (mvc/user/user-model) */
+GalaxyApp.prototype._initUser = function _initUser(userJSON) {
+ var self = this;
+ self.debug("_initUser:", userJSON);
+ self.user = new userModel.User(userJSON);
+ self.user.logger = self.logger;
+ return self;
+};
+
+/** Set up DOM/jQuery/Backbone event listeners enabled for all pages */
+GalaxyApp.prototype._setUpListeners = function _setUpListeners() {
+ var self = this;
+
+ // hook to jq beforeSend to record the most recent ajax call and cache some data about it
+ /** cached info about the last ajax call made through jQuery */
+ self.lastAjax = {};
+ $(document).bind("ajaxSend", function(ev, xhr, options) {
+ var data = options.data;
+ try {
+ data = JSON.parse(data);
+ } catch (err) {}
+
+ self.lastAjax = {
+ url: location.href.slice(0, -1) + options.url,
+ data: data
+ };
+ //TODO:?? we might somehow manage to *retry* ajax using either this hook or Backbone.sync
+ });
+ return self;
+};
+
+/** Turn debugging/console-output on/off by passing boolean. Pass nothing to get current setting. */
+GalaxyApp.prototype.debugging = function _debugging(setting) {
+ var self = this;
+ try {
+ if (setting === undefined) {
+ return localStorage.getItem(DEBUGGING_KEY) === "true";
+ }
+ if (setting) {
+ localStorage.setItem(DEBUGGING_KEY, true);
+ return true;
}
- /** initalize options and sub-components */
- GalaxyApp.prototype._init = function __init(options, bootstrapped) {
- var self = this;
- _.extend(self, Backbone.Events);
- if (localDebugging) {
- self.logger = console;
- console.debug(
- "debugging galaxy:",
- "options:",
- options,
- "bootstrapped:",
- bootstrapped
- );
- }
+ localStorage.removeItem(DEBUGGING_KEY);
+ // also remove all namespaces
+ self.debuggingNamespaces(null);
+ } catch (storageErr) {
+ console.log(
+ localize("localStorage not available for debug flag retrieval")
+ );
+ }
+ return false;
+};
- self._processOptions(options);
-
- // add root and url parameters
- self.root = options.root || "/";
- self.params = options.params || {};
- self.session_csrf_token = options.session_csrf_token || null;
-
- self._initConfig(options.config || {});
- self._patchGalaxy(window.Galaxy);
-
- self._initLogger(self.options.loggerOptions || {});
- // at this point, either logging or not and namespaces are enabled - chat it up
- self.debug("GalaxyApp.options: ", self.options);
- self.debug("GalaxyApp.config: ", self.config);
- self.debug("GalaxyApp.logger: ", self.logger);
-
- self._initLocale();
- self.debug("GalaxyApp.localize: ", self.localize);
-
- self.config = options.config || {};
- self.debug("GalaxyApp.config: ", self.config);
-
- self._initUser(options.user || {});
- self.debug("GalaxyApp.user: ", self.user);
-
- self._setUpListeners();
- self.trigger("ready", self);
-
- return self;
- };
-
- /** default options */
- GalaxyApp.prototype.defaultOptions = {
- /** monkey patch attributes from existing window.Galaxy object? */
- patchExisting: true,
- /** root url of this app */
- root: "/",
- session_csrf_token: null
- };
-
- /** filter to options present in defaultOptions (and default to them) */
- GalaxyApp.prototype._processOptions = function _processOptions(
- options
- ) {
- var self = this,
- defaults = self.defaultOptions;
-
- self.options = {};
- for (var k in defaults) {
- if (defaults.hasOwnProperty(k)) {
- self.options[k] = options.hasOwnProperty(k)
- ? options[k]
- : defaults[k];
- }
- }
- return self;
- };
-
- /** parse the config and any extra info derived from it */
- GalaxyApp.prototype._initConfig = function _initConfig(config) {
- var self = this;
- self.config = config;
-
- // give precendence to localdebugging for this setting
- self.config.debug = localDebugging || self.config.debug;
-
- return self;
- };
-
- /** add an option from options if the key matches an option in defaultOptions */
- GalaxyApp.prototype._patchGalaxy = function _patchGalaxy(patchWith) {
- var self = this;
- // in case req or plain script tag order has created a prev. version of the Galaxy obj...
- if (self.options.patchExisting && patchWith) {
- // self.debug( 'found existing Galaxy object:', patchWith );
- // ...(for now) monkey patch any added attributes that the previous Galaxy may have had
- //TODO: move those attributes to more formal assignment in GalaxyApp
- for (var k in patchWith) {
- if (patchWith.hasOwnProperty(k)) {
- // self.debug( '\t patching in ' + k + ' to Galaxy:', self[ k ] );
- self[k] = patchWith[k];
- }
- }
- }
- };
-
- /** set up the metrics logger (utils/metrics-logger) and pass loggerOptions */
- GalaxyApp.prototype._initLogger = function _initLogger(loggerOptions) {
- var self = this;
-
- // default to console logging at the debug level if the debug flag is set
- if (self.config.debug) {
- loggerOptions.consoleLogger =
- loggerOptions.consoleLogger || console;
- loggerOptions.consoleLevel =
- loggerOptions.consoleLevel ||
- metricsLogger.MetricsLogger.ALL;
- // load any logging namespaces from localStorage if we can
- try {
- loggerOptions.consoleNamespaceWhitelist = localStorage
- .getItem(NAMESPACE_KEY)
- .split(",");
- } catch (storageErr) {}
- }
-
- self.logger = new metricsLogger.MetricsLogger(loggerOptions);
- self.emit = {};
- ["log", "debug", "info", "warn", "error", "metric"].map(function(
- i
- ) {
- self.emit[i] = function(data) {
- self.logger.emit(
- i,
- arguments[0],
- Array.prototype.slice.call(arguments, 1)
- );
- };
- });
-
- if (self.config.debug) {
- // add this logger to mvc's loggable mixin so that all models can use the logger
- BASE_MVC.LoggableMixin.logger = self.logger;
- }
- return self;
- };
-
- /** add the localize fn to this object and the window namespace (as '_l') */
- GalaxyApp.prototype._initLocale = function _initLocale(options) {
- var self = this;
- self.debug("_initLocale:", options);
- self.localize = localize;
- // add to window as global shortened alias
- // TODO: temporary - remove when can require for plugins
- window._l = self.localize;
- return self;
- };
-
- /** set up the current user as a Backbone model (mvc/user/user-model) */
- GalaxyApp.prototype._initUser = function _initUser(userJSON) {
- var self = this;
- self.debug("_initUser:", userJSON);
- self.user = new userModel.User(userJSON);
- self.user.logger = self.logger;
- return self;
- };
-
- /** Set up DOM/jQuery/Backbone event listeners enabled for all pages */
- GalaxyApp.prototype._setUpListeners = function _setUpListeners() {
- var self = this;
-
- // hook to jq beforeSend to record the most recent ajax call and cache some data about it
- /** cached info about the last ajax call made through jQuery */
- self.lastAjax = {};
- $(document).bind("ajaxSend", function(ev, xhr, options) {
- var data = options.data;
- try {
- data = JSON.parse(data);
- } catch (err) {}
-
- self.lastAjax = {
- url: location.href.slice(0, -1) + options.url,
- data: data
- };
- //TODO:?? we might somehow manage to *retry* ajax using either this hook or Backbone.sync
- });
- return self;
- };
-
- /** Turn debugging/console-output on/off by passing boolean. Pass nothing to get current setting. */
- GalaxyApp.prototype.debugging = function _debugging(setting) {
- var self = this;
- try {
- if (setting === undefined) {
- return localStorage.getItem(DEBUGGING_KEY) === "true";
- }
- if (setting) {
- localStorage.setItem(DEBUGGING_KEY, true);
- return true;
- }
-
- localStorage.removeItem(DEBUGGING_KEY);
- // also remove all namespaces
- self.debuggingNamespaces(null);
- } catch (storageErr) {
- console.log(
- localize(
- "localStorage not available for debug flag retrieval"
- )
- );
- }
- return false;
- };
-
- /** Add, remove, or clear namespaces from the debugging filters
+/** Add, remove, or clear namespaces from the debugging filters
* Pass no arguments to retrieve the existing namespaces as an array.
* Pass in null to clear all namespaces (all logging messages will show now).
* Pass in an array of strings or single string of the namespaces to filter to.
* Returns the new/current namespaces as an array;
*/
- GalaxyApp.prototype.debuggingNamespaces = function _debuggingNamespaces(
- namespaces
- ) {
- var self = this;
- try {
- if (namespaces === undefined) {
- var csv = localStorage.getItem(NAMESPACE_KEY);
- return typeof csv === "string" ? csv.split(",") : [];
- } else if (namespaces === null) {
- localStorage.removeItem(NAMESPACE_KEY);
- } else {
- localStorage.setItem(NAMESPACE_KEY, namespaces);
- }
- var newSettings = self.debuggingNamespaces();
- if (self.logger) {
- self.logger.options.consoleNamespaceWhitelist = newSettings;
- }
- return newSettings;
- } catch (storageErr) {
- console.log(
- localize(
- "localStorage not available for debug namespace retrieval"
- )
- );
- }
- };
-
- /** string rep */
- GalaxyApp.prototype.toString = function toString() {
- var userEmail = this.user
- ? this.user.get("email") || "(anonymous)"
- : "uninitialized";
- return "GalaxyApp(" + userEmail + ")";
- };
-
- // ============================================================================
- return {
- GalaxyApp: GalaxyApp
- };
+GalaxyApp.prototype.debuggingNamespaces = function _debuggingNamespaces(
+ namespaces
+) {
+ var self = this;
+ try {
+ if (namespaces === undefined) {
+ var csv = localStorage.getItem(NAMESPACE_KEY);
+ return typeof csv === "string" ? csv.split(",") : [];
+ } else if (namespaces === null) {
+ localStorage.removeItem(NAMESPACE_KEY);
+ } else {
+ localStorage.setItem(NAMESPACE_KEY, namespaces);
+ }
+ var newSettings = self.debuggingNamespaces();
+ if (self.logger) {
+ self.logger.options.consoleNamespaceWhitelist = newSettings;
+ }
+ return newSettings;
+ } catch (storageErr) {
+ console.log(
+ localize("localStorage not available for debug namespace retrieval")
+ );
}
-);
+};
+
+/** string rep */
+GalaxyApp.prototype.toString = function toString() {
+ var userEmail = this.user
+ ? this.user.get("email") || "(anonymous)"
+ : "uninitialized";
+ return "GalaxyApp(" + userEmail + ")";
+};
+
+// ============================================================================
+export default {
+ GalaxyApp: GalaxyApp
+};
diff --git a/client/galaxy/scripts/onload.js b/client/galaxy/scripts/onload.js
index 989a3755196..81abd35aee0 100644
--- a/client/galaxy/scripts/onload.js
+++ b/client/galaxy/scripts/onload.js
@@ -22,7 +22,7 @@ window.async_save_text = async_save_text;
import POPUPMENU from "ui/popupmenu";
window.make_popupmenu = POPUPMENU.make_popupmenu;
window.make_popup_menus = POPUPMENU.make_popup_menus;
-import init_tag_click_function from 'ui/autocom_tagging';
+import init_tag_click_function from "ui/autocom_tagging";
window.init_tag_click_function = init_tag_click_function;
import TOURS from "mvc/tours";
import QUERY_STRING from "utils/query-string-parsing";
diff --git a/static/maps/galaxy.js.map b/static/maps/galaxy.js.map
index ffb32ad0bfd..d3a2678d1c8 100644
--- a/static/maps/galaxy.js.map
+++ b/static/maps/galaxy.js.map
@@ -1 +1 @@
-{"version":3,"sources":["galaxy.js"],"names":["define","_","Backbone","BASE_MVC","userModel","metricsLogger","addLogging","localize","console","bootstrapped","this","_init","options","extend","NAMESPACE_KEY","DEBUGGING_KEY","localDebugging","self","localStorage","getItem","debug","storageErr","root","GalaxyApp","prototype","_initLogger","Events","_initLocale","config","trigger","params","session_csrf_token","_initConfig","_patchGalaxy","window","Galaxy","loggerOptions","logger","defaults","defaultOptions","user","_processOptions","k","hasOwnProperty","patchWith","patchExisting","MetricsLogger","consoleLogger","consoleLevel","_l","ALL","consoleNamespaceWhitelist","_initUser","split","data","emit","map","i","arguments","lastAjax","slice","call","userJSON","User","removeItem","_setUpListeners","$","document","bind","ev","xhr","JSON","parse","namespaces","undefined","url","csv","setting","newSettings","setItem","userEmail","debuggingNamespaces","log","toString","get"],"mappings":"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","file":"../scripts/galaxy.js","sourcesContent":["define(\n [\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 ],\n function(\n _,\n Backbone,\n BASE_MVC,\n userModel,\n metricsLogger,\n addLogging,\n 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 */\n function GalaxyApp(options, bootstrapped) {\n var self = this;\n return self._init(options || {}, bootstrapped || {});\n }\n\n // add logging shortcuts for this object\n addLogging(GalaxyApp, \"GalaxyApp\");\n\n // a debug flag can be set via local storage and made available during script/page loading\n var DEBUGGING_KEY = \"galaxy:debug\",\n NAMESPACE_KEY = DEBUGGING_KEY + \":namespaces\",\n localDebugging = false;\n try {\n localDebugging = localStorage.getItem(DEBUGGING_KEY) == \"true\";\n } catch (storageErr) {\n console.log(\n localize(\"localStorage not available for debug flag retrieval\")\n );\n }\n\n /** initalize options and sub-components */\n GalaxyApp.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(\n \"debugging galaxy:\",\n \"options:\",\n options,\n \"bootstrapped:\",\n bootstrapped\n );\n }\n\n self._processOptions(options);\n\n // add root and url parameters\n self.root = options.root || \"/\";\n self.params = options.params || {};\n self.session_csrf_token = options.session_csrf_token || null;\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 */\n GalaxyApp.prototype.defaultOptions = {\n /** monkey patch attributes from existing window.Galaxy object? */\n patchExisting: true,\n /** root url of this app */\n root: \"/\",\n session_csrf_token: null\n };\n\n /** filter to options present in defaultOptions (and default to them) */\n GalaxyApp.prototype._processOptions = function _processOptions(\n options\n ) {\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)\n ? options[k]\n : defaults[k];\n }\n }\n return self;\n };\n\n /** parse the config and any extra info derived from it */\n GalaxyApp.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 */\n GalaxyApp.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 */\n GalaxyApp.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 =\n loggerOptions.consoleLogger || console;\n loggerOptions.consoleLevel =\n loggerOptions.consoleLevel ||\n metricsLogger.MetricsLogger.ALL;\n // load any logging namespaces from localStorage if we can\n try {\n loggerOptions.consoleNamespaceWhitelist = localStorage\n .getItem(NAMESPACE_KEY)\n .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(\n i\n ) {\n self.emit[i] = function(data) {\n self.logger.emit(\n i,\n arguments[0],\n Array.prototype.slice.call(arguments, 1)\n );\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') */\n GalaxyApp.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) */\n GalaxyApp.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 */\n GalaxyApp.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. */\n GalaxyApp.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 } catch (storageErr) {\n console.log(\n localize(\n \"localStorage not available for debug flag retrieval\"\n )\n );\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 */\n GalaxyApp.prototype.debuggingNamespaces = function _debuggingNamespaces(\n namespaces\n ) {\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(\n localize(\n \"localStorage not available for debug namespace retrieval\"\n )\n );\n }\n };\n\n /** string rep */\n GalaxyApp.prototype.toString = function toString() {\n var userEmail = this.user\n ? this.user.get(\"email\") || \"(anonymous)\"\n : \"uninitialized\";\n return \"GalaxyApp(\" + userEmail + \")\";\n };\n\n // ============================================================================\n return {\n GalaxyApp: GalaxyApp\n };\n }\n);\n"]}
\ No newline at end of file
+{"version":3,"sources":["galaxy.js"],"names":["GalaxyApp","options","bootstrapped","this","_init","_addLogging2","default","NAMESPACE_KEY","DEBUGGING_KEY","localDebugging","localStorage","getItem","storageErr","console","log","_localization2","prototype","self","_underscore2","extend","_backbone2","Events","logger","debug","root","session_csrf_token","_initConfig","config","_initLogger","loggerOptions","_processOptions","_patchGalaxy","Galaxy","user","defaultOptions","_initUser","_setUpListeners","defaults","patchExisting","hasOwnProperty","k","patchWith","consoleLogger","consoleLevel","_metricsLogger2","MetricsLogger","ALL","split","emit","map","i","consoleNamespaceWhitelist","arguments","slice","call","_baseMvc2","LoggableMixin","_initLocale","localize","userJSON","lastAjax","$","document","bind","ev","xhr","data","JSON","parse","url","location","href","debugging","setting","removeItem","debuggingNamespaces","namespaces","csv","setItem","newSettings","toString","get"],"mappings":"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","file":"../scripts/galaxy.js","sourcesContent":["import _ from \"libs/underscore\";\nimport Backbone from \"libs/backbone\";\nimport BASE_MVC from \"mvc/base-mvc\";\nimport userModel from \"mvc/user/user-model\";\nimport metricsLogger from \"utils/metrics-logger\";\nimport addLogging from \"utils/add-logging\";\nimport localize from \"utils/localization\";\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(\n localize(\"localStorage not available for debug flag retrieval\")\n );\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(\n \"debugging galaxy:\",\n \"options:\",\n options,\n \"bootstrapped:\",\n bootstrapped\n );\n }\n\n self._processOptions(options);\n\n // add root and url parameters\n self.root = options.root || \"/\";\n self.params = options.params || {};\n self.session_csrf_token = options.session_csrf_token || null;\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 session_csrf_token: null\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)\n ? options[k]\n : 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 =\n loggerOptions.consoleLevel || metricsLogger.MetricsLogger.ALL;\n // load any logging namespaces from localStorage if we can\n try {\n loggerOptions.consoleNamespaceWhitelist = localStorage\n .getItem(NAMESPACE_KEY)\n .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(\n i,\n arguments[0],\n Array.prototype.slice.call(arguments, 1)\n );\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 } catch (storageErr) {\n console.log(\n localize(\"localStorage not available for debug flag retrieval\")\n );\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(\n namespaces\n) {\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(\n localize(\"localStorage not available for debug namespace retrieval\")\n );\n }\n};\n\n/** string rep */\nGalaxyApp.prototype.toString = function toString() {\n var userEmail = this.user\n ? this.user.get(\"email\") || \"(anonymous)\"\n : \"uninitialized\";\n return \"GalaxyApp(\" + userEmail + \")\";\n};\n\n// ============================================================================\nexport default {\n GalaxyApp: GalaxyApp\n};\n"]}
\ No newline at end of file
diff --git a/static/maps/onload.js.map b/static/maps/onload.js.map
index feeb10a38f4..84ed6f03266 100644
--- a/static/maps/onload.js.map
+++ b/static/maps/onload.js.map
@@ -1 +1 @@
-{"version":3,"sources":["onload.js"],"names":["replace_big_select_inputs","min_length","max_length","select_elts","refresh_select2","element","panels","placeholder","closeOnSelect","$","is","dropdownAutoWidth","containerCssClass","window","async_save_text","options","jQuery","fn","select2","undefined","num_options","select_elt","find","length","init_refresh_on_change","off","change","select_field","this","select_val","val","ref_on_change_vals","attr","split","last_selected_value","inArray","document","trigger","submit","click","refresh","get","form","confirm","_","Backbone","_panel2","default","extend","_modal2","_asyncSaveText2","make_popupmenu","_popupmenu2","make_popup_menus","init_tag_click_function","_autocom_tagging2","webhooks","each","webhook","activate","script","type","onloadWebhooks","appendTo","setTimeout","tooltip","placement","anchor","galaxy_main_exists","parent","frames","galaxy_main","href","et","JSON","parse","sessionStorage","getItem","steps","hooked_tour_from_data","tour","Tour","tour_opts","init","restart"],"mappings":"oOAkCA,SAASA,EAA0BC,EAAYC,EAAYC,GAtB3D,SAAAC,EAAAC,GAwBQ,IAtBDC,GAwBKC,YAAa,kBAtBzBC,eAoByBC,EAAEJ,GApB3BK,GAAA,cAwBYC,mBAAmB,EAtB/BC,kBAAA,oBAEAC,OAAOC,EAAAA,QAAPC,GA2BSC,OAAOC,GAAGC,eAjBnBC,IAAAlB,IACAA,EAAA,SAEAkB,IAAAjB,IACAA,EAASF,MAGDG,EAAIY,GAAUN,EAAA,WAEVD,KAAAA,WACAG,IAAAA,EAAAA,EAAAA,MAAAA,IAAmB,cAHTS,EAAdC,EAAAC,KAAA,UAAAC,OAMAH,EAAOf,GAAgBU,EAAvBb,GAIAmB,EAAWH,SAAS,oBAiCpBd,EAAgBiB,MAjBhB,SAAAG,IACAf,EAAA,oCACAgB,IAAA,UACIC,OAAA,WACH,IAAAC,EAAAlB,EAAAmB,MAuBOC,EAAaF,EAAaG,MApB9BC,EAAAJ,EAAAK,KACH,4BAED,GAAAD,EAAA,CAuBQA,EAAqBA,EAAmBE,MAAM,KAC9C,IAAIC,EAAsBP,EAAaK,KACnC,uBAEJ,IACmD,IAA/CvB,EAAE0B,QAAQN,EAAYE,KArBlC,IAAA3B,EAAAA,QAAgBiB,EAAhBU,GAEP,OAGDtB,EAASe,QAAAA,QAAAA,qBACHf,EAAA2B,UAAAC,QAAA,qBAGMV,EAAIA,IAAAA,GAAelB,KAAA6B,WAMnB7B,EAAA,uCACIsB,IAAAA,SACAQ,MAAA,WAGA,IAAAZ,EACcE,EAAAA,MAGVA,EAAAF,EAAAG,MAEPC,EAAAJ,EAAAK,KACD,4BAEAL,GAAAA,EAAA,CAvBRI,EAAAA,EAAAE,MAAA,KAsCY,IAAIC,EAAsBP,EAAaK,KAZnD,uBAIYL,IAAJ,IACIE,EAAAA,QAAaF,EAAaG,KAD9B,IAEIU,EAAAA,QAAUN,EAFdH,GAMIA,OAKAtB,EAAAI,QACMsB,QAAQN,qBAGVF,EAAAc,IAAA,GAAAC,KAAAJ,WAIRX,EAAAA,cAtBRF,IAAA,SA4BKc,MAAM,WAHX,OAAAI,QAAAlC,EAAAmB,MAAAI,KAAA,iEApIJnB,OAAA,OAAmBG,OACnBH,OAAOJ,EAAIO,OACXH,OAAO+B,EAAIA,EACX/B,OAAOgC,SAAWA,SAKlBhC,OAAOP,OAAPwC,EAAAC,QAIAH,EAAEI,OAAOnC,OAAToC,EAAAF,SAEAlC,OAAOC,gBAAPoC,EAAAH,QAEAlC,OAAOsC,eAAiBC,EAAAL,QAAUI,eAtBlCtC,OAAAwC,iBAAAD,EAAAL,QAAAM,iBAEAxC,OAAAyC,wBAAAC,EAAAR,QA8IClC,OAAAW,uBAAAA,EAEDX,EAAAA,UAAOW,MAAAA,WAkEKf,SAAAA,SAGW+C,IAAPZ,OAAAA,KAEQnC,EAAAA,QAAAA,OAAAA,KAAE,0BAAqB,SAGvBA,GAIPmC,EAAAa,KATDD,EAAA,SAAAE,GAHJA,EAAAC,UAAAD,EAAAE,SAcGnD,EAAA,aAAAoD,KAAA,oBACQC,KAAAA,EAAXF,QACHG,SAAA,QACJtD,EAAA,YAAAoD,KAAA,aACDC,KAAAA,EAAAA,QAlFJC,SAAA,aA+EYC,WAAWF,EAAgB,KA/EvCrD,IAKQA,EAAEQ,GAAGgD,UAATxD,EAAA,iCAAkBwD,SAAAC,UAAA,WAIdzD,EAAA,WAAAwD,WAGHZ,mBAKDrD,EAA0B,GAAI,MAE9BS,EAAA,KAAA8B,MAAA,WACA,IAAA4B,EAAA1D,EAAAmB,MACEwC,EAAsBC,OAAAC,QAAAD,OAAAC,OAAAC,YACpB,GAAA,eAAAJ,EAAIA,KAAAA,YAAJC,EAAA,CACA,IAAIA,EAAAA,EAAAA,KAAAA,SACA,GAAAD,EAAAA,QAAY,KACZK,GAAIA,IAEAA,GAAAA,IAEAA,GAAAA,kBACHL,EAAAnC,KAAA,OAAAwC,GACDA,EAAAA,KAAQ,SAAA,SAERL,OAAAA,IAGP,IAAAM,EAfDC,KAAAC,MAAAC,eAAAC,QAAA,qBAkBA,GAAIJ,IADJA,EAAIA,EAAAA,QAAKC,sBAAWE,KACZH,EAAAK,OACJL,QAAK5D,OAAMkE,OAAAA,OAAAA,IAAN,CAKG,IAAAC,EAAA,IAAAC,KACArC,EAAAI,QAIY8B,MAAUA,EAAAA,OAKtBE,EAAAA,QAAAE,YAGPF,EAAAG,OACJH,EAAAI,UAuBDtB","file":"../scripts/onload.js","sourcesContent":["// ============================================================================\n// Globals (temporary)\n// ============================================================================\n// HACK: add these to global scope until we stop asking for them there...\n// Via webpack: these are required here automatically by the provider plugin\n// Via script tag: these are redundant (identities) since they're already global\nwindow[\"jQuery\"] = jQuery; // a weird form to prevent webpack from sub'ing 'window.jQuery' in the provider plugin\nwindow.$ = jQuery;\nwindow._ = _;\nwindow.Backbone = Backbone;\n// console.debug('globals loaded:', window.jQuery, window.Backbone, '...');\n\n// these are galaxy globals not defined in the provider (although they could be - but why encourage that?)\nimport Panel from \"layout/panel\";\nwindow.panels = Panel;\n\n// using extend bc there are multiple fns/objs to decorate the window with\nimport layout_modal from \"layout/modal\";\n_.extend(window, layout_modal);\nimport async_save_text from \"utils/async-save-text\";\nwindow.async_save_text = async_save_text;\nimport POPUPMENU from \"ui/popupmenu\";\nwindow.make_popupmenu = POPUPMENU.make_popupmenu;\nwindow.make_popup_menus = POPUPMENU.make_popup_menus;\nimport init_tag_click_function from 'ui/autocom_tagging';\nwindow.init_tag_click_function = init_tag_click_function;\nimport TOURS from \"mvc/tours\";\nimport QUERY_STRING from \"utils/query-string-parsing\";\n// console.debug( 'galaxy globals loaded' );\n\n// ============================================================================\n// jquery on document ready\n// ============================================================================\n// Replace select box with a text input box + autocomplete.\nfunction replace_big_select_inputs(min_length, max_length, select_elts) {\n function refresh_select2(element) {\n var select_elt = $(element);\n var options = {\n placeholder: \"Click to select\",\n closeOnSelect: !select_elt.is(\"[MULTIPLE]\"),\n dropdownAutoWidth: true,\n containerCssClass: \"select2-minwidth\"\n };\n return element.select2(options);\n }\n\n // To do replace, the select2 plugin must be loaded.\n if (!jQuery.fn.select2) {\n return;\n }\n\n // Set default for min_length and max_length\n if (min_length === undefined) {\n min_length = 20;\n }\n if (max_length === undefined) {\n max_length = 3000;\n }\n\n select_elts = select_elts || $(\"select\");\n\n select_elts.each(function() {\n var select_elt = $(this).not(\"[multiple]\");\n // Make sure that options is within range.\n var num_options = select_elt.find(\"option\").length;\n if (num_options < min_length || num_options > max_length) {\n return;\n }\n\n if (select_elt.hasClass(\"no-autocomplete\")) {\n return;\n }\n\n /* Replaced jQuery.autocomplete with select2, notes:\n * - multiple selects are supported\n * - the original element is updated with the value, convert_to_values should not be needed\n * - events are fired when updating the original element, so refresh_on_change should just work\n *\n * - should we still sort dbkey fields here?\n */\n refresh_select2(select_elt);\n });\n}\n\n// Initialize refresh events.\nfunction init_refresh_on_change() {\n $(\"select[refresh_on_change='true']\")\n .off(\"change\")\n .change(function() {\n var select_field = $(this),\n select_val = select_field.val(),\n refresh = false,\n ref_on_change_vals = select_field.attr(\n \"refresh_on_change_values\"\n );\n if (ref_on_change_vals) {\n ref_on_change_vals = ref_on_change_vals.split(\",\");\n var last_selected_value = select_field.attr(\n \"last_selected_value\"\n );\n if (\n $.inArray(select_val, ref_on_change_vals) === -1 &&\n $.inArray(last_selected_value, ref_on_change_vals) === -1\n ) {\n return;\n }\n }\n $(window).trigger(\"refresh_on_change\");\n $(document).trigger(\"convert_to_values\"); // Convert autocomplete text to values\n select_field.get(0).form.submit();\n });\n\n // checkboxes refresh on change\n $(\":checkbox[refresh_on_change='true']\")\n .off(\"click\")\n .click(function() {\n var select_field = $(this),\n select_val = select_field.val(),\n refresh = false,\n ref_on_change_vals = select_field.attr(\n \"refresh_on_change_values\"\n );\n if (ref_on_change_vals) {\n ref_on_change_vals = ref_on_change_vals.split(\",\");\n var last_selected_value = select_field.attr(\n \"last_selected_value\"\n );\n if (\n $.inArray(select_val, ref_on_change_vals) === -1 &&\n $.inArray(last_selected_value, ref_on_change_vals) === -1\n ) {\n return;\n }\n }\n $(window).trigger(\"refresh_on_change\");\n select_field.get(0).form.submit();\n });\n\n // Links with confirmation\n $(\"a[confirm]\")\n .off(\"click\")\n .click(function() {\n return confirm($(this).attr(\"confirm\"));\n });\n}\n// used globally in grid-view\nwindow.init_refresh_on_change = init_refresh_on_change;\n\n$(document).ready(function() {\n // Refresh events for form fields.\n init_refresh_on_change();\n\n // Tooltips\n if ($.fn.tooltip) {\n // Put tooltips below items in panel header so that they do not overlap masthead.\n $(\".unified-panel-header [title]\").tooltip({ placement: \"bottom\" });\n\n // default tooltip initialization, it will follow the data-placement tag for tooltip location\n // and fallback to 'top' if not present\n $(\"[title]\").tooltip();\n }\n // Make popup menus.\n make_popup_menus();\n\n // Replace big selects.\n replace_big_select_inputs(20, 1500);\n\n // If galaxy_main frame does not exist and link targets galaxy_main,\n // add use_panels=True and set target to self.\n $(\"a\").click(function() {\n var anchor = $(this);\n var galaxy_main_exists = parent.frames && parent.frames.galaxy_main;\n if (anchor.attr(\"target\") == \"galaxy_main\" && !galaxy_main_exists) {\n var href = anchor.attr(\"href\");\n if (href.indexOf(\"?\") == -1) {\n href += \"?\";\n } else {\n href += \"&\";\n }\n href += \"use_panels=True\";\n anchor.attr(\"href\", href);\n anchor.attr(\"target\", \"_self\");\n }\n return anchor;\n });\n\n var et = JSON.parse(sessionStorage.getItem(\"activeGalaxyTour\"));\n if (et) {\n et = TOURS.hooked_tour_from_data(et);\n if (et && et.steps) {\n if (window && window.self === window.top) {\n // Only kick off a new tour if this is the toplevel window (non-iframe). This\n // functionality actually *could* be useful, but we'd need to handle it better and\n // come up with some design guidelines for tours jumping between windows.\n // Disabling for now.\n var tour = new Tour(\n _.extend(\n {\n steps: et.steps\n },\n TOURS.tour_opts\n )\n );\n tour.init();\n tour.restart();\n }\n }\n }\n\n function onloadWebhooks() {\n if (Galaxy.root !== undefined) {\n // Load all webhooks with the type 'onload'\n $.getJSON(Galaxy.root + \"api/webhooks/onload/all\", function(\n webhooks\n ) {\n _.each(webhooks, function(webhook) {\n if (webhook.activate && webhook.script) {\n $(\"\", { type: \"text/javascript\" })\n .text(webhook.script)\n .appendTo(\"head\");\n $(\"\", { type: \"text/css\" })\n .text(webhook.styles)\n .appendTo(\"head\");\n }\n });\n });\n } else {\n setTimeout(onloadWebhooks, 100);\n }\n }\n onloadWebhooks();\n});\n"]}
\ No newline at end of file
+{"version":3,"sources":["onload.js"],"names":["replace_big_select_inputs","min_length","max_length","select_elts","refresh_select2","element","panels","placeholder","closeOnSelect","$","is","dropdownAutoWidth","containerCssClass","window","async_save_text","options","jQuery","fn","select2","undefined","num_options","select_elt","find","length","init_refresh_on_change","off","change","select_field","this","select_val","val","ref_on_change_vals","attr","split","last_selected_value","inArray","document","trigger","submit","click","refresh","get","form","confirm","_","Backbone","_panel2","default","extend","_modal2","_asyncSaveText2","make_popupmenu","_popupmenu2","make_popup_menus","init_tag_click_function","_autocom_tagging2","webhooks","each","webhook","activate","script","type","onloadWebhooks","appendTo","setTimeout","tooltip","placement","anchor","galaxy_main_exists","parent","frames","galaxy_main","href","et","JSON","parse","sessionStorage","getItem","steps","hooked_tour_from_data","tour","Tour","tour_opts","init","restart"],"mappings":"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","file":"../scripts/onload.js","sourcesContent":["// ============================================================================\n// Globals (temporary)\n// ============================================================================\n// HACK: add these to global scope until we stop asking for them there...\n// Via webpack: these are required here automatically by the provider plugin\n// Via script tag: these are redundant (identities) since they're already global\nwindow[\"jQuery\"] = jQuery; // a weird form to prevent webpack from sub'ing 'window.jQuery' in the provider plugin\nwindow.$ = jQuery;\nwindow._ = _;\nwindow.Backbone = Backbone;\n// console.debug('globals loaded:', window.jQuery, window.Backbone, '...');\n\n// these are galaxy globals not defined in the provider (although they could be - but why encourage that?)\nimport Panel from \"layout/panel\";\nwindow.panels = Panel;\n\n// using extend bc there are multiple fns/objs to decorate the window with\nimport layout_modal from \"layout/modal\";\n_.extend(window, layout_modal);\nimport async_save_text from \"utils/async-save-text\";\nwindow.async_save_text = async_save_text;\nimport POPUPMENU from \"ui/popupmenu\";\nwindow.make_popupmenu = POPUPMENU.make_popupmenu;\nwindow.make_popup_menus = POPUPMENU.make_popup_menus;\nimport init_tag_click_function from \"ui/autocom_tagging\";\nwindow.init_tag_click_function = init_tag_click_function;\nimport TOURS from \"mvc/tours\";\nimport QUERY_STRING from \"utils/query-string-parsing\";\n// console.debug( 'galaxy globals loaded' );\n\n// ============================================================================\n// jquery on document ready\n// ============================================================================\n// Replace select box with a text input box + autocomplete.\nfunction replace_big_select_inputs(min_length, max_length, select_elts) {\n function refresh_select2(element) {\n var select_elt = $(element);\n var options = {\n placeholder: \"Click to select\",\n closeOnSelect: !select_elt.is(\"[MULTIPLE]\"),\n dropdownAutoWidth: true,\n containerCssClass: \"select2-minwidth\"\n };\n return element.select2(options);\n }\n\n // To do replace, the select2 plugin must be loaded.\n if (!jQuery.fn.select2) {\n return;\n }\n\n // Set default for min_length and max_length\n if (min_length === undefined) {\n min_length = 20;\n }\n if (max_length === undefined) {\n max_length = 3000;\n }\n\n select_elts = select_elts || $(\"select\");\n\n select_elts.each(function() {\n var select_elt = $(this).not(\"[multiple]\");\n // Make sure that options is within range.\n var num_options = select_elt.find(\"option\").length;\n if (num_options < min_length || num_options > max_length) {\n return;\n }\n\n if (select_elt.hasClass(\"no-autocomplete\")) {\n return;\n }\n\n /* Replaced jQuery.autocomplete with select2, notes:\n * - multiple selects are supported\n * - the original element is updated with the value, convert_to_values should not be needed\n * - events are fired when updating the original element, so refresh_on_change should just work\n *\n * - should we still sort dbkey fields here?\n */\n refresh_select2(select_elt);\n });\n}\n\n// Initialize refresh events.\nfunction init_refresh_on_change() {\n $(\"select[refresh_on_change='true']\")\n .off(\"change\")\n .change(function() {\n var select_field = $(this),\n select_val = select_field.val(),\n refresh = false,\n ref_on_change_vals = select_field.attr(\n \"refresh_on_change_values\"\n );\n if (ref_on_change_vals) {\n ref_on_change_vals = ref_on_change_vals.split(\",\");\n var last_selected_value = select_field.attr(\n \"last_selected_value\"\n );\n if (\n $.inArray(select_val, ref_on_change_vals) === -1 &&\n $.inArray(last_selected_value, ref_on_change_vals) === -1\n ) {\n return;\n }\n }\n $(window).trigger(\"refresh_on_change\");\n $(document).trigger(\"convert_to_values\"); // Convert autocomplete text to values\n select_field.get(0).form.submit();\n });\n\n // checkboxes refresh on change\n $(\":checkbox[refresh_on_change='true']\")\n .off(\"click\")\n .click(function() {\n var select_field = $(this),\n select_val = select_field.val(),\n refresh = false,\n ref_on_change_vals = select_field.attr(\n \"refresh_on_change_values\"\n );\n if (ref_on_change_vals) {\n ref_on_change_vals = ref_on_change_vals.split(\",\");\n var last_selected_value = select_field.attr(\n \"last_selected_value\"\n );\n if (\n $.inArray(select_val, ref_on_change_vals) === -1 &&\n $.inArray(last_selected_value, ref_on_change_vals) === -1\n ) {\n return;\n }\n }\n $(window).trigger(\"refresh_on_change\");\n select_field.get(0).form.submit();\n });\n\n // Links with confirmation\n $(\"a[confirm]\")\n .off(\"click\")\n .click(function() {\n return confirm($(this).attr(\"confirm\"));\n });\n}\n// used globally in grid-view\nwindow.init_refresh_on_change = init_refresh_on_change;\n\n$(document).ready(function() {\n // Refresh events for form fields.\n init_refresh_on_change();\n\n // Tooltips\n if ($.fn.tooltip) {\n // Put tooltips below items in panel header so that they do not overlap masthead.\n $(\".unified-panel-header [title]\").tooltip({ placement: \"bottom\" });\n\n // default tooltip initialization, it will follow the data-placement tag for tooltip location\n // and fallback to 'top' if not present\n $(\"[title]\").tooltip();\n }\n // Make popup menus.\n make_popup_menus();\n\n // Replace big selects.\n replace_big_select_inputs(20, 1500);\n\n // If galaxy_main frame does not exist and link targets galaxy_main,\n // add use_panels=True and set target to self.\n $(\"a\").click(function() {\n var anchor = $(this);\n var galaxy_main_exists = parent.frames && parent.frames.galaxy_main;\n if (anchor.attr(\"target\") == \"galaxy_main\" && !galaxy_main_exists) {\n var href = anchor.attr(\"href\");\n if (href.indexOf(\"?\") == -1) {\n href += \"?\";\n } else {\n href += \"&\";\n }\n href += \"use_panels=True\";\n anchor.attr(\"href\", href);\n anchor.attr(\"target\", \"_self\");\n }\n return anchor;\n });\n\n var et = JSON.parse(sessionStorage.getItem(\"activeGalaxyTour\"));\n if (et) {\n et = TOURS.hooked_tour_from_data(et);\n if (et && et.steps) {\n if (window && window.self === window.top) {\n // Only kick off a new tour if this is the toplevel window (non-iframe). This\n // functionality actually *could* be useful, but we'd need to handle it better and\n // come up with some design guidelines for tours jumping between windows.\n // Disabling for now.\n var tour = new Tour(\n _.extend(\n {\n steps: et.steps\n },\n TOURS.tour_opts\n )\n );\n tour.init();\n tour.restart();\n }\n }\n }\n\n function onloadWebhooks() {\n if (Galaxy.root !== undefined) {\n // Load all webhooks with the type 'onload'\n $.getJSON(Galaxy.root + \"api/webhooks/onload/all\", function(\n webhooks\n ) {\n _.each(webhooks, function(webhook) {\n if (webhook.activate && webhook.script) {\n $(\"\", { type: \"text/javascript\" })\n .text(webhook.script)\n .appendTo(\"head\");\n $(\"\", { type: \"text/css\" })\n .text(webhook.styles)\n .appendTo(\"head\");\n }\n });\n });\n } else {\n setTimeout(onloadWebhooks, 100);\n }\n }\n onloadWebhooks();\n});\n"]}
\ No newline at end of file
diff --git a/static/scripts/bundled/libs.bundled.js b/static/scripts/bundled/libs.bundled.js
index 4c86ce27ee7..a7cd4ce9c11 100644
--- a/static/scripts/bundled/libs.bundled.js
+++ b/static/scripts/bundled/libs.bundled.js
@@ -21,7 +21,7 @@
*
* Date: 2015-10-17
*/
-function(t){function e(t,e,i,n){var o,s,r,a,u,h,d,p,f=e&&e.ownerDocument,g=e?e.nodeType:9;if(i=i||[],"string"!=typeof t||!t||1!==g&&9!==g&&11!==g)return i;if(!n&&((e?e.ownerDocument||e:H)!==M&&D(e),e=e||M,P)){if(11!==g&&(h=gt.exec(t)))if(o=h[1]){if(9===g){if(!(r=e.getElementById(o)))return i;if(r.id===o)return i.push(r),i}else if(f&&(r=f.getElementById(o))&&I(e,r)&&r.id===o)return i.push(r),i}else{if(h[2])return J.apply(i,e.getElementsByTagName(t)),i;if((o=h[3])&&b.getElementsByClassName&&e.getElementsByClassName)return J.apply(i,e.getElementsByClassName(o)),i}if(b.qsa&&!z[t+" "]&&(!j||!j.test(t))){if(1!==g)f=e,p=t;else if("object"!==e.nodeName.toLowerCase()){for((a=e.getAttribute("id"))?a=a.replace(vt,"\\$&"):e.setAttribute("id",a=L),d=C(t),s=d.length,u=ct.test(a)?"#"+a:"[id='"+a+"']";s--;)d[s]=u+" "+c(d[s]);p=d.join(","),f=mt.test(t)&&l(e.parentNode)||e}if(p)try{return J.apply(i,f.querySelectorAll(p)),i}catch(t){}finally{a===L&&e.removeAttribute("id")}}}return k(t.replace(st,"$1"),e,i,n)}function i(){function t(i,n){return e.push(i+" ")>w.cacheLength&&delete t[e.shift()],t[i+" "]=n}var e=[];return t}function n(t){return t[L]=!0,t}function o(t){var e=M.createElement("div");try{return!!t(e)}catch(t){return!1}finally{e.parentNode&&e.parentNode.removeChild(e),e=null}}function s(t,e){for(var i=t.split("|"),n=i.length;n--;)w.attrHandle[i[n]]=e}function r(t,e){var i=e&&t,n=i&&1===t.nodeType&&1===e.nodeType&&(~e.sourceIndex||U)-(~t.sourceIndex||U);if(n)return n;if(i)for(;i=i.nextSibling;)if(i===e)return-1;return t?1:-1}function a(t){return n(function(e){return e=+e,n(function(i,n){for(var o,s=t([],i.length,e),r=s.length;r--;)i[o=s[r]]&&(i[o]=!(n[o]=i[o]))})})}function l(t){return t&&void 0!==t.getElementsByTagName&&t}function u(){}function c(t){for(var e=0,i=t.length,n="";e1?function(e,i,n){for(var o=t.length;o--;)if(!t[o](e,i,n))return!1;return!0}:t[0]}function p(t,i,n){for(var o=0,s=i.length;o-1&&(n[u]=!(r[u]=h))}}else b=f(b===r?b.splice(m,b.length):b),s?s(null,r,b,l):J.apply(r,b)})}function m(t){for(var e,i,n,o=t.length,s=w.relative[t[0].type],r=s||w.relative[" "],a=s?1:0,l=h(function(t){return t===e},r,!0),u=h(function(t){return Q(e,t)>-1},r,!0),p=[function(t,i,n){var o=!s&&(n||i!==T)||((e=i).nodeType?l(t,i,n):u(t,i,n));return e=null,o}];a1&&d(p),a>1&&c(t.slice(0,a-1).concat({value:" "===t[a-2].type?"*":""})).replace(st,"$1"),i,a0,s=t.length>0,r=function(n,r,a,l,u){var c,h,d,p=0,g="0",m=n&&[],v=[],y=T,b=n||s&&w.find.TAG("*",u),_=$+=null==y?1:Math.random()||.1,x=b.length;for(u&&(T=r===M||r||u);g!==x&&null!=(c=b[g]);g++){if(s&&c){for(h=0,r||c.ownerDocument===M||(D(c),a=!P);d=t[h++];)if(d(c,r||M,a)){l.push(c);break}u&&($=_)}o&&((c=!d&&c)&&p--,n&&m.push(c))}if(p+=g,o&&g!==p){for(h=0;d=i[h++];)d(m,v,r,a);if(n){if(p>0)for(;g--;)m[g]||v[g]||(v[g]=X.call(l));v=f(v)}J.apply(l,v),u&&!n&&v.length>0&&p+i.length>1&&e.uniqueSort(l)}return u&&($=_,T=y),m};return o?n(r):r}var y,b,w,_,x,C,S,k,T,E,A,D,M,O,P,j,R,N,I,L="sizzle"+1*new Date,H=t.document,$=0,F=0,q=i(),W=i(),z=i(),B=function(t,e){return t===e&&(A=!0),0},U=1<<31,V={}.hasOwnProperty,G=[],X=G.pop,Y=G.push,J=G.push,K=G.slice,Q=function(t,e){for(var i=0,n=t.length;i+~]|"+tt+")"+tt+"*"),lt=new RegExp("="+tt+"*([^\\]'\"]*?)"+tt+"*\\]","g"),ut=new RegExp(nt),ct=new RegExp("^"+et+"$"),ht={ID:new RegExp("^#("+et+")"),CLASS:new RegExp("^\\.("+et+")"),TAG:new RegExp("^("+et+"|[*])"),ATTR:new RegExp("^"+it),PSEUDO:new RegExp("^"+nt),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+tt+"*(even|odd|(([+-]|)(\\d*)n|)"+tt+"*(?:([+-]|)"+tt+"*(\\d+)|))"+tt+"*\\)|)","i"),bool:new RegExp("^(?:"+Z+")$","i"),needsContext:new RegExp("^"+tt+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+tt+"*((?:-\\d)?\\d*)"+tt+"*\\)|)(?=[^-]|$)","i")},dt=/^(?:input|select|textarea|button)$/i,pt=/^h\d$/i,ft=/^[^{]+\{\s*\[native \w/,gt=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,mt=/[+~]/,vt=/'|\\/g,yt=new RegExp("\\\\([\\da-f]{1,6}"+tt+"?|("+tt+")|.)","ig"),bt=function(t,e,i){var n="0x"+e-65536;return n!==n||i?e:n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320)},wt=function(){D()};try{J.apply(G=K.call(H.childNodes),H.childNodes),G[H.childNodes.length].nodeType}catch(t){J={apply:G.length?function(t,e){Y.apply(t,K.call(e))}:function(t,e){for(var i=t.length,n=0;t[i++]=e[n++];);t.length=i-1}}}b=e.support={},x=e.isXML=function(t){var e=t&&(t.ownerDocument||t).documentElement;return!!e&&"HTML"!==e.nodeName},D=e.setDocument=function(t){var e,i,n=t?t.ownerDocument||t:H;return n!==M&&9===n.nodeType&&n.documentElement?(M=n,O=M.documentElement,P=!x(M),(i=M.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",wt,!1):i.attachEvent&&i.attachEvent("onunload",wt)),b.attributes=o(function(t){return t.className="i",!t.getAttribute("className")}),b.getElementsByTagName=o(function(t){return t.appendChild(M.createComment("")),!t.getElementsByTagName("*").length}),b.getElementsByClassName=ft.test(M.getElementsByClassName),b.getById=o(function(t){return O.appendChild(t).id=L,!M.getElementsByName||!M.getElementsByName(L).length}),b.getById?(w.find.ID=function(t,e){if(void 0!==e.getElementById&&P){var i=e.getElementById(t);return i?[i]:[]}},w.filter.ID=function(t){var e=t.replace(yt,bt);return function(t){return t.getAttribute("id")===e}}):(delete w.find.ID,w.filter.ID=function(t){var e=t.replace(yt,bt);return function(t){var i=void 0!==t.getAttributeNode&&t.getAttributeNode("id");return i&&i.value===e}}),w.find.TAG=b.getElementsByTagName?function(t,e){return void 0!==e.getElementsByTagName?e.getElementsByTagName(t):b.qsa?e.querySelectorAll(t):void 0}:function(t,e){var i,n=[],o=0,s=e.getElementsByTagName(t);if("*"===t){for(;i=s[o++];)1===i.nodeType&&n.push(i);return n}return s},w.find.CLASS=b.getElementsByClassName&&function(t,e){if(void 0!==e.getElementsByClassName&&P)return e.getElementsByClassName(t)},R=[],j=[],(b.qsa=ft.test(M.querySelectorAll))&&(o(function(t){O.appendChild(t).innerHTML="",t.querySelectorAll("[msallowcapture^='']").length&&j.push("[*^$]="+tt+"*(?:''|\"\")"),t.querySelectorAll("[selected]").length||j.push("\\["+tt+"*(?:value|"+Z+")"),t.querySelectorAll("[id~="+L+"-]").length||j.push("~="),t.querySelectorAll(":checked").length||j.push(":checked"),t.querySelectorAll("a#"+L+"+*").length||j.push(".#.+[+~]")}),o(function(t){var e=M.createElement("input");e.setAttribute("type","hidden"),t.appendChild(e).setAttribute("name","D"),t.querySelectorAll("[name=d]").length&&j.push("name"+tt+"*[*^$|!~]?="),t.querySelectorAll(":enabled").length||j.push(":enabled",":disabled"),t.querySelectorAll("*,:x"),j.push(",.*:")})),(b.matchesSelector=ft.test(N=O.matches||O.webkitMatchesSelector||O.mozMatchesSelector||O.oMatchesSelector||O.msMatchesSelector))&&o(function(t){b.disconnectedMatch=N.call(t,"div"),N.call(t,"[s!='']:x"),R.push("!=",nt)}),j=j.length&&new RegExp(j.join("|")),R=R.length&&new RegExp(R.join("|")),e=ft.test(O.compareDocumentPosition),I=e||ft.test(O.contains)?function(t,e){var i=9===t.nodeType?t.documentElement:t,n=e&&e.parentNode;return t===n||!(!n||1!==n.nodeType||!(i.contains?i.contains(n):t.compareDocumentPosition&&16&t.compareDocumentPosition(n)))}:function(t,e){if(e)for(;e=e.parentNode;)if(e===t)return!0;return!1},B=e?function(t,e){if(t===e)return A=!0,0;var i=!t.compareDocumentPosition-!e.compareDocumentPosition;return i||(i=(t.ownerDocument||t)===(e.ownerDocument||e)?t.compareDocumentPosition(e):1,1&i||!b.sortDetached&&e.compareDocumentPosition(t)===i?t===M||t.ownerDocument===H&&I(H,t)?-1:e===M||e.ownerDocument===H&&I(H,e)?1:E?Q(E,t)-Q(E,e):0:4&i?-1:1)}:function(t,e){if(t===e)return A=!0,0;var i,n=0,o=t.parentNode,s=e.parentNode,a=[t],l=[e];if(!o||!s)return t===M?-1:e===M?1:o?-1:s?1:E?Q(E,t)-Q(E,e):0;if(o===s)return r(t,e);for(i=t;i=i.parentNode;)a.unshift(i);for(i=e;i=i.parentNode;)l.unshift(i);for(;a[n]===l[n];)n++;return n?r(a[n],l[n]):a[n]===H?-1:l[n]===H?1:0},M):M},e.matches=function(t,i){return e(t,null,null,i)},e.matchesSelector=function(t,i){if((t.ownerDocument||t)!==M&&D(t),i=i.replace(lt,"='$1']"),b.matchesSelector&&P&&!z[i+" "]&&(!R||!R.test(i))&&(!j||!j.test(i)))try{var n=N.call(t,i);if(n||b.disconnectedMatch||t.document&&11!==t.document.nodeType)return n}catch(t){}return e(i,M,null,[t]).length>0},e.contains=function(t,e){return(t.ownerDocument||t)!==M&&D(t),I(t,e)},e.attr=function(t,e){(t.ownerDocument||t)!==M&&D(t);var i=w.attrHandle[e.toLowerCase()],n=i&&V.call(w.attrHandle,e.toLowerCase())?i(t,e,!P):void 0;return void 0!==n?n:b.attributes||!P?t.getAttribute(e):(n=t.getAttributeNode(e))&&n.specified?n.value:null},e.error=function(t){throw new Error("Syntax error, unrecognized expression: "+t)},e.uniqueSort=function(t){var e,i=[],n=0,o=0;if(A=!b.detectDuplicates,E=!b.sortStable&&t.slice(0),t.sort(B),A){for(;e=t[o++];)e===t[o]&&(n=i.push(o));for(;n--;)t.splice(i[n],1)}return E=null,t},_=e.getText=function(t){var e,i="",n=0,o=t.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof t.textContent)return t.textContent;for(t=t.firstChild;t;t=t.nextSibling)i+=_(t)}else if(3===o||4===o)return t.nodeValue}else for(;e=t[n++];)i+=_(e);return i},w=e.selectors={cacheLength:50,createPseudo:n,match:ht,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(t){return t[1]=t[1].replace(yt,bt),t[3]=(t[3]||t[4]||t[5]||"").replace(yt,bt),"~="===t[2]&&(t[3]=" "+t[3]+" "),t.slice(0,4)},CHILD:function(t){return t[1]=t[1].toLowerCase(),"nth"===t[1].slice(0,3)?(t[3]||e.error(t[0]),t[4]=+(t[4]?t[5]+(t[6]||1):2*("even"===t[3]||"odd"===t[3])),t[5]=+(t[7]+t[8]||"odd"===t[3])):t[3]&&e.error(t[0]),t},PSEUDO:function(t){var e,i=!t[6]&&t[2];return ht.CHILD.test(t[0])?null:(t[3]?t[2]=t[4]||t[5]||"":i&&ut.test(i)&&(e=C(i,!0))&&(e=i.indexOf(")",i.length-e)-i.length)&&(t[0]=t[0].slice(0,e),t[2]=i.slice(0,e)),t.slice(0,3))}},filter:{TAG:function(t){var e=t.replace(yt,bt).toLowerCase();return"*"===t?function(){return!0}:function(t){return t.nodeName&&t.nodeName.toLowerCase()===e}},CLASS:function(t){var e=q[t+" "];return e||(e=new RegExp("(^|"+tt+")"+t+"("+tt+"|$)"))&&q(t,function(t){return e.test("string"==typeof t.className&&t.className||void 0!==t.getAttribute&&t.getAttribute("class")||"")})},ATTR:function(t,i,n){return function(o){var s=e.attr(o,t);return null==s?"!="===i:!i||(s+="","="===i?s===n:"!="===i?s!==n:"^="===i?n&&0===s.indexOf(n):"*="===i?n&&s.indexOf(n)>-1:"$="===i?n&&s.slice(-n.length)===n:"~="===i?(" "+s.replace(ot," ")+" ").indexOf(n)>-1:"|="===i&&(s===n||s.slice(0,n.length+1)===n+"-"))}},CHILD:function(t,e,i,n,o){var s="nth"!==t.slice(0,3),r="last"!==t.slice(-4),a="of-type"===e;return 1===n&&0===o?function(t){return!!t.parentNode}:function(e,i,l){var u,c,h,d,p,f,g=s!==r?"nextSibling":"previousSibling",m=e.parentNode,v=a&&e.nodeName.toLowerCase(),y=!l&&!a,b=!1;if(m){if(s){for(;g;){for(d=e;d=d[g];)if(a?d.nodeName.toLowerCase()===v:1===d.nodeType)return!1;f=g="only"===t&&!f&&"nextSibling"}return!0}if(f=[r?m.firstChild:m.lastChild],r&&y){for(d=m,h=d[L]||(d[L]={}),c=h[d.uniqueID]||(h[d.uniqueID]={}),u=c[t]||[],p=u[0]===$&&u[1],b=p&&u[2],d=p&&m.childNodes[p];d=++p&&d&&d[g]||(b=p=0)||f.pop();)if(1===d.nodeType&&++b&&d===e){c[t]=[$,p,b];break}}else if(y&&(d=e,h=d[L]||(d[L]={}),c=h[d.uniqueID]||(h[d.uniqueID]={}),u=c[t]||[],p=u[0]===$&&u[1],b=p),!1===b)for(;(d=++p&&d&&d[g]||(b=p=0)||f.pop())&&((a?d.nodeName.toLowerCase()!==v:1!==d.nodeType)||!++b||(y&&(h=d[L]||(d[L]={}),c=h[d.uniqueID]||(h[d.uniqueID]={}),c[t]=[$,b]),d!==e)););return(b-=o)===n||b%n==0&&b/n>=0}}},PSEUDO:function(t,i){var o,s=w.pseudos[t]||w.setFilters[t.toLowerCase()]||e.error("unsupported pseudo: "+t);return s[L]?s(i):s.length>1?(o=[t,t,"",i],w.setFilters.hasOwnProperty(t.toLowerCase())?n(function(t,e){for(var n,o=s(t,i),r=o.length;r--;)n=Q(t,o[r]),t[n]=!(e[n]=o[r])}):function(t){return s(t,0,o)}):s}},pseudos:{not:n(function(t){var e=[],i=[],o=S(t.replace(st,"$1"));return o[L]?n(function(t,e,i,n){for(var s,r=o(t,null,n,[]),a=t.length;a--;)(s=r[a])&&(t[a]=!(e[a]=s))}):function(t,n,s){return e[0]=t,o(e,null,s,i),e[0]=null,!i.pop()}}),has:n(function(t){return function(i){return e(t,i).length>0}}),contains:n(function(t){return t=t.replace(yt,bt),function(e){return(e.textContent||e.innerText||_(e)).indexOf(t)>-1}}),lang:n(function(t){return ct.test(t||"")||e.error("unsupported lang: "+t),t=t.replace(yt,bt).toLowerCase(),function(e){var i;do{if(i=P?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(i=i.toLowerCase())===t||0===i.indexOf(t+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var i=t.location&&t.location.hash;return i&&i.slice(1)===e.id},root:function(t){return t===O},focus:function(t){return t===M.activeElement&&(!M.hasFocus||M.hasFocus())&&!!(t.type||t.href||~t.tabIndex)},enabled:function(t){return!1===t.disabled},disabled:function(t){return!0===t.disabled},checked:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&!!t.checked||"option"===e&&!!t.selected},selected:function(t){return t.parentNode&&t.parentNode.selectedIndex,!0===t.selected},empty:function(t){for(t=t.firstChild;t;t=t.nextSibling)if(t.nodeType<6)return!1;return!0},parent:function(t){return!w.pseudos.empty(t)},header:function(t){return pt.test(t.nodeName)},input:function(t){return dt.test(t.nodeName)},button:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&"button"===t.type||"button"===e},text:function(t){var e;return"input"===t.nodeName.toLowerCase()&&"text"===t.type&&(null==(e=t.getAttribute("type"))||"text"===e.toLowerCase())},first:a(function(){return[0]}),last:a(function(t,e){return[e-1]}),eq:a(function(t,e,i){return[i<0?i+e:i]}),even:a(function(t,e){for(var i=0;i=0;)t.push(n);return t}),gt:a(function(t,e,i){for(var n=i<0?i+e:i;++n2&&"ID"===(r=s[0]).type&&b.getById&&9===e.nodeType&&P&&w.relative[s[1].type]){if(!(e=(w.find.ID(r.matches[0].replace(yt,bt),e)||[])[0]))return i;h&&(e=e.parentNode),t=t.slice(s.shift().value.length)}for(o=ht.needsContext.test(t)?0:s.length;o--&&(r=s[o],!w.relative[a=r.type]);)if((u=w.find[a])&&(n=u(r.matches[0].replace(yt,bt),mt.test(s[0].type)&&l(e.parentNode)||e))){if(s.splice(o,1),!(t=n.length&&c(s)))return J.apply(i,n),i;break}}return(h||S(t,d))(n,e,!P,i,!e||mt.test(t)&&l(e.parentNode)||e),i},b.sortStable=L.split("").sort(B).join("")===L,b.detectDuplicates=!!A,D(),b.sortDetached=o(function(t){return 1&t.compareDocumentPosition(M.createElement("div"))}),o(function(t){return t.innerHTML="","#"===t.firstChild.getAttribute("href")})||s("type|href|height|width",function(t,e,i){if(!i)return t.getAttribute(e,"type"===e.toLowerCase()?1:2)}),b.attributes&&o(function(t){return t.innerHTML="",t.firstChild.setAttribute("value",""),""===t.firstChild.getAttribute("value")})||s("value",function(t,e,i){if(!i&&"input"===t.nodeName.toLowerCase())return t.defaultValue}),o(function(t){return null==t.getAttribute("disabled")})||s(Z,function(t,e,i){var n;if(!i)return!0===t[e]?e.toLowerCase():(n=t.getAttributeNode(e))&&n.specified?n.value:null}),e}(i);lt.find=pt,lt.expr=pt.selectors,lt.expr[":"]=lt.expr.pseudos,lt.uniqueSort=lt.unique=pt.uniqueSort,lt.text=pt.getText,lt.isXMLDoc=pt.isXML,lt.contains=pt.contains;var ft=function(t,e,i){for(var n=[],o=void 0!==i;(t=t[e])&&9!==t.nodeType;)if(1===t.nodeType){if(o&<(t).is(i))break;n.push(t)}return n},gt=function(t,e){for(var i=[];t;t=t.nextSibling)1===t.nodeType&&t!==e&&i.push(t);return i},mt=lt.expr.match.needsContext,vt=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,yt=/^.[^:#\[\.,]*$/;lt.filter=function(t,e,i){var n=e[0];return i&&(t=":not("+t+")"),1===e.length&&1===n.nodeType?lt.find.matchesSelector(n,t)?[n]:[]:lt.find.matches(t,lt.grep(e,function(t){return 1===t.nodeType}))},lt.fn.extend({find:function(t){var e,i=this.length,n=[],o=this;if("string"!=typeof t)return this.pushStack(lt(t).filter(function(){for(e=0;e1?lt.unique(n):n),n.selector=this.selector?this.selector+" "+t:t,n},filter:function(t){return this.pushStack(a(this,t||[],!1))},not:function(t){return this.pushStack(a(this,t||[],!0))},is:function(t){return!!a(this,"string"==typeof t&&mt.test(t)?lt(t):t||[],!1).length}});var bt,wt=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/;(lt.fn.init=function(t,e,i){var n,o;if(!t)return this;if(i=i||bt,"string"==typeof t){if(!(n="<"===t[0]&&">"===t[t.length-1]&&t.length>=3?[null,t,null]:wt.exec(t))||!n[1]&&e)return!e||e.jquery?(e||i).find(t):this.constructor(e).find(t);if(n[1]){if(e=e instanceof lt?e[0]:e,lt.merge(this,lt.parseHTML(n[1],e&&e.nodeType?e.ownerDocument||e:Z,!0)),vt.test(n[1])&<.isPlainObject(e))for(n in e)lt.isFunction(this[n])?this[n](e[n]):this.attr(n,e[n]);return this}return o=Z.getElementById(n[2]),o&&o.parentNode&&(this.length=1,this[0]=o),this.context=Z,this.selector=t,this}return t.nodeType?(this.context=this[0]=t,this.length=1,this):lt.isFunction(t)?void 0!==i.ready?i.ready(t):t(lt):(void 0!==t.selector&&(this.selector=t.selector,this.context=t.context),lt.makeArray(t,this))}).prototype=lt.fn,bt=lt(Z);var _t=/^(?:parents|prev(?:Until|All))/,xt={children:!0,contents:!0,next:!0,prev:!0};lt.fn.extend({has:function(t){var e=lt(t,this),i=e.length;return this.filter(function(){for(var t=0;t-1:1===i.nodeType&<.find.matchesSelector(i,t))){s.push(i);break}return this.pushStack(s.length>1?lt.uniqueSort(s):s)},index:function(t){return t?"string"==typeof t?nt.call(lt(t),this[0]):nt.call(this,t.jquery?t[0]:t):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(t,e){return this.pushStack(lt.uniqueSort(lt.merge(this.get(),lt(t,e))))},addBack:function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}}),lt.each({parent:function(t){var e=t.parentNode;return e&&11!==e.nodeType?e:null},parents:function(t){return ft(t,"parentNode")},parentsUntil:function(t,e,i){return ft(t,"parentNode",i)},next:function(t){return l(t,"nextSibling")},prev:function(t){return l(t,"previousSibling")},nextAll:function(t){return ft(t,"nextSibling")},prevAll:function(t){return ft(t,"previousSibling")},nextUntil:function(t,e,i){return ft(t,"nextSibling",i)},prevUntil:function(t,e,i){return ft(t,"previousSibling",i)},siblings:function(t){return gt((t.parentNode||{}).firstChild,t)},children:function(t){return gt(t.firstChild)},contents:function(t){return t.contentDocument||lt.merge([],t.childNodes)}},function(t,e){lt.fn[t]=function(i,n){var o=lt.map(this,e,i);return"Until"!==t.slice(-5)&&(n=i),n&&"string"==typeof n&&(o=lt.filter(n,o)),this.length>1&&(xt[t]||lt.uniqueSort(o),_t.test(t)&&o.reverse()),this.pushStack(o)}});var Ct=/\S+/g;lt.Callbacks=function(t){t="string"==typeof t?u(t):lt.extend({},t);var e,i,n,o,s=[],r=[],a=-1,l=function(){for(o=t.once,n=e=!0;r.length;a=-1)for(i=r.shift();++a-1;)s.splice(i,1),i<=a&&a--}),this},has:function(t){return t?lt.inArray(t,s)>-1:s.length>0},empty:function(){return s&&(s=[]),this},disable:function(){return o=r=[],s=i="",this},disabled:function(){return!s},lock:function(){return o=r=[],i||(s=i=""),this},locked:function(){return!!o},fireWith:function(t,i){return o||(i=i||[],i=[t,i.slice?i.slice():i],r.push(i),e||l()),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!n}};return c},lt.extend({Deferred:function(t){var e=[["resolve","done",lt.Callbacks("once memory"),"resolved"],["reject","fail",lt.Callbacks("once memory"),"rejected"],["notify","progress",lt.Callbacks("memory")]],i="pending",n={state:function(){return i},always:function(){return o.done(arguments).fail(arguments),this},then:function(){var t=arguments;return lt.Deferred(function(i){lt.each(e,function(e,s){var r=lt.isFunction(t[e])&&t[e];o[s[1]](function(){var t=r&&r.apply(this,arguments);t&<.isFunction(t.promise)?t.promise().progress(i.notify).done(i.resolve).fail(i.reject):i[s[0]+"With"](this===n?i.promise():this,r?[t]:arguments)})}),t=null}).promise()},promise:function(t){return null!=t?lt.extend(t,n):n}},o={};return n.pipe=n.then,lt.each(e,function(t,s){var r=s[2],a=s[3];n[s[1]]=r.add,a&&r.add(function(){i=a},e[1^t][2].disable,e[2][2].lock),o[s[0]]=function(){return o[s[0]+"With"](this===o?n:this,arguments),this},o[s[0]+"With"]=r.fireWith}),n.promise(o),t&&t.call(o,o),o},when:function(t){var e,i,n,o=0,s=tt.call(arguments),r=s.length,a=1!==r||t&<.isFunction(t.promise)?r:0,l=1===a?t:lt.Deferred(),u=function(t,i,n){return function(o){i[t]=this,n[t]=arguments.length>1?tt.call(arguments):o,n===e?l.notifyWith(i,n):--a||l.resolveWith(i,n)}};if(r>1)for(e=new Array(r),i=new Array(r),n=new Array(r);o0||(St.resolveWith(Z,[lt]),lt.fn.triggerHandler&&(lt(Z).triggerHandler("ready"),lt(Z).off("ready"))))}}),lt.ready.promise=function(t){return St||(St=lt.Deferred(),"complete"===Z.readyState||"loading"!==Z.readyState&&!Z.documentElement.doScroll?i.setTimeout(lt.ready):(Z.addEventListener("DOMContentLoaded",c),i.addEventListener("load",c))),St.promise(t)},lt.ready.promise();var kt=function(t,e,i,n,o,s,r){var a=0,l=t.length,u=null==i;if("object"===lt.type(i)){o=!0;for(a in i)kt(t,e,a,i[a],!0,s,r)}else if(void 0!==n&&(o=!0,lt.isFunction(n)||(r=!0),u&&(r?(e.call(t,n),e=null):(u=e,e=function(t,e,i){return u.call(lt(t),i)})),e))for(;a-1&&void 0!==i&&At.set(this,t,e)})},null,e,arguments.length>1,null,!0)},removeData:function(t){return this.each(function(){At.remove(this,t)})}}),lt.extend({queue:function(t,e,i){var n;if(t)return e=(e||"fx")+"queue",n=Et.get(t,e),i&&(!n||lt.isArray(i)?n=Et.access(t,e,lt.makeArray(i)):n.push(i)),n||[]},dequeue:function(t,e){e=e||"fx";var i=lt.queue(t,e),n=i.length,o=i.shift(),s=lt._queueHooks(t,e),r=function(){lt.dequeue(t,e)};"inprogress"===o&&(o=i.shift(),n--),o&&("fx"===e&&i.unshift("inprogress"),delete s.stop,o.call(t,r,s)),!n&&s&&s.empty.fire()},_queueHooks:function(t,e){var i=e+"queueHooks";return Et.get(t,i)||Et.access(t,i,{empty:lt.Callbacks("once memory").add(function(){Et.remove(t,[e+"queue",i])})})}}),lt.fn.extend({queue:function(t,e){var i=2;return"string"!=typeof t&&(e=t,t="fx",i--),arguments.length",""],thead:[1,"