stimulsoft-forms
Version:
Stimulsoft PDF Forms
134 lines (132 loc) • 16.9 kB
JavaScript
import { Component, Input } from "@angular/core";
import * as i0 from "@angular/core";
import * as i1 from "../../../../services/model.service";
import * as i2 from "@angular/common";
import * as i3 from "@angular/forms";
import * as i4 from "../../../../directives/sti-input-text.directive";
export class StiPaddingEditorComponent {
constructor(model) {
this.model = model;
this.PADDINGS = ["left", "top", "right", "bottom"];
this.CLASSES = ["pi pi-arrow-left", "pi pi-arrow-up", "pi pi-arrow-right", "pi pi-arrow-down"];
}
get padding() {
return (this.model.selectedComponent?.element[this.property.property] ??
(this.model.selectedPage ? this.model.selectedPage[this.property.property] : this.model.form.settings.padding));
}
setPadding(str, padding) {
let value = !isNaN(parseFloat(str)) ? parseFloat(str) : 0;
if (this.isValid(value, padding)) {
if (value <= 0) {
this.padding[padding] = 0;
this.model.previousPadding[padding] = 0;
}
else {
this.padding[padding] = value;
this.model.previousPadding[padding] = value;
}
if (padding == "left" || padding == "right") {
this.model.previousContentAreaWidth = this.model.lastUsedPage?.contentAreaWidth;
}
}
}
isValid(value, padding) {
let maxHeight = this.model.selectedPage
? this.model.selectedPage.height
: this.model.getElementPage(this.model.selectedComponent?.element)
? this.model.getElementPage(this.model.selectedComponent?.element).contentAreaHeight
: this.model.getElementPanel(this.model.selectedComponent?.element)
? this.model.getElementPanel(this.model.selectedComponent?.element).contentAreaHeight
: null;
let maxWidth = this.model.selectedPage
? this.model.selectedPage.width
: this.model.getElementPage(this.model.selectedComponent?.element)
? this.model.getElementPage(this.model.selectedComponent?.element).contentAreaWidth
: this.model.getElementPanel(this.model.selectedComponent?.element)
? this.model.getElementPanel(this.model.selectedComponent?.element).contentAreaWidth
: null;
if (!maxHeight || !maxWidth) {
maxHeight = this.model?.form?.pages[0].contentAreaHeight;
maxWidth = this.model?.form?.pages[0].contentAreaWidth;
}
if (maxHeight && maxWidth) {
let isValid = false;
switch (padding) {
case "left":
isValid = value + this.padding["right"] < maxWidth;
break;
case "right":
isValid = value + this.padding["left"] < maxWidth;
break;
case "top":
isValid = value + this.padding["bottom"] < maxHeight;
break;
case "bottom":
isValid = value + this.padding["top"] < maxHeight;
break;
}
return isValid;
}
else {
return true;
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: StiPaddingEditorComponent, deps: [{ token: i1.StiModelService }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: StiPaddingEditorComponent, selector: "sti-padding-editor", inputs: { property: "property" }, ngImport: i0, template: `
<table class="sti-clear" [style]="{ width: '100%' }">
<tr [style]="{ width: '100%' }">
<td *ngFor="let p of PADDINGS; index as i" [style]="{ minWidth: '50px' }">
<span class="p-input-icon-left">
<i [class]="CLASSES[i]" [style]="{ position: 'absolute', left: '3px', top: '17px' }"></i>
<input
type="text"
stiInputText
[ngModel]="padding[p]"
spellcheck="false"
(input)="setPadding($event.target.value, p)"
[style]="{ width: '100%', paddingLeft: '11px' }"
/>
</span>
</td>
</tr>
</table>
<style>
td {
padding: 0;
}
</style>
`, isInline: true, styles: ["\n td {\n padding: 0;\n }\n "], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.StiInputTextDirective, selector: "[stiInputText]" }] }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: StiPaddingEditorComponent, decorators: [{
type: Component,
args: [{
selector: "sti-padding-editor",
template: `
<table class="sti-clear" [style]="{ width: '100%' }">
<tr [style]="{ width: '100%' }">
<td *ngFor="let p of PADDINGS; index as i" [style]="{ minWidth: '50px' }">
<span class="p-input-icon-left">
<i [class]="CLASSES[i]" [style]="{ position: 'absolute', left: '3px', top: '17px' }"></i>
<input
type="text"
stiInputText
[ngModel]="padding[p]"
spellcheck="false"
(input)="setPadding($event.target.value, p)"
[style]="{ width: '100%', paddingLeft: '11px' }"
/>
</span>
</td>
</tr>
</table>
<style>
td {
padding: 0;
}
</style>
`,
}]
}], ctorParameters: () => [{ type: i1.StiModelService }], propDecorators: { property: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RpLXBhZGRpbmctZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0aW11bHNvZnQtZm9ybXMvc3JjL2xpYi9jb21wb25lbnRzL3Byb3BlcnR5R3JpZC9lZGl0b3JzL3N0aS1wYWRkaW5nLWVkaXRvci9zdGktcGFkZGluZy1lZGl0b3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7QUFpQ2pELE1BQU0sT0FBTyx5QkFBeUI7SUFNcEMsWUFBbUIsS0FBc0I7UUFBdEIsVUFBSyxHQUFMLEtBQUssQ0FBaUI7UUFIekMsYUFBUSxHQUFHLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDOUMsWUFBTyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztJQUU5QyxDQUFDO0lBRTdDLElBQVcsT0FBTztRQUNoQixPQUFPLENBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7WUFDN0QsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUMvRyxDQUFDO0lBQ0osQ0FBQztJQUVELFVBQVUsQ0FBQyxHQUFXLEVBQUUsT0FBZTtRQUNyQyxJQUFJLEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMs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SSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQztRQUN6RCxDQUFDO1FBQ0QsSUFBSSxTQUFTLElBQUksUUFBUSxFQUFFLENBQUM7WUFDMUIsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3BCLFFBQVEsT0FBTyxFQUFFLENBQUM7Z0JBQ2hCLEtBQUssTUFBTTtvQkFDVCxPQUFPLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsUUFBUSxDQUFDO29CQUNuRCxNQUFNO2dCQUNSLEtBQUssT0FBTztvQkFDVixPQUFPLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDO29CQUNsRCxNQUFNO2dCQUNSLEtBQUssS0FBSztvQkFDUixPQUFPLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsU0FBUyxDQUFDO29CQUNyRCxNQUFNO2dCQUNSLEtBQUssUUFBUTtvQkFDWCxPQUFPLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsU0FBUyxDQUFDO29CQUNsRCxNQUFNO1lBQ1YsQ0FBQztZQUNELE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQzsrR0F0RVUseUJBQXlCO21HQUF6Qix5QkFBeUIsNEZBMUIxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JUOzs0RkFFVSx5QkFBeUI7a0JBNUJyQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxvQkFBb0I7b0JBQzlCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JUO2lCQUNGO29GQUVVLFFBQVE7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IFN0aVBhZGRpbmcgZnJvbSBcIi4uLy4uLy4uLy4uL3Byb3BlcnRpZXMvU3RpUGFkZGluZ1wiO1xyXG5pbXBvcnQgeyBTdGlNb2RlbFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vc2VydmljZXMvbW9kZWwuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBTdGlFZGl0b3JQcm9wZXJ0eSB9IGZyb20gXCIuLi8uLi8uLi8uLi9zZXJ2aWNlcy9vYmplY3RzXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJzdGktcGFkZGluZy1lZGl0b3JcIixcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPHRhYmxlIGNsYXNzPVwic3RpLWNsZWFyXCIgW3N0eWxlXT1cInsgd2lkdGg6ICcxMDAlJyB9XCI+XHJcbiAgICAgIDx0ciBbc3R5bGVdPVwieyB3aWR0aDogJzEwMCUnIH1cIj5cclxuICAgICAgICA8dGQgKm5nRm9yPVwibGV0IHAgb2YgUEFERElOR1M7IGluZGV4IGFzIGlcIiBbc3R5bGVdPVwieyBtaW5XaWR0aDogJzUwcHgnIH1cIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1pbnB1dC1pY29uLWxlZnRcIj5cclxuICAgICAgICAgICAgPGkgW2NsYXNzXT1cIkNMQVNTRVNbaV1cIiBbc3R5bGVdPVwieyBwb3NpdGlvbjogJ2Fic29sdXRlJywgbGVmdDogJzNweCcsIHRvcDogJzE3cHgnIH1cIj48L2k+XHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICBzdGlJbnB1dFRleHRcclxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJwYWRkaW5nW3BdXCJcclxuICAgICAgICAgICAgICBzcGVsbGNoZWNrPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgIChpbnB1dCk9XCJzZXRQYWRkaW5nKCRldmVudC50YXJnZXQudmFsdWUsIHApXCJcclxuICAgICAgICAgICAgICBbc3R5bGVdPVwieyB3aWR0aDogJzEwMCUnLCBwYWRkaW5nTGVmdDogJzExcHgnIH1cIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgIDwvdHI+XHJcbiAgICA8L3RhYmxlPlxyXG5cclxuICAgIDxzdHlsZT5cclxuICAgICAgdGQge1xyXG4gICAgICAgIHBhZGRpbmc6IDA7XHJcbiAgICAgIH1cclxuICAgIDwvc3R5bGU+XHJcbiAgYCxcclxufSlcclxuZXhwb3J0IGNsYXNzIFN0aVBhZGRpbmdFZGl0b3JDb21wb25lbnQge1xyXG4gIEBJbnB1dCgpIHByb3BlcnR5OiBTdGlFZGl0b3JQcm9wZXJ0eTtcclxuXHJcbiAgUEFERElOR1MgPSBbXCJsZWZ0XCIsIFwidG9wXCIsIFwicmlnaHRcIiwgXCJib3R0b21cIl07XHJcbiAgQ0xBU1NFUyA9IFtcInBpIHBpLWFycm93LWxlZnRcIiwgXCJwaSBwaS1hcnJvdy11cFwiLCBcInBpIHBpLWFycm93LXJpZ2h0XCIsIFwicGkgcGktYXJyb3ctZG93blwiXTtcclxuXHJcbiAgY29uc3RydWN0b3IocHVibGljIG1vZGVsOiBTdGlNb2RlbFNlcnZpY2UpIHt9XHJcblxyXG4gIHB1YmxpYyBnZXQgcGFkZGluZygpOiBTdGlQYWRkaW5nIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMubW9kZWwuc2VsZWN0ZWRDb21wb25lbnQ/LmVsZW1lbnRbdGhpcy5wcm9wZXJ0eS5wcm9wZXJ0eV0gPz9cclxuICAgICAgKHRoaXMubW9kZWwuc2VsZWN0ZWRQYWdlID8gdGhpcy5tb2RlbC5zZWxlY3RlZFBhZ2VbdGhpcy5wcm9wZXJ0eS5wcm9wZXJ0eV0gOiB0aGlzLm1vZGVsLmZvcm0uc2V0dGluZ3MucGFkZGluZylcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBzZXRQYWRkaW5nKHN0cjogc3RyaW5nLCBwYWRkaW5nOiBzdHJpbmcpIHtcclxuICAgIGxldCB2YWx1ZSA9ICFpc05hTihwYXJzZUZsb2F0KHN0cikpID8gcGFyc2VGbG9hdChzdHIpIDogMDtcclxuICAgIGlmICh0aGlzLmlzVmFsaWQodmFsdWUsIHBhZGRpbmcpKSB7XHJcbiAgICAgIGlmICh2YWx1ZSA8PSAwKSB7XHJcbiAgICAgICAgdGhpcy5wYWRkaW5nW3BhZGRpbmddID0gMDtcclxuICAgICAgICB0aGlzLm1vZGVsLnByZXZpb3VzUGFkZGluZ1twYWRkaW5nXSA9IDA7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5wYWRkaW5nW3BhZGRpbmddID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5tb2RlbC5wcmV2aW91c1BhZGRpbmdbcGFkZGluZ10gPSB2YWx1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHBhZGRpbmcgPT0gXCJsZWZ0XCIgfHwgcGFkZGluZyA9PSBcInJpZ2h0XCIpIHtcclxuICAgICAgICB0aGlzLm1vZGVsLnByZXZpb3VzQ29udGVudEFyZWFXaWR0aCA9IHRoaXMubW9kZWwubGFzdFVzZWRQYWdlPy5jb250ZW50QXJlYVdpZHRoO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHB1YmxpYyBpc1ZhbGlkKHZhbHVlOiBudW1iZXIsIHBhZGRpbmc6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IG1heEhlaWdodCA9IHRoaXMubW9kZWwuc2VsZWN0ZWRQYWdlXHJcbiAgICAgID8gdGhpcy5tb2RlbC5zZWxlY3RlZFBhZ2UuaGVpZ2h0XHJcbiAgICAgIDogdGhpcy5tb2RlbC5nZXRFbGVtZW50UGFnZSh0aGlzLm1vZGVsLnNlbGVjdGVkQ29tcG9uZW50Py5lbGVtZW50KVxyXG4gICAgICA/IHRoaXMubW9kZWwuZ2V0RWxlbWVudFBhZ2UodGhpcy5tb2RlbC5zZWxlY3RlZENvbXBvbmVudD8uZWxlbWVudCkuY29udGVudEFyZWFIZWlnaHRcclxuICAgICAgOiB0aGlzLm1vZGVsLmdldEVsZW1lbnRQYW5lbCh0aGlzLm1vZGVsLnNlbGVjdGVkQ29tcG9uZW50Py5lbGVtZW50KVxyXG4gICAgICA/IHRoaXMubW9kZWwuZ2V0RWxlbWVudFBhbmVsKHRoaXMubW9kZWwuc2VsZWN0ZWRDb21wb25lbnQ/LmVsZW1lbnQpLmNvbnRlbnRBcmVhSGVpZ2h0XHJcbiAgICAgIDogbnVsbDtcclxuICAgIGxldCBtYXhXaWR0aCA9IHRoaXMubW9kZWwuc2VsZWN0ZWRQYWdlXHJcbiAgICAgID8gdGhpcy5tb2RlbC5zZWxlY3RlZFBhZ2Uud2lkdGhcclxuICAgICAgOiB0aGlzLm1vZGVsLmdldEVsZW1lbnRQYWdlKHRoaXMubW9kZWwuc2VsZWN0ZWRDb21wb25lbnQ/LmVsZW1lbnQpXHJcbiAgICAgID8gdGhpcy5tb2RlbC5nZXRFbGVtZW50UGFnZSh0aGlzLm1vZGVsLnNlbGVjdGVkQ29tcG9uZW50Py5lbGVtZW50KS5jb250ZW50QXJlYVdpZHRoXHJcbiAgICAgIDogdGhpcy5tb2RlbC5nZXRFbGVtZW50UGFuZWwodGhpcy5tb2RlbC5zZWxlY3RlZENvbXBvbmVudD8uZWxlbWVudClcclxuICAgICAgPyB0aGlzLm1vZGVsLmdldEVsZW1lbnRQYW5lbCh0aGlzLm1vZGVsLnNlbGVjdGVkQ29tcG9uZW50Py5lbGVtZW50KS5jb250ZW50QXJlYVdpZHRoXHJcbiAgICAgIDogbnVsbDtcclxuICAgIGlmICghbWF4SGVpZ2h0IHx8ICFtYXhXaWR0aCkge1xyXG4gICAgICBtYXhIZWlnaHQgPSB0aGlzLm1vZGVsPy5mb3JtPy5wYWdlc1swXS5jb250ZW50QXJlYUhlaWdodDtcclxuICAgICAgbWF4V2lkdGggPSB0aGlzLm1vZGVsPy5mb3JtPy5wYWdlc1swXS5jb250ZW50QXJlYVdpZHRoO1xyXG4gICAgfVxyXG4gICAgaWYgKG1heEhlaWdodCAmJiBtYXhXaWR0aCkge1xyXG4gICAgICBsZXQgaXNWYWxpZCA9IGZhbHNlO1xyXG4gICAgICBzd2l0Y2ggKHBhZGRpbmcpIHtcclxuICAgICAgICBjYXNlIFwibGVmdFwiOlxyXG4gICAgICAgICAgaXNWYWxpZCA9IHZhbHVlICsgdGhpcy5wYWRkaW5nW1wicmlnaHRcIl0gPCBtYXhXaWR0aDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJyaWdodFwiOlxyXG4gICAgICAgICAgaXNWYWxpZCA9IHZhbHVlICsgdGhpcy5wYWRkaW5nW1wibGVmdFwiXSA8IG1heFdpZHRoO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcInRvcFwiOlxyXG4gICAgICAgICAgaXNWYWxpZCA9IHZhbHVlICsgdGhpcy5wYWRkaW5nW1wiYm90dG9tXCJdIDwgbWF4SGVpZ2h0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcImJvdHRvbVwiOlxyXG4gICAgICAgICAgaXNWYWxpZCA9IHZhbHVlICsgdGhpcy5wYWRkaW5nW1widG9wXCJdIDwgbWF4SGVpZ2h0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGlzVmFsaWQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19