123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553 |
- /**
- * jQuery asProgress v0.2.4
- * https://github.com/amazingSurge/jquery-asProgress
- *
- * Copyright (c) amazingSurge
- * Released under the LGPL-3.0 license
- */
- (function(global, factory) {
- if (typeof define === 'function' && define.amd) {
- define(['jquery'], factory);
- } else if (typeof exports !== 'undefined') {
- factory(require('jquery'));
- } else {
- var mod = {
- exports: {}
- };
- factory(global.jQuery);
- global.jqueryAsProgressEs = mod.exports;
- }
- })(this, function(_jquery) {
- 'use strict';
- var _jquery2 = _interopRequireDefault(_jquery);
- function _interopRequireDefault(obj) {
- return obj && obj.__esModule
- ? obj
- : {
- default: obj
- };
- }
- function _classCallCheck(instance, Constructor) {
- if (!(instance instanceof Constructor)) {
- throw new TypeError('Cannot call a class as a function');
- }
- }
- var _createClass = (function() {
- function defineProperties(target, props) {
- for (var i = 0; i < props.length; i++) {
- var descriptor = props[i];
- descriptor.enumerable = descriptor.enumerable || false;
- descriptor.configurable = true;
- if ('value' in descriptor) descriptor.writable = true;
- Object.defineProperty(target, descriptor.key, descriptor);
- }
- }
- return function(Constructor, protoProps, staticProps) {
- if (protoProps) defineProperties(Constructor.prototype, protoProps);
- if (staticProps) defineProperties(Constructor, staticProps);
- return Constructor;
- };
- })();
- var DEFAULTS = {
- namespace: 'progress',
- bootstrap: false,
- min: 0,
- max: 100,
- goal: 100,
- speed: 20, // speed of 1/100
- easing: 'ease',
- labelCallback: function labelCallback(n) {
- var percentage = this.getPercentage(n);
- return percentage + '%';
- }
- };
- var easingBezier = function easingBezier(mX1, mY1, mX2, mY2) {
- 'use strict';
- var a = function a(aA1, aA2) {
- return 1.0 - 3.0 * aA2 + 3.0 * aA1;
- };
- var b = function b(aA1, aA2) {
- return 3.0 * aA2 - 6.0 * aA1;
- };
- var c = function c(aA1) {
- return 3.0 * aA1;
- };
- // Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.
- var calcBezier = function calcBezier(aT, aA1, aA2) {
- return ((a(aA1, aA2) * aT + b(aA1, aA2)) * aT + c(aA1)) * aT;
- };
- // Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.
- var getSlope = function getSlope(aT, aA1, aA2) {
- return 3.0 * a(aA1, aA2) * aT * aT + 2.0 * b(aA1, aA2) * aT + c(aA1);
- };
- var getTForX = function getTForX(aX) {
- // Newton raphson iteration
- var aGuessT = aX;
- for (var i = 0; i < 4; ++i) {
- var currentSlope = getSlope(aGuessT, mX1, mX2);
- if (currentSlope === 0.0) {
- return aGuessT;
- }
- var currentX = calcBezier(aGuessT, mX1, mX2) - aX;
- aGuessT -= currentX / currentSlope;
- }
- return aGuessT;
- };
- if (mX1 === mY1 && mX2 === mY2) {
- return {
- css: 'linear',
- fn: function fn(aX) {
- return aX;
- }
- };
- }
- return {
- css: 'cubic-bezier(' + mX1 + ',' + mY1 + ',' + mX2 + ',' + mY2 + ')',
- fn: function fn(aX) {
- return calcBezier(getTForX(aX), mY1, mY2);
- }
- };
- };
- var EASING = {
- ease: easingBezier(0.25, 0.1, 0.25, 1.0),
- linear: easingBezier(0.0, 0.0, 1.0, 1.0),
- 'ease-in': easingBezier(0.42, 0.0, 1.0, 1.0),
- 'ease-out': easingBezier(0.0, 0.0, 0.58, 1.0),
- 'ease-in-out': easingBezier(0.42, 0.0, 0.58, 1.0)
- };
- if (!Date.now) {
- Date.now = function() {
- return new Date().getTime();
- };
- }
- var vendors = ['webkit', 'moz'];
- for (var i = 0; i < vendors.length && !window.requestAnimationFrame; ++i) {
- var vp = vendors[i];
- window.requestAnimationFrame = window[vp + 'RequestAnimationFrame'];
- window.cancelAnimationFrame =
- window[vp + 'CancelAnimationFrame'] ||
- window[vp + 'CancelRequestAnimationFrame'];
- }
- if (
- /iP(ad|hone|od).*OS (6|7)/.test(window.navigator.userAgent) || // iOS6 is buggy
- !window.requestAnimationFrame ||
- !window.cancelAnimationFrame
- ) {
- var lastTime = 0;
- window.requestAnimationFrame = function(callback) {
- var now = Date.now();
- var nextTime = Math.max(lastTime + 16, now);
- return setTimeout(function() {
- callback((lastTime = nextTime));
- }, nextTime - now);
- };
- window.cancelAnimationFrame = clearTimeout;
- }
- function isPercentage(n) {
- return typeof n === 'string' && n.includes('%');
- }
- function getTime() {
- if (typeof window.performance !== 'undefined' && window.performance.now) {
- return window.performance.now();
- }
- return Date.now();
- }
- var NAMESPACE$1 = 'asProgress';
- /**
- * Plugin constructor
- **/
- var asProgress = (function() {
- function asProgress(element, options) {
- _classCallCheck(this, asProgress);
- this.element = element;
- this.$element = (0, _jquery2.default)(element);
- this.options = _jquery2.default.extend(
- {},
- DEFAULTS,
- options,
- this.$element.data()
- );
- if (this.options.bootstrap) {
- this.namespace = 'progress';
- this.$target = this.$element.find('.progress-bar');
- this.classes = {
- label: this.namespace + '-label',
- bar: this.namespace + '-bar',
- disabled: 'is-disabled'
- };
- } else {
- this.namespace = this.options.namespace;
- this.classes = {
- label: this.namespace + '__label',
- bar: this.namespace + '__bar',
- disabled: 'is-disabled'
- };
- this.$target = this.$element;
- this.$element.addClass(this.namespace);
- }
- this.easing = EASING[this.options.easing] || EASING.ease;
- this.min = this.$target.attr('aria-valuemin');
- this.max = this.$target.attr('aria-valuemax');
- this.min = this.min ? parseInt(this.min, 10) : this.options.min;
- this.max = this.max ? parseInt(this.max, 10) : this.options.max;
- this.first = this.$target.attr('aria-valuenow');
- this.first = this.first ? parseInt(this.first, 10) : this.min;
- this.now = this.first;
- this.goal = this.options.goal;
- this._frameId = null;
- // Current state information.
- this._states = {};
- this.initialized = false;
- this._trigger('init');
- this.init();
- }
- _createClass(
- asProgress,
- [
- {
- key: 'init',
- value: function init() {
- this.$bar = this.$element.find('.' + this.classes.bar);
- this.$label = this.$element.find('.' + this.classes.label);
- this.reset();
- this.initialized = true;
- this._trigger('ready');
- }
- },
- {
- key: '_trigger',
- value: function _trigger(eventType) {
- for (
- var _len = arguments.length,
- params = Array(_len > 1 ? _len - 1 : 0),
- _key = 1;
- _key < _len;
- _key++
- ) {
- params[_key - 1] = arguments[_key];
- }
- var data = [this].concat(params);
- // event
- this.$element.trigger(NAMESPACE$1 + '::' + eventType, data);
- // callback
- eventType = eventType.replace(/\b\w+\b/g, function(word) {
- return word.substring(0, 1).toUpperCase() + word.substring(1);
- });
- var onFunction = 'on' + eventType;
- if (typeof this.options[onFunction] === 'function') {
- this.options[onFunction].apply(this, params);
- }
- }
- },
- {
- key: 'is',
- value: function is(state) {
- return this._states[state] && this._states[state] > 0;
- }
- },
- {
- key: 'getPercentage',
- value: function getPercentage(n) {
- return Math.round(100 * (n - this.min) / (this.max - this.min));
- }
- },
- {
- key: 'go',
- value: function go(goal) {
- if (!this.is('disabled')) {
- var that = this;
- this._clear();
- if (isPercentage(goal)) {
- goal = parseInt(goal.replace('%', ''), 10);
- goal = Math.round(
- this.min + goal / 100 * (this.max - this.min)
- );
- }
- if (typeof goal === 'undefined') {
- goal = this.goal;
- }
- if (goal > this.max) {
- goal = this.max;
- } else if (goal < this.min) {
- goal = this.min;
- }
- var start = that.now;
- var startTime = getTime();
- var animation = function animation(time) {
- var distance = (time - startTime) / that.options.speed;
- var next = Math.round(
- that.easing.fn(distance / 100) * (that.max - that.min)
- );
- if (goal > start) {
- next = start + next;
- if (next > goal) {
- next = goal;
- }
- } else {
- next = start - next;
- if (next < goal) {
- next = goal;
- }
- }
- that._update(next);
- if (next === goal) {
- window.cancelAnimationFrame(that._frameId);
- that._frameId = null;
- if (that.now === that.goal) {
- that._trigger('finish');
- }
- } else {
- that._frameId = window.requestAnimationFrame(animation);
- }
- };
- that._frameId = window.requestAnimationFrame(animation);
- }
- }
- },
- {
- key: '_update',
- value: function _update(n) {
- this.now = n;
- var percenage = this.getPercentage(this.now);
- this.$bar.css('width', percenage + '%');
- this.$target.attr('aria-valuenow', this.now);
- if (
- this.$label.length > 0 &&
- typeof this.options.labelCallback === 'function'
- ) {
- this.$label.html(
- this.options.labelCallback.call(this, [this.now])
- );
- }
- this._trigger('update', n);
- }
- },
- {
- key: '_clear',
- value: function _clear() {
- if (this._frameId) {
- window.cancelAnimationFrame(this._frameId);
- this._frameId = null;
- }
- }
- },
- {
- key: 'get',
- value: function get() {
- return this.now;
- }
- },
- {
- key: 'start',
- value: function start() {
- if (!this.is('disabled')) {
- this._clear();
- this._trigger('start');
- this.go(this.goal);
- }
- }
- },
- {
- key: 'reset',
- value: function reset() {
- if (!this.is('disabled')) {
- this._clear();
- this._update(this.first);
- this._trigger('reset');
- }
- }
- },
- {
- key: 'stop',
- value: function stop() {
- this._clear();
- this._trigger('stop');
- }
- },
- {
- key: 'finish',
- value: function finish() {
- if (!this.is('disabled')) {
- this._clear();
- this._update(this.goal);
- this._trigger('finish');
- }
- }
- },
- {
- key: 'destroy',
- value: function destroy() {
- this.$element.data(NAMESPACE$1, null);
- this._trigger('destroy');
- }
- },
- {
- key: 'enable',
- value: function enable() {
- this._states.disabled = 0;
- this.$element.removeClass(this.classes.disabled);
- }
- },
- {
- key: 'disable',
- value: function disable() {
- this._states.disabled = 1;
- this.$element.addClass(this.classes.disabled);
- }
- }
- ],
- [
- {
- key: 'registerEasing',
- value: function registerEasing(name) {
- for (
- var _len2 = arguments.length,
- args = Array(_len2 > 1 ? _len2 - 1 : 0),
- _key2 = 1;
- _key2 < _len2;
- _key2++
- ) {
- args[_key2 - 1] = arguments[_key2];
- }
- EASING[name] = easingBezier.apply(undefined, args);
- }
- },
- {
- key: 'getEasing',
- value: function getEasing(name) {
- return EASING[name];
- }
- },
- {
- key: 'setDefaults',
- value: function setDefaults(options) {
- _jquery2.default.extend(
- DEFAULTS,
- _jquery2.default.isPlainObject(options) && options
- );
- }
- }
- ]
- );
- return asProgress;
- })();
- var info = {
- version: '0.2.4'
- };
- var NAMESPACE = 'asProgress';
- var OtherAsProgress = _jquery2.default.fn.asProgress;
- var jQueryAsProgress = function jQueryAsProgress(options) {
- for (
- var _len3 = arguments.length,
- args = Array(_len3 > 1 ? _len3 - 1 : 0),
- _key3 = 1;
- _key3 < _len3;
- _key3++
- ) {
- args[_key3 - 1] = arguments[_key3];
- }
- if (typeof options === 'string') {
- var method = options;
- if (/^_/.test(method)) {
- return false;
- } else if (/^(get)/.test(method)) {
- var instance = this.first().data(NAMESPACE);
- if (instance && typeof instance[method] === 'function') {
- return instance[method].apply(instance, args);
- }
- } else {
- return this.each(function() {
- var instance = _jquery2.default.data(this, NAMESPACE);
- if (instance && typeof instance[method] === 'function') {
- instance[method].apply(instance, args);
- }
- });
- }
- }
- return this.each(function() {
- if (!(0, _jquery2.default)(this).data(NAMESPACE)) {
- (0, _jquery2.default)(this).data(
- NAMESPACE,
- new asProgress(this, options)
- );
- }
- });
- };
- _jquery2.default.fn.asProgress = jQueryAsProgress;
- _jquery2.default.asProgress = _jquery2.default.extend(
- {
- setDefaults: asProgress.setDefaults,
- registerEasing: asProgress.registerEasing,
- getEasing: asProgress.getEasing,
- noConflict: function noConflict() {
- _jquery2.default.fn.asProgress = OtherAsProgress;
- return jQueryAsProgress;
- }
- },
- info
- );
- });
|