define(['computeLayout'], function (computeLayout) {
define(['computeLayout'], function (computeLayout) {
The constructor function.
return function (dashboard) {
The model will contain only one property,
box
, which reflects the size of
the dashboard div in pixels.
var model = new Backbone.Model();
Call once to initialize
setBoxFromDiv();
Call whenever the browser window changes size
window.addEventListener('resize', setBoxFromDiv);
Sets the box
model property based on the actual
size of the dashboard div computed by CSS.
function setBoxFromDiv(){
var div = dashboard.div.node();
model.set('box', {
x: 0,
y: 0,
Use clientWidth
and clientHeight
to
access the actual size of the dashboard div.
width: div.clientWidth,
height: div.clientHeight
});
}
Compute the layout based on the dashboard div size and the configured layout tree whenever either one changes.
model.wire(['tree', 'box'], function (tree, box) {
computeLayout(tree, box).forEach(function (layoutElement) {
dashboard.getComponent(layoutElement.name, function (component) {
Set the box
property on each visualization model
to an object with (x, y, width, height) in pixels.
component.set('box', layoutElement.box);
});
});
});
return model;
}
});