42 lines
1.3 KiB
TypeScript
42 lines
1.3 KiB
TypeScript
import {IPropertyListDescriptor, PropertyDescriptorParsingType} from '../IPropertyDescriptor';
|
|
import {CSSValue, isIdentToken} from '../syntax/parser';
|
|
export enum PAINT_ORDER_LAYER {
|
|
FILL,
|
|
STROKE,
|
|
MARKERS
|
|
}
|
|
|
|
export type PaintOrder = PAINT_ORDER_LAYER[];
|
|
|
|
export const paintOrder: IPropertyListDescriptor<PaintOrder> = {
|
|
name: 'paint-order',
|
|
initialValue: 'normal',
|
|
prefix: false,
|
|
type: PropertyDescriptorParsingType.LIST,
|
|
parse: (tokens: CSSValue[]): PaintOrder => {
|
|
const DEFAULT_VALUE = [PAINT_ORDER_LAYER.FILL, PAINT_ORDER_LAYER.STROKE, PAINT_ORDER_LAYER.MARKERS];
|
|
let layers: PaintOrder = [];
|
|
|
|
tokens.filter(isIdentToken).forEach((token) => {
|
|
switch (token.value) {
|
|
case 'stroke':
|
|
layers.push(PAINT_ORDER_LAYER.STROKE);
|
|
break;
|
|
case 'fill':
|
|
layers.push(PAINT_ORDER_LAYER.FILL);
|
|
break;
|
|
case 'markers':
|
|
layers.push(PAINT_ORDER_LAYER.MARKERS);
|
|
break;
|
|
}
|
|
});
|
|
DEFAULT_VALUE.forEach((value) => {
|
|
if (layers.indexOf(value) === -1) {
|
|
layers.push(value);
|
|
}
|
|
});
|
|
|
|
return layers;
|
|
}
|
|
};
|