ng-devui
Version:
DevUI components based on Angular
118 lines • 16.9 kB
JavaScript
import { Directive, ElementRef, Input, Renderer2 } from '@angular/core';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { DBreakpoints } from './layout.types';
import { DScreenMediaQueryService } from './screen-media-query.service';
import * as i0 from "@angular/core";
import * as i1 from "./screen-media-query.service";
export class DGutterDirective {
constructor(elementRef, renderer, screenQueryService) {
this.elementRef = elementRef;
this.renderer = renderer;
this.screenQueryService = screenQueryService;
this.destroy$ = new Subject();
this.executedGutter = [null, null];
}
ngAfterViewInit() {
this.screenQueryService
.getPoint()
.pipe(takeUntil(this.destroy$))
.subscribe(({ currentPoint }) => {
this.updateGutter(currentPoint);
});
}
getCurrentGutter(currentPoint) {
let finalGutter = [null, null];
if (Array.isArray(this.dGutter) || typeof this.dGutter === 'number') {
finalGutter = this._transGutterToArray(this.dGutter);
}
else {
for (const point of DBreakpoints) {
if (this.dGutter[point] !== undefined) {
finalGutter = this._transGutterToArray(this.dGutter[point]);
}
if (currentPoint === point) {
break;
}
}
}
return finalGutter;
}
_transGutterToArray(gutter) {
let finalGutter = gutter;
if (typeof gutter === 'number') {
finalGutter = [gutter, null];
}
if (this.dGutterDirection === 'vertical') {
finalGutter = finalGutter.reverse();
}
return finalGutter;
}
updateGutter(currentPoint) {
const finalGutter = this.getCurrentGutter(currentPoint);
this.updateChildrenGutter(finalGutter);
this.updateParentGutter(finalGutter);
this.executedGutter = finalGutter;
}
updateChildrenGutter(gutter) {
const items = this.elementRef.nativeElement.children;
for (let i = 0; i < items.length; i++) {
if (gutter[0] !== null) {
this.renderer.setStyle(items[i], 'padding-left', gutter[0] / 2 + 'px');
this.renderer.setStyle(items[i], 'padding-right', gutter[0] / 2 + 'px');
}
else if (this.executedGutter[0] !== null) {
this.renderer.removeStyle(items[i], 'padding-left');
this.renderer.removeStyle(items[i], 'padding-right');
}
if (gutter[1] !== null) {
this.renderer.setStyle(items[i], 'padding-top', gutter[1] / 2 + 'px');
this.renderer.setStyle(items[i], 'padding-bottom', gutter[1] / 2 + 'px');
}
else if (this.executedGutter[1] !== null) {
this.renderer.removeStyle(items[i], 'padding-top');
this.renderer.removeStyle(items[i], 'padding-bottom');
}
}
}
updateParentGutter(gutter) {
if (this.dGutterNoOuter) {
const element = this.elementRef.nativeElement;
if (gutter[0] !== null) {
this.renderer.setStyle(element, 'margin-left', -gutter[0] / 2 + 'px');
this.renderer.setStyle(element, 'margin-right', -gutter[0] / 2 + 'px');
}
else if (this.executedGutter[0] !== null) {
this.renderer.removeStyle(element, 'margin-left');
this.renderer.removeStyle(element, 'margin-right');
}
if (gutter[1] !== null) {
this.renderer.setStyle(element, 'margin-top', -gutter[1] / 2 + 'px');
this.renderer.setStyle(element, 'margin-bottom', -gutter[1] / 2 + 'px');
}
else if (this.executedGutter[1] !== null) {
this.renderer.removeStyle(element, 'margin-top');
this.renderer.removeStyle(element, 'margin-bottom');
}
}
}
ngOnDestroy() {
this.destroy$.next();
this.destroy$.complete();
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DGutterDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.DScreenMediaQueryService }], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: DGutterDirective, selector: "[dGutter]", inputs: { dGutter: "dGutter", dGutterDirection: "dGutterDirection", dGutterNoOuter: "dGutterNoOuter" }, ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DGutterDirective, decorators: [{
type: Directive,
args: [{
selector: `[dGutter]`,
}]
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1.DScreenMediaQueryService }], propDecorators: { dGutter: [{
type: Input
}], dGutterDirection: [{
type: Input
}], dGutterNoOuter: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3V0dGVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2RldnVpL2xheW91dC9ndXR0ZXIuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQWEsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxZQUFZLEVBQXNCLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sOEJBQThCLENBQUM7OztBQUt4RSxNQUFNLE9BQU8sZ0JBQWdCO0lBUTNCLFlBQW9CLFVBQXNCLEVBQVUsUUFBbUIsRUFBVSxrQkFBNEM7UUFBekcsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUFVLGFBQVEsR0FBUixRQUFRLENBQVc7UUFBVSx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQTBCO1FBUHJILGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQy9CLG1CQUFjLEdBQXFCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBTXdFLENBQUM7SUFFakksZUFBZTtRQUNiLElBQUksQ0FBQyxrQkFBa0I7YUFDcEIsUUFBUSxFQUFFO2FBQ1YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUIsU0FBUyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFO1lBQzlCLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsWUFBWTtRQUNuQyxJQUFJLFdBQVcsR0FBcUIsQ0FBQyxJQUFJLEVBQUUs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SyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSW5wdXQsIE9uRGVzdHJveSwgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBEQnJlYWtwb2ludHMsIERSZXNwb25zZVBhcmFtZXRlciB9IGZyb20gJy4vbGF5b3V0LnR5cGVzJztcbmltcG9ydCB7IERTY3JlZW5NZWRpYVF1ZXJ5U2VydmljZSB9IGZyb20gJy4vc2NyZWVuLW1lZGlhLXF1ZXJ5LnNlcnZpY2UnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6IGBbZEd1dHRlcl1gLFxufSlcbmV4cG9ydCBjbGFzcyBER3V0dGVyRGlyZWN0aXZlIGltcGxlbWVudHMgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgZXhlY3V0ZWRHdXR0ZXI6IFtudW1iZXIsIG51bWJlcl0gPSBbbnVsbCwgbnVsbF07XG5cbiAgQElucHV0KCkgZEd1dHRlcjogRFJlc3BvbnNlUGFyYW1ldGVyPG51bWJlciB8IFtudW1iZXIsIG51bWJlcl0+O1xuICBASW5wdXQoKSBkR3V0dGVyRGlyZWN0aW9uOiAndmVydGljYWwnIHwgJ2hvcml6b250YWwnO1xuICBASW5wdXQoKSBkR3V0dGVyTm9PdXRlcjogRFJlc3BvbnNlUGFyYW1ldGVyPGJvb2xlYW4+O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZiwgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLCBwcml2YXRlIHNjcmVlblF1ZXJ5U2VydmljZTogRFNjcmVlbk1lZGlhUXVlcnlTZXJ2aWNlKSB7fVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNjcmVlblF1ZXJ5U2VydmljZVxuICAgICAgLmdldFBvaW50KClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoKHsgY3VycmVudFBvaW50IH0pID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVHdXR0ZXIoY3VycmVudFBvaW50KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDdXJyZW50R3V0dGVyKGN1cnJlbnRQb2ludCk6IFtudW1iZXIsIG51bWJlcl0ge1xuICAgIGxldCBmaW5hbEd1dHRlcjogW251bWJlciwgbnVtYmVyXSA9IFtudWxsLCBudWxsXTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmRHdXR0ZXIpIHx8IHR5cGVvZiB0aGlzLmRHdXR0ZXIgPT09ICdudW1iZXInKSB7XG4gICAgICBmaW5hbEd1dHRlciA9IHRoaXMuX3RyYW5zR3V0dGVyVG9BcnJheSh0aGlzLmRHdXR0ZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGNvbnN0IHBvaW50IG9mIERCcmVha3BvaW50cykge1xuICAgICAgICBpZiAodGhpcy5kR3V0dGVyW3BvaW50XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZmluYWxHdXR0ZXIgPSB0aGlzLl90cmFuc0d1dHRlclRvQXJyYXkodGhpcy5kR3V0dGVyW3BvaW50XSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN1cnJlbnRQb2ludCA9PT0gcG9pbnQpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmaW5hbEd1dHRlcjtcbiAgfVxuXG4gIHByaXZhdGUgX3RyYW5zR3V0dGVyVG9BcnJheShndXR0ZXIpOiBbbnVtYmVyLCBudW1iZXJdIHtcbiAgICBsZXQgZmluYWxHdXR0ZXIgPSBndXR0ZXI7XG4gICAgaWYgKHR5cGVvZiBndXR0ZXIgPT09ICdudW1iZXInKSB7XG4gICAgICBmaW5hbEd1dHRlciA9IFtndXR0ZXIsIG51bGxdO1xuICAgIH1cbiAgICBpZiAodGhpcy5kR3V0dGVyRGlyZWN0aW9uID09PSAndmVydGljYWwnKSB7XG4gICAgICBmaW5hbEd1dHRlciA9IGZpbmFsR3V0dGVyLnJldmVyc2UoKSBhcyBbbnVtYmVyLCBudW1iZXJdO1xuICAgIH1cblxuICAgIHJldHVybiBmaW5hbEd1dHRlcjtcbiAgfVxuXG4gIHVwZGF0ZUd1dHRlcihjdXJyZW50UG9pbnQpIHtcbiAgICBjb25zdCBmaW5hbEd1dHRlciA9IHRoaXMuZ2V0Q3VycmVudEd1dHRlcihjdXJyZW50UG9pbnQpO1xuXG4gICAgdGhpcy51cGRhdGVDaGlsZHJlbkd1dHRlcihmaW5hbEd1dHRlcik7XG4gICAgdGhpcy51cGRhdGVQYXJlbnRHdXR0ZXIoZmluYWxHdXR0ZXIpO1xuXG4gICAgdGhpcy5leGVjdXRlZEd1dHRlciA9IGZpbmFsR3V0dGVyO1xuICB9XG5cbiAgdXBkYXRlQ2hpbGRyZW5HdXR0ZXIoZ3V0dGVyOiBbbnVtYmVyLCBudW1iZXJdKSB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jaGlsZHJlbjtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChndXR0ZXJbMF0gIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShpdGVtc1tpXSwgJ3BhZGRpbmctbGVmdCcsIGd1dHRlclswXSAvIDIgKyAncHgnKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShpdGVtc1tpXSwgJ3BhZGRpbmctcmlnaHQnLCBndXR0ZXJbMF0gLyAyICsgJ3B4Jyk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuZXhlY3V0ZWRHdXR0ZXJbMF0gIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZShpdGVtc1tpXSwgJ3BhZGRpbmctbGVmdCcpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKGl0ZW1zW2ldLCAncGFkZGluZy1yaWdodCcpO1xuICAgICAgfVxuICAgICAgaWYgKGd1dHRlclsxXSAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGl0ZW1zW2ldLCAncGFkZGluZy10b3AnLCBndXR0ZXJbMV0gLyAyICsgJ3B4Jyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoaXRlbXNbaV0sICdwYWRkaW5nLWJvdHRvbScsIGd1dHRlclsxXSAvIDIgKyAncHgnKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5leGVjdXRlZEd1dHRlclsxXSAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKGl0ZW1zW2ldLCAncGFkZGluZy10b3AnKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZShpdGVtc1tpXSwgJ3BhZGRpbmctYm90dG9tJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlUGFyZW50R3V0dGVyKGd1dHRlcjogW251bWJlciwgbnVtYmVyXSkge1xuICAgIGlmICh0aGlzLmRHdXR0ZXJOb091dGVyKSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBpZiAoZ3V0dGVyWzBdICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZWxlbWVudCwgJ21hcmdpbi1sZWZ0JywgLWd1dHRlclswXSAvIDIgKyAncHgnKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShlbGVtZW50LCAnbWFyZ2luLXJpZ2h0JywgLWd1dHRlclswXSAvIDIgKyAncHgnKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5leGVjdXRlZEd1dHRlclswXSAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKGVsZW1lbnQsICdtYXJnaW4tbGVmdCcpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKGVsZW1lbnQsICdtYXJnaW4tcmlnaHQnKTtcbiAgICAgIH1cbiAgICAgIGlmIChndXR0ZXJbMV0gIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShlbGVtZW50LCAnbWFyZ2luLXRvcCcsIC1ndXR0ZXJbMV0gLyAyICsgJ3B4Jyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZWxlbWVudCwgJ21hcmdpbi1ib3R0b20nLCAtZ3V0dGVyWzFdIC8gMiArICdweCcpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmV4ZWN1dGVkR3V0dGVyWzFdICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUoZWxlbWVudCwgJ21hcmdpbi10b3AnKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZShlbGVtZW50LCAnbWFyZ2luLWJvdHRvbScpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxufVxuIl19