UNPKG

@gmod/jbrowse

Version:

JBrowse - client-side genome browser

85 lines (74 loc) 2.86 kB
define( [ 'dojo/query', 'dojox/charting/Chart', 'dojox/charting/axis2d/Default', 'dojox/charting/plot2d/Bubble', 'dojo/NodeList-dom', 'dojo/number' ], function( query, Chart ) { /** * Ruler, with ticks and numbers, drawn with HTML elements. Can be * stretched to any length. * * @class * @constructor * * @param {Number} args.min * @param {Number} args.max * @param {String} [args.direction="up"] The direction of increasing numbers. * Either "up" or "down". * @param {Boolean} args.leftBottom=true Should the ticks and labels be on the right * or the left. * */ function Ruler(args) { dojo.mixin( this, args ); }; Ruler.prototype.render_to = function( target_div ) { if( typeof target_div == 'string' ) target_div = dojo.byId( target_div ); var target_dims = dojo.position( target_div ); // make an inner container that's styled to compensate for the // 12px edge-padding that dojox.charting has builtin that we can't // change, making the tick marks align correctly with the images var label_digits = Math.floor( Math.log(this.max+1)/Math.log(10))+1; var container = dojo.create( 'div', { style: { position: 'absolute', left: "-9px", bottom: "-9px", width: '10px', height: (target_dims.h+18)+"px" } }, target_div ); try { var chart1 = new Chart( container, {fill: 'transparent'} ); chart1.addAxis( "y", { vertical: true, fill: 'transparent', min: this.min, max: this.max, fixLower: this.fixBounds ? (typeof this.fixBounds=='string' ? this.fixBounds : 'major') : 'none', fixUpper: this.fixBounds ? (typeof this.fixBounds=='string' ? this.fixBounds : 'major') : 'none', leftBottom: this.leftBottom // minorTickStep: 0.5, // majorTickStep: 1 //labels: [{value: 1, text: "One"}, {value: 3, text: "Ten"}] }); chart1.addPlot("default", {type: "Bubble", fill: 'transparent'}); chart1.render(); // hack to remove undesirable opaque white rectangles. do // this a little bit later query('svg rect', chart1.domNode ).orphan(); this.scaler = chart1.axes.y.scaler; } catch (x) { console.error(x+''); console.error("Failed to draw Ruler with SVG, your browser may not support the necessary technology."); target_div.removeChild( container ); } }; return Ruler; });