// vim: et:ts=4:sw=4:sts=4:ft=javascript 'use strict'; /*@ Ox.TimeInput TimeInput Object () -> TimeInput Object (options) -> TimeInput Object (options, self) -> TimeInput Object options Options object ampm 24h/ampm seconds show seconds milliseconds show milliseconds value value, defaults to current time self shared private variable @*/ Ox.TimeInput = function(options, self) { // fixme: seconds get set even if options.seconds is false self = self || {}; var that = Ox.Element({}, self) .defaults({ ampm: false, seconds: false, milliseconds: false, value: Ox.formatDate(new Date(), '%T'), ///* width: { hours: 32, minutes: 32, seconds: 32, milliseconds: 40, ampm: 32 } //*/ }) .options(options || {}); if (self.options.milliseconds) { self.options.seconds = true; if (self.options.value.indexOf('.') == -1) { self.options.value += '.000'; } } self.date = getDate(); self.values = getValues(); self.$input = { hours: Ox.Input({ autocomplete: (self.options.ampm ? Ox.range(1, 13) : Ox.range(0, 24)).map(function(i) { return Ox.pad(i, 2); }), autocompleteReplace: true, autocompleteReplaceCorrect: true, id: 'hours', textAlign: 'right', value: self.values.hours, width: self.options.width.hours }), minutes: Ox.Input({ autocomplete: Ox.range(0, 60).map(function(i) { return Ox.pad(i, 2); }), autocompleteReplace: true, autocompleteReplaceCorrect: true, id: 'minutes', textAlign: 'right', value: self.values.minutes, width: self.options.width.minutes }), seconds: Ox.Input({ autocomplete: Ox.range(0, 60).map(function(i) { return Ox.pad(i, 2); }), autocompleteReplace: true, autocompleteReplaceCorrect: true, id: 'seconds', textAlign: 'right', value: self.values.seconds, width: self.options.width.seconds }), milliseconds: Ox.Input({ autocomplete: Ox.range(0, 1000).map(function(i) { return Ox.pad(i, 3); }), autocompleteReplace: true, autocompleteReplaceCorrect: true, id: 'milliseconds', textAlign: 'right', value: self.values.milliseconds, width: self.options.width.milliseconds }), ampm: Ox.Input({ autocomplete: ['AM', 'PM'], autocompleteReplace: true, autocompleteReplaceCorrect: true, id: 'ampm', value: self.values.ampm, width: self.options.width.ampm }) }; that = Ox.InputGroup(Ox.extend(self.options, { inputs: Ox.merge([ self.$input.hours, self.$input.minutes, ], self.options.seconds ? [ self.$input.seconds ] : [], self.options.milliseconds ? [ self.$input.milliseconds ] : [], self.options.ampm ? [ self.$input.ampm ] : []), separators: Ox.merge([ {title: ':', width: 8}, ], self.options.seconds ? [ {title: ':', width: 8} ] : [], self.options.milliseconds ? [ {title: '.', width: 8} ] : [], self.options.ampm ? [ {title: '', width: 8} ] : []), width: 0 //width: self.options.width || 128 }), self) .bindEvent('change', setValue); setValue(); function getDate() { return new Date('1970/01/01 ' + ( self.options.milliseconds ? self.options.value.substr(0, self.options.value.length - 4) : self.options.value )); } function getValues() { self.date = getDate(); return { ampm: Ox.formatDate(self.date, '%p'), hours: Ox.formatDate(self.date, self.options.ampm ? '%I' : '%H'), milliseconds: self.options.milliseconds ? self.options.value.substr(-3) : '000', minutes: Ox.formatDate(self.date, '%M'), seconds: Ox.formatDate(self.date, '%S') }; } function setValue() { self.options.value = Ox.formatDate(new Date('1970/01/01 ' + [ self.$input.hours.options('value'), self.$input.minutes.options('value'), self.options.seconds ? self.$input.seconds.options('value') : '00' ].join(':') + (self.options.ampm ? ' ' + self.$input.ampm.options('value') : '')), (self.options.seconds? '%T' : '%H:%M')) + (self.options.milliseconds ? '.' + self.$input.milliseconds.options('value') : ''); //Ox.Log('Form', 'SETVALUE', self.options.value); } function setValues() { self.values = getValues(); Ox.forEach(self.$input, function(v, k) { self.$input[k].options({ value: self.values[k] }); }); } self.setOption = function(key, value) { if (key == 'value') { setValues(); } }; return that; };