/*______________ | ______ | U I Z E J A V A S C R I P T F R A M E W O R K | / / | --------------------------------------------------- | / O / | MODULE : Uize.Widget.EggTimer Class | / / / | | / / / /| | ONLINE : http://uize.com | /____/ /__/_| | COPYRIGHT : (c)2005-2016 UIZE | /___ | LICENSE : Available under MIT License or GNU General Public License |_______________| http://uize.com/license.html */ /* Module Meta Data type: Class importance: 2 codeCompleteness: 100 docCompleteness: 2 */ /*? Introduction The =Uize.Widget.EggTimer= class implements a countdown timer widget (or egg timer), where digits flip at intervals using a JavaScript animation effect. *DEVELOPERS:* `Jan Borgersen`, original code contributed by `Zazzle Inc.` */ Uize.module ({ name:'Uize.Widget.EggTimer', required:'Uize.Widget.Count', builder:function (_superclass) { 'use strict'; return _superclass.subclass ({ alphastructor:function () { var m = this; /*** Private Instance Properties ***/ m._timeout = null; m._running = false; m._callAdvance = function () {m.advance ()}; }, instanceMethods:{ advance:function () { var m = this; if( m._running ) { m.children.seconds.down(); m._timeout = setTimeout( m._callAdvance, 1000 ); } }, resetTo:function (_timeObject) { var m = this; m._running = false; m.set ({startTime:_timeObject}); m._showSeconds && m.children.seconds.setCount( _timeObject.seconds ); m._showMinutes && m.children.minutes.setCount( _timeObject.minutes ); m._showHours && m.children.hours.setCount( _timeObject.hours ); m._showDays && m.children.days.setCount( _timeObject.days ); }, reset:function () { this.resetTo(this._startTime); }, resume:function () { var m = this; m._running = true; m._timeout = setTimeout( m._callAdvance, 1000 ); }, stop:function () { this._running = false; }, wireUi:function () { var m = this; if (!m.isWired) { var _idPrefix = m.get ('idPrefix'), _newCount = function (_name, _count, _limit) { var _countWidget = m.addChild ( _name, Uize.Widget.Count, { digits: 2, limit: _limit, numbersImagesPath:m._numbersImagesPath, numbersFiletype:m._numbersFiletype } ); _countWidget.wireUi(); _countWidget.setCount( _count ); return _countWidget; }, _zero = function () { if( (!m._showMinutes || (m._showMinutes && !m.children.minutes.getCount())) && (!m._showHours || (m._showHours && !m.children.hours.getCount())) && (!m._showDays || (m._showDays && !m.children.days.getCount())) ) { m._running = false; m.fire('zero'); if(m._redirectUrl != '') document.location.href=m._redirectUrl; } } ; m._showSeconds && _newCount ('seconds',m._startTime.seconds,59) .wire ({ zero:_zero, limit:function () {m._showMinutes && m.children.minutes.down ()} }) ; m._showMinutes && _newCount ('minutes',m._startTime.minutes,59) .wire ('limit',function () {m._showHours && m.children.hours.down ()}) ; m._showHours && _newCount ('hours',m._startTime.hours,23) .wire ('limit',function () {m._showDays && m.children.days.down ()}) ; m._showDays && _newCount ('days',m._startTime.days,99) ; _superclass.doMy (m,'wireUi'); if( m._autoStart ) m.resume(); } } }, stateProperties:{ _autoStart:{ name:'autoStart', value:false }, _startTime:{ name:'startTime', value:{ days: 0, hours: 0, minutes: 0, seconds: 0 } }, _limit:{ name:'limit', value:{ days: 0, hours: 0, minutes: 0, seconds: 0 } }, _showDays:{ name:'showDays', value:true }, _showHours:{ name:'showHours', value:true }, _showMinutes:{ name:'showMinutes', value:true }, _showSeconds:{ name:'showSeconds', value:true }, _redirectUrl:{ name:'redirectUrl', value:'' }, _direction:{ name:'direction', value:'down' }, _numbersImagesPath:{ name:'numbersImagesPath', value:'' }, _numbersFiletype:{ name:'numbersFiletype', value:'gif' } } }); } });