@formql/core
Version:
FormQL - A framework for building dynamic forms
119 lines • 15.6 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { Directive, ElementRef, Input, ViewContainerRef, TemplateRef, Renderer2, Output, EventEmitter } from '@angular/core';
let LayoutDirective = class LayoutDirective {
constructor(view, el, renderer, template) {
this.view = view;
this.el = el;
this.renderer = renderer;
this.template = template;
this.resetItems = new EventEmitter();
}
set formqlGdConfigOf(config) {
this.view.clear();
this.setParentAttributes(config);
const list = this.getGridStyleList(config);
if (list) {
this.resetItems.emit(true);
list.forEach((item, index) => {
this.view.createEmbeddedView(this.template, {
$implicit: item,
index
});
});
}
}
/**
* Get a list with the grid styling
*
* @param style: style configuration
*/
getGridStyleList(config) {
if (config) {
const divList = [];
const rowsDefArr = config.gridTemplateAreas.split('" "');
const style = {};
if (config.gridTemplateColumns) {
style['grid-template-columns'] = config.gridTemplateColumns;
style['-ms-grid-columns'] = style['grid-template-columns'];
}
if (config.gridTemplateRows) {
style['grid-template-rows'] = config.gridTemplateRows;
style['-ms-grid-rows'] = style['grid-template-rows'];
}
const idList = [];
for (let i = 0; i < rowsDefArr.length; i++) {
const rowArr = rowsDefArr[i].split(' ');
for (let y = 0; y < rowArr.length; y++) {
const cell = rowArr[y].replace(/\"/g, '');
const existingCell = divList.find(x => x.id === cell);
if (!existingCell) {
idList.push(cell);
divList.push({
id: cell,
style: { 'grid-area': cell,
'-ms-grid-row': i + 1,
'-ms-grid-row-span': 1,
'-ms-grid-column': y + 1,
'-ms-grid-column-span': 1
}
});
}
else
existingCell.style['-ms-grid-row'] - 1 === i ?
existingCell.style['-ms-grid-column-span']++ :
existingCell.style['-ms-grid-row-span']++;
}
}
return divList;
}
return null;
}
/**
* Set the appropiate css grid attributes for the parent object
*
* @param style
*/
setParentAttributes(config) {
let parentElement = this.el.nativeElement.parentElement;
if (!parentElement)
parentElement = this.el.nativeElement.parentNode;
let styleAttrValue = '';
if (config.gridTemplateAreas)
styleAttrValue += `grid-template-areas:${config.gridTemplateAreas};`;
if (config.gridTemplateColumns) {
styleAttrValue += `grid-template-columns:${config.gridTemplateColumns};`;
styleAttrValue += `-ms-grid-columns:${config.gridTemplateColumns};`;
}
if (config.gridTemplateRows) {
styleAttrValue += `grid-template-rows:${config.gridTemplateRows};`;
styleAttrValue += `-ms-grid-rows:${config.gridTemplateRows};`;
}
if (config.style) {
const array = Object.keys(config.style);
for (let i = 0; i < array.length; i++)
styleAttrValue += array[i] + ':' + config.style[array[i]] + ';';
}
if (styleAttrValue)
this.renderer.setAttribute(parentElement, 'style', styleAttrValue);
}
};
__decorate([
Output(),
__metadata("design:type", EventEmitter)
], LayoutDirective.prototype, "resetItems", void 0);
__decorate([
Input(),
__metadata("design:type", Object),
__metadata("design:paramtypes", [Object])
], LayoutDirective.prototype, "formqlGdConfigOf", null);
LayoutDirective = __decorate([
Directive({
selector: '[formqlGdConfig][formqlGdConfigOf]'
}),
__metadata("design:paramtypes", [ViewContainerRef,
ElementRef,
Renderer2,
TemplateRef])
], LayoutDirective);
export { LayoutDirective };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bmb3JtcWwvY29yZS8iLCJzb3VyY2VzIjpbImRpcmVjdGl2ZXMvbGF5b3V0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU03SCxJQUFhLGVBQWUsR0FBNUIsTUFBYSxlQUFlO0lBQ3hCLFlBQW9CLElBQXNCLEVBQzlCLEVBQWMsRUFDZCxRQUFtQixFQUNuQixRQUEwQjtRQUhsQixTQUFJLEdBQUosSUFBSSxDQUFrQjtRQUM5QixPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQ2QsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixhQUFRLEdBQVIsUUFBUSxDQUFrQjtRQUU1QixlQUFVLEdBQTBCLElBQUksWUFBWSxFQUFFLENBQUM7SUFGdkIsQ0FBQztJQUszQyxJQUFJLGdCQUFnQixDQUFDLE1BQWlCO1FBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFbEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWpDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQyxJQUFJLElBQUksRUFBRTtZQUNSLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtvQkFDeEMsU0FBUyxFQUFFLElBQUk7b0JBQ2YsS0FBSztpQkFDUixDQUFDLENBQUM7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Y3RpdmUsIEVsZW1lbnRSZWYsIElucHV0LCBWaWV3Q29udGFpbmVyUmVmLCBUZW1wbGF0ZVJlZiwgUmVuZGVyZXIyLCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBHcmlkU3R5bGUgfSBmcm9tICcuLi9tb2RlbHMvc3R5bGUubW9kZWwnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgICBzZWxlY3RvcjogJ1tmb3JtcWxHZENvbmZpZ11bZm9ybXFsR2RDb25maWdPZl0nXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMYXlvdXREaXJlY3RpdmUge1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSB2aWV3OiBWaWV3Q29udGFpbmVyUmVmLFxyXG4gICAgICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXHJcbiAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgICAgIHByaXZhdGUgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHsgfVxyXG5cclxuICAgIEBPdXRwdXQoKSByZXNldEl0ZW1zOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHNldCBmb3JtcWxHZENvbmZpZ09mKGNvbmZpZzogR3JpZFN0eWxlKSB7XHJcbiAgICAgICAgdGhpcy52aWV3LmNsZWFyKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0UGFyZW50QXR0cmlidXRlcyhjb25maWcpO1xyXG5cclxuICAgICAgICBjb25zdCBsaXN0ID0gdGhpcy5nZXRHcmlkU3R5bGVMaXN0KGNvbmZpZyk7XHJcbiAgICAgICAgaWYgKGxpc3QpIHtcclxuICAgICAgICAgIHRoaXMucmVzZXRJdGVtcy5lbWl0KHRydWUpO1xyXG4gICAgICAgICAgbGlzdC5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMudmlldy5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZSwge1xyXG4gICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGl0ZW0sXHJcbiAgICAgICAgICAgICAgICAgIGluZGV4XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgYSBsaXN0IHdpdGggdGhlIGdyaWQgc3R5bGluZ1xyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBzdHlsZTogc3R5bGUgY29uZmlndXJhdGlvblxyXG4gICAgICovXHJcbiAgICBnZXRHcmlkU3R5bGVMaXN0KGNvbmZpZzogR3JpZFN0eWxlKSB7XHJcbiAgICAgICAgaWYgKGNvbmZpZykge1xyXG4gICAgICAgICAgICBjb25zdCBkaXZMaXN0ID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IHJvd3NEZWZBcnIgPSBjb25maWcuZ3JpZFRlbXBsYXRlQXJlYXMuc3BsaXQoJ1wiIFwiJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0eWxlID0ge307XHJcbiAgICAgICAgICAgIGlmIChjb25maWcuZ3JpZFRlbXBsYXRlQ29sdW1ucykge1xyXG4gICAgICAgICAgICAgICAgc3R5bGVbJ2dyaWQtdGVtcGxhdGUtY29sdW1ucyddID0gY29uZmlnLmdyaWRUZW1wbGF0ZUNvbHVtbnM7XHJcbiAgICAgICAgICAgICAgICBzdHlsZVsnLW1zLWdyaWQtY29sdW1ucyddID0gc3R5bGVbJ2dyaWQtdGVtcGxhdGUtY29sdW1ucyddO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjb25maWcuZ3JpZFRlbXBsYXRlUm93cykge1xyXG4gICAgICAgICAgICAgICAgc3R5bGVbJ2dyaWQtdGVtcGxhdGUtcm93cyddID0gY29uZmlnLmdyaWRUZW1wbGF0ZVJvd3M7XHJcbiAgICAgICAgICAgICAgICBzdHlsZVsnLW1zLWdyaWQtcm93cyddID0gc3R5bGVbJ2dyaWQtdGVtcGxhdGUtcm93cyddO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGlkTGlzdCA9IFtdO1xyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzRGVmQXJyLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByb3dBcnIgPSByb3dzRGVmQXJyW2ldLnNwbGl0KCcgJyk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCB5ID0gMDsgeSA8IHJvd0Fyci5sZW5ndGg7IHkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGwgPSByb3dBcnJbeV0ucmVwbGFjZSgvXFxcIi9nLCAnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdDZWxsID0gZGl2TGlzdC5maW5kKHggPT4geC5pZCA9PT0gY2VsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFleGlzdGluZ0NlbGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWRMaXN0LnB1c2goY2VsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpdkxpc3QucHVzaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogY2VsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZTogIHsgJ2dyaWQtYXJlYSc6IGNlbGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctbXMtZ3JpZC1yb3cnOiBpICsgMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1tcy1ncmlkLXJvdy1zcGFuJzogMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1tcy1ncmlkLWNvbHVtbic6IHkgKyAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLW1zLWdyaWQtY29sdW1uLXNwYW4nOiAxXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdDZWxsLnN0eWxlWyctbXMtZ3JpZC1yb3cnXSAtIDEgPT09IGkgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQ2VsbC5zdHlsZVsnLW1zLWdyaWQtY29sdW1uLXNwYW4nXSsrIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0NlbGwuc3R5bGVbJy1tcy1ncmlkLXJvdy1zcGFuJ10rKztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZGl2TGlzdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIGFwcHJvcGlhdGUgY3NzIGdyaWQgYXR0cmlidXRlcyBmb3IgdGhlIHBhcmVudCBvYmplY3RcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gc3R5bGVcclxuICAgICAqL1xyXG4gICAgc2V0UGFyZW50QXR0cmlidXRlcyhjb25maWc6IEdyaWRTdHlsZSkge1xyXG4gICAgICAgIGxldCBwYXJlbnRFbGVtZW50ID0gPEhUTUxFbGVtZW50PnRoaXMuZWwubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50O1xyXG4gICAgICAgIGlmICghcGFyZW50RWxlbWVudClcclxuICAgICAgICAgICAgcGFyZW50RWxlbWVudCA9IDxIVE1MRWxlbWVudD50aGlzLmVsLm5hdGl2ZUVsZW1lbnQucGFyZW50Tm9kZTtcclxuXHJcbiAgICAgICAgbGV0IHN0eWxlQXR0clZhbHVlID0gJyc7XHJcbiAgICAgICAgaWYgKGNvbmZpZy5ncmlkVGVtcGxhdGVBcmVhcylcclxuICAgICAgICAgICAgc3R5bGVBdHRyVmFsdWUgKz0gYGdyaWQtdGVtcGxhdGUtYXJlYXM6JHtjb25maWcuZ3JpZFRlbXBsYXRlQXJlYXN9O2A7XHJcblxyXG4gICAgICAgIGlmIChjb25maWcuZ3JpZFRlbXBsYXRlQ29sdW1ucykge1xyXG4gICAgICAgICAgICBzdHlsZUF0dHJWYWx1ZSArPSBgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiR7Y29uZmlnLmdyaWRUZW1wbGF0ZUNvbHVtbnN9O2A7XHJcbiAgICAgICAgICAgIHN0eWxlQXR0clZhbHVlICs9IGAtbXMtZ3JpZC1jb2x1bW5zOiR7Y29uZmlnLmdyaWRUZW1wbGF0ZUNvbHVtbnN9O2A7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY29uZmlnLmdyaWRUZW1wbGF0ZVJvd3MpIHtcclxuICAgICAgICAgICAgc3R5bGVBdHRyVmFsdWUgKz0gYGdyaWQtdGVtcGxhdGUtcm93czoke2NvbmZpZy5ncmlkVGVtcGxhdGVSb3dzfTtgO1xyXG4gICAgICAgICAgICBzdHlsZUF0dHJWYWx1ZSArPSBgLW1zLWdyaWQtcm93czoke2NvbmZpZy5ncmlkVGVtcGxhdGVSb3dzfTtgO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNvbmZpZy5zdHlsZSkge1xyXG4gICAgICAgICAgICBjb25zdCBhcnJheSA9IE9iamVjdC5rZXlzKGNvbmZpZy5zdHlsZSk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgICAgICBzdHlsZUF0dHJWYWx1ZSArPSBhcnJheVtpXSArICc6JyArIGNvbmZpZy5zdHlsZVthcnJheVtpXV0gKyAnOyc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc3R5bGVBdHRyVmFsdWUpXHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHBhcmVudEVsZW1lbnQsICdzdHlsZScsIHN0eWxlQXR0clZhbHVlKTtcclxuXHJcbiAgICB9XHJcbn1cclxuIl19