balmet.com

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

jquery-numerator.js (3393B)


      1 /* 
      2  *   jQuery Numerator Plugin 0.2.1
      3  *   https://github.com/garethdn/jquery-numerator
      4  *
      5  *   Copyright 2015, Gareth Nolan
      6  *   http://ie.linkedin.com/in/garethnolan/
      7 
      8  *   Based on jQuery Boilerplate by Zeno Rocha with the help of Addy Osmani
      9  *   http://jqueryboilerplate.com
     10  *
     11  *   Licensed under the MIT license:
     12  *   http://www.opensource.org/licenses/MIT
     13  */
     14 
     15 ;(function (factory) {
     16 	'use strict';
     17 	if (typeof define === 'function' && define.amd) {
     18 		// AMD is used - Register as an anonymous module.
     19 		define(['jquery'], factory);
     20 	} else if (typeof exports === 'object') {
     21 		factory(require('jquery'));
     22 	} else {
     23 		// Neither AMD nor CommonJS used. Use global variables.
     24 		if (typeof jQuery === 'undefined') {
     25 			throw 'jquery-numerator requires jQuery to be loaded first';
     26 		}
     27 		factory(jQuery);
     28 	}
     29 }(function ($) {
     30 
     31 	var pluginName = "numerator",
     32 		defaults = {
     33 			easing: 'swing',
     34 			duration: 500,
     35 			delimiter: undefined,
     36 			rounding: 0,
     37 			toValue: undefined,
     38 			fromValue: undefined,
     39 			queue: false,
     40 			onStart: function(){},
     41 			onStep: function(){},
     42 			onProgress: function(){},
     43 			onComplete: function(){}
     44 		};
     45 
     46 	function Plugin ( element, options ) {
     47 		this.element = element;
     48 		this.settings = $.extend( {}, defaults, options );
     49 		this._defaults = defaults;
     50 		this._name = pluginName;
     51 		this.init();
     52 	}
     53 
     54 	Plugin.prototype = {
     55 
     56 		init: function () {
     57 			this.parseElement();
     58 			this.setValue();
     59 		},
     60 
     61 		parseElement: function () {
     62 			var elText = $.trim($(this.element).text());
     63 
     64 			this.settings.fromValue = this.settings.fromValue || this.format(elText);
     65 		},
     66 
     67 		setValue: function() {
     68 			var self = this;
     69 
     70 			$({value: self.settings.fromValue}).animate({value: self.settings.toValue}, {
     71 
     72 				duration: parseInt(self.settings.duration, 10),
     73 
     74 				easing: self.settings.easing,
     75 
     76 				start: self.settings.onStart,
     77 
     78 				step: function(now, fx) {
     79 					$(self.element).text(self.format(now));
     80 					// accepts two params - (now, fx)
     81 					self.settings.onStep(now, fx);
     82 				},
     83 
     84 				// accepts three params - (animation object, progress ratio, time remaining(ms))
     85 				progress: self.settings.onProgress,
     86 
     87 				complete: self.settings.onComplete
     88 			});
     89 		},
     90 
     91 		format: function(value){
     92 			var self = this;
     93 
     94 			if ( parseInt(this.settings.rounding ) < 1) {
     95 				value = parseInt(value, 10);
     96 			} else {
     97 				value = parseFloat(value).toFixed( parseInt(this.settings.rounding) );
     98 			}
     99 
    100 			if (self.settings.delimiter) {
    101 				return this.delimit(value)
    102 			} else {
    103 				return value;
    104 			}
    105 		},
    106 
    107 		// TODO: Add comments to this function
    108 		delimit: function(value){
    109 			var self = this;
    110 
    111 			value = value.toString();
    112 
    113 			if (self.settings.rounding && parseInt(self.settings.rounding, 10) > 0) {
    114 				var decimals = value.substring( (value.length - (self.settings.rounding + 1)), value.length ),
    115 					wholeValue = value.substring( 0, (value.length - (self.settings.rounding + 1)));
    116 
    117 				return self.addDelimiter(wholeValue) + decimals;
    118 			} else {
    119 				return self.addDelimiter(value);
    120 			}
    121 		},
    122 
    123 		addDelimiter: function(value){
    124 			return value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, this.settings.delimiter);
    125 		}
    126 	};
    127 
    128 	$.fn[ pluginName ] = function ( options ) {
    129 		return this.each(function() {
    130 			if ( $.data( this, "plugin_" + pluginName ) ) {
    131 				$.data(this, 'plugin_' + pluginName, null);
    132 			}
    133 			$.data( this, "plugin_" + pluginName, new Plugin( this, options ) );
    134 		});
    135 	};
    136 
    137 }));