client/js/podium.js
author veltr
Sat, 25 Feb 2012 00:45:20 +0100
changeset 45 49c818cf7c3a
parent 44 02971f8dcaa5
permissions -rw-r--r--
z-index
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2
5533075b5f08 Added Podium
veltr
parents:
diff changeset
     1
/* Author: Raphaƫl Velt, IRI
5533075b5f08 Added Podium
veltr
parents:
diff changeset
     2
 * 
5533075b5f08 Added Podium
veltr
parents:
diff changeset
     3
 * Licence: CeCILL-B - http://www.cecill.info/licences/Licence_CeCILL-B_V1-fr.html
5533075b5f08 Added Podium
veltr
parents:
diff changeset
     4
 * 
5533075b5f08 Added Podium
veltr
parents:
diff changeset
     5
 * */
5533075b5f08 Added Podium
veltr
parents:
diff changeset
     6
5533075b5f08 Added Podium
veltr
parents:
diff changeset
     7
Btv_Podium = function(data, opts) {
5533075b5f08 Added Podium
veltr
parents:
diff changeset
     8
    this.options = opts || {};
5533075b5f08 Added Podium
veltr
parents:
diff changeset
     9
    this.options.container = this.options.container || 'podium';
5533075b5f08 Added Podium
veltr
parents:
diff changeset
    10
    this.options.spacing = this.options.spacing || 20;
3
82b4715202d1 Modified client side tweet scraping script
veltr
parents: 2
diff changeset
    11
    this.options.barBgd = this.options.barBgd || '#ffffff';
2
5533075b5f08 Added Podium
veltr
parents:
diff changeset
    12
    this.options.transitionDuration = this.options.transitionDuration || 200;
5533075b5f08 Added Podium
veltr
parents:
diff changeset
    13
    this.$ = this.options.jquery || jQuery;
5533075b5f08 Added Podium
veltr
parents:
diff changeset
    14
    this._$ = this.$('#' + this.options.container);
5533075b5f08 Added Podium
veltr
parents:
diff changeset
    15
    if (!this._$.length) {
5533075b5f08 Added Podium
veltr
parents:
diff changeset
    16
        var _el = document.createElement("div");
5533075b5f08 Added Podium
veltr
parents:
diff changeset
    17
        _el.id = this.options.container;
5533075b5f08 Added Podium
veltr
parents:
diff changeset
    18
        document.body.appendChild(_el);
5533075b5f08 Added Podium
veltr
parents:
diff changeset
    19
        this._$ = this.$(_el);
5533075b5f08 Added Podium
veltr
parents:
diff changeset
    20
    }
5533075b5f08 Added Podium
veltr
parents:
diff changeset
    21
    this.options.width = this.options.width || this._$.width();
5533075b5f08 Added Podium
veltr
parents:
diff changeset
    22
    this.options.height = this.options.height || this._$.height();
10
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
    23
    this.options.minHeight = this.options.minHeight || 0;
44
02971f8dcaa5 set onair time, podium improvements
veltr
parents: 13
diff changeset
    24
    this.lastheights = [];
2
5533075b5f08 Added Podium
veltr
parents:
diff changeset
    25
    this.update(data, true);
5533075b5f08 Added Podium
veltr
parents:
diff changeset
    26
}
5533075b5f08 Added Podium
veltr
parents:
diff changeset
    27
5533075b5f08 Added Podium
veltr
parents:
diff changeset
    28
Btv_Podium.prototype.update = function(data, noAnimate) {
44
02971f8dcaa5 set onair time, podium improvements
veltr
parents: 13
diff changeset
    29
    var _data = data || [];
2
5533075b5f08 Added Podium
veltr
parents:
diff changeset
    30
    while (_data.length > this._$.children().length) {
5533075b5f08 Added Podium
veltr
parents:
diff changeset
    31
        var _newCol = document.createElement("div");
5533075b5f08 Added Podium
veltr
parents:
diff changeset
    32
        this.$(_newCol).css({
5533075b5f08 Added Podium
veltr
parents:
diff changeset
    33
            "float": "left",
3
82b4715202d1 Modified client side tweet scraping script
veltr
parents: 2
diff changeset
    34
            "background": this.options.barBgd,
2
5533075b5f08 Added Podium
veltr
parents:
diff changeset
    35
            "width": 0,
5533075b5f08 Added Podium
veltr
parents:
diff changeset
    36
            "height": 0,
44
02971f8dcaa5 set onair time, podium improvements
veltr
parents: 13
diff changeset
    37
            "margin-top": this.options.height,
02971f8dcaa5 set onair time, podium improvements
veltr
parents: 13
diff changeset
    38
            "margin-left": 0,
2
5533075b5f08 Added Podium
veltr
parents:
diff changeset
    39
        });
5533075b5f08 Added Podium
veltr
parents:
diff changeset
    40
        this._$.append(_newCol);
5533075b5f08 Added Podium
veltr
parents:
diff changeset
    41
    }
5533075b5f08 Added Podium
veltr
parents:
diff changeset
    42
    while (_data.length < this._$.children().length) {
5533075b5f08 Added Podium
veltr
parents:
diff changeset
    43
        this._$.children().last().detach();
5533075b5f08 Added Podium
veltr
parents:
diff changeset
    44
    }
5533075b5f08 Added Podium
veltr
parents:
diff changeset
    45
    if (_data.length) {
5533075b5f08 Added Podium
veltr
parents:
diff changeset
    46
        var _max = _data.reduce(function(_memo, _val) {
5533075b5f08 Added Podium
veltr
parents:
diff changeset
    47
                return Math.max(_memo, _val);
5533075b5f08 Added Podium
veltr
parents:
diff changeset
    48
            }, 1),
10
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
    49
            _scale = (this.options.height - this.options.minHeight) / _max,
2
5533075b5f08 Added Podium
veltr
parents:
diff changeset
    50
            _spacing = Math.min(this.options.spacing, Math.floor(.5*this.options.width/_data.length)),
5533075b5f08 Added Podium
veltr
parents:
diff changeset
    51
            _width = Math.floor(( this.options.width - (_data.length - 1) * _spacing) / _data.length),
44
02971f8dcaa5 set onair time, podium improvements
veltr
parents: 13
diff changeset
    52
            _this = this,
02971f8dcaa5 set onair time, podium improvements
veltr
parents: 13
diff changeset
    53
            _heights = [];
2
5533075b5f08 Added Podium
veltr
parents:
diff changeset
    54
        this._$.children().each(function(_i, _e) {
13
e42d9f11f6e2 regexp clean + "countup" + changed podium maxsize
veltr
parents: 10
diff changeset
    55
            var _height = Math.floor(_scale * _data[_i] + _this.options.minHeight),
44
02971f8dcaa5 set onair time, podium improvements
veltr
parents: 13
diff changeset
    56
                _css = {},
02971f8dcaa5 set onair time, podium improvements
veltr
parents: 13
diff changeset
    57
                _changed = false;
02971f8dcaa5 set onair time, podium improvements
veltr
parents: 13
diff changeset
    58
            _heights.push(_height);
02971f8dcaa5 set onair time, podium improvements
veltr
parents: 13
diff changeset
    59
            if (_data.length != _this.lastheights.length) {
13
e42d9f11f6e2 regexp clean + "countup" + changed podium maxsize
veltr
parents: 10
diff changeset
    60
                _css["width"] = _width;
e42d9f11f6e2 regexp clean + "countup" + changed podium maxsize
veltr
parents: 10
diff changeset
    61
                _css["margin-left"] = (_i ? _spacing : 0);
44
02971f8dcaa5 set onair time, podium improvements
veltr
parents: 13
diff changeset
    62
                _changed = true;
13
e42d9f11f6e2 regexp clean + "countup" + changed podium maxsize
veltr
parents: 10
diff changeset
    63
            }
44
02971f8dcaa5 set onair time, podium improvements
veltr
parents: 13
diff changeset
    64
            if (_i >= _data.length || _height != _this.lastheights[_i]) {
02971f8dcaa5 set onair time, podium improvements
veltr
parents: 13
diff changeset
    65
                _css["height"] = _height;
02971f8dcaa5 set onair time, podium improvements
veltr
parents: 13
diff changeset
    66
                _css["margin-top"] = _this.options.height - _height
02971f8dcaa5 set onair time, podium improvements
veltr
parents: 13
diff changeset
    67
                _changed = true;
02971f8dcaa5 set onair time, podium improvements
veltr
parents: 13
diff changeset
    68
            }
02971f8dcaa5 set onair time, podium improvements
veltr
parents: 13
diff changeset
    69
            if (_changed) {
02971f8dcaa5 set onair time, podium improvements
veltr
parents: 13
diff changeset
    70
                if (noAnimate) {
02971f8dcaa5 set onair time, podium improvements
veltr
parents: 13
diff changeset
    71
                    _this.$(_e).css(_css); 
02971f8dcaa5 set onair time, podium improvements
veltr
parents: 13
diff changeset
    72
                } else {
02971f8dcaa5 set onair time, podium improvements
veltr
parents: 13
diff changeset
    73
                    _this.$(_e).animate(_css);
02971f8dcaa5 set onair time, podium improvements
veltr
parents: 13
diff changeset
    74
                }
2
5533075b5f08 Added Podium
veltr
parents:
diff changeset
    75
            }
5533075b5f08 Added Podium
veltr
parents:
diff changeset
    76
        });
44
02971f8dcaa5 set onair time, podium improvements
veltr
parents: 13
diff changeset
    77
        this.lastheights = _heights;
2
5533075b5f08 Added Podium
veltr
parents:
diff changeset
    78
    }
5533075b5f08 Added Podium
veltr
parents:
diff changeset
    79
}