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.