You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

168 lines
6.0 KiB

/*!
* bootstrap-progressbar v0.9.0 by @minddust
* Copyright (c) 2012-2015 Stephan Groß
*
* http://www.minddust.com/project/bootstrap-progressbar/
*
* Licensed under the MIT license:
* http://www.opensource.org/licenses/MIT
*/
(function($) {
'use strict';
// PROGRESSBAR CLASS DEFINITION
// ============================
var Progressbar = function(element, options) {
this.$element = $(element);
this.options = $.extend({}, Progressbar.defaults, options);
};
Progressbar.defaults = {
transition_delay: 300,
refresh_speed: 50,
display_text: 'none',
use_percentage: true,
percent_format: function(percent) { return percent + '%'; },
amount_format: function(amount_part, amount_max, amount_min) { return amount_part + ' / ' + amount_max; },
update: $.noop,
done: $.noop,
fail: $.noop
};
Progressbar.prototype.transition = function() {
var $this = this.$element;
var $parent = $this.parent();
var $back_text = this.$back_text;
var $front_text = this.$front_text;
var options = this.options;
var data_transitiongoal = parseInt($this.attr('data-transitiongoal'));
var aria_valuemin = parseInt($this.attr('aria-valuemin')) || 0;
var aria_valuemax = parseInt($this.attr('aria-valuemax')) || 100;
var is_vertical = $parent.hasClass('vertical');
var update = options.update && typeof options.update === 'function' ? options.update : Progressbar.defaults.update;
var done = options.done && typeof options.done === 'function' ? options.done : Progressbar.defaults.done;
var fail = options.fail && typeof options.fail === 'function' ? options.fail : Progressbar.defaults.fail;
if (isNaN(data_transitiongoal)) {
fail('data-transitiongoal not set');
return;
}
var percentage = Math.round(100 * (data_transitiongoal - aria_valuemin) / (aria_valuemax - aria_valuemin));
if (options.display_text === 'center' && !$back_text && !$front_text) {
this.$back_text = $back_text = $('<span>').addClass('progressbar-back-text').prependTo($parent);
this.$front_text = $front_text = $('<span>').addClass('progressbar-front-text').prependTo($this);
var parent_size;
if (is_vertical) {
parent_size = $parent.css('height');
$back_text.css({height: parent_size, 'line-height': parent_size});
$front_text.css({height: parent_size, 'line-height': parent_size});
$(window).resize(function() {
parent_size = $parent.css('height');
$back_text.css({height: parent_size, 'line-height': parent_size});
$front_text.css({height: parent_size, 'line-height': parent_size});
}); // normal resizing would brick the structure because width is in px
}
else {
parent_size = $parent.css('width');
$front_text.css({width: parent_size});
$(window).resize(function() {
parent_size = $parent.css('width');
$front_text.css({width: parent_size});
}); // normal resizing would brick the structure because width is in px
}
}
setTimeout(function() {
var current_percentage;
var current_value;
var this_size;
var parent_size;
var text;
if (is_vertical) {
$this.css('height', percentage + '%');
}
else {
$this.css('width', percentage + '%');
}
var progress = setInterval(function() {
if (is_vertical) {
this_size = $this.height();
parent_size = $parent.height();
}
else {
this_size = $this.width();
parent_size = $parent.width();
}
current_percentage = Math.round(100 * this_size / parent_size);
current_value = Math.round(aria_valuemin + this_size / parent_size * (aria_valuemax - aria_valuemin));
if (current_percentage >= percentage) {
current_percentage = percentage;
current_value = data_transitiongoal;
done($this);
clearInterval(progress);
}
if (options.display_text !== 'none') {
text = options.use_percentage ? options.percent_format(current_percentage) : options.amount_format(current_value, aria_valuemax, aria_valuemin);
if (options.display_text === 'fill') {
$this.text(text);
}
else if (options.display_text === 'center') {
$back_text.text(text);
$front_text.text(text);
}
}
$this.attr('aria-valuenow', current_value);
update(current_percentage, $this);
}, options.refresh_speed);
}, options.transition_delay);
};
// PROGRESSBAR PLUGIN DEFINITION
// =============================
var old = $.fn.progressbar;
$.fn.progressbar = function(option) {
return this.each(function () {
var $this = $(this);
var data = $this.data('bs.progressbar');
var options = typeof option === 'object' && option;
if (data && options) {
$.extend(data.options, options);
}
if (!data) {
$this.data('bs.progressbar', (data = new Progressbar(this, options)));
}
data.transition();
});
};
$.fn.progressbar.Constructor = Progressbar;
// PROGRESSBAR NO CONFLICT
// =======================
$.fn.progressbar.noConflict = function () {
$.fn.progressbar = old;
return this;
};
})(window.jQuery);