Total TextBase refactoring + several bug fixes.

This commit is contained in:
Rossen Hristov
2016-12-16 14:53:27 +02:00
parent c8e13c23f0
commit 93d4fa5d57
15 changed files with 434 additions and 653 deletions

View File

@@ -5,95 +5,6 @@ export * from "./utils-common";
// We are using "ad" here to avoid namespace collision with the global android object
export module ad {
export function setTextDecoration(view: android.widget.TextView, value: string) {
var flags = 0;
var values = (value + "").split(" ");
if (values.indexOf("underline") !== -1) {
flags = flags | android.graphics.Paint.UNDERLINE_TEXT_FLAG;
}
if (values.indexOf("line-through") !== -1) {
flags = flags | android.graphics.Paint.STRIKE_THRU_TEXT_FLAG;
}
if (values.indexOf("none") === -1) {
view.setPaintFlags(flags);
} else {
view.setPaintFlags(0);
}
}
export function setTextTransform(v, value: string) {
let view = v._nativeView;
let str = view.getText() + "";
let result = getTransformedString(value, view, str);
if (v.formattedText) {
for (var i = 0; i < v.formattedText.spans.length; i++) {
var span = v.formattedText.spans.getItem(i);
span.text = getTransformedString(value, view, span.text);
}
} else {
view.setText(result);
}
}
export function getTransformedString(textTransform: string, view, stringToTransform: string): string {
let result: string;
switch (textTransform) {
case "uppercase":
view.setTransformationMethod(null);
result = stringToTransform.toUpperCase();
break;
case "lowercase":
view.setTransformationMethod(null);
result = stringToTransform.toLowerCase();
break;
case "capitalize":
view.setTransformationMethod(null);
result = getCapitalizedString(stringToTransform);
break;
case "none":
default:
result = view["originalString"] || stringToTransform;
if (view["transformationMethod"]) {
view.setTransformationMethod(view["transformationMethod"]);
}
break;
}
if (!view["originalString"]) {
view["originalString"] = stringToTransform;
view["transformationMethod"] = view.getTransformationMethod();
}
return result;
}
function getCapitalizedString(str: string): string {
var words = str.split(" ");
var newWords = [];
for (let i = 0; i < words.length; i++) {
let word = words[i].toLowerCase();
newWords.push(word.substr(0, 1).toUpperCase() + word.substring(1));
}
return newWords.join(" ");
}
export function setWhiteSpace(view: android.widget.TextView, value: string) {
let nowrap = value === "nowrap";
view.setSingleLine(nowrap);
view.setEllipsize(nowrap ? android.text.TextUtils.TruncateAt.END : null);
}
let nativeApp: android.app.Application;
declare var com;
export function getApplication() {

View File

@@ -78,11 +78,6 @@
* Module with android specific utilities.
*/
module ad {
export function setTextTransform(view, value: string);
export function setWhiteSpace(view, value: string);
export function setTextDecoration(view, value: string);
export function getTransformedString(textTransform: string, view, stringToTransform: string): string;
/**
* Gets the native Android application instance.
*/
@@ -163,9 +158,6 @@
* Example: getter(NSRunLoop, NSRunLoop.currentRunLoop).runUntilDate(NSDate.dateWithTimeIntervalSinceNow(waitTime));
*/
export function getter<T>(_this: any, propertyValue: T | {(): T}): T;
export function getTransformedText(view, source: string, transform: string): string;
export function setWhiteSpace(view, value: string, parentView?: any);
export function setTextAlignment(view, value: string);
// Common properties between UILabel, UITextView and UITextField
export interface TextUIView {

View File

@@ -34,22 +34,6 @@ export module layout {
}
export module ios {
export function setTextAlignment(view: dts.ios.TextUIView, value: string) {
switch (value) {
case "left":
view.textAlignment = NSTextAlignment.Left;
break;
case "center":
view.textAlignment = NSTextAlignment.Center;
break;
case "right":
view.textAlignment = NSTextAlignment.Right;
break;
default:
break;
}
}
export function getter<T>(_this: any, property: T | { (): T }): T {
if (typeof property === "function") {
return (<{ (): T }>property).call(_this);
@@ -58,50 +42,6 @@ export module ios {
}
}
export function getTransformedText(view, source: string, transform: string): string {
let result = source;
switch (transform) {
case "uppercase":
result = NSStringFromNSAttributedString(source).uppercaseString;
break;
case "lowercase":
result = NSStringFromNSAttributedString(source).lowercaseString;
break;
case "capitalize":
result = NSStringFromNSAttributedString(source).capitalizedString;
break;
case "none":
default:
result = view.text;
break;
}
return result;
}
function NSStringFromNSAttributedString(source: NSAttributedString | string): NSString {
return NSString.stringWithString(source instanceof NSAttributedString && source.string || <string>source);
}
export function setWhiteSpace(view: dts.ios.TextUIView, value: string, parentView?: UIView) {
if (value === "normal") {
view.lineBreakMode = NSLineBreakMode.ByWordWrapping;
view.numberOfLines = 0;
}
else {
if (parentView) {
view.lineBreakMode = NSLineBreakMode.ByTruncatingMiddle;
} else {
view.lineBreakMode = NSLineBreakMode.ByTruncatingTail;
}
view.numberOfLines = 1;
}
}
export module collections {
export function jsArrayToNSArray(str: string[]): NSArray<any> {
return NSArray.arrayWithArray(<any>str);