PageSourceSearch

https://tachetareas.com/assets/plugins/countdown/jquery.syotimer.js

js tachetareas.com collected 2026-10-05 23:42:35 UTC 10,358 bytes, 227 lines download raw bytes

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.