From c0e3d5e30b5cc2a8533ae59e6a7f37ab5d6477e6 Mon Sep 17 00:00:00 2001 From: Peter Dave Hello Date: Sat, 8 Nov 2014 15:40:40 +0800 Subject: [PATCH] add jquery.downCount --- .../1.0.0/jquery.downCount.js | 104 ++++++++++++++++++ .../1.0.0/jquery.downCount.min.js | 1 + ajax/libs/jquery.downCount/package.json | 36 ++++++ 3 files changed, 141 insertions(+) create mode 100644 ajax/libs/jquery.downCount/1.0.0/jquery.downCount.js create mode 100644 ajax/libs/jquery.downCount/1.0.0/jquery.downCount.min.js create mode 100644 ajax/libs/jquery.downCount/package.json diff --git a/ajax/libs/jquery.downCount/1.0.0/jquery.downCount.js b/ajax/libs/jquery.downCount/1.0.0/jquery.downCount.js new file mode 100644 index 000000000..eee90bd48 --- /dev/null +++ b/ajax/libs/jquery.downCount/1.0.0/jquery.downCount.js @@ -0,0 +1,104 @@ +/** + * downCount: Simple Countdown clock with offset + * Author: Sonny T. , sonnyt.com + */ + +(function ($) { + + $.fn.downCount = function (options, callback) { + var settings = $.extend({ + date: null, + offset: null + }, options); + + // Throw error if date is not set + if (!settings.date) { + $.error('Date is not defined.'); + } + + // Throw error if date is set incorectly + if (!Date.parse(settings.date)) { + $.error('Incorrect date format, it should look like this, 12/24/2012 12:00:00.'); + } + + // Save container + var container = this; + + /** + * Change client's local date to match offset timezone + * @return {Object} Fixed Date object. + */ + var currentDate = function () { + // get client's current date + var date = new Date(); + + // turn date to utc + var utc = date.getTime() + (date.getTimezoneOffset() * 60000); + + // set new Date object + var new_date = new Date(utc + (3600000*settings.offset)) + + return new_date; + }; + + /** + * Main downCount function that calculates everything + */ + function countdown () { + var target_date = new Date(settings.date), // set target date + current_date = currentDate(); // get fixed current date + + // difference of dates + var difference = target_date - current_date; + + // if difference is negative than it's pass the target date + if (difference < 0) { + // stop timer + clearInterval(interval); + + if (callback && typeof callback === 'function') callback(); + + return; + } + + // basic math variables + var _second = 1000, + _minute = _second * 60, + _hour = _minute * 60, + _day = _hour * 24; + + // calculate dates + var days = Math.floor(difference / _day), + hours = Math.floor((difference % _day) / _hour), + minutes = Math.floor((difference % _hour) / _minute), + seconds = Math.floor((difference % _minute) / _second); + + // fix dates so that it will show two digets + days = (String(days).length >= 2) ? days : '0' + days; + hours = (String(hours).length >= 2) ? hours : '0' + hours; + minutes = (String(minutes).length >= 2) ? minutes : '0' + minutes; + seconds = (String(seconds).length >= 2) ? seconds : '0' + seconds; + + // based on the date change the refrence wording + var ref_days = (days === 1) ? 'day' : 'days', + ref_hours = (hours === 1) ? 'hour' : 'hours', + ref_minutes = (minutes === 1) ? 'minute' : 'minutes', + ref_seconds = (seconds === 1) ? 'second' : 'seconds'; + + // set to DOM + container.find('.days').text(days); + container.find('.hours').text(hours); + container.find('.minutes').text(minutes); + container.find('.seconds').text(seconds); + + container.find('.days_ref').text(ref_days); + container.find('.hours_ref').text(ref_hours); + container.find('.minutes_ref').text(ref_minutes); + container.find('.seconds_ref').text(ref_seconds); + }; + + // start + var interval = setInterval(countdown, 1000); + }; + +})(jQuery); \ No newline at end of file diff --git a/ajax/libs/jquery.downCount/1.0.0/jquery.downCount.min.js b/ajax/libs/jquery.downCount/1.0.0/jquery.downCount.min.js new file mode 100644 index 000000000..b624940c7 --- /dev/null +++ b/ajax/libs/jquery.downCount/1.0.0/jquery.downCount.min.js @@ -0,0 +1 @@ +!function(e){e.fn.downCount=function(t,n){function r(){var e=new Date(o.date),t=i(),r=e-t;if(0>r)return clearInterval(a),void(n&&"function"==typeof n&&n());var d=1e3,s=60*d,u=60*s,l=24*u,h=Math.floor(r/l),c=Math.floor(r%l/u),g=Math.floor(r%u/s),v=Math.floor(r%s/d);h=String(h).length>=2?h:"0"+h,c=String(c).length>=2?c:"0"+c,g=String(g).length>=2?g:"0"+g,v=String(v).length>=2?v:"0"+v;var x=1===h?"day":"days",m=1===c?"hour":"hours",y=1===g?"minute":"minutes",D=1===v?"second":"seconds";f.find(".days").text(h),f.find(".hours").text(c),f.find(".minutes").text(g),f.find(".seconds").text(v),f.find(".days_ref").text(x),f.find(".hours_ref").text(m),f.find(".minutes_ref").text(y),f.find(".seconds_ref").text(D)}var o=e.extend({date:null,offset:null},t);o.date||e.error("Date is not defined."),Date.parse(o.date)||e.error("Incorrect date format, it should look like this, 12/24/2012 12:00:00.");var f=this,i=function(){var e=new Date,t=e.getTime()+6e4*e.getTimezoneOffset(),n=new Date(t+36e5*o.offset);return n},a=setInterval(r,1e3)}}(jQuery); \ No newline at end of file diff --git a/ajax/libs/jquery.downCount/package.json b/ajax/libs/jquery.downCount/package.json new file mode 100644 index 000000000..7caa56b7d --- /dev/null +++ b/ajax/libs/jquery.downCount/package.json @@ -0,0 +1,36 @@ +{ + "name": "jquery.downCount", + "version": "1.0.0", + "filename": "jquery.downCount.min.js", + "title": "downCount - Simple Countdown clock with offset", + "description": "Simple countdown plugin that accounts for timezone", + "keywords": [ + "countdown", + "timezone", + "offset" + ], + "author": { + "name": "Sonny T.", + "url": "https://sonnyt.com" + }, + "licenses": [ + { + "type": "MIT", + "url": "http://ionden.com/a/licence-en.html" + } + ], + "homepage": "http://sonnyt.com/downCount-plugin/", + "docs": "https://github.com/sonnyt/downCount#downCount", + "demo": "http://sonnyt.com/downCount", + "dependencies": { + "jquery": ">=1.7" + }, + "autoupdate": { + "source": "git", + "target": "git://github.com/sonnyt/downCount.git", + "basePath": "", + "files": [ + "jquery.downCount.js" + ] + } +}