blob: 0c3a780c50bc36907696cae8a3e59aa2170e227f [file] [log] [blame]
App.BarChartComponent = Ember.Component.extend({
tagName: 'div',
// attributeBindings: 'width height'.w(),
// margin: {top: 20, right: 20, bottom: 30, left: 40},
// w: function(){
// return this.get('width') - this.get('margin.left') - this.get('margin.right');
// }.property('width'),
// h: function(){
// return this.get('height') - this.get('margin.top') - this.get('margin.bottom');
// }.property('height'),
// transformG: function(){
// return "translate(" + this.get('margin.left') + "," + this.get('margin.top') + ")";
// }.property(),
// transformX: function(){
// return "translate(0,"+ this.get('h') +")";
// }.property('h'),
draw: function(){
console.log('In Draw', this);
var wf_states = [],
curState = {};
window.T = this;
var logs = this.logs;
var f3 = d3.time.format("%H:%M:%S.%L")
var f4 = d3.time.format("%a, %e %b %Y")
logs = logs.filter(function(d) { return d.type == 'USERACTION'; });
if (!logs.length) return
console.log(logs)
logs.forEach(function(d) {
d.timestamp = new Date(d.timestamp);
// console.log(d)
if (d.wfState != curState.state) {
// console.log('in loop')
curState.stop = d.timestamp;
if (curState.start) wf_states.push(curState);
curState = {};
curState.state = d.wfState;
curState.start = d.timestamp;
}
});
// console.log(wf_states)
curState.stop = d3.time.second.offset(logs[logs.length-1].timestamp, 5);
wf_states.push(curState);
// x.domain([d3.min(data, function(d) { return d.start; }), d3.max(data, function(d) { return d.stop; })])
var chartArtist = eventChart()
.data(wf_states)
.x(d3.time.scale()
.range([0, 500])
.domain([d3.min(wf_states, function(d) { return d.start; }), d3.max(wf_states, function(d) { return d.stop; })])
);
var chart = d3.select('.chart')
.datum(chart);
chart.call(chartArtist);
var chartArtist2 = eventChart()
.brushing(true)
.data(wf_states)
.y(d3.scale.linear()
.range([20, 0]))
.x(d3.time.scale()
.range([0, 500])
.domain([d3.min(wf_states, function(d) { return d.start; }), d3.max(wf_states, function(d) { return d.stop; })])
);
var chart2 = d3.select('#context')
.datum(chart);
chart2.call(chartArtist2);
function renderAll() {
// console.log(chartArtist2.brush.extent())
var a = chartArtist2.brush.extent()
chartArtist.x().domain(a)
chart.call(chartArtist);
logMarkers
.selectAll('line')
.attr("x1", function(d) { return x(d.timestamp); })
.attr("x2", function(d) { return x(d.timestamp); })
logMarkers
.selectAll('circle')
.attr("cx", function(d) { return x(d.timestamp); })
// .attr("x2", function(d) { return x(d.timestamp); })
}
chartArtist2
.on("brush", renderAll)
.on("brushend", renderAll);
var logMarkers = d3.select(".chart svg > g").selectAll("g.log_markers").data(logs)
.enter()
.append("g")
.attr("class", "log-markers")
.on("mouseover", function(d) {
d3.select('#event-info .timestamp')
.html(f3(d.timestamp));
d3.select('#event-info .desc')
.html(d.parms.desc);
d3.select('#event-info .activity')
.html(d.parms.activity);
d3.select(this).select('circle')
.attr('fill', 'white')
})
.on("mouseout", function(d) {
d3.select('#event-info .timestamp')
.html("");
d3.select('#event-info .desc')
.html("");
d3.select('#event-info .activity')
.html("");
d3.select(this).select('circle')
.attr('fill', 'black')
});
var x = chartArtist.x();
logMarkers.append("line")
.attr("x1", function(d) { return x(d.timestamp); })
.attr("x2", function(d) { return x(d.timestamp); })
.attr("y1", 0)
.attr("y2", 100)
.attr("stroke-width", 1)
.attr("stroke", "black")
.attr("clip-path", "url(#clip-0)");
logMarkers.append("circle")
.attr("cx", function(d) { return x(d.timestamp); })
.attr("cy", 4)
.attr("r", 4)
.attr("clip-path", "url(#clip-0)");
},
didInsertElement: function(){
this.draw();
}
});