UNPKG

@duoduo-oba/ng-devui

Version:

DevUI components based on Angular

251 lines 19.1 kB
/** * @fileoverview added by tsickle * Generated from: anchor-link.directive.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Directive, forwardRef, HostListener, Inject, Input, HostBinding } from '@angular/core'; import { AnchorBoxDirective } from './anchor-box.directive'; var AnchorLinkDirective = /** @class */ (function () { function AnchorLinkDirective(box) { var _this = this; this.bindAnchorAfterBoxReady = (/** * @return {?} */ function () { if (_this.boxElement.anchorMap) { setTimeout((/** * @return {?} */ function () { _this.anchorBlock = _this.boxElement.anchorMap[_this.anchorName]; }), 0); } else { _this.bindingAnchorTimer = setTimeout(_this.bindAnchorAfterBoxReady, 500); } }); this.boxElement = box; } Object.defineProperty(AnchorLinkDirective.prototype, "anchorActiveClass", { get: /** * @return {?} */ function () { return (this.anchorBlock && this.anchorBlock.isActive) ? (this.anchorActive || '') : ''; }, enumerable: true, configurable: true }); Object.defineProperty(AnchorLinkDirective.prototype, "anchorName", { get: /** * @return {?} */ function () { return this._anchorName; }, set: /** * @param {?} anchor * @return {?} */ function (anchor) { this._anchorName = anchor; this.bindAnchorAfterBoxReady(); }, enumerable: true, configurable: true }); /** * @return {?} */ AnchorLinkDirective.prototype.ngOnInit = /** * @return {?} */ function () { this.subscribeAnchorMapChange(); }; /** * @return {?} */ AnchorLinkDirective.prototype.ngOnDestroy = /** * @return {?} */ function () { if (this.subscription) { this.subscription.unsubscribe(); } }; /** * @return {?} */ AnchorLinkDirective.prototype.subscribeAnchorMapChange = /** * @return {?} */ function () { var _this = this; if (this.boxElement) { this.subscription = this.boxElement.refreshAnchorMap.subscribe((/** * @return {?} */ function () { if (_this.bindingAnchorTimer) { clearTimeout(_this.bindingAnchorTimer); _this.bindingAnchorTimer = undefined; } _this.bindAnchorAfterBoxReady(); })); } }; /** * @return {?} */ AnchorLinkDirective.prototype.scrollToAnchor = /** * @return {?} */ function () { var _this = this; if (!this.anchorBlock) { return; } /** @type {?} */ var callback = (/** * @return {?} */ function () { setTimeout((/** * @return {?} */ function () { _this.boxElement.forceActiveAnchor(_this.anchorName, 'anchor-link'); }), 120); }); ((/** * @param {?} container * @param {?} anchor * @return {?} */ function (container, anchor) { /** @type {?} */ var containerScrollTop = container.scrollTop; if (container === document.documentElement) { containerScrollTop += document.body.scrollTop; } _this.scrollAnimate(container, containerScrollTop, (containerScrollTop + anchor.getBoundingClientRect().top - (_this.boxElement.view && _this.boxElement.view.top || 0)), undefined, undefined, callback); }))(this.boxElement.scrollTarget || document.documentElement, this.anchorBlock.element); }; /** * @param {?} target * @param {?} currentTopValue * @param {?} targetTopValue * @param {?=} timeGap * @param {?=} scrollTime * @param {?=} callback * @return {?} */ AnchorLinkDirective.prototype.scrollAnimate = /** * @param {?} target * @param {?} currentTopValue * @param {?} targetTopValue * @param {?=} timeGap * @param {?=} scrollTime * @param {?=} callback * @return {?} */ function (target, currentTopValue, targetTopValue, timeGap, scrollTime, callback) { var _this = this; if (timeGap === void 0) { timeGap = 40; } if (scrollTime === void 0) { scrollTime = 450; } /** @type {?} */ var startTimeStamp = Date.now(); /** @type {?} */ var drawAnimateFrame = (/** * @return {?} */ function () { /** @type {?} */ var currentTime = Date.now() - startTimeStamp; if (currentTime - timeGap > scrollTime) { target.scrollTop = targetTopValue; if (target === document.documentElement) { // 兼容写法,老浏览器/老API模式需要document.body滚动,新的需要documentElement滚动 document.body.scrollTop = targetTopValue; } if (callback) { callback(); } } else { /** @type {?} */ var tempTopValue = _this.easeInOutCubic(currentTime, currentTopValue, targetTopValue, scrollTime); target.scrollTop = tempTopValue; if (target === document.documentElement) { document.body.scrollTop = tempTopValue; } setTimeout((/** * @return {?} */ function () { requestAnimationFrame(drawAnimateFrame); }), timeGap); } }); requestAnimationFrame(drawAnimateFrame); }; /** * @param {?} t * @param {?} b * @param {?} c * @param {?} d * @return {?} */ AnchorLinkDirective.prototype.easeInOutCubic = /** * @param {?} t * @param {?} b * @param {?} c * @param {?} d * @return {?} */ function (t, b, c, d) { /** @type {?} */ var cc = c - b; /** @type {?} */ var tt = t / (d / 2); if (tt < 1) { return cc / 2 * tt * tt * tt + b; } else { return cc / 2 * ((tt -= 2) * tt * tt + 2) + b; } }; AnchorLinkDirective.decorators = [ { type: Directive, args: [{ selector: '[dAnchorLink]', },] } ]; /** @nocollapse */ AnchorLinkDirective.ctorParameters = function () { return [ { type: AnchorBoxDirective, decorators: [{ type: Inject, args: [forwardRef((/** * @return {?} */ function () { return AnchorBoxDirective; })),] }] } ]; }; AnchorLinkDirective.propDecorators = { anchorActiveClass: [{ type: HostBinding, args: ['class',] }], anchorName: [{ type: Input, args: ['dAnchorLink',] }], anchorActive: [{ type: Input }], scrollToAnchor: [{ type: HostListener, args: ['click',] }] }; return AnchorLinkDirective; }()); export { AnchorLinkDirective }; if (false) { /** * @type {?} * @private */ AnchorLinkDirective.prototype._anchorName; /** @type {?} */ AnchorLinkDirective.prototype.anchorActive; /** @type {?} */ AnchorLinkDirective.prototype.boxElement; /** @type {?} */ AnchorLinkDirective.prototype.anchorBlock; /** @type {?} */ AnchorLinkDirective.prototype.bindingAnchorTimer; /** @type {?} */ AnchorLinkDirective.prototype.subscription; /** @type {?} */ AnchorLinkDirective.prototype.bindAnchorAfterBoxReady; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5jaG9yLWxpbmsuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZGV2dWkvYW5jaG9yLyIsInNvdXJjZXMiOlsiYW5jaG9yLWxpbmsuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQXFCLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU1RDtJQXNCRSw2QkFBMEQsR0FBdUI7UUFBakYsaUJBRUM7UUF3QkQsNEJBQXVCOzs7UUFBRztZQUN4QixJQUFJLEtBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFO2dCQUM3QixVQUFVOzs7Z0JBQUMsY0FBTyxLQUFJLENBQUMsV0FBVyxHQUFHLEtBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRSxDQUFDLENBQUMsQ0FBQzthQUN4RjtpQkFBTTtnQkFDTCxLQUFJLENBQUMsa0JBQWtCLEdBQUcsVUFBVSxDQUFDLEtBQUksQ0FBQyx1QkFBdUIsRUFBRSxHQUFHLENBQUMsQ0FBQzthQUN6RTtRQUNILENBQUMsRUFBQTtRQS9CRyxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztJQUMxQixDQUFDO0lBcEJELHNCQUEwQixrREFBaUI7Ozs7UUFBM0M7WUFDRSxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMxRixDQUFDOzs7T0FBQTtJQUVELHNCQUNJLDJDQUFVOzs7O1FBSWQsY0FBbUIsT0FBTyxJQUFJLENB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a0IsdUJBd0JaLE1BQU0sU0FBQyxVQUFVOzs7d0JBQUMsY0FBTSxPQUFBLGtCQUFrQixFQUFsQixDQUFrQixFQUFDOzs7b0NBbEJ2RCxXQUFXLFNBQUMsT0FBTzs2QkFJbkIsS0FBSyxTQUFDLGFBQWE7K0JBT25CLEtBQUs7aUNBeUNMLFlBQVksU0FBRSxPQUFPOztJQXdEeEIsMEJBQUM7Q0FBQSxBQWhIRCxJQWdIQztTQTdHWSxtQkFBbUI7Ozs7OztJQUk5QiwwQ0FBb0I7O0lBUXBCLDJDQUE4Qjs7SUFFOUIseUNBQStCOztJQUMvQiwwQ0FBNkI7O0lBQzdCLGlEQUFtQjs7SUFDbkIsMkNBQWE7O0lBNEJiLHNEQU1DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBmb3J3YXJkUmVmLCBIb3N0TGlzdGVuZXIsIEluamVjdCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBIb3N0QmluZGluZyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBbmNob3JEaXJlY3RpdmUgfSBmcm9tICcuL2FuY2hvci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBBbmNob3JCb3hEaXJlY3RpdmUgfSBmcm9tICcuL2FuY2hvci1ib3guZGlyZWN0aXZlJztcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW2RBbmNob3JMaW5rXScsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBbmNob3JMaW5rRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKSBnZXQgYW5jaG9yQWN0aXZlQ2xhc3MoKSB7XHJcbiAgICByZXR1cm4gKHRoaXMuYW5jaG9yQmxvY2sgJiYgdGhpcy5hbmNob3JCbG9jay5pc0FjdGl2ZSkgPyAodGhpcy5hbmNob3JBY3RpdmUgfHwgJycpIDogJyc7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2FuY2hvck5hbWU7XHJcbiAgQElucHV0KCdkQW5jaG9yTGluaycpXHJcbiAgc2V0IGFuY2hvck5hbWUoYW5jaG9yOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2FuY2hvck5hbWUgPSBhbmNob3I7XHJcbiAgICB0aGlzLmJpbmRBbmNob3JBZnRlckJveFJlYWR5KCk7XHJcbiAgfVxyXG4gIGdldCBhbmNob3JOYW1lKCkgeyByZXR1cm4gdGhpcy5fYW5jaG9yTmFtZTsgfVxyXG5cclxuICBASW5wdXQoKSBhbmNob3JBY3RpdmU6IHN0cmluZztcclxuXHJcbiAgYm94RWxlbWVudDogQW5jaG9yQm94RGlyZWN0aXZlO1xyXG4gIGFuY2hvckJsb2NrOiBBbmNob3JEaXJlY3RpdmU7XHJcbiAgYmluZGluZ0FuY2hvclRpbWVyO1xyXG4gIHN1YnNjcmlwdGlvbjtcclxuXHJcbiAgY29uc3RydWN0b3IoQEluamVjdChmb3J3YXJkUmVmKCgpID0+IEFuY2hvckJveERpcmVjdGl2ZSkpIGJveDogQW5jaG9yQm94RGlyZWN0aXZlKSB7XHJcbiAgICAgIHRoaXMuYm94RWxlbWVudCA9IGJveDtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgICB0aGlzLnN1YnNjcmliZUFuY2hvck1hcENoYW5nZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgIGlmICggdGhpcy5zdWJzY3JpcHRpb24pIHtcclxuICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgIH1cclxuICB9XHJcblxyXG4gIHN1YnNjcmliZUFuY2hvck1hcENoYW5nZSgpIHtcclxuICAgIGlmICh0aGlzLmJveEVsZW1lbnQpIHtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmJveEVsZW1lbnQucmVmcmVzaEFuY2hvck1hcC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmJpbmRpbmdBbmNob3JUaW1lcikge1xyXG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuYmluZGluZ0FuY2hvclRpbWVyKTtcclxuICAgICAgICAgIHRoaXMuYmluZGluZ0FuY2hvclRpbWVyID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmJpbmRBbmNob3JBZnRlckJveFJlYWR5KCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYmluZEFuY2hvckFmdGVyQm94UmVhZHkgPSAoKSA9PiB7XHJcbiAgICBpZiAodGhpcy5ib3hFbGVtZW50LmFuY2hvck1hcCkge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHt0aGlzLmFuY2hvckJsb2NrID0gdGhpcy5ib3hFbGVtZW50LmFuY2hvck1hcFt0aGlzLmFuY2hvck5hbWVdOyB9LCAwKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYmluZGluZ0FuY2hvclRpbWVyID0gc2V0VGltZW91dCh0aGlzLmJpbmRBbmNob3JBZnRlckJveFJlYWR5LCA1MDApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lciAoJ2NsaWNrJylcclxuICBzY3JvbGxUb0FuY2hvcigpIHtcclxuICAgIGlmICggIXRoaXMuYW5jaG9yQmxvY2spIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY2FsbGJhY2sgPSAoKSA9PiB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4geyB0aGlzLmJveEVsZW1lbnQuZm9yY2VBY3RpdmVBbmNob3IodGhpcy5hbmNob3JOYW1lLCAnYW5jaG9yLWxpbmsnKTsgfSwgMTIwKTtcclxuICAgIH07XHJcbiAgICAoKGNvbnRhaW5lcjogRWxlbWVudCwgYW5jaG9yOiBFbGVtZW50KSA9PiB7XHJcbiAgICAgIGxldCBjb250YWluZXJTY3JvbGxUb3AgPSBjb250YWluZXIuc2Nyb2xsVG9wO1xyXG4gICAgICBpZiAoY29udGFpbmVyID09PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcclxuICAgICAgICBjb250YWluZXJTY3JvbGxUb3AgKz0gZG9jdW1lbnQuYm9keS5zY3JvbGxUb3A7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zY3JvbGxBbmltYXRlKFxyXG4gICAgICAgIGNvbnRhaW5lcixcclxuICAgICAgICBjb250YWluZXJTY3JvbGxUb3AsXHJcbiAgICAgICAgKGNvbnRhaW5lclNjcm9sbFRvcCArIGFuY2hvci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSAodGhpcy5ib3hFbGVtZW50LnZpZXcgJiYgdGhpcy5ib3hFbGVtZW50LnZpZXcudG9wIHx8IDApKSxcclxuICAgICAgICB1bmRlZmluZWQsIHVuZGVmaW5lZCwgY2FsbGJhY2tcclxuICAgICAgKTtcclxuICAgIH0pKCB0aGlzLmJveEVsZW1lbnQuc2Nyb2xsVGFyZ2V0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgdGhpcy5hbmNob3JCbG9jay5lbGVtZW50KTtcclxuICB9XHJcblxyXG4gIHNjcm9sbEFuaW1hdGUodGFyZ2V0LCBjdXJyZW50VG9wVmFsdWUsIHRhcmdldFRvcFZhbHVlLCB0aW1lR2FwOiBudW1iZXIgPSA0MCwgc2Nyb2xsVGltZTogbnVtYmVyID0gNDUwLCBjYWxsYmFjaz8pIHtcclxuICAgIGNvbnN0IHN0YXJ0VGltZVN0YW1wID0gRGF0ZS5ub3coKTtcclxuICAgIGNvbnN0IGRyYXdBbmltYXRlRnJhbWUgPSAoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZVN0YW1wO1xyXG4gICAgICBpZiAoY3VycmVudFRpbWUgLSB0aW1lR2FwID4gc2Nyb2xsVGltZSApIHtcclxuICAgICAgICB0YXJnZXQuc2Nyb2xsVG9wID0gdGFyZ2V0VG9wVmFsdWU7XHJcbiAgICAgICAgaWYgKHRhcmdldCA9PT0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XHJcbiAgICAgICAgICAvLyDlhbzlrrnlhpnms5XvvIzogIHmtY/op4jlmagv6ICBQVBJ5qih5byP6ZyA6KaBZG9jdW1lbnQuYm9keea7muWKqO+8jOaWsOeahOmcgOimgWRvY3VtZW50RWxlbWVudOa7muWKqFxyXG4gICAgICAgICAgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AgPSB0YXJnZXRUb3BWYWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHRlbXBUb3BWYWx1ZSA9IHRoaXMuZWFzZUluT3V0Q3ViaWMoY3VycmVudFRpbWUsIGN1cnJlbnRUb3BWYWx1ZSwgdGFyZ2V0VG9wVmFsdWUsIHNjcm9sbFRpbWUpO1xyXG4gICAgICAgIHRhcmdldC5zY3JvbGxUb3AgPSB0ZW1wVG9wVmFsdWU7XHJcbiAgICAgICAgaWYgKHRhcmdldCA9PT0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XHJcbiAgICAgICAgICBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCA9IHRlbXBUb3BWYWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGRyYXdBbmltYXRlRnJhbWUpOyB9LCB0aW1lR2FwKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShkcmF3QW5pbWF0ZUZyYW1lKTtcclxuICB9XHJcblxyXG4gIGVhc2VJbk91dEN1YmljKHQ6IG51bWJlciwgYjogbnVtYmVyLCBjOiBudW1iZXIsIGQ6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBjb25zdCBjYyA9IGMgLSBiO1xyXG4gICAgbGV0IHR0ID0gdCAvIChkIC8gMik7XHJcbiAgICBpZiAodHQgPCAxKSB7XHJcbiAgICAgIHJldHVybiBjYyAvIDIgKiB0dCAqIHR0ICogdHQgKyBiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGNjIC8gMiAqICgodHQgLT0gMikgKiB0dCAqIHR0ICsgMikgKyBiO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=