Fixed: getViewById, TextDecoration

This commit is contained in:
Rossen Hristov
2016-12-15 13:20:25 +02:00
parent 8d573e0304
commit 51e448aa10
16 changed files with 170 additions and 214 deletions

View File

@ -1,60 +1,26 @@
import view = require("ui/core/view"); import { EventData, TextBase, TextDecoration } from "ui/text-base";
import label = require("ui/label"); import { Page } from "ui/page";
import button = require("ui/button");
import textField = require("ui/text-field");
import textView = require("ui/text-view");
export function changeTextButonTap(args) { const possibleValues = [
var btnChange = <button.Button>args.object; TextDecoration.NONE,
var lbl = <label.Label>btnChange.parent.getViewById("Label"); TextDecoration.UNDERLINE,
var btn = <button.Button>btnChange.parent.getViewById("Button"); TextDecoration.LINE_THROUGH,
var textField = <textField.TextField>btnChange.parent.getViewById("TextField"); TextDecoration.UNDERLINE_LINE_THROUGH
var textView = <textView.TextView>btnChange.parent.getViewById("TextView"); ];
export function butonTap(args: EventData) {
let page = (<TextBase>args.object).page;
let lbl = <TextBase>page.getViewById("Label");
let btn = <TextBase>page.getViewById("Button");
let textField = <TextBase>page.getViewById("TextField");
let textView = <TextBase>page.getViewById("TextView");
if(lbl.text === "Change text") { let currentIndex = possibleValues.indexOf(lbl.textDecoration);
lbl.text = btn.text = textField.text = textView.text = "Text changed"; let newIndex = (currentIndex + 1) % possibleValues.length;
} else { let newValue = <TextDecoration>possibleValues[newIndex];
lbl.text = btn.text = textField.text = textView.text = "Change text";
} lbl.textDecoration = newValue;
} btn.textDecoration = newValue;
textField.textDecoration = newValue;
export function butonTap(args) { textView.textDecoration = newValue;
var btnChange = <view.View>args.object;
var lbl = <label.Label>btnChange.parent.getViewById("Label");
var btn = <button.Button>btnChange.parent.getViewById("Button");
var textField = <textField.TextField>btnChange.parent.getViewById("TextField");
var textView = <textView.TextView>btnChange.parent.getViewById("TextView");
if (lbl.style.textDecoration === "none") {
lbl.style.textDecoration = "underline";
btn.style.textDecoration = "underline";
textField.style.textDecoration = "underline";
textView.style.textDecoration = "underline";
} else if (lbl.style.textDecoration === "underline") {
lbl.style.textDecoration = "line-through";
btn.style.textDecoration = "line-through";
textField.style.textDecoration = "line-through";
textView.style.textDecoration = "line-through";
} else if (lbl.style.textDecoration === "line-through") {
lbl.style.textDecoration = "line-through underline";
btn.style.textDecoration = "line-through underline";
textField.style.textDecoration = "line-through underline";
textView.style.textDecoration = "line-through underline";
} else if (lbl.style.textDecoration === "line-through underline") {
lbl.style.textDecoration = "line-through underline none";
btn.style.textDecoration = "line-through underline none";
textField.style.textDecoration = "line-through underline none";
textView.style.textDecoration = "line-through underline none";
} else if (lbl.style.textDecoration === "line-through underline none") {
lbl.style.textDecoration = "none";
btn.style.textDecoration = "none";
textField.style.textDecoration = "none";
textView.style.textDecoration = "none";
if(lbl.text === "Change text") {
lbl.text = btn.text = textField.text = textView.text = "Text changed";
} else {
lbl.text = btn.text = textField.text = textView.text = "Change text";
}
}
} }

View File

@ -1,36 +1,9 @@
<Page > <Page>
<StackLayout> <StackLayout>
<!--<Button id="ChangeText" automationText="Change text" text="Change text" tap="changeTextButonTap" />-->
<Button id="Change" automationText="Change" text="Change" tap="butonTap" /> <Button id="Change" automationText="Change" text="Change" tap="butonTap" />
<Label id="Label" automationText="Label" text="Label" style.textDecoration="none" /> <Label id="Label" automationText="Label" text="Label" textDecoration="none" />
<Button id="Button" automationText="Button" text="Button" style.textDecoration="none" /> <Button id="Button" automationText="Button" text="Button" textDecoration="none" />
<TextField id="TextField" automationText="TextField" text="TextField" style.textDecoration="none" /> <TextField id="TextField" automationText="TextField" text="TextField" textDecoration="none" />
<TextView id="TextView" automationText="TextView" text="TextView" style.textDecoration="none" /> <TextView id="TextView" automationText="TextView" text="TextView" textDecoration="none" />
<!--
<Label text="Label" style="text-decoration:none" />
<Label text="Label" style="text-decoration:underline" />
<Label text="Label" style="text-decoration:line-through" />
<Label text="Label" style="text-decoration:line-through underline" />
<Label text="Label" style="text-decoration:line-through underline none" />
<TextField text="TextField" style="text-decoration:none" />
<TextField text="TextField" style="text-decoration:underline" />
<TextField text="TextField" style="text-decoration:line-through" />
<TextField text="TextField" style="text-decoration:underline line-through" />
<TextField text="TextField" style="text-decoration:underline line-through none" />
<TextView text="TextView" style="text-decoration:none" />
<TextView text="TextView" style="text-decoration:underline" />
<TextView text="TextView" style="text-decoration:line-through" />
<TextView text="TextView" style="text-decoration:line-through underline" />
<TextView text="TextView" style="text-decoration:line-through underline none" />
<Button text="Button" style="text-decoration:none" />
<Button text="Button" style="text-decoration:underline" />
<Button text="Button" style="text-decoration:line-through" />
<Button text="Button" style="text-decoration:underline line-through" />
<Button text="Button" style="text-decoration:underline line-through none" />
-->
</StackLayout> </StackLayout>
</Page> </Page>

View File

@ -35,30 +35,15 @@ export function butonTap(args) {
btn.style.textTransform = "uppercase"; btn.style.textTransform = "uppercase";
textField.style.textTransform = "uppercase"; textField.style.textTransform = "uppercase";
textView.style.textTransform = "uppercase"; textView.style.textTransform = "uppercase";
} else if (lbl.style.textTransform === "uppercase" && lbl.style.textDecoration !== "line-through underline") { } else if (lbl.style.textTransform === "uppercase") {
lbl.style.textTransform = "lowercase"; lbl.style.textTransform = "lowercase";
btn.style.textTransform = "lowercase"; btn.style.textTransform = "lowercase";
textField.style.textTransform = "lowercase"; textField.style.textTransform = "lowercase";
textView.style.textTransform = "lowercase"; textView.style.textTransform = "lowercase";
} else if (lbl.style.textTransform === "lowercase") { } else if (lbl.style.textTransform === "lowercase") {
// lbl.style.textTransform = "uppercase";
// btn.style.textTransform = "uppercase";
// textField.style.textTransform = "uppercase";
// textView.style.textTransform = "uppercase";
// lbl.style.textDecoration = "line-through underline";
// btn.style.textDecoration = "line-through underline";
// textField.style.textDecoration = "line-through underline";
// textView.style.textDecoration = "line-through underline";
//} else if (lbl.style.textTransform === "uppercase" && lbl.style.textDecoration === "line-through underline") {
lbl.style.textTransform = "none"; lbl.style.textTransform = "none";
btn.style.textTransform = "none"; btn.style.textTransform = "none";
textField.style.textTransform = "none"; textField.style.textTransform = "none";
textView.style.textTransform = "none"; textView.style.textTransform = "none";
//lbl.style.textDecoration = "none";
//btn.style.textDecoration = "none";
//textField.style.textDecoration = "none";
//textView.style.textDecoration = "none";
} }
} }

View File

@ -30,6 +30,7 @@
/// <reference path="text/text.d.ts" /> /// <reference path="text/text.d.ts" />
/// <reference path="timer/timer.d.ts" /> /// <reference path="timer/timer.d.ts" />
/// <reference path="trace/trace.d.ts" /> /// <reference path="trace/trace.d.ts" />
/// <reference path="ui/definitions.d.ts" />
/// <reference path="ui/action-bar/action-bar.d.ts" /> /// <reference path="ui/action-bar/action-bar.d.ts" />
/// <reference path="ui/activity-indicator/activity-indicator.d.ts" /> /// <reference path="ui/activity-indicator/activity-indicator.d.ts" />
/// <reference path="ui/animation/animation.d.ts" /> /// <reference path="ui/animation/animation.d.ts" />

View File

@ -50,6 +50,47 @@ export function isEventOrGesture(name: string, view: ViewBaseDefinition): boolea
return false; return false;
} }
export function getViewById(view: ViewBaseDefinition, id: string): ViewBaseDefinition {
if (!view) {
return undefined;
}
if (view.id === id) {
return view;
}
let retVal: ViewBaseDefinition;
const descendantsCallback = function (child: ViewBaseDefinition): boolean {
if (child.id === id) {
retVal = child;
// break the iteration by returning false
return false;
}
return true;
}
eachDescendant(view, descendantsCallback);
return retVal;
}
export function eachDescendant(view: ViewBaseDefinition, callback: (child: ViewBaseDefinition) => boolean) {
if (!callback || !view) {
return;
}
let continueIteration: boolean;
let localCallback = function (child: ViewBaseDefinition): boolean {
continueIteration = callback(child);
if (continueIteration) {
child.eachChild(localCallback);
}
return continueIteration;
}
view.eachChild(localCallback);
}
export class ViewBase extends Observable implements ViewBaseDefinition { export class ViewBase extends Observable implements ViewBaseDefinition {
private _updatingJSPropertiesDict = {}; private _updatingJSPropertiesDict = {};
private _style: Style; private _style: Style;
@ -87,6 +128,10 @@ export class ViewBase extends Observable implements ViewBaseDefinition {
return this._isLoaded; return this._isLoaded;
} }
getViewById<T extends ViewBaseDefinition>(id: string): T {
return <T>getViewById(this, id);
}
get page(): ViewBaseDefinition { get page(): ViewBaseDefinition {
if (this.parent) { if (this.parent) {
return this.parent.page; return this.parent.page;
@ -492,4 +537,15 @@ function resetStyles(view: ViewBase): void {
} }
export const idProperty = new Property<ViewBase, string>({ name: "id", valueChanged: (view, oldValue, newValue) => resetStyles(view) }); export const idProperty = new Property<ViewBase, string>({ name: "id", valueChanged: (view, oldValue, newValue) => resetStyles(view) });
idProperty.register(ViewBase); idProperty.register(ViewBase);
export function makeValidator<T>(...values: T[]): (value: any) => value is T {
const set = new Set(values);
return (value: any): value is T => set.has(value);
}
export function makeParser<T>(isValid: (value: any) => boolean, def: T): (value: any) => T {
return value => {
const lower = value && value.toLowerCase();
return isValid(lower) ? lower : def;
}
}

View File

@ -49,47 +49,6 @@ Style.prototype.effectiveBorderRightWidth = 0;
Style.prototype.effectiveBorderBottomWidth = 0; Style.prototype.effectiveBorderBottomWidth = 0;
Style.prototype.effectiveBorderLeftWidth = 0; Style.prototype.effectiveBorderLeftWidth = 0;
export function getViewById(view: ViewDefinition, id: string): ViewDefinition {
if (!view) {
return undefined;
}
if (view.id === id) {
return view;
}
let retVal: ViewDefinition;
const descendantsCallback = function (child: ViewDefinition): boolean {
if (child.id === id) {
retVal = child;
// break the iteration by returning false
return false;
}
return true;
}
eachDescendant(view, descendantsCallback);
return retVal;
}
export function eachDescendant(view: ViewDefinition, callback: (child: ViewDefinition) => boolean) {
if (!callback || !view) {
return;
}
let continueIteration: boolean;
let localCallback = function (child: ViewDefinition): boolean {
continueIteration = callback(child);
if (continueIteration) {
child._eachChildView(localCallback);
}
return continueIteration;
}
view._eachChildView(localCallback);
}
export function PseudoClassHandler(...pseudoClasses: string[]): MethodDecorator { export function PseudoClassHandler(...pseudoClasses: string[]): MethodDecorator {
let stateEventNames = pseudoClasses.map(s => ":" + s); let stateEventNames = pseudoClasses.map(s => ":" + s);
let listeners = Symbol("listeners"); let listeners = Symbol("listeners");
@ -233,10 +192,6 @@ export abstract class ViewCommon extends ViewBase implements ViewDefinition {
} }
} }
getViewById<T extends ViewDefinition>(id: string): T {
return <T>getViewById(this, id);
}
// START Style property shortcuts // START Style property shortcuts
get borderColor(): string | Color { get borderColor(): string | Color {
return this.style.borderColor; return this.style.borderColor;

View File

@ -41,14 +41,6 @@ declare module "ui/core/view" {
export const zeroLength: Length; export const zeroLength: Length;
export function getLengthEffectiveValue(param: Length): number; export function getLengthEffectiveValue(param: Length): number;
/**
* Gets a child view by id.
* @param view - The parent (container) view of the view to look for.
* @param id - The id of the view to look for.
* Returns an instance of a view (if found), otherwise undefined.
*/
export function getViewById(view: View, id: string): View;
/** /**
* Converts string into boolean value. * Converts string into boolean value.
* Throws error if value is not 'true' or 'false'. * Throws error if value is not 'true' or 'false'.
@ -350,16 +342,6 @@ declare module "ui/core/view" {
*/ */
isUserInteractionEnabled: boolean; isUserInteractionEnabled: boolean;
/**
* Gets or sets the id for this view.
*/
id: string;
/**
* Gets or sets the CSS class name for this view.
*/
className: string;
/** /**
* Gets is layout is valid. This is a read-only property. * Gets is layout is valid. This is a read-only property.
*/ */
@ -475,11 +457,6 @@ declare module "ui/core/view" {
public static combineMeasuredStates(curState: number, newState): number; public static combineMeasuredStates(curState: number, newState): number;
/**
* Returns the child view with the specified id.
*/
public getViewById<T extends View>(id: string): T;
/** /**
* Tries to focus the view. * Tries to focus the view.
* Returns a value indicating whether this view or one of its descendants actually took focus. * Returns a value indicating whether this view or one of its descendants actually took focus.

View File

@ -29,6 +29,14 @@ declare module "ui/core/view-base" {
export function getAncestor(view: ViewBase, criterion: string | Function): ViewBase; export function getAncestor(view: ViewBase, criterion: string | Function): ViewBase;
export function isEventOrGesture(name: string, view: ViewBase): boolean; export function isEventOrGesture(name: string, view: ViewBase): boolean;
/**
* Gets a child view by id.
* @param view - The parent (container) view of the view to look for.
* @param id - The id of the view to look for.
* Returns an instance of a view (if found), otherwise undefined.
*/
export function getViewById(view: ViewBase, id: string): ViewBase;
export class ViewBase extends Observable { export class ViewBase extends Observable {
/** /**
* String value used when hooking to loaded event. * String value used when hooking to loaded event.
@ -50,6 +58,21 @@ declare module "ui/core/view-base" {
*/ */
public readonly parent: ViewBase; public readonly parent: ViewBase;
/**
* Gets or sets the id for this view.
*/
public id: string;
/**
* Returns the child view with the specified id.
*/
public getViewById<T extends ViewBase>(id: string): T;
/**
* Gets or sets the CSS class name for this view.
*/
public className: string;
/** /**
* Gets owner page. This is a read-only property. * Gets owner page. This is a read-only property.
*/ */
@ -106,6 +129,9 @@ declare module "ui/core/view-base" {
export const idProperty: Property<ViewBase, string>; export const idProperty: Property<ViewBase, string>;
export const classNameProperty: Property<ViewBase, string>; export const classNameProperty: Property<ViewBase, string>;
export const bindingContextProperty: InheritedProperty<ViewBase, any>; export const bindingContextProperty: InheritedProperty<ViewBase, any>;
export function makeValidator<T>(...values: T[]): (value: any) => value is T;
export function makeParser<T>(isValid: (value: any) => boolean, def: T): (value: any) => T;
} }
declare module "ui/core/properties" { declare module "ui/core/properties" {

View File

@ -1,5 +1,5 @@
import * as flexbox from "ui/layouts/flexbox-layout"; import * as flexbox from "ui/layouts/flexbox-layout";
import { LayoutBase, View, Style, Property, CssProperty, isIOS, ShorthandProperty } from "ui/layouts/layout-base"; import { LayoutBase, View, Style, Property, CssProperty, isIOS, ShorthandProperty, makeValidator, makeParser} from "ui/layouts/layout-base";
export * from "ui/layouts/layout-base"; export * from "ui/layouts/layout-base";
@ -17,16 +17,16 @@ export const ORDER_DEFAULT = 1;
export const FLEX_GROW_DEFAULT = 0.0; export const FLEX_GROW_DEFAULT = 0.0;
export const FLEX_SHRINK_DEFAULT = 1.0; export const FLEX_SHRINK_DEFAULT = 1.0;
function makeValidator<T>(...values: T[]): (value: any) => value is T { // function makeValidator<T>(...values: T[]): (value: any) => value is T {
const set = new Set(values); // const set = new Set(values);
return (value: any): value is T => set.has(value); // return (value: any): value is T => set.has(value);
} // }
function makeParser<T>(isValid: (value: any) => boolean, def: T): (value: any) => T { // function makeParser<T>(isValid: (value: any) => boolean, def: T): (value: any) => T {
return value => { // return value => {
const lower = value && value.toLowerCase(); // const lower = value && value.toLowerCase();
return isValid(lower) ? lower : def; // return isValid(lower) ? lower : def;
} // }
} // }
export type FlexDirection = "row" | "row-reverse" | "column" | "column-reverse"; export type FlexDirection = "row" | "row-reverse" | "column" | "column-reverse";
export namespace FlexDirection { export namespace FlexDirection {

View File

@ -29,7 +29,12 @@ export function textAlignConverter(value: string): string {
export function textDecorationConverter(value: string): string { export function textDecorationConverter(value: string): string {
const values = (value + "").split(" "); const values = (value + "").split(" ");
if (values.indexOf("none") !== -1 || values.indexOf("underline") !== -1 || values.indexOf("lineThrough") !== -1) { if (values.indexOf("none") !== -1
|| values.indexOf("underline") !== -1
|| values.indexOf("line-through") !== -1
|| values.indexOf("underline line-through") !== -1
|| values.indexOf("line-through underline") !== -1
) {
return value; return value;
} else { } else {
throw new Error("CSS text-decoration \"" + value + "\" is not supported."); throw new Error("CSS text-decoration \"" + value + "\" is not supported.");

View File

@ -1,5 +1,6 @@
declare module "ui/styling/style" { declare module "ui/styling/style" {
import { Length, PercentLength, Color, Background, Font, ViewBase, Observable } from "ui/core/view"; import { Length, PercentLength, Color, Background, Font, ViewBase, Observable } from "ui/core/view";
import { TextDecoration } from "ui/text-base";
export interface Thickness { export interface Thickness {
left: number; left: number;
@ -86,7 +87,7 @@ declare module "ui/styling/style" {
public letterSpacing: number; public letterSpacing: number;
public textAlignment: "left" | "center" | "right"; public textAlignment: "left" | "center" | "right";
public textDecoration: "none" | "underline" | "lineThrough"; public textDecoration: TextDecoration;
public textTransform: "none" | "capitalize" | "uppercase" | "lowercase"; public textTransform: "none" | "capitalize" | "uppercase" | "lowercase";
public whiteSpace: "normal" | "nowrap"; public whiteSpace: "normal" | "nowrap";

View File

@ -6,7 +6,9 @@ import { resetStyleProperties } from "ui/core/properties";
import { import {
FlexDirection, FlexWrap, JustifyContent, AlignItems, AlignContent, FlexDirection, FlexWrap, JustifyContent, AlignItems, AlignContent,
Order, FlexGrow, FlexShrink, FlexWrapBefore, AlignSelf Order, FlexGrow, FlexShrink, FlexWrapBefore, AlignSelf
} from "ui/layouts/flexbox-layout" } from "ui/layouts/flexbox-layout";
import { TextDecoration } from "ui/text-base";
export class Style extends Observable implements StyleDefinition { export class Style extends Observable implements StyleDefinition {
constructor(public view: ViewBase) { constructor(public view: ViewBase) {
@ -64,7 +66,7 @@ export class Style extends Observable implements StyleDefinition {
public letterSpacing: number; public letterSpacing: number;
public textAlignment: "left" | "center" | "right"; public textAlignment: "left" | "center" | "right";
public textDecoration: "none" | "underline" | "lineThrough"; public textDecoration: TextDecoration;
public textTransform: "none" | "capitalize" | "uppercase" | "lowercase"; public textTransform: "none" | "capitalize" | "uppercase" | "lowercase";
public whiteSpace: "normal" | "nowrap"; public whiteSpace: "normal" | "nowrap";

View File

@ -1,5 +1,5 @@
import { TextBase as TextBaseDefinition } from "ui/text-base"; import { TextBase as TextBaseDefinition } from "ui/text-base";
import { View, AddChildFromBuilder, Property, CssProperty, InheritedCssProperty, Style, isIOS, Observable } from "ui/core/view"; import { View, AddChildFromBuilder, Property, CssProperty, InheritedCssProperty, Style, isIOS, Observable, makeValidator, makeParser} from "ui/core/view";
import { PropertyChangeData } from "data/observable"; import { PropertyChangeData } from "data/observable";
import { FormattedString, FormattedStringView } from "text/formatted-string"; import { FormattedString, FormattedStringView } from "text/formatted-string";
import { addWeakEventListener, removeWeakEventListener } from "ui/core/weak-event-listener"; import { addWeakEventListener, removeWeakEventListener } from "ui/core/weak-event-listener";
@ -78,10 +78,10 @@ export abstract class TextBaseCommon extends View implements TextBaseDefinition,
this.style.textAlignment = value; this.style.textAlignment = value;
} }
get textDecoration(): "none" | "underline" | "lineThrough" { get textDecoration(): TextDecoration {
return this.style.textDecoration; return this.style.textDecoration;
} }
set textDecoration(value: "none" | "underline" | "lineThrough") { set textDecoration(value: TextDecoration) {
this.style.textDecoration = value; this.style.textDecoration = value;
} }
@ -135,21 +135,19 @@ export const textAlignmentProperty = new InheritedCssProperty<Style, "left" | "c
}); });
textAlignmentProperty.register(Style); textAlignmentProperty.register(Style);
export const textDecorationProperty = new CssProperty<Style, "none" | "underline" | "line-through">({ // TextDecoration
name: "textDecoration", cssName: "text-decoration", defaultValue: "none", valueConverter: (value) => { export type TextDecoration = "none" | "underline" | "line-through" | "underline line-through";
if (value === null || value === undefined || value === "") { export namespace TextDecoration {
value = "none"; export const NONE: "none" = "none";
} export const UNDERLINE: "underline" = "underline";
export const LINE_THROUGH: "line-through" = "line-through";
export const UNDERLINE_LINE_THROUGH: "underline line-through" = "underline line-through";
(value + "").split(" ").forEach((v, i, arr) => { export const isValid = makeValidator<TextDecoration>(NONE, UNDERLINE, LINE_THROUGH, UNDERLINE_LINE_THROUGH);
if (v !== "none" && v !== "underline" && v !== "line-through") { export const parse = makeParser(isValid, NONE);
throw new Error(`CSS text-decoration ${value} is not supported.`); }
} export const textDecorationProperty = new CssProperty<Style, TextDecoration>({
name: "textDecoration", cssName: "text-decoration", defaultValue: TextDecoration.NONE, valueConverter: TextDecoration.parse});
});
return <any>value;
}
});
textDecorationProperty.register(Style); textDecorationProperty.register(Style);
export const textTransformProperty = new CssProperty<Style, "none" | "capitalize" | "uppercase" | "lowercase">({ export const textTransformProperty = new CssProperty<Style, "none" | "capitalize" | "uppercase" | "lowercase">({

View File

@ -1,7 +1,7 @@
import { import {
TextBaseCommon, textProperty, formattedTextProperty, textAlignmentProperty, textDecorationProperty, TextBaseCommon, textProperty, formattedTextProperty, textAlignmentProperty, textDecorationProperty,
textTransformProperty, letterSpacingProperty, colorProperty, fontInternalProperty, whiteSpaceProperty, textTransformProperty, letterSpacingProperty, colorProperty, fontInternalProperty, whiteSpaceProperty,
Font, Color, FormattedString Font, Color, FormattedString, TextDecoration
} from "./text-base-common"; } from "./text-base-common";
export * from "./text-base-common"; export * from "./text-base-common";
@ -163,10 +163,10 @@ export class TextBase extends TextBaseCommon {
} }
} }
get [textDecorationProperty.native](): "none" | "underline" | "line-through" { get [textDecorationProperty.native](): TextDecoration {
return "none"; return "none";
} }
set [textDecorationProperty.native](value: "none" | "underline" | "line-through") { set [textDecorationProperty.native](value: TextDecoration) {
let flags = 0; let flags = 0;
let values = (value + "").split(" "); let values = (value + "").split(" ");

View File

@ -37,7 +37,7 @@
/** /**
* Gets or sets text decorations style property. * Gets or sets text decorations style property.
*/ */
textDecoration: "none" | "underline" | "lineThrough"; textDecoration: TextDecoration;
/** /**
* Gets or sets text transform style property. * Gets or sets text transform style property.
@ -68,6 +68,16 @@
//@endprivate //@endprivate
} }
export type TextDecoration = "none" | "underline" | "line-through" | "underline line-through";
export namespace TextDecoration {
export const NONE: "none";
export const UNDERLINE: "underline";
export const LINE_THROUGH: "line-through";
export const UNDERLINE_LINE_THROUGH: "underline line-through";
export function isValid(value: any): boolean;
export function parse(value: string): TextDecoration;
}
export type TextTransform = "none" | "capitalize" | "uppercase" | "lowercase"; export type TextTransform = "none" | "capitalize" | "uppercase" | "lowercase";
export function getTransformedText(text: string, transform: TextTransform): string; export function getTransformedText(text: string, transform: TextTransform): string;
@ -76,7 +86,7 @@
export const formattedTextProperty: Property<TextBase, FormattedString>; export const formattedTextProperty: Property<TextBase, FormattedString>;
export const textAlignmentProperty: InheritedCssProperty<Style, "left" | "center" | "right">; export const textAlignmentProperty: InheritedCssProperty<Style, "left" | "center" | "right">;
export const textDecorationProperty: CssProperty<Style, "none" | "underline" | "line-through">; export const textDecorationProperty: CssProperty<Style, TextDecoration>;
export const textTransformProperty: CssProperty<Style, TextTransform>; export const textTransformProperty: CssProperty<Style, TextTransform>;
export const whiteSpaceProperty: CssProperty<Style, "normal" | "nowrap">; export const whiteSpaceProperty: CssProperty<Style, "normal" | "nowrap">;
export const letterSpacingProperty: CssProperty<Style, number>; export const letterSpacingProperty: CssProperty<Style, number>;

View File

@ -1,6 +1,7 @@
import { import {
TextBaseCommon, textProperty, formattedTextProperty, textAlignmentProperty, textDecorationProperty, TextBaseCommon, textProperty, formattedTextProperty, textAlignmentProperty, textDecorationProperty,
textTransformProperty, letterSpacingProperty, colorProperty, fontInternalProperty, Font, Color, FormattedString textTransformProperty, letterSpacingProperty, colorProperty, fontInternalProperty, Font, Color, FormattedString,
TextDecoration
} from "./text-base-common"; } from "./text-base-common";
export * from "./text-base-common"; export * from "./text-base-common";
@ -244,10 +245,10 @@ export class TextBase extends TextBaseCommon {
} }
} }
get [textDecorationProperty.native](): string { get [textDecorationProperty.native](): TextDecoration {
return "none"; return "none";
} }
set [textDecorationProperty.native](value: string) { set [textDecorationProperty.native](value: TextDecoration) {
if (this.formattedText) { if (this.formattedText) {
setFormattedTextDecorationAndTransform(this.formattedText, this.nativeView, value, this.style.textTransform, this.style.letterSpacing); setFormattedTextDecorationAndTransform(this.formattedText, this.nativeView, value, this.style.textTransform, this.style.letterSpacing);
} else { } else {