import * as util from '../../util'; | |
// default layout options | |
let defaults = { | |
ready: function(){}, // on layoutready | |
stop: function(){} // on layoutstop | |
}; | |
// constructor | |
// options : object containing layout options | |
function NullLayout( options ){ | |
this.options = util.extend( {}, defaults, options ); | |
} | |
// runs the layout | |
NullLayout.prototype.run = function(){ | |
let options = this.options; | |
let eles = options.eles; // elements to consider in the layout | |
let layout = this; | |
// cy is automatically populated for us in the constructor | |
// (disable eslint for next line as this serves as example layout code to external developers) | |
// eslint-disable-next-line no-unused-vars | |
let cy = options.cy; | |
layout.emit( 'layoutstart' ); | |
// puts all nodes at (0, 0) | |
// n.b. most layouts would use layoutPositions(), instead of positions() and manual events | |
eles.nodes().positions( function(){ | |
return { | |
x: 0, | |
y: 0 | |
}; | |
} ); | |
// trigger layoutready when each node has had its position set at least once | |
layout.one( 'layoutready', options.ready ); | |
layout.emit( 'layoutready' ); | |
// trigger layoutstop when the layout stops (e.g. finishes) | |
layout.one( 'layoutstop', options.stop ); | |
layout.emit( 'layoutstop' ); | |
return this; // chaining | |
}; | |
// called on continuous layouts to stop them before they finish | |
NullLayout.prototype.stop = function(){ | |
return this; // chaining | |
}; | |
export default NullLayout; | |