PageSourceSearch

https://saratovreklama.ru/g/templates/shop2/widgets/js/timer.js

js saratovreklama.ru collected 2026-09-30 03:07:36 UTC 4,068 bytes, 132 lines download raw bytes

1(function( $ ){
2
3  $.fn.timer = function( options ) {  
4
5	var now = new Date();
6    var settings = $.extend( {
7		utc : (-now.getTimezoneOffset())/60,
8		language : 'ru',		
9		format_in : '%d.%M.%y %h:%m:%s',
10		format_out : '%d %h %m %s',
11		end_message : "00:00:00",
12		wrapChar: false,
13		onEnd : function () {},
14		change : true,
15		update_time : 1000,
16        onTimeChange: function() {}
17    }, options);
18
19
20
21    return this.each(function() {        
22		var obj = $(this);
23
24		var short = $.trim(obj.text());
25
26		var interval;
27		var lang = {
28				days : ['день','дня','дней'],
29				hours : ['час','часа','часов'],
30				minuts : ['минута','минуты','минут'],
31				seconds : ['секунда','секунды','секунд']
32		};
33
34		if (settings.language=='en') {
35			lang = {
36				days : ['day','days','days'],
37				hours : ['hour','hours','hours'],
38				minuts : ['minut','minuts','minuts'],
39				seconds : ['second','seconds','seconds']
40			};
41		}
42		var time_output = settings.end_message;
43
44		var inner = short.replace(/[^0-9]/g," ").split(' ');
45
46		var inner_format = settings['format_in'].replace(/[^%dMyhms]/g," ").split(' ');
47		var inner_array = [];
48		for (var i = 0; i < inner_format.length; i++) {
49			inner_array[inner_format[i]] = inner[i];
50		}
51		if (!inner_array['%y']) {
52			if(now > new Date(now.getFullYear(), inner_array['%M']-1, inner_array['%d'], inner_array['%h'],inner_array['%m'],inner_array['%s'])){
53				inner_array['%y'] = now.getFullYear() + 1;
54			}
55		}
56		var date_to = new Date(inner_array['%y'], (inner_array['%M']-1>=0?inner_array['%M']-1:now.getMonth()), inner_array['%d']||now.getDate()+1, inner_array['%h']||0, inner_array['%m']||0, inner_array['%s']||0);
57
58
59
60		function modifier_spellcount(num) {
61			var num_null = num<10?'0':'';
62			if (settings.wrapChar) {
63				var num = (num_null + num).toString().split('');
64				var res = '';
65
66				for (i = 0; i < num.length; i++) {
67					res += '<' + settings.wrapChar + '>' + num[i] + '</' + settings.wrapChar + '>';
68				}
69
70				return res;
71			}
72			return num_null + num;
73		}
74
75		function declension(number, one, two, five) {
76			number = Math.abs(number);
77		    number %= 100;
78		    if (number >= 5 && number <= 20) {
79		        return five;
80		    }
81		    number %= 10;
82		    if (number == 1) {
83		        return one;
84		    }
85		    if (number >= 2 && number <= 4) {
86		        return two;
87		    }
88		    return five;
89		}
90
91		function set_time() {
92			now = new Date();
93			var time_intervar = date_to - now - ((-now.getTimezoneOffset()*60000) - (settings.utc*3600*1000));
94			var days = Math.floor(time_intervar/3600/1000/24);
95			var hours = Math.floor(time_intervar/3600/1000) - Math.floor(time_intervar/3600/1000/24)*24;
96			var minuts = Math.floor(time_intervar/60/1000) - Math.floor(time_intervar/3600/1000)*60;
97			var seconds = Math.floor(time_intervar/1000) - Math.floor(time_intervar/60/1000)*60;
98			var daysName, hoursName, minutesName, secondsName;
99
100			if (time_intervar>0) {
101				
102				daysName = declension(days, lang.days[0], lang.days[1], lang.days[2]);
103				hoursName = declension(hours, lang.hours[0], lang.hours[1], lang.hours[2]);
104				minutesName = declension(minuts, lang.minuts[0], lang.minuts[1], lang.minuts[2]);
105				secondsName = declension(seconds, lang.seconds[0], lang.seconds[1], lang.seconds[2]);
106				days = modifier_spellcount(days);
107				hours = modifier_spellcount(hours);
108				minuts = modifier_spellcount(minuts);
109				seconds = modifier_spellcount(seconds);
110
111				time_output = settings['format_out']
112					.replace('%d', days)
113					.replace('%h', hours)
114					.replace('%m', minuts)
115					.replace('%s', seconds)
116					.replace(timerDays, daysName)
117					.replace(timerHours, hoursName)
118					.replace(timerMinutes, minutesName)
119					.replace(timerSeconds, secondsName);
120				obj.html(time_output);
121				settings.onTimeChange.call(obj);
122			}else{
123				obj.html(settings.end_message);
124				settings.onEnd.call(obj);
125				clearInterval(interval);
126			}
127		}
128		set_time();
129		if (settings.change) interval = window.setInterval(set_time,settings.update_time);
130    });
131  };
132})( 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.