Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
91 lines
2.2 KiB
JavaScript
Executable file
91 lines
2.2 KiB
JavaScript
Executable file
define(function(require) {
|
|
'use strict';
|
|
var Spinner = require('picker/spinner');
|
|
|
|
/**
|
|
* Picker
|
|
*
|
|
* Create an inline "picker", comprised of n "spinners".
|
|
*
|
|
* @param {Object} setup An object containing setup data.
|
|
* - element, The container element.
|
|
* - pickers, an object whose properties
|
|
* correspond to a Picker that will
|
|
* be created.
|
|
*
|
|
*
|
|
* new Picker({
|
|
* element: 'time-picker',
|
|
* pickers: {
|
|
* hours: {
|
|
* range: [0, 24],
|
|
* l10nId: 'nSpinnerHours'
|
|
* },
|
|
* minutes: {
|
|
* range: [0, 60],
|
|
* isPadded: true,
|
|
* l10nId: 'nSpinnerMinutes'
|
|
* }
|
|
* }
|
|
* });
|
|
*
|
|
*/
|
|
function Picker(setup) {
|
|
this.nodes = {};
|
|
this.spinners = {};
|
|
this.pickers = Object.keys(setup.pickers);
|
|
|
|
this.pickers.forEach(function(picker) {
|
|
var values = [];
|
|
var range = setup.pickers[picker].range;
|
|
var isPadded = setup.pickers[picker].isPadded || false;
|
|
|
|
this.nodes[picker] = setup.element.querySelector('.picker-' + picker);
|
|
|
|
for (var i = range[0]; i <= range[1]; i++) {
|
|
values.push(i);
|
|
}
|
|
|
|
this.spinners[picker] = new Spinner({
|
|
element: this.nodes[picker],
|
|
values: values,
|
|
isPadded: isPadded,
|
|
l10nId: setup.pickers[picker].l10nId
|
|
});
|
|
}, this);
|
|
}
|
|
|
|
Picker.prototype = {
|
|
get value() {
|
|
// Protect against uninitialized [[Get]] access
|
|
if (typeof this.pickers === 'undefined') {
|
|
return null;
|
|
}
|
|
|
|
return this.pickers.map(function(picker) {
|
|
return this.spinners[picker].value;
|
|
}, this).join(':');
|
|
},
|
|
|
|
set value(value) {
|
|
// Protect against uninitialized [[Set]] access
|
|
if (typeof this.pickers === 'undefined') {
|
|
return null;
|
|
}
|
|
|
|
value.split(':').forEach(function(value, i) {
|
|
this.spinners[this.pickers[i]].value = value;
|
|
}, this);
|
|
|
|
return this.value;
|
|
},
|
|
|
|
reset: function() {
|
|
this.pickers.forEach(function(picker) {
|
|
this.spinners[picker].reset();
|
|
}, this);
|
|
}
|
|
};
|
|
|
|
return Picker;
|
|
});
|