1/** @preserve jQuery animateNumber plugin v0.0.14 2 * (c) 2013, Alexandr Borisov. 3 * https://github.com/aishek/jquery-animateNumber 4 */ 5 6// ['...'] notation using to avoid names minification by Google Closure Compiler 7(function($) { 8 var reverse = function(value) { 9 return value.split('').reverse().join(''); 10 }; 11 12 var defaults = { 13 numberStep: function(now, tween) { 14 var floored_number = Math.floor(now), 15 target = $(tween.elem); 16 17 target.text(floored_number); 18 } 19 }; 20 21 var handle = function( tween ) { 22 var elem = tween.elem; 23 if ( elem.nodeType && elem.parentNode ) { 24 var handler = elem._animateNumberSetter; 25 if (!handler) { 26 handler = defaults.numberStep; 27 } 28 handler(tween.now, tween); 29 } 30 }; 31 32 if (!$.Tween || !$.Tween.propHooks) { 33 $.fx.step.number = handle; 34 } else { 35 $.Tween.propHooks.number = { 36 set: handle 37 }; 38 } 39 40 var extract_number_parts = function(separated_number, group_length) { 41 var numbers = separated_number.split('').reverse(), 42 number_parts = [], 43 current_number_part, 44 current_index, 45 q; 46 47 for(var i = 0, l = Math.ceil(separated_number.length / group_length); i < l; i++) { 48 current_number_part = ''; 49 for(q = 0; q < group_length; q++) { 50 current_index = i * group_length + q; 51 if (current_index === separated_number.length) { 52 break; 53 } 54 55 current_number_part = current_number_part + numbers[current_index]; 56 } 57 number_parts.push(current_number_part); 58 } 59 60 return number_parts; 61 }; 62 63 var remove_precending_zeros = function(number_parts) { 64 var last_index = number_parts.length - 1, 65 last = reverse(number_parts[last_index]); 66 67 number_parts[last_index] = reverse(parseInt(last, 10).toString()); 68 return number_parts; 69 }; 70 71 $.animateNumber = { 72 numberStepFactories: { 73 /** 74 * Creates numberStep handler, which appends string to floored animated number on each step. 75 * 76 * @example 77 * // will animate to 100 with "1 %", "2 %", "3 %", ... 78 * $('#someid').animateNumber({ 79 * number: 100, 80 * numberStep: $.animateNumber.numberStepFactories.append(' %') 81 * }); 82 * 83 * @params {String} suffix string to append to animated number 84 * @returns {Function} numberStep-compatible function for use in animateNumber's parameters 85 */ 86 append: function(suffix) { 87 return function(now, tween) { 88 var floored_number = Math.floor(now), 89 target = $(tween.elem); 90 91 target.prop('number', now).text(floored_number + suffix); 92 }; 93 }, 94 95 /** 96 * Creates numberStep handler, which format floored numbers by separating them to groups. 97 * 98 * @example 99 * // will animate with 1 ... 217,980 ... 95,217,980 ... 7,095,217,980 100 * $('#world-population').animateNumber({ 101 * number: 7095217980, 102 * numberStep: $.animateNumber.numberStepFactories.separator(',') 103 * }); 104 * @example 105 * // will animate with 1% ... 217,980% ... 95,217,980% ... 7,095,217,980% 106 * $('#salesIncrease').animateNumber({ 107 * number: 7095217980, 108 * numberStep: $.animateNumber.numberStepFactories.separator(',', 3, '%') 109 * }); 110 * 111 * @params {String} [separator=' '] string to separate number groups 112 * @params {String} [group_length=3] number group length 113 * @params {String} [suffix=''] suffix to append to number 114 * @returns {Function} numberStep-compatible function for use in animateNumber's parameters 115 */ 116 separator: function(prefix, separator, group_length, suffix) { 117 separator = separator || ' '; 118 group_length = group_length || 3; 119 suffix = suffix || ''; 120 prefix = prefix || ''; 121 122 return function(now, tween) { 123 var negative = now < 0, 124 floored_number = Math.floor((negative ? -1 : 1) * now), 125 separated_number = floored_number.toString(), 126 target = $(tween.elem); 127 128 if (separated_number.length > group_length) { 129 var number_parts = extract_number_parts(separated_number, group_length); 130 131 separated_number = remove_precending_zeros(number_parts).join(separator); 132 separated_number = reverse(separated_number); 133 } 134 135 target.prop('number', now).text(prefix + (negative ? '-' : '') + separated_number + suffix); 136 }; 137 } 138 } 139 }; 140 141 $.fn.animateNumber = function() { 142 var options = arguments[0], 143 settings = $.extend({}, defaults, options), 144 145 target = $(this), 146 args = [settings]; 147 148 for(var i = 1, l = arguments.length; i < l; i++) { 149 args.push(arguments[i]); 150 } 151 152 // needs of custom step function usage 153 if (options.numberStep) { 154 // assigns custom step functions 155 var items = this.each(function(){ 156 this._animateNumberSetter = options.numberStep; 157 }); 158 159 // cleanup of custom step functions after animation 160 var generic_complete = settings.complete; 161 settings.complete = function() { 162 items.each(function(){ 163 delete this._animateNumberSetter; 164 }); 165 166 if ( generic_complete ) { 167 generic_complete.apply(this, arguments); 168 } 169 }; 170 } 171 172 return target.animate.apply(target, args); 173 }; 174 175}(jQuery));
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.