1/** 2 * jquery.syotimer.js 3 * @version: v1.0.1 4 * @author: John Syomochkin 5 * @url: https://github.com/mrfratello/SyoTimer 6 * 7 * Created by John Syomochkin on 2014-12-10. 8 * 9 * 10 * The MIT License (MIT) 11 * 12 * Copyright (c) 2014 John Syomochkin 13 * 14 * Permission is hereby granted, free of charge, to any person obtaining a copy 15 * of this software and associated documentation files (the "Software"), to deal 16 * in the Software without restriction, including without limitation the rights 17 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 18 * copies of the Software, and to permit persons to whom the Software is 19 * furnished to do so, subject to the following conditions: 20 * 21 * The above copyright notice and this permission notice shall be included in 22 * all copies or substantial portions of the Software. 23 * 24 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 25 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 26 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 27 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 28 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 29 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 30 * THE SOFTWARE. 31 */ 32 33(function($){ 34 var day_ms = 24 * 60 * 60, 35 hour_ms = 60 * 60, 36 minute_ms = 60, 37 38 lang = { 39 rus: { 40 second: ['ÑекÑнда', 'ÑекÑндÑ', 'ÑекÑнд'], 41 minute: ['минÑÑа', 'минÑÑÑ', 'минÑÑ'], 42 hour: ['ÑаÑ', 'ÑаÑа', 'ÑаÑов'], 43 day: ['денÑ', 'днÑ', 'дней'] 44 }, 45 eng: { 46 second: ['second', 'seconds'], 47 minute: ['minute', 'minutes'], 48 hour: ['hour', 'hours'], 49 day: ['day', 'days'], 50 }, 51 }; 52 $.fn.syotimer = function(options){ 53 // ÑÑÑановки по ÑмолÑÐ°Ð½Ð¸Ñ 54 defaultTimer = { 55 year: 2014, 56 month: 7, 57 day: 31, 58 hour: 0, 59 minute: 0, 60 second: 0, 61 62 periodic: false, // true - ÑÐ°Ð¹Ð¼ÐµÑ Ð¿ÐµÑиодиÑнÑй 63 periodInterval: 7, // (еÑли periodic ÑÑÑановлен как true) пеÑиод ÑаймеÑа. ÐдиниÑа измеÑÐµÐ½Ð¸Ñ ÑказÑваеÑÑÑ Ð² periodType 64 periodUnit: 'd', // единиÑа измеÑÐµÐ½Ð¸Ñ Ð¿ÐµÑиода ÑаймеÑа 65 66 dayVisible: true, // показÑваÑÑ Ð»Ð¸ колиÑеÑÑво дней, еÑли неÑ, Ñо колиÑеÑÑво ÑаÑов Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑевÑÑаÑÑ 23 67 dubleNumbers: true, // показÑваÑÑ ÑаÑÑ, минÑÑÑ Ð¸ ÑекÑÐ½Ð´Ñ Ñ Ð²ÐµÐ´ÑÑими нолÑми ( 2ÑаÑа 5минÑÑ 4ÑекÑÐ½Ð´Ñ = 02:05:04) 68 effectType: 'none', // ÑÑÑÐµÐºÑ Ð¾ÑÑÑеÑа ÑаймеÑа: 'none' - Ð½ÐµÑ ÑÑÑекÑа, 'opacity' - вÑÑвеÑание 69 lang: 'eng', 70 71 headTitle: '', // ÑекÑÑ Ð½Ð°Ð´ ÑаймеÑом (можно в HTML ÑоÑмаÑе) 72 footTitle: '', // ÑекÑÑ Ð¿Ð¾Ð´ ÑаймеÑом (можно в HTML ÑоÑмаÑе) 73 afterDeadline: function(timerBlock){ 74 timerBlock.bodyBlock.html('<p style="font-size: 1.2em;">The countdown is finished!</p>'); 75 } 76 }; 77 // иниÑиалиаÑÐ¸Ñ Ð¿Ð°ÑамеÑÑов полÑзоваÑÐµÐ»Ñ 78 var settings = $.extend(defaultTimer, options || {}); 79 80 // иниÑиализаÑÐ¸Ñ Ð¿ÑоÑÐ¸Ñ Ð¿ÐµÑеменнÑÑ 81 var el = this; 82 83 return el.each(function(){ 84 // иниÑиализаÑÐ¸Ñ Ð¿Ð»Ð°Ð³Ð¸Ð½Ð° 85 var obj = $(this); 86 init(obj,settings); 87 88 (function timeout(){ 89 $('.second .tab-val',obj).css('opacity',1); 90 Now = new Date(); // ÑекÑÑÐ°Ñ Ð´Ð°Ñа 91 DeadDate = new Date(settings.year, settings.month-1, settings.day, settings.hour, settings.minute, settings.second); // конÑÑолÑÐ½Ð°Ñ Ð´Ð°Ñа 92 93 different = Math.floor((DeadDate.getTime()-Now.getTime())/1000); 94 if ( settings.periodic ){ // еÑли надо оÑÑÑиÑÑваÑÑ ÑÐ°Ð¹Ð¼ÐµÑ Ð¿Ð¾ пеÑÐ¸Ð¾Ð´Ñ 95 96 // опÑеделÑем единиÑÑ Ð¸Ð·Ð¼ÐµÑÐµÐ½Ð¸Ñ Ð¿ÐµÑиода ÑаймеÑа 97 switch (settings.periodUnit){ 98 case 'd': unit_ms = day_ms; break; 99 case 'h': unit_ms = hour_ms; break; 100 case 'm': unit_ms = minute_ms; break; 101 case 's': unit_ms = 1; break; 102 } 103 104 differentUnits = Math.abs( Math.ceil( (DeadDate.getTime()-Now.getTime())/(unit_ms*1000) ) ); // кол-во полнÑÑ ÐµÐ´Ð¸Ð½Ð¸Ñ Ð²Ñемени Ð¼ÐµÐ¶Ð´Ñ ÑекÑÑей даÑой и дедлайном 105 106 if ( different>=0 ){ 107 dUnits = differentUnits%settings.periodInterval; 108 dUnits = (dUnits==0)? settings.periodInterval-1 : dUnits-1; 109 } else 110 dUnits = settings.periodInterval-differentUnits%settings.periodInterval; 111 112 addUnits = different%unit_ms; 113 114 // fix когда дедлайн ÑанÑÑе ÑекÑÑей даÑÑ, Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Ð±Ð°Ð³ Ñ Ð½ÐµÐ¿ÑавилÑнÑм ÑаÑÑеÑом инÑеÑвала пÑи different пÑопоÑÑионалÑной peri
114odUnit 115 if ( ( addUnits == 0 ) && ( different < 0 ) ) 116 dUnits--; 117 118 alls = Math.abs( dUnits * unit_ms + addUnits ); 119 120 } else 121 alls = different; 122 123 // колиÑеÑÑво ÑекÑнд до дедлайна (alls) пÑи налиÑии 124 if ( alls >= 0 ){ 125 dd = Math.floor(alls/day_ms); 126 127 alls = alls%day_ms; 128 dh = Math.floor(alls/hour_ms); 129 130 alls = alls%hour_ms; 131 dm = Math.floor(alls/minute_ms); 132 133 alls = alls%minute_ms; 134 ds = Math.floor(alls); 135 136 if ( settings.dayVisible ){ 137 $('.day .tab-val',obj).html(dd); 138 $('.day .tab-metr',obj).html(declOfNum(dd, lang[settings.lang].day, settings.lang)); 139 140 $('.hour .tab-val',obj).html(format2(dh, settings.dubleNumbers)); 141 $('.hour .tab-metr',obj).html(declOfNum(dh, lang[settings.lang].hour, settings.lang)); 142 } else { 143 dh+=dd*24; 144 $('.hour .tab-val',obj).html(format2(dh, settings.dubleNumbers)); 145 $('.hour .tab-metr',obj).html(declOfNum(dh, lang[settings.lang].hour, settings.lang)); 146 } 147 148 $('.minute .tab-val',obj).html(format2(dm, settings.dubleNumbers)); 149 $('.minute .tab-metr',obj).html(declOfNum(dm, lang[settings.lang].minute, settings.lang)); 150 151 $('.second .tab-val',obj).html(format2(ds, settings.dubleNumbers)); 152 $('.second .tab-metr',obj).html(declOfNum(ds, lang[settings.lang].second, settings.lang)); 153 154 switch ( settings.effectType ){ 155 case 'none': 156 setTimeout( function(){ 157 timeout(); 158 },1000); 159 break; 160 case 'opacity': 161 $('.second .tab-val',obj).animate({opacity: 0.1 }, 1000, 'linear', timeout); 162 break; 163 } 164 165 } else { 166 settings.afterDeadline(obj); 167 } 168 169 })(); 170 }); 171 }; 172 173 function init(elem,options){ // ÑÑÑановка html ÑазмеÑки в блоке Ñ ÑаймеÑом 174 timer_html='<div class="timer-head-block">'+options.headTitle+'</div>'; 175 timer_html+='<div class="timer-body-block">'; 176 if ( options.dayVisible ){ 177 timer_html+='\ 178 <div class="table-cell day">\ 179 <div class="tab-val">0</div>\ 180 <div class="tab-metr"></div>\ 181 </div>'; 182 } 183 timer_html+='\ 184 <div class="table-cell hour">\ 185 <div class="tab-val">00</div>\ 186 <div class="tab-metr"></div>\ 187 </div>\ 188 <div class="table-cell minute">\ 189 <div class="tab-val">00</div>\ 190 <div class="tab-metr"></div>\ 191 </div>\ 192 <div class="table-cell second">\ 193 <div class="tab-val">00</div>\ 194 <div class="tab-metr"></div>\ 195 </div>'; 196 197 timer_html+='</div>'; 198 timer_html+='<div class="timer-foot-block">'+options.footTitle+'</div>'; 199 200 elem.addClass('timer').html(timer_html); 201 202 headBlock=$('.timer-head-block',elem); 203 bodyBlock=$('.timer-body-block',elem); 204 footBlock=$('.timer-foot-block',elem); 205 timerBlocks={ 206 headBlock:headBlock, 207 bodyBlock:bodyBlock, 208 footBlock:footBlock, 209 }; 210 elem=$.extend(elem, timerBlocks); 211 } 212 function format2(ANumber, isUse){ // ÑоÑмиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑиÑел Ñ Ð²ÐµÐ´ÑÑими нÑлÑми 213 isUse = (isUse=='') ? isUse : true; 214 return ( (ANumber<=9) && isUse)? ("0"+ANumber) : (""+ANumber); 215 } 216 function declOfNum(number, titles, lang){ // ÑÑÑановка пÑавилÑного ÑÐºÐ»Ð¾Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾Ñле ÑиÑлиÑелÑнÑÑ 217 switch (lang){ 218 case 'rus': 219 cases = [2, 0, 1, 1, 1, 2]; 220 return titles[ (number%100>4 && number%100<20) ? 2 : cases[(number%10<5) ? number%10 : 5] ]; 221 case 'eng': 222 return titles[ ( number == 1 ) ? 0 : 1 ]; 223 } 224 } 225})(jQuery); 226 227//============================== triger sidebar =========================
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.