mirror of
				https://github.com/NativeScript/NativeScript.git
				synced 2025-11-04 21:06:45 +08:00 
			
		
		
		
	Cleanup type symbol usage by consolidating to manage in one spot. This makes them easier to use as well by providing a single rollup of all the common type symbol's used throughout core.
		
			
				
	
	
		
			105 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			105 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { Color } from '../../color';
 | 
						|
import { Span as SpanDefinition } from './span';
 | 
						|
import { ViewBase } from '../core/view-base';
 | 
						|
import { FontStyle, FontWeight } from '../styling/font';
 | 
						|
import { CoreTypes } from '../../core-types';
 | 
						|
import { EventData } from '../../data/observable';
 | 
						|
import { isNullOrUndefined, isString } from '../../utils/types';
 | 
						|
 | 
						|
export class Span extends ViewBase implements SpanDefinition {
 | 
						|
	static linkTapEvent = 'linkTap';
 | 
						|
	private _text: string;
 | 
						|
	private _tappable = false;
 | 
						|
 | 
						|
	get fontFamily(): string {
 | 
						|
		return this.style.fontFamily;
 | 
						|
	}
 | 
						|
	set fontFamily(value: string) {
 | 
						|
		this.style.fontFamily = value;
 | 
						|
	}
 | 
						|
 | 
						|
	get fontSize(): number {
 | 
						|
		return this.style.fontSize;
 | 
						|
	}
 | 
						|
	set fontSize(value: number) {
 | 
						|
		this.style.fontSize = value;
 | 
						|
	}
 | 
						|
 | 
						|
	// Italic
 | 
						|
	get fontStyle(): FontStyle {
 | 
						|
		return this.style.fontStyle;
 | 
						|
	}
 | 
						|
	set fontStyle(value: FontStyle) {
 | 
						|
		this.style.fontStyle = value;
 | 
						|
	}
 | 
						|
 | 
						|
	// Bold
 | 
						|
	get fontWeight(): FontWeight {
 | 
						|
		return this.style.fontWeight;
 | 
						|
	}
 | 
						|
	set fontWeight(value: FontWeight) {
 | 
						|
		this.style.fontWeight = value;
 | 
						|
	}
 | 
						|
 | 
						|
	get textDecoration(): CoreTypes.TextDecorationType {
 | 
						|
		return this.style.textDecoration;
 | 
						|
	}
 | 
						|
	set textDecoration(value: CoreTypes.TextDecorationType) {
 | 
						|
		this.style.textDecoration = value;
 | 
						|
	}
 | 
						|
 | 
						|
	get color(): Color {
 | 
						|
		return this.style.color;
 | 
						|
	}
 | 
						|
	set color(value: Color) {
 | 
						|
		this.style.color = value;
 | 
						|
	}
 | 
						|
 | 
						|
	get backgroundColor(): Color {
 | 
						|
		return this.style.backgroundColor;
 | 
						|
	}
 | 
						|
	set backgroundColor(value: Color) {
 | 
						|
		this.style.backgroundColor = value;
 | 
						|
	}
 | 
						|
 | 
						|
	get text(): string {
 | 
						|
		return this._text;
 | 
						|
	}
 | 
						|
	set text(value: string) {
 | 
						|
		if (this._text !== value) {
 | 
						|
			if (isNullOrUndefined(value)) {
 | 
						|
				this._text = '';
 | 
						|
			} else {
 | 
						|
				// value can be a number
 | 
						|
				this._text = isString(value) ? `${value}`.replace('\\n', '\n').replace('\\t', '\t') : `${value}`;
 | 
						|
			}
 | 
						|
			this.notifyPropertyChange('text', this._text);
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	get tappable(): boolean {
 | 
						|
		return this._tappable;
 | 
						|
	}
 | 
						|
 | 
						|
	addEventListener(arg: string, callback: (data: EventData) => void, thisArg?: any) {
 | 
						|
		super.addEventListener(arg, callback, thisArg);
 | 
						|
		this._setTappable(this.hasListeners(Span.linkTapEvent));
 | 
						|
	}
 | 
						|
 | 
						|
	removeEventListener(arg: string, callback?: any, thisArg?: any) {
 | 
						|
		super.removeEventListener(arg, callback, thisArg);
 | 
						|
		this._setTappable(this.hasListeners(Span.linkTapEvent));
 | 
						|
	}
 | 
						|
 | 
						|
	_setTextInternal(value: string): void {
 | 
						|
		this._text = value;
 | 
						|
	}
 | 
						|
 | 
						|
	private _setTappable(value: boolean): void {
 | 
						|
		if (this._tappable !== value) {
 | 
						|
			this._tappable = value;
 | 
						|
			this.notifyPropertyChange('tappable', value);
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |