/*______________
| ______ | 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.Count 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.Count= class implements a fancy number display, using images to represent digits, and using an animation effect when changing values.
*DEVELOPERS:* `Jan Borgersen`, `Chris van Rensburg`, original code contributed by `Zazzle Inc.`
*/
Uize.module ({
name:'Uize.Widget.Count',
required:'Uize.Widget.Flip',
builder:function (_superclass) {
'use strict';
/*** Private Instance Methods ***/
function _createContent (m, _number ) {
return (
m._numbersImagesPath
? '
'
: _number
);
}
function _update (m, _direction ) {
var
_tmpCount = m._count,
_children = m.children
;
for (var _digitsIndex = -1; ++_digitsIndex < m._digits;) {
_children ['digit' + _digitsIndex].changeContent( _createContent(m, _tmpCount % m._base ) , _direction );
_tmpCount = Math.floor(_tmpCount / m._base);
}
m._count || m.fire('zero');
m._count == m._limit && m.fire('limit');
}
return _superclass.subclass ({
instanceMethods:{
up:function () {
var m = this;
m.set ({_count:m._count==m._limit ? 0 : m._count + 1});
_update(m, 'up');
},
down:function () {
var m = this;
m.set ({_count:m._count==0 ? m._limit : m._count - 1});
_update(m, 'down');
},
getCount:function () {
return this._count;
},
setCount:function (_newCount) {
var m = this;
m.set ({_count:_newCount});
_update(m, 'up');
},
zero:function () {
var m = this;
m.set ({_count:0});
_update(m, 'down');
},
wireUi:function () {
var m = this;
if( !m.isWired ) {
for (var _digitsIndex = -1; ++_digitsIndex < m._digits;)
m.addChild ('digit' + _digitsIndex,Uize.Widget.Flip)
;
m._limit || m.set ({_limit:Math.pow(m._base,m._digits) - 1});
_superclass.doMy (m,'wireUi');
}
}
},
stateProperties:{
_count:{
name:'count',
value:0
},
_digits:{
name:'digits',
value:2
},
_limit:{
name:'limit',
value:0
},
_base:{
name:'base',
value:10
},
_numbersImagesPath:{
name:'numbersImagesPath',
value:''
},
_numbersFiletype:{
name:'numbersFiletype',
value:'gif'
}
}
});
}
});