genoverse 4.1.0-alpha.3 → 4.1.0-alpha.4
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/dist/840.genoverse.js +1 -1
- package/dist/840.genoverse.js.map +1 -1
- package/dist/966.genoverse.js +1 -1
- package/dist/966.genoverse.js.map +1 -1
- package/dist/genoverse.js +1 -1
- package/dist/genoverse.js.map +1 -1
- package/genoverse-4.1.0-alpha.4.tgz +0 -0
- package/package.json +3 -3
- package/src/js/Genoverse.js +5 -3
- package/src/js/plugins/controlPanel.js +5 -4
- package/src/js/plugins/fileDrop.js +2 -1
- package/src/js/settings.js +18 -0
package/dist/840.genoverse.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(self.webpackChunkgenoverse=self.webpackChunkgenoverse||[]).push([[840],{2459:function(t,e,a){var n=a(9418),i=a(6347);function o(t){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o(t)}function s(t,e,a){return(e=function(t){var e=function(t,e){if("object"!=o(t)||!t)return t;var a=t[Symbol.toPrimitive];if(void 0!==a){var n=a.call(t,e||"default");if("object"!=o(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==o(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}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 o=e("<button>".concat(i.icon,"</button>")).addClass(i.class).attr("title",i.name).appendTo(n);i.action&&o.on("click",function(){i.action.call(o[0],a)}),i.init&&i!==t&&i.init.call(o[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,i=e('<button class="gv-tracks-library-button" title="Tracks menu"><i class="fas fa-bars"></i> Tracks</button>').on("click",function(){var i=this,o=function(t,e){var a;return null!==(a=t.constructor)&&void 0!==a&&null!==(a=a.ancestor)&&void 0!==a&&a.prototype?o(t.constructor.ancestor.prototype,e.concat(t.constructor.ancestor.prototype.tags||[])):e};if(e(this).hasClass("gv-active"))e(".gv-menu.gv-tracks-menu .gv-close").trigger("click"),e(this).removeClass("gv-active");else{var r=e(this).data("menu");if(r)r.show();else{var c;r=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]",r).on("keyup",function(){var t=this.value.toLowerCase();e(".gv-tracks-library-item",r).each(function(){var a=e(this).data("track"),n=!1;a.name&&a.name.toLowerCase().indexOf(t)>=0?n=!0:o(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",r).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",r).on("click",function(){e(i).removeClass("gv-active")});var l=e(".gv-available-tracks",r),u=e(".gv-current-tracks",r).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(n.A.sanitize('<span class="gv-tracks-menu-track-name" title="'.concat(t.name,'">').concat(t.defaultName,"</span>"))).appendTo(u).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 i=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&&i.tipsy("disable")})}}).sortable({items:"div:not(.gv-unsortable)",cursor:"move",axis:"y",handle:"span",update:a.updateTrackOrder.bind(a),start:function(){u.find(".gv-tracks-menu-track-name").each(function(){e(this).tipsy("hide").tipsy("disable")})},stop:function(){u.find(".gv-tracks-menu-track-name").each(function(){e(this).tipsy("enable")})}});if(u.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(u).on("click",function(t){t.preventDefault(),a.resetConfig()}),null!==(c=a.tracksLibrary)&&void 0!==c&&c.length){var d=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},{}),v=((null==t?void 0:t.tracksLibraryCategoryOrder)||[]).reduce(function(t,e,a){return Object.assign(t,s({},e,a+1))},{});Object.keys(d).sort(function(t,e){return Boolean(e)-Boolean(t)||v[t]-v[e]||t.localeCompare(e)}).forEach(function(t,i,o){var s=o.length>1?e('<div class="gv-tracks-library-category">').append(e('<div class="gv-tracks-library-category-header">').html(n.A.sanitize(t)||"Other")).appendTo(l):l;d[t].sort(function(t,e){return t[0].localeCompare(e[0])}).forEach(function(t){var i=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[i.prototype.id]=a.trackIds[i.prototype.id]||1,a.addTrack(i.extend({id:"".concat(i.prototype.id).concat(a.tracksById[i.prototype.id]?a.trackIds[i.prototype.id]++:"")}))})).append("<span>".concat(n.A.sanitize(i.prototype.name),"</span>")).appendTo(s).data("track",i.prototype)})})}r.css({left:"50%",marginLeft:r.width()/-2}),e(this).data("menu",r)}e(this).addClass("gv-active")}});this.labelContainer.prepend(e('<li class="gv-unsortable">').append(e('<div class="gv-button-set" title="Tracks menu">').append(i)))},afterAddDomElements:function(){this.wrapper.after('<div class="gv-powered-by">Powered by <a target="_blank" href="https://github.com/DECIPHER-genomics/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:i.default}},6347:function(t,e,a){var n=a(2624);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),o=this.assembly||this.genomeName,s="".concat(t.showAssembly&&o?"".concat(o,": "):"","Chr ").concat(this.chr);t.showAssembly&&o&&i.addClass("gv-show-assembly");var r=e('<div class="gv-chromosome"><ul class="gv-label-container"><li><span class="gv-name">'.concat(s,"</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:s,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 o=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 o-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 o(){a.hideTooltip=!0,a.track.prop("container").tipsy("hide")}function s(t,i){a.hideTooltip=!1;var o=a.chromosomeSize/a.width,s="resizestop"===t.type?e(this).data("ui-resizable").axis:void 0,r="e"===s?n.start:Math.max(Math.floor(i.position.left*o),1),c="w"===s?n.end:"dragstop"===t.type?r+n.length-1:Math.floor(i.helper.outerWidth(!0)*o)+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:o,stop:s}).resizable({handles:"e, w",containment:"parent",start:o,stop:s,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([[840],{2459:function(t,e,a){var n=a(9418),i=a(2925),o=a(6347);function s(t){return s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},s(t)}function r(t,e,a){return(e=function(t){var e=function(t,e){if("object"!=s(t)||!t)return t;var a=t[Symbol.toPrimitive];if(void 0!==a){var n=a.call(t,e||"default");if("object"!=s(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==s(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}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 o=e("<button>".concat(i.icon,"</button>")).addClass(i.class).attr("title",i.name).appendTo(n);i.action&&o.on("click",function(){i.action.call(o[0],a)}),i.init&&i!==t&&i.init.call(o[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,o=e('<button class="gv-tracks-library-button" title="Tracks menu"><i class="fas fa-bars"></i> Tracks</button>').on("click",function(){var o=this,s=function(t,e){var a;return null!==(a=t.constructor)&&void 0!==a&&null!==(a=a.ancestor)&&void 0!==a&&a.prototype?s(t.constructor.ancestor.prototype,e.concat(t.constructor.ancestor.prototype.tags||[])):e};if(e(this).hasClass("gv-active"))e(".gv-menu.gv-tracks-menu .gv-close").trigger("click"),e(this).removeClass("gv-active");else{var c=e(this).data("menu");if(c)c.show();else{var l;c=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]",c).on("keyup",function(){var t=this.value.toLowerCase();e(".gv-tracks-library-item",c).each(function(){var a=e(this).data("track"),n=!1;a.name&&a.name.toLowerCase().indexOf(t)>=0?n=!0:s(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",c).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",c).on("click",function(){e(o).removeClass("gv-active")});var u=e(".gv-available-tracks",c),d=e(".gv-current-tracks",c).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(n.A.sanitize('<span class="gv-tracks-menu-track-name" title="'.concat(t.name,'">').concat(t.defaultName,"</span>"),i.A)).appendTo(d).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 o=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&&o.tipsy("disable")})}}).sortable({items:"div:not(.gv-unsortable)",cursor:"move",axis:"y",handle:"span",update:a.updateTrackOrder.bind(a),start:function(){d.find(".gv-tracks-menu-track-name").each(function(){e(this).tipsy("hide").tipsy("disable")})},stop:function(){d.find(".gv-tracks-menu-track-name").each(function(){e(this).tipsy("enable")})}});if(d.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(d).on("click",function(t){t.preventDefault(),a.resetConfig()}),null!==(l=a.tracksLibrary)&&void 0!==l&&l.length){var v=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},{}),h=((null==t?void 0:t.tracksLibraryCategoryOrder)||[]).reduce(function(t,e,a){return Object.assign(t,r({},e,a+1))},{});Object.keys(v).sort(function(t,e){return Boolean(e)-Boolean(t)||h[t]-h[e]||t.localeCompare(e)}).forEach(function(t,o,s){var r=s.length>1?e('<div class="gv-tracks-library-category">').append(e('<div class="gv-tracks-library-category-header">').html(n.A.sanitize(t,i.A)||"Other")).appendTo(u):u;v[t].sort(function(t,e){return t[0].localeCompare(e[0])}).forEach(function(t){var o=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[o.prototype.id]=a.trackIds[o.prototype.id]||1,a.addTrack(o.extend({id:"".concat(o.prototype.id).concat(a.tracksById[o.prototype.id]?a.trackIds[o.prototype.id]++:"")}))})).append("<span>".concat(n.A.sanitize(o.prototype.name,i.A),"</span>")).appendTo(r).data("track",o.prototype)})})}c.css({left:"50%",marginLeft:c.width()/-2}),e(this).data("menu",c)}e(this).addClass("gv-active")}});this.labelContainer.prepend(e('<li class="gv-unsortable">').append(e('<div class="gv-button-set" title="Tracks menu">').append(o)))},afterAddDomElements:function(){this.wrapper.after('<div class="gv-powered-by">Powered by <a target="_blank" href="https://github.com/DECIPHER-genomics/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:o.default}},6347:function(t,e,a){var n=a(2624);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),o=this.assembly||this.genomeName,s="".concat(t.showAssembly&&o?"".concat(o,": "):"","Chr ").concat(this.chr);t.showAssembly&&o&&i.addClass("gv-show-assembly");var r=e('<div class="gv-chromosome"><ul class="gv-label-container"><li><span class="gv-name">'.concat(s,"</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:s,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 o=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 o-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 o(){a.hideTooltip=!0,a.track.prop("container").tipsy("hide")}function s(t,i){a.hideTooltip=!1;var o=a.chromosomeSize/a.width,s="resizestop"===t.type?e(this).data("ui-resizable").axis:void 0,r="e"===s?n.start:Math.max(Math.floor(i.position.left*o),1),c="w"===s?n.end:"dragstop"===t.type?r+n.length-1:Math.floor(i.helper.outerWidth(!0)*o)+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:o,stop:s}).resizable({handles:"e, w",containment:"parent",start:o,stop:s,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=840.genoverse.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"840.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 DOMPurify from 'dompurify';\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(DOMPurify.sanitize(`<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(DOMPurify.sanitize(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>${DOMPurify.sanitize(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://github.com/DECIPHER-genomics/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":["__webpack_exports__","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","concat","dragAction","setWheelAction","wheelAction","saveable","push","resetConfig","beforeInit","_this","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","_track$constructor","constructor","ancestor","menu","data","show","_browser$tracksLibrar","makeMenu","str","value","toLowerCase","each","match","indexOf","some","tag","visibleTracks","children","length","availableTracks","currentTracks","before","reload","empty","listTracks","removable","unsortable","parentTrack","lockToTrack","append","DOMPurify","sanitize","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","_defineProperty","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":"840.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 DOMPurify from 'dompurify';\nimport dompurifyAllowed from '../settings';\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(DOMPurify.sanitize(`<span class=\"gv-tracks-menu-track-name\" title=\"${track.name}\">${track.defaultName}</span>`,dompurifyAllowed))\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(DOMPurify.sanitize(categoryName,dompurifyAllowed) || '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>${DOMPurify.sanitize(track.prototype.name,dompurifyAllowed)}</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://github.com/DECIPHER-genomics/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":["__webpack_exports__","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","concat","dragAction","setWheelAction","wheelAction","saveable","push","resetConfig","beforeInit","_this","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","_track$constructor","constructor","ancestor","menu","data","show","_browser$tracksLibrar","makeMenu","str","value","toLowerCase","each","match","indexOf","some","tag","visibleTracks","children","length","availableTracks","currentTracks","before","reload","empty","listTracks","removable","unsortable","parentTrack","lockToTrack","append","DOMPurify","sanitize","defaultName","dompurifyAllowed","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","_defineProperty","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":""}
|
package/dist/966.genoverse.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
(self.webpackChunkgenoverse=self.webpackChunkgenoverse||[]).push([[966],{8966:function(e,n,t){"use strict";var o=t(9418);n.default={fileDrop:function(){var e=this.jQuery;this.on("afterInit",function(){var n=this,
|
|
1
|
+
(self.webpackChunkgenoverse=self.webpackChunkgenoverse||[]).push([[966],{8966:function(e,n,t){"use strict";var o=t(9418),a=t(2925);n.default={fileDrop:function(){var e=this.jQuery;this.on("afterInit",function(){var n=this,r=this.wrapper;e(window).on("dragenter",function(i){var s=i.originalEvent.dataTransfer;if(null!=s&&s.types&&("Files"===s.types[0]||"Files"===s.types[1]||"Files"===s.types[2])&&!e(".gv-file-drop-total-overlay").length){var l=e('<div class="gv-file-drop">').appendTo(r),f=e('<div class="gv-file-drop-total-overlay">').prependTo("body"),c=function(){l.remove(),f.remove()};f.on("dragenter",function(e){e.preventDefault(),e.stopPropagation()}),f.on("dragover",function(e){e.preventDefault(),e.stopPropagation()}),f.on("dragleave",c),f.on("drop",function(e){c(),e.preventDefault(),e.stopPropagation();for(var r=Object.values(e.originalEvent.dataTransfer.files).sort(function(e,n){return e.name.localeCompare(n.name)}),i=[],s=0;s<r.length;s++){var l=r[s],f=l.name.split(".").reverse(),p="gz"===f[0],u=f[p?1:0],v=void 0;r[s+1]&&new RegExp("^".concat(l.name,"\\.\\w+$")).test(r[s+1].name)&&(v=r[++s]),i.push({file:l,indexFile:v,gz:p,trackType:u.toUpperCase()})}i.forEach(function(e){t(7382)("./".concat(e.trackType)).then(function(t){var r=o.A.sanitize(e.file.name,a.A),i=t.default.extend({name:r,info:'Local file "'.concat(r,'", size: ').concat(e.file.size," bytes"),isLocal:!0,dataFile:e.file,indexFile:e.indexFile,gz:e.gz});n.addTrack(i,n.tracks.length-1)},function(){})})})}})})}}},7382:function(e,n,t){var o={"./BAM":3593,"./BAM.js":3593,"./BED":3350,"./BED.js":3350,"./BIGBED":148,"./BIGBED.js":148,"./BIGWIG":5330,"./BIGWIG.js":5330,"./GFF":1200,"./GFF.js":1200,"./VCF":8598,"./VCF.js":8598,"./WIG":728,"./WIG.js":728};function a(e){return Promise.resolve().then(function(){if(!t.o(o,e)){var n=new Error("Cannot find module '"+e+"'");throw n.code="MODULE_NOT_FOUND",n}return t(o[e])})}a.keys=function(){return Object.keys(o)},a.id=7382,e.exports=a}}]);
|
|
2
2
|
//# sourceMappingURL=966.genoverse.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"966.genoverse.js","mappings":"
|
|
1
|
+
{"version":3,"file":"966.genoverse.js","mappings":"mIAmFAA,EAAA,SAAiBC,SA/EF,WACb,IAAMC,EAASC,KAAKD,OAEpBC,KAAKC,GAAG,YAAa,WACnB,IAAMC,EAAUF,KACVG,EAAUH,KAAKG,QAErBJ,EAAOK,QAAQH,GAAG,YAAa,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,QACnB,EAEAH,EAAiBX,GAAG,YAAa,SAACe,GAASA,EAAGC,iBAAkBD,EAAGE,iBAAmB,GACtFN,EAAiBX,GAAG,WAAa,SAACe,GAASA,EAAGC,iBAAkBD,EAAGE,iBAAmB,GACtFN,EAAiBX,GAAG,YAAaa,GACjCF,EAAiBX,GAAG,OAAQ,SAACe,GAC3BF,IACAE,EAAGC,iBACHD,EAAGE,kBAMH,IAHA,IAAMC,EAAiBC,OAAOC,OAAOL,EAAGT,cAAcD,aAAaa,OAAOG,KAAK,SAACC,EAAGC,GAAC,OAAKD,EAAEE,KAAKC,cAAcF,EAAEC,KAAK,GAC/GE,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,OAAM,IAAAC,OAAKR,EAAKJ,KAAI,aAAYa,KAAKnB,EAAMS,EAAI,GAAGH,QACxEU,EAAYhB,IAAQS,IAGtBD,EAAeY,KAAK,CAClBV,KAAYA,EACZM,UAAYA,EACZF,GAAYA,EACZO,UAAYN,EAAIO,eAEpB,CAEAd,EAAee,QACb,SAACC,GACCC,EAAA,KAAAA,CAAO,KAADP,OAA0BM,EAASH,YAAaK,KACpD,SAACC,GACC,IAAMC,EAAYC,EAAAA,EAAUC,SAASN,EAASd,KAAKJ,KAAKyB,EAAAA,GAClDC,EAAQL,EAAQ,QAASM,OAAO,CACpC3B,KAAYsB,EACZM,KAAI,eAAAhB,OAAuBU,EAAS,aAAAV,OAAYM,EAASd,KAAKyB,KAAI,UAClEC,SAAY,EACZC,SAAYb,EAASd,KACrBM,UAAYQ,EAASR,UACrBF,GAAYU,EAASV,KAGvB/B,EAAQuD,SAASN,EAAOjD,EAAQwD,OAAOjD,OAAS,EAClD,EACA,WAAO,EAEX,EAEJ,EACF,CACF,EACF,EACF,yBCjFA,IAAAkD,EAAA,CACA,aACA,gBACA,aACA,gBACA,eACA,kBACA,gBACA,mBACA,aACA,gBACA,aACA,gBACA,YACA,gBAGA,SAAAC,EAAAC,GACA,OAAAC,QAAAC,UAAAlB,KAAA,WACA,IAAAD,EAAAoB,EAAAL,EAAAE,GAAA,CACA,IAAAxD,EAAA,IAAA4D,MAAA,uBAAAJ,EAAA,KAEA,MADAxD,EAAA6D,KAAA,mBACA7D,CACA,CAEA,OAAAuC,EADAe,EAAAE,GAEA,EACA,CACAD,EAAAO,KAAA,WAAwC,OAAA/C,OAAA+C,KAAAR,EAAA,EACxCC,EAAAQ,GAAA,KACAC,EAAAC,QAAAV","sources":["webpack://genoverse/./src/js/plugins/fileDrop.js","webpack://genoverse/./src/js/Track/library/File/ lazy ^\\.\\/.*$ referencedExports: default namespace object"],"sourcesContent":["import '../../css/fileDrop.css';\nimport DOMPurify from 'dompurify';\nimport dompurifyAllowed from '../settings';\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 trackName = DOMPurify.sanitize(importer.file.name,dompurifyAllowed);\n const track = imported.default.extend({\n name : trackName,\n info : `Local file \"${trackName}\", 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\": 3593,\n\t\"./BAM.js\": 3593,\n\t\"./BED\": 3350,\n\t\"./BED.js\": 3350,\n\t\"./BIGBED\": 148,\n\t\"./BIGBED.js\": 148,\n\t\"./BIGWIG\": 5330,\n\t\"./BIGWIG.js\": 5330,\n\t\"./GFF\": 1200,\n\t\"./GFF.js\": 1200,\n\t\"./VCF\": 8598,\n\t\"./VCF.js\": 8598,\n\t\"./WIG\": 728,\n\t\"./WIG.js\": 728\n};\n\nfunction webpackAsyncContext(req) {\n\treturn Promise.resolve().then(function() {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\tvar id = map[req];\n\treturn __webpack_require__(id);\n});\n}\nwebpackAsyncContext.keys = function() { return Object.keys(map); };\nwebpackAsyncContext.id = 7382;\nmodule.exports = webpackAsyncContext;"],"names":["__webpack_exports__","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","concat","test","push","trackType","toUpperCase","forEach","importer","__webpack_require__","then","imported","trackName","DOMPurify","sanitize","dompurifyAllowed","track","extend","info","size","isLocal","dataFile","addTrack","tracks","map","webpackAsyncContext","req","Promise","resolve","o","Error","code","keys","id","module","exports"],"sourceRoot":""}
|