diff --git a/client/gulpfile.js b/client/gulpfile.js
index 38f67aa8955..1d311edb917 100644
--- a/client/gulpfile.js
+++ b/client/gulpfile.js
@@ -48,12 +48,12 @@ gulp.task('scripts', function() {
return gulp.src(paths.scripts)
.pipe(plumber())
.pipe(cached('scripts'))
- .pipe(sourcemaps.init())
+ //.pipe(sourcemaps.init())
.pipe(babel({
plugins: ['transform-es2015-modules-amd']
}))
.pipe(gulpif(nopack_mode, beautify(), uglify()))
- .pipe(sourcemaps.write('../maps/'))
+ //.pipe(sourcemaps.write('../maps/'))
.pipe(gulp.dest('../static/scripts/'));
});
diff --git a/client/webpack.config.js b/client/webpack.config.js
index 4b799d66f11..ff2c217391f 100644
--- a/client/webpack.config.js
+++ b/client/webpack.config.js
@@ -38,7 +38,7 @@ var commonLibs = [
];
module.exports = {
- devtool: "source-map",
+ //devtool: "source-map",
entry: {
libs: commonLibs,
login: "./galaxy/scripts/apps/login.js",
diff --git a/static/maps/admin.toolshed.js.map b/static/maps/admin.toolshed.js.map
deleted file mode 100644
index ef527280d0c..00000000000
--- a/static/maps/admin.toolshed.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["admin.toolshed.js"],"names":["AdminToolshedRouter","Backbone","Router","extend","initialize","this","routesHit","history","on","bind","trackPageview","routes","","sheds","queue","workflows","status/r/:repositories","category/s/:tool_shed/c/:cateory_id","repository/s/:tool_shed/r/:repository_id","back","status","trigger","replace","GalaxyAdminToolshedApp","View","app_config","known_views","Galaxy","admintoolshedapp","window","adminRepoQueueView","navigate","_repositoryQueueView2","default","RepoQueueView","adminShedListView","reDraw","_shedListView2","ShedListView","admin_toolshed_router","adminShedCategoriesView","_categoriesView2","CategoryView","tool_shed","category_id","adminShedCategoryView","Category","repository_id","adminRepositoryView","repositories","adminRepoStatusView","split","_repoStatusView2","RepoStatus","adminWorkflowsView","_workflowsView2","Workflows","GalaxyApp"],"mappings":"ocAOIA,EAAsBC,SAASC,OAAOC,QACtCC,WAAY,WACRC,KAAKC,UAAY,EAEjBL,SAASM,QAAQC,GACb,QACA,WACIH,KAAKC,aAETD,MAEJA,KAAKI,KAAK,QAASJ,KAAKK,gBAG5BC,QACIC,GAAI,YACJC,MAAO,YACPC,MAAO,QACPC,UAAW,YACXC,yBAA0B,SAnB9BhB,OAAAA,SACAI,0BAAY,aACRa,sCAAA,eACAC,2CAAA,cAaAL,KAAAA,WACAC,KAAAA,UAHI,EAIJC,OAAAA,QAAWI,OAEXC,KAAAA,SAAQ,KANJC,SAAA,EAAAC,SAAA,OA2BRC,EAAyBtB,SAASuB,KAAKrB,QAfvCsB,YAiBIC,aAAc,YAAa,QAAS,SAAU,aAAc,eAAgB,gBAGhFtB,WAAY,WACRuB,OAAOC,iBAAmBvB,KAf9Bc,KAAAA,sBAAiB,IAAAnB,EAET6B,KAAAA,sBAAArB,GAAA,cAAA,WADJmB,OAEOC,iBAAAE,mBACHH,OAAKI,iBAAgBV,mBAAeC,SAE3CK,OAAAC,iBAAAE,mBAAA,IAAAE,EAAAC,QAAAC,gBAGDX,KAAAA,sBAAyBtB,GAAAA,kBAAqB,WAC9CwB,OAAYG,iBAAAO,kBACRT,OAAAA,iBAA2BS,kBAAmBC,SAkBtCT,OAAOC,iBAAiBO,kBAAoB,IAAIE,EAAAJ,QAAmBK,eAb3EjC,KAAAkC,sBAAKA,GAAL,mBAAiCvC,SAAAA,GAiBzB2B,OAAOC,iBAAiBY,wBAfhCb,OAAKY,iBAAsB/B,wBAAkB4B,QACrCT,UAAOC,EAAAA,QAAiBE,MAAAA,SAGxBH,OAAAA,iBAAOC,wBAAsC,IAAIa,EAAAR,QAAAS,cACpDC,UAAAA,EAAArB,QAAA,MAAA,WAIGK,KAAAA,sBAAOC,GAAAA,qBAAiBO,SAAxBQ,EAAAC,GACHjB,OAAMC,iBAAAiB,sBACHlB,OAAAA,iBAAOC,sBAAPQ,QACHO,UAAAA,EAAArB,QAAA,MAAA,OALLsB,YAAAA,IASQjB,OAAAA,iBAAOC,sBAAiBY,IAAwBJ,EAAAA,QAAOU,UACnDH,UAAAA,EAAWA,QAAUrB,MAAQ,OADsBsB,YAAvDA,MAIuFvC,KAAAkC,sBAAvF/B,GAAA,mBAAA,SAAAmC,EAAAI,GAGHpB,OAAAC,iBAAAoB,oBATLrB,OAAAC,iBAAAoB,oBAAAZ,QAWKG,UAAAA,EAALjB,QAA8B,MAAA,OACtBK,cAAOC,IAGHgB,OAAAA,iBAAaA,oBAAAA,IAAAA,EAAAA,QAAAA,aAFoCD,UAArDA,EAAArB,QAAA,MAAA,OADJyB,cAKOA,MACgF1C,KAAAkC,sBAAnF/B,GAAA,eAAA,SAAAyC,GAIHtB,OAAAC,iBAAAsB,oBAXLvB,OAAAC,iBAAAsB,oBAAAd,QAaKG,aAAAA,EAAyBY,MAAA,OAGlBR,OAAAA,iBAAWA,oBAAyB,IADWS,EAAAnB,QAAAoB,YAE/CN,aAAAA,EAAeA,MAAAA,SAIfJ,KAAAA,sBAAWA,GAAAA,kBAAkB,WAC7BI,OAAAA,iBAAeA,mBAF+DpB,OAAlFC,iBAAA0B,mBAAAlB,SAPRT,OAAAC,iBAAA0B,mBAAA,IAAAC,EAAAtB,QAAAuB,YAgBYP,SAAAA,QAAAA,OAAAA,WAAcA,kBAGgEQ,UAAAlC","file":"../scripts/admin.toolshed.js","sourcesContent":["import mod_shed_list_view from \"mvc/toolshed/shed-list-view\";\nimport mod_categories_view from \"mvc/toolshed/categories-view\";\nimport mod_repositories_view from \"mvc/toolshed/repositories-view\";\nimport mod_repository_view from \"mvc/toolshed/repository-view\";\nimport mod_repoqueue_view from \"mvc/toolshed/repository-queue-view\";\nimport mod_repo_status_view from \"mvc/toolshed/repo-status-view\";\nimport mod_workflows_view from \"mvc/toolshed/workflows-view\";\nvar AdminToolshedRouter = Backbone.Router.extend({\n initialize: function() {\n this.routesHit = 0;\n // keep count of number of routes handled by the application\n Backbone.history.on(\n \"route\",\n function() {\n this.routesHit++;\n },\n this\n );\n this.bind(\"route\", this.trackPageview);\n },\n\n routes: {\n \"\": \"toolsheds\",\n sheds: \"toolsheds\",\n queue: \"queue\",\n workflows: \"workflows\",\n \"status/r/:repositories\": \"status\",\n status: \"status\",\n \"categories/s/:tool_shed\": \"categories\",\n \"category/s/:tool_shed/c/:cateory_id\": \"repositories\",\n \"repository/s/:tool_shed/r/:repository_id\": \"repository\"\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\nvar GalaxyAdminToolshedApp = Backbone.View.extend({\n app_config: {\n known_views: [\"toolsheds\", \"queue\", \"status\", \"categories\", \"repositories\", \"repoository\"]\n },\n\n initialize: function() {\n Galaxy.admintoolshedapp = this;\n this.admin_toolshed_router = new AdminToolshedRouter();\n\n this.admin_toolshed_router.on(\"route:queue\", () => {\n if (Galaxy.admintoolshedapp.adminRepoQueueView) {\n Galaxy.admintoolshedapp.adminRepoQueueView.reDraw();\n } else {\n Galaxy.admintoolshedapp.adminRepoQueueView = new mod_repoqueue_view.RepoQueueView();\n }\n });\n this.admin_toolshed_router.on(\"route:toolsheds\", () => {\n if (Galaxy.admintoolshedapp.adminShedListView) {\n Galaxy.admintoolshedapp.adminShedListView.reDraw();\n } else {\n Galaxy.admintoolshedapp.adminShedListView = new mod_shed_list_view.ShedListView();\n }\n });\n this.admin_toolshed_router.on(\"route:categories\", tool_shed => {\n if (Galaxy.admintoolshedapp.adminShedCategoriesView) {\n Galaxy.admintoolshedapp.adminShedCategoriesView.reDraw({\n tool_shed: tool_shed.replace(/\\//g, \"%2f\")\n });\n } else {\n Galaxy.admintoolshedapp.adminShedCategoriesView = new mod_categories_view.CategoryView({\n tool_shed: tool_shed.replace(/\\//g, \"%2f\")\n });\n }\n });\n this.admin_toolshed_router.on(\"route:repositories\", (tool_shed, category_id) => {\n if (Galaxy.admintoolshedapp.adminShedCategoryView) {\n Galaxy.admintoolshedapp.adminShedCategoryView.reDraw({\n tool_shed: tool_shed.replace(/\\//g, \"%2f\"),\n category_id: category_id\n });\n } else {\n Galaxy.admintoolshedapp.adminShedCategoryView = new mod_repositories_view.Category({\n tool_shed: tool_shed.replace(/\\//g, \"%2f\"),\n category_id: category_id\n });\n }\n });\n this.admin_toolshed_router.on(\"route:repository\", (tool_shed, repository_id) => {\n if (Galaxy.admintoolshedapp.adminRepositoryView) {\n Galaxy.admintoolshedapp.adminRepositoryView.reDraw({\n tool_shed: tool_shed.replace(/\\//g, \"%2f\"),\n repository_id: repository_id\n });\n } else {\n Galaxy.admintoolshedapp.adminRepositoryView = new mod_repository_view.RepoDetails({\n tool_shed: tool_shed.replace(/\\//g, \"%2f\"),\n repository_id: repository_id\n });\n }\n });\n this.admin_toolshed_router.on(\"route:status\", repositories => {\n if (Galaxy.admintoolshedapp.adminRepoStatusView) {\n Galaxy.admintoolshedapp.adminRepoStatusView.reDraw({\n repositories: repositories.split(\"|\")\n });\n } else {\n Galaxy.admintoolshedapp.adminRepoStatusView = new mod_repo_status_view.RepoStatus({\n repositories: repositories.split(\"|\")\n });\n }\n });\n this.admin_toolshed_router.on(\"route:workflows\", () => {\n if (Galaxy.admintoolshedapp.adminWorkflowsView) {\n Galaxy.admintoolshedapp.adminWorkflowsView.reDraw();\n } else {\n Galaxy.admintoolshedapp.adminWorkflowsView = new mod_workflows_view.Workflows();\n }\n });\n\n Backbone.history.start({ pushState: false });\n }\n});\n\nexport default {\n GalaxyApp: GalaxyAdminToolshedApp\n};\n"]}
\ No newline at end of file
diff --git a/static/maps/analysis.js.map b/static/maps/analysis.js.map
deleted file mode 100644
index 76a73b1586f..00000000000
--- a/static/maps/analysis.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"analysis.js","sources":["../src/analysis.js"],"names":["jQuery","require","$","GalaxyApp","QUERY_STRING","PANEL","ToolPanel","HistoryPanel","PAGE","ToolForm","UserPreferences","Tours","window","app","options","bootstrapped","Galaxy","debug","config","toolPanel","el","userIsAnonymous","user","isAnonymous","toolbox","toolbox_in_panel","stored_workflow_menu_entries","nginx_upload_path","ftp_upload_site","default_genome","default_extension","centerPanel","CenterPanel","historyPanel","galaxyRoot","root","allow_user_dataset_purge","analysisPage","PageLayoutView","_","extend","left","center","right","page","params","tool_panel","upload","uploadButton","currHistoryPanel","historyView","listenToGalaxy","display","view","remove","router","Backbone","Router","initialize","this","execute","callback","args","name","queryObj","parse","pop","push","apply","routes","(/)","(/)root*","(/)tours(/)(:tour_id)","(/)users(/)","show_tours","tour_id","giveTour","ToursView","show_users","View","home","tool_id","job_id","show","_loadCenterIframe","_loadToolForm","workflow_id","m_c","m_a","id","url","prop","render","loadCurrentHistory","listenTo","fetch","urlRoot","connectToQuotaMeter","masthead","quotaMeter","history","start","pushState"],"mappings":"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"}
\ No newline at end of file
diff --git a/static/maps/app.js.map b/static/maps/app.js.map
deleted file mode 100644
index 32b717e1a27..00000000000
--- a/static/maps/app.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"app.js","sources":["../src/app.js"],"names":["define","Utils","Masthead","Modal","QuotaMeter","Backbone","View","extend","initialize","options","Galaxy","app","this","modal","masthead","setElement","_template","$el","append","$","render","require","Analysis","window","console","log","err","debug","initialize2","merge","params","$container","parent","attr","addClass","message_box_visible","show","show_inactivity_warning","menu","Menu","GalaxyMenu","config","quotaMeter","UserQuotaMeter","model","user","el","display","target","remove","panels","_buildPanels","Views","panel_ids","i","id","view","components","header","title","cls","buttons","body","$panel","_templatePanel","find","html","Panel","center","panel","drag","toggle","right","message_box_class","message_box_content","inactivity_box_content","root"],"mappings":"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"}
\ No newline at end of file
diff --git a/static/maps/app/analysis.js.map b/static/maps/app/analysis.js.map
deleted file mode 100644
index 18214fc8da9..00000000000
--- a/static/maps/app/analysis.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"analysis.js","sources":["../../src/app/analysis.js"],"names":["define","Backbone","View","extend","initialize","options","this","Utils","merge","setElement","_template","params","$","prop","Galaxy","root","tool_id","param","workflow_id","m_c","m_a","config","require_login","user","id","self","on","show","empty","hide","display","$el","scrollTop","append","tool_search","Tools","ToolSearch","spinner_url","search_url","hidden","tools","ToolCollection","toolbox","tool_panel","ToolPanel","layout","toolbox_in_panel","tool_panel_view","ToolPanelView","model","toolPanel","get","size","render","prepend","_templateTool","title","href","i","stored_workflow_menu_entries","m","stored_workflow","name","encoded_stored_workflow_id","click","parent","handle_minwidth_hint","attr","upload","Upload","components","header","buttons","buttonRefresh","Ui","ButtonLink","cls","icon","onclick","top","currHistoryPanel","loadCurrentHistory","buttonOptions","target","buttonViewMulti","body","historyOptionsMenu","optionsMenu","anonymous","purgeAllowed","allow_user_dataset_purge","HistoryPanel","CurrentHistoryPanel","el","linkTarget","$scrollContainer","connectToQuotaMeter","quotaMeter","listenToGalaxy","left"],"mappings":"AAAAA,UAAW,WAGWC,SAASC,KAAKC,QAC5BC,WAAY,SAAUC,GAClBC,KAAKD,QAAUE,MAAMC,MAAOH,MAC5BC,KAAKG,WAAYH,KAAKI,YACtB,IAAIC,GAASL,KAAKD,QAAQM,MAC1BL,MAAKM,EAAG,gBAAiBC,KAAM,MAAOC,OAAOC,MACvCJ,EAAOK,SAAa,eAAiBJ,EAAEK,MAAON,IAC9CA,EAAOO,aAAiB,mBAAqBP,EAAOO,aACpDP,EAAOQ,KAASR,EAAOQ,IAAM,IAAMR,EAAOS,KAC1CN,OAAOO,OAAOC,gBAAkBR,OAAOS,KAAKC,IAAM,cACpD,gBAEJ,IAAIC,GAAOnB,IACXA,MAAKM,EAAG,gBAAiBc,GAAI,OAAQ,WACjCd,EAAGN,MAAOqB,OACVF,EAAKb,EAAG,iBAAkBgB,QAAQC,UAG1CC,QAAS,SAAUC,GACfzB,KAAKM,EAAG,gBAAiBiB,OACzBvB,KAAKM,EAAG,iBAAkBgB,QAAQI,UAAW,GAAIC,OAAQF,GAAMJ,QAEnEjB,UAAW,WACP,MAAQ,ySAQAT,SAASC,KAAKC,QAC1BC,WAAY,SAAUC,GAIlB,GAHAC,KAAKD,QAAUE,MAAMC,MAAOH,MAC5BC,KAAKG,WAAYH,KAAKI,aAEjBI,OAAOS,KAAKC,KAAOV,OAAOO,OAAOC,cAAgB,CAClD,GAAIY,GAAc,GAAIC,OAAMC,YACxBC,YAAchC,EAAQgC,YACtBC,WAAcjC,EAAQiC,WACtBC,QAAc,IAEdC,EAAQ,GAAIL,OAAMM,eAAgBpC,EAAQqC,SAC1CC,EAAa,GAAIR,OAAMS,WACvBV,YAAcA,EACdM,MAAcA,EACdK,OAAcxC,EAAQyC,kBAE1BC,iBAAkB,GAAIZ,OAAMa,eAAgBC,MAAON,IAGnD7B,OAAOoC,UAAYP,EAGfA,EAAWQ,IAAK,UAAWC,OAAS,IACpCL,gBAAgBM,SAChB/C,KAAKM,EAAG,aAAce,QAE1BrB,KAAKyB,IAAIuB,QAASP,gBAAgBhB,KAGlCzB,KAAKM,EAAG,uBAAwBqB,OAAQ3B,KAAKiD,eACzCC,MAAU,gBACVC,KAAU,0BAEd,KAAM,GAAIC,KAAKrD,GAAQsD,6BAA+B,CAClD,GAAIC,GAAIvD,EAAQsD,6BAA8BD,EAC9CpD,MAAKM,EAAG,uBAAwBqB,OAAQ3B,KAAKiD,eACzCC,MAAQI,EAAEC,gBAAgBC,KAC1BL,KAAQ,mBAAqBG,EAAEG,8BAKvCzD,KAAKM,EAAG,kBAAmBoD,MAAO,WACzBC,OAAOC,sBACRD,OAAOC,qBAAsBtD,EAAGN,MAAO6D,KAAM,kBAKrDrD,OAAOsD,OAAS,GAAIC,QAAQhE,GAG5BC,KAAKgE,YACDC,QACIf,MAAU,QACVgB,SAAY1D,OAAOsD,YAMnCb,cAAe,SAAUlD,GACrB,MAAQ,mCACkBS,OAAOC,KAAOV,EAAQoD,KAAO,0BAA4BpD,EAAQmD,MAAQ,cAIvG9C,UAAW,WACP,MAAQ,2cAmBCT,SAASC,KAAKC,QAC3BC,WAAY,SAASC,GACjBC,KAAKD,QAAUE,MAAMC,MAAOH,MAC5BC,KAAKG,WAAYH,KAAKI,YAGtB,IAAI+D,GAAgB,GAAIC,IAAGC,YACvBnD,GAAU,yBACVgC,MAAU,kBACVoB,IAAU,sBACVC,KAAU,gBACVC,QAAU,WACFC,IAAIjE,QAAUiE,IAAIjE,OAAOkE,kBACzBD,IAAIjE,OAAOkE,iBAAiBC,wBAIpCC,EAAgB,GAAIR,IAAGC,YACvBnD,GAAU,yBACVgC,MAAU,kBACVoB,IAAU,sBACVO,OAAU,cACVN,KAAU,YACVpB,KAAU3C,OAAOC,KAAO,yBAExBqE,EAAkB,GAAIV,IAAGC,YACzBnD,GAAU,4BACVgC,MAAU,qBACVoB,IAAU,sBACVC,KAAU,gBACVpB,KAAU3C,OAAOC,KAAO,yBAI5BT,MAAKgE,YACDC,QACIf,MAAU,UACVoB,IAAU,uBACVJ,SAAYC,EAAeS,EAAeE,IAE9CC,MACIT,IAAU,kCAKlB9D,OAAOwE,mBAAqBC,YAAaL,EAAcnD,KACnDyD,UAAe1E,OAAOS,KAAKC,IAAM,QAAU,QAC3CiE,aAAe3E,OAAOO,OAAOqE,0BAA4B,QAAU,QACnE3E,KAAeD,OAAOC,OAI1BD,OAAOkE,iBAAmB,GAAIW,cAAaC,qBACvCC,GAAkBvF,KAAKyB,IACvB0D,aAAkB3E,OAAOO,OAAOqE,yBAChCI,WAAkB,cAClBC,iBAAkB,WAAY,MAAOzF,MAAKyB,IAAIkC,YAElDnD,OAAOkE,iBAAiBgB,oBAAqBlF,OAAOmF,YACpDnF,OAAOkE,iBAAiBkB,eAAgBpF,QACxCA,OAAOkE,iBAAiBC,sBAI5BvE,UAAW,WACP,MAAO,4DAIf,QACIyF,KAAUlG,SAASC,KAAKC,QAASC,WAAY"}
\ No newline at end of file
diff --git a/static/maps/galaxy-app-base.js.map b/static/maps/galaxy-app-base.js.map
deleted file mode 100644
index 4eb9400fb25..00000000000
--- a/static/maps/galaxy-app-base.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"galaxy-app-base.js","sources":["../src/galaxy-app-base.js"],"names":["define","userModel","metricsLogger","addLogging","localize","BASE_MVC","bootstrapped","GalaxyApp","options","self","this","_init","DEBUGGING_KEY","NAMESPACE_KEY","localDebugging","localStorage","getItem","storageErr","console","log","prototype","_","extend","Backbone","Events","logger","_processOptions","debug","_initConfig","config","_patchGalaxy","window","Galaxy","_initLogger","loggerOptions","_initLocale","_initUser","user","root","trigger","_setUpListeners","defaultOptions","patchExisting","defaults","k","hasOwnProperty","patchWith","consoleLogger","consoleLevel","MetricsLogger","ALL","consoleNamespaceWhitelist","split","emit","map","i","arguments","Array","slice","call","LoggableMixin","_l","userJSON","User","currUser","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
diff --git a/static/maps/galaxy.interactive_environments.js.map b/static/maps/galaxy.interactive_environments.js.map
deleted file mode 100644
index 97d30d96b36..00000000000
--- a/static/maps/galaxy.interactive_environments.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["galaxy.interactive_environments.js"],"names":["clear_main_area","$","remove","children","display_spinner","append","galaxy_root","make_spin_state","type","ajax_timeout_init","ajax_timeout_max","ajax_timeout_step","sleep_init","ajax_timeout","console","sleep_max","sleep_step","log_attempts","count","sleep","toastr","user_msg","clear","closeButton","timeOut","extendedTimeOut","tapToDismiss","error","log","spin_state","window","setTimeout","spinner","success","bool_response","success_callback","jqxhr","error_callback","spin_again","xhrFields","withCredentials","timeout","data","status","timeout_callback","ajax_params","ajax","url","spin_until","messages","message_once","message","wrapped_success","timeout_error","spin","spin_error","append_notebook","test_ie_availability","waiting","wait_warn","load_when_ready","not_ready","unknown_response"],"mappings":"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","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 * TODO: This isn't just internal, some notebooks are calling it?\n */\nexport function append_notebook(url) {\n clear_main_area();\n $(\"#main\").append(\n ``\n );\n}\n\nexport function clear_main_area() {\n $(\"#spinner\").remove();\n $(\"#main\")\n .children()\n .remove();\n}\n\nexport function display_spinner() {\n $(\"#main\").append(\n ``\n );\n}\n\n/* Create a spin_state object used by spin() and spin_again() */\nexport function make_spin_state(\n type,\n ajax_timeout_init,\n ajax_timeout_max,\n ajax_timeout_step,\n sleep_init,\n sleep_max,\n sleep_step,\n log_attempts\n) {\n var s = {\n type: typeof type !== \"undefined\" ? type : \"GIE spin\",\n ajax_timeout: typeof ajax_timeout_init !== \"undefined\" ? ajax_timeout_init : 2000,\n ajax_timeout_max: typeof ajax_timeout_max !== \"undefined\" ? ajax_timeout_max : 16000,\n ajax_timeout_step: typeof ajax_timeout_step !== \"undefined\" ? ajax_timeout_step : 500,\n sleep: typeof sleep_init !== \"undefined\" ? sleep_init : 500,\n sleep_max: typeof sleep_max !== \"undefined\" ? sleep_max : 8000,\n sleep_step: typeof sleep_step !== \"undefined\" ? sleep_step : 100,\n log_attempts: typeof log_attempts !== \"undefined\" ? log_attempts : true,\n count: 0\n };\n return s;\n}\n\n/* Log/display an error when spinning fails. */\nexport function spin_error(console_msg, user_msg, clear) {\n console.log(console_msg);\n if (clear) clear_main_area();\n if (typeof user_msg == \"string\") {\n toastr.clear();\n toastr.error(user_msg, \"Error\", {\n closeButton: true,\n timeOut: 0,\n extendedTimeOut: 0,\n tapToDismiss: false\n });\n }\n}\n\n/* Increase sleep time and spin again. */\nfunction spin_again(spin_state) {\n if (spin_state.sleep < spin_state.sleep_max) {\n spin_state.sleep += spin_state.sleep_step;\n }\n if (spin_state.log_attempts) {\n console.log(\n `${spin_state.type} request ${spin_state.count} request timeout ${\n spin_state.ajax_timeout\n }ms sleeping ${spin_state.sleep / 1000}s`\n );\n }\n window.setTimeout(spin_state.spinner, spin_state.sleep);\n}\n\n/*\n * Spin on a URL as long as it times out, otherwise, call the provided success or error callback. If the callback\n * returns `true`, the condition is considered \"resolved\" and spinning stops. Otherwise, continue spinning, increasing\n * AJAX timeouts and/or sleep values as configured in the spin_state.\n */\nexport function spin(url, bool_response, success_callback, timeout_callback, error_callback, spin_state) {\n var spinner = () => {\n var ajax_params = {\n url: url,\n xhrFields: {\n withCredentials: true\n },\n type: \"GET\",\n timeout: spin_state.ajax_timeout,\n success: function(data, status, jqxhr) {\n if (!success_callback(data, status, jqxhr)) {\n spin_state.count++;\n spin_again(spin_state);\n }\n },\n error: function(jqxhr, status, error) {\n if (status == \"timeout\") {\n if (spin_state.ajax_timeout < spin_state.ajax_timeout_max) {\n spin_state.ajax_timeout += spin_state.ajax_timeout_step;\n }\n spin_state.count++;\n if (!timeout_callback(jqxhr, status, error)) spin_again(spin_state);\n } else {\n spin_state.count++;\n if (!error_callback(jqxhr, status, error)) spin_again(spin_state);\n }\n }\n };\n if (bool_response) ajax_params[\"dataType\"] = \"json\";\n $.ajax(ajax_params);\n };\n console.log(`Setting up new spinner for ${spin_state.type} on ${url}`);\n spin_state.spinner = spinner;\n window.setTimeout(spinner, spin_state.sleep);\n}\n\n/*\n * Spin on a URL forever until there is an acceptable response. \n * @param {String} url: URL to test response of. Must return a 200 (302->200 is OK).\n * @param {Boolean} bool_response: If set to `true`, do not stop spinning until the response is `true`. Otherwise, stop\n * as soon as a successful response is received.\n */\nfunction spin_until(url, bool_response, messages, success_callback, spin_state) {\n var warn_at = 40; // ~2 mins\n var message_once = (message, spin_state) => {\n if (spin_state.count == 1) {\n display_spinner();\n toastr.info(message, null, {\n closeButton: true,\n timeOut: 0,\n extendedTimeOut: 0,\n tapToDismiss: false\n });\n }\n };\n var wrapped_success = data => {\n if (!bool_response || (bool_response && data == true)) {\n console.log(messages[\"success\"]);\n clear_main_area();\n toastr.clear();\n success_callback();\n } else if (bool_response && data == false) {\n message_once(messages[\"not_ready\"], spin_state);\n return false; // keep spinning\n } else {\n spin_error(`Invalid response to ${spin_state.type} request`, messages[\"invalid_response\"], true);\n }\n return true; // stop spinning\n };\n var timeout_error = (jqxhr, status, error) => {\n message_once(messages[\"waiting\"], spin_state);\n if (spin_state.count == warn_at) {\n toastr.warning(messages[\"wait_warn\"], \"Warning\", {\n closeButton: true,\n timeOut: 0,\n extendedTimeOut: 0,\n tapToDismiss: false\n });\n }\n return false; // keep spinning\n };\n spin(url, bool_response, wrapped_success, timeout_error, timeout_error, spin_state);\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 */\nexport function test_ie_availability(url, success_callback) {\n var messages = {\n success: \"IE connection succeeded, returning\",\n waiting: \"Interactive environment container is running, attempting to connect to the IE. Please wait...\",\n wait_warn:\n \"It is taking an usually long time to connect to the interactive environment. Attempts will continue but you may want to report this condition to a Galaxy administrator if it does not succeed soon.\",\n error:\n \"An error was encountered while attempting to connect to the interactive environment, contact your administrator.\"\n };\n var spin_state = make_spin_state(\"IE availability\");\n spin_until(url, false, messages, success_callback, spin_state);\n}\n\n/**\n * Test a boolean (json) response from a URL, and call a callback when done.\n * http://stackoverflow.com/q/25390206/347368\n * @param {String} url: URL to test response of. Must return a 200 (302->200 is OK) and either `true` or `false`.\n * @param {String} callback: function to call once successfully connected.\n *\n */\nexport function load_when_ready(url, success_callback) {\n var messages = {\n success: \"Galaxy reports IE container ready, returning\",\n not_ready: \"Galaxy is launching a container in which to run this interactive environment. Please wait...\",\n unknown_response:\n \"Galaxy failed to launch a container in which to run this interactive environment, contact a Galaxy administrator.\",\n waiting: \"Galaxy is launching a container in which to run this interactive environment. Please wait...\",\n wait_warn:\n \"It is taking an usually long time to start a container. Attempts will continue but you may want to report this condition to a Galaxy administrator if it does not succeed soon.\",\n error:\n \"Galaxy encountered an error while attempting to determine the readiness of this interactive environment's container, contact a Galaxy administrator.\"\n };\n var spin_state = make_spin_state(\"IE container readiness\");\n spin_until(url, true, messages, success_callback, spin_state);\n}\n"]}
\ No newline at end of file
diff --git a/static/maps/galaxy.js.map b/static/maps/galaxy.js.map
deleted file mode 100644
index 64602689587..00000000000
--- a/static/maps/galaxy.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["galaxy.js"],"names":["GalaxyApp","options","bootstrapped","this","_init","_","Backbone","_addLogging2","default","NAMESPACE_KEY","DEBUGGING_KEY","localDebugging","localStorage","getItem","storageErr","console","log","_localization2","prototype","self","extend","Events","logger","debug","_processOptions","root","params","session_csrf_token","_initConfig","_patchGalaxy","window","Galaxy","_initLogger","loggerOptions","config","localize","FLATTEN_LOG_MESSAGES_KEY","_initUser","user","trigger","defaults","defaultOptions","k","hasOwnProperty","patchWith","consoleLogger","consoleLevel","_metricsLogger2","MetricsLogger","ALL","split","consoleFlattenMessages","emit","map","i","arguments","Array","slice","call","_baseMvc2","LoggableMixin","_initLocale","_l","userJSON","_userModel2","_setUpListeners","$","document","bind","ev","xhr","data","err","lastAjax","url","href","debugging","setting","undefined","setItem","removeItem","debuggingNamespaces","namespaces","csv","consoleNamespaceWhitelist","newSettings","get"],"mappings":"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","file":"../scripts/galaxy.js","sourcesContent":["import * as _ from \"libs/underscore\";\nimport * as 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\nvar NAMESPACE_KEY = `${DEBUGGING_KEY}:namespaces`;\nvar FLATTEN_LOG_MESSAGES_KEY = `${DEBUGGING_KEY}:flatten`;\n\nvar 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\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 var 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 try {\n loggerOptions.consoleFlattenMessages = localStorage.getItem(FLATTEN_LOG_MESSAGES_KEY) == \"true\";\n } catch (storageErr) {}\n console.log(loggerOptions.consoleFlattenMessages);\n }\n\n self.logger = new metricsLogger.MetricsLogger(loggerOptions);\n self.emit = {};\n [\"log\", \"debug\", \"info\", \"warn\", \"error\", \"metric\"].map(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\", (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(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// ============================================================================\nexport default {\n GalaxyApp: GalaxyApp\n};\n"]}
\ No newline at end of file
diff --git a/static/maps/galaxy.menu.js.map b/static/maps/galaxy.menu.js.map
deleted file mode 100644
index 5979b2873a0..00000000000
--- a/static/maps/galaxy.menu.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"galaxy.menu.js","sources":["../src/galaxy.menu.js"],"names":["define","Masthead","GalaxyMenu","Backbone","Model","extend","initialize","options","this","config","masthead","create","tab_analysis","GalaxyMastheadTab","id","title","content","title_attribute","append","workflow_options","Galaxy","user","disabled","tab_workflow","tab_shared","add","divider","user_requests","tab_lab","lims_doc_url","visualization_options","tab_visualization","target","get","tab_admin","extra_class","tab_help","biostar_url","biostar_url_redirect","support_url","search_url","mailing_lists","screencasts_url","wiki_url","citation_url","terms_url","tab_user","use_remote_user","allow_user_creation","active_view","highlight"],"mappings":"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"}
\ No newline at end of file
diff --git a/static/maps/galaxy.pages.js.map b/static/maps/galaxy.pages.js.map
deleted file mode 100644
index 5a53ac850c8..00000000000
--- a/static/maps/galaxy.pages.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["galaxy.pages.js"],"names":["range","selectNodeContents","item_singular","selection","item_class","dialog_type","CONTROLS","ITEM_HISTORY","item_plural","item_controller","get_item_info","item_list_action","toLowerCase","plural","controller","iclass","list_ajax_url","ITEM_VISUALIZATION","make_item_importable","item_id","item_type","singular","replace","ajax_url","error","alert","$","document","ajaxError","e","x","message","responseText","statusText","show_modal","Ignore error","hide_modal","append","skin","basePath","editor_base_path","make_popupmenu","insert_link_menu_button","editor","WYMeditor","TOOLS","IFRAME","STATUS","name","title","css","embed_object_button","DIALOG_EMBED_DATASET","DIALOG_EMBED_WORKFLOW","DIALOG_EMBED_VISUALIZATION","wymeditors","save","callback","ajax","url","save_url","type","data","id","page_id","content","xhtml","annotations","JSON","stringify","Object","_","success","click","window","location","page_list_url","containers_menu","items","each","_options","containersItems","k","v","tagname","container","addClass","Insert History Link","dialog","DIALOG_HISTORY_LINK","Insert Dataset Link","DIALOG_DATASET_LINK","Insert Workflow Link","DIALOG_WORKFLOW_LINK","Insert Page Link","DIALOG_PAGE_LINK","Insert Visualization Link","DIALOG_VISUALIZATION_LINK","Embed History","DIALOG_EMBED_HISTORY","Embed Dataset","Embed Workflow","Embed Visualization","ITEM_DATASET","ITEM_WORKFLOW","ITEM_PAGE","dialogType","dialogFeatures","bodyHtml","wym","selected","attribute_input","val","attr","HREF","srcSelector","SRC","titleSelector","TITLE","remove","ALT","curURL","curTitle","undefined","altSelector","Make link","sUrl","hrefSelector","sId","_exec","CREATE_LINK","sStamp","body","link","text","indexOf","sName","Cancel","removeClass","this","dialogImageSelector","_selected_image","Insert","newRow","newCol","INSERT_IMAGE","sCaption","_doc","captionSelector","newCaption","table","createCaption","DIALOG_TABLE","item_info","TABLE","innerHTML","url_base","dict_format","insertRow","y","iCols","insertCell","buttons","summarySelector","make_importable","MAIN_CONTAINERS","get","node","parentNode","after","Galaxy","Close","grid","_gridView2","default","embedded","modal","show","$el","Array","getJSON","returned_item_info","link_text","insert","item_embed_html","hide","DIALOG_EMBED_PAGE","boxHtml","toolsItems","closing_events","Embed","changed","do_close","item_name","join"],"mappings":"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","file":"../scripts/galaxy.pages.js","sourcesContent":["import \"libs/jquery/jquery.form\";\nimport \"libs/jquery/jstorage\";\nimport \"libs/jquery/jquery.wymeditor\";\nimport \"libs/jquery/jquery.autocomplete\";\nimport GridView from \"mvc/grid/grid-view\";\n\nvar CONTROLS = {\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 // Set up events to make annotation easy.\n $(\".annotation\", wym._doc.body).each(function() {\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// Based on the dialog type, return a dictionary of information about an item\nfunction get_item_info(dialog_type) {\n var item_singular;\n var item_plural;\n var item_controller;\n var item_class;\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 var 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() {\n alert(`Making ${item_type} accessible failed`);\n }\n });\n}\n\n// Completely replace WYM's dialog handling\nWYMeditor.editor.prototype.dialog = function(dialogType, dialogFeatures, bodyHtml) {\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 // When \"set link id\" link clicked, update UI.\n $(\"#set_link_id\").click(function() {\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) 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\n // Get current URL, title.\n var curURL;\n\n var curTitle;\n if (selected) {\n curURL = $(selected).attr(\"href\");\n if (curURL == undefined) curURL = \"\";\n curTitle = $(selected).attr(\"title\");\n if (curTitle == undefined) curTitle = \"\";\n }\n show_modal(\n \"Create Link\",\n `
\",\n \"Embedded Galaxy \",\n item_info.singular,\n \" '\",\n item_name,\n \"'\",\n \"
\",\n \"\",\n \"[Do not edit this block; Galaxy will fill it in with the annotated \",\n item_info.singular.toLowerCase(),\n \" when it is displayed.]\",\n \"
\",\n \"${\n WYMeditor.TOOLS\n } |
${\n // + WYMeditor.HTML\n WYMeditor.IFRAME\n }${WYMeditor.STATUS} |
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 += '\" + sTmp + \"
\");\n }\n } else {\n for(x = 0; x < aP.length; x++) {\n sTmp = aP[x];\n //simple newlines are replaced by a break\n sTmp = sTmp.replace(rExp, \"\" + sTmp + \"
\");\n }\n \n }\n};\n\nWYMeditor.editor.prototype.insert = function(html) {\n // Do we have a selection?\n if (this._iframe.contentWindow.getSelection().focusNode != null) {\n // Overwrite selection with provided html\n this._exec( WYMeditor.INSERT_HTML, html);\n } else {\n // Fall back to the internal paste function if there's no selection\n this.paste(html)\n }\n};\n\nWYMeditor.editor.prototype.wrap = function(left, right) {\n // Do we have a selection?\n if (this._iframe.contentWindow.getSelection().focusNode != null) {\n // Wrap selection with provided html\n this._exec( WYMeditor.INSERT_HTML, left + this._iframe.contentWindow.getSelection().toString() + right);\n }\n};\n\nWYMeditor.editor.prototype.unwrap = function() {\n // Do we have a selection?\n if (this._iframe.contentWindow.getSelection().focusNode != null) {\n // Unwrap selection\n this._exec( WYMeditor.INSERT_HTML, this._iframe.contentWindow.getSelection().toString() );\n }\n};\n\nWYMeditor.editor.prototype.addCssRules = function(doc, aCss) {\n var styles = doc.styleSheets[0];\n if(styles) {\n for(var i = 0; i < aCss.length; i++) {\n var oCss = aCss[i];\n if(oCss.name && oCss.css) this.addCssRule(styles, oCss);\n }\n }\n};\n\n/********** CONFIGURATION **********/\n\nWYMeditor.editor.prototype.computeBasePath = function() {\n return jQuery(jQuery.grep(jQuery('script'), function(s){\n return (s.src && s.src.match(/jquery\\.wymeditor(\\.pack|\\.min|\\.packed)?\\.js(\\?.*)?$/ ))\n })).attr('src').replace(/jquery\\.wymeditor(\\.pack|\\.min|\\.packed)?\\.js(\\?.*)?$/, '');\n};\n\nWYMeditor.editor.prototype.computeWymPath = function() {\n return jQuery(jQuery.grep(jQuery('script'), function(s){\n return (s.src && s.src.match(/jquery\\.wymeditor(\\.pack|\\.min|\\.packed)?\\.js(\\?.*)?$/ ))\n })).attr('src');\n};\n\nWYMeditor.editor.prototype.computeJqueryPath = function() {\n return jQuery(jQuery.grep(jQuery('script'), function(s){\n return (s.src && s.src.match(/jquery(-(.*)){0,1}(\\.pack|\\.min|\\.packed)?\\.js(\\?.*)?$/ ))\n })).attr('src');\n};\n\nWYMeditor.editor.prototype.computeCssPath = function() {\n return jQuery(jQuery.grep(jQuery('link'), function(s){\n return (s.href && s.href.match(/wymeditor\\/skins\\/(.*)screen\\.css(\\?.*)?$/ ))\n })).attr('href');\n};\n\nWYMeditor.editor.prototype.configureEditorUsingRawCss = function() {\n\n var CssParser = new WYMeditor.WymCssParser();\n if(this._options.stylesheet){\n CssParser.parse(jQuery.ajax({url: this._options.stylesheet,async:false}).responseText);\n }else{\n CssParser.parse(this._options.styles, false);\n }\n\n if(this._options.classesItems.length == 0) {\n this._options.classesItems = CssParser.css_settings.classesItems;\n }\n if(this._options.editorStyles.length == 0) {\n this._options.editorStyles = CssParser.css_settings.editorStyles;\n }\n if(this._options.dialogStyles.length == 0) {\n this._options.dialogStyles = CssParser.css_settings.dialogStyles;\n }\n};\n\n/********** EVENTS **********/\n\nWYMeditor.editor.prototype.listen = function() {\n\n //don't use jQuery.find() on the iframe body\n //because of MSIE + jQuery + expando issue (#JQ1143)\n //jQuery(this._doc.body).find(\"*\").bind(\"mouseup\", this.mouseup);\n \n jQuery(this._doc.body).bind(\"mousedown\", this.mousedown);\n var images = this._doc.body.getElementsByTagName(\"img\");\n for(var i=0; i < images.length; i++) {\n jQuery(images[i]).bind(\"mousedown\", this.mousedown);\n }\n};\n\nWYMeditor.editor.prototype.mousedown = function(evt) {\n \n var wym = WYMeditor.INSTANCES[this.ownerDocument.title];\n wym._selected_image = (this.tagName.toLowerCase() == WYMeditor.IMG) ? this : null;\n evt.stopPropagation();\n};\n\n/********** SKINS **********/\n\n/*\n * Function: WYMeditor.loadCss\n * Loads a stylesheet in the document.\n *\n * Parameters:\n * href - The CSS path.\n */\nWYMeditor.loadCss = function(href) {\n \n var link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = href;\n\n var head = jQuery('head').get(0);\n head.appendChild(link);\n};\n\n/*\n * Function: WYMeditor.editor.loadSkin\n * Loads the skin CSS and initialization script (if needed).\n */\nWYMeditor.editor.prototype.loadSkin = function() {\n\n //does the user want to automatically load the CSS (default: yes)?\n //we also test if it hasn't been already loaded by another instance\n //see below for a better (second) test\n if(this._options.loadSkin && !WYMeditor.SKINS[this._options.skin]) {\n\n //check if it hasn't been already loaded\n //so we don't load it more than once\n //(we check the existing elements)\n\n var found = false;\n var rExp = new RegExp(this._options.skin\n + '\\/' + WYMeditor.SKINS_DEFAULT_CSS + '$');\n\n jQuery('link').each( function() {\n if(this.href.match(rExp)) found = true;\n });\n\n //load it, using the skin path\n if(!found) WYMeditor.loadCss( this._options.skinPath\n + WYMeditor.SKINS_DEFAULT_CSS );\n }\n\n //put the classname (ex. wym_skin_default) on wym_box\n jQuery(this._box).addClass( \"wym_skin_\" + this._options.skin );\n\n //does the user want to use some JS to initialize the skin (default: yes)?\n //also check if it hasn't already been loaded by another instance\n if(this._options.initSkin && !WYMeditor.SKINS[this._options.skin]) {\n\n eval(jQuery.ajax({url:this._options.skinPath\n + WYMeditor.SKINS_DEFAULT_JS, async:false}).responseText);\n }\n\n //init the skin, if needed\n if(WYMeditor.SKINS[this._options.skin]\n && WYMeditor.SKINS[this._options.skin].init)\n WYMeditor.SKINS[this._options.skin].init(this);\n\n};\n\n\n/********** DIALOGS **********/\n\nWYMeditor.INIT_DIALOG = function(index) {\n\n var wym = window.opener.WYMeditor.INSTANCES[index];\n var doc = window.document;\n var selected = wym.selected();\n var dialogType = jQuery(wym._options.dialogTypeSelector).val();\n var sStamp = wym.uniqueStamp();\n\n switch(dialogType) {\n\n case WYMeditor.DIALOG_LINK:\n //ensure that we select the link to populate the fields\n if(selected && selected.tagName && selected.tagName.toLowerCase != WYMeditor.A)\n selected = jQuery(selected).parentsOrSelf(WYMeditor.A);\n\n //fix MSIE selection if link image has been clicked\n if(!selected && wym._selected_image)\n selected = jQuery(wym._selected_image).parentsOrSelf(WYMeditor.A);\n break;\n\n }\n\n //pre-init functions\n if(jQuery.isFunction(wym._options.preInitDialog))\n wym._options.preInitDialog(wym,window);\n\n //add css rules from options\n var styles = doc.styleSheets[0];\n var aCss = eval(wym._options.dialogStyles);\n\n wym.addCssRules(doc, aCss);\n\n //auto populate fields if selected container (e.g. A)\n if(selected) {\n jQuery(wym._options.hrefSelector).val(jQuery(selected).attr(WYMeditor.HREF));\n jQuery(wym._options.srcSelector).val(jQuery(selected).attr(WYMeditor.SRC));\n jQuery(wym._options.titleSelector).val(jQuery(selected).attr(WYMeditor.TITLE));\n jQuery(wym._options.altSelector).val(jQuery(selected).attr(WYMeditor.ALT));\n }\n\n //auto populate image fields if selected image\n if(wym._selected_image) {\n jQuery(wym._options.dialogImageSelector + \" \" + wym._options.srcSelector)\n .val(jQuery(wym._selected_image).attr(WYMeditor.SRC));\n jQuery(wym._options.dialogImageSelector + \" \" + wym._options.titleSelector)\n .val(jQuery(wym._selected_image).attr(WYMeditor.TITLE));\n jQuery(wym._options.dialogImageSelector + \" \" + wym._options.altSelector)\n .val(jQuery(wym._selected_image).attr(WYMeditor.ALT));\n }\n\n jQuery(wym._options.dialogLinkSelector + \" \"\n + wym._options.submitSelector).click(function() {\n\n var sUrl = jQuery(wym._options.hrefSelector).val();\n if(sUrl.length > 0) {\n\n wym._exec(WYMeditor.CREATE_LINK, sStamp);\n\n jQuery(\"a[href=\" + sStamp + \"]\", wym._doc.body)\n .attr(WYMeditor.HREF, sUrl)\n .attr(WYMeditor.TITLE, jQuery(wym._options.titleSelector).val());\n\n }\n window.close();\n });\n\n jQuery(wym._options.dialogImageSelector + \" \"\n + wym._options.submitSelector).click(function() {\n\n var sUrl = jQuery(wym._options.srcSelector).val();\n if(sUrl.length > 0) {\n\n wym._exec(WYMeditor.INSERT_IMAGE, sStamp);\n\n jQuery(\"img[src$=\" + sStamp + \"]\", wym._doc.body)\n .attr(WYMeditor.SRC, sUrl)\n .attr(WYMeditor.TITLE, jQuery(wym._options.titleSelector).val())\n .attr(WYMeditor.ALT, jQuery(wym._options.altSelector).val());\n }\n window.close();\n });\n\n jQuery(wym._options.dialogTableSelector + \" \"\n + wym._options.submitSelector).click(function() {\n\n var iRows = jQuery(wym._options.rowsSelector).val();\n var iCols = jQuery(wym._options.colsSelector).val();\n\n if(iRows > 0 && iCols > 0) {\n\n var table = wym._doc.createElement(WYMeditor.TABLE);\n var newRow = null;\n\t\tvar newCol = null;\n\n\t\tvar sCaption = jQuery(wym._options.captionSelector).val();\n\n\t\t//we create the caption\n\t\tvar newCaption = table.createCaption();\n\t\tnewCaption.innerHTML = sCaption;\n\n\t\t//we create the rows and cells\n\t\tfor(x=0; xHello world!
\n* this.contentTag('div', this.contentTag('p', \"Hello world!\"), jQuery({class : \"strong\"}))\n* # =>Hello world!