mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-11-05 13:26:48 +08:00
171 lines
4.7 KiB
TypeScript
171 lines
4.7 KiB
TypeScript
import { Color } from "color";
|
|
import { CubicBezierAnimationCurve } from "ui/animation";
|
|
|
|
export function colorConverter(value: string): Color {
|
|
return new Color(value);
|
|
}
|
|
|
|
export function floatConverter(value: string): number {
|
|
// TODO: parse different unit types
|
|
const result: number = parseFloat(value);
|
|
return result;
|
|
}
|
|
|
|
export function fontSizeConverter(value: string): number {
|
|
return floatConverter(value);
|
|
}
|
|
|
|
export function textAlignConverter(value: string): string {
|
|
switch (value) {
|
|
case "left":
|
|
case "center":
|
|
case "right":
|
|
return value;
|
|
default:
|
|
throw new Error("CSS text-align \"" + value + "\" is not supported.");
|
|
}
|
|
}
|
|
|
|
export function textDecorationConverter(value: string): string {
|
|
const values = (value + "").split(" ");
|
|
|
|
if (values.indexOf("none") !== -1 || values.indexOf("underline") !== -1 || values.indexOf("lineThrough") !== -1) {
|
|
return value;
|
|
} else {
|
|
throw new Error("CSS text-decoration \"" + value + "\" is not supported.");
|
|
}
|
|
}
|
|
|
|
export function whiteSpaceConverter(value: string): string {
|
|
switch (value) {
|
|
case "normal":
|
|
case "nowrap":
|
|
return value;
|
|
default:
|
|
throw new Error("CSS white-space \"" + value + "\" is not supported.");
|
|
}
|
|
}
|
|
|
|
export function textTransformConverter(value: string): string {
|
|
switch (value) {
|
|
case "none":
|
|
case "uppercase":
|
|
case "lowercase":
|
|
case "capitalize":
|
|
return value;
|
|
default:
|
|
throw new Error("CSS text-transform \"" + value + "\" is not supported.");
|
|
}
|
|
}
|
|
|
|
export const numberConverter = parseFloat;
|
|
|
|
export function visibilityConverter(value: string): string {
|
|
value = value.toLowerCase();
|
|
if (value === "collapsed" || value === "collapse") {
|
|
return "collapse";
|
|
} else if (value === "hidden") {
|
|
return "hidden";
|
|
}
|
|
return "visible";
|
|
}
|
|
|
|
export function opacityConverter(value: string): number {
|
|
let result = parseFloat(value);
|
|
result = Math.max(0.0, result);
|
|
result = Math.min(1.0, result);
|
|
return result;
|
|
}
|
|
|
|
export function timeConverter(value: string): number {
|
|
let result = parseFloat(value);
|
|
if (value.indexOf("ms") === -1) {
|
|
result = result * 1000;
|
|
}
|
|
|
|
return Math.max(0.0, result);
|
|
}
|
|
|
|
export function bezieArgumentConverter(value: string): number {
|
|
let 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 = "ease";
|
|
switch (value) {
|
|
case "ease":
|
|
result = "ease";
|
|
break;
|
|
case "linear":
|
|
result = "linear";
|
|
break;
|
|
case "ease-in":
|
|
result = "easeIn";
|
|
break;
|
|
case "ease-out":
|
|
result = "easeOut";
|
|
break;
|
|
case "ease-in-out":
|
|
result = "easeInOut";
|
|
break;
|
|
case "spring":
|
|
result = "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 = new CubicBezierAnimationCurve(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 (typeof value === "string") {
|
|
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;
|
|
}
|
|
} |