UNPKG

devexpress-gantt

Version:

DevExpress Gantt Control

95 lines (89 loc) 3.53 kB
import { isDefined } from "@devexpress/utils/lib/utils/common"; import { DomUtils } from "@devexpress/utils/lib/utils/dom"; import { IPdfTableValueProvider } from "./IPdfTableDataProvider"; export class Margin implements IPdfTableValueProvider { constructor(values?: number|string|Array<number>|Record<string, number>) { this.assign(values); } public bottom: number; public left: number; public right: number; public top: number; public assign(values: number|string|Array<number>|Record<string, number>|Margin): void { if(!isDefined(values)) return; if(typeof values === "string") this.assignFromString(values); else if(typeof values === "number" || values instanceof Array) this.assignWithValues(values); else { const source = values as Margin || values as Record<string, number>; this.assignWithMargin(source); } } assignFromString(source: string): void { const values = source.split(" ").map(p => DomUtils.pxToInt(p)); this.assignWithValues(values); } assignWithMargin(source: Margin|Record<string, number>): void { if(isDefined(source.top)) this.top = source.top; if(isDefined(source.right)) this.right = source.right; if(isDefined(source.bottom)) this.bottom = source.bottom; if(isDefined(source.left)) this.left = source.left; } assignWithValues(values: number|Array<number>): void { const numbers = this.getCorrectedValues(values); this.top = numbers[0]; this.right = numbers[1]; this.bottom = numbers[2]; this.left = numbers[3]; } getCorrectedValues(values: number|Array<number>): Array<number> { let result: Array<number> = [this.top, this.right, this.bottom, this.left]; if(typeof values === "number") { const num = values as number; result = [num, num, num, num]; } else { const numbers = values as Array<number>; switch(numbers.length) { case 1: result = [numbers[0], numbers[0], numbers[0], numbers[0]]; break; case 2: result = [numbers[0], numbers[1], numbers[0], numbers[1]]; break; case 3: result = [numbers[0], numbers[1], numbers[2], numbers[1]]; break; default: numbers.forEach((v, i) => result[i] = v); break; } } return result; } public hasValue(): boolean { return isDefined(this.top) || isDefined(this.left) || isDefined(this.right) || isDefined(this.bottom); } public getValue(): Record<string, number>|number { if(!this.hasValue()) return null; if(this.top === this.bottom && this.left === this.right && this.top === this.left) return this.top; const result = { }; if(isDefined(this.top)) result["top"] = this.top; if(isDefined(this.left)) result["left"] = this.left; if(isDefined(this.right)) result["right"] = this.right; if(isDefined(this.bottom)) result["bottom"] = this.bottom; return result; } }