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