(function() {
jQuery.fn.extend({
_blocks: ['seg', 'val', 'act', 'res', 'par', 'rev', 'cos', 'cha', 'rel', 'ind', 'tre', 'mac', 'mar'],
_fillColor: function(key) {
var fillcolor = {};
//TODO: separate function
if (jQuery(this).hasClass(key)) {
fillcolor = "000000";
}
else if (jQuery(this).hasClass(key+'-h')) {
fillcolor = "ED1F24";
}
else {
if (jQuery.inArray(key, ['ind', 'tre', 'mac', 'mar']) > -1) {
fillcolor = "f0f0f0";
} else {
fillcolor = "d0d0d0";
}
}
return fillcolor;
},
businessModel: function(options) {
var modelsvg;
var fillcolor = {};
options = options || {clickable: false};
jQuery(this).css('border', 'none');
jQuery(this).css('padding', '15px 5px 5px 100px');
jQuery(this).css('position', 'relative');
jQuery(this).css('min-height', '50px');
for (var key in this._blocks) {
fillcolor[this._blocks[key]] = this._fillColor(this._blocks[key]);
}
modelsvg = '';
modelsvg += "";
div = jQuery("
");
div.html(modelsvg);
div.css('position', 'absolute');
div.css('top', 0);
div.css('left', '0px');
jQuery(this).append(div);
//register behaviours
if (options.clickable == true) {
for (var i = 0; i < this._blocks.length; i++) {
$('.'+this._blocks[i], this).on('mouseover.bm', function() {
this.style.fill = "#333";
});
$('.'+this._blocks[i], this).on('mouseout.bm', {color: this._fillColor(this._blocks[i])}, function(event) {
this.style.fill = event.data.color;
});
$('.'+this._blocks[i], this).on('click.bm', {block: this._blocks[i], parent: this}, function(event) {
//change state, tag and hidden clickbox inputs
if (event.data.parent.hasClass(event.data.block)) {
event.data.parent.removeClass(event.data.block)
} else {
event.data.parent.addClass(event.data.block)
}
//change color
this.style.fill = event.data.parent._fillColor(event.data.block)
//reset mouseout color
$('.'+event.data.block, event.data.parent).off('mouseout.bm');
$('.'+event.data.block, event.data.parent).on('mouseout.bm', {color: event.data.parent._fillColor(event.data.block)}, function(event) {
this.style.fill = event.data.color;
});
});
}
}
}
});
}).call(this);