forked from drsm79/Backbone-d3
-
Notifications
You must be signed in to change notification settings - Fork 0
/
backbone-d3.js
executable file
·75 lines (73 loc) · 2.31 KB
/
backbone-d3.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
(function() {
Backbone.d3 = {
PlotView: Backbone.View.extend({
initialize: function(collection, settings) {
_.bindAll(this);
this.collection = collection;
this.collection.bind('change', this.redraw);
this.collection.bind('add', this.redraw);
this.collection.bind('remove', this.redraw);
this.collection.bind('reset', this.draw);
this.settings = settings || {};
var divname = this.settings.div || "#plot";
this.div = d3.select(divname)
// time taken in transitions
this.duration = this.settings.duration || 500;
this.collection.fetch();
// TODO: make the chart a member var of the View
// for easier access/fine grained control
},
plotdata: function() {
var data = [];
this.collection.forEach(function(datapoint) {
data.push(datapoint.get('value'));
})
return data;
},
draw: function() {
// Draw the plot
if (this.plotdata().length > 0) {
this.plot({
newPlot: true
});
this.caption();
}
},
redraw: function() {
// transition the plot
this.plot({
newPlot: false
});
},
plot: function() {
if (console){ console.log("Not implemented in base class"); }
return;
},
caption: function(){
if (this.settings.caption || this.collection.caption){
var caption = this.settings.caption || this.collection.caption;
if (typeof Markdown == "object") {
try {
var converter = Markdown.getSanitizingConverter();
caption = converter.makeHtml(caption);
} catch (err) {
// do nothing
var pass = true;
};
}
var captiondiv = $('<div/>', {class: "caption", html: caption});
$(this.settings.div).append(captiondiv);
}
}
}),
PlotCollection: Backbone.Collection.extend({
initialize: function(models, settings) {
this.settings = settings || {};
this.plottype = this.settings.plottype || this.plottype || "bar";
this.caption = this.settings.caption || false;
if (models) this.reset(models, {silent: true});
}
}),
Canned: {}
}
})();