diff -r e0dbcf98c13e -r 5533075b5f08 client/js/podium.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/client/js/podium.js Wed Feb 15 12:34:36 2012 +0100 @@ -0,0 +1,71 @@ +/* Author: Raphaƫl Velt, IRI + * + * Licence: CeCILL-B - http://www.cecill.info/licences/Licence_CeCILL-B_V1-fr.html + * + * */ + +Btv_Podium = function(data, opts) { + this.options = opts || {}; + this.options.container = this.options.container || 'podium'; + this.options.spacing = this.options.spacing || 20; + this.options.background = '#ffffff'; + this.options.transitionDuration = this.options.transitionDuration || 200; + this.$ = this.options.jquery || jQuery; + this._$ = this.$('#' + this.options.container); + if (!this._$.length) { + var _el = document.createElement("div"); + _el.id = this.options.container; + document.body.appendChild(_el); + this._$ = this.$(_el); + } + this.options.width = this.options.width || this._$.width(); + this.options.height = this.options.height || this._$.height(); + this.update(data, true); +} + +Btv_Podium.prototype.update = function(data, noAnimate) { + var _data = data || []; + var i = 0; + while (_data.length > this._$.children().length) { + var _newCol = document.createElement("div"); + this.$(_newCol).css({ + "float": "left", + "background": this.options.background, + "margin-top": this.options.height, + "width": 0, + "height": 0, + "margin-left": 0 + }); + this._$.append(_newCol); + i++; + if (i > 10) { + break; + } + } + while (_data.length < this._$.children().length) { + this._$.children().last().detach(); + } + if (_data.length) { + var _max = _data.reduce(function(_memo, _val) { + return Math.max(_memo, _val); + }, 1), + _scale = this.options.height / _max, + _spacing = Math.min(this.options.spacing, Math.floor(.5*this.options.width/_data.length)), + _width = Math.floor(( this.options.width - (_data.length - 1) * _spacing) / _data.length), + _this = this; + this._$.children().each(function(_i, _e) { + var _height = _scale * _data[_i], + _css = { + "margin-top": _this.options.height - _height, + "height": _height, + "width": _width, + "margin-left": (_i ? _spacing : 0) + } + if (noAnimate) { + _this.$(_e).css(_css); + } else { + _this.$(_e).animate(_css); + } + }); + } +} \ No newline at end of file