UNPKG

ng-devui

Version:

DevUI components based on Angular

99 lines 12.6 kB
import { Directive, forwardRef, HostBinding, HostListener, Inject, Input } from '@angular/core'; import { scrollAnimate } from 'ng-devui/utils'; import { AnchorBoxDirective } from './anchor-box.directive'; import * as i0 from "@angular/core"; import * as i1 from "./anchor-box.directive"; export class AnchorLinkDirective { get anchorActiveClass() { return this.anchorBlock && this.anchorBlock.isActive ? this.anchorActive || '' : ''; } set anchorName(anchor) { this._anchorName = anchor; this.bindAnchorAfterBoxReady(); } get anchorName() { return this._anchorName; } constructor(box) { this.bindAnchorAfterBoxReady = () => { if (this.boxElement.anchorMap) { setTimeout(() => { this.anchorBlock = this.boxElement.anchorMap[this.anchorName]; }, 0); } else { this.bindingAnchorTimer = setTimeout(this.bindAnchorAfterBoxReady, 500); } }; this.boxElement = box; } ngOnInit() { this.subscribeAnchorMapChange(); } ngOnDestroy() { if (this.subscription) { this.subscription.unsubscribe(); } } subscribeAnchorMapChange() { if (this.boxElement) { this.subscription = this.boxElement.refreshAnchorMap.subscribe(() => { if (this.bindingAnchorTimer) { clearTimeout(this.bindingAnchorTimer); this.bindingAnchorTimer = undefined; } this.bindAnchorAfterBoxReady(); }); } } scrollToAnchor(activeChangeBy) { if (typeof document === 'undefined') { return; } if (!this.anchorBlock) { return; } const callback = () => { setTimeout(() => { this.boxElement.forceActiveAnchor(this.anchorName, activeChangeBy || 'anchor-link'); this.boxElement.isScrollingToTarget = false; }, 120); }; ((container, anchor) => { let containerScrollTop = container.scrollTop; let containerOffsetTop = container.getBoundingClientRect().top; if (container === document.documentElement) { containerScrollTop += document.body.scrollTop; // scrollTop兼容性问题 containerOffsetTop = 0; // offsettop抵消 } scrollAnimate(container, containerScrollTop, containerScrollTop + anchor.getBoundingClientRect().top - containerOffsetTop - ((this.boxElement.view && this.boxElement.view.top) || 0), undefined, undefined, callback); })(this.boxElement.scrollTarget || document.documentElement, this.anchorBlock.element); this.boxElement.isScrollingToTarget = true; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AnchorLinkDirective, deps: [{ token: forwardRef(() => AnchorBoxDirective) }], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: AnchorLinkDirective, selector: "[dAnchorLink]", inputs: { anchorName: ["dAnchorLink", "anchorName"], anchorActive: "anchorActive" }, host: { listeners: { "click": "scrollToAnchor()" }, properties: { "class": "this.anchorActiveClass" } }, ngImport: i0 }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AnchorLinkDirective, decorators: [{ type: Directive, args: [{ selector: '[dAnchorLink]', }] }], ctorParameters: () => [{ type: i1.AnchorBoxDirective, decorators: [{ type: Inject, args: [forwardRef(() => AnchorBoxDirective)] }] }], propDecorators: { anchorActiveClass: [{ type: HostBinding, args: ['class'] }], anchorName: [{ type: Input, args: ['dAnchorLink'] }], anchorActive: [{ type: Input }], scrollToAnchor: [{ type: HostListener, args: ['click'] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5jaG9yLWxpbmsuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZGV2dWkvYW5jaG9yL2FuY2hvci1saW5rLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ25ILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7O0FBTzVELE1BQU0sT0FBTyxtQkFBbUI7SUFDOUIsSUFBMEIsaUJBQWlCO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUN0RixDQUFDO0lBRUQsSUFDSSxVQUFVLENBQUMsTUFBYztRQUMzQixJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztRQUMxQixJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBQ0QsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFTRCxZQUEwRCxHQUF1QjtRQTBCakYsNEJBQXVCLEdBQUcsR0FBRyxFQUFFO1lBQzdCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDOUIsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDZCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDaEUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ1Is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bUdBckI3QyxtQkFBbUI7OzRGQUFuQixtQkFBbUI7a0JBSC9CLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGVBQWU7aUJBQzFCOzswQkFzQmMsTUFBTTsyQkFBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsa0JBQWtCLENBQUM7eUNBcEI5QixpQkFBaUI7c0JBQTFDLFdBQVc7dUJBQUMsT0FBTztnQkFLaEIsVUFBVTtzQkFEYixLQUFLO3VCQUFDLGFBQWE7Z0JBU1gsWUFBWTtzQkFBcEIsS0FBSztnQkE0Q04sY0FBYztzQkFEYixZQUFZO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIGZvcndhcmRSZWYsIEhvc3RCaW5kaW5nLCBIb3N0TGlzdGVuZXIsIEluamVjdCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBzY3JvbGxBbmltYXRlIH0gZnJvbSAnbmctZGV2dWkvdXRpbHMnO1xuaW1wb3J0IHsgQW5jaG9yQm94RGlyZWN0aXZlIH0gZnJvbSAnLi9hbmNob3ItYm94LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBBbmNob3JEaXJlY3RpdmUgfSBmcm9tICcuL2FuY2hvci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQW5jaG9yQWN0aXZlQ2hhbmdlU291cmNlIH0gZnJvbSAnLi9hbmNob3IudHlwZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tkQW5jaG9yTGlua10nLFxufSlcbmV4cG9ydCBjbGFzcyBBbmNob3JMaW5rRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzJykgZ2V0IGFuY2hvckFjdGl2ZUNsYXNzKCkge1xuICAgIHJldHVybiB0aGlzLmFuY2hvckJsb2NrICYmIHRoaXMuYW5jaG9yQmxvY2suaXNBY3RpdmUgPyB0aGlzLmFuY2hvckFjdGl2ZSB8fCAnJyA6ICcnO1xuICB9XG4gIHByaXZhdGUgX2FuY2hvck5hbWU7XG4gIEBJbnB1dCgnZEFuY2hvckxpbmsnKVxuICBzZXQgYW5jaG9yTmFtZShhbmNob3I6IHN0cmluZykge1xuICAgIHRoaXMuX2FuY2hvck5hbWUgPSBhbmNob3I7XG4gICAgdGhpcy5iaW5kQW5jaG9yQWZ0ZXJCb3hSZWFkeSgpO1xuICB9XG4gIGdldCBhbmNob3JOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLl9hbmNob3JOYW1lO1xuICB9XG5cbiAgQElucHV0KCkgYW5jaG9yQWN0aXZlOiBzdHJpbmc7XG5cbiAgYm94RWxlbWVudDogQW5jaG9yQm94RGlyZWN0aXZlO1xuICBhbmNob3JCbG9jazogQW5jaG9yRGlyZWN0aXZlO1xuICBiaW5kaW5nQW5jaG9yVGltZXI7XG4gIHN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KGZvcndhcmRSZWYoKCkgPT4gQW5jaG9yQm94RGlyZWN0aXZlKSkgYm94OiBBbmNob3JCb3hEaXJlY3RpdmUpIHtcbiAgICB0aGlzLmJveEVsZW1lbnQgPSBib3g7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnN1YnNjcmliZUFuY2hvck1hcENoYW5nZSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHN1YnNjcmliZUFuY2hvck1hcENoYW5nZSgpIHtcbiAgICBpZiAodGhpcy5ib3hFbGVtZW50KSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuYm94RWxlbWVudC5yZWZyZXNoQW5jaG9yTWFwLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmJpbmRpbmdBbmNob3JUaW1lcikge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmJpbmRpbmdBbmNob3JUaW1lcik7XG4gICAgICAgICAgdGhpcy5iaW5kaW5nQW5jaG9yVGltZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5iaW5kQW5jaG9yQWZ0ZXJCb3hSZWFkeSgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgYmluZEFuY2hvckFmdGVyQm94UmVhZHkgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuYm94RWxlbWVudC5hbmNob3JNYXApIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmFuY2hvckJsb2NrID0gdGhpcy5ib3hFbGVtZW50LmFuY2hvck1hcFt0aGlzLmFuY2hvck5hbWVdO1xuICAgICAgfSwgMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYmluZGluZ0FuY2hvclRpbWVyID0gc2V0VGltZW91dCh0aGlzLmJpbmRBbmNob3JBZnRlckJveFJlYWR5LCA1MDApO1xuICAgIH1cbiAgfTtcblxuICBASG9zdExpc3RlbmVyKCdjbGljaycpXG4gIHNjcm9sbFRvQW5jaG9yKGFjdGl2ZUNoYW5nZUJ5PzogQW5jaG9yQWN0aXZlQ2hhbmdlU291cmNlKSB7XG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmFuY2hvckJsb2NrKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuYm94RWxlbWVudC5mb3JjZUFjdGl2ZUFuY2hvcih0aGlzLmFuY2hvck5hbWUsIGFjdGl2ZUNoYW5nZUJ5IHx8ICdhbmNob3ItbGluaycpO1xuICAgICAgICB0aGlzLmJveEVsZW1lbnQuaXNTY3JvbGxpbmdUb1RhcmdldCA9IGZhbHNlO1xuICAgICAgfSwgMTIwKTtcbiAgICB9O1xuICAgICgoY29udGFpbmVyOiBFbGVtZW50LCBhbmNob3I6IEVsZW1lbnQpID0+IHtcbiAgICAgIGxldCBjb250YWluZXJTY3JvbGxUb3AgPSBjb250YWluZXIuc2Nyb2xsVG9wO1xuICAgICAgbGV0IGNvbnRhaW5lck9mZnNldFRvcCA9IGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7XG4gICAgICBpZiAoY29udGFpbmVyID09PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgICAgY29udGFpbmVyU2Nyb2xsVG9wICs9IGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wOyAvLyBzY3JvbGxUb3DlhbzlrrnmgKfpl67pophcbiAgICAgICAgY29udGFpbmVyT2Zmc2V0VG9wID0gMDsgLy8gb2Zmc2V0dG9w5oq15raIXG4gICAgICB9XG4gICAgICBzY3JvbGxBbmltYXRlKFxuICAgICAgICBjb250YWluZXIsXG4gICAgICAgIGNvbnRhaW5lclNjcm9sbFRvcCxcbiAgICAgICAgY29udGFpbmVyU2Nyb2xsVG9wICtcbiAgICAgICAgICBhbmNob3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIC1cbiAgICAgICAgICBjb250YWluZXJPZmZzZXRUb3AgLVxuICAgICAgICAgICgodGhpcy5ib3hFbGVtZW50LnZpZXcgJiYgdGhpcy5ib3hFbGVtZW50LnZpZXcudG9wKSB8fCAwKSxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIGNhbGxiYWNrXG4gICAgICApO1xuICAgIH0pKHRoaXMuYm94RWxlbWVudC5zY3JvbGxUYXJnZXQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCB0aGlzLmFuY2hvckJsb2NrLmVsZW1lbnQpO1xuICAgIHRoaXMuYm94RWxlbWVudC5pc1Njcm9sbGluZ1RvVGFyZ2V0ID0gdHJ1ZTtcbiAgfVxufVxuIl19