genoverse 4.0.5 → 4.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/dist/129.genoverse.js.map +1 -1
- package/dist/232.genoverse.js.map +1 -1
- package/dist/394.genoverse.js.map +1 -1
- package/dist/469.genoverse.js.map +1 -1
- package/dist/530.genoverse.js.map +1 -1
- package/dist/804.genoverse.js +1 -1
- package/dist/804.genoverse.js.map +1 -1
- package/dist/842.genoverse.js.map +1 -1
- package/dist/893.genoverse.js.map +1 -1
- package/dist/949.genoverse.js.map +1 -1
- package/dist/952.genoverse.js.map +1 -1
- package/dist/genoverse.js +1 -1
- package/dist/genoverse.js.map +1 -1
- package/index.html +2 -2
- package/package.json +4 -4
- package/src/js/Track/Model/Sequence/Fasta.js +1 -1
- package/src/js/Track/View/Gene/Ensembl.js +37 -19
- package/src/js/plugins/controlPanel.js +1 -1
- package/test/View/calculate-biotype-legend.test.js +28 -0
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Genoverse [](https://github.com/WTSI-decipher-grp/Genoverse/actions)
|
|
2
2
|
|
|
3
3
|
Genoverse is a portable, customizable, back-end independent JavaScript and HTML5 based genome browser which allows the user to explore data in a dynamic and interactive manner.
|
|
4
4
|
|
|
@@ -6,11 +6,11 @@ Data is visualized in the browser, meaning Genoverse can be installed on any web
|
|
|
6
6
|
|
|
7
7
|
Genoverse works with a variety of formats, such as JSON, BED, BAM, VCF, GFF, delimited text files, or XML, and can be customized to parse and display any data source as required.
|
|
8
8
|
|
|
9
|
-
Genoverse works using a system of [tracks](https://github.com/
|
|
9
|
+
Genoverse works using a system of [tracks](https://github.com/WTSI-decipher-grp/Genoverse/wiki/Tracks) - essentially horizontal sections of the genome browser which display [features](https://github.com/WTSI-decipher-grp/Genoverse/wiki/Features) - genes, variants, etc. with defined genomic start and end points. Each track has its own data set stored in a [model](https://github.com/WTSI-decipher-grp/Genoverse/wiki/Genoverse.Track.Model-functions), a method for displaying that data, stored in a [view](https://github.com/WTSI-decipher-grp/Genoverse/wiki/Genoverse.Track.View-functions), and a [controller](https://github.com/WTSI-decipher-grp/Genoverse/wiki/Genoverse.Track.Controller-functions) to manage the creation of DOM elements, and user interactions with them.
|
|
10
10
|
|
|
11
11
|
Tracks can have multiple models and views, which allows for switching between displays at different zoom levels. An example of this would be a track where you show genes when looking at a large region of a chromosome, and then switch to showing transcripts as the user zooms in.
|
|
12
12
|
|
|
13
|
-
In addition to this, Genoverse has a set of [plugins](https://github.com/
|
|
13
|
+
In addition to this, Genoverse has a set of [plugins](https://github.com/WTSI-decipher-grp/Genoverse/wiki/Plugins), which allow additional functionality beyond the core genome browser. These include a control panel for adding and removing tracks, and interacting with the browser more easily, a way to add controls to each individual track, and a way to enable drag and drop of local data files onto the genome browser.
|
|
14
14
|
|
|
15
15
|
## Installation
|
|
16
16
|
|
|
@@ -42,7 +42,7 @@ const genoverse = Genoverse.jQuery(container).data('genoverse');
|
|
|
42
42
|
|
|
43
43
|
By default, the Genoverse distribution in created with [Babel](https://babeljs.io/) and certain [polyfills](https://github.com/zloirock/core-js/blob/master/README.md), in order to support old web browsers like Internet Explorer 11.
|
|
44
44
|
|
|
45
|
-
If you want to create your own distribution bundle, see `devDependencies` in [package.json](https://github.com/
|
|
45
|
+
If you want to create your own distribution bundle, see `devDependencies` in [package.json](https://github.com/WTSI-decipher-grp/Genoverse/blob/master/package.json) for Webpack/Babel packages you need to install in order to be able to do so.
|
|
46
46
|
|
|
47
47
|
Once these dependencies are installed, distributions can be built with [webpack-cli](https://webpack.js.org/api/cli/).
|
|
48
48
|
|
|
@@ -179,4 +179,4 @@ new Genoverse({
|
|
|
179
179
|
});
|
|
180
180
|
```
|
|
181
181
|
|
|
182
|
-
See [index.html](https://github.com/
|
|
182
|
+
See [index.html](https://github.com/WTSI-decipher-grp/Genoverse/blob/master/index.html) for example configuration, or the [documentation](https://github.com/WTSI-decipher-grp/Genoverse/wiki/Genoverse-configuration) for more details about configuration properties.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"129.genoverse.js","mappings":"oIAgFA,WAAiBA,WA7EF,WACb,IAAMC,EAAYC,KAEdC,GAAc,EACdC,EAAc,mBACdC,EAAc,oBACdC,EAAc,oBACdC,EAAc,iBAEdC,SAASC,sBAA0D,OAAlCD,SAASC,sBAG5CL,EAAc,qBACdC,EAAc,sBACdE,EAAc,mBACdD,EAAc,uBACLE,SAASE,KAAKC,sBACvBP,EAAc,sBACdC,EAAc,uBACdE,EAAc,sBACdD,EAAc,wBACLE,SAASE,KAAKE,yBACvBR,EAAc,yBACdC,EAAc,0BACdE,EAAc,yBACdD,EAAc,2BACJE,SAASK,qBACnBV,GAAY,GAGdF,EAAUa,eAAiB,CACzBV,UAAcA,EACdC,SAAcA,EACdE,WAAcA,EACdD,YAAcA,EAEdS,WAAY,SAACC,GACXA,EAAQC,mBAAqBD,EAAQE,eAAeC,QACpDH,EAAQE,eAAeE,SAAS,iBAChCJ,EAAQK,SAASC,OAAOC,YACxBP,EAAQQ,aAAaC,KAAK,8BAA8BC,YAAY,wBAAwBN,SAAS,
|
|
1
|
+
{"version":3,"file":"129.genoverse.js","mappings":"oIAgFA,WAAiBA,WA7EF,WACb,IAAMC,EAAYC,KAEdC,GAAc,EACdC,EAAc,mBACdC,EAAc,oBACdC,EAAc,oBACdC,EAAc,iBAEdC,SAASC,sBAA0D,OAAlCD,SAASC,sBAG5CL,EAAc,qBACdC,EAAc,sBACdE,EAAc,mBACdD,EAAc,uBACLE,SAASE,KAAKC,sBACvBP,EAAc,sBACdC,EAAc,uBACdE,EAAc,sBACdD,EAAc,wBACLE,SAASE,KAAKE,yBACvBR,EAAc,yBACdC,EAAc,0BACdE,EAAc,yBACdD,EAAc,2BACJE,SAASK,qBACnBV,GAAY,GAGdF,EAAUa,eAAiB,CACzBV,UAAcA,EACdC,SAAcA,EACdE,WAAcA,EACdD,YAAcA,EAEdS,WAAY,SAACC,GACXA,EAAQC,mBAAqBD,EAAQE,eAAeC,QACpDH,EAAQE,eAAeE,SAAS,iBAChCJ,EAAQK,SAASC,OAAOC,YACxBP,EAAQQ,aAAaC,KAAK,8BAA8BC,YAAY,wBAAwBN,SAAS,yBACtG,EAEDO,UAAW,SAACX,GACNA,EAAQE,eAAeU,SAAS,mBAClCZ,EAAQE,eAAeQ,YAAY,iBACnCV,EAAQK,SAASL,EAAQC,oBACzBD,EAAQQ,aAAaC,KAAK,8BAA8BC,YAAY,0BAA0BN,SAAS,wBAE1G,EAEDS,cAAe,WACR5B,EAAUiB,eAAeY,GAAGtB,SAASP,EAAUa,eAAeT,aACjEJ,EAAUa,eAAea,UAAU1B,GACnCO,SAASuB,oBAAoB9B,EAAUa,eAAeV,UAAWH,EAAUa,eAAee,eAE7F,GAGC1B,GACFF,EAAU+B,SAASC,KAAK,CACtBC,KAAS,2CACTC,MAAS,uBACTC,KAAS,yBACTC,OAAS,SAACrB,GACJA,EAAQE,eAAeU,SAAS,iBAClCpB,SAASQ,EAAQF,eAAeP,eAEhCC,SAAS8B,iBAAiBtB,EAAQF,eAAeV,UAAWY,EAAQF,eAAee,eACnFb,EAAQE,eAAe,GAAGF,EAAQF,eAAeR,eACjDU,EAAQF,eAAeC,WAAWC,GAErC,GAGN,EAEoCuB,SAAUf,EAAAA,Q","sources":["webpack://genoverse/./src/js/plugins/fullscreen.js"],"sourcesContent":["import '../../css/fullscreen.css';\nimport controlPanel from './controlPanel';\n\nconst plugin = function () {\n const genoverse = this;\n\n let supported = true;\n let eventName = 'fullscreenchange'; // All the browsers have different names\n let elemName = 'fullscreenElement'; // ... even the capitalisation varies!\n let requestName = 'requestFullscreen';\n let cancelName = 'exitFullscreen';\n\n if (document.onmsfullscreenchange || document.onmsfullscreenchange === null) {\n // We need the IE11 version of this to work; IE9-10 have the actions but not the events.\n // The key must be present, i.e. value may be null but it must not return undefined\n eventName = 'MSFullscreenChange';\n elemName = 'msFullscreenElement';\n cancelName = 'msExitFullscreen';\n requestName = 'msRequestFullscreen';\n } else if (document.body.mozRequestFullScreen) {\n eventName = 'mozfullscreenchange';\n elemName = 'mozFullScreenElement';\n cancelName = 'mozCancelFullScreen';\n requestName = 'mozRequestFullScreen';\n } else if (document.body.webkitRequestFullscreen) {\n eventName = 'webkitfullscreenchange';\n elemName = 'webkitFullscreenElement';\n cancelName = 'webkitCancelFullScreen';\n requestName = 'webkitRequestFullscreen';\n } else if (!document.onfullscreenchange) {\n supported = false;\n }\n\n genoverse.fullscreenVars = {\n eventName : eventName,\n elemName : elemName,\n cancelName : cancelName,\n requestName : requestName,\n\n enterEvent: (browser) => {\n browser.preFullscreenWidth = browser.superContainer.width();\n browser.superContainer.addClass('gv-fullscreen');\n browser.setWidth(window.innerWidth);\n browser.controlPanel.find('.gv-fullscreen-button .fas').removeClass('fa-expand-arrows-alt').addClass('fa-compress-arrows-alt');\n },\n\n exitEvent: (browser) => {\n if (browser.superContainer.hasClass('gv-fullscreen')) {\n browser.superContainer.removeClass('gv-fullscreen');\n browser.setWidth(browser.preFullscreenWidth);\n browser.controlPanel.find('.gv-fullscreen-button .fas').removeClass('fa-compress-arrows-alt').addClass('fa-expand-arrows-alt');\n }\n },\n\n eventListener: () => {\n if (!genoverse.superContainer.is(document[genoverse.fullscreenVars.elemName])) {\n genoverse.fullscreenVars.exitEvent(genoverse);\n document.removeEventListener(genoverse.fullscreenVars.eventName, genoverse.fullscreenVars.eventListener);\n }\n },\n };\n\n if (supported) {\n genoverse.controls.push({\n icon : '<i class=\"fas fa-expand-arrows-alt\"></i>',\n class : 'gv-fullscreen-button',\n name : 'Toggle fullscreen view',\n action : (browser) => {\n if (browser.superContainer.hasClass('gv-fullscreen')) {\n document[browser.fullscreenVars.cancelName]();\n } else {\n document.addEventListener(browser.fullscreenVars.eventName, browser.fullscreenVars.eventListener);\n browser.superContainer[0][browser.fullscreenVars.requestName]();\n browser.fullscreenVars.enterEvent(browser);\n }\n },\n });\n }\n};\n\nexport default { fullscreen: plugin, requires: controlPanel };\n"],"names":["fullscreen","genoverse","this","supported","eventName","elemName","requestName","cancelName","document","onmsfullscreenchange","body","mozRequestFullScreen","webkitRequestFullscreen","onfullscreenchange","fullscreenVars","enterEvent","browser","preFullscreenWidth","superContainer","width","addClass","setWidth","window","innerWidth","controlPanel","find","removeClass","exitEvent","hasClass","eventListener","is","removeEventListener","controls","push","icon","class","name","action","addEventListener","requires"],"sourceRoot":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"232.genoverse.js","mappings":"wVA8JA,WAAiBA,cA5JF,WACb,IAAMC,EAAkBC,KAAKD,OACvBE,EAAkB,CACtBF,EAAO,wDAAwDG,GAAG,SAAS,WACzE,I,MAAMC,EAAQJ,EAAOC,MAAMI,KAAK,SAE5BC,EAAOF,EAAMG,KAAK,SAASC,OAAO,kBAEtC,IAAKF,EAAKG,OAAQ,CAChB,IAAMC,EAAON,EAAMG,KAAK,QAExBD,EAAOF,EAAMG,KACX,QACAH,EAAMG,KAAK,SAASI,IAClBP,EAAMQ,QAAQC,U,EAAd,CACEC,MAA+DV,EAAMW,M,EACpD,mBAATL,EAAsBA,EAAKM,KAAKZ,GAASM,GAAQ,G,EAAM,G,iGAC9DO,SAAS,
|
|
1
|
+
{"version":3,"file":"232.genoverse.js","mappings":"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","sources":["webpack://genoverse/./src/js/plugins/trackControls.js"],"sourcesContent":["import '../../css/trackControls.css';\n\nconst plugin = function () {\n const jQuery = this.jQuery;\n const defaultControls = [\n jQuery('<a title=\"More info\" class=\"fas fa-question-circle\">').on('click', function () {\n const track = jQuery(this).data('track');\n\n let menu = track.prop('menus').filter('.gv-track-info');\n\n if (!menu.length) {\n const info = track.prop('info');\n\n menu = track.prop(\n 'menus',\n track.prop('menus').add(\n track.browser.makeMenu({\n title : track.name,\n [typeof info === 'function' ? info.call(track) : info || ''] : '',\n }).addClass('gv-track-info')\n )\n );\n }\n\n menu.show().position({ of: track.prop('container'), at: 'center top', my: 'center top', collision: 'none' });\n }),\n\n jQuery(`\n <a class=\"gv-height-toggle\">\n <i class=\"fas fa-sort\"></i>\n <i class=\"fas fa-sort-down\"></i>\n <i class=\"fas fa-sort-up\"></i>\n </a>\n `).on({\n click: function () {\n const track = jQuery(this).data('track');\n\n let height;\n\n if (track.prop('autoHeight', !track.prop('autoHeight'))) {\n track.prop('heightBeforeToggle', track.prop('height'));\n height = track.prop('fullVisibleHeight');\n } else {\n height = track.prop('heightBeforeToggle') || track.prop('initialHeight');\n }\n\n jQuery(this).trigger('toggleState');\n\n track.controller.resize(height, true);\n },\n toggleState: function () { // custom event to set title and change the icon\n const track = jQuery(this).data('track');\n const autoHeight = track.prop('autoHeight');\n const resizer = track.prop('resizer');\n\n this.title = autoHeight ? 'Set track to fixed height' : 'Set track to auto-adjust height';\n\n jQuery(this)[autoHeight ? 'addClass' : 'removeClass']('gv-auto-height');\n\n if (resizer) {\n resizer[autoHeight ? 'hide' : 'show']();\n }\n },\n }),\n ];\n\n const remove = jQuery('<a title=\"Remove track\" class=\"far fa-trash-alt\">').on('click', function () {\n jQuery(this).data('track').remove();\n });\n\n const toggle = jQuery(`\n <a class=\"gv-track-controls-toggle\">\n <span><i class=\"fas fa-angle-double-left\"></i><i class=\"fas fa-cog\"></i></span>\n <span><i class=\"fas fa-angle-double-right\"></i></span>\n </a>\n `).on('click', function () {\n jQuery(this).parent().toggleClass('gv-maximized');\n });\n\n this.on({\n afterAddDomElements: function () {\n let controls = this.prop('controls');\n\n if (controls === 'off') {\n return;\n }\n\n const defaultConfig = this.prop('defaultConfig');\n const savedConfig = this.browser.savedConfig?.[this.prop('id')] || {};\n\n controls = (controls || []).concat(defaultControls, this.prop('removable') === false ? [] : remove);\n\n this.trackControls = jQuery('<div class=\"gv-track-controls\">').prependTo(this.container);\n\n const controlsContainer = jQuery('<div class=\"gv-track-controls-container\">').appendTo(this.trackControls);\n\n controls.forEach(\n (control) => {\n let el;\n\n if (jQuery.isPlainObject(control) && control.type) {\n el = jQuery(`<${control.type}>`).data('control', control.name);\n\n (control.options || []).forEach(\n option => el.append(`<option value=\"${option.value}\">${option.text}</option>`)\n );\n } else if (typeof control === 'string') {\n el = jQuery(control);\n } else if (typeof control === 'object' && control.constructor && control instanceof jQuery) {\n el = control.clone(true);\n }\n\n el.data('track', this.track).appendTo(controlsContainer);\n\n // TODO: other control types\n if (el.is('select')) {\n const prop = el.data('control');\n\n el.find(`option[value=${savedConfig[prop] || defaultConfig[prop] || 'all'}]`).attr('selected', true).end().change(function () {\n jQuery(this).data('track').setConfig(jQuery(this).data('control'), this.value);\n });\n }\n }\n );\n\n this.prop('heightToggler', controlsContainer.children('.gv-height-toggle').trigger('toggleState'));\n\n const toggler = toggle.clone(true).data('track', this.track).appendTo(this.trackControls);\n\n toggler.trigger('click');\n\n this.minLabelHeight = Math.max(this.minLabelHeight, this.trackControls.outerHeight(true) + this.prop('margin'));\n\n toggler.trigger('click');\n },\n afterResize: function () {\n if (this.trackControls) {\n this.trackControls[this.prop('height') < this.trackControls.outerHeight(true) ? 'hide' : 'show']();\n }\n },\n afterResetHeight: function () {\n const heightToggler = this.prop('heightToggler');\n\n if (this.prop('resizable') === true && heightToggler) {\n heightToggler[this.prop('autoHeight') ? 'addClass' : 'removeClass']('gv-auto-height');\n heightToggler.trigger('toggleState');\n }\n },\n afterSetMVC: function () {\n const heightToggler = this.prop('heightToggler');\n\n if (heightToggler) {\n heightToggler.trigger('toggleState')[this.prop('resizable') === true ? 'removeClass' : 'addClass']('gv-hide');\n }\n },\n }, 'tracks');\n};\n\nexport default { trackControls: plugin };\n"],"names":["trackControls","jQuery","this","defaultControls","on","track","data","menu","prop","filter","length","info","add","browser","makeMenu","title","name","call","addClass","show","position","of","at","my","collision","click","height","trigger","controller","resize","toggleState","autoHeight","resizer","remove","toggle","parent","toggleClass","afterAddDomElements","controls","defaultConfig","savedConfig","concat","prependTo","container","controlsContainer","appendTo","forEach","control","el","isPlainObject","type","options","option","append","value","text","constructor","clone","is","find","attr","end","change","setConfig","children","toggler","minLabelHeight","Math","max","outerHeight","afterResize","afterResetHeight","heightToggler","afterSetMVC"],"sourceRoot":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"394.genoverse.js","mappings":"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","sources":["webpack://genoverse/./src/js/plugins/karyotype.js"],"sourcesContent":["import '../../css/karyotype.css';\nimport Chromosome from '../Track/library/Chromosome';\n\nconst plugin = function (pluginConf) {\n const jQuery = this.jQuery;\n\n function createKaryotype() {\n const chromosome = jQuery('<div class=\"gv-chromosome\">');\n const container = jQuery('<div class=\"gv-karyotype-container\">').html(chromosome).insertBefore(this.wrapper);\n const assemblyName = this.assembly || this.genomeName;\n const name = `${pluginConf.showAssembly && assemblyName ? `${assemblyName}: ` : ''}Chr ${this.chr}`;\n\n if (pluginConf.showAssembly && assemblyName) {\n container.addClass('gv-show-assembly');\n }\n\n const measureWidth = jQuery(`<div class=\"gv-chromosome\"><ul class=\"gv-label-container\"><li><span class=\"gv-name\">${name}</span></li></ul></div>`).appendTo(container);\n const labelWidth = pluginConf.karyotypeLabel === false ? 0 : measureWidth.find('.gv-name').outerWidth(true) + 10;\n\n measureWidth.remove();\n\n this.karyotype = new Genoverse({\n parent : this,\n container : chromosome,\n width : chromosome.width(),\n genome : this.genome,\n chr : this.chr,\n start : 1,\n end : this.chromosomeSize,\n isStatic : true,\n tracks : [\n Chromosome.extend({\n name : name,\n height : 20,\n featureHeight : 20,\n border : false,\n legend : false,\n unsortable : true,\n\n click: function (e) {\n const offset = this.container.parent().offset().left;\n const x = e.pageX - offset;\n const f = this.featurePositions.search({ x: x, y: 1, w: 1, h: 1 })[0];\n\n if (f) {\n if (e.type === 'mouseup') {\n if (!this.browser.parent.isStatic) {\n this.browser.parent.moveTo(f.chr, f.start, f.end, true);\n }\n } else if (this.hoverFeature !== f && !this.browser.hideTooltip) {\n this.container.tipsy('hide');\n\n if (f.label) {\n const left = offset + f.position[this.scale].start + f.position[this.scale].width / 2;\n\n this.container.attr('title', f.label[0]).tipsy({ trigger: 'manual', container: 'body' }).tipsy('show').data('tipsy').$tip.css('left', function () { return left - jQuery(this).width() / 2; });\n }\n\n this.hoverFeature = f;\n }\n }\n },\n\n addUserEventHandlers: function () {\n const track = this;\n\n this.base();\n\n this.container.on({\n mousemove : (e) => { track.click(e); },\n mouseout : (e) => {\n if (track.browser.viewPoint.is(e.relatedTarget) || track.browser.viewPoint.find(e.relatedTarget).length) {\n return true;\n }\n\n track.container.tipsy('hide');\n track.hoverFeature = false;\n },\n }, '.gv-image-container');\n\n // Don't allow zooming in and out on the karyotype image\n this.container.on('mousewheel', '.gv-image-container, .gv-selector', (e) => {\n e.stopPropagation();\n });\n },\n\n afterSetName: function () {\n this.label.css('lineHeight', `${this.label.height()}px`);\n },\n }),\n ],\n\n addUserEventHandlers: () => {},\n\n afterInit: function () {\n this.updatePosition();\n this.viewPoint.fadeIn();\n },\n\n afterAddTracks: function () {\n this.track = this.tracks[0];\n },\n\n afterAddDomElements: function () {\n const karyotype = this;\n const parent = this.parent;\n\n function hideTooltip() {\n karyotype.hideTooltip = true;\n karyotype.track.prop('container').tipsy('hide');\n }\n\n function updateLocation(e, ui) {\n karyotype.hideTooltip = false;\n\n const scale = karyotype.chromosomeSize / karyotype.width;\n const axis = e.type === 'resizestop' ? jQuery(this).data('ui-resizable').axis : undefined;\n const start = axis === 'e' ? parent.start : Math.max(Math.floor(ui.position.left * scale), 1);\n const end = axis === 'w' ? parent.end : e.type === 'dragstop' ? start + parent.length - 1 : Math.floor(ui.helper.outerWidth(true) * scale) + start;\n\n if (start !== parent.start || end !== parent.end) {\n parent.moveTo(karyotype.chr, start, end, true, e.type === 'dragstop');\n }\n }\n\n if (pluginConf.karyotypeLabel === false) {\n this.labelContainer.remove();\n this.labelContainer = jQuery();\n container.addClass('gv-no-label');\n } else {\n this.labelContainer.width(labelWidth);\n }\n\n this.viewPoint = jQuery('<div class=\"gv-karyotype-viewpoint-wrapper\"><div class=\"gv-karyotype-viewpoint\"></div></div>').appendTo(container).css({\n left : labelWidth,\n width : this.width - labelWidth,\n }).children().on({\n mousemove : (e) => { karyotype.track.controller.click(e); },\n mouseout : (e) => {\n const el = jQuery(e.relatedTarget);\n\n if (karyotype.viewPoint.is(el) || karyotype.viewPoint.find(el).length || (el.prop('nodeName') === 'IMG' && el.parent().is(karyotype.track.prop('imgContainers')[0]))) {\n return true;\n }\n\n karyotype.track.prop('container').tipsy('hide');\n karyotype.track.prop('hoverFeature', false);\n },\n });\n\n if (!parent.isStatic) {\n this.viewPoint.draggable({\n axis : 'x',\n containment : this.wrapper,\n start : hideTooltip,\n stop : updateLocation,\n }).resizable({\n handles : 'e, w',\n containment : 'parent',\n start : hideTooltip,\n stop : updateLocation,\n resize : function (e, ui) {\n ui.element.css('left', Math.max(0, ui.position.left));\n\n if (ui.position.left > 0) {\n ui.element.width(Math.min(ui.size.width, ui.element.parent().width() - ui.position.left));\n } else {\n ui.element.width(ui.size.width + ui.position.left);\n }\n },\n });\n }\n },\n\n updatePosition: function () {\n const left = this.parent.start * this.scale;\n const width = (this.parent.end * this.scale) - left;\n\n this.viewPoint.css({ left: left, width: width });\n },\n });\n\n if (this.loadedPlugins.controlPanel !== true) {\n jQuery('<li class=\"gv-unsortable\">').height((i, h) => h + container.height()).prependTo(this.labelContainer);\n }\n }\n\n function recreateKaryotype() {\n const container = this.karyotype.container.parent();\n\n this.karyotype.destroy();\n container.remove();\n\n createKaryotype.call(this);\n }\n\n this.on({\n afterInit: createKaryotype,\n\n afterSetRange: function () {\n if (this.karyotype) {\n this.karyotype.updatePosition();\n }\n },\n\n afterSetWidth: recreateKaryotype,\n\n afterMoveTo: function (chr) {\n if (this.karyotype && this.karyotype.chr !== chr) {\n recreateKaryotype.call(this);\n }\n },\n });\n};\n\nexport default { karyotype: plugin };\n"],"names":["karyotype","pluginConf","jQuery","this","createKaryotype","chromosome","container","html","insertBefore","wrapper","assemblyName","assembly","genomeName","name","showAssembly","chr","addClass","measureWidth","appendTo","labelWidth","karyotypeLabel","find","outerWidth","remove","Genoverse","parent","width","genome","start","end","chromosomeSize","isStatic","tracks","Chromosome","height","featureHeight","border","legend","unsortable","click","e","offset","left","x","pageX","f","featurePositions","search","y","w","h","type","browser","moveTo","hoverFeature","hideTooltip","tipsy","label","position","scale","attr","trigger","data","$tip","css","addUserEventHandlers","track","base","on","mousemove","mouseout","viewPoint","is","relatedTarget","length","stopPropagation","afterSetName","afterInit","updatePosition","fadeIn","afterAddTracks","afterAddDomElements","prop","updateLocation","ui","axis","undefined","Math","max","floor","helper","labelContainer","children","controller","el","draggable","containment","stop","resizable","handles","resize","element","min","size","loadedPlugins","controlPanel","i","prependTo","recreateKaryotype","destroy","call","afterSetRange","afterSetWidth","afterMoveTo"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"394.genoverse.js","mappings":"gIAuNA,WAAiBA,UApNF,SAAUC,GACvB,IAAMC,EAASC,KAAKD,OAEpB,SAASE,IACP,IAAMC,EAAeH,EAAO,+BACtBI,EAAeJ,EAAO,wCAAwCK,KAAKF,GAAYG,aAAaL,KAAKM,SACjGC,EAAeP,KAAKQ,UAAYR,KAAKS,WACrCC,EAAI,UAAcZ,EAAWa,cAAgBJ,EAA3B,UAA6CA,EAA7C,MAAgE,GAA9E,eAAuFP,KAAKY,KAElGd,EAAWa,cAAgBJ,GAC7BJ,EAAUU,SAAS,oBAGrB,IAAMC,EAAef,EAAO,uFAAD,OAAwFW,EAAxF,4BAAuHK,SAASZ,GACrJa,GAA6C,IAA9BlB,EAAWmB,eAA2B,EAAIH,EAAaI,KAAK,YAAYC,YAAW,GAAQ,GAEhHL,EAAaM,SAEbpB,KAAKH,UAAY,IAAIwB,UAAU,CAC7BC,OAAYtB,KACZG,UAAYD,EACZqB,MAAYrB,EAAWqB,QACvBC,OAAYxB,KAAKwB,OACjBZ,IAAYZ,KAAKY,IACjBa,MAAY,EACZC,IAAY1B,KAAK2B,eACjBC,UAAY,EACZC,OAAY,CACVC,EAAAA,QAAAA,OAAkB,CAChBpB,KAAgBA,EAChBqB,OAAgB,GAChBC,cAAgB,GAChBC,QAAgB,EAChBC,QAAgB,EAChBC,YAAgB,EAEhBC,MAAO,SAAUC,GACf,IAAMC,EAAStC,KAAKG,UAAUmB,SAASgB,SAASC,KAC1CC,EAASH,EAAEI,MAAQH,EACnBI,EAAS1C,KAAK2C,iBAAiBC,OAAO,CAAEJ,EAAGA,EAAGK,EAAG,EAAGC,EAAG,EAAGC,EAAG,IAAK,GAExE,GAAIL,EACF,GAAe,YAAXL,EAAEW,KACChD,KAAKiD,QAAQ3B,OAAOM,UACvB5B,KAAKiD,QAAQ3B,OAAO4B,OAAOR,EAAE9B,IAAK8B,EAAEjB,MAAOiB,EAAEhB,KAAK,QAE/C,GAAI1B,KAAKmD,eAAiBT,IAAM1C,KAAKiD,QAAQG,YAAa,CAG/D,GAFApD,KAAKG,UAAUkD,MAAM,QAEjBX,EAAEY,MAAO,CACX,IAAMf,EAAOD,EAASI,EAAEa,SAASvD,KAAKwD,OAAO/B,MAAQiB,EAAEa,SAASvD,KAAKwD,OAAOjC,MAAQ,EAEpFvB,KAAKG,UAAUsD,KAAK,QAASf,EAAEY,MAAM,IAAID,MAAM,CAAEK,QAAS,SAAUvD,UAAW,SAAUkD,MAAM,QAAQM,KAAK,SAASC,KAAKC,IAAI,QAAQ,WAAc,OAAOtB,EAAOxC,EAAOC,MAAMuB,QAAU,CAAI,GAC9L,CAEDvB,KAAKmD,aAAeT,CACrB,CAEJ,EAEDoB,qBAAsB,WACpB,IAAMC,EAAQ/D,KAEdA,KAAKgE,OAELhE,KAAKG,UAAU8D,GAAG,CAChBC,UAAY,SAAC7B,GAAQ0B,EAAM3B,MAAMC,EAAK,EACtC8B,SAAY,SAAC9B,GACX,GAAI0B,EAAMd,QAAQmB,UAAUC,GAAGhC,EAAEiC,gBAAkBP,EAAMd,QAAQmB,UAAUlD,KAAKmB,EAAEiC,eAAeC,OAC/F,OAAO,EAGTR,EAAM5D,UAAUkD,MAAM,QACtBU,EAAMZ,cAAe,CACtB,GACA,uBAGHnD,KAAKG,UAAU8D,GAAG,aAAc,qCAAqC,SAAC5B,GACpEA,EAAEmC,iBACH,GACF,EAEDC,aAAc,WACZzE,KAAKsD,MAAMO,IAAI,aAAf,UAAgC7D,KAAKsD,MAAMvB,SAA3C,MACD,KAIL+B,qBAAsB,WAAQ,EAE9BY,UAAW,WACT1E,KAAK2E,iBACL3E,KAAKoE,UAAUQ,QAChB,EAEDC,eAAgB,WACd7E,KAAK+D,MAAQ/D,KAAK6B,OAAO,EAC1B,EAEDiD,oBAAqB,WACnB,IAAMjF,EAAYG,KACZsB,EAAYtB,KAAKsB,OAEvB,SAAS8B,IACPvD,EAAUuD,aAAc,EACxBvD,EAAUkE,MAAMgB,KAAK,aAAa1B,MAAM,OACzC,CAED,SAAS2B,EAAe3C,EAAG4C,GACzBpF,EAAUuD,aAAc,EAExB,IAAMI,EAAQ3D,EAAU8B,eAAiB9B,EAAU0B,MAC7C2D,EAAmB,eAAX7C,EAAEW,KAAwBjD,EAAOC,MAAM2D,KAAK,gBAAgBuB,UAAOC,EAC3E1D,EAAiB,MAATyD,EAAe5D,EAAOG,MAAQ2D,KAAKC,IAAID,KAAKE,MAAML,EAAG1B,SAAShB,KAAOiB,GAAQ,GACrF9B,EAAiB,MAATwD,EAAe5D,EAAOI,IAAmB,aAAXW,EAAEW,KAAsBvB,EAAQH,EAAOiD,OAAS,EAAIa,KAAKE,MAAML,EAAGM,OAAOpE,YAAW,GAAQqC,GAAS/B,EAE7IA,IAAUH,EAAOG,OAASC,IAAQJ,EAAOI,KAC3CJ,EAAO4B,OAAOrD,EAAUe,IAAKa,EAAOC,GAAK,EAAiB,aAAXW,EAAEW,KAEpD,EAEiC,IAA9BlD,EAAWmB,gBACbjB,KAAKwF,eAAepE,SACpBpB,KAAKwF,eAAiBzF,IACtBI,EAAUU,SAAS,gBAEnBb,KAAKwF,eAAejE,MAAMP,GAG5BhB,KAAKoE,UAAYrE,EAAO,gGAAgGgB,SAASZ,GAAW0D,IAAI,CAC9ItB,KAAQvB,EACRO,MAAQvB,KAAKuB,MAAQP,IACpByE,WAAWxB,GAAG,CACfC,UAAY,SAAC7B,GAAQxC,EAAUkE,MAAM2B,WAAWtD,MAAMC,EAAK,EAC3D8B,SAAY,SAAC9B,GACX,IAAMsD,EAAK5F,EAAOsC,EAAEiC,eAEpB,GAAIzE,EAAUuE,UAAUC,GAAGsB,IAAO9F,EAAUuE,UAAUlD,KAAKyE,GAAIpB,QAAmC,QAAxBoB,EAAGZ,KAAK,aAAyBY,EAAGrE,SAAS+C,GAAGxE,EAAUkE,MAAMgB,KAAK,iBAAiB,IAC9J,OAAO,EAGTlF,EAAUkE,MAAMgB,KAAK,aAAa1B,MAAM,QACxCxD,EAAUkE,MAAMgB,KAAK,gBAAgB,EACtC,IAGEzD,EAAOM,UACV5B,KAAKoE,UAAUwB,UAAU,CACvBV,KAAc,IACdW,YAAc7F,KAAKM,QACnBmB,MAAc2B,EACd0C,KAAcd,IACbe,UAAU,CACXC,QAAc,OACdH,YAAc,SACdpE,MAAc2B,EACd0C,KAAcd,EACdiB,OAAc,SAAU5D,EAAG4C,GACzBA,EAAGiB,QAAQrC,IAAI,OAAQuB,KAAKC,IAAI,EAAGJ,EAAG1B,SAAShB,OAE3C0C,EAAG1B,SAAShB,KAAO,EACrB0C,EAAGiB,QAAQ3E,MAAM6D,KAAKe,IAAIlB,EAAGmB,KAAK7E,MAAO0D,EAAGiB,QAAQ5E,SAASC,QAAU0D,EAAG1B,SAAShB,OAEnF0C,EAAGiB,QAAQ3E,MAAM0D,EAAGmB,KAAK7E,MAAQ0D,EAAG1B,SAAShB,KAEhD,GAGN,EAEDoC,eAAgB,WACd,IAAMpC,EAASvC,KAAKsB,OAAOG,MAAQzB,KAAKwD,MAClCjC,EAASvB,KAAKsB,OAAOI,IAAQ1B,KAAKwD,MAASjB,EAEjDvC,KAAKoE,UAAUP,IAAI,CAAEtB,KAAMA,EAAMhB,MAAOA,GACzC,KAGqC,IAApCvB,KAAKqG,cAAcC,cACrBvG,EAAO,8BAA8BgC,QAAO,SAACwE,EAAGxD,GAAJ,OAAUA,EAAI5C,EAAU4B,QAAxB,IAAkCyE,UAAUxG,KAAKwF,eAEhG,CAED,SAASiB,IACP,IAAMtG,EAAYH,KAAKH,UAAUM,UAAUmB,SAE3CtB,KAAKH,UAAU6G,UACfvG,EAAUiB,SAEVnB,EAAgB0G,KAAK3G,KACtB,CAEDA,KAAKiE,GAAG,CACNS,UAAWzE,EAEX2G,cAAe,WACT5G,KAAKH,WACPG,KAAKH,UAAU8E,gBAElB,EAEDkC,cAAeJ,EAEfK,YAAa,SAAUlG,GACjBZ,KAAKH,WAAaG,KAAKH,UAAUe,MAAQA,GAC3C6F,EAAkBE,KAAK3G,KAE1B,GAEJ,E","sources":["webpack://genoverse/./src/js/plugins/karyotype.js"],"sourcesContent":["import '../../css/karyotype.css';\nimport Chromosome from '../Track/library/Chromosome';\n\nconst plugin = function (pluginConf) {\n const jQuery = this.jQuery;\n\n function createKaryotype() {\n const chromosome = jQuery('<div class=\"gv-chromosome\">');\n const container = jQuery('<div class=\"gv-karyotype-container\">').html(chromosome).insertBefore(this.wrapper);\n const assemblyName = this.assembly || this.genomeName;\n const name = `${pluginConf.showAssembly && assemblyName ? `${assemblyName}: ` : ''}Chr ${this.chr}`;\n\n if (pluginConf.showAssembly && assemblyName) {\n container.addClass('gv-show-assembly');\n }\n\n const measureWidth = jQuery(`<div class=\"gv-chromosome\"><ul class=\"gv-label-container\"><li><span class=\"gv-name\">${name}</span></li></ul></div>`).appendTo(container);\n const labelWidth = pluginConf.karyotypeLabel === false ? 0 : measureWidth.find('.gv-name').outerWidth(true) + 10;\n\n measureWidth.remove();\n\n this.karyotype = new Genoverse({\n parent : this,\n container : chromosome,\n width : chromosome.width(),\n genome : this.genome,\n chr : this.chr,\n start : 1,\n end : this.chromosomeSize,\n isStatic : true,\n tracks : [\n Chromosome.extend({\n name : name,\n height : 20,\n featureHeight : 20,\n border : false,\n legend : false,\n unsortable : true,\n\n click: function (e) {\n const offset = this.container.parent().offset().left;\n const x = e.pageX - offset;\n const f = this.featurePositions.search({ x: x, y: 1, w: 1, h: 1 })[0];\n\n if (f) {\n if (e.type === 'mouseup') {\n if (!this.browser.parent.isStatic) {\n this.browser.parent.moveTo(f.chr, f.start, f.end, true);\n }\n } else if (this.hoverFeature !== f && !this.browser.hideTooltip) {\n this.container.tipsy('hide');\n\n if (f.label) {\n const left = offset + f.position[this.scale].start + f.position[this.scale].width / 2;\n\n this.container.attr('title', f.label[0]).tipsy({ trigger: 'manual', container: 'body' }).tipsy('show').data('tipsy').$tip.css('left', function () { return left - jQuery(this).width() / 2; });\n }\n\n this.hoverFeature = f;\n }\n }\n },\n\n addUserEventHandlers: function () {\n const track = this;\n\n this.base();\n\n this.container.on({\n mousemove : (e) => { track.click(e); },\n mouseout : (e) => {\n if (track.browser.viewPoint.is(e.relatedTarget) || track.browser.viewPoint.find(e.relatedTarget).length) {\n return true;\n }\n\n track.container.tipsy('hide');\n track.hoverFeature = false;\n },\n }, '.gv-image-container');\n\n // Don't allow zooming in and out on the karyotype image\n this.container.on('mousewheel', '.gv-image-container, .gv-selector', (e) => {\n e.stopPropagation();\n });\n },\n\n afterSetName: function () {\n this.label.css('lineHeight', `${this.label.height()}px`);\n },\n }),\n ],\n\n addUserEventHandlers: () => {},\n\n afterInit: function () {\n this.updatePosition();\n this.viewPoint.fadeIn();\n },\n\n afterAddTracks: function () {\n this.track = this.tracks[0];\n },\n\n afterAddDomElements: function () {\n const karyotype = this;\n const parent = this.parent;\n\n function hideTooltip() {\n karyotype.hideTooltip = true;\n karyotype.track.prop('container').tipsy('hide');\n }\n\n function updateLocation(e, ui) {\n karyotype.hideTooltip = false;\n\n const scale = karyotype.chromosomeSize / karyotype.width;\n const axis = e.type === 'resizestop' ? jQuery(this).data('ui-resizable').axis : undefined;\n const start = axis === 'e' ? parent.start : Math.max(Math.floor(ui.position.left * scale), 1);\n const end = axis === 'w' ? parent.end : e.type === 'dragstop' ? start + parent.length - 1 : Math.floor(ui.helper.outerWidth(true) * scale) + start;\n\n if (start !== parent.start || end !== parent.end) {\n parent.moveTo(karyotype.chr, start, end, true, e.type === 'dragstop');\n }\n }\n\n if (pluginConf.karyotypeLabel === false) {\n this.labelContainer.remove();\n this.labelContainer = jQuery();\n container.addClass('gv-no-label');\n } else {\n this.labelContainer.width(labelWidth);\n }\n\n this.viewPoint = jQuery('<div class=\"gv-karyotype-viewpoint-wrapper\"><div class=\"gv-karyotype-viewpoint\"></div></div>').appendTo(container).css({\n left : labelWidth,\n width : this.width - labelWidth,\n }).children().on({\n mousemove : (e) => { karyotype.track.controller.click(e); },\n mouseout : (e) => {\n const el = jQuery(e.relatedTarget);\n\n if (karyotype.viewPoint.is(el) || karyotype.viewPoint.find(el).length || (el.prop('nodeName') === 'IMG' && el.parent().is(karyotype.track.prop('imgContainers')[0]))) {\n return true;\n }\n\n karyotype.track.prop('container').tipsy('hide');\n karyotype.track.prop('hoverFeature', false);\n },\n });\n\n if (!parent.isStatic) {\n this.viewPoint.draggable({\n axis : 'x',\n containment : this.wrapper,\n start : hideTooltip,\n stop : updateLocation,\n }).resizable({\n handles : 'e, w',\n containment : 'parent',\n start : hideTooltip,\n stop : updateLocation,\n resize : function (e, ui) {\n ui.element.css('left', Math.max(0, ui.position.left));\n\n if (ui.position.left > 0) {\n ui.element.width(Math.min(ui.size.width, ui.element.parent().width() - ui.position.left));\n } else {\n ui.element.width(ui.size.width + ui.position.left);\n }\n },\n });\n }\n },\n\n updatePosition: function () {\n const left = this.parent.start * this.scale;\n const width = (this.parent.end * this.scale) - left;\n\n this.viewPoint.css({ left: left, width: width });\n },\n });\n\n if (this.loadedPlugins.controlPanel !== true) {\n jQuery('<li class=\"gv-unsortable\">').height((i, h) => h + container.height()).prependTo(this.labelContainer);\n }\n }\n\n function recreateKaryotype() {\n const container = this.karyotype.container.parent();\n\n this.karyotype.destroy();\n container.remove();\n\n createKaryotype.call(this);\n }\n\n this.on({\n afterInit: createKaryotype,\n\n afterSetRange: function () {\n if (this.karyotype) {\n this.karyotype.updatePosition();\n }\n },\n\n afterSetWidth: recreateKaryotype,\n\n afterMoveTo: function (chr) {\n if (this.karyotype && this.karyotype.chr !== chr) {\n recreateKaryotype.call(this);\n }\n },\n });\n};\n\nexport default { karyotype: plugin };\n"],"names":["karyotype","pluginConf","jQuery","this","createKaryotype","chromosome","container","html","insertBefore","wrapper","assemblyName","assembly","genomeName","name","showAssembly","chr","addClass","measureWidth","appendTo","labelWidth","karyotypeLabel","find","outerWidth","remove","Genoverse","parent","width","genome","start","end","chromosomeSize","isStatic","tracks","Chromosome","height","featureHeight","border","legend","unsortable","click","e","offset","left","x","pageX","f","featurePositions","search","y","w","h","type","browser","moveTo","hoverFeature","hideTooltip","tipsy","label","position","scale","attr","trigger","data","$tip","css","addUserEventHandlers","track","base","on","mousemove","mouseout","viewPoint","is","relatedTarget","length","stopPropagation","afterSetName","afterInit","updatePosition","fadeIn","afterAddTracks","afterAddDomElements","prop","updateLocation","ui","axis","undefined","Math","max","floor","helper","labelContainer","children","controller","el","draggable","containment","stop","resizable","handles","resize","element","min","size","loadedPlugins","controlPanel","i","prependTo","recreateKaryotype","destroy","call","afterSetRange","afterSetWidth","afterMoveTo"],"sourceRoot":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"469.genoverse.js","mappings":"kHAgFA,WAAiBA,SA9EF,WACb,IAAMC,EAASC,KAAKD,OAEpBC,KAAKC,GAAG,aAAa,WACnB,IAAMC,EAAUF,KACVG,EAAUH,KAAKG,QAErBJ,EAAOK,QAAQH,GAAG,aAAa,SAACI,GAC9B,IAAMC,EAAeD,EAAEE,cAAcD,aAErC,GAAIA,
|
|
1
|
+
{"version":3,"file":"469.genoverse.js","mappings":"kHAgFA,WAAiBA,SA9EF,WACb,IAAMC,EAASC,KAAKD,OAEpBC,KAAKC,GAAG,aAAa,WACnB,IAAMC,EAAUF,KACVG,EAAUH,KAAKG,QAErBJ,EAAOK,QAAQH,GAAG,aAAa,SAACI,GAC9B,IAAMC,EAAeD,EAAEE,cAAcD,aAErC,GAAIA,SAAAA,EAAcE,QACU,UAA1BF,EAAaE,MAAM,IAA4C,UAA1BF,EAAaE,MAAM,IAA4C,UAA1BF,EAAaE,MAAM,MACzFT,EAAO,+BAA+BU,OAAQ,CAClD,IAAMC,EAAmBX,EAAO,8BAA8BY,SAASR,GACjES,EAAmBb,EAAO,4CAA4Cc,UAAU,QAEhFC,EAAY,WAChBJ,EAAYK,SACZH,EAAiBG,QAClB,EAEDH,EAAiBX,GAAG,aAAa,SAACe,GAASA,EAAGC,iBAAkBD,EAAGE,iBAAoB,IACvFN,EAAiBX,GAAG,YAAa,SAACe,GAASA,EAAGC,iBAAkBD,EAAGE,iBAAoB,IACvFN,EAAiBX,GAAG,YAAaa,GACjCF,EAAiBX,GAAG,QAAQ,SAACe,GAC3BF,IACAE,EAAGC,iBACHD,EAAGE,kBAMH,IAHA,IAAMC,EAAiBC,OAAOC,OAAOL,EAAGT,cAAcD,aAAaa,OAAOG,MAAK,SAACC,EAAGC,GAAJ,OAAUD,EAAEE,KAAKC,cAAcF,EAAEC,KAAjC,IACzEE,EAAiB,GAEdC,EAAI,EAAGA,EAAIT,EAAMV,OAAQmB,IAAK,CACrC,IAAMC,EAAQV,EAAMS,GACdE,EAAQD,EAAKJ,KAAKM,MAAM,KAAKC,UAC7BC,EAAqB,OAAbH,EAAM,GACdI,EAAQJ,EAAMG,EAAK,EAAI,GAEzBE,OAAS,EAEThB,EAAMS,EAAI,IAAM,IAAIQ,OAAJ,WAAeP,EAAKJ,KAApB,aAAoCY,KAAKlB,EAAMS,EAAI,GAAGH,QACxEU,EAAYhB,IAAQS,IAGtBD,EAAeW,KAAK,CAClBT,KAAYA,EACZM,UAAYA,EACZF,GAAYA,EACZM,UAAYL,EAAIM,eAEnB,CAEDb,EAAec,SACb,SAACC,GACC,QAAO,YAAyBA,EAASH,YAAaI,MACpD,SAACC,GACC,IAAMC,EAAQD,EAAQ,QAASE,OAAO,CACpCrB,KAAYiB,EAASb,KAAKJ,KAC1BsB,KAAI,sBAAuBL,EAASb,KAAKJ,KAArC,oBAAqDiB,EAASb,KAAKmB,KAAnE,UACJC,SAAY,EACZC,SAAYR,EAASb,KACrBM,UAAYO,EAASP,UACrBF,GAAYS,EAAST,KAGvB/B,EAAQiD,SAASN,EAAO3C,EAAQkD,OAAO3C,OAAS,EACjD,IACD,WAAQ,GAEX,GAEJ,GACF,CACF,GACF,GACF,E,uBC9ED,IAAI4C,EAAM,CACT,QAAS,KACT,WAAY,KACZ,QAAS,KACT,WAAY,KACZ,WAAY,IACZ,cAAe,IACf,WAAY,KACZ,cAAe,KACf,QAAS,KACT,WAAY,KACZ,QAAS,KACT,WAAY,KACZ,QAAS,KACT,WAAY,MAGb,SAASC,EAAoBC,GAC5B,OAAOC,QAAQC,UAAUd,MAAK,WAC7B,IAAIe,EAAoBC,EAAEN,EAAKE,GAAM,CACpC,IAAIlD,EAAI,IAAIuD,MAAM,uBAAyBL,EAAM,KAEjD,MADAlD,EAAEwD,KAAO,mBACHxD,CACP,CAGA,OAAOqD,EADEL,EAAIE,GAEd,GACD,CACAD,EAAoBQ,KAAO,WAAa,OAAO1C,OAAO0C,KAAKT,EAAM,EACjEC,EAAoBS,GAAK,KACzBC,EAAOC,QAAUX,C","sources":["webpack://genoverse/./src/js/plugins/fileDrop.js","webpack://genoverse/./src/js/Track/library/File/ lazy ^\\.\\/.*$ namespace object"],"sourcesContent":["import '../../css/fileDrop.css';\n\nconst plugin = function () {\n const jQuery = this.jQuery;\n\n this.on('afterInit', function () {\n const browser = this;\n const wrapper = this.wrapper;\n\n jQuery(window).on('dragenter', (e) => {\n const dataTransfer = e.originalEvent.dataTransfer;\n\n if (dataTransfer?.types && (\n dataTransfer.types[0] === 'Files' || dataTransfer.types[1] === 'Files' || dataTransfer.types[2] === 'Files'\n ) && !jQuery('.gv-file-drop-total-overlay').length) {\n const fileDropDiv = jQuery('<div class=\"gv-file-drop\">').appendTo(wrapper);\n const totalDropOverlay = jQuery('<div class=\"gv-file-drop-total-overlay\">').prependTo('body');\n\n const dragleave = () => {\n fileDropDiv.remove();\n totalDropOverlay.remove();\n };\n\n totalDropOverlay.on('dragenter', (ev) => { ev.preventDefault(); ev.stopPropagation(); });\n totalDropOverlay.on('dragover', (ev) => { ev.preventDefault(); ev.stopPropagation(); });\n totalDropOverlay.on('dragleave', dragleave);\n totalDropOverlay.on('drop', (ev) => {\n dragleave();\n ev.preventDefault();\n ev.stopPropagation();\n\n // Sort in order to ensure that .bam files are before their .bam.bai files\n const files = Object.values(ev.originalEvent.dataTransfer.files).sort((a, b) => a.name.localeCompare(b.name));\n const trackImporters = [];\n\n for (let i = 0; i < files.length; i++) {\n const file = files[i];\n const parts = file.name.split('.').reverse();\n const gz = parts[0] === 'gz';\n const ext = parts[gz ? 1 : 0];\n\n let indexFile;\n\n if (files[i + 1] && new RegExp(`^${file.name}\\\\.\\\\w+$`).test(files[i + 1].name)) {\n indexFile = files[++i];\n }\n\n trackImporters.push({\n file : file,\n indexFile : indexFile,\n gz : gz,\n trackType : ext.toUpperCase(),\n });\n }\n\n trackImporters.forEach(\n (importer) => {\n import(`../Track/library/File/${importer.trackType}`).then(\n (imported) => {\n const track = imported.default.extend({\n name : importer.file.name,\n info : `Local file \"${importer.file.name}\", size: ${importer.file.size} bytes`,\n isLocal : true,\n dataFile : importer.file,\n indexFile : importer.indexFile,\n gz : importer.gz,\n });\n\n browser.addTrack(track, browser.tracks.length - 1);\n },\n () => {}\n );\n }\n );\n });\n }\n });\n });\n};\n\nexport default { fileDrop: plugin };\n","var map = {\n\t\"./BAM\": 4448,\n\t\"./BAM.js\": 4448,\n\t\"./BED\": 4149,\n\t\"./BED.js\": 4149,\n\t\"./BIGBED\": 617,\n\t\"./BIGBED.js\": 617,\n\t\"./BIGWIG\": 9658,\n\t\"./BIGWIG.js\": 9658,\n\t\"./GFF\": 8428,\n\t\"./GFF.js\": 8428,\n\t\"./VCF\": 1055,\n\t\"./VCF.js\": 1055,\n\t\"./WIG\": 8915,\n\t\"./WIG.js\": 8915\n};\n\nfunction webpackAsyncContext(req) {\n\treturn Promise.resolve().then(function() {\n\t\tif(!__webpack_require__.o(map, req)) {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t}\n\n\t\tvar id = map[req];\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = function() { return Object.keys(map); };\nwebpackAsyncContext.id = 5405;\nmodule.exports = webpackAsyncContext;"],"names":["fileDrop","jQuery","this","on","browser","wrapper","window","e","dataTransfer","originalEvent","types","length","fileDropDiv","appendTo","totalDropOverlay","prependTo","dragleave","remove","ev","preventDefault","stopPropagation","files","Object","values","sort","a","b","name","localeCompare","trackImporters","i","file","parts","split","reverse","gz","ext","indexFile","RegExp","test","push","trackType","toUpperCase","forEach","importer","then","imported","track","extend","info","size","isLocal","dataFile","addTrack","tracks","map","webpackAsyncContext","req","Promise","resolve","__webpack_require__","o","Error","code","keys","id","module","exports"],"sourceRoot":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"530.genoverse.js","mappings":"kHAmDA,WAAiBA,QAjDF,WACb,IAAMC,EAASC,KAAKD,OAEpBC,KAAKC,GAAG,cAAe,UAAU,WAC/B,IAA+B,IAA3BD,KAAKE,KAAK,aAAd,CAIA,IAAMC,EAAaH,KACbI,EAAaJ,KAAKI,WAClBC,EAAaL,KAAKE,KAAK,UAEzBJ,EAAUE,KAAKE,KAAK,WAEnBJ,IACHA,EAAUE,KAAKE,KAAK,UAAWH,EAAO,yEAAyEO,SAASH,EAAMD,KAAK,cAAcK,UAAU,CACzJC,KAAQ,IACRC,MAAQ,WAAQV,EAAO,QAAQW,SAAS,
|
|
1
|
+
{"version":3,"file":"530.genoverse.js","mappings":"kHAmDA,WAAiBA,QAjDF,WACb,IAAMC,EAASC,KAAKD,OAEpBC,KAAKC,GAAG,cAAe,UAAU,WAC/B,IAA+B,IAA3BD,KAAKE,KAAK,aAAd,CAIA,IAAMC,EAAaH,KACbI,EAAaJ,KAAKI,WAClBC,EAAaL,KAAKE,KAAK,UAEzBJ,EAAUE,KAAKE,KAAK,WAEnBJ,IACHA,EAAUE,KAAKE,KAAK,UAAWH,EAAO,yEAAyEO,SAASH,EAAMD,KAAK,cAAcK,UAAU,CACzJC,KAAQ,IACRC,MAAQ,WAAQV,EAAO,QAAQW,SAAS,cAAiB,EACzDC,KAAQ,SAAUC,EAAGC,GACnBd,EAAO,QAAQe,YAAY,eAC3BV,EAAWW,OAAOZ,EAAMD,KAAK,UAAYW,EAAGG,SAASC,IAAMJ,EAAGK,iBAAiBD,KAAK,GACpFlB,EAAOC,MAAMmB,IAAI,CAAEF,IAAK,OAAQG,OAAQ,GACzC,IACAnB,GAAG,SAAS,WACb,IAAMoB,EAAIlB,EAAMD,KAAK,qBAEjBmB,GACFjB,EAAWW,OAAOM,GAAG,EAExB,MAGHvB,EAAQqB,IAAI,CAAEG,MAAOtB,KAAKsB,MAAOC,KAAM,IAAKvB,KAAKE,KAAK,cAAgB,OAAS,UAE1EF,KAAKE,KAAK,eAAiBG,EAASL,KAAKE,KAAK,YAAcF,KAAKE,KAAK,mBACzEE,EAAWW,OAAOV,EAASP,EAAQO,UACnCL,KAAKE,KAAK,gBAAiBF,KAAKE,KAAK,WA9BtC,CAgCF,IAEDF,KAAKC,GAAG,sBAAuB,UAAU,WACvC,IAEa,EAFPH,EAAUE,KAAKE,KAAK,WAEtBJ,GACFA,EAAQ,UAAAE,KAAKwB,gBAAL,SAAeC,GAAG,YAAc,WAAa,eAAe,sBAEvE,GACF,E","sources":["webpack://genoverse/./src/js/plugins/resizer.js"],"sourcesContent":["import '../../css/resizer.css';\n\nconst plugin = function () {\n const jQuery = this.jQuery;\n\n this.on('afterSetMVC', 'tracks', function () {\n if (this.prop('resizable') !== true) {\n return;\n }\n\n const track = this;\n const controller = this.controller;\n const height = this.prop('height');\n\n let resizer = this.prop('resizer');\n\n if (!resizer) {\n resizer = this.prop('resizer', jQuery('<div class=\"gv-resizer gv-static\"><div class=\"gv-handle\"></div></div>').appendTo(track.prop('container')).draggable({\n axis : 'y',\n start : () => { jQuery('body').addClass('gv-dragging'); },\n stop : function (e, ui) {\n jQuery('body').removeClass('gv-dragging');\n controller.resize(track.prop('height') + ui.position.top - ui.originalPosition.top, true);\n jQuery(this).css({ top: 'auto', bottom: 0 }); // returns the resizer to the bottom of the container - needed when the track is resized to 0\n },\n }).on('click', () => {\n const h = track.prop('fullVisibleHeight');\n\n if (h) {\n controller.resize(h, true);\n }\n }));\n }\n\n resizer.css({ width: this.width, left: 0 })[this.prop('autoHeight') ? 'hide' : 'show']();\n\n if (!this.prop('autoHeight') && height - this.prop('margin') === this.prop('featureHeight')) {\n controller.resize(height + resizer.height());\n this.prop('initialHeight', this.prop('height'));\n }\n });\n\n this.on('afterToggleExpander', 'tracks', function () {\n const resizer = this.prop('resizer');\n\n if (resizer) {\n resizer[this.expander?.is(':visible') ? 'addClass' : 'removeClass']('gv-resizer-expander');\n }\n });\n};\n\nexport default { resizer: plugin };\n"],"names":["resizer","jQuery","this","on","prop","track","controller","height","appendTo","draggable","axis","start","addClass","stop","e","ui","removeClass","resize","position","top","originalPosition","css","bottom","h","width","left","expander","is"],"sourceRoot":""}
|
package/dist/804.genoverse.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(self.webpackChunkgenoverse=self.webpackChunkgenoverse||[]).push([[804],{1804:function(t,e,a){a.r(e);var n=a(4394);e.default={controlPanel:function(t){var e=this.jQuery;this.controls=[{name:"Scroll left and right by pressing and holding these buttons",buttons:[{name:"Scroll left",icon:'<i class="fas fa-chevron-left"></i>',class:"gv-scroll-left"},{name:"Scroll right",icon:'<i class="fas fa-chevron-right"></i>',class:"gv-scroll-right"}],init:function(t){var a=e(this);a.find(".gv-scroll-left, .gv-scroll-right").on({mousedown:function(){t.startDragScroll()},mouseup:function(){t.stopDragScroll()}}),a.find(".gv-scroll-left").mousehold(50,(function(){t.move(t.scrollDelta)})),a.find(".gv-scroll-right").mousehold(50,(function(){t.move(-t.scrollDelta)}))}},{name:"Zoom-in and zoom-out",buttons:[{name:"Zoom in",icon:'<i class="fas fa-search-plus"></i>',class:"gv-zoom-in",action:function(t){t.zoomIn()}},{name:"Zoom out",icon:'<i class="fas fa-search-minus"></i>',class:"gv-zoom-out",action:function(t){t.zoomOut()}}]},{name:"Toggle your mouse drag action between scroll left/right and select region",buttons:[{name:"Mouse drag action to scroll the browser left or right",icon:'<i class="fas fa-arrows-alt-h"></i>',class:"gv-drag-scroll",action:function(t){t.setDragAction("scroll"),e(this).addClass("gv-active").siblings().removeClass("gv-active")}},{name:"Mouse drag action to select a region",icon:"<i></i>",class:"gv-drag-select",action:function(t){t.setDragAction("select"),e(this).addClass("gv-active").siblings().removeClass("gv-active")}}],init:function(t){e(this).find(".gv-drag-".concat(t.dragAction)).addClass("gv-active").siblings().removeClass("gv-active")}},{name:"Toggle your mouse wheel action between zoom in/out and default page scroll",buttons:[{name:"Mouse wheel action to scroll the page up and down",icon:'<i class="fas fa-arrows-alt-v"></i>',class:"gv-wheel-off",action:function(t){t.setWheelAction("off"),e(this).addClass("gv-active").siblings().removeClass("gv-active")}},{name:"Mouse wheel to zoom in and out",icon:"±",class:"gv-wheel-zoom",action:function(t){t.setWheelAction("zoom"),e(this).addClass("gv-active").siblings().removeClass("gv-active")}}],init:function(t){e(this).find(".gv-wheel-".concat(t.wheelAction)).addClass("gv-active").siblings().removeClass("gv-active")}}],this.saveable&&this.controls.push({icon:'<i class="fas fa-undo"></i>',name:"Reset tracks and configuration",action:function(t){t.resetConfig()}}),this.on({beforeInit:function(){var t=this,a=this;this.tracksLibrary=(this.tracksLibrary||this.tracks).map((function(e){return t.normaliseTrackDefinition(e)})).filter((function(t){return t.prototype.name}));var n=e('\n <table cellspacing=0 cellpadding=0 class="gv">\n <tr>\n <td class="gv-panel gv-panel-left"></td>\n <td class="gv-canvas-container"></td>\n <td class="gv-panel gv-panel-right"></td>\n </tr>\n </table>\n ').appendTo(this.container).find(".gv-panel-right");this.controlPanel=n,this.superContainer=this.container,this.container=e(".gv-canvas-container",this.container),a.controls.forEach((function(t){var n=e('<div class="gv-button-set">').attr("title",t.name).appendTo(a.superContainer.find(".gv-panel-right"));(t.buttons||[t]).forEach((function(i){var s=e("<button>".concat(i.icon,"</button>")).addClass(i.class).attr("title",i.name).appendTo(n);i.action&&s.on("click",(function(){i.action.call(s[0],a)})),i.init&&i!==t&&i.init.call(s[0],a)})),t.init&&t.init.call(n,a)})),this.superContainer.width(this.width),e(document).on("keydown",(function(t){27===t.keyCode&&(n.find("button.gv-drag-select").hasClass("gv-active")&&n.find("button.gv-drag-scroll").trigger("click"),e(".gv-menu .gv-close").trigger("click"))}))},afterInit:function(){var a=this,n=e('<button class="gv-tracks-library-button" title="Tracks menu"><i class="fas fa-bars"></i> Tracks</button>').on("click",(function(){var n=this,i=function t(e,a){var n,i;return null!==(n=e.constructor)&&void 0!==n&&null!==(i=n.ancestor)&&void 0!==i&&i.prototype?t(e.constructor.ancestor.prototype,a.concat(e.constructor.ancestor.prototype.tags||[])):a};if(e(this).hasClass("gv-active"))e(".gv-menu.gv-tracks-menu .gv-close").trigger("click"),e(this).removeClass("gv-active");else{var s=e(this).data("menu");if(s)s.show();else{var o;s=a.makeMenu({"Currently enabled tracks:":"Available tracks:",'<div class="gv-current-tracks"></div>':'<input placeholder="Search"><div class="gv-available-tracks"></div>'}).addClass("gv-tracks-menu"),e("input[placeholder=Search]",s).on("keyup",(function(){var t=this.value.toLowerCase();e(".gv-tracks-library-item",s).each((function(){var a=e(this).data("track"),n=!1;a.name&&a.name.toLowerCase().indexOf(t)>=0?n=!0:i(a,[]).concat(a.tags||[]).some((function(e){return e.toLowerCase().indexOf(t)>=0}))&&(n=!0);e(this)[n?"removeClass":"addClass"]("gv-hide")})),e(".gv-tracks-library-category",s).each((function(){var t=e(this).children(".gv-tracks-library-item:not(.gv-hide)");e(this)[t.length?"removeClass":"addClass"]("gv-hide")}))})),e(".gv-close",s).on("click",(function(){e(n).removeClass("gv-active")}));var r=e(".gv-available-tracks",s),c=e(".gv-current-tracks",s).before('<div class="gv-current-tracks-instructions">Drag and drop to reorder</div>').data({reload:function(){e(this).empty().data("listTracks")()},listTracks:function(){a.tracks.filter((function(t){return t.name&&!(!1===t.removable&&t.unsortable)&&!t.parentTrack&&!t.lockToTrack})).forEach((function(t){var a=e('<div class="gv-tracks-menu-track">').append('<span class="gv-tracks-menu-track-name" title="'.concat(t.name,'">').concat(t.defaultName,"</span>")).appendTo(c).data("track",t).addClass(t.unsortable?"gv-unsortable":"");!1===t.removable?a.prepend('<i class="gv-remove-track gv-menu-button fas fa-circle">'):a.prepend(e('<i class="gv-remove-track gv-menu-button fas fa-times-circle">').on("click",(function(){t.remove()})));var n=a.find(".gv-tracks-menu-track-name").tipsy({gravity:"w",trigger:"manual"}).on("mouseenter",(function(){var t=e(this).tipsy("show").data("tipsy").$tip;t&&t.css("zIndex",1002)})).on("mouseleave",(function(){e(this).tipsy("hide")}));t.name===t.defaultName&&n.tipsy("disable")}))}}).sortable({items:"div:not(.gv-unsortable)",cursor:"move",axis:"y",handle:"span",update:a.updateTrackOrder.bind(a),start:function(){c.find(".gv-tracks-menu-track-name").each((function(){e(this).tipsy("hide").tipsy("disable")}))},stop:function(){c.find(".gv-tracks-menu-track-name").each((function(){e(this).tipsy("enable")}))}});if(c.data("listTracks")(),a.saveable&&e('<div class="gv-tracks-menu-reset gv-menu-button"><i class="fas fa-undo"></i> Reset tracks and configuration</div>').insertAfter(c).on("click",(function(t){t.preventDefault(),a.resetConfig()})),null!==(o=a.tracksLibrary)&&void 0!==o&&o.length){var l=a.tracksLibrary.filter((function(t){return t.prototype.name&&!1!==t.prototype.removable})).reduce((function(t,e){var a=e.prototype.category||"";return t[a]=t[a]||[],t[a].push([e.prototype.name.toLowerCase(),e]),t}),{}),d=((null==t?void 0:t.tracksLibraryCategoryOrder)||[]).reduce((function(t,e,a){return Object.assign(t,(s=a+1,(i=e)in(n={})?Object.defineProperty(n,i,{value:s,enumerable:!0,configurable:!0,writable:!0}):n[i]=s,n));var n,i,s}),{});Object.keys(l).sort((function(t,e){return Boolean(e)-Boolean(t)||d[t]-d[e]||t.localeCompare(e)})).forEach((function(t,n,i){var s=i.length>1?e('<div class="gv-tracks-library-category">').append(e('<div class="gv-tracks-library-category-header">').html(t||"Other")).appendTo(r):r;l[t].sort((function(t,e){return t[0].localeCompare(e[0])})).forEach((function(t){var n=t[1];e('<div class="gv-tracks-library-item">').append(e('<i class="gv-add-track gv-menu-button fas fa-plus-circle">').on("click",(function(){a.trackIds=a.trackIds||{},a.trackIds[n.prototype.id]=a.trackIds[n.prototype.id]||1,a.addTrack(n.extend({id:"".concat(n.prototype.id).concat(a.tracksById[n.prototype.id]?a.trackIds[n.prototype.id]++:"")}))}))).append("<span>".concat(n.prototype.name,"</span>")).appendTo(s).data("track",n.prototype)}))}))}s.css({left:"50%",marginLeft:s.width()/-2}),e(this).data("menu",s)}e(this).addClass("gv-active")}}));this.labelContainer.prepend(e('<li class="gv-unsortable">').append(e('<div class="gv-button-set" title="Tracks menu">').append(n)))},afterAddDomElements:function(){this.wrapper.after('<div class="gv-powered-by">Powered by <a target="_blank" href="https://wtsi-web.github.io/Genoverse/">Genoverse</a></div>'),this.superContainer.find(".gv-panel-left").append(this.labelContainer)},"afterAddTracks afterRemoveTracks":function(){var t=this.superContainer.find(".gv-tracks-menu .gv-current-tracks");t.length&&t.data("reload").call(t)}}),this.on({afterSetName:function(t){var a=this.track;if(null!=a&&a.browser){var n=a.browser.superContainer.find(".gv-tracks-library-button").data("menu");n&&n.find(".gv-tracks-menu-track").filter((function(){return e(this).data("track")===a})).children(".gv-tracks-menu-track-name").attr("title",t).each((function(){t===a.defaultName?e(this).tipsy("hide").tipsy("disable"):e(this).tipsy("enable")}))}}},"tracks")},requires:n.default}},4394:function(t,e,a){a.r(e);var n=a(5337);e.default={karyotype:function(t){var e=this.jQuery;function a(){var a=e('<div class="gv-chromosome">'),i=e('<div class="gv-karyotype-container">').html(a).insertBefore(this.wrapper),s=this.assembly||this.genomeName,o="".concat(t.showAssembly&&s?"".concat(s,": "):"","Chr ").concat(this.chr);t.showAssembly&&s&&i.addClass("gv-show-assembly");var r=e('<div class="gv-chromosome"><ul class="gv-label-container"><li><span class="gv-name">'.concat(o,"</span></li></ul></div>")).appendTo(i),c=!1===t.karyotypeLabel?0:r.find(".gv-name").outerWidth(!0)+10;r.remove(),this.karyotype=new Genoverse({parent:this,container:a,width:a.width(),genome:this.genome,chr:this.chr,start:1,end:this.chromosomeSize,isStatic:!0,tracks:[n.default.extend({name:o,height:20,featureHeight:20,border:!1,legend:!1,unsortable:!0,click:function(t){var a=this.container.parent().offset().left,n=t.pageX-a,i=this.featurePositions.search({x:n,y:1,w:1,h:1})[0];if(i)if("mouseup"===t.type)this.browser.parent.isStatic||this.browser.parent.moveTo(i.chr,i.start,i.end,!0);else if(this.hoverFeature!==i&&!this.browser.hideTooltip){if(this.container.tipsy("hide"),i.label){var s=a+i.position[this.scale].start+i.position[this.scale].width/2;this.container.attr("title",i.label[0]).tipsy({trigger:"manual",container:"body"}).tipsy("show").data("tipsy").$tip.css("left",(function(){return s-e(this).width()/2}))}this.hoverFeature=i}},addUserEventHandlers:function(){var t=this;this.base(),this.container.on({mousemove:function(e){t.click(e)},mouseout:function(e){if(t.browser.viewPoint.is(e.relatedTarget)||t.browser.viewPoint.find(e.relatedTarget).length)return!0;t.container.tipsy("hide"),t.hoverFeature=!1}},".gv-image-container"),this.container.on("mousewheel",".gv-image-container, .gv-selector",(function(t){t.stopPropagation()}))},afterSetName:function(){this.label.css("lineHeight","".concat(this.label.height(),"px"))}})],addUserEventHandlers:function(){},afterInit:function(){this.updatePosition(),this.viewPoint.fadeIn()},afterAddTracks:function(){this.track=this.tracks[0]},afterAddDomElements:function(){var a=this,n=this.parent;function s(){a.hideTooltip=!0,a.track.prop("container").tipsy("hide")}function o(t,i){a.hideTooltip=!1;var s=a.chromosomeSize/a.width,o="resizestop"===t.type?e(this).data("ui-resizable").axis:void 0,r="e"===o?n.start:Math.max(Math.floor(i.position.left*s),1),c="w"===o?n.end:"dragstop"===t.type?r+n.length-1:Math.floor(i.helper.outerWidth(!0)*s)+r;r===n.start&&c===n.end||n.moveTo(a.chr,r,c,!0,"dragstop"===t.type)}!1===t.karyotypeLabel?(this.labelContainer.remove(),this.labelContainer=e(),i.addClass("gv-no-label")):this.labelContainer.width(c),this.viewPoint=e('<div class="gv-karyotype-viewpoint-wrapper"><div class="gv-karyotype-viewpoint"></div></div>').appendTo(i).css({left:c,width:this.width-c}).children().on({mousemove:function(t){a.track.controller.click(t)},mouseout:function(t){var n=e(t.relatedTarget);if(a.viewPoint.is(n)||a.viewPoint.find(n).length||"IMG"===n.prop("nodeName")&&n.parent().is(a.track.prop("imgContainers")[0]))return!0;a.track.prop("container").tipsy("hide"),a.track.prop("hoverFeature",!1)}}),n.isStatic||this.viewPoint.draggable({axis:"x",containment:this.wrapper,start:s,stop:o}).resizable({handles:"e, w",containment:"parent",start:s,stop:o,resize:function(t,e){e.element.css("left",Math.max(0,e.position.left)),e.position.left>0?e.element.width(Math.min(e.size.width,e.element.parent().width()-e.position.left)):e.element.width(e.size.width+e.position.left)}})},updatePosition:function(){var t=this.parent.start*this.scale,e=this.parent.end*this.scale-t;this.viewPoint.css({left:t,width:e})}}),!0!==this.loadedPlugins.controlPanel&&e('<li class="gv-unsortable">').height((function(t,e){return e+i.height()})).prependTo(this.labelContainer)}function i(){var t=this.karyotype.container.parent();this.karyotype.destroy(),t.remove(),a.call(this)}this.on({afterInit:a,afterSetRange:function(){this.karyotype&&this.karyotype.updatePosition()},afterSetWidth:i,afterMoveTo:function(t){this.karyotype&&this.karyotype.chr!==t&&i.call(this)}})}}}}]);
|
|
1
|
+
"use strict";(self.webpackChunkgenoverse=self.webpackChunkgenoverse||[]).push([[804],{1804:function(t,e,a){a.r(e);var n=a(4394);e.default={controlPanel:function(t){var e=this.jQuery;this.controls=[{name:"Scroll left and right by pressing and holding these buttons",buttons:[{name:"Scroll left",icon:'<i class="fas fa-chevron-left"></i>',class:"gv-scroll-left"},{name:"Scroll right",icon:'<i class="fas fa-chevron-right"></i>',class:"gv-scroll-right"}],init:function(t){var a=e(this);a.find(".gv-scroll-left, .gv-scroll-right").on({mousedown:function(){t.startDragScroll()},mouseup:function(){t.stopDragScroll()}}),a.find(".gv-scroll-left").mousehold(50,(function(){t.move(t.scrollDelta)})),a.find(".gv-scroll-right").mousehold(50,(function(){t.move(-t.scrollDelta)}))}},{name:"Zoom-in and zoom-out",buttons:[{name:"Zoom in",icon:'<i class="fas fa-search-plus"></i>',class:"gv-zoom-in",action:function(t){t.zoomIn()}},{name:"Zoom out",icon:'<i class="fas fa-search-minus"></i>',class:"gv-zoom-out",action:function(t){t.zoomOut()}}]},{name:"Toggle your mouse drag action between scroll left/right and select region",buttons:[{name:"Mouse drag action to scroll the browser left or right",icon:'<i class="fas fa-arrows-alt-h"></i>',class:"gv-drag-scroll",action:function(t){t.setDragAction("scroll"),e(this).addClass("gv-active").siblings().removeClass("gv-active")}},{name:"Mouse drag action to select a region",icon:"<i></i>",class:"gv-drag-select",action:function(t){t.setDragAction("select"),e(this).addClass("gv-active").siblings().removeClass("gv-active")}}],init:function(t){e(this).find(".gv-drag-".concat(t.dragAction)).addClass("gv-active").siblings().removeClass("gv-active")}},{name:"Toggle your mouse wheel action between zoom in/out and default page scroll",buttons:[{name:"Mouse wheel action to scroll the page up and down",icon:'<i class="fas fa-arrows-alt-v"></i>',class:"gv-wheel-off",action:function(t){t.setWheelAction("off"),e(this).addClass("gv-active").siblings().removeClass("gv-active")}},{name:"Mouse wheel to zoom in and out",icon:"±",class:"gv-wheel-zoom",action:function(t){t.setWheelAction("zoom"),e(this).addClass("gv-active").siblings().removeClass("gv-active")}}],init:function(t){e(this).find(".gv-wheel-".concat(t.wheelAction)).addClass("gv-active").siblings().removeClass("gv-active")}}],this.saveable&&this.controls.push({icon:'<i class="fas fa-undo"></i>',name:"Reset tracks and configuration",action:function(t){t.resetConfig()}}),this.on({beforeInit:function(){var t=this,a=this;this.tracksLibrary=(this.tracksLibrary||this.tracks).map((function(e){return t.normaliseTrackDefinition(e)})).filter((function(t){return t.prototype.name}));var n=e('\n <table cellspacing=0 cellpadding=0 class="gv">\n <tr>\n <td class="gv-panel gv-panel-left"></td>\n <td class="gv-canvas-container"></td>\n <td class="gv-panel gv-panel-right"></td>\n </tr>\n </table>\n ').appendTo(this.container).find(".gv-panel-right");this.controlPanel=n,this.superContainer=this.container,this.container=e(".gv-canvas-container",this.container),a.controls.forEach((function(t){var n=e('<div class="gv-button-set">').attr("title",t.name).appendTo(a.superContainer.find(".gv-panel-right"));(t.buttons||[t]).forEach((function(i){var s=e("<button>".concat(i.icon,"</button>")).addClass(i.class).attr("title",i.name).appendTo(n);i.action&&s.on("click",(function(){i.action.call(s[0],a)})),i.init&&i!==t&&i.init.call(s[0],a)})),t.init&&t.init.call(n,a)})),this.superContainer.width(this.width),e(document).on("keydown",(function(t){27===t.keyCode&&(n.find("button.gv-drag-select").hasClass("gv-active")&&n.find("button.gv-drag-scroll").trigger("click"),e(".gv-menu .gv-close").trigger("click"))}))},afterInit:function(){var a=this,n=e('<button class="gv-tracks-library-button" title="Tracks menu"><i class="fas fa-bars"></i> Tracks</button>').on("click",(function(){var n=this,i=function t(e,a){var n,i;return null!==(n=e.constructor)&&void 0!==n&&null!==(i=n.ancestor)&&void 0!==i&&i.prototype?t(e.constructor.ancestor.prototype,a.concat(e.constructor.ancestor.prototype.tags||[])):a};if(e(this).hasClass("gv-active"))e(".gv-menu.gv-tracks-menu .gv-close").trigger("click"),e(this).removeClass("gv-active");else{var s=e(this).data("menu");if(s)s.show();else{var o;s=a.makeMenu({"Currently enabled tracks:":"Available tracks:",'<div class="gv-current-tracks"></div>':'<input placeholder="Search"><div class="gv-available-tracks"></div>'}).addClass("gv-tracks-menu"),e("input[placeholder=Search]",s).on("keyup",(function(){var t=this.value.toLowerCase();e(".gv-tracks-library-item",s).each((function(){var a=e(this).data("track"),n=!1;a.name&&a.name.toLowerCase().indexOf(t)>=0?n=!0:i(a,[]).concat(a.tags||[]).some((function(e){return e.toLowerCase().indexOf(t)>=0}))&&(n=!0);e(this)[n?"removeClass":"addClass"]("gv-hide")})),e(".gv-tracks-library-category",s).each((function(){var t=e(this).children(".gv-tracks-library-item:not(.gv-hide)");e(this)[t.length?"removeClass":"addClass"]("gv-hide")}))})),e(".gv-close",s).on("click",(function(){e(n).removeClass("gv-active")}));var r=e(".gv-available-tracks",s),c=e(".gv-current-tracks",s).before('<div class="gv-current-tracks-instructions">Drag and drop to reorder</div>').data({reload:function(){e(this).empty().data("listTracks")()},listTracks:function(){a.tracks.filter((function(t){return t.name&&!(!1===t.removable&&t.unsortable)&&!t.parentTrack&&!t.lockToTrack})).forEach((function(t){var a=e('<div class="gv-tracks-menu-track">').append('<span class="gv-tracks-menu-track-name" title="'.concat(t.name,'">').concat(t.defaultName,"</span>")).appendTo(c).data("track",t).addClass(t.unsortable?"gv-unsortable":"");!1===t.removable?a.prepend('<i class="gv-remove-track gv-menu-button fas fa-circle">'):a.prepend(e('<i class="gv-remove-track gv-menu-button fas fa-times-circle">').on("click",(function(){t.remove()})));var n=a.find(".gv-tracks-menu-track-name").tipsy({gravity:"w",trigger:"manual"}).on("mouseenter",(function(){var t=e(this).tipsy("show").data("tipsy").$tip;t&&t.css("zIndex",1002)})).on("mouseleave",(function(){e(this).tipsy("hide")}));t.name===t.defaultName&&n.tipsy("disable")}))}}).sortable({items:"div:not(.gv-unsortable)",cursor:"move",axis:"y",handle:"span",update:a.updateTrackOrder.bind(a),start:function(){c.find(".gv-tracks-menu-track-name").each((function(){e(this).tipsy("hide").tipsy("disable")}))},stop:function(){c.find(".gv-tracks-menu-track-name").each((function(){e(this).tipsy("enable")}))}});if(c.data("listTracks")(),a.saveable&&e('<div class="gv-tracks-menu-reset gv-menu-button"><i class="fas fa-undo"></i> Reset tracks and configuration</div>').insertAfter(c).on("click",(function(t){t.preventDefault(),a.resetConfig()})),null!==(o=a.tracksLibrary)&&void 0!==o&&o.length){var l=a.tracksLibrary.filter((function(t){return t.prototype.name&&!1!==t.prototype.removable})).reduce((function(t,e){var a=e.prototype.category||"";return t[a]=t[a]||[],t[a].push([e.prototype.name.toLowerCase(),e]),t}),{}),d=((null==t?void 0:t.tracksLibraryCategoryOrder)||[]).reduce((function(t,e,a){return Object.assign(t,(s=a+1,(i=e)in(n={})?Object.defineProperty(n,i,{value:s,enumerable:!0,configurable:!0,writable:!0}):n[i]=s,n));var n,i,s}),{});Object.keys(l).sort((function(t,e){return Boolean(e)-Boolean(t)||d[t]-d[e]||t.localeCompare(e)})).forEach((function(t,n,i){var s=i.length>1?e('<div class="gv-tracks-library-category">').append(e('<div class="gv-tracks-library-category-header">').html(t||"Other")).appendTo(r):r;l[t].sort((function(t,e){return t[0].localeCompare(e[0])})).forEach((function(t){var n=t[1];e('<div class="gv-tracks-library-item">').append(e('<i class="gv-add-track gv-menu-button fas fa-plus-circle">').on("click",(function(){a.trackIds=a.trackIds||{},a.trackIds[n.prototype.id]=a.trackIds[n.prototype.id]||1,a.addTrack(n.extend({id:"".concat(n.prototype.id).concat(a.tracksById[n.prototype.id]?a.trackIds[n.prototype.id]++:"")}))}))).append("<span>".concat(n.prototype.name,"</span>")).appendTo(s).data("track",n.prototype)}))}))}s.css({left:"50%",marginLeft:s.width()/-2}),e(this).data("menu",s)}e(this).addClass("gv-active")}}));this.labelContainer.prepend(e('<li class="gv-unsortable">').append(e('<div class="gv-button-set" title="Tracks menu">').append(n)))},afterAddDomElements:function(){this.wrapper.after('<div class="gv-powered-by">Powered by <a target="_blank" href="https://wtsi-decipher-grp.github.io/Genoverse/">Genoverse</a></div>'),this.superContainer.find(".gv-panel-left").append(this.labelContainer)},"afterAddTracks afterRemoveTracks":function(){var t=this.superContainer.find(".gv-tracks-menu .gv-current-tracks");t.length&&t.data("reload").call(t)}}),this.on({afterSetName:function(t){var a=this.track;if(null!=a&&a.browser){var n=a.browser.superContainer.find(".gv-tracks-library-button").data("menu");n&&n.find(".gv-tracks-menu-track").filter((function(){return e(this).data("track")===a})).children(".gv-tracks-menu-track-name").attr("title",t).each((function(){t===a.defaultName?e(this).tipsy("hide").tipsy("disable"):e(this).tipsy("enable")}))}}},"tracks")},requires:n.default}},4394:function(t,e,a){a.r(e);var n=a(5337);e.default={karyotype:function(t){var e=this.jQuery;function a(){var a=e('<div class="gv-chromosome">'),i=e('<div class="gv-karyotype-container">').html(a).insertBefore(this.wrapper),s=this.assembly||this.genomeName,o="".concat(t.showAssembly&&s?"".concat(s,": "):"","Chr ").concat(this.chr);t.showAssembly&&s&&i.addClass("gv-show-assembly");var r=e('<div class="gv-chromosome"><ul class="gv-label-container"><li><span class="gv-name">'.concat(o,"</span></li></ul></div>")).appendTo(i),c=!1===t.karyotypeLabel?0:r.find(".gv-name").outerWidth(!0)+10;r.remove(),this.karyotype=new Genoverse({parent:this,container:a,width:a.width(),genome:this.genome,chr:this.chr,start:1,end:this.chromosomeSize,isStatic:!0,tracks:[n.default.extend({name:o,height:20,featureHeight:20,border:!1,legend:!1,unsortable:!0,click:function(t){var a=this.container.parent().offset().left,n=t.pageX-a,i=this.featurePositions.search({x:n,y:1,w:1,h:1})[0];if(i)if("mouseup"===t.type)this.browser.parent.isStatic||this.browser.parent.moveTo(i.chr,i.start,i.end,!0);else if(this.hoverFeature!==i&&!this.browser.hideTooltip){if(this.container.tipsy("hide"),i.label){var s=a+i.position[this.scale].start+i.position[this.scale].width/2;this.container.attr("title",i.label[0]).tipsy({trigger:"manual",container:"body"}).tipsy("show").data("tipsy").$tip.css("left",(function(){return s-e(this).width()/2}))}this.hoverFeature=i}},addUserEventHandlers:function(){var t=this;this.base(),this.container.on({mousemove:function(e){t.click(e)},mouseout:function(e){if(t.browser.viewPoint.is(e.relatedTarget)||t.browser.viewPoint.find(e.relatedTarget).length)return!0;t.container.tipsy("hide"),t.hoverFeature=!1}},".gv-image-container"),this.container.on("mousewheel",".gv-image-container, .gv-selector",(function(t){t.stopPropagation()}))},afterSetName:function(){this.label.css("lineHeight","".concat(this.label.height(),"px"))}})],addUserEventHandlers:function(){},afterInit:function(){this.updatePosition(),this.viewPoint.fadeIn()},afterAddTracks:function(){this.track=this.tracks[0]},afterAddDomElements:function(){var a=this,n=this.parent;function s(){a.hideTooltip=!0,a.track.prop("container").tipsy("hide")}function o(t,i){a.hideTooltip=!1;var s=a.chromosomeSize/a.width,o="resizestop"===t.type?e(this).data("ui-resizable").axis:void 0,r="e"===o?n.start:Math.max(Math.floor(i.position.left*s),1),c="w"===o?n.end:"dragstop"===t.type?r+n.length-1:Math.floor(i.helper.outerWidth(!0)*s)+r;r===n.start&&c===n.end||n.moveTo(a.chr,r,c,!0,"dragstop"===t.type)}!1===t.karyotypeLabel?(this.labelContainer.remove(),this.labelContainer=e(),i.addClass("gv-no-label")):this.labelContainer.width(c),this.viewPoint=e('<div class="gv-karyotype-viewpoint-wrapper"><div class="gv-karyotype-viewpoint"></div></div>').appendTo(i).css({left:c,width:this.width-c}).children().on({mousemove:function(t){a.track.controller.click(t)},mouseout:function(t){var n=e(t.relatedTarget);if(a.viewPoint.is(n)||a.viewPoint.find(n).length||"IMG"===n.prop("nodeName")&&n.parent().is(a.track.prop("imgContainers")[0]))return!0;a.track.prop("container").tipsy("hide"),a.track.prop("hoverFeature",!1)}}),n.isStatic||this.viewPoint.draggable({axis:"x",containment:this.wrapper,start:s,stop:o}).resizable({handles:"e, w",containment:"parent",start:s,stop:o,resize:function(t,e){e.element.css("left",Math.max(0,e.position.left)),e.position.left>0?e.element.width(Math.min(e.size.width,e.element.parent().width()-e.position.left)):e.element.width(e.size.width+e.position.left)}})},updatePosition:function(){var t=this.parent.start*this.scale,e=this.parent.end*this.scale-t;this.viewPoint.css({left:t,width:e})}}),!0!==this.loadedPlugins.controlPanel&&e('<li class="gv-unsortable">').height((function(t,e){return e+i.height()})).prependTo(this.labelContainer)}function i(){var t=this.karyotype.container.parent();this.karyotype.destroy(),t.remove(),a.call(this)}this.on({afterInit:a,afterSetRange:function(){this.karyotype&&this.karyotype.updatePosition()},afterSetWidth:i,afterMoveTo:function(t){this.karyotype&&this.karyotype.chr!==t&&i.call(this)}})}}}}]);
|
|
2
2
|
//# sourceMappingURL=804.genoverse.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"804.genoverse.js","mappings":"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","sources":["webpack://genoverse/./src/js/plugins/controlPanel.js","webpack://genoverse/./src/js/plugins/karyotype.js"],"sourcesContent":["import '../../css/controlPanel.css';\nimport karyotype from './karyotype';\n\nconst plugin = function (pluginConf) {\n const jQuery = this.jQuery;\n\n this.controls = [\n // Scroll left/right\n {\n name : 'Scroll left and right by pressing and holding these buttons',\n buttons : [{\n name : 'Scroll left',\n icon : '<i class=\"fas fa-chevron-left\"></i>',\n class : 'gv-scroll-left',\n }, {\n name : 'Scroll right',\n icon : '<i class=\"fas fa-chevron-right\"></i>',\n class : 'gv-scroll-right',\n }],\n init: function (browser) {\n const el = jQuery(this);\n\n el.find('.gv-scroll-left, .gv-scroll-right').on({\n mousedown : () => { browser.startDragScroll(); },\n mouseup : () => { browser.stopDragScroll(); },\n });\n\n el.find('.gv-scroll-left').mousehold(50, () => { browser.move(browser.scrollDelta); });\n el.find('.gv-scroll-right').mousehold(50, () => { browser.move(-browser.scrollDelta); });\n },\n },\n\n // Zoom in/out\n {\n name : 'Zoom-in and zoom-out',\n buttons : [{\n name : 'Zoom in',\n icon : '<i class=\"fas fa-search-plus\"></i>',\n class : 'gv-zoom-in',\n action : (browser) => { browser.zoomIn(); },\n }, {\n name : 'Zoom out',\n icon : '<i class=\"fas fa-search-minus\"></i>',\n class : 'gv-zoom-out',\n action : (browser) => { browser.zoomOut(); },\n }],\n },\n\n // Toogle drag action\n {\n name : 'Toggle your mouse drag action between scroll left/right and select region',\n buttons : [{\n name : 'Mouse drag action to scroll the browser left or right',\n icon : '<i class=\"fas fa-arrows-alt-h\"></i>',\n class : 'gv-drag-scroll',\n action : function (browser) {\n browser.setDragAction('scroll');\n jQuery(this).addClass('gv-active').siblings().removeClass('gv-active');\n },\n }, {\n name : 'Mouse drag action to select a region',\n icon : '<i></i>',\n class : 'gv-drag-select',\n action : function (browser) {\n browser.setDragAction('select');\n jQuery(this).addClass('gv-active').siblings().removeClass('gv-active');\n },\n }],\n init: function (browser) {\n jQuery(this).find(`.gv-drag-${browser.dragAction}`).addClass('gv-active').siblings().removeClass('gv-active');\n },\n },\n\n // Toogle wheel action\n {\n name : 'Toggle your mouse wheel action between zoom in/out and default page scroll',\n buttons : [{\n name : 'Mouse wheel action to scroll the page up and down',\n icon : '<i class=\"fas fa-arrows-alt-v\"></i>',\n class : 'gv-wheel-off',\n action : function (browser) {\n browser.setWheelAction('off');\n jQuery(this).addClass('gv-active').siblings().removeClass('gv-active');\n },\n }, {\n name : 'Mouse wheel to zoom in and out',\n icon : '±',\n class : 'gv-wheel-zoom',\n action : function (browser) {\n browser.setWheelAction('zoom');\n jQuery(this).addClass('gv-active').siblings().removeClass('gv-active');\n },\n }],\n init: function (browser) {\n jQuery(this).find(`.gv-wheel-${browser.wheelAction}`).addClass('gv-active').siblings().removeClass('gv-active');\n },\n },\n ];\n\n if (this.saveable) {\n this.controls.push({\n icon : '<i class=\"fas fa-undo\"></i>',\n name : 'Reset tracks and configuration',\n action : (browser) => { browser.resetConfig(); },\n });\n }\n\n this.on({\n beforeInit: function () {\n const browser = this;\n\n this.tracksLibrary = (this.tracksLibrary || this.tracks).map(\n track => this.normaliseTrackDefinition(track)\n ).filter(\n track => track.prototype.name\n );\n\n const panel = jQuery(`\n <table cellspacing=0 cellpadding=0 class=\"gv\">\n <tr>\n <td class=\"gv-panel gv-panel-left\"></td>\n <td class=\"gv-canvas-container\"></td>\n <td class=\"gv-panel gv-panel-right\"></td>\n </tr>\n </table>\n `).appendTo(this.container).find('.gv-panel-right');\n\n this.controlPanel = panel;\n this.superContainer = this.container;\n this.container = jQuery('.gv-canvas-container', this.container);\n\n browser.controls.forEach(\n (control) => {\n const buttonSet = jQuery('<div class=\"gv-button-set\">').attr('title', control.name).appendTo(browser.superContainer.find('.gv-panel-right'));\n const buttons = control.buttons || [ control ];\n\n buttons.forEach(\n (button) => {\n const el = jQuery(`<button>${button.icon}</button>`).addClass(button.class).attr('title', button.name).appendTo(buttonSet);\n\n if (button.action) {\n el.on('click', () => {\n button.action.call(el[0], browser);\n });\n }\n\n if (button.init && button !== control) {\n button.init.call(el[0], browser);\n }\n }\n );\n\n if (control.init) {\n control.init.call(buttonSet, browser);\n }\n }\n );\n\n this.superContainer.width(this.width);\n\n // ESC key to toggle crosshair select to drag mode and close menus\n jQuery(document).on('keydown', (e) => {\n if (e.keyCode === 27) {\n if (panel.find('button.gv-drag-select').hasClass('gv-active')) {\n panel.find('button.gv-drag-scroll').trigger('click');\n }\n\n jQuery('.gv-menu .gv-close').trigger('click');\n }\n });\n },\n\n afterInit: function () {\n const browser = this;\n const tracksButton = jQuery('<button class=\"gv-tracks-library-button\" title=\"Tracks menu\"><i class=\"fas fa-bars\"></i> Tracks</button>').on('click', function () {\n const button = this;\n\n const getTrackTags = (track, tags) => (\n track.constructor?.ancestor?.prototype\n ? getTrackTags(track.constructor.ancestor.prototype, tags.concat(track.constructor.ancestor.prototype.tags || []))\n : tags\n );\n\n if (jQuery(this).hasClass('gv-active')) {\n jQuery('.gv-menu.gv-tracks-menu .gv-close').trigger('click');\n jQuery(this).removeClass('gv-active');\n } else {\n let menu = jQuery(this).data('menu');\n\n if (menu) {\n menu.show();\n } else {\n menu = browser.makeMenu({\n 'Currently enabled tracks:' : 'Available tracks:',\n '<div class=\"gv-current-tracks\"></div>' : '<input placeholder=\"Search\"><div class=\"gv-available-tracks\"></div>',\n }).addClass('gv-tracks-menu');\n\n jQuery('input[placeholder=Search]', menu).on('keyup', function () {\n const str = this.value.toLowerCase();\n\n jQuery('.gv-tracks-library-item', menu).each(function () {\n const track = jQuery(this).data('track');\n\n let match = false;\n\n if (track.name && track.name.toLowerCase().indexOf(str) >= 0) {\n match = true;\n } else {\n const tags = getTrackTags(track, []).concat(track.tags || []);\n\n if (tags.some(tag => tag.toLowerCase().indexOf(str) >= 0)) {\n match = true;\n }\n }\n\n jQuery(this)[match ? 'removeClass' : 'addClass']('gv-hide');\n });\n\n jQuery('.gv-tracks-library-category', menu).each(function () {\n const visibleTracks = jQuery(this).children('.gv-tracks-library-item:not(.gv-hide)');\n\n jQuery(this)[visibleTracks.length ? 'removeClass' : 'addClass']('gv-hide');\n });\n });\n\n jQuery('.gv-close', menu).on('click', () => {\n jQuery(button).removeClass('gv-active');\n });\n\n const availableTracks = jQuery('.gv-available-tracks', menu);\n const currentTracks = jQuery('.gv-current-tracks', menu).before('<div class=\"gv-current-tracks-instructions\">Drag and drop to reorder</div>').data({\n reload : function () { jQuery(this).empty().data('listTracks')(); },\n listTracks : function () {\n browser.tracks.filter(\n track => track.name && !(track.removable === false && track.unsortable) && !track.parentTrack && !track.lockToTrack\n ).forEach(\n (track) => {\n const el = jQuery('<div class=\"gv-tracks-menu-track\">')\n .append(`<span class=\"gv-tracks-menu-track-name\" title=\"${track.name}\">${track.defaultName}</span>`)\n .appendTo(currentTracks)\n .data('track', track)\n .addClass(track.unsortable ? 'gv-unsortable' : '');\n\n if (track.removable === false) {\n el.prepend('<i class=\"gv-remove-track gv-menu-button fas fa-circle\">');\n } else {\n el.prepend(jQuery('<i class=\"gv-remove-track gv-menu-button fas fa-times-circle\">').on('click', () => { track.remove(); }));\n }\n\n const trackNameEl = el.find('.gv-tracks-menu-track-name').tipsy({ gravity: 'w', trigger: 'manual' }).on('mouseenter', function () {\n const tip = jQuery(this).tipsy('show').data('tipsy').$tip;\n\n if (tip) {\n tip.css('zIndex', 1002);\n }\n }).on('mouseleave', function () {\n jQuery(this).tipsy('hide');\n });\n\n if (track.name === track.defaultName) {\n trackNameEl.tipsy('disable');\n }\n }\n );\n },\n }).sortable({\n items : 'div:not(.gv-unsortable)',\n cursor : 'move',\n axis : 'y',\n handle : 'span',\n update : browser.updateTrackOrder.bind(browser),\n start : function () {\n currentTracks.find('.gv-tracks-menu-track-name').each(function () { jQuery(this).tipsy('hide').tipsy('disable'); });\n },\n stop: function () {\n currentTracks.find('.gv-tracks-menu-track-name').each(function () { jQuery(this).tipsy('enable'); });\n },\n });\n\n currentTracks.data('listTracks')();\n\n if (browser.saveable) {\n jQuery('<div class=\"gv-tracks-menu-reset gv-menu-button\"><i class=\"fas fa-undo\"></i> Reset tracks and configuration</div>').insertAfter(currentTracks).on('click', (e) => {\n e.preventDefault();\n browser.resetConfig();\n });\n }\n\n if (browser.tracksLibrary?.length) {\n const tracksLibraryCategories = browser.tracksLibrary.filter(track => track.prototype.name && track.prototype.removable !== false).reduce(\n (acc, track) => {\n const categoryName = track.prototype.category || '';\n\n acc[categoryName] = acc[categoryName] || [];\n acc[categoryName].push([ track.prototype.name.toLowerCase(), track ]);\n\n return acc;\n },\n {}\n );\n\n const tracksLibraryCategoryOrder = (pluginConf?.tracksLibraryCategoryOrder || []).reduce(\n (acc, categoryName, i) => Object.assign(acc, { [categoryName]: i + 1 }),\n {}\n );\n\n Object.keys(tracksLibraryCategories).sort((a, b) => (Boolean(b) - Boolean(a)) || (tracksLibraryCategoryOrder[a] - tracksLibraryCategoryOrder[b]) || a.localeCompare(b)).forEach(\n (categoryName, i, allCategoryNames) => {\n const parentEl = (\n allCategoryNames.length > 1\n ? jQuery('<div class=\"gv-tracks-library-category\">').append(\n jQuery('<div class=\"gv-tracks-library-category-header\">').html(categoryName || 'Other')\n ).appendTo(availableTracks)\n : availableTracks\n );\n\n tracksLibraryCategories[categoryName].sort((a, b) => a[0].localeCompare(b[0])).forEach(\n (row) => {\n const track = row[1];\n\n jQuery('<div class=\"gv-tracks-library-item\">').append(\n jQuery('<i class=\"gv-add-track gv-menu-button fas fa-plus-circle\">').on('click', () => {\n browser.trackIds = browser.trackIds || {};\n browser.trackIds[track.prototype.id] = browser.trackIds[track.prototype.id] || 1;\n\n browser.addTrack(track.extend({ id: `${track.prototype.id}${browser.tracksById[track.prototype.id] ? browser.trackIds[track.prototype.id]++ : ''}` }));\n })\n ).append(`<span>${track.prototype.name}</span>`).appendTo(parentEl).data('track', track.prototype);\n }\n );\n }\n );\n }\n\n menu.css({ left: '50%', marginLeft: menu.width() / -2 });\n\n jQuery(this).data('menu', menu);\n }\n\n jQuery(this).addClass('gv-active');\n }\n });\n\n this.labelContainer.prepend(\n jQuery('<li class=\"gv-unsortable\">').append(\n jQuery('<div class=\"gv-button-set\" title=\"Tracks menu\">').append(tracksButton)\n )\n );\n },\n\n afterAddDomElements: function () {\n this.wrapper.after('<div class=\"gv-powered-by\">Powered by <a target=\"_blank\" href=\"https://wtsi-web.github.io/Genoverse/\">Genoverse</a></div>');\n this.superContainer.find('.gv-panel-left').append(this.labelContainer);\n },\n\n 'afterAddTracks afterRemoveTracks': function () {\n const currentTracks = this.superContainer.find('.gv-tracks-menu .gv-current-tracks');\n\n if (currentTracks.length) {\n currentTracks.data('reload').call(currentTracks);\n }\n },\n });\n\n this.on({\n afterSetName: function (name) {\n const track = this.track;\n\n if (track?.browser) {\n const menu = track.browser.superContainer.find('.gv-tracks-library-button').data('menu');\n\n if (menu) {\n menu.find('.gv-tracks-menu-track').filter(function () {\n return jQuery(this).data('track') === track;\n }).children('.gv-tracks-menu-track-name').attr('title', name).each(function () {\n if (name === track.defaultName) {\n jQuery(this).tipsy('hide').tipsy('disable');\n } else {\n jQuery(this).tipsy('enable');\n }\n });\n }\n }\n },\n }, 'tracks');\n};\n\nexport default { controlPanel: plugin, requires: karyotype };\n","import '../../css/karyotype.css';\nimport Chromosome from '../Track/library/Chromosome';\n\nconst plugin = function (pluginConf) {\n const jQuery = this.jQuery;\n\n function createKaryotype() {\n const chromosome = jQuery('<div class=\"gv-chromosome\">');\n const container = jQuery('<div class=\"gv-karyotype-container\">').html(chromosome).insertBefore(this.wrapper);\n const assemblyName = this.assembly || this.genomeName;\n const name = `${pluginConf.showAssembly && assemblyName ? `${assemblyName}: ` : ''}Chr ${this.chr}`;\n\n if (pluginConf.showAssembly && assemblyName) {\n container.addClass('gv-show-assembly');\n }\n\n const measureWidth = jQuery(`<div class=\"gv-chromosome\"><ul class=\"gv-label-container\"><li><span class=\"gv-name\">${name}</span></li></ul></div>`).appendTo(container);\n const labelWidth = pluginConf.karyotypeLabel === false ? 0 : measureWidth.find('.gv-name').outerWidth(true) + 10;\n\n measureWidth.remove();\n\n this.karyotype = new Genoverse({\n parent : this,\n container : chromosome,\n width : chromosome.width(),\n genome : this.genome,\n chr : this.chr,\n start : 1,\n end : this.chromosomeSize,\n isStatic : true,\n tracks : [\n Chromosome.extend({\n name : name,\n height : 20,\n featureHeight : 20,\n border : false,\n legend : false,\n unsortable : true,\n\n click: function (e) {\n const offset = this.container.parent().offset().left;\n const x = e.pageX - offset;\n const f = this.featurePositions.search({ x: x, y: 1, w: 1, h: 1 })[0];\n\n if (f) {\n if (e.type === 'mouseup') {\n if (!this.browser.parent.isStatic) {\n this.browser.parent.moveTo(f.chr, f.start, f.end, true);\n }\n } else if (this.hoverFeature !== f && !this.browser.hideTooltip) {\n this.container.tipsy('hide');\n\n if (f.label) {\n const left = offset + f.position[this.scale].start + f.position[this.scale].width / 2;\n\n this.container.attr('title', f.label[0]).tipsy({ trigger: 'manual', container: 'body' }).tipsy('show').data('tipsy').$tip.css('left', function () { return left - jQuery(this).width() / 2; });\n }\n\n this.hoverFeature = f;\n }\n }\n },\n\n addUserEventHandlers: function () {\n const track = this;\n\n this.base();\n\n this.container.on({\n mousemove : (e) => { track.click(e); },\n mouseout : (e) => {\n if (track.browser.viewPoint.is(e.relatedTarget) || track.browser.viewPoint.find(e.relatedTarget).length) {\n return true;\n }\n\n track.container.tipsy('hide');\n track.hoverFeature = false;\n },\n }, '.gv-image-container');\n\n // Don't allow zooming in and out on the karyotype image\n this.container.on('mousewheel', '.gv-image-container, .gv-selector', (e) => {\n e.stopPropagation();\n });\n },\n\n afterSetName: function () {\n this.label.css('lineHeight', `${this.label.height()}px`);\n },\n }),\n ],\n\n addUserEventHandlers: () => {},\n\n afterInit: function () {\n this.updatePosition();\n this.viewPoint.fadeIn();\n },\n\n afterAddTracks: function () {\n this.track = this.tracks[0];\n },\n\n afterAddDomElements: function () {\n const karyotype = this;\n const parent = this.parent;\n\n function hideTooltip() {\n karyotype.hideTooltip = true;\n karyotype.track.prop('container').tipsy('hide');\n }\n\n function updateLocation(e, ui) {\n karyotype.hideTooltip = false;\n\n const scale = karyotype.chromosomeSize / karyotype.width;\n const axis = e.type === 'resizestop' ? jQuery(this).data('ui-resizable').axis : undefined;\n const start = axis === 'e' ? parent.start : Math.max(Math.floor(ui.position.left * scale), 1);\n const end = axis === 'w' ? parent.end : e.type === 'dragstop' ? start + parent.length - 1 : Math.floor(ui.helper.outerWidth(true) * scale) + start;\n\n if (start !== parent.start || end !== parent.end) {\n parent.moveTo(karyotype.chr, start, end, true, e.type === 'dragstop');\n }\n }\n\n if (pluginConf.karyotypeLabel === false) {\n this.labelContainer.remove();\n this.labelContainer = jQuery();\n container.addClass('gv-no-label');\n } else {\n this.labelContainer.width(labelWidth);\n }\n\n this.viewPoint = jQuery('<div class=\"gv-karyotype-viewpoint-wrapper\"><div class=\"gv-karyotype-viewpoint\"></div></div>').appendTo(container).css({\n left : labelWidth,\n width : this.width - labelWidth,\n }).children().on({\n mousemove : (e) => { karyotype.track.controller.click(e); },\n mouseout : (e) => {\n const el = jQuery(e.relatedTarget);\n\n if (karyotype.viewPoint.is(el) || karyotype.viewPoint.find(el).length || (el.prop('nodeName') === 'IMG' && el.parent().is(karyotype.track.prop('imgContainers')[0]))) {\n return true;\n }\n\n karyotype.track.prop('container').tipsy('hide');\n karyotype.track.prop('hoverFeature', false);\n },\n });\n\n if (!parent.isStatic) {\n this.viewPoint.draggable({\n axis : 'x',\n containment : this.wrapper,\n start : hideTooltip,\n stop : updateLocation,\n }).resizable({\n handles : 'e, w',\n containment : 'parent',\n start : hideTooltip,\n stop : updateLocation,\n resize : function (e, ui) {\n ui.element.css('left', Math.max(0, ui.position.left));\n\n if (ui.position.left > 0) {\n ui.element.width(Math.min(ui.size.width, ui.element.parent().width() - ui.position.left));\n } else {\n ui.element.width(ui.size.width + ui.position.left);\n }\n },\n });\n }\n },\n\n updatePosition: function () {\n const left = this.parent.start * this.scale;\n const width = (this.parent.end * this.scale) - left;\n\n this.viewPoint.css({ left: left, width: width });\n },\n });\n\n if (this.loadedPlugins.controlPanel !== true) {\n jQuery('<li class=\"gv-unsortable\">').height((i, h) => h + container.height()).prependTo(this.labelContainer);\n }\n }\n\n function recreateKaryotype() {\n const container = this.karyotype.container.parent();\n\n this.karyotype.destroy();\n container.remove();\n\n createKaryotype.call(this);\n }\n\n this.on({\n afterInit: createKaryotype,\n\n afterSetRange: function () {\n if (this.karyotype) {\n this.karyotype.updatePosition();\n }\n },\n\n afterSetWidth: recreateKaryotype,\n\n afterMoveTo: function (chr) {\n if (this.karyotype && this.karyotype.chr !== chr) {\n recreateKaryotype.call(this);\n }\n },\n });\n};\n\nexport default { karyotype: plugin };\n"],"names":["controlPanel","pluginConf","jQuery","this","controls","name","buttons","icon","class","init","browser","el","find","on","mousedown","startDragScroll","mouseup","stopDragScroll","mousehold","move","scrollDelta","action","zoomIn","zoomOut","setDragAction","addClass","siblings","removeClass","dragAction","setWheelAction","wheelAction","saveable","push","resetConfig","beforeInit","tracksLibrary","tracks","map","track","normaliseTrackDefinition","filter","prototype","panel","appendTo","container","superContainer","forEach","control","buttonSet","attr","button","call","width","document","e","keyCode","hasClass","trigger","afterInit","tracksButton","getTrackTags","tags","constructor","ancestor","concat","menu","data","show","makeMenu","str","value","toLowerCase","each","match","indexOf","some","tag","visibleTracks","children","length","availableTracks","currentTracks","before","reload","empty","listTracks","removable","unsortable","parentTrack","lockToTrack","append","defaultName","prepend","remove","trackNameEl","tipsy","gravity","tip","$tip","css","sortable","items","cursor","axis","handle","update","updateTrackOrder","bind","start","stop","insertAfter","preventDefault","tracksLibraryCategories","reduce","acc","categoryName","category","tracksLibraryCategoryOrder","i","Object","assign","keys","sort","a","b","Boolean","localeCompare","allCategoryNames","parentEl","html","row","trackIds","id","addTrack","extend","tracksById","left","marginLeft","labelContainer","afterAddDomElements","wrapper","after","afterSetName","requires","karyotype","createKaryotype","chromosome","insertBefore","assemblyName","assembly","genomeName","showAssembly","chr","measureWidth","labelWidth","karyotypeLabel","outerWidth","Genoverse","parent","genome","end","chromosomeSize","isStatic","Chromosome","height","featureHeight","border","legend","click","offset","x","pageX","f","featurePositions","search","y","w","h","type","moveTo","hoverFeature","hideTooltip","label","position","scale","addUserEventHandlers","base","mousemove","mouseout","viewPoint","is","relatedTarget","stopPropagation","updatePosition","fadeIn","afterAddTracks","prop","updateLocation","ui","undefined","Math","max","floor","helper","controller","draggable","containment","resizable","handles","resize","element","min","size","loadedPlugins","prependTo","recreateKaryotype","destroy","afterSetRange","afterSetWidth","afterMoveTo"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"804.genoverse.js","mappings":"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","sources":["webpack://genoverse/./src/js/plugins/controlPanel.js","webpack://genoverse/./src/js/plugins/karyotype.js"],"sourcesContent":["import '../../css/controlPanel.css';\nimport karyotype from './karyotype';\n\nconst plugin = function (pluginConf) {\n const jQuery = this.jQuery;\n\n this.controls = [\n // Scroll left/right\n {\n name : 'Scroll left and right by pressing and holding these buttons',\n buttons : [{\n name : 'Scroll left',\n icon : '<i class=\"fas fa-chevron-left\"></i>',\n class : 'gv-scroll-left',\n }, {\n name : 'Scroll right',\n icon : '<i class=\"fas fa-chevron-right\"></i>',\n class : 'gv-scroll-right',\n }],\n init: function (browser) {\n const el = jQuery(this);\n\n el.find('.gv-scroll-left, .gv-scroll-right').on({\n mousedown : () => { browser.startDragScroll(); },\n mouseup : () => { browser.stopDragScroll(); },\n });\n\n el.find('.gv-scroll-left').mousehold(50, () => { browser.move(browser.scrollDelta); });\n el.find('.gv-scroll-right').mousehold(50, () => { browser.move(-browser.scrollDelta); });\n },\n },\n\n // Zoom in/out\n {\n name : 'Zoom-in and zoom-out',\n buttons : [{\n name : 'Zoom in',\n icon : '<i class=\"fas fa-search-plus\"></i>',\n class : 'gv-zoom-in',\n action : (browser) => { browser.zoomIn(); },\n }, {\n name : 'Zoom out',\n icon : '<i class=\"fas fa-search-minus\"></i>',\n class : 'gv-zoom-out',\n action : (browser) => { browser.zoomOut(); },\n }],\n },\n\n // Toogle drag action\n {\n name : 'Toggle your mouse drag action between scroll left/right and select region',\n buttons : [{\n name : 'Mouse drag action to scroll the browser left or right',\n icon : '<i class=\"fas fa-arrows-alt-h\"></i>',\n class : 'gv-drag-scroll',\n action : function (browser) {\n browser.setDragAction('scroll');\n jQuery(this).addClass('gv-active').siblings().removeClass('gv-active');\n },\n }, {\n name : 'Mouse drag action to select a region',\n icon : '<i></i>',\n class : 'gv-drag-select',\n action : function (browser) {\n browser.setDragAction('select');\n jQuery(this).addClass('gv-active').siblings().removeClass('gv-active');\n },\n }],\n init: function (browser) {\n jQuery(this).find(`.gv-drag-${browser.dragAction}`).addClass('gv-active').siblings().removeClass('gv-active');\n },\n },\n\n // Toogle wheel action\n {\n name : 'Toggle your mouse wheel action between zoom in/out and default page scroll',\n buttons : [{\n name : 'Mouse wheel action to scroll the page up and down',\n icon : '<i class=\"fas fa-arrows-alt-v\"></i>',\n class : 'gv-wheel-off',\n action : function (browser) {\n browser.setWheelAction('off');\n jQuery(this).addClass('gv-active').siblings().removeClass('gv-active');\n },\n }, {\n name : 'Mouse wheel to zoom in and out',\n icon : '±',\n class : 'gv-wheel-zoom',\n action : function (browser) {\n browser.setWheelAction('zoom');\n jQuery(this).addClass('gv-active').siblings().removeClass('gv-active');\n },\n }],\n init: function (browser) {\n jQuery(this).find(`.gv-wheel-${browser.wheelAction}`).addClass('gv-active').siblings().removeClass('gv-active');\n },\n },\n ];\n\n if (this.saveable) {\n this.controls.push({\n icon : '<i class=\"fas fa-undo\"></i>',\n name : 'Reset tracks and configuration',\n action : (browser) => { browser.resetConfig(); },\n });\n }\n\n this.on({\n beforeInit: function () {\n const browser = this;\n\n this.tracksLibrary = (this.tracksLibrary || this.tracks).map(\n track => this.normaliseTrackDefinition(track)\n ).filter(\n track => track.prototype.name\n );\n\n const panel = jQuery(`\n <table cellspacing=0 cellpadding=0 class=\"gv\">\n <tr>\n <td class=\"gv-panel gv-panel-left\"></td>\n <td class=\"gv-canvas-container\"></td>\n <td class=\"gv-panel gv-panel-right\"></td>\n </tr>\n </table>\n `).appendTo(this.container).find('.gv-panel-right');\n\n this.controlPanel = panel;\n this.superContainer = this.container;\n this.container = jQuery('.gv-canvas-container', this.container);\n\n browser.controls.forEach(\n (control) => {\n const buttonSet = jQuery('<div class=\"gv-button-set\">').attr('title', control.name).appendTo(browser.superContainer.find('.gv-panel-right'));\n const buttons = control.buttons || [ control ];\n\n buttons.forEach(\n (button) => {\n const el = jQuery(`<button>${button.icon}</button>`).addClass(button.class).attr('title', button.name).appendTo(buttonSet);\n\n if (button.action) {\n el.on('click', () => {\n button.action.call(el[0], browser);\n });\n }\n\n if (button.init && button !== control) {\n button.init.call(el[0], browser);\n }\n }\n );\n\n if (control.init) {\n control.init.call(buttonSet, browser);\n }\n }\n );\n\n this.superContainer.width(this.width);\n\n // ESC key to toggle crosshair select to drag mode and close menus\n jQuery(document).on('keydown', (e) => {\n if (e.keyCode === 27) {\n if (panel.find('button.gv-drag-select').hasClass('gv-active')) {\n panel.find('button.gv-drag-scroll').trigger('click');\n }\n\n jQuery('.gv-menu .gv-close').trigger('click');\n }\n });\n },\n\n afterInit: function () {\n const browser = this;\n const tracksButton = jQuery('<button class=\"gv-tracks-library-button\" title=\"Tracks menu\"><i class=\"fas fa-bars\"></i> Tracks</button>').on('click', function () {\n const button = this;\n\n const getTrackTags = (track, tags) => (\n track.constructor?.ancestor?.prototype\n ? getTrackTags(track.constructor.ancestor.prototype, tags.concat(track.constructor.ancestor.prototype.tags || []))\n : tags\n );\n\n if (jQuery(this).hasClass('gv-active')) {\n jQuery('.gv-menu.gv-tracks-menu .gv-close').trigger('click');\n jQuery(this).removeClass('gv-active');\n } else {\n let menu = jQuery(this).data('menu');\n\n if (menu) {\n menu.show();\n } else {\n menu = browser.makeMenu({\n 'Currently enabled tracks:' : 'Available tracks:',\n '<div class=\"gv-current-tracks\"></div>' : '<input placeholder=\"Search\"><div class=\"gv-available-tracks\"></div>',\n }).addClass('gv-tracks-menu');\n\n jQuery('input[placeholder=Search]', menu).on('keyup', function () {\n const str = this.value.toLowerCase();\n\n jQuery('.gv-tracks-library-item', menu).each(function () {\n const track = jQuery(this).data('track');\n\n let match = false;\n\n if (track.name && track.name.toLowerCase().indexOf(str) >= 0) {\n match = true;\n } else {\n const tags = getTrackTags(track, []).concat(track.tags || []);\n\n if (tags.some(tag => tag.toLowerCase().indexOf(str) >= 0)) {\n match = true;\n }\n }\n\n jQuery(this)[match ? 'removeClass' : 'addClass']('gv-hide');\n });\n\n jQuery('.gv-tracks-library-category', menu).each(function () {\n const visibleTracks = jQuery(this).children('.gv-tracks-library-item:not(.gv-hide)');\n\n jQuery(this)[visibleTracks.length ? 'removeClass' : 'addClass']('gv-hide');\n });\n });\n\n jQuery('.gv-close', menu).on('click', () => {\n jQuery(button).removeClass('gv-active');\n });\n\n const availableTracks = jQuery('.gv-available-tracks', menu);\n const currentTracks = jQuery('.gv-current-tracks', menu).before('<div class=\"gv-current-tracks-instructions\">Drag and drop to reorder</div>').data({\n reload : function () { jQuery(this).empty().data('listTracks')(); },\n listTracks : function () {\n browser.tracks.filter(\n track => track.name && !(track.removable === false && track.unsortable) && !track.parentTrack && !track.lockToTrack\n ).forEach(\n (track) => {\n const el = jQuery('<div class=\"gv-tracks-menu-track\">')\n .append(`<span class=\"gv-tracks-menu-track-name\" title=\"${track.name}\">${track.defaultName}</span>`)\n .appendTo(currentTracks)\n .data('track', track)\n .addClass(track.unsortable ? 'gv-unsortable' : '');\n\n if (track.removable === false) {\n el.prepend('<i class=\"gv-remove-track gv-menu-button fas fa-circle\">');\n } else {\n el.prepend(jQuery('<i class=\"gv-remove-track gv-menu-button fas fa-times-circle\">').on('click', () => { track.remove(); }));\n }\n\n const trackNameEl = el.find('.gv-tracks-menu-track-name').tipsy({ gravity: 'w', trigger: 'manual' }).on('mouseenter', function () {\n const tip = jQuery(this).tipsy('show').data('tipsy').$tip;\n\n if (tip) {\n tip.css('zIndex', 1002);\n }\n }).on('mouseleave', function () {\n jQuery(this).tipsy('hide');\n });\n\n if (track.name === track.defaultName) {\n trackNameEl.tipsy('disable');\n }\n }\n );\n },\n }).sortable({\n items : 'div:not(.gv-unsortable)',\n cursor : 'move',\n axis : 'y',\n handle : 'span',\n update : browser.updateTrackOrder.bind(browser),\n start : function () {\n currentTracks.find('.gv-tracks-menu-track-name').each(function () { jQuery(this).tipsy('hide').tipsy('disable'); });\n },\n stop: function () {\n currentTracks.find('.gv-tracks-menu-track-name').each(function () { jQuery(this).tipsy('enable'); });\n },\n });\n\n currentTracks.data('listTracks')();\n\n if (browser.saveable) {\n jQuery('<div class=\"gv-tracks-menu-reset gv-menu-button\"><i class=\"fas fa-undo\"></i> Reset tracks and configuration</div>').insertAfter(currentTracks).on('click', (e) => {\n e.preventDefault();\n browser.resetConfig();\n });\n }\n\n if (browser.tracksLibrary?.length) {\n const tracksLibraryCategories = browser.tracksLibrary.filter(track => track.prototype.name && track.prototype.removable !== false).reduce(\n (acc, track) => {\n const categoryName = track.prototype.category || '';\n\n acc[categoryName] = acc[categoryName] || [];\n acc[categoryName].push([ track.prototype.name.toLowerCase(), track ]);\n\n return acc;\n },\n {}\n );\n\n const tracksLibraryCategoryOrder = (pluginConf?.tracksLibraryCategoryOrder || []).reduce(\n (acc, categoryName, i) => Object.assign(acc, { [categoryName]: i + 1 }),\n {}\n );\n\n Object.keys(tracksLibraryCategories).sort((a, b) => (Boolean(b) - Boolean(a)) || (tracksLibraryCategoryOrder[a] - tracksLibraryCategoryOrder[b]) || a.localeCompare(b)).forEach(\n (categoryName, i, allCategoryNames) => {\n const parentEl = (\n allCategoryNames.length > 1\n ? jQuery('<div class=\"gv-tracks-library-category\">').append(\n jQuery('<div class=\"gv-tracks-library-category-header\">').html(categoryName || 'Other')\n ).appendTo(availableTracks)\n : availableTracks\n );\n\n tracksLibraryCategories[categoryName].sort((a, b) => a[0].localeCompare(b[0])).forEach(\n (row) => {\n const track = row[1];\n\n jQuery('<div class=\"gv-tracks-library-item\">').append(\n jQuery('<i class=\"gv-add-track gv-menu-button fas fa-plus-circle\">').on('click', () => {\n browser.trackIds = browser.trackIds || {};\n browser.trackIds[track.prototype.id] = browser.trackIds[track.prototype.id] || 1;\n\n browser.addTrack(track.extend({ id: `${track.prototype.id}${browser.tracksById[track.prototype.id] ? browser.trackIds[track.prototype.id]++ : ''}` }));\n })\n ).append(`<span>${track.prototype.name}</span>`).appendTo(parentEl).data('track', track.prototype);\n }\n );\n }\n );\n }\n\n menu.css({ left: '50%', marginLeft: menu.width() / -2 });\n\n jQuery(this).data('menu', menu);\n }\n\n jQuery(this).addClass('gv-active');\n }\n });\n\n this.labelContainer.prepend(\n jQuery('<li class=\"gv-unsortable\">').append(\n jQuery('<div class=\"gv-button-set\" title=\"Tracks menu\">').append(tracksButton)\n )\n );\n },\n\n afterAddDomElements: function () {\n this.wrapper.after('<div class=\"gv-powered-by\">Powered by <a target=\"_blank\" href=\"https://wtsi-decipher-grp.github.io/Genoverse/\">Genoverse</a></div>');\n this.superContainer.find('.gv-panel-left').append(this.labelContainer);\n },\n\n 'afterAddTracks afterRemoveTracks': function () {\n const currentTracks = this.superContainer.find('.gv-tracks-menu .gv-current-tracks');\n\n if (currentTracks.length) {\n currentTracks.data('reload').call(currentTracks);\n }\n },\n });\n\n this.on({\n afterSetName: function (name) {\n const track = this.track;\n\n if (track?.browser) {\n const menu = track.browser.superContainer.find('.gv-tracks-library-button').data('menu');\n\n if (menu) {\n menu.find('.gv-tracks-menu-track').filter(function () {\n return jQuery(this).data('track') === track;\n }).children('.gv-tracks-menu-track-name').attr('title', name).each(function () {\n if (name === track.defaultName) {\n jQuery(this).tipsy('hide').tipsy('disable');\n } else {\n jQuery(this).tipsy('enable');\n }\n });\n }\n }\n },\n }, 'tracks');\n};\n\nexport default { controlPanel: plugin, requires: karyotype };\n","import '../../css/karyotype.css';\nimport Chromosome from '../Track/library/Chromosome';\n\nconst plugin = function (pluginConf) {\n const jQuery = this.jQuery;\n\n function createKaryotype() {\n const chromosome = jQuery('<div class=\"gv-chromosome\">');\n const container = jQuery('<div class=\"gv-karyotype-container\">').html(chromosome).insertBefore(this.wrapper);\n const assemblyName = this.assembly || this.genomeName;\n const name = `${pluginConf.showAssembly && assemblyName ? `${assemblyName}: ` : ''}Chr ${this.chr}`;\n\n if (pluginConf.showAssembly && assemblyName) {\n container.addClass('gv-show-assembly');\n }\n\n const measureWidth = jQuery(`<div class=\"gv-chromosome\"><ul class=\"gv-label-container\"><li><span class=\"gv-name\">${name}</span></li></ul></div>`).appendTo(container);\n const labelWidth = pluginConf.karyotypeLabel === false ? 0 : measureWidth.find('.gv-name').outerWidth(true) + 10;\n\n measureWidth.remove();\n\n this.karyotype = new Genoverse({\n parent : this,\n container : chromosome,\n width : chromosome.width(),\n genome : this.genome,\n chr : this.chr,\n start : 1,\n end : this.chromosomeSize,\n isStatic : true,\n tracks : [\n Chromosome.extend({\n name : name,\n height : 20,\n featureHeight : 20,\n border : false,\n legend : false,\n unsortable : true,\n\n click: function (e) {\n const offset = this.container.parent().offset().left;\n const x = e.pageX - offset;\n const f = this.featurePositions.search({ x: x, y: 1, w: 1, h: 1 })[0];\n\n if (f) {\n if (e.type === 'mouseup') {\n if (!this.browser.parent.isStatic) {\n this.browser.parent.moveTo(f.chr, f.start, f.end, true);\n }\n } else if (this.hoverFeature !== f && !this.browser.hideTooltip) {\n this.container.tipsy('hide');\n\n if (f.label) {\n const left = offset + f.position[this.scale].start + f.position[this.scale].width / 2;\n\n this.container.attr('title', f.label[0]).tipsy({ trigger: 'manual', container: 'body' }).tipsy('show').data('tipsy').$tip.css('left', function () { return left - jQuery(this).width() / 2; });\n }\n\n this.hoverFeature = f;\n }\n }\n },\n\n addUserEventHandlers: function () {\n const track = this;\n\n this.base();\n\n this.container.on({\n mousemove : (e) => { track.click(e); },\n mouseout : (e) => {\n if (track.browser.viewPoint.is(e.relatedTarget) || track.browser.viewPoint.find(e.relatedTarget).length) {\n return true;\n }\n\n track.container.tipsy('hide');\n track.hoverFeature = false;\n },\n }, '.gv-image-container');\n\n // Don't allow zooming in and out on the karyotype image\n this.container.on('mousewheel', '.gv-image-container, .gv-selector', (e) => {\n e.stopPropagation();\n });\n },\n\n afterSetName: function () {\n this.label.css('lineHeight', `${this.label.height()}px`);\n },\n }),\n ],\n\n addUserEventHandlers: () => {},\n\n afterInit: function () {\n this.updatePosition();\n this.viewPoint.fadeIn();\n },\n\n afterAddTracks: function () {\n this.track = this.tracks[0];\n },\n\n afterAddDomElements: function () {\n const karyotype = this;\n const parent = this.parent;\n\n function hideTooltip() {\n karyotype.hideTooltip = true;\n karyotype.track.prop('container').tipsy('hide');\n }\n\n function updateLocation(e, ui) {\n karyotype.hideTooltip = false;\n\n const scale = karyotype.chromosomeSize / karyotype.width;\n const axis = e.type === 'resizestop' ? jQuery(this).data('ui-resizable').axis : undefined;\n const start = axis === 'e' ? parent.start : Math.max(Math.floor(ui.position.left * scale), 1);\n const end = axis === 'w' ? parent.end : e.type === 'dragstop' ? start + parent.length - 1 : Math.floor(ui.helper.outerWidth(true) * scale) + start;\n\n if (start !== parent.start || end !== parent.end) {\n parent.moveTo(karyotype.chr, start, end, true, e.type === 'dragstop');\n }\n }\n\n if (pluginConf.karyotypeLabel === false) {\n this.labelContainer.remove();\n this.labelContainer = jQuery();\n container.addClass('gv-no-label');\n } else {\n this.labelContainer.width(labelWidth);\n }\n\n this.viewPoint = jQuery('<div class=\"gv-karyotype-viewpoint-wrapper\"><div class=\"gv-karyotype-viewpoint\"></div></div>').appendTo(container).css({\n left : labelWidth,\n width : this.width - labelWidth,\n }).children().on({\n mousemove : (e) => { karyotype.track.controller.click(e); },\n mouseout : (e) => {\n const el = jQuery(e.relatedTarget);\n\n if (karyotype.viewPoint.is(el) || karyotype.viewPoint.find(el).length || (el.prop('nodeName') === 'IMG' && el.parent().is(karyotype.track.prop('imgContainers')[0]))) {\n return true;\n }\n\n karyotype.track.prop('container').tipsy('hide');\n karyotype.track.prop('hoverFeature', false);\n },\n });\n\n if (!parent.isStatic) {\n this.viewPoint.draggable({\n axis : 'x',\n containment : this.wrapper,\n start : hideTooltip,\n stop : updateLocation,\n }).resizable({\n handles : 'e, w',\n containment : 'parent',\n start : hideTooltip,\n stop : updateLocation,\n resize : function (e, ui) {\n ui.element.css('left', Math.max(0, ui.position.left));\n\n if (ui.position.left > 0) {\n ui.element.width(Math.min(ui.size.width, ui.element.parent().width() - ui.position.left));\n } else {\n ui.element.width(ui.size.width + ui.position.left);\n }\n },\n });\n }\n },\n\n updatePosition: function () {\n const left = this.parent.start * this.scale;\n const width = (this.parent.end * this.scale) - left;\n\n this.viewPoint.css({ left: left, width: width });\n },\n });\n\n if (this.loadedPlugins.controlPanel !== true) {\n jQuery('<li class=\"gv-unsortable\">').height((i, h) => h + container.height()).prependTo(this.labelContainer);\n }\n }\n\n function recreateKaryotype() {\n const container = this.karyotype.container.parent();\n\n this.karyotype.destroy();\n container.remove();\n\n createKaryotype.call(this);\n }\n\n this.on({\n afterInit: createKaryotype,\n\n afterSetRange: function () {\n if (this.karyotype) {\n this.karyotype.updatePosition();\n }\n },\n\n afterSetWidth: recreateKaryotype,\n\n afterMoveTo: function (chr) {\n if (this.karyotype && this.karyotype.chr !== chr) {\n recreateKaryotype.call(this);\n }\n },\n });\n};\n\nexport default { karyotype: plugin };\n"],"names":["controlPanel","pluginConf","jQuery","this","controls","name","buttons","icon","class","init","browser","el","find","on","mousedown","startDragScroll","mouseup","stopDragScroll","mousehold","move","scrollDelta","action","zoomIn","zoomOut","setDragAction","addClass","siblings","removeClass","dragAction","setWheelAction","wheelAction","saveable","push","resetConfig","beforeInit","tracksLibrary","tracks","map","track","normaliseTrackDefinition","filter","prototype","panel","appendTo","container","superContainer","forEach","control","buttonSet","attr","button","call","width","document","e","keyCode","hasClass","trigger","afterInit","tracksButton","getTrackTags","tags","constructor","ancestor","concat","menu","data","show","makeMenu","str","value","toLowerCase","each","match","indexOf","some","tag","visibleTracks","children","length","availableTracks","currentTracks","before","reload","empty","listTracks","removable","unsortable","parentTrack","lockToTrack","append","defaultName","prepend","remove","trackNameEl","tipsy","gravity","tip","$tip","css","sortable","items","cursor","axis","handle","update","updateTrackOrder","bind","start","stop","insertAfter","preventDefault","tracksLibraryCategories","reduce","acc","categoryName","category","tracksLibraryCategoryOrder","i","Object","assign","keys","sort","a","b","Boolean","localeCompare","allCategoryNames","parentEl","html","row","trackIds","id","addTrack","extend","tracksById","left","marginLeft","labelContainer","afterAddDomElements","wrapper","after","afterSetName","requires","karyotype","createKaryotype","chromosome","insertBefore","assemblyName","assembly","genomeName","showAssembly","chr","measureWidth","labelWidth","karyotypeLabel","outerWidth","Genoverse","parent","genome","end","chromosomeSize","isStatic","Chromosome","height","featureHeight","border","legend","click","offset","x","pageX","f","featurePositions","search","y","w","h","type","moveTo","hoverFeature","hideTooltip","label","position","scale","addUserEventHandlers","base","mousemove","mouseout","viewPoint","is","relatedTarget","stopPropagation","updatePosition","fadeIn","afterAddTracks","prop","updateLocation","ui","undefined","Math","max","floor","helper","controller","draggable","containment","resizable","handles","resize","element","min","size","loadedPlugins","prependTo","recreateKaryotype","destroy","afterSetRange","afterSetWidth","afterMoveTo"],"sourceRoot":""}
|