|
(function() { |
|
'use strict'; |
|
|
|
var items = 9, // number of div containers required |
|
rows = 3, // number items in a single row |
|
rowId = 0; // reference for the row ID |
|
|
|
var w = 200, |
|
h = 100, |
|
colour = d3.scale.category10(); |
|
|
|
var container = d3.select('body').append('section').classed('l-content main-wrapper', true); |
|
|
|
|
|
function render(_items, _rows) { |
|
// loop through number of items to render the responsive grid |
|
for (var i = 0; i < _items; ++i) { |
|
|
|
if ( (i % rows) === 0 || i === 0) { |
|
|
|
rowId++; // increment the row ID |
|
addRow(); // add row |
|
addDiv(); // then add div to row |
|
|
|
} else { |
|
addDiv(); // add div to row |
|
} |
|
} |
|
|
|
function addRow() { |
|
container.append('div') |
|
.classed('pure-g rows', true) |
|
.attr('id', function() { return 'row-id-' + rowId; }); |
|
} |
|
|
|
function addDiv() { |
|
var divId = i + 1; // ensure ID starts at 1 (not 0) |
|
|
|
d3.select('#row-id-' + rowId) |
|
.append('div') |
|
.classed('pure-u-1 pure-u-md-1-' + rows, true) |
|
.attr('id', function() { return 'svg-id-' + divId; }) |
|
.call(addSvg); |
|
} |
|
|
|
function addSvg(selection) { |
|
var svg = selection.append('svg') |
|
.attr({ |
|
width: w, |
|
height: h |
|
}); |
|
|
|
svg.append('rect') |
|
.attr({ |
|
x: 0, |
|
y: 0, |
|
width: w, |
|
height: h |
|
}) |
|
.style({ |
|
fill: colour(i), |
|
stroke: 'none' |
|
}); |
|
|
|
svg.append('text') |
|
.attr({ |
|
x: 10, |
|
y: 20 |
|
}) |
|
.text(i+1); |
|
} |
|
} |
|
|
|
render(items, rows); |
|
|
|
// slider code for demo controls (not needed to create the responsive grid) |
|
// https://github.com/turban/d3.slider |
|
|
|
// ensure slider text is showing current render values |
|
d3.select('#slider-text-items').text(items); |
|
d3.select('#slider-text-rows').text(rows); |
|
|
|
// update items |
|
d3.select('#slider-items').call(d3.slider().value(items).min(5).max(50).on('slide', function(evt, value) { |
|
items = d3.round(value); // ensure whole number |
|
d3.select('#slider-text-items').text(items); // update the text to show value |
|
d3.selectAll('.rows').remove(); // remove all the rows |
|
rowId = 0; // ensure ID is starting at zero |
|
render(items, rows); // update with new amount of items |
|
|
|
})); |
|
|
|
// update users |
|
d3.select('#slider-rows').call(d3.slider().value(rows).min(1).max(5).on('slide', function(evt, value) { |
|
rows = d3.round(value); |
|
d3.select('#slider-text-rows').text(rows); |
|
d3.selectAll('.rows').remove(); |
|
rowId = 0; |
|
render(items, rows); // update with new rows |
|
|
|
})); |
|
|
|
})(); |