PageSourceSearch

https://www.studioformat.it/wp-content/plugins/spring-framework/sh…/counter/assets/js/countUp.js?ver=3.1

js studioformat.it collected 2026-10-05 11:38:22 UTC 8,484 bytes, 250 lines download raw bytes

vendor: 6,281 bytes, lines 1-171
1
2(function(root, factory) {
3  if (typeof define === 'function' && define.amd) {
4    define(factory);
5  } else if (typeof exports === 'object') {
6    module.exports = factory(require, exports, module);
7  } else {
8    root.CountUp = factory();
9  }
10}(this, function(require, exports, module) {
11
12/*
13
14    countUp.js
15    by @inorganik
16
17*/
18
19// target = id of html element or var of previously selected html element where counting occurs
20// startVal = the value you want to begin at
21// endVal = the value you want to arrive at
22// decimals = number of decimal places, default 0
23// duration = duration of animation in seconds, default 2
24// options = optional object of options (see below)
25
26var CountUp = function(target, startVal, endVal, decimals, duration, options) {
27
28    // make sure requestAnimationFrame and cancelAnimationFrame are defined
29    // polyfill for browsers without native support
30    // by Opera engineer Erik Möller
31    var lastTime = 0;
32    var vendors = ['webkit', 'moz', 'ms', 'o'];
33    for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
34        window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];
35        window.cancelAnimationFrame =
36          window[vendors[x]+'CancelAnimationFrame'] || window[vendors[x]+'CancelRequestAnimationFrame'];
37    }
38    if (!window.requestAnimationFrame) {
39        window.requestAnimationFrame = function(callback, element) {
40            var currTime = new Date().getTime();
41            var timeToCall = Math.max(0, 16 - (currTime - lastTime));
42            var id = window.setTimeout(function() { callback(currTime + timeToCall); },
43              timeToCall);
44            lastTime = currTime + timeToCall;
45            return id;
46        };
47    }
48    if (!window.cancelAnimationFrame) {
49        window.cancelAnimationFrame = function(id) {
50            clearTimeout(id);
51        };
52    }
53
54    var self = this;
55
56     // default options
57    self.options = {
58        useEasing : true, // toggle easing
59        useGrouping : true, // 1,000,000 vs 1000000
60        separator : ',', // character to use as a separator
61        decimal : '.', // character to use as a decimal
62        easingFn: null, // optional custom easing closure function, default is Robert Penner's easeOutExpo
63        formattingFn: null // optional custom formatting function, default is self.formatNumber below
64    };
65    // extend default options with passed options object
66    for (var key in options) {
67        if (options.hasOwnProperty(key)) {
68            self.options[key] = options[key];
69        }
70    }
71    if (self.options.separator === '') { self.options.useGrouping = false; }
72    if (!self.options.prefix) self.options.prefix = '';
73    if (!self.options.suffix) self.options.suffix = '';
74
75    self.d = (typeof target === 'string') ? document.getElementById(target) : target;
76    self.startVal = Number(startVal);
77    self.endVal = Number(endVal);
78    self.countDown = (self.startVal > self.endVal);
79    self.frameVal = self.startVal;
80    self.decimals = Math.max(0, decimals || 0);
81    self.dec = Math.pow(10, self.decimals);
82    self.duration = Number(duration) * 1000 || 2000;
83
84    self.formatNumber = function(nStr) {
85        nStr = nStr.toFixed(self.decimals);
86        nStr += '';
87        var x, x1, x2, rgx;
88        x = nStr.split('.');
89        x1 = x[0];
90        x2 = x.length > 1 ? self.options.decimal + x[1] : '';
91        rgx = /(\d+)(\d{3})/;
92        if (self.options.useGrouping) {
93            while (rgx.test(x1)) {
94                x1 = x1.replace(rgx, '$1' + self.options.separator + '$2');
95            }
96        }
97        return self.options.prefix + x1 + x2 + self.options.suffix;
98    };
99    // Robert Penner's easeOutExpo
100    self.easeOutExpo = function(t, b, c, d) {
101        return c * (-Math.pow(2, -10 * t / d) + 1) * 1024 / 1023 + b;
102    };
103
104    self.easingFn = self.options.easingFn ? self.options.easingFn : self.easeOutExpo;
105    self.formattingFn = self.options.formattingFn ? self.options.formattingFn : self.formatNumber;
106
107    self.version = function () { return '1.7.1'; };
108
109    // Print value to target
110    self.printValue = function(value) {
111        var result = self.formattingFn(value);
112
113        if (self.d.tagName === 'INPUT') {
114            this.d.value = result;
115        }
116        else if (self.d.tagName === 'text' || self.d.tagName === 'tspan') {
117            this.d.textContent = result;
118        }
119        else {
120            this.d.innerHTML = result;
121        }
122    };
123
124    self.count = function(timestamp) {
125
126        if (!self.startTime) { self.startTime = timestamp; }
127
128        self.timestamp = timestamp;
129        var progress = timestamp - self.startTime;
130        self.remaining = self.duration - progress;
131
132        // to ease or not to ease
133        if (self.options.useEasing) {
134            if (self.countDown) {
135                self.frameVal = self.startVal - self.easingFn(progress, 0, self.startVal - self.endVal, self.duration);
136            } else {
137                self.frameVal = self.easingFn(progress, self.startVal, self.endVal - self.startVal, self.duration);
138            }
139        } else {
140            if (self.countDown) {
141                self.frameVal = self.startVal - ((self.startVal - self.endVal) * (progress / self.duration));
142            } else {
143                self.frameVal = self.startVal + (self.endVal - self.startVal) * (progress / self.duration);
144            }
145        }
146
147        // don't go past endVal since progress can exceed duration in the last frame
148        if (self.countDown) {
149            self.frameVal = (self.frameVal < self.endVal) ? self.endVal : self.frameVal;
150        } else {
151            self.frameVal = (self.frameVal > self.endVal) ? self.endVal : self.frameVal;
152        }
153
154        // decimal
155        self.frameVal = Math.round(self.frameVal*self.dec)/self.dec;
156
157        // format and print value
158        self.printValue(self.frameVal);
159
160        // whether to continue
161        if (progress < self.duration) {
162            self.rAF = requestAnimationFrame(self.count);
163        } else {
164            if (self.callback) { self.callback(); }
165        }
166    };
167    // start your animation
168    self.start = function(callback) {
169        self.callback = callback;
170        self.rAF = requestAnimationFrame(self.count);
171        return false;
172    };
173    // toggles pause/resume animation
174    self.pauseResume = function() {
175        if (!self.paused) {
176            self.paused = true;
177            cancelAnimationFrame(self.rAF);
178        } else {
179            self.paused = false;
180            delete self.startTime;
181            self.duration = self.remaining;
182            self.startVal = self.frameVal;
183            requestAnimationFrame(self.count);
184        }
185    };
186    // reset to startVal so animation can be run again
187    self.reset = function() {
188        self.paused = false;
189        delete self.startTime;
190        self.startVal = startVal;
191        cancelAnimationFrame(self.rAF);
192        self.printValue(self.startVal);
193    };
194    // pass a new endVal and start animation
195    self.update = function (newEndVal) {
196        cancelAnimationFrame(self.rAF);
197        self.paused = false;
198        delete self.startTime;
199        self.startVal = self.frameVal;
200        self.endVal = Number(newEndVal);
201        self.countDown = (self.startVal > self.endVal);
202        self.rAF = requestAnimationFrame(self.count);
203    };
204
205    // format startVal on initialization
206    self.printValue(self.startVal);
207};
208
209return CountUp;
210
211}));
212
213(function ($) {
214	"use strict";
215	$(document).ready(function(){
216		if (typeof Waypoint !== 'undefined') {
217			$('.gsf-counter .counterup').waypoint(function () {
218				var start=$(this.element).data('start');
219				var end=$(this.element).data('end');
220				var decimals=$(this.element).data('decimals');
221				var duration=$(this.element).data('duration');
222				var separator=$(this.element).data('separator');
223				var usegrouping=false;
224				if(separator!='')
225				{
226					usegrouping=true
227				}
228				var decimal=$(this.element).data('decimal');
229				var prefix=$(this.element).data('prefix');
230				var suffix=$(this.element).data('suffix');
231				var options = {
232					useEasing : true,
233					useGrouping : usegrouping,
234					separator : separator,
235					decimal : decimal,
236					prefix : prefix,
237					suffix : suffix
238				};
239				var counterup = new CountUp(this.element,start, end, decimals, duration, options);
240				counterup.start();
241				this.destroy();
242			}, {
243				triggerOnce: true,
244				offset     : 'bottom-in-view'
245			});
246		}
247	});
248	
249})(jQuery);
250

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.