cdb
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
|
||||
cdb.geo.ui.InfoBox = cdb.core.View.extend({
|
||||
|
||||
className: 'cartodb-infobox',
|
||||
defaults: {
|
||||
pos_margin: 20,
|
||||
position: 'bottom|right',
|
||||
width: 200
|
||||
},
|
||||
|
||||
initialize: function() {
|
||||
var self = this;
|
||||
_.defaults(this.options, this.defaults);
|
||||
if(this.options.layer) {
|
||||
this.enable();
|
||||
}
|
||||
this.setTemplate(this.options.template || this.defaultTemplate, 'mustache');
|
||||
},
|
||||
|
||||
setTemplate: function(tmpl) {
|
||||
this.template = cdb.core.Template.compile(tmpl, 'mustache');
|
||||
},
|
||||
|
||||
enable: function() {
|
||||
if(this.options.layer) {
|
||||
this.options.layer
|
||||
.on('featureOver', function(e, latlng, pos, data) {
|
||||
this.render(data).show();
|
||||
}, this)
|
||||
.on('featureOut', function() {
|
||||
this.hide();
|
||||
}, this);
|
||||
}
|
||||
},
|
||||
|
||||
disable: function() {
|
||||
if(this.options.layer) {
|
||||
this.options.layer.off(null, null, this);
|
||||
}
|
||||
},
|
||||
|
||||
// set position based on a string like "top|right", "top|left", "bottom|righ"...
|
||||
setPosition: function(pos) {
|
||||
var props = {};
|
||||
if(pos.indexOf('top') !== -1) {
|
||||
props.top = this.options.pos_margin;
|
||||
} else if(pos.indexOf('bottom') !== -1) {
|
||||
props.bottom = this.options.pos_margin;
|
||||
}
|
||||
|
||||
if(pos.indexOf('left') !== -1) {
|
||||
props.left = this.options.pos_margin;
|
||||
} else if(pos.indexOf('right') !== -1) {
|
||||
props.right = this.options.pos_margin;
|
||||
}
|
||||
this.$el.css(props);
|
||||
|
||||
},
|
||||
|
||||
render: function(data) {
|
||||
this.$el.html( this.template(data) );
|
||||
if(this.options.width) {
|
||||
this.$el.css('width', this.options.width);
|
||||
}
|
||||
if(this.options.position) {
|
||||
this.setPosition(this.options.position);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user