{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/App.vue?7e02","webpack:///./galaxy/src/api/histories.js","webpack:///./src/assets/about.htm","webpack:///./src/assets/download.htm","webpack:///./src/app.config.js","webpack:///./src/assets/examples.htm","webpack:///./src/App.vue?b480","webpack:///./src/IslandCompare/Navigation.vue?1bc7","webpack:///./src/brinkman_services.js","webpack:///src/IslandCompare/Navigation.vue","webpack:///./src/IslandCompare/Navigation.vue?9450","webpack:///./src/IslandCompare/Navigation.vue","webpack:///./src/tour.js","webpack:///src/App.vue","webpack:///./src/App.vue?60ed","webpack:///./src/App.vue","webpack:///./src/store.js","webpack:///./src/IslandCompare/Home.vue?5aab","webpack:///./src/components/News.vue?fb81","webpack:///src/components/News.vue","webpack:///./src/components/News.vue?4433","webpack:///./src/components/News.vue","webpack:///src/IslandCompare/Home.vue","webpack:///./src/IslandCompare/Home.vue?8d22","webpack:///./src/IslandCompare/Home.vue","webpack:///./src/components/IFrameContent.vue?d4fc","webpack:///src/components/IFrameContent.vue","webpack:///./src/components/IFrameContent.vue?9a12","webpack:///./src/components/IFrameContent.vue","webpack:///./src/main.js","webpack:///./vue.config.js","webpack:///./galaxy/src/api/jobs.js","webpack:///./src/assets/welcome.htm","webpack:///./galaxy/src/api/users.js","webpack:///./galaxy/src/api/index.js","webpack:///./galaxy/src/histories/index.js","webpack:///./galaxy/src/genomes/index.js","webpack:///./galaxy/src/workflows/index.js","webpack:///./galaxy/src/misc/index.js","webpack:///./galaxy/src/users/index.js","webpack:///./galaxy/src/index.js","webpack:///./galaxy/src/api/workflows.js","webpack:///./src/assets/contact.htm","webpack:///./src/components/HTMLFragment.vue?2130","webpack:///src/components/HTMLFragment.vue","webpack:///./src/components/HTMLFragment.vue?b05f","webpack:///./src/components/HTMLFragment.vue","webpack:///./src/assets/faq.htm","webpack:///./src/assets/publications.htm","webpack:///./galaxy/src/api/history_contents.js","webpack:///./galaxy/src/api/_common.js","webpack:///./galaxy/src/api/genomes.js","webpack:///./src/IslandCompare/Home.vue?e4fd"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","installedCssChunks","jsonpScriptSrc","p","exports","module","l","e","promises","cssChunks","Promise","resolve","reject","href","fullhref","existingLinkTags","document","getElementsByTagName","tag","dataHref","getAttribute","rel","existingStyleTags","linkTag","createElement","type","onload","onerror","event","request","target","src","err","Error","code","parentNode","removeChild","head","appendChild","then","installedChunkData","promise","onScriptComplete","script","charset","timeout","nc","setAttribute","error","clearTimeout","chunk","errorType","realSrc","message","name","undefined","setTimeout","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","console","jsonpArray","window","oldJsonpFunction","slice","History","args","assign","Common","file","file_type","kind","getAsFile","HistoryDatasetAssociation","upload","this","id","content","deep","options","source","HistoryDatasetCollectionAssociation","constructor","srcName","post","copy_elements","datasets","galaxy","history_contents","fetch","update","where","primaryKey","contentsFetched","string","importable","boolean","create_time","Date","toISOString","contents_url","nullable","size","number","user_id","username_and_slug","annotation","state_details","attr","paused","ok","failed_metadata","discarded","running","setting_metadata","new","queued","empty","state","update_time","tags","deleted","genome_build","slug","url","state_ids","published","model_class","purged","hasMany","collections","params","view","dataTransformer","response","config","method","Module","mutations","actions","getters","register","database","workflow_tag","workflow_owner","application_tag","base_path","publicPath","galaxy_path","location","protocol","host_parts","hostname","split","unshift","join","_vm","_h","$createElement","_c","_self","attrs","staticClass","_v","tour","steps","$tours","callbacks","staticRenderFns","_t","_l","page","path","$route","_s","component","tutorial","offset","placement","onCreate","instance","reference","addEventListener","nextStep","onStart","onPreviousStep","step","onNextStep","onStop","Vue","use","Vuex","store","Store","namespaced","plugins","welcome","examples","news","item","index","date","toDateString","title","domProps","body","class","filter","AsyncAnalysis","AsyncHistory","isProd","process","productionTip","Galaxy","baseURL","VueRouter","AsyncComputed","useRawError","BootstrapVue","VueTour","router","base","routes","Home","props","route","query","meta","showTour","HTMLFragment","require","News","navbar","IFrameContent","analytics_id","VueAnalytics","autoTracking","exception","debug","enabled","sendHitTask","log","render","h","App","appName","$mount","devServer","disableHostCheck","Job","label","self","stderr","reload","full","find","tool_id","history_id","exit_code","galaxy_version","command_version","inputs","outputs","tool_stdout","tool_stderr","job_stdout","job_stderr","stdout","job_messages","history","belongsTo","workflow_invocation_step_id","User","username","quota_percent","preferences","total_disk_usage","nice_total_disk_usage","quota","email","is_admin","tags_used","build_url","entities","entity","password","api","auth","save","api_key","status","headers","Database","axios","VuexORM","VuexORMAxios","genomes","histories","jobs","users","workflows","submodules","common","HistoryContents","Histories","HistoryFunctions","HistoryItem","HistoryItemFunctions","Collection","Dataset","WorkflowInvocation","WorkflowInvocationStep","WorkflowInvocationSteps","WorkflowParameter","WorkflowParameterBase","WorkflowParameters","DatasetParameter","DBKeyParameter","SimpleParameter","Quota","install","namespace","reduce","acc","cur","states","entries","invocation","workflow_invocation_id","subworkflow_invocation_id","findOrLoad","step_details","subworkflow","get_error_log","job","workflow_step_label","workflow_step_uuid","job_id","order_index","output_collections","action","workflow_step_id","subinvocation","StoredWorkflow","workflow_id","err_code","forEach","count","with","all_outputs","keys","srcMap","elem","poll_state","uuid","workflow","output_models","apiPath","match","Array","datum","isArray","put","input","collection_type","tool_inputs","element_identifiers","delete","no_add_to_history","map","flat","invocationsFetched","latest_workflow_uuid","show_in_tool_panel","number_of_steps","owner","version","invocations","param","format","x","trim","anchor","HistoryAssociation","hid","ghost_hid","local_only","url_xform","download_url","extension","style","display","click","ready_states","includes","accessible","type_id","file_name","resubmitted","creating_job","dataset_id","file_size","file_ext","misc_info","hda_ldda","display_types","display_apps","metadata_dbkey","misc_blurb","peek","data_type","meta_files","metadata_sequences","metadata_data_lines","permissions","access","manage","history_content_type","visible","visualizations","rerunnable","api_type","upload_progress","tmp_id","Math","floor","random","toString","ext","insert","formData","FormData","append","JSON","stringify","throttle","waiting_uploads","onUploadProgress","progressEvent","loaded","total","validateStatus","callback","extra","poll_state_callback","populated_state","populated_state_message","populated","job_source_id","job_source_type","element_count","elements","HasState","state_callback","end_states","start_polling","Model","createConfig","fields","fromEntries","k","$toJson","stop_polling","stop_criteria","interval","pollHandles","Map","has","f","pollHandle","set","catch","obj","axiosResponse","createResponse","_merge","model","globalApiConfig","apiConfig","requestConfig","doRequest","VuexModel","State","Function","Mutations","Actions","Getters","Genome"],"mappings":"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","file":"js/app.115290c6.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded CSS chunks\n \tvar installedCssChunks = {\n \t\t\"app\": 0\n \t}\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"js/\" + ({\"Collection\":\"Collection\",\"DBKeyParameter\":\"DBKeyParameter\",\"Dataset\":\"Dataset\",\"EditableLabel\":\"EditableLabel\",\"FunctionIcon\":\"FunctionIcon\",\"History\":\"History\",\"HistoryItem\":\"HistoryItem\",\"Quota\":\"Quota\",\"ReferenceGenomes\":\"ReferenceGenomes\",\"SimpleParameter\":\"SimpleParameter\",\"WorkflowInvocation\":\"WorkflowInvocation\",\"WorkflowInvocationStep\":\"WorkflowInvocationStep\",\"WorkflowInvocationSteps\":\"WorkflowInvocationSteps\",\"WorkflowParameterBase\":\"WorkflowParameterBase\",\"WorkflowParameters\":\"WorkflowParameters\",\"DatasetParameter\":\"DatasetParameter\",\"HistoryContents\":\"HistoryContents\",\"WorkflowParameter\":\"WorkflowParameter\"}[chunkId]||chunkId) + \".\" + {\"Collection\":\"09298bb7\",\"DBKeyParameter\":\"9b1aaeb4\",\"Dataset\":\"60d1a5e6\",\"EditableLabel\":\"5514262c\",\"FunctionIcon\":\"da020586\",\"History\":\"79d9a360\",\"HistoryItem\":\"75a3d049\",\"Quota\":\"6c3ba991\",\"ReferenceGenomes\":\"841cb1ff\",\"SimpleParameter\":\"39f43dc5\",\"WorkflowInvocation\":\"6c8aa148\",\"WorkflowInvocationStep\":\"380ef2a0\",\"WorkflowInvocationSteps\":\"a16dab63\",\"WorkflowParameterBase\":\"84f6951b\",\"WorkflowParameters\":\"836e4007\",\"chunk-47c01c98\":\"2a4192e6\",\"chunk-779e2005\":\"037ed277\",\"chunk-dcf689d0\":\"d42c6e96\",\"chunk-75c5b16b\":\"556ea006\",\"DatasetParameter\":\"1fddc986\",\"HistoryContents\":\"cca9c954\",\"chunk-8c1b39fa\":\"76c6c414\",\"WorkflowParameter\":\"55fd751e\"}[chunkId] + \".js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// mini-css-extract-plugin CSS loading\n \t\tvar cssChunks = {\"Collection\":1,\"DBKeyParameter\":1,\"Dataset\":1,\"EditableLabel\":1,\"History\":1,\"HistoryItem\":1,\"Quota\":1,\"ReferenceGenomes\":1,\"SimpleParameter\":1,\"WorkflowInvocation\":1,\"WorkflowParameterBase\":1,\"WorkflowParameters\":1,\"chunk-47c01c98\":1,\"chunk-779e2005\":1,\"chunk-dcf689d0\":1,\"chunk-75c5b16b\":1,\"DatasetParameter\":1,\"HistoryContents\":1,\"chunk-8c1b39fa\":1};\n \t\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n \t\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n \t\t\tpromises.push(installedCssChunks[chunkId] = new Promise(function(resolve, reject) {\n \t\t\t\tvar href = \"css/\" + ({\"Collection\":\"Collection\",\"DBKeyParameter\":\"DBKeyParameter\",\"Dataset\":\"Dataset\",\"EditableLabel\":\"EditableLabel\",\"FunctionIcon\":\"FunctionIcon\",\"History\":\"History\",\"HistoryItem\":\"HistoryItem\",\"Quota\":\"Quota\",\"ReferenceGenomes\":\"ReferenceGenomes\",\"SimpleParameter\":\"SimpleParameter\",\"WorkflowInvocation\":\"WorkflowInvocation\",\"WorkflowInvocationStep\":\"WorkflowInvocationStep\",\"WorkflowInvocationSteps\":\"WorkflowInvocationSteps\",\"WorkflowParameterBase\":\"WorkflowParameterBase\",\"WorkflowParameters\":\"WorkflowParameters\",\"DatasetParameter\":\"DatasetParameter\",\"HistoryContents\":\"HistoryContents\",\"WorkflowParameter\":\"WorkflowParameter\"}[chunkId]||chunkId) + \".\" + {\"Collection\":\"10438c44\",\"DBKeyParameter\":\"45f6a85e\",\"Dataset\":\"10438c44\",\"EditableLabel\":\"c67e2af3\",\"FunctionIcon\":\"31d6cfe0\",\"History\":\"a7f1f137\",\"HistoryItem\":\"10438c44\",\"Quota\":\"dc99ad22\",\"ReferenceGenomes\":\"c08b8eeb\",\"SimpleParameter\":\"f78ef870\",\"WorkflowInvocation\":\"71764e48\",\"WorkflowInvocationStep\":\"31d6cfe0\",\"WorkflowInvocationSteps\":\"31d6cfe0\",\"WorkflowParameterBase\":\"bd2dbd08\",\"WorkflowParameters\":\"529721d8\",\"chunk-47c01c98\":\"496cf4f3\",\"chunk-779e2005\":\"acd6cb97\",\"chunk-dcf689d0\":\"711acd73\",\"chunk-75c5b16b\":\"c6afb150\",\"DatasetParameter\":\"bd2dbd08\",\"HistoryContents\":\"aaccbbdb\",\"chunk-8c1b39fa\":\"dca875e5\",\"WorkflowParameter\":\"31d6cfe0\"}[chunkId] + \".css\";\n \t\t\t\tvar fullhref = __webpack_require__.p + href;\n \t\t\t\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n \t\t\t\tfor(var i = 0; i < existingLinkTags.length; i++) {\n \t\t\t\t\tvar tag = existingLinkTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n \t\t\t\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return resolve();\n \t\t\t\t}\n \t\t\t\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n \t\t\t\tfor(var i = 0; i < existingStyleTags.length; i++) {\n \t\t\t\t\tvar tag = existingStyleTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\");\n \t\t\t\t\tif(dataHref === href || dataHref === fullhref) return resolve();\n \t\t\t\t}\n \t\t\t\tvar linkTag = document.createElement(\"link\");\n \t\t\t\tlinkTag.rel = \"stylesheet\";\n \t\t\t\tlinkTag.type = \"text/css\";\n \t\t\t\tlinkTag.onload = resolve;\n \t\t\t\tlinkTag.onerror = function(event) {\n \t\t\t\t\tvar request = event && event.target && event.target.src || fullhref;\n \t\t\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + request + \")\");\n \t\t\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n \t\t\t\t\terr.request = request;\n \t\t\t\t\tdelete installedCssChunks[chunkId]\n \t\t\t\t\tlinkTag.parentNode.removeChild(linkTag)\n \t\t\t\t\treject(err);\n \t\t\t\t};\n \t\t\t\tlinkTag.href = fullhref;\n\n \t\t\t\tvar head = document.getElementsByTagName(\"head\")[0];\n \t\t\t\thead.appendChild(linkTag);\n \t\t\t}).then(function() {\n \t\t\t\tinstalledCssChunks[chunkId] = 0;\n \t\t\t}));\n \t\t}\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import mod from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css&\"","/**\n * Code responsible for interacting with /api/histories\n * https://docs.galaxyproject.org/en/latest/api/api.html#module-galaxy.webapps.galaxy.api.histories\n */\nimport * as Common from \"./_common\";\n\nimport { HistoryDatasetAssociation, HistoryDatasetCollectionAssociation } from \"./history_contents\";\nimport {api as galaxy} from \"../index\"; //eslint-disable-line\n\n\nclass History extends Common.Model {\n static entity = 'History';\n static primaryKey = 'id';\n static end_states = ['ok','error'];\n static apiPath = '/api/histories/';\n\n constructor(...args) {\n super(...args);\n Object.assign(this, Common.HasState);\n }\n\n static fields() {\n return {\n ...super.fields(),\n //Request data\n id: this.string(null),\n importable: this.boolean(false),\n create_time: this.string((new Date).toISOString()),\n contents_url: this.string(null).nullable(),\n size: this.number(0),\n user_id: this.string(null).nullable(),\n username_and_slug: this.string(null).nullable(),\n annotation: this.string(null).nullable(),\n state_details: this.attr({\n paused: 0,\n ok: 0,\n failed_metadata: 0,\n upload: 0,\n discarded: 0,\n running: 0,\n setting_metadata: 0,\n error: 0,\n new: 0,\n queued: 0,\n empty: 0,\n }),\n state: this.string('ok'),\n empty: this.boolean(true),\n update_time: this.string((new Date).toISOString()),\n tags: this.attr([]),\n deleted: this.boolean(false),\n genome_build: this.string(null).nullable(),\n slug: this.string(null).nullable(),\n name: this.string(\"Unnamed History\"),\n url: this.string(null).nullable(),\n state_ids: this.attr({\n paused: [],\n ok: [],\n failed_metadata: [],\n upload: [],\n discarded: [],\n running: [],\n setting_metadata: [],\n error: [],\n new: [],\n queued: [],\n empty: [],\n }),\n published: this.boolean(false),\n model_class: this.string(\"History\"),\n purged: this.boolean(false),\n\n //ORM only\n datasets: this.hasMany(HistoryDatasetAssociation, 'history_id'),\n collections: this.hasMany(HistoryDatasetCollectionAssociation, 'history_id'),\n contentsFetched: this.boolean(false),\n }\n }\n\n //TODO GET /api/histories/most_recently_used\n //TODO GET /api/histories/shared_with_me\n //TODO GET /api/histories/published\n //TODO GET /api/histories/deleted -- May want a DeletedHistory subclass\n //TODO POST /api/histories/deleted/{id}/undelete\n //TODO GET /api/histories/{id}/custom_builds_metadata\n //TODO PUT /api/histories/{id}/exports\n //TODO GET /api/histories/{id}/exports/{jeha_id}\n\n /**\n * Upload a file to this history\n * @param file {File} File to upload\n * @param file_type {string} Optional file type to skip sniffing\n * @returns {Promise} HDA model of uploaded dataset\n */\n async fileUpload(file, file_type) {\n if (file.kind) {\n // Use DataTransferItemList interface to access the file(s)\n if (file.kind === 'file') file = file.getAsFile();\n else return null; // If dropped items aren't files, reject them\n } // Else use DataTransfer interface to access the file(s)\n if (file)\n return await HistoryDatasetAssociation.upload(file, this.id, file_type);\n }\n\n /**\n * Copy hda, hdca, ldda, ldca into history\n * @param content {{id: string, src: 'hda'|'hdca'|'ldda'|'ldca'} | HistoryDatasetAssociation | HistoryDatasetCollectionAssociation}\n * @param deep {boolean} Copy collection elements with collection\n * @param options {object} Options to pass to post()\n * @return {Promise}\n */\n async copy_into(content, deep = false, options = {}) {\n const id = content.id;\n let source, type;\n if (content instanceof HistoryDatasetAssociation || content instanceof HistoryDatasetCollectionAssociation) source = content.constructor.srcName;\n else source = content.src;\n // TODO is 'ldda' and 'ldca' correct?\n switch (source) {\n case 'ldda':\n source = 'library';\n //fallthrough\n case 'hda':\n type = HistoryDatasetAssociation;\n break;\n case 'ldca':\n source = 'library_folder';\n //fallthrough\n case 'hdca':\n type = HistoryDatasetCollectionAssociation;\n break;\n }\n return type.post(this, {data: { source, content: id, copy_elements: deep }, ...options});\n }\n\n static async fetch(options = {}) {\n return super.fetch({params: {view: 'detailed', ...options.params}, ...options})\n }\n\n // TODO GET /api/histories/{history_id}/contents/near/{hid}/{limit}\n // https://docs.galaxyproject.org/en/latest/lib/galaxy.webapps.galaxy.api.html#galaxy.webapps.galaxy.api.history_contents.HistoryContentsController.contents_near\n\n async loadContents() {\n if (this.datasets.length === 0) {\n await galaxy.history_contents.HistoryDatasetAssociation.fetch(this);\n }\n /*if (history.collections.length === 0) { TODO\n await galaxy.history_contents.HistoryDatasetCollectionAssociation.$fetch({\n params: {\n url: history.get_contents_url(),\n }\n });\n }*/\n this.constructor.update({where: this[this.constructor.primaryKey], data: {contentsFetched: true}});\n }\n\n static apiConfig = {\n dataTransformer(response) {\n if (response.config.method === 'post') {\n response.data['contentsFetched'] = true; // New histories don't have contents\n }\n return response.data\n }\n };\n}\n\n/*class HistoryExport extends Common.Model { //TODO\n}*/\n\nconst Module = {\n ...Common.Module,\n state: Common.State({\n\n }),\n mutations: {\n ...Common.Mutations,\n },\n actions: {\n ...Common.Actions,\n },\n getters: {\n ...Common.Getters,\n },\n};\n\nfunction register(database) {\n database.register(History, Module);\n}\n\nexport {\n History,\n Module,\n register,\n};\n","module.exports = \"\\n

About

\\n

IslandCompare

\\n

IslandCompare has been developed to facilitate the analysis of microbial population datasets. While IslandViewer\\ncontinues to serve as an excellent resource for visual analysis of genomic islands for individual genomes, IslandCompare\\nenables the user to submit sets of genomes to be analysed and visualized together. The interactive visual output is designed\\nto allow users to visually distinguish genomic island and alignment differences between their genomes.

\\n

This software and website are developed and maintained by the Brinkman lab at Simon Fraser\\nUniversity, Canada. Please contact us with any questions or comments.

\\n

Tutorial

\\n

If you would like to test IslandCompare, please feel free to view the pre-computed results of Listeria monocytogenes genomes\\nor download the sample dataset.\\nAlternatively, you can also view a pre-computed set\\nof Pseudomonas aeruginosa genomes. This second dataset also demonstrates how the\\nalignment visuals allow you to see quickly see large structural changes in the genome, such as large genomic inversions.

\\n

Analysis Overview

\\n

IslandCompare performs a phylogenetic analysis and alignment of the submitted genomes in order to facilitate the visual presentation\\nof data and help users interpret the genomic island results. Similar to IslandViewer, genomic islands are predicted in IslandCompare\\nby two integrated genomic island prediction software – IslandPath-DIMOB and Sigi-HMM. Unique to IslandCompare is the cross-genome\\nclustering of genomic islands. Each cluster will be consistently coloured across genomes to enable the comparison of genomic\\nisland content. Finally, antimicrobial resistance genes are also predicted in the genomes and annotated in the visual output.

\\n

Phylogenomics

\\n

Parnsp is a tool from the Harvest suite of bioinformatics software Treangen et al., 2014\\nthat is designed to compute phylogenies for highly similar genome sequences. Parsnp evaluates regions present across all\\ngenomes (core genome regions) and identifies single nucleotide polymorphisms (SNPs), as well as other variants in these regions\\nin order to determine phylogenetic relatedness of the isolates under analysis.

\\n

Alignment

\\n

Mauve implements a seed-and-extend hashing method to identify aligned blocks within a set of sequences Darling et al.,\\n2010. Mauve can efficiently compute whole genome\\nalignments. For IslandCompare, these alignments are displayed in the interactive visual to support the investigation of putative\\ngenomic

\\n

islands. Having the alignment presented alongside the genomic island annotations helps to visually evaluate whether islands\\nannotated in a subset of genomes align elsewhere in adjacent genomes on the phylogeny or seem unique to that subset.

\\n

Genomic Island Prediction

\\n

IslandPath-DIMOB predicts genomic islands based on dinucleotide bias and the presence of mobility genes. A sliding window\\nencompassing six contiguous open reading frames at a time moves along the genome. For each set of open reading frames, the\\ndinucleotide usage relative to that of the entire genome is measured. An average of each of the 16 dinucleotides is computed\\nand this is taken to be the dinucleotide bias value. Regions with dinucleotide bias that differs significantly from the whole\\ngenome are retained and merged with neighboring regions of bias in accordance with a number of cut-offs. Regions of dinucleotide\\nbias that do not contain at least one mobility gene are filtered out. Mobility genes are identified by both a text search\\nand homology analysis using HMMer. For our most recent IslandPath-DIMOB publication, please see Bertelli et al, 2018.

\\n

Sigi-HMM (see Waack et al., 2006) is a sequence composition method that\\nis part of the Columbo software package. This method uses a Hidden Markov Model (HMM) and measures codon usage to identify\\npossible genomic islands. Sigi-HMM has been shown to be one of the highest precision genomic island prediction tools (Bertelli\\net al., 2018).

\\n

Clustering

\\n

Mash is used as part of a two-step clustering to approximate the similarity between genomic island sequences. Mash applies\\nMinHashing to sequence k-mers in order to determine sequence similarity, as measured by an approximation of the Jaccard index\\nOndov et al.,2016.

\\n

MCL (Matrix Cluster Algorithm) is an approach to resolving similarity matrices into clusters. The algorithm first converts\\nthe matrix into a weighted graph and then performs iterative graph traversals, trimming underutilized edges. Denser regions\\nof the graph will ultimately be grouped into clusters van Dongen, 2000.

\\n

Antimicrobial Resistance Gene Annotations

\\n

Resistance Gene Identifier (RGI) is a tool developed to make antimicrobial resistance gene predictions using the curated\\nComprehensive Antibiotic Resistance Database (CARD). CARD contains entries for both protein variant\\ngenes (mutations conferring resistance) and protein homolog genes involved in resistance with curated detection cut-offs.\\nFor a full description of CARD and RGI, please see Jia et al., 2017.

\\n

Analysis Considerations

\\n

IslandCompare integrates two sequence composition genomic island prediction methods: Sigi-HMM and IslandPath-DIMOB. Genomic\\nislands that have been more anciently incorporated into a genome can ameliorate into the given genome, meaning their sequence\\ncomposition will come to more closely resemble that of the host genome. Genomic islands transferred between closely related\\nspecies will also have a more similar compositional signature. Sequence composition genomic island prediction methods may\\nhave difficulty detecting ancient genomic islands due to amelioration and other genomic islands with less distinguishable\\nsequence bias. Additionally, although both methods have high precision, they can make false predictions due to the normal\\nvariation in sequence composition that can occur in bacterial genomes.

\\n\";","module.exports = \"\\n

Download

\\n

Submit jobs using a command line interface

\\n

If you prefer working in a command line environment or wish to automate the task of submitting jobs, we have produced a command line interface script that aids in this.\\nThe linked resource includes the islandcompare.py script and instructions on how to use it.

\\n

Installing the IslandCompare workflow into an existing Galaxy instance

\\n

The workflow is awaiting publication and is not yet available. Please check back here after a publication is released for instructions on how to install your own copy of IslandCompare.

\\n\";","/*\nConfiguration options specific to the app\n */\n\nimport {publicPath} from \"../vue.config\";\n\nexport const workflow_tag = \"islandcompare\";\nexport const workflow_owner = \"brinkmanlab\";\nexport const application_tag = \"IslandCompare\";\nexport const base_path = publicPath;\nexport let galaxy_path = `${window.location.protocol}//galaxy.islandcompare.ca`; // Default backend\n\nif (process.env.NODE_ENV === 'production') {\n // Production only\n const host_parts = window.location.hostname.split('.');\n if (host_parts.length === 2) host_parts.unshift('galaxy'); // Handle root domain\n else host_parts[0] = 'galaxy'; // Replace subdomain otherwise\n galaxy_path = `${window.location.protocol}//${host_parts.join('.')}`;\n} else {\n // Dev only\n //galaxy_path = `${window.location.protocol}//galaxy.dev.islandcompare.ca`;\n //galaxy_path = `${window.location.protocol}//localhost:8000`;\n //galaxy_path = `${window.location.protocol}//galaxy.stage.islandcompare.ca`;\n galaxy_path = `${window.location.protocol}//galaxy.aws.islandcompare.ca`;\n}\n","module.exports = \"\\n

If you would like to test IslandCompare, please feel free to view the pre-computed results of Listeria monocytogenes genomes\\nor download the sample dataset.\\nAlternatively, you can also view a pre-computed set\\nof Pseudomonas aeruginosa genomes. This second dataset also demonstrates how the\\nalignment visuals allow you to see quickly see large structural changes in the genome, such as large genomic inversions.

\\n

Please note that Safari has known issues that will cause problems using this site. Please consider switching to Chrome of Firefox web browsers.

\\n\\n\";","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[_c('Navigation'),_c('keep-alive',[_c('router-view',{staticClass:\"content\"})],1),_c('footer',{staticClass:\"container\"},[_c('b-row',[_c('b-col',[_c('p',[_vm._v(\"If you use IslandCompare please cite (a publication is underway, in the meantime please cite IslandViewer):\")]),_c('p',[_vm._v(\"Bertelli, C., Gray, K.L. et al. “Enabling genomic island prediction and comparison in multiple genomes to investigate bacterial evolution and outbreaks” Microbial Genomics. 2022. doi: \"),_c('b-link',{attrs:{\"href\":\"https://doi.org/10.1099/mgen.0.000818\"}},[_vm._v(\"10.1099/mgen.0.000818\")])],1)]),_c('b-col',{attrs:{\"cols\":\"2\"}},[_c('p',[_vm._v(\"Managed by the \"),_c('b-link',{attrs:{\"href\":\"https://www.brinkman.mbb.sfu.ca/\"}},[_vm._v(\"Brinkman Lab\")]),_vm._v(\" and the Bertelli Lab\")],1)])],1),_c('b-row',[_c('b-col',[_c('div',{staticClass:\"logos\"},[_c('img',{attrs:{\"src\":\"/logos/cihr.png\"}}),_c('img',{attrs:{\"src\":\"/logos/genome_atlantic.jpg\"}}),_c('img',{attrs:{\"src\":\"/logos/genome-bc.png\"}}),_c('img',{attrs:{\"src\":\"/logos/genome_canada.jpg\"}}),_c('img',{attrs:{\"src\":\"/logos/computecanada.png\"}}),_c('img',{attrs:{\"src\":\"/logos/sfu.png\"}})])])],1)],1),_c('v-tour',{attrs:{\"name\":\"tour\",\"steps\":_vm.tour.steps(_vm.$tours['tour']),\"callbacks\":_vm.tour.callbacks}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('b-navbar',{attrs:{\"sticky\":true,\"variant\":\"primary\",\"type\":\"dark\",\"toggleable\":\"sm\"}},[_c('b-navbar-toggle',{attrs:{\"target\":\"nav-collapse\"}}),_vm._t(\"before\"),_c('b-navbar-nav',[_c('b-collapse',{attrs:{\"is-nav\":\"\",\"id\":\"nav-collapse\"}},[_vm._l((_vm.pages),function(page){return _c('b-nav-item',{key:page.name,attrs:{\"to\":page.path,\"active\":_vm.$route.path === page.path}},[_vm._v(\" \"+_vm._s(page.name)+\" \")])}),_vm._t(\"default\")],2)],1),_vm._t(\"after\")],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export default [\n {name: \"IslandViewer\", path: \"http://www.pathogenomics.sfu.ca/islandviewer/\"},\n {name: \"PSORTb v.3.0\", path: \"https://www.psort.org/psortb/index.html\"},\n {name: \"PSORTdb\", path: \"https://db.psort.org\"},\n {name: \"Pseudomonas Genome Database\", path: \"http://www.pseudomonas.com\"},\n {name: \"Burkholderia Genome Database\", path: \"http://www.burkholderia.com\"},\n];","\n\n\n\n","import mod from \"-!../../node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navigation.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navigation.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Navigation.vue?vue&type=template&id=69059de4&scoped=true&\"\nimport script from \"./Navigation.vue?vue&type=script&lang=js&\"\nexport * from \"./Navigation.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"69059de4\",\n null\n \n)\n\nexport default component.exports","// https://pulsar.gitbooks.io/vue-tour/\n\nexport const steps = (tutorial)=>[\n {\n target: '.galaxy-workflow-parameters [order=\"0\"]',\n content: 'Begin by uploading your data to be analysed by dragging and dropping it into the box to the right. Alternatively, click the upload button and select your datasets to upload.',\n offset: -100,\n params: {\n placement: 'left',\n }\n },\n {\n target: '.galaxy-workflow-parameters [order=\"0\"]',\n content: 'Once your datasets have been uploaded, select them by clicking in the box to the right. Hold Ctrl (⌘ for mac) to select multiple. Hold Shift to select a range.',\n offset: -100,\n params: {\n placement: 'left',\n }\n },\n {\n target: '.galaxy-workflow-parameters [order=\"1\"]',\n content: 'Optionally, you can upload a newick formatted tree which will decide the order of alignment in the visualization. If no tree is provided, one will be automatically computed.',\n offset: -100,\n params: {\n placement: 'left',\n }\n },\n {\n target: '.galaxy-workflow-parameters [order=\"2\"]',\n content: 'If you are analysing draft genomes, select a reference genome that is closest to your datasets species. The drafts will be stitched in the order of alignment to the reference. If no reference is selected the draft contigs will be stitched in the order they appear in the uploaded dataset.',\n offset: -100,\n params: {\n placement: 'left',\n }\n },\n {\n target: '.invocation-name',\n content: 'Enter a label to distinguish this analysis from others.',\n offset: -100,\n params: {\n placement: 'bottom-left',\n }\n },\n {\n target: '.invocation-submit',\n content: 'Click submit to run the analysis.',\n offset: -100,\n params: {\n onCreate(data) { //https://popper.js.org/popper-documentation.html#onUpdate\n const target = data.instance.reference;\n target.addEventListener('click', tutorial.nextStep);\n },\n placement: 'bottom-left',\n }\n },\n {\n target: '.analysis-tabs',\n content: 'The pending job will appear in the Recent Jobs tab. Once complete a \"Visualize\" button will appear in the Job History page along with the option to download the analysis.
View Example',\n offset: -100,\n params: {\n placement: 'right',\n }\n },\n];\n\nexport const callbacks = {\n onStart() {\n },\n onPreviousStep(step) { //eslint-disable-line\n },\n onNextStep(step) { //eslint-disable-line\n },\n onStop() {\n },\n};\n\nexport default {\n steps, callbacks,\n}","\n\n\n\n\n","import mod from \"-!../node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=76917294&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\nimport style0 from \"./App.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import Vue from 'vue'\nimport Vuex, { Store } from 'vuex'\n//import VuexPersistence from 'vuex-persist'\n\nVue.use(Vuex);\n\n/*const persistence = new VuexPersistence({\n reducer(state) {\n return {\n galaxy: {\n $name: state.galaxy.$name,\n Genome: state.galaxy.Genome,\n StoredWorkflow: state.galaxy.StoredWorkflow,\n }\n };\n }\n});*/\n\nconst store = new Store({\n namespaced: true,\n state: {\n },\n mutations: {\n },\n actions: {\n },\n modules: {\n },\n plugins: [\n //persistence.plugin,\n ]\n});\n\nexport {\n store as default,\n}\n\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('b-container',{staticClass:\"Home\"},[_c('b-row',[_c('b-col',{staticClass:\"floating welcome\"},[_c('HTMLFragment',{attrs:{\"content\":_vm.welcome}})],1)],1),_c('b-row',[_c('b-col',{staticClass:\"floating examples\"},[_c('h1',[_vm._v(\"Getting Started\")]),_c('HTMLFragment',{attrs:{\"content\":_vm.examples}})],1),_c('b-col',{staticClass:\"floating\"},[_c('h1',[_vm._v(\"News and Updates\")]),_c('News',{attrs:{\"news\":_vm.news}}),_c('b-link',{attrs:{\"to\":\"/news\"}},[_vm._v(\"View more...\")])],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('b-card-group',{staticClass:\"News\",attrs:{\"deck\":\"\"}},_vm._l((_vm.news),function(item,index){return _c('b-card',{key:index,attrs:{\"header\":(new Date(item.date)).toDateString(),\"title\":item.title}},[_c('b-card-text',{domProps:{\"innerHTML\":_vm._s(item.body)}})],1)}),1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n","import mod from \"-!../../node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./News.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./News.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./News.vue?vue&type=template&id=7edb3f95&scoped=true&\"\nimport script from \"./News.vue?vue&type=script&lang=js&\"\nexport * from \"./News.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7edb3f95\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n","import mod from \"-!../../node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Home.vue?vue&type=template&id=028079c8&scoped=true&\"\nimport script from \"./Home.vue?vue&type=script&lang=js&\"\nexport * from \"./Home.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Home.vue?vue&type=style&index=0&id=028079c8&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"028079c8\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:_vm.name},[_c('iframe',{attrs:{\"src\":_vm.src}})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n","import mod from \"-!../../node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./IFrameContent.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./IFrameContent.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./IFrameContent.vue?vue&type=template&id=2e49e431&scoped=true&\"\nimport script from \"./IFrameContent.vue?vue&type=script&lang=js&\"\nexport * from \"./IFrameContent.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2e49e431\",\n null\n \n)\n\nexport default component.exports","import Vue from 'vue'\nimport VueRouter from 'vue-router'\nimport AsyncComputed from 'vue-async-computed'\nimport BootstrapVue from 'bootstrap-vue'\nimport VueAnalytics from 'vue-analytics'\nimport VueTour from 'vue-tour';\n\nimport Galaxy from 'galaxy-client'\n\nimport App from './App.vue'\nimport store from './store'\n\nimport './assets/main.scss';\nimport 'vue-tour/dist/vue-tour.css';\n\n// Create a filter for links to galaxy\nimport {base_path, galaxy_path} from \"./app.config\";\nVue.filter('galaxybase', value=>galaxy_path+value);\n\nconst AsyncAnalysis = () => import(\"@/IslandCompare/Analysis\");\nconst AsyncHistory = () => import(\"@/IslandCompare/JobHistory\");\nimport Home from '@/IslandCompare/Home';\nimport HTMLFragment from '@/components/HTMLFragment'\nimport IFrameContent from \"@/components/IFrameContent\";\nimport News from \"@/components/News\";\n\n//TODO import i18n from './i18n'\n\nconst isProd = process.env.NODE_ENV === 'production';\n\nVue.config.productionTip = false;\n\nVue.use(Galaxy, {store, baseURL: galaxy_path});\nVue.use(VueRouter);\nVue.use(AsyncComputed, {useRawError: true,});\nVue.use(BootstrapVue);\nVue.use(VueTour);\n\nconst router = new VueRouter({\n mode: 'history',\n base: base_path,\n routes: [ // The order of these determines the order of they appear in the menu bar\n { path: '/', component: Home, name: \"IslandCompare\" },\n { path: '/analysis', component: AsyncAnalysis, name: \"Analyse\", props: route=>({tour: route.query.tour || ''}) },\n { path: '/history', component: AsyncHistory, name: \"Job History\", meta: {showTour: false}},\n { path: '/about', component: HTMLFragment, name: \"About\", props: {content: require('html-loader!@/assets/about.htm'), slug:'about'} },\n { path: '/faq', component: HTMLFragment, name: \"FAQ\", props: {content: require('html-loader!@/assets/faq.htm'), slug: 'faq'} },\n { path: '/download', component: HTMLFragment, name: \"Download\", props: {content: require('html-loader!@/assets/download.htm')} },\n { path: '/publications', component: HTMLFragment, name: \"Publications\", props: {content: require('html-loader!@/assets/publications.htm'), slug: 'publications'} },\n { path: '/contact', component: HTMLFragment, name: \"Contact\", props: {content: require('html-loader!@/assets/contact.htm'), slug: 'contact'} },\n //{ path: '/terms', component: HTMLFragment, name: \"Terms of Use\", props: {content: require('html-loader!@/assets/terms.htm')}, meta: {navbar: false} },\n { path: '/news', component: News, name: \"News\", props: {news: require('@/assets/news')}, meta: {navbar: false} },\n {\n path: '/visualize',\n component: IFrameContent,\n meta: {navbar: false, showTour: false},\n props: route => ({\n src: `${galaxy_path}/plugins/visualizations/islandcompare/static/index.html?src=${route.query.src}`,\n name: 'visualize'\n }),\n },\n {\n path: '/visualize/:id',\n component: IFrameContent,\n meta: {navbar: false, showTour: false},\n props: route=>({\n src: `${galaxy_path}/plugins/visualizations/islandcompare/static/index.html?src=${galaxy_path}/api/histories/any/contents/${route.params.id}/display?key=${route.query.key}`,\n name: 'visualize'\n }),\n },\n ]\n});\n\nconst analytics_id = {\n 'islandcompare.pathogenomics.ca': 'UA-46024702-13',\n 'islandcompare.pathogenomics.sfu.ca': 'UA-46024702-14',\n}[window.location.hostname];\n\nif (analytics_id) {\n Vue.use(VueAnalytics, {\n id: analytics_id,\n router,\n autoTracking: {\n exception: true,\n },\n debug: {\n enabled: !isProd,\n sendHitTask: isProd,\n },\n });\n} else console.log('Unknown analytics hostname'); //eslint-disable-line\n\nnew Vue({\n store,\n router,\n // i18n,\n render: h => h(App),\n data() {return{\n appName: \"IslandCompare\",\n }},\n}).$mount('#app');\n","module.exports = {\n publicPath: '/',\n devServer: {\n //Documentation: https://github.com/chimurai/http-proxy-middleware#proxycontext-config\n disableHostCheck: true,\n /*proxy: {\n '^/galaxy/.*': {\n //pathRewrite: (path, req)=>path.replace('/galaxy', ''), //eslint-disable-line\n //target: 'http://galaxy.brinkman.mbb.sfu.ca/',\n //target: 'https://gateway.cedar.computecanada.ca:8457/',\n target: 'http://ec2-18-144-14-167.us-west-1.compute.amazonaws.com/',\n changeOrigin: true,\n ws: false,\n },\n }*/\n },\n};\n","/**\n * Code responsible for interacting with /api/jobs\n * https://docs.galaxyproject.org/en/latest/api/api.html#module-galaxy.webapps.galaxy.api.jobs\n * https://docs.galaxyproject.org/en/latest/api/api.html#module-galaxy.webapps.galaxy.api.job_files\n */\nimport * as Common from \"./_common\";\nimport {History} from \"./histories\";\n\n/**\n * Model representing a invocation of a tool\n */\nclass Job extends Common.Model {\n static entity = 'Jobs';\n static primaryKey = 'id';\n static end_states = ['ok', 'error', 'deleted', 'deleted_new'];\n static apiPath = '/api/jobs/';\n\n static fields() {\n return {\n ...super.fields(),\n id: this.string(null),\n tool_id: this.string().nullable(),\n update_time: this.string().nullable(),\n history_id: this.string().nullable(),\n exit_code: this.number().nullable(),\n state:\tthis.string().nullable(), // ‘new’, ‘upload’, ‘waiting’, ‘queued’, ‘running’, ‘ok’, ‘error’, ‘paused’, ‘deleted’, ‘deleted_new’\n create_time: this.string().nullable(),\n galaxy_version: this.string(),\n command_version: this.string(),\n model_class: this.string(\"Job\"),\n inputs: this.attr(),\n outputs: this.attr(),\n params: this.attr(),\n tool_stdout: this.string(),\n tool_stderr: this.string(),\n job_stdout: this.string(),\n job_stderr: this.string(),\n stderr: this.string(),\n stdout: this.string(),\n job_messages: this.attr(),\n\n //ORM Only\n history: this.belongsTo(History, 'history_id'),\n workflow_invocation_step_id: this.string().nullable(),\n }\n }\n\n // TODO GET /api/jobs/{job_id}/files\n // TODO POST /api/jobs/{job_id}/files\n // TODO GET /api/jobs/{id}/common_problems\n // TODO GET /api/jobs/{id}/inputs\n // TODO GET /api/jobs/{id}/outputs\n // TODO DELETE /api/jobs/{id}\n // TODO PUT /api/jobs/{id}/resume\n // TODO GET /api/jobs/{job_id}/metrics\n // TODO GET /api/jobs/{job_id}/parameters_display\n // TODO POST /api/jobs/search\n // TODO POST /api/jobs/{id}/error\n\n /**\n * Helper to aggregate all step job errors.\n * @param label {string} Label for job in output\n * @returns {Promise} Concatenation of the error output of all jobs with error state\n */\n async get_error_log(label) {\n let self = this;\n if (this.state !== 'error') return '';\n\n // Fetch complete job state\n if (!self.stderr) {\n await self.reload({params:{full: true}});\n self = self.constructor.find(self.id);\n }\n\n label = label || self.tool_id;\n\n return `${label}: ${self.stderr}\\n`\n }\n}\n\nconst Module = {\n ...Common.Module,\n state: Common.State({\n\n }),\n mutations: {\n ...Common.Mutations,\n },\n actions: {\n ...Common.Actions,\n },\n getters: {\n ...Common.Getters,\n },\n};\n\nfunction register(database) {\n database.register(Job, Module);\n}\n\nexport {\n Job,\n Module,\n register,\n};\n","module.exports = \"\\n\\n

IslandCompare (v1.0)

\\n

Genomic island prediction software developed to facilitate the analysis of microbial\\npopulation datasets. IslandCompare is designed to process sets of microbial genomes and present genomic island content with\\nan interactive visual designed to enable exploration of cross-genome genomic island content.

\\n

Run Analysis

\\n\";","/**\n * Code responsible for interacting with /api/users\n * https://docs.galaxyproject.org/en/latest/api/api.html#module-galaxy.webapps.galaxy.api.users\n * https://docs.galaxyproject.org/en/latest/api/api.html#module-galaxy.webapps.galaxy.api.authenticate\n *\n * Implements GET /api/authenticate/baseauth\n * Implements GET /api/whoami\n *\n */\nimport * as Common from \"./_common\";\n\n/**\n * Model representing a Galaxy user\n */\nclass User extends Common.Model {\n static entity = 'Users';\n static primaryKey = 'id';\n static apiPath = '/api/users/';\n\n static fields() {\n return {\n ...super.fields(),\n id: this.string(null).nullable(),\n username: this.string(null).nullable(),\n quota_percent: this.number(null).nullable(),\n preferences: this.attr({}),\n total_disk_usage: this.number(0),\n deleted: this.boolean(false),\n purged: this.boolean(false),\n nice_total_disk_usage: this.string(\"None\"),\n quota: this.number(0),\n email: this.string(null).nullable(),\n is_admin: this.boolean(false),\n tags_used: this.attr([]),\n }\n }\n\n /**\n * Get the model of the current user.\n * This requires that a api key was already registered with axios for the request.\n * @returns {Promise}\n */\n static async getCurrent(config={}) {\n let response = await this.request('get', {url: this.build_url() + \"current\", ...config});\n return response.entities[this.entity][0];\n }\n\n /**\n * Register a user with the Galaxy backend\n * @param username Username of the new user\n * @param password Password for the new user\n * @param email Email of the new user\n * @returns {Promise} User instance\n */\n static async registerUser(username, password, email) {\n // TODO This requires patching galaxy/webapps/galaxy/api/users.py#UserAPIController.create to enable anyone to create a user\n return this.post({\n username,\n password,\n email,\n });\n }\n\n // TODO GET /api/users/deleted Displays a collection (list) of deleted users.\n // TODO GET /api/users/deleted/{encoded_id}\n // TODO GET /api/users/{id}/information/inputs\n // TODO PUT /api/users/{id}/information/inputs\n // TODO GET /api/users/{id}/custom_builds\n // TODO PUT /api/users/{id}/custom_builds/{key}\n // TODO DELETE /api/users/{id}/custom_builds/{key}\n\n // TODO GET /api/whoami\n\n //GET /api/authenticate/baseauth\n /**\n * Get the api key for a user.\n * Uses the baseauth method of authenticating with Galaxy.\n * @param username {string} Username of user\n * @param password {string} Password for user\n * @param method {string} Method to use to authenticate. Currently only default 'baseauth' is supported.\n * @returns {Promise} API key for user\n */\n static async getAPIKey(username, password, method = 'baseauth') {\n let response;\n try {\n switch (method) {\n case 'baseauth':\n response = await this.api().get('/api/authenticate/baseauth', {\n auth: {username, password},\n save: false,\n });\n return response.response.data.api_key;\n default:\n // TODO When Galaxy adds more API authentication methods, implement here\n throw Error(method + ' authentication method not implemented');\n }\n } catch (error) {\n // Galaxy returns 404 when user does not exist\n if (error.response && error.response.status === 404) return '';\n // Retry request for all other errors after delay\n await new Promise(r => setTimeout(r, 1000));\n }\n }\n\n /**\n * Verify the api key is valid\n * @param key API key to validate\n * @returns {Promise} True if valid, false otherwise.\n */\n static async verifyAPIKey(key) {\n // TODO centralise all network error handling and recovery\n for (let i = 0; i < 40; ++i) { // Retry 40 times (20 seconds)\n try {\n await this.api().get('/api/whoami', {\n headers: {\n \"X-API-KEY\": key,\n },\n save: false,\n });\n return true;\n } catch (error) {\n // Galaxy returns 403 when unauthenticated\n if (error.response && error.response.status === 403) return false;\n // Retry request for all other errors after delay\n await new Promise(r => setTimeout(r, 1000));\n }\n }\n throw Error(\"Unable to connect to backend\");\n }\n}\n\nconst Module = {\n ...Common.Module,\n state: Common.State({\n\n }),\n mutations: {\n ...Common.Mutations,\n },\n actions: {\n ...Common.Actions,\n },\n getters: {\n ...Common.Getters,\n },\n};\n\nfunction register(database) {\n database.register(User, Module);\n}\n\nexport {\n User,\n Module,\n register,\n};\n","import axios from 'axios';\nimport VuexORM, { Database } from '@vuex-orm/core';\nimport VuexORMAxios from \"@vuex-orm/plugin-axios\";\n\nconst database = new Database();\n\nconst config = {\n axios,\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n },\n};\n\nVuexORM.use(VuexORMAxios, config);\n\n//import * as annotations from './annotations';\n//annotations.register(database);\n\n//import * as cloud from './cloud';\n//cloud.register(database);\n\n//import * as configuration from './configuration';\n//configuration.register(database);\n\n//import * as dataset_collections from './dataset_collections';\n//dataset_collections.register(database);\n\n//import * as datasets from './datasets';\n//datasets.register(database);\n\n//import * as datatypes from './datatypes';\n//datatypes.register(database);\n\n//import * as extended_metadata from './extended_metadata';\n//extended_metadata.register(database);\n\n//import * as folders from './folders';\n//folders.register(database);\n\n//import * as forms from './forms';\n//forms.register(database);\n\nimport * as genomes from './genomes';\ngenomes.register(database);\n\n//import * as group_roles from './group_roles';\n//group_roles.register(database);\n\n//import * as group_users from './group_users';\n//group_users.register(database);\n\n//import * as groups from './groups';\n//groups.register(database);\n\nimport * as histories from './histories';\nhistories.register(database);\n\nimport * as history_contents from './history_contents';\nhistory_contents.register(database);\n\n//import * as item_tags from './item_tags';\n//item_tags.register(database);\n\nimport * as jobs from './jobs';\njobs.register(database);\n\n//import * as libraries from './libraries';\n//libraries.register(database);\n\n//import * as library_contents from './library_contents';\n//library_contents.register(database);\n\n//import * as library_datasets from './library_datasets';\n//library_datasets.register(database);\n\n//import * as metrics from './metrics';\n//metrics.register(database);\n\n//import * as page_revisions from './page_revisions';\n//page_revisions.register(database);\n\n//import * as pages from './pages';\n//pages.register(database);\n\n//import * as plugins from './plugins';\n//plugins.register(database);\n\n//import * as provenance from './provenance';\n//provenance.register(database);\n\n//import * as quotas from './quotas';\n//quotas.register(database);\n\n//import * as remote_files from './remote_files';\n//remote_files.register(database);\n\n//import * as roles from './roles';\n//roles.register(database);\n\n//import * as search from './search';\n//search.register(database);\n\n//import * as tool_data from './tool_data';\n//tool_data.register(database);\n\n//import * as tool_dependencies from './tool_dependencies';\n//tool_dependencies.register(database);\n\n//import * as tool_shed_repositories from './tool_shed_repositories';\n//tool_shed_repositories.register(database);\n\n//import * as tools from './tools';\n//tools.register(database);\n\n//import * as toolshed from './toolshed';\n//toolshed.register(database);\n\n//import * as tours from './tours';\n//tours.register(database);\n\nimport * as users from './users';\nusers.register(database);\n\n//import * as visualizations from './visualizations';\n//visualizations.register(database);\n\n//import * as webhooks from './webhooks';\n//webhooks.register(database);\n\nimport * as workflows from './workflows';\nworkflows.register(database);\n\nimport * as common from './_common';\n\nconst submodules = {\n common,\n// annotations,\n// authenticate,\n// cloud,\n// configuration,\n// dataset_collections,\n// datasets,\n// datatypes,\n// extended_metadata,\n// folder_contents,\n// folders,\n// forms,\n genomes,\n// group_roles,\n// group_users,\n// groups,\n histories,\n history_contents,\n// item_tags,\n jobs,\n// libraries,\n// library_contents,\n// library_datasets,\n// metrics,\n// page_revisions,\n// pages,\n// plugins,\n// provenance,\n// quotas,\n// remote_files,\n// roles,\n// search,\n// tool_data,\n// tool_dependencies,\n// tool_shed_repositories,\n// tools,\n// toolshed,\n// tours,\n users,\n// visualizations,\n// webhooks,\n workflows,\n};\n\nexport {\n submodules as default,\n database,\n config,\n}\n","export const History = import(/* webpackChunkName: \"History\" */\"./History\");\nexport const HistoryContents = import(/* webpackChunkName: \"HistoryContents\" */\"./HistoryContents\");\nexport const Histories = import(/* webpackChunkName: \"HistoryContents\" */\"./Histories\");\nexport const HistoryFunctions = import(/* webpackChunkName: \"HistoryFunctions\" */\"./HistoryFunctions\");\nexport const HistoryItem = import(/* webpackChunkName: \"HistoryItem\" */\"./HistoryItem\");\nexport const HistoryItemFunctions = import(/* webpackChunkName: \"HistoryItemFunctions\" */\"./HistoryItemFunctions\");\nexport const Collection = import(/* webpackChunkName: \"Collection\" */\"./HistoryItems/Collection\");\nexport const Dataset = import(/* webpackChunkName: \"Dataset\" */\"./HistoryItems/Dataset\");\n","export const ReferenceGenomes = import(/* webpackChunkName: \"ReferenceGenomes\" */\"./ReferenceGenomes\");","export const WorkflowInvocation = import(/* webpackChunkName: \"WorkflowInvocation\" */\"./WorkflowInvocation\");\nexport const WorkflowInvocationStep = import(/* webpackChunkName: \"WorkflowInvocationStep\" */\"./WorkflowInvocationStep\");\nexport const WorkflowInvocationSteps = import(/* webpackChunkName: \"WorkflowInvocationSteps\" */\"./WorkflowInvocationSteps\");\nexport const WorkflowParameter = import(/* webpackChunkName: \"WorkflowParameter\" */\"./WorkflowParameter\");\nexport const WorkflowParameterBase = import(/* webpackChunkName: \"WorkflowParameterBase\" */\"./WorkflowParameterBase\");\nexport const WorkflowParameters = import(/* webpackChunkName: \"WorkflowParameters\" */\"./WorkflowParameters\");\n\nexport const DatasetParameter = import(/* webpackChunkName: \"DatasetParameter\" */\"./WorkFlowParameters/DatasetParameter\");\nexport const DBKeyParameter = import(/* webpackChunkName: \"DBKeyParameter\" */\"./WorkFlowParameters/DBKeyParameter\");\nexport const SimpleParameter = import(/* webpackChunkName: \"SimpleParameter\" */\"./WorkFlowParameters/SimpleParameter\");","export const EditableLabel = import(/* webpackChunkName: \"EditableLabel\" */\"./EditableLabel\");\nexport const FunctionIcon = import(/* webpackChunkName: \"FunctionIcon\" */\"./FunctionIcon\");","export const Quota = import(/* webpackChunkName: \"Quota\" */\"./Quota\");\n","import api, {config, database} from \"./api\"\nimport VuexORM from \"@vuex-orm/core\"\n\nimport * as genomes from './genomes'\nimport * as histories from './histories'\nimport * as misc from './misc'\nimport * as workflows from './workflows'\nimport * as users from './users'\n\nexport {\n api,\n config,\n genomes,\n histories,\n misc,\n workflows,\n users,\n}\n\nexport default {\n install(Vue, options) {\n if (!options || !options.store) {\n throw new Error('Please initialise plugin with a Vuex store.')\n }\n if (options.baseURL) {\n config.baseURL = options.baseURL;\n }\n VuexORM.install(database, {namespace: 'galaxy'})(options.store)\n // https://vuejs.org/v2/guide/components-registration.html\n //Vue.component(\"\", );\n },\n};\n","/**\n * Code responsible for interacting with /api/workflows\n * https://docs.galaxyproject.org/en/latest/api/api.html#module-galaxy.webapps.galaxy.api.workflows\n */\nimport * as Common from \"./_common\";\nimport {\n HistoryDatasetCollectionAssociation,\n srcMap\n} from \"./history_contents\";\nimport { History } from \"./histories\";\nimport { Job } from \"./jobs\";\n\n//const INPUT_STEP_TYPES = ['data_input', 'data_collection_input', 'parameter_input'];\n\n/**\n * Model of a workflow invocation step\n */\nclass WorkflowInvocationStep extends Common.Model {\n static entity = 'WorkflowInvocationStep';\n static primaryKey = 'id';\n static end_states = ['scheduled','error','failed'];\n\n constructor(...args) {\n super(...args);\n Object.assign(this, Common.HasState);\n }\n\n static fields() {\n return {\n ...super.fields(),\n id: this.string(null).nullable(),\n workflow_step_uuid: this.string(null).nullable(),\n update_time: this.string(null).nullable(),\n jobs: this.hasMany(Job, 'workflow_invocation_step_id'),\n job_id: this.string(null).nullable(),\n outputs: this.attr(), //this.hasMany(HistoryDatasetAssociation, 'id'), //TODO\n order_index: this.number(0),\n output_collections: this.attr(), //this.hasMany(HistoryDatasetCollectionAssociation, 'id'), //TODO\n workflow_step_label: this.string(''),\n state: this.string(null).nullable(),\n action: this.string(null).nullable(),\n model_class: this.string(\"WorkflowInvocationStep\"),\n workflow_step_id: this.string(null).nullable(),\n workflow_invocation_id: this.string(\"\"),\n subworkflow_invocation_id: this.string(null).nullable(),\n\n //ORM only\n //workflow_step: this.belongsTo(StoredWorkflowStep, 'workflow_step_id') //TODO create model\n invocation: this.belongsTo(WorkflowInvocation, 'workflow_invocation_id'), //TODO no backreference\n subinvocation: this.belongsTo(WorkflowInvocation, 'subworkflow_invocation_id'), //TODO no backreference\n }\n }\n\n /**\n * Count the number of states in jobs\n * @returns {Object} Mapping of {state name: count, ...}\n */\n states() {\n // TODO subworkflow state\n if (!this.jobs || !this.jobs.length) this.jobs = Job.query().where('workflow_invocation_step_id', this.id).get();\n if (!this.jobs || !this.jobs.length) {\n return {[this.state]: 1};\n }\n return this.jobs.reduce((acc, cur) => {\n //Count the number of jobs for each state\n acc[cur.state] = (acc[cur.state] || 0) + 1;\n return acc;\n }, {});\n }\n\n /**\n * Helper to aggregate the overall state of a invocation step.\n * @returns {string} Name of current aggregate state\n */\n aggregate_state() {\n if (this.state === \"cancelled\") return this.state;\n let states = this.states();\n if (Object.entries(states).length === 0) return \"new\";\n if (states.new) return \"running\";\n if (states.error) return \"error\";\n return \"done\";\n }\n\n /**\n * Helper to aggregate all step job errors.\n * @returns {Promise} Concatenation of the error output of all jobs with error state\n */\n async get_error_log() {\n let log = '';\n //if (this.state !== 'error') return log;\n if (!this.invocation) this.invocation = WorkflowInvocation.find(this.workflow_invocation_id);\n if (this.subworkflow_invocation_id) {\n const subworkflow = await WorkflowInvocation.findOrLoad(this.subworkflow_invocation_id, {\n url: `/api/invocations/${this.subworkflow_invocation_id}/`,\n params: {view: \"element\", step_details: true, history_id: this.invocation.history_id}\n });\n log += await subworkflow.get_error_log();\n }\n if (!this.jobs || !this.jobs.length) {\n this.jobs = Job.query().where('workflow_invocation_step_id', this.id).get();\n }\n for (const job of this.jobs) {\n log += await job.get_error_log(this.workflow_step_label);\n }\n return log;\n }\n}\n\n/*class WorkflowInvocationOutput extends Common.Model {\n static entity = \"WorkflowInvocationOutput\";\n static primaryKey = 'label';\n\n static fields() {\n return {\n label: this.string(null),\n id: this.string(null),\n src: this.string(null),\n }\n }\n}*/\n\n/**\n * Model of a workflow invocation\n */\nclass WorkflowInvocation extends Common.Model {\n static entity = 'WorkflowInvocation';\n static primaryKey = 'id';\n static end_states = [\"cancelled\", \"error\", \"done\", \"failed\"];\n static apiPath = 'invocations/';\n\n constructor(...args) {\n super(...args);\n Object.assign(this, Common.HasState);\n }\n\n static fields() {\n return {\n ...super.fields(),\n id: this.string(null).nullable(),\n update_time: this.string(null).nullable(),\n uuid: this.string(null).nullable(),\n outputs: this.attr({}),\n output_collections: this.attr({}),\n history_id: this.string(null).nullable(),\n workflow_id: this.string(null).nullable(),\n state: this.string(null).nullable(),\n model_class: this.string(\"WorkflowInvocation\"),\n inputs: this.attr({}),\n steps: this.hasMany(WorkflowInvocationStep, 'workflow_invocation_id'),\n\n //ORM only\n workflow: this.belongsTo(StoredWorkflow, 'workflow_id'),\n history: this.belongsTo(History, 'history_id'),\n output_models: this.attr({}), //this.hasManyBy(HistoryDatasetAssociation, 'outputs'), // TODO are hda and hdca mixed in outputs?\n //output_collection_models: this.hasManyBy(HistoryDatasetCollectionAssociation, 'output_collections'),\n }\n }\n\n /**\n * Overrides parent to attach workflow id to url\n * @returns {string} api url for this model instance\n */\n build_url() {\n return `${StoredWorkflow.build_url()}${this.workflow_id}/invocations/${this.id}/`\n }\n\n static build_url() {\n throw(\"WorkflowInvocation url is relative to workflow, must call on a model instance\");\n }\n\n static async fetch(workflow, options) {\n const response = await this.request('get', {url: `${workflow.build_url()}${this.apiPath}`, ...options});\n if (response.entities) {\n return response.entities[this.entity];\n }\n return this.all();\n }\n\n static async post(workflow, data, options) {\n const response = await this.request('post', {url: `${workflow.build_url()}${this.apiPath}`, data, ...options});\n return response.entities[this.entity][0];\n }\n\n async delete(options = {}) {\n try {\n return await super.delete(options);\n } catch (e) {\n // Ignore deleting completed workflows throwing error\n if (e.response && e.response.status === 400 && e.response.data.err_code === 0) return;\n throw(e);\n }\n }\n\n //TODO add support for /api/invocation//step_jobs_summary\n /*\n 0\n id\t\"d158a6cce97e3331\"\n populated_state\t\"ok\"\n model\t\"ImplicitCollectionJobs\"\n states\n error\t4\n 1\n id\t\"c55cc6ad09407e92\"\n populated_state\t\"ok\"\n model\t\"ImplicitCollectionJobs\"\n states\n paused\t4\n 2\n id\t\"43cee75e648fc2b4\"\n populated_state\t\"ok\"\n model\t\"ImplicitCollectionJobs\"\n states\n paused\t4\n 3\n id\t\"41454a2d6e8db7f3\"\n populated_state\t\"ok\"\n model\t\"ImplicitCollectionJobs\"\n states\n paused\t4\n */\n\n /**\n * Count the number of states in steps\n * @returns {Object} Mapping of state name to count\n */\n states() {\n //TODO use /api/invocation//jobs_summary\n /*\n id\t\"bdbb49fafe32786f\"\n model\t\"WorkflowInvocation\"\n states\n ok\t3\n error\t5\n paused\t20\n populated_state\t\"ok\"\n */\n\n if (!this.steps || !this.steps.length) {\n this.steps = WorkflowInvocationStep.query().where('workflow_invocation_id', this.id).get();\n }\n if (!this.steps || !this.steps.length) {\n return {[this.state]: 1};\n }\n //Count the number of jobs/steps for each state\n return this.steps.reduce((acc, step) => {\n Object.entries(step.states()).forEach(([state, count]) => {\n acc[state] = (acc[state] || 0) + count;\n });\n return acc;\n }, {});\n }\n\n /**\n * Helper to aggregate the overall state of a invocation.\n * @returns {string} Name of current aggregate state\n */\n aggregate_state() {\n if (this.state === \"cancelled\" || this.state === 'failed') return this.state;\n const states = this.states();\n if (Object.entries(states).length === 0) return \"new\";\n if (states.new) return \"running\";\n if (states.queued) return \"running\";\n if (states.error) return \"error\";\n if (states.paused) return \"error\";\n return \"done\";\n }\n\n /**\n * Helper to aggregate all step job errors.\n * @returns {Promise} Concatenation of the error output of all jobs with error state\n */\n async get_error_log() {\n let log = '';\n //if (this.state !== 'error') return log;\n if (!this.steps || !this.steps.length) {\n this.steps = WorkflowInvocationStep.query().where('workflow_invocation_id', this.id).with('jobs|invocation').get();\n }\n for (const step of this.steps) {\n log += await step.get_error_log();\n }\n return log;\n }\n\n all_outputs() {\n let all_outputs = {};\n if (this.outputs) all_outputs = Object.assign(all_outputs, this.outputs);\n if (this.output_collections) all_outputs = Object.assign(all_outputs, this.output_collections);\n return all_outputs;\n }\n\n async getOutputs() {\n const history = this.history || await History.findOrLoad(this.history_id);\n let result = {};\n const all_outputs = this.all_outputs();\n\n for (const key of Object.keys(all_outputs)) {\n const elem = await srcMap[all_outputs[key].src].findOrLoad(all_outputs[key].id, history);\n if (elem) {\n result[key] = elem;\n elem.poll_state();\n }\n }\n return result;\n }\n\n //Vuex ORM Axios Config\n static apiConfig = {\n dataTransformer(response) {\n //TODO Bandaid to fix incorrect workflow_id\n let id = response.config.url.match(/\\/api\\/workflows\\/([^/]+)\\/invocations/);\n if (id) {\n let data = response.data;\n if (!(data instanceof Array)) data = [data];\n for (const datum of data) {\n datum.workflow_id = id[1];\n }\n }\n\n //TODO Bandaid to deal with invocation not storing ids of steps\n if (Array.isArray(response.data)) {\n response.data.forEach(invocation =>{\n if (invocation.hasOwnProperty('steps')) invocation.steps.forEach(step => {\n step.workflow_invocation_id = invocation.id;\n if (step.jobs) {\n step.jobs.forEach(job => {\n job.workflow_invocation_step_id = step.id;\n });\n }\n })});\n } else if (response.data.hasOwnProperty('steps')) {\n response.data.steps.forEach(step => {\n step.workflow_invocation_id = response.data.id;\n if (step.jobs) {\n step.jobs.forEach(job => {\n job.workflow_invocation_step_id = step.id;\n });\n }\n });\n }\n\n //TODO Bandaid to deal with receiving dict for outputs and output_collections\n //response.data.outputs = Object.keys(response.data.outputs).reduce((acc, cur)=>{acc.append({label: cur, ...response.data.outputs[cur]})}, []);\n return response.data;\n },\n };\n}\n\n/**\n * Model of a stored workflow\n */\nclass StoredWorkflow extends Common.Model {\n static entity = 'StoredWorkflow';\n static primaryKey = 'id';\n static apiPath = '/api/workflows/';\n\n static fields() {\n return {\n ...super.fields(),\n id: this.string(null).nullable(),\n name: this.string(\"Unnamed workflow\"),\n tags: this.attr([]),\n deleted: this.boolean(false),\n latest_workflow_uuid: this.string(null).nullable(),\n show_in_tool_panel: this.boolean(false),\n url: this.string(null).nullable(),\n number_of_steps: this.number(0),\n published: this.boolean(false),\n owner: this.string(null).nullable(),\n model_class: this.string(\"StoredWorkflow\"),\n inputs: this.attr({}),\n annotation: this.string(''),\n version: this.number(0),\n steps: this.attr({}),\n\n //ORM only\n invocations: this.hasMany(WorkflowInvocation, 'workflow_id'),\n invocationsFetched: this.boolean(false),\n }\n }\n\n //TODO workflow menu logic\n //TODO GET /api/workflows/{encoded_workflow_id}/versions\n //TODO GET /api/workflows/{encoded_workflow_id}/download\n //TODO POST /api/workflows/import\n\n //TODO POST /api/workflows/{encoded_workflow_id}/invocations. Done in WorkflowInvocation $create?\n\n /**\n * Invoke the stored workflow\n * @param inputs {Object} Mapping of workflow inputs keyed on step index\n * @param history {History|undefined} Optional history to store invocation data, if undefined a new history will be created.\n * @param label {string} If history is undefined, the created history will be assigned this label. If no label provided, the workflow name will be used.\n * @returns {Promise} Resulting workflow invocation model\n */\n async invoke(inputs, history, label) {\n let response = null;\n\n // Backfill label if not provided\n if (label === undefined) label = this.name;\n\n // Deal with https://github.com/galaxyproject/galaxy/issues/10899\n for (const key in Object.keys(this.inputs)) if (!(key in inputs)) inputs[key] = null;\n\n // Create a new history if not provided\n if (history === undefined) {\n //Create history to store run\n try {\n history = await History.post({\n name: label,\n });\n } catch (e) {\n throw \"Failed to create job history\";\n }\n\n // Tag the new history with the workflow id for future lookup\n history.tags.push(this.id);\n history.put(['tags']);\n }\n\n // Create new collections before invocation\n // TODO test if 'new_collection' as src will autogenerate a collection upon invocation\n for (const [index, input] of Object.entries(inputs)) {\n if (input && input.src === 'new_collection') {\n //Create collection of inputs in new history\n try {\n response = await HistoryDatasetCollectionAssociation.post(history, {data: {\n name: input.name,\n type: 'dataset_collection',\n collection_type: this.steps[index].tool_inputs.collection_type,\n copy_elements: true,\n element_identifiers: input.element_identifiers,\n }});\n inputs[index] = {id: response.id, src: 'hdca'};\n } catch (e) {\n history.delete();\n throw \"Failed to create job dataset collection\";\n }\n }\n }\n\n // Invoke workflow\n try {\n response = await WorkflowInvocation.post(this,{\n // new_history_name: specify a new history and leave history_id: null TODO if new_collection as src above works, swap history_id for this\n history_id: history.id,\n no_add_to_history: true,\n inputs: inputs,\n });\n return response;\n } catch (e) {\n // Invocation failed, cleanup.\n history.delete();\n console.log(e);\n throw \"Failed to create job\";\n }\n }\n\n /**\n * Fetch all invocations, optionally filtering on a set of histories\n * @param histories {Array|undefined} Optional Array of histories to limit fetch\n * @returns {Promise>} Array of all invocations\n */\n async fetch_invocations(histories) {\n let result;\n if (histories) {\n // Fetch each invocation individually by history id\n result = (await Promise.all(histories.map(history => {\n return WorkflowInvocation.fetch(this, {\n params: {view: \"element\", step_details: true, history_id: history.id}\n })\n }))).flat();\n } else {\n result = await WorkflowInvocation.fetch({\n params: {view: \"element\", step_details: true}\n });\n }\n this.constructor.update({where: this[this.constructor.primaryKey], data: {invocationsFetched: true}});\n return result;\n }\n\n //Vuex ORM Axios Config\n static apiConfig = {\n dataTransformer(response) {\n // TODO BANDAID to deal with https://github.com/galaxyproject/galaxy/issues/10900\n if (response.data.hasOwnProperty('steps') && response.data.hasOwnProperty('inputs')) {\n Object.keys(response.data.inputs).forEach(i => {\n const param = response.data.steps[i].tool_inputs;\n if (typeof param.format === 'string') param.format = param.format.split(',').map(x => x.trim());\n });\n }\n\n return response.data;\n }\n }\n}\n\nconst Module = {\n ...Common.Module,\n state: Common.State({\n\n }),\n mutations: {\n ...Common.Mutations,\n },\n actions: {\n ...Common.Actions,\n },\n getters: {\n ...Common.Getters,\n },\n};\n\nfunction register(database) {\n database.register(WorkflowInvocationStep, Module);\n database.register(WorkflowInvocation, Module);\n database.register(StoredWorkflow, Module);\n}\n\nexport {\n Module,\n StoredWorkflow,\n WorkflowInvocation,\n WorkflowInvocationStep,\n register,\n};\n","module.exports = \"\\n

Contact

\\n

For common questions and concerns, please see our FAQ page.

\\n

If you are having trouble running IslandCompare and would like support, or have a question not answered on our FAQ page, please contact us at: islandpick-mail@sfu.ca.

\\n

If you would like to receive updates about IslandCompare development, please send an email to maillist@sfu.ca with "subscribe islandcompare-users" in the subject line

\\n

To unsubscribe, please send an email to maillist@sfu.ca with "unsubscribe islandcompare-users" in the subject line

\\n\";","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"static_content\",class:_vm.slug,domProps:{\"innerHTML\":_vm._s(_vm.content)}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n","import mod from \"-!../../node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HTMLFragment.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HTMLFragment.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HTMLFragment.vue?vue&type=template&id=7032bcc8&\"\nimport script from \"./HTMLFragment.vue?vue&type=script&lang=js&\"\nexport * from \"./HTMLFragment.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","module.exports = \"\\n

Tutorial

\\n

FAQ

\\n
\\n
How does IslandCompare remember who I am between sessions?
\\n
\\n

A token is stored in your browsers cache that persists between sessions and uniquely identifies you. If you clear your cache, change browsers, or change computers a new token will be issued and you will not be able to access your previous analysis or uploads.\\nThis token is also added to the url displayed in the browser address bar for the Analysis or Job History pages. If you bookmark this address, you can retain your token until your account is purged due to inactivity (3 months).

\\n
\\n
How do I cite IslandCompare?
\\n
\\n

Please see the publications page.

\\n
\\n
Why does IslandCompare not include IslandPick/Islander/virulence factor annotations like IslandViewer does?
\\n
\\n

IslandCompare is currently under active development and this is the first version released for public use. We are working to incorporate these features and plan to make them available in a future version of IslandCompare.

\\n

Furthermore, implementing IslandPick for population datasets will be non-trivial. An approach to selecting reference genomes for a set of genomes under analysis has not yet been developed and would need to carefully be thought out and evaluated before being offered.

\\n
\\n
How can I view pre-computed complete genomes?
\\n
\\n

For viewing individual, pre-computed genomes, we recommend using IslandViewer 4. All complete bacterial and archaeal genomes available for download on NCBI are pre-computed through IslandViewer.

\\n
\\n
How are the phylogeny/alignment/AMR annotations determined?
\\n
\\n

For detailed information on the tools used to perform each stage of the IslandCompare analysis, please see our About page. Briefly, phylogenies are computed based on snps in the core genome using parsnp. The genomes are aligned with mauve. Antimicrobial resistance genes are predicted with the Resistance Gene Identifier (uses curated genes in the Comprehensive Antibiotic Resistance Database).

\\n
\\n
\\n

//: # (: Please see the download page

\\n
\\n
Why does my input file fail to upload or run?
\\n
\\n

Most often, problems arise due to incorrectly formatted input files. Please ensure your input file follows GenBank or EMBL formats with all necessary fields, including annotated coding sequences (CDSs). See examples for more details: GenBank, EMBL.

\\n

In some cases, SIGI-HMM will fail to run due to issues beyond our control (SIGI-HMM software was written by others), but IslandPath-DIMOB results will still be available. If you notice your jobs are taking longer than a few hours to complete, please don't hesitate to contact us and we would be happy to help identify the problem.

\\n
\\n
Why do I have to annotate genes in my genomes prior to running IslandCompare?
\\n
\\n

Both IslandPath-DIMOB and Sigi-HMM rely on the gene annotations provided to predict genomic islands (please see our About page for more detailed information). As such, the gene annotations provided are essential for making accurate genomic island predictions in IslandCompare. For an excellent, general purpose annotation tool for microbial genomes, we would recommend prokka, which can be downloaded from GitHub or installed as a conda environment.

\\n
\\n
How should I be annotating my genomes prior to submitting to IslandCompare?
\\n
\\n

While we do not endorse a specific annotation tool at this time, an important point we urge all users to keep in mind is to be consistent in your gene annotations. The integrated GI prediction software are dependant on the gene annotations. Therefore, you should be sure to use the same annotation software and version for all of the genomes in your analysis for the most consistent results. Further, when annotating your files, ensure that the annotations are in order and that your file is formatted in adherence with the standards for GenBank and EMBL files.

\\n
\\n
How do the genomic island prediction tools integrated into IslandCompare work and why were they chosen?
\\n
\\n

IslandCompare integrates predictions from two methods for user genomes: IslandPath-DIMOB, and SIGI-HMM. Both methods have a high precision (>85%) and hence make few but some false positive predictions and we encourage users to carefully check the results. Both tools are sequence composition based tools. IslandPath-DIMOB identifies genomic islands by searching for sets of genes with dinucleotide usage bias and at least one mobility gene, while Sigi-HMM identifies genomic islands by looking for regions with codon usage bias. Please see our About page or the most recent publications for IslandPath-DIMOB and Sigi-HMM for details.

\\n
\\n
Why is an expected genomic island missed from IslandCompare predictions?
\\n
\\n

Genomic islands that have been more anciently incorporated into a genome can ameliorate into the given genome, meaning their sequence composition will come to more closely resemble that of the host genome. Genomic islands transferred between closely related species will also have a weaker compositional signature. This can complicate predictions by sequence-composition based tools like SIGI-HMM and IslandPath-DIMOB. Additionally, these tools were selected with the intent of prioritizing precision, potentially sacrificing recall to some extent.

\\n
\\n
\\n

//: # (: Incomplete genomes are first reordered against a user-selected reference genome. The quality of contig reordering will depend on the sequence similarity between the two organisms and the quality of the draft genomes. Contigs unique to the custom genome or contigs that could be placed in several position according to the reference genome (such as identical transposases that could not be solved by short read assembly software will remain unaligned and placed at the end of the pseudochromosome. These contigs that could not be ordered are shown in ???. Contig gaps are indicated by ???.)

\\n

//: # (: For users wishing to analyse a genome of a microorganisms with multiple replicons we recommend submitting a single genbank/embl file with the replicons in the order you wish them to appear in the visual (ensure that homologous replicons are in the same order for each genome submitted if taking this approach. Then select “OPTION FOR THE IN-ORDER-SUBMITTED STITCHER” when submitting the analysis. The replicons will be concatenated for the presentation of results and output of genomic island borders. Alternatively, if you wish to view each replicon separately, or if the replicons are not closed and require rearrangement against a reference in IslandCompare, it may be best to upload each replicon separately and analyse sets of homologous replicons (eg. Analyse Chromosome I from a set of Vibrio genomes as one submission and Chromosome II as a separate submission.)

\\n
\\n
What is the accuracy of IslandCompare genomic island predictions?
\\n
\\n

IslandCompare incorporates two of the most accurate genomic island prediction methods – IslandPath-DIMOB has an accuracy of 77%, while Sigi-HMM has an accuracy of 92%. Both methods have >85% precision. In some cases, you may want higher recall, for which we suggest using Alien_Hunter, but the number of false predictions will also increase greatly. IslandPick is the most precise/specific, if comparison genomes are available. A number of other genomic island prediction tools are available, including GIHunter, which offers high precision and recall. Please see our most recent review for a more comprehensive overview of computational genomic island prediction software Bertelli et al., 2018.

\\n
\\n
What is the source of antimicrobial resistance gene annotations? Which resources should I cite if I make use of these annotations?
\\n
\\n

Antimicrobial resistance genes are annotated with the Resistance Gene Identifier, which draws from the curated antimicrobial resistance genes in the Comprehensive Antibiotic Resistance Database (CARD). See Jia et al., 2017 or our About page for more details.

\\n
\\n
How can I check if a genomic island might be a pathogenicity or resistance island?
\\n
\\n

Antimicrobial resistance genes, as predicted by the Resistance Gene Identifier, are annotated with pink flags appended to the genome in the visual IslandCompare output. You can also explore AMR genes associated with a given genomic island by clicking on the island, which will pull up a separate page with the islands in that cluster and their gene annotations. Keep in mind that the annotations available here are by no means complete and are not available for every genome so if you do not see any annotated islands, there still may be a resistance island in your genome of interest. Further investigation of the types of genes within the genomic island predictions will be crucial for classifying these types of genomic islands.

\\n

Unfortunately, we do not specifically flag virulence factors associated with pathogenicity islands at this time and evaluating these features will need to be performed more manually for the time being. Please check back when updated versions become available for this feature though!

\\n
\\n
Where can I find more information about performing genomic island prediction using computational methods?
\\n
\\n

If you are interested in learning more about the computational prediction of genomic islands, please see the review article by Bertelli et al., 2018 in Briefings in Bioinformatics and also note this earlier review as well Langille et al., 2010.

\\n
\\n
\\n\";","module.exports = \"\\n

Publications

\\n

How to cite this service

\\n
\\n

Bertelli, C., Gray, K.L. et al. “Enabling genomic island prediction and comparison in multiple genomes to investigate\\nbacterial evolution and outbreaks” Microbial Genomics. 2022. doi: 10.1099/mgen.0.000818

\\n
\\n

Citations of integrated software

\\n

The following resources were incorporated into the IslandCompare analysis pipeline. We would encourage you to reference them for further information about these methods and to cite them in your work depending on the resources used:

\\n\\n\";","/**\n * Code responsible for interacting with /api/history_contents\n * https://docs.galaxyproject.org/en/latest/api/api.html#module-galaxy.webapps.galaxy.api.history_contents\n */\nimport * as Common from \"./_common\";\nimport { History } from './histories';\n\nconst anchor = document.createElement(\"a\"); // Global anchor used for download() below\n\nclass HistoryAssociation extends Common.Model {\n static end_states = ['ok', 'error', 'paused', 'failed'];\n static error_states = ['error', 'failed'];\n static ready_states = ['ok', 'queued'];\n static ghost_hid = 0;\n\n constructor(...args) {\n super(...args);\n // Add HasState mixin\n for (const key of Object.keys(Common.HasState)) {\n if (!(key in this)) this[key] = Common.HasState[key];\n }\n }\n\n static fields() {\n return {\n ...super.fields(),\n }\n }\n\n /**\n * Build base url for model instance specific api endpoint.\n * @returns {string} Base url for model api endpoint\n */\n build_url() {\n return `${History.build_url()}${this.history_id}/${this.constructor.apiPath}${this.id}`;\n }\n\n static build_url() {\n throw(\"HistoryDatasetAssociation url is relative to history, must call on a model instance\");\n }\n\n static async fetch(history, options) {\n const response = await this.request('get', {url: `${history.build_url()}${this.apiPath}`, ...options});\n if (response.entities) {\n return response.entities[this.entity];\n }\n return this.all();\n }\n\n static async post(history, options) {\n const response = await this.request('post', {url: `${history.build_url()}${this.apiPath}`, ...options});\n return response.entities[this.entity][0];\n }\n\n /**\n * Find model with specified id, or get it from the Galaxy server\n * @param id Model id\n * @param history Associated history instance\n * @param options {Object} Options to pass to api().get()\n * @returns {Promise} model instance if the id is found or null\n */\n static async findOrLoad(id, history, options={}) { //eslint-disable-line\n const result = this.find(id);\n if (result) return result;\n\n const response = await this.request('get', {url: `${history.build_url()}${this.apiPath}${id}`, ...options});\n if (response.entities) {\n return response.entities[this.entity][0]; // There should only be one\n }\n return this.find(id);\n }\n\n /**\n * Delete this instance on the Galaxy server\n * @param options {Object} options to pass to $delete()\n * @returns {Promise} Null if ghost instance or the result of $delete()\n */\n async delete(options = {}) {\n this.deleted = true; // TODO is this necessary any more?\n if (this.hid === this.constructor.ghost_hid) {\n //If ghost item, delete local only\n options.local_only = true;\n }\n return super.delete(options);\n }\n\n /**\n * Generate object expected for workflow invocation\n * @returns {{src: string, id: string}}\n */\n toInput() {\n return {id: this.id, src: this.constructor.srcName};\n }\n\n /**\n * Download data to client\n * @param url_xform optional function to modify URL before making request. Defaults to identity function \"x=>x\".\n */\n download(url_xform) {\n if (typeof url_xform !== 'function') url_xform = x=>x;\n let url;\n if (this.download_url) {\n // HDA\n url = url_xform(`${this.download_url}?to_ext=${this.extension}&filename_pattern=${this.name}.${this.extension}`);\n anchor.setAttribute(\"download\", `${this.name}.${this.extension}`);\n } else {\n // HDCA\n url = url_xform(`${this.build_url()}/download`);\n anchor.setAttribute(\"download\", \"\");\n }\n anchor.href = url;\n anchor.style.display = \"none\";\n //document.body.appendChild(anchor);\n //setTimeout(function() {\n anchor.click();\n //document.body.removeChild(anchor);\n //}, 66);\n }\n}\n\nclass HistoryDatasetAssociation extends HistoryAssociation {\n static entity = 'HistoryDatasetAssociation';\n static primaryKey = 'id';\n static apiPath = 'contents/datasets/';\n static srcName = 'hda';\n\n static fields() {\n return {\n ...super.fields(),\n id: this.string(null).nullable(),\n accessible: this.boolean(false),\n type_id: this.string(null).nullable(),\n file_name: this.string(null).nullable(),\n resubmitted: this.boolean(false),\n create_time: this.string((new Date).toISOString()),\n creating_job: this.string(null).nullable(),\n dataset_id: this.string(null).nullable(),\n file_size: this.number(0),\n file_ext: this.string(null).nullable(),\n misc_info: this.string(''),\n hda_ldda: this.string('hda'),\n download_url: this.string(null).nullable(),\n state: this.string('pending'),\n display_types: this.attr([]),\n display_apps: this.attr([]),\n metadata_dbkey: this.string('?'),\n type: this.string(null).nullable(),\n misc_blurb: this.string(''),\n peek: this.string(''),\n update_time: this.string((new Date).toISOString()),\n data_type: this.string(null).nullable(),\n tags: this.attr([]),\n deleted: this.boolean(false),\n history_id: this.string(null).nullable(),\n meta_files: this.attr([]),\n genome_build: this.string('?'),\n metadata_sequences: this.number(0),\n hid: this.number(this.ghost_hid),\n model_class: this.string('HistoryDatasetAssociation'),\n metadata_data_lines: this.number(0),\n annotation: this.string(null).nullable(),\n permissions: this.attr({\n access: [],\n manage: [],\n }),\n history_content_type: this.string('dataset'),\n name: this.string('New dataset'),\n extension: this.string(''),\n visible: this.boolean(true),\n url: this.string(null).nullable(),\n uuid: this.string(null).nullable(),\n visualizations: this.attr([]),\n rerunnable: this.boolean(false),\n purged: this.boolean(false),\n api_type: this.string(null).nullable(),\n\n //ORM only\n history: this.belongsTo(History, 'history_id'),\n //TODO dataset: this.hasOne(Dataset, 'dataset_id'),\n file: this.attr(null),\n upload_progress: this.number(100),\n };\n }\n\n // TODO GET /api/histories/{encoded_history_id}/contents/{encoded_content_id}/extra_files\n // TODO GET /api/histories/{encoded_history_id}/contents/{encoded_content_id}/display\n // TODO GET /api/histories/{history_id}/contents/{history_content_id}/metadata_file\n\n /**\n * Helper to check the 'readyness' of the dataset for use in a workflow or tool invocation\n * @returns {boolean} True if ready, False otherwise.\n */\n ready() {\n return this.constructor.ready_states.includes(this.state);\n }\n\n static waiting_uploads = []; // TODO switch to a promise pool library?\n\n /**\n * Upload file to server\n * @param file {File} handle to file for upload\n * @param history_id {string} ID of history to upload to\n * @param file_type {string} Optional type of file, skips server side type sniff step\n * @returns {Promise} Model representing uploaded dataset\n */\n static async upload(file, history_id, file_type = 'auto') {\n //TODO move to Dataset, this was placed here because the api returns an hda object (a dataset must have an hda to exist)\n // Create placeholder hda while uploading\n const tmp_id = file.name+Math.floor(Math.random()*10**16).toString();\n let ext = file.name.match(/[^.]+$/);\n ext = ext ? ext[0] : '';\n await HistoryDatasetAssociation.insert({\n data: {\n id: tmp_id,\n file: file,\n name: file.name,\n hid: this.ghost_hid,\n history_id: history_id,\n upload_progress: 0,\n state: \"uploading\",\n extension: ext,\n }\n });\n\n // Prepare upload request\n const formData = new FormData();\n const inputs = {\n 'file_count': 1,\n 'files_0|NAME' : file.name,\n 'files_0|type' : 'upload_dataset',\n //'files_0|space_to_tab':null,\n //'files_0|to_posix_lines':\"Yes\",\n 'files_0|file_type':file_type,\n 'files_0|dbkey':'?',\n 'dbkey' : '?',\n 'file_type' : file_type,\n 'ajax_upload' : 'true',\n };\n formData.append('history_id', history_id);\n formData.append('inputs', JSON.stringify(inputs));\n formData.append('tool_id', 'upload1');\n formData.append('files_0|file_data', file);\n //formData.append('key', apiKey);\n\n // TODO Resumable uploads\n // Change inputs to: 'files_0|file_data': {session_id='generated string', name=''}\n // Post to /api/uploads with multipart/form-data:\n //\"session_id\": ...\n //\"session_start\": 0 (chunk start byte)\n //\"session_chunk\": Blob()\n\n // Throttle uploads\n // TODO This totally undermines the asyncronous nature of this function and needs to be reapproached\n // This effectively just 'yields' the function\n let resolve;\n const throttle = new Promise(r=>resolve = r);\n this.waiting_uploads.push(throttle);\n while (this.waiting_uploads[0] !== throttle) await this.waiting_uploads[0];\n\n // Initiate upload\n try {\n const response = await this.request('post', {\n url: '/api/tools',\n data: formData,\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n onUploadProgress: progressEvent => {\n // Update placeholder hda with progress\n let upload_progress = (progressEvent.loaded * 100 / progressEvent.total) - 1; //-1 To keep progress indicator active until temporary hda deleted\n HistoryDatasetAssociation.update({\n where: tmp_id,\n data: {upload_progress: upload_progress}\n });\n },\n validateStatus: status => { return status === 200 }, //TODO is code 200 the only valid response? 201? 202?\n dataTransformer(response) {\n return response.data.outputs[0];\n },\n });\n\n // Update or replace placeholder hda\n HistoryDatasetAssociation.delete(tmp_id);\n return response.entities[this.entity][0];\n } catch (e) {\n HistoryDatasetAssociation.update({\n where: tmp_id,\n data: { name: 'Failed to upload ' + file.name, state: \"failed\" }\n });\n throw e;\n } finally {\n // Allow next waiting upload\n this.waiting_uploads.shift();\n resolve();\n }\n }\n}\n\nclass HistoryDatasetCollectionAssociation extends HistoryAssociation {\n static entity = 'HistoryDatasetCollectionAssociation';\n static primaryKey = 'id';\n static apiPath = 'contents/dataset_collections/';\n static srcName = 'hdca';\n\n static fields() {\n return {\n ...super.fields(),\n //Request data\n id: this.string(null).nullable(),\n history_content_type: this.string('dataset_collection'),\n populated_state_message: this.string(null).nullable(),\n name: this.string('New collection'),\n populated: this.boolean(false),\n deleted: this.boolean(false),\n type: this.string('collection'),\n history_id: this.string(null).nullable(),\n tags: this.attr([]),\n visible: this.boolean(true),\n job_source_id: this.string(null).nullable(), //TODO add relation\n job_source_type: this.string(null).nullable(),\n collection_type: this.string('list'),\n url: this.string(null).nullable(),\n model_class: this.string('HistoryDatasetCollectionAssociation'),\n hid: this.number(0),\n element_count: this.number(0),\n populated_state: this.string('ok'),\n elements: this.attr([]), //TODO add relation\n\n //ORM only\n history: this.belongsTo(History, 'history_id'),\n }\n }\n\n /**\n * Poll model state until it is an end_state\n * @param callback Called when state changes to end_state, return true to stop polling, false to continue\n * @param extra Additional parameters passed to Model.start_polling()\n */\n poll_state(callback = ()=>true, ...extra) {\n this.poll_state_callback(x=>x.populated_state, callback, ...extra);\n }\n}\n\nconst srcMap = [\n HistoryDatasetAssociation,\n HistoryDatasetCollectionAssociation,\n].reduce((acc, cur)=>{\n acc[cur.srcName] = cur;\n return acc;\n}, {});\n\nconst Module = {\n ...Common.Module,\n state: Common.State({\n\n }),\n mutations: {\n ...Common.Mutations,\n },\n actions: {\n ...Common.Actions,\n },\n getters: {\n ...Common.Getters,\n },\n};\n\nfunction register(database) {\n database.register(HistoryDatasetAssociation, Module);\n database.register(HistoryDatasetCollectionAssociation, Module);\n}\n\nexport {\n HistoryDatasetAssociation,\n HistoryDatasetCollectionAssociation,\n Module,\n register,\n srcMap,\n};\n","/**\n * Code common to all Galaxy API models\n *\n * Every model should inherit Model and be registered with a module that extends Module.\n */\n\n// TODO https://docs.galaxyproject.org/en/latest/api/api.html#module-galaxy.webapps.galaxy.api.display_applications\n// TODO https://docs.galaxyproject.org/en/latest/api/api.html#module-galaxy.webapps.galaxy.api.dynamic_tools\n\nimport { Model as VuexModel } from '@vuex-orm/core';\nimport _merge from 'lodash.merge'\n\nconst HasState = {\n /**\n * This mixin expects the class to have a static list of end_states and to extend Model\n */\n\n /**\n * Poll model state until it is an end_state\n * @param callback Called when state changes to end_state, return true to stop polling, false to continue\n * @param extra Additional parameters passed to Model.start_polling()\n */\n poll_state(callback = ()=>true, ...extra) {\n this.poll_state_callback(undefined, callback, ...extra);\n },\n\n\n /**\n * Poll state_callback until it is an end_state\n * @param state_callback Callback that must return a string containing the models state, the callback receives the model as a parameter\n * @param callback Called when state changes to end_state, return true to stop polling, false to continue\n * @param extra Additional parameters passed to Model.start_polling()\n */\n poll_state_callback(state_callback = undefined, callback = ()=>true, ...extra) {\n let self = this;\n if (state_callback === undefined) state_callback = self=>self.state;\n if (!this.constructor.end_states.includes(state_callback(self))) {\n this.start_polling(()=>{\n self = self.constructor.find(self[self.constructor.primaryKey]); // TODO recover from the reactivity system failing, this doesn't recover relationships\n if (self.constructor.end_states.includes(state_callback(self))) {\n return callback();\n }\n return false;\n }, ...extra);\n } else {\n callback();\n }\n },\n};\n\n/**\n * Base class for API models\n */\nclass Model extends VuexModel {\n\n static fields() {\n return {\n }\n }\n\n /**\n * Build base url for model instance specific api endpoint.\n * Models that require other model information in their api url will override this function.\n * @returns {string} Base url for model api endpoint\n */\n build_url() {\n return `${this.constructor.build_url()}${this[this.constructor.primaryKey]}/`;\n }\n\n static build_url() {\n return this.apiPath;\n }\n\n static async doRequest(request, config) {\n try {\n const axiosResponse = await this.axios.request(config);\n return request.createResponse(axiosResponse, config);\n } catch (err) {\n console.log(`Error: ${this.entity} failed request:`, request, config);\n throw(err);\n }\n }\n\n static createConfig(request, config) {\n return _merge({},\n request.config,\n request.model.globalApiConfig,\n request.model.apiConfig,\n config\n );\n }\n\n createConfig(request, config) {\n return this.constructor.createConfig(request, config);\n }\n\n static async request(method, config) {\n const request = (this.api && this.api()) || this.constructor.api(); // Allow rebinding this to model instance\n const requestConfig = this.createConfig(request, {method, ...config});\n if (!requestConfig.url) requestConfig.url = this.build_url();\n\n return (this.doRequest && this.doRequest(request, requestConfig)) || this.constructor.doRequest(request, requestConfig); // Allow rebinding this to model instance\n }\n\n async request(method, config) {\n return this.constructor.request.call(this, method, config);\n }\n\n static async post(data = {}, options = {}) {\n const response = await this.request(\"post\", {data, ...options});\n\n if (response.entities) {\n return response.entities[this.entity][0]; // There should only be one\n }\n return null;\n }\n\n /**\n * Update model state on the Galaxy server. Wraps api().put() with model instance params.\n * @param fields {Array} Optional Array of strings containing field names to update\n * @param options {Object} Options to pass to put()\n * @returns {Promise} result of api().put()\n */\n async put(fields, options={}) {\n let data = this;\n if (fields !== undefined) {\n //Only keep requested fields\n data = Object.fromEntries(\n Object.entries(data).filter(([k,_])=>fields.includes(k)) //eslint-disable-line\n );\n }\n if (data.hasOwnProperty('$toJson')) data = data.$toJson();\n else data = JSON.stringify(data);\n\n return this.request('put', {data, ...options});\n }\n\n // TODO find all places this can be used and replace code\n /**\n * Update model state from Galaxy server. Wraps api().get() with model instance params.\n * @param options {Object} Options to pass to $get\n * @returns {Promise<*>} result of $get()\n */\n async reload(options={}) {\n return this.request('get', options);\n }\n\n /**\n * Delete model on Galaxy server. Wraps $delete() with model instance params.\n * @param options {Object} Options to pass to $delete()\n * @returns {Promise<*>} result of delete()\n */\n async delete(options = {}) {\n this.stop_polling();\n\n //Delete locally first\n const result = this.constructor.delete(this[this.constructor.primaryKey]);\n if (options.local_only) return result;\n\n return this.request('delete', options);\n }\n\n /**\n * Start requesting model updates at a specified interval.\n * New update requests will not be created until the previous complete.\n * Stores handles returned by setTimeout() in window.pollHandles as a Map.\n * @param stop_criteria {CallableFunction} Callback to check if polling should stop. Return true to stop, false to continue.\n * @param options {Object} Options to pass to reload()\n * @param interval {Number} Delay in ms between request\n */\n start_polling(stop_criteria, options={}, interval=10000) {\n const self = this;\n if (typeof stop_criteria !== \"function\") stop_criteria = ()=>false;\n if (!window.hasOwnProperty('pollHandles')) window.pollHandles = new Map();\n if (!window.pollHandles.has(this.id)) {\n const f = ()=>{ //Make following code block passable to setTimeout\n // Prevent race condition allowing orphaned instances of f to continue polling\n if (f.pollHandle === undefined || f.pollHandle === window.pollHandles.get(this.id)) {\n self.reload(options).then(() => {\n if (stop_criteria()) {\n self.stop_polling();\n } else {\n // Reschedule after reload\n f.pollHandle = setTimeout(f, interval);\n window.pollHandles.set(self.id, f.pollHandle);\n }\n }).catch(() => {\n // Reschedule if reload fails (possibly due to a connection error)\n f.pollHandle = setTimeout(f, interval);\n window.pollHandles.set(self.id, f.pollHandle);\n });\n }\n };\n f();\n }\n }\n\n /**\n * Stop requesting model updates regardless of any stop criteria passed to start_polling()\n */\n stop_polling() {\n if (window.hasOwnProperty('pollHandles')) {\n const pollHandle = window.pollHandles.get(this.id);\n if (pollHandle !== undefined) {\n clearTimeout(pollHandle);\n window.pollHandles.delete(this.id);\n }\n }\n }\n\n /**\n * Catch model delete hook and ensure polling is stopped.\n * @param model {Model} model being deleted\n */\n static beforeDelete(model) {\n model.stop_polling();\n //VuexModel.beforeDelete(model); // TODO VuexModel.beforeDelete undefined\n }\n\n // TODO find all places this can be used and replace code\n /**\n * Find model with specified id, or get it from the Galaxy server\n * @param id Model id\n * @param options {Object} Options to pass to api().get()\n * @returns {Promise} model instance if the id is found or null\n */\n static async findOrLoad(id, options={}) {\n const result = this.find(id);\n if (result) return result;\n\n const response = await this.request('get', options);\n if (response.entities) {\n return response.entities[this.entity][0]; // There should only be one\n }\n return this.find(id);\n }\n\n static async fetch(options) {\n const response = await this.request('get', options);\n if (response.entities) {\n return response.entities[this.entity];\n }\n return this.all();\n }\n\n /**\n * Allow comparison of models. If the models have the same primary key then they are considered identical.\n * @param obj Object to compare to\n * @returns {boolean|Boolean} True if models share same primary key (id), False otherwise.\n */\n is(obj) {\n if (obj.constructor.hasOwnProperty('primaryKey')) {\n //TODO are ids unique across Galaxy?\n return this[this.constructor.primaryKey] === obj[obj.constructor.primaryKey];\n } else {\n return super.is(obj);\n }\n }\n}\n\n/**\n * Base module for all models\n * @type {{namespaced: boolean}}\n */\nconst Module = {\n namespaced: true,\n};\n\n/**\n * Base state wrapper for all modules\n * @param state state to wrap\n * @returns {function(): Object} returns wrapped state\n */\nfunction State(state) {\n if (state instanceof Function) state = state();\n return ()=>{return {\n ...state,\n }};\n}\n\nconst Mutations = { };\nconst Actions = { };\nconst Getters = { };\n\nexport {\n Model,\n Module,\n State,\n Mutations,\n Actions,\n Getters,\n HasState,\n}\n","/**\n * Code responsible for interacting with /api/genomes\n * https://docs.galaxyproject.org/en/latest/api/api.html#module-galaxy.webapps.galaxy.api.genomes\n */\nimport * as Common from \"./_common\";\n\n\nclass Genome extends Common.Model {\n static entity = 'Genome';\n static primaryKey = 'id';\n\n static fields() {\n return {\n ...super.fields(),\n id: this.string(null),\n name: this.string(null).nullable(),\n }\n }\n\n // TODO GET /api/genomes/{id}/indexes?type={table name}\n // TODO GET /api/genomes/{id}/sequences\n\n //Vuex ORM Axios Config\n static apiConfig = {\n url: '/api/genomes',\n dataTransformer(response) {\n //TODO Bandaid to deal with lazy api output\n if (response.config.url.match('/api/genomes$')) {\n let data = [];\n for (let i = 0; i < response.data.length; ++i) {\n if (response.data[i][0] === '----- Additional Species Are Below -----') continue; // Handle https://github.com/galaxyproject/galaxy/issues/8612\n data[i] = {name: response.data[i][0], id: response.data[i][1]};\n }\n return data;\n }\n return response.data;\n },\n };\n}\n\nconst Module = {\n ...Common.Module,\n state: Common.State({\n\n }),\n mutations: {\n ...Common.Mutations,\n },\n actions: {\n ...Common.Actions,\n },\n getters: {\n ...Common.Getters,\n },\n};\n\nfunction register(database) {\n database.register(Genome, Module);\n}\n\nexport {\n Genome,\n Module,\n register,\n};","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=style&index=0&id=028079c8&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=style&index=0&id=028079c8&scoped=true&lang=css&\""],"sourceRoot":""}