truly-ui
Version:
Web Components for Desktop Applications.
110 lines (108 loc) • 13.7 kB
JavaScript
/*
MIT License
Copyright (c) 2019 Temainfo Sistemas
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
import { Directive, Input } from '@angular/core';
import * as i0 from "@angular/core";
export class FixedPositionDirective {
constructor(renderer, hostElement) {
this.renderer = renderer;
this.hostElement = hostElement;
this.positionY = 'above';
this.positionX = 'after';
this.overlapTrigger = false;
}
ngAfterViewInit() {
this.listenScroll();
}
setPositioning() {
if (this.target && this.hostElement) {
this.validateTypeTarget();
this.renderer.setStyle(this.hostElement.nativeElement, 'position', 'fixed');
this.setLeftPosition();
this.setPositionY();
this.setPositionX();
}
}
listenScroll() {
this.renderer.listen(window, 'scroll', () => {
this.setPositioning();
});
}
validateTypeTarget() {
if (this.target.localName === 'tl-button') {
this.target = this.target.firstElementChild;
}
}
setLeftPosition() {
this.renderer.setStyle(this.hostElement.nativeElement, 'left', this.target.getBoundingClientRect().left + 'px');
}
setPositionY() {
switch (this.positionY) {
case 'bellow':
this.setBellowPosition();
break;
case 'above':
this.setAbovePosition();
break;
}
}
setPositionX() {
switch (this.positionX) {
case 'after':
this.setAfterPosition();
break;
case 'before':
this.setBeforePosition();
break;
}
}
setBeforePosition() {
this.renderer.setStyle(this.hostElement.nativeElement, 'left', this.target.getBoundingClientRect().left + 'px');
}
setAfterPosition() {
this.renderer.setStyle(this.hostElement.nativeElement, 'left', this.target.getBoundingClientRect().right - this.hostElement.nativeElement.offsetWidth + 'px');
}
setAbovePosition() {
const calcPos = this.target.getBoundingClientRect().top - this.hostElement.nativeElement.offsetHeight;
const calcOverlap = !this.overlapTrigger ? calcPos : calcPos + this.target.offsetHeight;
this.renderer.setStyle(this.hostElement.nativeElement, 'top', calcOverlap + 'px');
}
setBellowPosition() {
const calcPos = this.target.getBoundingClientRect().top;
const calcOverlap = !this.overlapTrigger ? calcPos + this.target.offsetHeight : calcPos;
this.renderer.setStyle(this.hostElement.nativeElement, 'top', calcOverlap + 'px');
}
}
/** @nocollapse */ FixedPositionDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FixedPositionDirective, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
/** @nocollapse */ FixedPositionDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: FixedPositionDirective, selector: "[fixedPosition]", inputs: { positionY: "positionY", positionX: "positionX", overlapTrigger: "overlapTrigger", target: "target" }, ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FixedPositionDirective, decorators: [{
type: Directive,
args: [{
selector: '[fixedPosition]'
}]
}], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }]; }, propDecorators: { positionY: [{
type: Input
}], positionX: [{
type: Input
}], overlapTrigger: [{
type: Input
}], target: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4ZWQtcG9zaXRpb24uZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdHJ1bHktdWkvc3JjL2NvbXBvbmVudHMvbWlzYy9maXhlZC1wb3NpdGlvbi5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBQ0gsT0FBTyxFQUFpQixTQUFTLEVBQWMsS0FBSyxFQUFhLE1BQU0sZUFBZSxDQUFDOztBQUt2RixNQUFNLE9BQU8sc0JBQXNCO0lBVWpDLFlBQXFCLFFBQW1CLEVBQVUsV0FBdUI7UUFBcEQsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBUmhFLGNBQVMsR0FBRyxPQUFPLENBQUM7UUFFcEIsY0FBUyxHQUFHLE9BQU8sQ0FBQztRQUVwQixtQkFBYyxHQUFHLEtBQUssQ0FBQztJQUk2QyxDQUFDO0lBRTlFLGVBQWU7UUFDYixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELGNBQWM7UUFDWixJQUFLLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRztZQUNyQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFFLENBQUM7WUFDOUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDckI7SUFDSCxDQUFDO0lBRU8sWUFBWTtRQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRTtZQUMxQyxJQUFJLENBQUMsY0FBYyxF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Qjt5SEFHVSxTQUFTO3NCQUFqQixLQUFLO2dCQUVHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUcsY0FBYztzQkFBdEIsS0FBSztnQkFFRyxNQUFNO3NCQUFkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuIE1JVCBMaWNlbnNlXG5cbiBDb3B5cmlnaHQgKGMpIDIwMTkgVGVtYWluZm8gU2lzdGVtYXNcblxuIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gU09GVFdBUkUuXG4gKi9cbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSW5wdXQsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ARGlyZWN0aXZlKCB7XG4gIHNlbGVjdG9yOiAnW2ZpeGVkUG9zaXRpb25dJ1xufSApXG5leHBvcnQgY2xhc3MgRml4ZWRQb3NpdGlvbkRpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuXG4gIEBJbnB1dCgpIHBvc2l0aW9uWSA9ICdhYm92ZSc7XG5cbiAgQElucHV0KCkgcG9zaXRpb25YID0gJ2FmdGVyJztcblxuICBASW5wdXQoKSBvdmVybGFwVHJpZ2dlciA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHRhcmdldDtcblxuICBjb25zdHJ1Y3RvciggcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLCBwcml2YXRlIGhvc3RFbGVtZW50OiBFbGVtZW50UmVmICkge31cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5saXN0ZW5TY3JvbGwoKTtcbiAgfVxuXG4gIHNldFBvc2l0aW9uaW5nKCkge1xuICAgIGlmICggdGhpcy50YXJnZXQgJiYgdGhpcy5ob3N0RWxlbWVudCApIHtcbiAgICAgIHRoaXMudmFsaWRhdGVUeXBlVGFyZ2V0KCk7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKCB0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsICdwb3NpdGlvbicsICdmaXhlZCcgKTtcbiAgICAgIHRoaXMuc2V0TGVmdFBvc2l0aW9uKCk7XG4gICAgICB0aGlzLnNldFBvc2l0aW9uWSgpO1xuICAgICAgdGhpcy5zZXRQb3NpdGlvblgoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxpc3RlblNjcm9sbCgpIHtcbiAgICB0aGlzLnJlbmRlcmVyLmxpc3Rlbih3aW5kb3csICdzY3JvbGwnLCAoKSA9PiB7XG4gICAgICB0aGlzLnNldFBvc2l0aW9uaW5nKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlVHlwZVRhcmdldCgpIHtcbiAgICBpZiAoIHRoaXMudGFyZ2V0LmxvY2FsTmFtZSA9PT0gJ3RsLWJ1dHRvbicgKSB7XG4gICAgICB0aGlzLnRhcmdldCA9IHRoaXMudGFyZ2V0LmZpcnN0RWxlbWVudENoaWxkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0TGVmdFBvc2l0aW9uKCkge1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoIHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudCwgJ2xlZnQnLFxuICAgICAgdGhpcy50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCArICdweCcgKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0UG9zaXRpb25ZKCkge1xuICAgIHN3aXRjaCAoIHRoaXMucG9zaXRpb25ZICkge1xuICAgICAgY2FzZSAnYmVsbG93JyA6XG4gICAgICAgIHRoaXMuc2V0QmVsbG93UG9zaXRpb24oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhYm92ZSc6XG4gICAgICAgIHRoaXMuc2V0QWJvdmVQb3NpdGlvbigpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFBvc2l0aW9uWCgpIHtcbiAgICBzd2l0Y2ggKCB0aGlzLnBvc2l0aW9uWCApIHtcbiAgICAgIGNhc2UgJ2FmdGVyJyA6XG4gICAgICAgIHRoaXMuc2V0QWZ0ZXJQb3NpdGlvbigpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2JlZm9yZSc6XG4gICAgICAgIHRoaXMuc2V0QmVmb3JlUG9zaXRpb24oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRCZWZvcmVQb3NpdGlvbigpIHtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKCB0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsICdsZWZ0JyxcbiAgICAgIHRoaXMudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgKyAncHgnICk7XG4gIH1cblxuICBwcml2YXRlIHNldEFmdGVyUG9zaXRpb24oKSB7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSggdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LCAnbGVmdCcsXG4gICAgICB0aGlzLnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodCAtIHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCArICdweCcgKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0QWJvdmVQb3NpdGlvbigpIHtcbiAgICBjb25zdCBjYWxjUG9zID0gdGhpcy50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIC0gdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgICBjb25zdCBjYWxjT3ZlcmxhcCA9ICF0aGlzLm92ZXJsYXBUcmlnZ2VyID8gY2FsY1BvcyA6IGNhbGNQb3MgKyB0aGlzLnRhcmdldC5vZmZzZXRIZWlnaHQ7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSggdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LCAndG9wJywgY2FsY092ZXJsYXAgKyAncHgnICk7XG4gIH1cblxuICBwcml2YXRlIHNldEJlbGxvd1Bvc2l0aW9uKCkge1xuICAgIGNvbnN0IGNhbGNQb3MgPSB0aGlzLnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7XG4gICAgY29uc3QgY2FsY092ZXJsYXAgPSAhdGhpcy5vdmVybGFwVHJpZ2dlciA/IGNhbGNQb3MgKyB0aGlzLnRhcmdldC5vZmZzZXRIZWlnaHQgOiBjYWxjUG9zO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoIHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudCwgJ3RvcCcsIGNhbGNPdmVybGFwICsgJ3B4JyApO1xuICB9XG5cbn1cblxuIl19