diff --git a/dist/timer.jquery.min.js b/dist/timer.jquery.min.js index ba847d0..3145617 100644 --- a/dist/timer.jquery.min.js +++ b/dist/timer.jquery.min.js @@ -1 +1 @@ -/*! timer.jquery 0.2.3 2015-01-01*/!function(a){function b(){p=setInterval(d,500),t=!0}function c(){clearInterval(p),t=!1}function d(){s=g()-q,e(),u&&s===u&&(v.callback(),v.repeat&&(u+=v.duration))}function e(){r[w](i(s)),r.data("seconds",s)}function f(){r.on("focus",function(){l()}),r.on("blur",function(){var a,b=r[w]();b.indexOf("sec")>0?s=Number(b.replace(/\ssec/g,"")):b.indexOf("min")>0?(b=b.replace(/\smin/g,""),a=b.split(":"),s=Number(60*a[0])+Number(a[1])):b.match(/\d{1,2}:\d{2}:\d{2}/)&&(a=b.split(":"),s=Number(3600*a[0])+Number(60*a[1])+Number(a[2])),m()})}function g(){return Math.round((new Date).getTime()/1e3)}function h(a){var b,c=0,d=Math.floor(a/60);return a>=3600&&(c=Math.floor(a/3600)),a>=3600&&(d=Math.floor(a%3600/60)),10>d&&c>0&&(d="0"+d),b=a%60,10>b&&(d>0||c>0)&&(b="0"+b),{hours:c,minutes:d,seconds:b}}function i(a){var b="",c=h(a);return b=c.hours?c.hours+":"+c.minutes+":"+c.seconds:c.minutes?c.minutes+":"+c.seconds+" min":c.seconds+" sec"}function j(a){if(!isNaN(Number(a)))return a;var b=a.match(/\d{1,2}h/),c=a.match(/\d{1,2}m/),d=a.match(/\d{1,2}s/),e=0;return a=a.toLowerCase(),b&&(e+=3600*Number(b[0].replace("h",""))),c&&(e+=60*Number(c[0].replace("m",""))),d&&(e+=Number(d[0].replace("s",""))),e}function k(){t||(e(),b())}function l(){t&&c()}function m(){t||(q=g()-s,b())}function n(){q=g(),s=0,u=v.duration}function o(){c(),r.data("plugin_"+y,null),r.data("seconds",null),r[w]("")}var p,q,r,s=0,t=!1,u=null,v={seconds:0,editable:!1,restart:!1,duration:null,callback:function(){alert("Time up!"),c()},repeat:!1},w="html",x=function(b,c){var d;v=a.extend(v,c),r=a(b),s=v.seconds,q=g()-s,r.data("seconds",s),d=r.prop("tagName").toLowerCase(),("input"===d||"textarea"===d)&&(w="val"),v.duration&&(u=v.duration=j(v.duration)),v.editable&&f()};x.prototype={start:function(){k()},pause:function(){l()},resume:function(){m()},reset:function(){n()},remove:function(){o()}};var y="timer";a.fn[y]=function(b){return b=b||"start",this.each(function(){a.data(this,"plugin_"+y)instanceof x||a.data(this,"plugin_"+y,new x(this,b));var c=a.data(this,"plugin_"+y);"string"==typeof b&&"function"==typeof c[b]&&c[b].call(c),"object"==typeof b&&c.start.call(c)})}}(jQuery); \ No newline at end of file +/*! timer.jquery 0.2.3 2015-03-17*/!function(a){function b(){p=setInterval(d,500),t=!0}function c(){clearInterval(p),t=!1}function d(){s=g()-q,e(),u&&s===u&&(v.callback(),v.repeat&&(u+=v.duration))}function e(){var a=s;v.countdown&&u>0&&(a=u-s),r[w](i(a)),r.data("seconds",a)}function f(){r.on("focus",function(){l()}),r.on("blur",function(){var a,b=r[w]();b.indexOf("sec")>0?s=Number(b.replace(/\ssec/g,"")):b.indexOf("min")>0?(b=b.replace(/\smin/g,""),a=b.split(":"),s=Number(60*a[0])+Number(a[1])):b.match(/\d{1,2}:\d{2}:\d{2}/)&&(a=b.split(":"),s=Number(3600*a[0])+Number(60*a[1])+Number(a[2])),m()})}function g(){return Math.round((new Date).getTime()/1e3)}function h(a){var b,c=0,d=Math.floor(a/60);return a>=3600&&(c=Math.floor(a/3600)),a>=3600&&(d=Math.floor(a%3600/60)),10>d&&c>0&&(d="0"+d),b=a%60,10>b&&(d>0||c>0)&&(b="0"+b),{hours:c,minutes:d,seconds:b}}function i(a){var b="",c=h(a);return b=c.hours?c.hours+":"+c.minutes+":"+c.seconds:c.minutes?c.minutes+":"+c.seconds+" min":c.seconds+" sec"}function j(a){if(!isNaN(Number(a)))return a;var b=a.match(/\d{1,2}h/),c=a.match(/\d{1,2}m/),d=a.match(/\d{1,2}s/),e=0;return a=a.toLowerCase(),b&&(e+=3600*Number(b[0].replace("h",""))),c&&(e+=60*Number(c[0].replace("m",""))),d&&(e+=Number(d[0].replace("s",""))),e}function k(){t||(e(),b())}function l(){t&&c()}function m(){t||(q=g()-s,b())}function n(){q=g(),s=0,r.data("seconds",s),u=v.duration}function o(){c(),r.data("plugin_"+y,null),r.data("seconds",null),r[w]("")}var p,q,r,s=0,t=!1,u=null,v={seconds:0,editable:!1,restart:!1,duration:null,callback:function(){alert("Time up!"),c()},repeat:!1,countdown:!1},w="html",x=function(b,c){var d;v=a.extend(v,c),r=a(b),s=v.seconds,q=g()-s,r.data("seconds",s),d=r.prop("tagName").toLowerCase(),("input"===d||"textarea"===d)&&(w="val"),v.duration&&(u=v.duration=j(v.duration)),v.editable&&f()};x.prototype={start:function(){k()},pause:function(){l()},resume:function(){m()},reset:function(){n()},remove:function(){o()}};var y="timer";a.fn[y]=function(b){return b=b||"start",this.each(function(){a.data(this,"plugin_"+y)instanceof x||a.data(this,"plugin_"+y,new x(this,b));var c=a.data(this,"plugin_"+y);"string"==typeof b&&"function"==typeof c[b]&&c[b].call(c),"object"==typeof b&&c.start.call(c)})}}(jQuery); \ No newline at end of file diff --git a/src/timer.jquery.js b/src/timer.jquery.js index 236439c..1f3a1b3 100644 --- a/src/timer.jquery.js +++ b/src/timer.jquery.js @@ -70,12 +70,14 @@ * Render pretty time */ function render() { + var sec = totalSeconds; + if (options.countdown && duration > 0) { - $el[display](secondsToTime(duration - totalSeconds)); - } else { - $el[display](secondsToTime(totalSeconds)); + sec = duration - totalSeconds; } - $el.data('seconds', totalSeconds); + + $el[display](secondsToTime(sec)); + $el.data('seconds', sec); } function makeEditable() { @@ -265,7 +267,6 @@ duration = options.duration = timeToSeconds(options.duration); } - if (options.editable) { makeEditable(); } diff --git a/test/timer.jquery.test.js b/test/timer.jquery.test.js index eb731ea..a442cd3 100644 --- a/test/timer.jquery.test.js +++ b/test/timer.jquery.test.js @@ -4,6 +4,27 @@ scenarios = [], count = 0; // To print 'Done! on completion of tests + /*test('timer supports countdown', function() { + $('#timer').timer({ + duration: '3s', + countdown: true, + callback: function() { + $('#timer').timer('pause'); + } + }); + + // Pause test momentarily + stop(); + + // Check value of callbackExecuted in 3 seconds (+ minor offset to run assertion comfortably) + setTimeout(function() { + equal($('#timer').data('seconds'), 0, 'Timer counts down to 0 seconds if countdown was enabled.'); + $('#timer').val('').timer('remove'); + + start(); + }, 3500); + });*/ + // Timer resets to 0 seconds if reset was called test('timer resets to 0 seconds if reset was called', function() { $('#timer').timer({ @@ -142,7 +163,7 @@ equal(callbackExecuted, true, 'Timer translates duration of 5h30m10s correctly.'); $('#timer').val('').timer('remove'); - start(); + start(); }, 2500); });