mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-16 03:31:45 +08:00
173 lines
5.2 KiB
TypeScript
173 lines
5.2 KiB
TypeScript
import enums = require("ui/enums");
|
|
import color = require("color");
|
|
import types = require("utils/types");
|
|
|
|
export function colorConverter(value: string): color.Color {
|
|
return new color.Color(value);
|
|
}
|
|
|
|
export function floatConverter(value: string): number {
|
|
// TODO: parse different unit types
|
|
var result: number = parseFloat(value);
|
|
return result;
|
|
}
|
|
|
|
export function fontSizeConverter(value: string): number {
|
|
return floatConverter(value);
|
|
}
|
|
|
|
export function textAlignConverter(value: string): string {
|
|
switch (value) {
|
|
case enums.TextAlignment.left:
|
|
case enums.TextAlignment.center:
|
|
case enums.TextAlignment.right:
|
|
return value;
|
|
default:
|
|
throw new Error("CSS text-align \"" + value + "\" is not supported.");
|
|
}
|
|
}
|
|
|
|
export function textDecorationConverter(value: string): string {
|
|
var values = (value + "").split(" ");
|
|
|
|
if (values.indexOf(enums.TextDecoration.none) !== -1 || values.indexOf(enums.TextDecoration.underline) !== -1 || values.indexOf(enums.TextDecoration.lineThrough) !== -1) {
|
|
return value;
|
|
} else {
|
|
throw new Error("CSS text-decoration \"" + value + "\" is not supported.");
|
|
}
|
|
}
|
|
|
|
export function whiteSpaceConverter(value: string): string {
|
|
switch (value) {
|
|
case enums.WhiteSpace.normal:
|
|
case enums.WhiteSpace.nowrap:
|
|
return value;
|
|
default:
|
|
throw new Error("CSS white-space \"" + value + "\" is not supported.");
|
|
}
|
|
}
|
|
|
|
export function textTransformConverter(value: string): string {
|
|
switch (value) {
|
|
case enums.TextTransform.none:
|
|
case enums.TextTransform.uppercase:
|
|
case enums.TextTransform.lowercase:
|
|
case enums.TextTransform.capitalize:
|
|
return value;
|
|
default:
|
|
throw new Error("CSS text-transform \"" + value + "\" is not supported.");
|
|
}
|
|
}
|
|
|
|
export var numberConverter = parseFloat;
|
|
|
|
export function visibilityConverter(value: string): string {
|
|
if (value.toLowerCase() === enums.Visibility.collapsed) {
|
|
return enums.Visibility.collapsed;
|
|
} else if (value.toLowerCase() === enums.Visibility.collapse) {
|
|
return enums.Visibility.collapse;
|
|
}
|
|
return enums.Visibility.visible;
|
|
}
|
|
|
|
export function opacityConverter(value: string): number {
|
|
var result = parseFloat(value);
|
|
result = Math.max(0.0, result);
|
|
result = Math.min(1.0, result);
|
|
|
|
return result;
|
|
}
|
|
|
|
export function timeConverter(value: string): number {
|
|
var result = parseFloat(value);
|
|
if (value.indexOf("ms") === -1) {
|
|
result = result*1000;
|
|
}
|
|
result = Math.max(0.0, result);
|
|
|
|
return result;
|
|
}
|
|
|
|
export function bezieArgumentConverter(value: string): number {
|
|
var result = parseFloat(value);
|
|
result = Math.max(0.0, result);
|
|
result = Math.min(1.0, result);
|
|
|
|
return result;
|
|
}
|
|
|
|
export function animationTimingFunctionConverter(value: string): Object {
|
|
let result: Object = enums.AnimationCurve.ease;
|
|
switch (value) {
|
|
case "ease":
|
|
result = enums.AnimationCurve.ease;
|
|
break;
|
|
case "linear":
|
|
result = enums.AnimationCurve.linear;
|
|
break;
|
|
case "ease-in":
|
|
result = enums.AnimationCurve.easeIn;
|
|
break;
|
|
case "ease-out":
|
|
result = enums.AnimationCurve.easeOut;
|
|
break;
|
|
case "ease-in-out":
|
|
result = enums.AnimationCurve.easeInOut;
|
|
break;
|
|
case "spring":
|
|
result = enums.AnimationCurve.spring;
|
|
break;
|
|
default:
|
|
if (value.indexOf("cubic-bezier(") === 0) {
|
|
let bezierArr = value.substring(13).split(/[,]+/);
|
|
if (bezierArr.length !== 4) {
|
|
throw new Error("Invalid value for animation: " + value);
|
|
}
|
|
result = enums.AnimationCurve.cubicBezier(bezieArgumentConverter(bezierArr[0]),
|
|
bezieArgumentConverter(bezierArr[1]),
|
|
bezieArgumentConverter(bezierArr[2]),
|
|
bezieArgumentConverter(bezierArr[3]));
|
|
}
|
|
else {
|
|
throw new Error("Invalid value for animation: " + value);
|
|
}
|
|
break;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
export function transformConverter(value: any): Object {
|
|
if (value === "none") {
|
|
let operations = {};
|
|
operations[value] = value;
|
|
return operations;
|
|
}
|
|
else if (types.isString(value)) {
|
|
let operations = {};
|
|
let operator = "";
|
|
let pos = 0;
|
|
while (pos < value.length) {
|
|
if (value[pos] === " " || value[pos] === ",") {
|
|
pos ++;
|
|
}
|
|
else if (value[pos] === "(") {
|
|
let start = pos + 1;
|
|
while (pos < value.length && value[pos] !== ")") {
|
|
pos ++;
|
|
}
|
|
let operand = value.substring(start, pos);
|
|
operations[operator] = operand.trim();
|
|
operator = "";
|
|
pos ++;
|
|
}
|
|
else {
|
|
operator += value[pos ++];
|
|
}
|
|
}
|
|
return operations;
|
|
}
|
|
else {
|
|
return undefined;
|
|
}
|
|
} |