mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-18 05:18:39 +08:00
118 lines
3.3 KiB
TypeScript
118 lines
3.3 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 const numberConverter = parseFloat;
|
|
|
|
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;
|
|
}
|
|
} |