UNPKG

@nativescript/core

Version:

A JavaScript library providing an easy to use api for interacting with iOS and Android platform APIs.

427 lines • 17 kB
var TextView_1; import { textProperty } from '../text-base'; import { iosWritingToolsAllowedInputProperty, iosWritingToolsBehaviorProperty, TextViewBase as TextViewBaseCommon, WritingToolsAllowedInput, WritingToolsBehavior } from './text-view-common'; import { editableProperty, hintProperty, placeholderColorProperty, _updateCharactersInRangeReplacementString } from '../editable-text-base'; import { CSSType } from '../core/view'; import { colorProperty, borderTopWidthProperty, borderRightWidthProperty, borderBottomWidthProperty, borderLeftWidthProperty, paddingTopProperty, paddingRightProperty, paddingBottomProperty, paddingLeftProperty } from '../styling/style-properties'; import { layout, isRealDevice } from '../../utils'; import { SDK_VERSION } from '../../utils/constants'; export { WritingToolsAllowedInput, WritingToolsBehavior } from './text-view-common'; var UITextViewDelegateImpl = /** @class */ (function (_super) { __extends(UITextViewDelegateImpl, _super); function UITextViewDelegateImpl() { return _super !== null && _super.apply(this, arguments) || this; } UITextViewDelegateImpl.initWithOwner = function (owner) { var impl = UITextViewDelegateImpl.new(); impl._owner = owner; return impl; }; UITextViewDelegateImpl.prototype.textViewShouldBeginEditing = function (textView) { var _a; var owner = (_a = this._owner) === null || _a === void 0 ? void 0 : _a.deref(); if (owner) { return owner.textViewShouldBeginEditing(textView); } return true; }; UITextViewDelegateImpl.prototype.textViewDidBeginEditing = function (textView) { var _a; var owner = (_a = this._owner) === null || _a === void 0 ? void 0 : _a.deref(); if (owner) { owner.textViewDidBeginEditing(textView); } }; UITextViewDelegateImpl.prototype.textViewDidEndEditing = function (textView) { var _a; var owner = (_a = this._owner) === null || _a === void 0 ? void 0 : _a.deref(); if (owner) { owner.textViewDidEndEditing(textView); } }; UITextViewDelegateImpl.prototype.textViewDidChange = function (textView) { var _a; var owner = (_a = this._owner) === null || _a === void 0 ? void 0 : _a.deref(); if (owner) { owner.textViewDidChange(textView); } }; UITextViewDelegateImpl.prototype.textViewShouldChangeTextInRangeReplacementText = function (textView, range, replacementString) { var _a; var owner = (_a = this._owner) === null || _a === void 0 ? void 0 : _a.deref(); if (owner) { return owner.textViewShouldChangeTextInRangeReplacementText(textView, range, replacementString); } return true; }; UITextViewDelegateImpl.prototype.scrollViewDidScroll = function (sv) { var _a; var owner = (_a = this._owner) === null || _a === void 0 ? void 0 : _a.deref(); if (owner) { return owner.scrollViewDidScroll(sv); } }; UITextViewDelegateImpl.prototype.textViewWritingToolsWillBegin = function (textView) { var _a; var owner = (_a = this._owner) === null || _a === void 0 ? void 0 : _a.deref(); if (owner) { owner.isWritingToolsActive = true; } }; UITextViewDelegateImpl.prototype.textViewWritingToolsDidEnd = function (textView) { var _a; var owner = (_a = this._owner) === null || _a === void 0 ? void 0 : _a.deref(); if (owner) { owner.isWritingToolsActive = false; owner.textViewDidChange(textView); } }; UITextViewDelegateImpl.ObjCProtocols = [UITextViewDelegate]; return UITextViewDelegateImpl; }(NSObject)); var NoScrollAnimationUITextView = /** @class */ (function (_super) { __extends(NoScrollAnimationUITextView, _super); function NoScrollAnimationUITextView() { return _super !== null && _super.apply(this, arguments) || this; } // see https://github.com/NativeScript/NativeScript/issues/6863 // UITextView internally scrolls the text you are currently typing to visible when newline character // is typed but the scroll animation is not needed because at the same time we are expanding // the textview (setting its frame) NoScrollAnimationUITextView.prototype.setContentOffsetAnimated = function (contentOffset, animated) { _super.prototype.setContentOffsetAnimated.call(this, contentOffset, false); }; return NoScrollAnimationUITextView; }(UITextView)); let TextView = TextView_1 = class TextView extends TextViewBaseCommon { constructor() { super(...arguments); this._hintColor = SDK_VERSION <= 12 || !UIColor.placeholderTextColor ? UIColor.blackColor.colorWithAlphaComponent(0.22) : UIColor.placeholderTextColor; this._textColor = SDK_VERSION <= 12 || !UIColor.labelColor ? null : UIColor.labelColor; } createNativeView() { const textView = NoScrollAnimationUITextView.new(); if (!textView.font) { textView.font = UIFont.systemFontOfSize(12); } return textView; } initNativeView() { super.initNativeView(); this._delegate = UITextViewDelegateImpl.initWithOwner(new WeakRef(this)); this.nativeTextViewProtected.delegate = this._delegate; } disposeNativeView() { this._delegate = null; super.disposeNativeView(); } // @ts-ignore get ios() { return this.nativeViewProtected; } textViewShouldBeginEditing(textView) { if (this._isShowingHint) { this.showText(); } return this.editable; } textViewDidBeginEditing(textView) { this._isEditing = true; this.notify({ eventName: TextView_1.focusEvent, object: this }); } textViewDidEndEditing(textView) { if (this.updateTextTrigger === 'focusLost') { textProperty.nativeValueChange(this, textView.text); } this._isEditing = false; this.dismissSoftInput(); this._refreshHintState(this.hint, textView.text); } textViewDidChange(textView) { if (!this.isWritingToolsActive || this.enableWritingToolsEvents) { if (this.updateTextTrigger === 'textChanged') { textProperty.nativeValueChange(this, textView.text); } this.requestLayout(); } } textViewShouldChangeTextInRangeReplacementText(textView, range, replacementString) { const delta = replacementString.length - range.length; if (delta > 0) { if (textView.text.length + delta > this.maxLength) { return false; } } if (replacementString === '\n') { this.notify({ eventName: TextView_1.returnPressEvent, object: this }); } if (this.formattedText) { _updateCharactersInRangeReplacementString(this.formattedText, range.location, range.length, replacementString); } return true; } scrollViewDidScroll(sv) { const contentOffset = this.nativeViewProtected.contentOffset; this.notify({ object: this, eventName: 'scroll', scrollX: contentOffset.x, scrollY: contentOffset.y, }); } _refreshHintState(hint, text) { if (this.formattedText) { return; } if (text !== null && text !== undefined && text !== '') { this.showText(); } else if (!this._isEditing && hint !== null && hint !== undefined && hint !== '') { this.showHint(hint); } else { this._isShowingHint = false; this.nativeTextViewProtected.text = ''; } } _refreshColor() { if (this._isShowingHint) { const placeholderColor = this.style.placeholderColor; const color = this.style.color; if (placeholderColor) { this.nativeTextViewProtected.textColor = placeholderColor.ios; } else if (color) { // Use semi-transparent version of color for back-compatibility this.nativeTextViewProtected.textColor = color.ios.colorWithAlphaComponent(0.22); } else { this.nativeTextViewProtected.textColor = this._hintColor; } } else { const color = this.style.color; if (color) { this.nativeTextViewProtected.textColor = color.ios; this.nativeTextViewProtected.tintColor = color.ios; } else { this.nativeTextViewProtected.textColor = this._textColor; this.nativeTextViewProtected.tintColor = this._textColor; } } } showHint(hint) { const nativeView = this.nativeTextViewProtected; this._isShowingHint = true; this._refreshColor(); const hintAsString = hint === null || hint === undefined ? '' : hint.toString(); nativeView.text = hintAsString; } showText() { this._isShowingHint = false; this._setNativeText(); this._refreshColor(); this.requestLayout(); } [textProperty.getDefault]() { return ''; } [textProperty.setNative](value) { this._refreshHintState(this.hint, value); } [hintProperty.getDefault]() { return ''; } [hintProperty.setNative](value) { this._refreshHintState(value, this.text); } [editableProperty.getDefault]() { return this.nativeTextViewProtected.editable; } [editableProperty.setNative](value) { this.nativeTextViewProtected.editable = value; } [colorProperty.setNative](color) { this._refreshColor(); } [placeholderColorProperty.setNative](value) { this._refreshColor(); } [borderTopWidthProperty.getDefault]() { return { value: this.nativeTextViewProtected.textContainerInset.top, unit: 'px', }; } [borderTopWidthProperty.setNative](value) { const inset = this.nativeTextViewProtected.textContainerInset; const top = layout.toDeviceIndependentPixels(this.effectivePaddingTop + this.effectiveBorderTopWidth); this.nativeTextViewProtected.textContainerInset = { top: top, left: inset.left, bottom: inset.bottom, right: inset.right, }; } [borderRightWidthProperty.getDefault]() { return { value: this.nativeTextViewProtected.textContainerInset.right, unit: 'px', }; } [borderRightWidthProperty.setNative](value) { const inset = this.nativeTextViewProtected.textContainerInset; const right = layout.toDeviceIndependentPixels(this.effectivePaddingRight + this.effectiveBorderRightWidth); this.nativeTextViewProtected.textContainerInset = { top: inset.top, left: inset.left, bottom: inset.bottom, right: right, }; } [borderBottomWidthProperty.getDefault]() { return { value: this.nativeTextViewProtected.textContainerInset.bottom, unit: 'px', }; } [borderBottomWidthProperty.setNative](value) { const inset = this.nativeTextViewProtected.textContainerInset; const bottom = layout.toDeviceIndependentPixels(this.effectivePaddingBottom + this.effectiveBorderBottomWidth); this.nativeTextViewProtected.textContainerInset = { top: inset.top, left: inset.left, bottom: bottom, right: inset.right, }; } [borderLeftWidthProperty.getDefault]() { return { value: this.nativeTextViewProtected.textContainerInset.left, unit: 'px', }; } [borderLeftWidthProperty.setNative](value) { const inset = this.nativeTextViewProtected.textContainerInset; const left = layout.toDeviceIndependentPixels(this.effectivePaddingLeft + this.effectiveBorderLeftWidth); this.nativeTextViewProtected.textContainerInset = { top: inset.top, left: left, bottom: inset.bottom, right: inset.right, }; } [paddingTopProperty.getDefault]() { return { value: this.nativeTextViewProtected.textContainerInset.top, unit: 'px', }; } [paddingTopProperty.setNative](value) { const inset = this.nativeTextViewProtected.textContainerInset; const top = layout.toDeviceIndependentPixels(this.effectivePaddingTop + this.effectiveBorderTopWidth); this.nativeTextViewProtected.textContainerInset = { top: top, left: inset.left, bottom: inset.bottom, right: inset.right, }; } [paddingRightProperty.getDefault]() { return { value: this.nativeTextViewProtected.textContainerInset.right, unit: 'px', }; } [paddingRightProperty.setNative](value) { const inset = this.nativeTextViewProtected.textContainerInset; const right = layout.toDeviceIndependentPixels(this.effectivePaddingRight + this.effectiveBorderRightWidth); this.nativeTextViewProtected.textContainerInset = { top: inset.top, left: inset.left, bottom: inset.bottom, right: right, }; } [paddingBottomProperty.getDefault]() { return { value: this.nativeTextViewProtected.textContainerInset.bottom, unit: 'px', }; } [paddingBottomProperty.setNative](value) { const inset = this.nativeTextViewProtected.textContainerInset; const bottom = layout.toDeviceIndependentPixels(this.effectivePaddingBottom + this.effectiveBorderBottomWidth); this.nativeTextViewProtected.textContainerInset = { top: inset.top, left: inset.left, bottom: bottom, right: inset.right, }; } [paddingLeftProperty.getDefault]() { return { value: this.nativeTextViewProtected.textContainerInset.left, unit: 'px', }; } [paddingLeftProperty.setNative](value) { const inset = this.nativeTextViewProtected.textContainerInset; const left = layout.toDeviceIndependentPixels(this.effectivePaddingLeft + this.effectiveBorderLeftWidth); this.nativeTextViewProtected.textContainerInset = { top: inset.top, left: left, bottom: inset.bottom, right: inset.right, }; } [iosWritingToolsBehaviorProperty.setNative](value) { if (SDK_VERSION >= 18 && isRealDevice()) { this.nativeTextViewProtected.writingToolsBehavior = this._writingToolsBehaviorType(value); } } [iosWritingToolsAllowedInputProperty.setNative](value) { if (SDK_VERSION >= 18 && isRealDevice()) { let writingToolsInput = null; for (const inputType of value) { writingToolsInput = (writingToolsInput != null ? writingToolsInput : 0) + this._writingToolsAllowedType(inputType); } if (writingToolsInput === null) { writingToolsInput = 0 /* UIWritingToolsResultOptions.Default */; } this.nativeTextViewProtected.allowsEditingTextAttributes = true; this.nativeTextViewProtected.allowedWritingToolsResultOptions = writingToolsInput; } } _writingToolsBehaviorType(value) { switch (value) { case WritingToolsBehavior.Complete: return 1 /* UIWritingToolsBehavior.Complete */; case WritingToolsBehavior.Default: return 0 /* UIWritingToolsBehavior.Default */; case WritingToolsBehavior.Limited: return 2 /* UIWritingToolsBehavior.Limited */; case WritingToolsBehavior.None: return -1 /* UIWritingToolsBehavior.None */; } } _writingToolsAllowedType(value) { switch (value) { case WritingToolsAllowedInput.Default: return 0 /* UIWritingToolsResultOptions.Default */; case WritingToolsAllowedInput.List: return 4 /* UIWritingToolsResultOptions.List */; case WritingToolsAllowedInput.PlainText: return 1 /* UIWritingToolsResultOptions.PlainText */; case WritingToolsAllowedInput.RichText: return 2 /* UIWritingToolsResultOptions.RichText */; } } }; TextView = TextView_1 = __decorate([ CSSType('TextView') ], TextView); export { TextView }; TextView.prototype.recycleNativeView = 'auto'; //# sourceMappingURL=index.ios.js.map