tns-core-modules
Version:
Telerik NativeScript Core Modules
236 lines (235 loc) • 10.5 kB
JavaScript
var common = require("./editable-text-base-common");
var enums = require("ui/enums");
var utils = require("utils/utils");
var types = require("utils/types");
var EditableTextBase = (function (_super) {
__extends(EditableTextBase, _super);
function EditableTextBase(options) {
_super.call(this, options);
}
Object.defineProperty(EditableTextBase.prototype, "android", {
get: function () {
return this._android;
},
enumerable: true,
configurable: true
});
EditableTextBase.prototype._createUI = function () {
this._android = new android.widget.EditText(this._context);
this._configureEditText();
this.android.setTag(this.android.getKeyListener());
var that = new WeakRef(this);
this._textWatcher = new android.text.TextWatcher({
beforeTextChanged: function (text, start, count, after) {
},
onTextChanged: function (text, start, before, count) {
var owner = that.get();
if (!owner) {
return;
}
var selectionStart = owner.android.getSelectionStart();
owner.android.removeTextChangedListener(owner._textWatcher);
owner.style._updateTextTransform();
owner.android.addTextChangedListener(owner._textWatcher);
owner.android.setSelection(selectionStart);
},
afterTextChanged: function (editable) {
var owner = that.get();
if (!owner) {
return;
}
switch (owner.updateTextTrigger) {
case enums.UpdateTextTrigger.focusLost:
owner._dirtyTextAccumulator = editable.toString();
break;
case enums.UpdateTextTrigger.textChanged:
owner._onPropertyChangedFromNative(EditableTextBase.textProperty, editable.toString());
break;
default:
throw new Error("Invalid updateTextTrigger: " + owner.updateTextTrigger);
}
}
});
this._android.addTextChangedListener(this._textWatcher);
var focusChangeListener = new android.view.View.OnFocusChangeListener({
onFocusChange: function (view, hasFocus) {
var owner = that.get();
if (!owner) {
return;
}
if (!hasFocus) {
if (owner._dirtyTextAccumulator) {
owner._onPropertyChangedFromNative(EditableTextBase.textProperty, owner._dirtyTextAccumulator);
owner._dirtyTextAccumulator = undefined;
}
owner.dismissSoftInput();
}
}
});
this._android.setOnFocusChangeListener(focusChangeListener);
var editorActionListener = new android.widget.TextView.OnEditorActionListener({
onEditorAction: function (textView, actionId, event) {
var owner = that.get();
if (owner) {
if (actionId === android.view.inputmethod.EditorInfo.IME_ACTION_DONE ||
actionId === android.view.inputmethod.EditorInfo.IME_ACTION_GO ||
actionId === android.view.inputmethod.EditorInfo.IME_ACTION_SEARCH ||
actionId === android.view.inputmethod.EditorInfo.IME_ACTION_SEND ||
actionId === android.view.inputmethod.EditorInfo.IME_ACTION_NEXT) {
owner.dismissSoftInput();
}
if (event && event.getKeyCode() === android.view.KeyEvent.KEYCODE_ENTER) {
owner._onReturnPress();
}
}
return false;
}
});
this._android.setOnEditorActionListener(editorActionListener);
};
EditableTextBase.prototype._configureEditText = function () {
};
EditableTextBase.prototype._onReturnPress = function () {
};
EditableTextBase.prototype._onDetached = function (force) {
this._android = undefined;
_super.prototype._onDetached.call(this, force);
};
EditableTextBase.prototype.dismissSoftInput = function () {
utils.ad.dismissSoftInput(this._nativeView);
};
EditableTextBase.prototype.focus = function () {
var result = _super.prototype.focus.call(this);
if (result) {
utils.ad.showSoftInput(this._nativeView);
}
return result;
};
EditableTextBase.prototype._onTextPropertyChanged = function (data) {
if (this._android) {
var newValue = types.isNullOrUndefined(data.newValue) ? "" : data.newValue + "";
this.android.setText(newValue, android.widget.TextView.BufferType.EDITABLE);
}
};
EditableTextBase.prototype._onKeyboardTypePropertyChanged = function (data) {
if (!this._android) {
return;
}
var newInputType;
switch (data.newValue) {
case enums.KeyboardType.datetime:
newInputType = android.text.InputType.TYPE_CLASS_DATETIME | android.text.InputType.TYPE_DATETIME_VARIATION_NORMAL;
break;
case enums.KeyboardType.phone:
newInputType = android.text.InputType.TYPE_CLASS_PHONE;
break;
case enums.KeyboardType.number:
newInputType = android.text.InputType.TYPE_CLASS_NUMBER | android.text.InputType.TYPE_NUMBER_VARIATION_NORMAL | android.text.InputType.TYPE_NUMBER_FLAG_SIGNED | android.text.InputType.TYPE_NUMBER_FLAG_DECIMAL;
break;
case enums.KeyboardType.url:
newInputType = android.text.InputType.TYPE_CLASS_TEXT | android.text.InputType.TYPE_TEXT_VARIATION_URI;
break;
case enums.KeyboardType.email:
newInputType = android.text.InputType.TYPE_CLASS_TEXT | android.text.InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS;
break;
default:
newInputType = android.text.InputType.TYPE_CLASS_TEXT | android.text.InputType.TYPE_TEXT_VARIATION_NORMAL;
break;
}
this._android.setInputType(newInputType);
};
EditableTextBase.prototype._onReturnKeyTypePropertyChanged = function (data) {
if (!this._android) {
return;
}
var newImeOptions;
switch (data.newValue) {
case enums.ReturnKeyType.done:
newImeOptions = android.view.inputmethod.EditorInfo.IME_ACTION_DONE;
break;
case enums.ReturnKeyType.go:
newImeOptions = android.view.inputmethod.EditorInfo.IME_ACTION_GO;
break;
case enums.ReturnKeyType.next:
newImeOptions = android.view.inputmethod.EditorInfo.IME_ACTION_NEXT;
break;
case enums.ReturnKeyType.search:
newImeOptions = android.view.inputmethod.EditorInfo.IME_ACTION_SEARCH;
break;
case enums.ReturnKeyType.send:
newImeOptions = android.view.inputmethod.EditorInfo.IME_ACTION_SEND;
break;
default:
newImeOptions = android.view.inputmethod.EditorInfo.IME_ACTION_UNSPECIFIED;
break;
}
this._android.setImeOptions(newImeOptions);
};
EditableTextBase.prototype._onEditablePropertyChanged = function (data) {
if (!this._android) {
return;
}
if (data.newValue) {
this.android.setKeyListener(this.android.getTag());
}
else {
this.android.setKeyListener(null);
}
};
EditableTextBase.prototype._onAutocapitalizationTypePropertyChanged = function (data) {
var editableTextBase = data.object;
if (!editableTextBase.android) {
return;
}
var inputType = editableTextBase.android.getInputType();
inputType = inputType & ~28672;
switch (data.newValue) {
case enums.AutocapitalizationType.none:
break;
case enums.AutocapitalizationType.words:
inputType = inputType | android.text.InputType.TYPE_TEXT_FLAG_CAP_WORDS;
break;
case enums.AutocapitalizationType.sentences:
inputType = inputType | android.text.InputType.TYPE_TEXT_FLAG_CAP_SENTENCES;
break;
case enums.AutocapitalizationType.allCharacters:
inputType = inputType | android.text.InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS;
break;
default:
inputType = inputType | android.text.InputType.TYPE_TEXT_FLAG_CAP_SENTENCES;
break;
}
editableTextBase.android.setInputType(inputType);
};
EditableTextBase.prototype._onAutocorrectPropertyChanged = function (data) {
var editableTextBase = data.object;
if (!editableTextBase.android) {
return;
}
var inputType = editableTextBase.android.getInputType();
switch (data.newValue) {
case true:
inputType = inputType | android.text.InputType.TYPE_TEXT_FLAG_AUTO_COMPLETE;
inputType = inputType | android.text.InputType.TYPE_TEXT_FLAG_AUTO_CORRECT;
inputType = inputType & ~android.text.InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS;
break;
case false:
inputType = inputType & ~android.text.InputType.TYPE_TEXT_FLAG_AUTO_COMPLETE;
inputType = inputType & ~android.text.InputType.TYPE_TEXT_FLAG_AUTO_CORRECT;
inputType = inputType | android.text.InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS;
break;
default:
break;
}
editableTextBase.android.setInputType(inputType);
};
EditableTextBase.prototype._onHintPropertyChanged = function (data) {
var editableTextBase = data.object;
if (!editableTextBase.android) {
return;
}
editableTextBase.android.setHint(data.newValue + "");
};
return EditableTextBase;
}(common.EditableTextBase));
exports.EditableTextBase = EditableTextBase;