ng-devui
Version:
DevUI components based on Angular
77 lines • 10.2 kB
JavaScript
import { Directive, Input } from '@angular/core';
import { ActivatedRoute, NavigationEnd, Router } from '@angular/router';
import { Subscription } from 'rxjs';
import { debounceTime, filter } from 'rxjs/operators';
import { AnchorBoxDirective } from './anchor-box.directive';
import { AnchorLinkDirective } from './anchor-link.directive';
import * as i0 from "@angular/core";
import * as i1 from "./anchor-box.directive";
import * as i2 from "@angular/router";
export class AnchorBoxHashSupportDirective {
constructor(box, router, route) {
this.box = box;
this.router = router;
this.route = route;
this.updateUrlWhenAnchorActive = true;
this.scrollToAnchorByHashOnlyInit = false;
this.sub = new Subscription();
this.manual = false;
this.navigateToHash = (targetAnchor) => {
if (targetAnchor.activeChangeBy === 'initial') {
return;
}
this.router.navigate([], { fragment: targetAnchor.anchor, replaceUrl: true });
this.manual = true;
};
this.navigateToAnchor = (event) => {
if (this.manual) {
this.manual = false;
return;
}
if (this.scrollToAnchorByHashOnlyInit) {
return;
}
const frag = this.router.parseUrl(event.url).fragment;
this.scrollToFragment(frag);
};
this.scrollToFragment = (frag) => {
if (!frag) {
return;
}
if (this.box.anchorMap[frag]) {
const tempAnchor = new AnchorLinkDirective(this.box);
tempAnchor.anchorName = frag;
tempAnchor.anchorBlock = this.box.anchorMap[frag];
tempAnchor.scrollToAnchor('fragment');
}
};
}
ngOnInit() {
this.sub.add(this.box.activeChange.pipe(debounceTime(300), filter(anchor => this.updateUrlWhenAnchorActive)).subscribe(this.navigateToHash));
this.sub.add(this.router.events.pipe(filter(event => event instanceof NavigationEnd)).subscribe(this.navigateToAnchor));
}
ngAfterViewInit() {
const frag = this.route.snapshot.fragment;
setTimeout(() => {
this.scrollToFragment(frag);
}, 120);
}
ngOnDestroy() {
if (this.sub) {
this.sub.unsubscribe();
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AnchorBoxHashSupportDirective, deps: [{ token: i1.AnchorBoxDirective }, { token: i2.Router }, { token: i2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: AnchorBoxHashSupportDirective, selector: "[dAnchorBox][dAnchorHashSupport]", inputs: { updateUrlWhenAnchorActive: "updateUrlWhenAnchorActive", scrollToAnchorByHashOnlyInit: "scrollToAnchorByHashOnlyInit" }, ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AnchorBoxHashSupportDirective, decorators: [{
type: Directive,
args: [{
selector: '[dAnchorBox][dAnchorHashSupport]'
}]
}], ctorParameters: () => [{ type: i1.AnchorBoxDirective }, { type: i2.Router }, { type: i2.ActivatedRoute }], propDecorators: { updateUrlWhenAnchorActive: [{
type: Input
}], scrollToAnchorByHashOnlyInit: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5jaG9yLWJveC1oYXNoLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2RldnVpL2FuY2hvci9hbmNob3ItYm94LWhhc2guZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFFLEtBQUssRUFBb0MsTUFBTSxlQUFlLENBQUM7QUFDbEcsT0FBTyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEUsT0FBTyxFQUFFLFlBQVksRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNuQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7O0FBTTlELE1BQU0sT0FBTyw2QkFBNkI7SUFNeEMsWUFBb0IsR0FBdUIsRUFBVSxNQUFjLEVBQVUsS0FBcUI7UUFBOUUsUUFBRyxHQUFILEdBQUcsQ0FBb0I7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQVUsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFMekYsOEJBQXlCLEdBQUcsSUFBSSxDQUFDO1FBQ2pDLGlDQUE0QixHQUFHLEtBQUssQ0FBQztRQUM5QyxRQUFHLEdBQWlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDdkMsV0FBTSxHQUFHLEtBQUssQ0FBQztRQThCZixtQkFBYyxHQUFHLENBQUMsWUFBNkIsRUFBRSxFQUFFO1lBQ2pELElBQUksWUFBWSxDQUFDLGNBQWMsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFBQyxPQUFPO1lBQUMsQ0FBQztZQUMxRCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsWUFBWSxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUM5RSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNyQixDQUFDLENBQUM7UUFFRixxQkFBZ0IsR0FBRyxDQUFDLEtBQW9CLEVBQUUsRUFBRTtZQUMxQyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDaEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Z0JBQ3BCLE9BQU87WUFDVCxDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztnQkFBQyxPQUFPO1lBQUMsQ0FBQztZQUNsRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO1lBQ3RELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixDQUFDLENBQUM7UUFFRixxQkFBZ0IsR0FBRyxDQUFDLElBQVksRUFBRSxFQUFFO1lBQ2xDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFBQyxPQUFPO1lBQUMsQ0FBQztZQUN0QixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQzdCLE1BQU0sVUFBVSxHQUFHLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNyRCxVQUFVLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztnQkFDN0IsVUFBVSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDbEQsVUFBVSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN4QyxDQUFDO1FBQ0gsQ0FBQyxDQUFDO0lBcERtRyxDQUFDO0lBRXRHLFFBQVE7UUFDTixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQ3JDLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFDakIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQ2pELENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBRWxDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDbEMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxZQUFZLGFBQWEsQ0FBQyxDQUNoRCxDQUFDLFNBQVMsQ0FDVCxJQUFJLENBQUMsZ0JBQWdCLENBQ3RCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxlQUFlO1FBQ2IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBQzFDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDekIsQ0FBQztJQUNILENBQUM7K0dBaENVLDZCQUE2QjttR0FBN0IsNkJBQTZCOzs0RkFBN0IsNkJBQTZCO2tCQUh6QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxrQ0FBa0M7aUJBQzdDO3lJQUVVLHlCQUF5QjtzQkFBakMsS0FBSztnQkFDRyw0QkFBNEI7c0JBQXBDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBEaXJlY3RpdmUsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIE5hdmlnYXRpb25FbmQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBbmNob3JCb3hEaXJlY3RpdmUgfSBmcm9tICcuL2FuY2hvci1ib3guZGlyZWN0aXZlJztcbmltcG9ydCB7IEFuY2hvckxpbmtEaXJlY3RpdmUgfSBmcm9tICcuL2FuY2hvci1saW5rLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBBbmNob3JEaXJlY3RpdmUgfSBmcm9tICcuL2FuY2hvci5kaXJlY3RpdmUnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZEFuY2hvckJveF1bZEFuY2hvckhhc2hTdXBwb3J0XSdcbn0pXG5leHBvcnQgY2xhc3MgQW5jaG9yQm94SGFzaFN1cHBvcnREaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIHVwZGF0ZVVybFdoZW5BbmNob3JBY3RpdmUgPSB0cnVlO1xuICBASW5wdXQoKSBzY3JvbGxUb0FuY2hvckJ5SGFzaE9ubHlJbml0ID0gZmFsc2U7XG4gIHN1YjogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBtYW51YWwgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGJveDogQW5jaG9yQm94RGlyZWN0aXZlLCBwcml2YXRlIHJvdXRlcjogUm91dGVyLCBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnN1Yi5hZGQodGhpcy5ib3guYWN0aXZlQ2hhbmdlLnBpcGUoXG4gICAgICBkZWJvdW5jZVRpbWUoMzAwKSxcbiAgICAgIGZpbHRlcihhbmNob3IgPT4gdGhpcy51cGRhdGVVcmxXaGVuQW5jaG9yQWN0aXZlKVxuICAgICkuc3Vic2NyaWJlKHRoaXMubmF2aWdhdGVUb0hhc2gpKTtcblxuICAgIHRoaXMuc3ViLmFkZCh0aGlzLnJvdXRlci5ldmVudHMucGlwZShcbiAgICAgIGZpbHRlcihldmVudCA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpXG4gICAgKS5zdWJzY3JpYmUoXG4gICAgICB0aGlzLm5hdmlnYXRlVG9BbmNob3JcbiAgICApKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBjb25zdCBmcmFnID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5mcmFnbWVudDtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2Nyb2xsVG9GcmFnbWVudChmcmFnKTtcbiAgICB9LCAxMjApO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3ViKSB7XG4gICAgICB0aGlzLnN1Yi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIG5hdmlnYXRlVG9IYXNoID0gKHRhcmdldEFuY2hvcjogQW5jaG9yRGlyZWN0aXZlKSA9PiB7XG4gICAgaWYgKHRhcmdldEFuY2hvci5hY3RpdmVDaGFuZ2VCeSA9PT0gJ2luaXRpYWwnKSB7IHJldHVybjsgfVxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCB7IGZyYWdtZW50OiB0YXJnZXRBbmNob3IuYW5jaG9yLCByZXBsYWNlVXJsOiB0cnVlIH0pO1xuICAgIHRoaXMubWFudWFsID0gdHJ1ZTtcbiAgfTtcblxuICBuYXZpZ2F0ZVRvQW5jaG9yID0gKGV2ZW50OiBOYXZpZ2F0aW9uRW5kKSA9PiB7XG4gICAgaWYgKHRoaXMubWFudWFsKSB7XG4gICAgICB0aGlzLm1hbnVhbCA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5zY3JvbGxUb0FuY2hvckJ5SGFzaE9ubHlJbml0KSB7IHJldHVybjsgfVxuICAgIGNvbnN0IGZyYWcgPSB0aGlzLnJvdXRlci5wYXJzZVVybChldmVudC51cmwpLmZyYWdtZW50O1xuICAgIHRoaXMuc2Nyb2xsVG9GcmFnbWVudChmcmFnKTtcbiAgfTtcblxuICBzY3JvbGxUb0ZyYWdtZW50ID0gKGZyYWc6IHN0cmluZykgPT4ge1xuICAgIGlmICghZnJhZykgeyByZXR1cm47IH1cbiAgICBpZiAodGhpcy5ib3guYW5jaG9yTWFwW2ZyYWddKSB7XG4gICAgICBjb25zdCB0ZW1wQW5jaG9yID0gbmV3IEFuY2hvckxpbmtEaXJlY3RpdmUodGhpcy5ib3gpO1xuICAgICAgdGVtcEFuY2hvci5hbmNob3JOYW1lID0gZnJhZztcbiAgICAgIHRlbXBBbmNob3IuYW5jaG9yQmxvY2sgPSB0aGlzLmJveC5hbmNob3JNYXBbZnJhZ107XG4gICAgICB0ZW1wQW5jaG9yLnNjcm9sbFRvQW5jaG9yKCdmcmFnbWVudCcpO1xuICAgIH1cbiAgfTtcbn1cbiJdfQ==