/** * An abstract class for fields that have a single trigger which opens a "picker" popup * above the field. It provides a base implementation for toggling the picker's * visibility when the trigger is tapped. * * You would not normally use this class directly, but instead use it as the parent * class for a specific picker field implementation. */Ext.define('Ext.field.Picker', { extend: 'Ext.field.Text', config: { /** * @cfg {Object} component * @accessor * @hide */ component: { useMask: true }, /** * @cfg {Boolean} clearIcon * @hide * @accessor */ clearIcon: false, /** * @cfg {String/Boolean} usePicker * `true` if you want this component to always use a {@link Ext.picker.Picker}. * `false` if you want it to use a popup overlay {@link Ext.List}. * `auto` if you want to show a {@link Ext.picker.Picker} only on phones. */ usePicker: 'auto', /** * @cfg {Object} defaultPhonePickerConfig * The default configuration for the picker component when you are on a phone. * @private */ defaultPhonePickerConfig: null, /** * @cfg {Object} defaultTabletPickerConfig * The default configuration for the picker component when you are on a tablet. * @private */ defaultTabletPickerConfig: null, /** * @cfg {String} pickerSlotAlign * The alignment of text in the picker created by this Select * @private */ pickerSlotAlign: 'center' }, /** * @private */ initialize: function() { var me = this, component = me.getComponent(); me.callParent(); component.on({ scope: me, masktap: 'onMaskTap' }); component.doMaskTap = Ext.emptyFn; }, /** * @private */ updateDefaultPhonePickerConfig: function(newConfig) { var phonePicker = this.phonePicker; if (phonePicker) { phonePicker.setConfig(newConfig); } }, /** * @private */ updateDefaultTabletPickerConfig: function(newConfig) { var tabletPicker = this.tabletPicker; if (tabletPicker) { tabletPicker.setConfig(newConfig); } }, /** * @private * Checks if the value is `auto`. If it is, it only uses the picker if the current device type * is a phone. */ applyUsePicker: function(usePicker) { if (usePicker === 'auto') { usePicker = Ext.os.deviceType === 'Phone'; } return Boolean(usePicker); }, syncEmptyCls: Ext.emptyFn, /** * @private */ onMaskTap: function() { if (!this.getDisabled()) { this.onFocus(); } return false; }, /** * @private */ updateDisabled: function(disabled) { var component = this.getComponent(); if (component) { component.setDisabled(disabled); } Ext.Component.prototype.updateDisabled.apply(this, arguments); }, /** * @private */ setDisabled: function() { Ext.Component.prototype.setDisabled.apply(this, arguments); }, onFocus: function(e) { if (this.getDisabled()) { return false; } var component = this.getComponent(); this.fireEvent('focus', this, e); if (Ext.os.is.Android4) { component.input.dom.focus(); } component.input.dom.blur(); this.isFocused = true; this.showPicker(); }, destroy: function() { var me = this; me.callParent(); me.tabletPicker = me.phonePicker = Ext.destroy(me.tabletPicker, me.phonePicker); }});