fundamental-ngx
Version:
SAP Fiori Fundamentals, implemented in Angular
130 lines • 9.34 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Directive, ElementRef, EventEmitter, HostListener, Input, Output } from '@angular/core';
/**
* A directive designed to help navigation elements determine the element currently in view of the user.
*/
var ScrollSpyDirective = /** @class */ (function () {
/** @hidden */
function ScrollSpyDirective(elRef) {
this.elRef = elRef;
/**
* An array of tags to track.
*/
this.trackedTags = [];
/**
* Whether events are still fired if there is no tag present on the user's screen.
*/
this.fireEmpty = false;
/**
* A number that represent at what location in the container the event is fired.
* 0.5 would fire the events in the middle of the container,
* 0 for the top and 1 for the bottom.
*/
this.targetPercent = 0;
/**
* Event fired on the scroll element when a new item becomes activated by the scrollspy .
* The returned value is the HTMLElement itself.
*/
this.spyChange = new EventEmitter();
}
/** @hidden */
/**
* @hidden
* @param {?} event
* @return {?}
*/
ScrollSpyDirective.prototype.onScroll = /**
* @hidden
* @param {?} event
* @return {?}
*/
function (event) {
/** @type {?} */
var spiedTag;
/** @type {?} */
var children = this.elRef.nativeElement.children;
/** @type {?} */
var targetScrollTop = event.target.scrollTop;
/** @type {?} */
var targetOffsetTop = event.target.offsetTop;
var _loop_1 = function (i) {
/** @type {?} */
var element = children[i];
if (this_1.trackedTags.some((/**
* @param {?} tag
* @return {?}
*/
function (tag) { return tag.toLocaleUpperCase() === element.tagName.toLocaleUpperCase(); }))) {
if ((element.offsetTop - targetOffsetTop) <= targetScrollTop + event.target.offsetHeight * this_1.targetPercent) {
spiedTag = element;
}
}
};
var this_1 = this;
for (var i = 0; i < children.length; i++) {
_loop_1(i);
}
if ((spiedTag || this.fireEmpty) && spiedTag !== this.currentActive) {
this.currentActive = spiedTag;
this.spyChange.emit(this.currentActive);
}
};
ScrollSpyDirective.decorators = [
{ type: Directive, args: [{
selector: '[fdScrollSpy]'
},] }
];
/** @nocollapse */
ScrollSpyDirective.ctorParameters = function () { return [
{ type: ElementRef }
]; };
ScrollSpyDirective.propDecorators = {
trackedTags: [{ type: Input }],
fireEmpty: [{ type: Input }],
targetPercent: [{ type: Input }],
spyChange: [{ type: Output }],
onScroll: [{ type: HostListener, args: ['scroll', ['$event'],] }]
};
return ScrollSpyDirective;
}());
export { ScrollSpyDirective };
if (false) {
/**
* An array of tags to track.
* @type {?}
*/
ScrollSpyDirective.prototype.trackedTags;
/**
* Whether events are still fired if there is no tag present on the user's screen.
* @type {?}
*/
ScrollSpyDirective.prototype.fireEmpty;
/**
* A number that represent at what location in the container the event is fired.
* 0.5 would fire the events in the middle of the container,
* 0 for the top and 1 for the bottom.
* @type {?}
*/
ScrollSpyDirective.prototype.targetPercent;
/**
* Event fired on the scroll element when a new item becomes activated by the scrollspy .
* The returned value is the HTMLElement itself.
* @type {?}
*/
ScrollSpyDirective.prototype.spyChange;
/**
* @hidden
* @type {?}
* @private
*/
ScrollSpyDirective.prototype.currentActive;
/**
* @type {?}
* @private
*/
ScrollSpyDirective.prototype.elRef;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLXNweS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9mdW5kYW1lbnRhbC1uZ3gvIiwic291cmNlcyI6WyJsaWIvc2Nyb2xsLXNweS9zY3JvbGwtc3B5LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBS2pHO0lBa0NJLGNBQWM7SUFDZCw0QkFBb0IsS0FBaUI7UUFBakIsVUFBSyxHQUFMLEtBQUssQ0FBWTs7OztRQTNCOUIsZ0JBQVcsR0FBYSxFQUFFLENBQUM7Ozs7UUFNM0IsY0FBUyxHQUFZLEtBQUssQ0FBQzs7Ozs7O1FBUTNCLGtCQUFhLEdBQVcsQ0FBQyxDQUFDOzs7OztRQU9qQixjQUFTLEdBQThCLElBQUksWUFBWSxFQUFlLENBQUM7SUFNL0MsQ0FBQztJQUV6QyxjQUFjOzs7Ozs7SUFFZCxxQ0FBUTs7Ozs7SUFEUixVQUNTLEtBQVU7O1lBQ1gsUUFBcUI7O1lBQ25CLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxRQUFROztZQUM1QyxlQUFlLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTOztZQUN4QyxlQUFlLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTO2dDQUVyQyxDQUFDOztnQkFDQSxPQUFPLEdBQWdCLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDeEMsSUFBSSxPQUFLLFdBQVcsQ0FBQyxJQUFJOzs7O1lBQUMsVUFBQSxHQUFHLElBQUksT0FBQSxHQUFHLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxPQUFPLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLEVBQS9ELENBQStELEVBQUMsRUFBRTtnQkFDL0YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsZUFBZSxDQUFDLElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsWUFBWSxHQUFHLE9BQUssYUFBYSxFQUFFO29CQUMzRyxRQUFRLEdBQUcsT0FBTyxDQUFDO2lCQUN0QjthQUNKOzs7UUFOTCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUU7b0JBQS9CLENBQUM7U0FPVDtRQUVELElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLFFBQVEsS0FBSyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ2pFLElBQUksQ0FBQyxhQUFhLEdBQUcsUUFBUSxDQUFDO1lBQzlCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUMzQztJQUNMLENBQUM7O2dCQTFESixTQUFTLFNBQUM7b0JBQ1AsUUFBUSxFQUFFLGVBQWU7aUJBQzVCOzs7O2dCQVBtQixVQUFVOzs7OEJBWXpCLEtBQUs7NEJBTUwsS0FBSztnQ0FRTCxLQUFLOzRCQU9MLE1BQU07MkJBVU4sWUFBWSxTQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7SUFzQnRDLHlCQUFDO0NBQUEsQUE1REQsSUE0REM7U0F6RFksa0JBQWtCOzs7Ozs7SUFJM0IseUNBQ2tDOzs7OztJQUtsQyx1Q0FDa0M7Ozs7Ozs7SUFPbEMsMkNBQ2lDOzs7Ozs7SUFNakMsdUNBQ3VGOzs7Ozs7SUFHdkYsMkNBQW1DOzs7OztJQUd2QixtQ0FBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogQSBkaXJlY3RpdmUgZGVzaWduZWQgdG8gaGVscCBuYXZpZ2F0aW9uIGVsZW1lbnRzIGRldGVybWluZSB0aGUgZWxlbWVudCBjdXJyZW50bHkgaW4gdmlldyBvZiB0aGUgdXNlci4gXG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2ZkU2Nyb2xsU3B5XSdcbn0pXG5leHBvcnQgY2xhc3MgU2Nyb2xsU3B5RGlyZWN0aXZlIHtcbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiB0YWdzIHRvIHRyYWNrLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHRyYWNrZWRUYWdzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBldmVudHMgYXJlIHN0aWxsIGZpcmVkIGlmIHRoZXJlIGlzIG5vIHRhZyBwcmVzZW50IG9uIHRoZSB1c2VyJ3Mgc2NyZWVuLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGZpcmVFbXB0eTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqIFxuICAgICAqIEEgbnVtYmVyIHRoYXQgcmVwcmVzZW50IGF0IHdoYXQgbG9jYXRpb24gaW4gdGhlIGNvbnRhaW5lciB0aGUgZXZlbnQgaXMgZmlyZWQuIFxuICAgICAqIDAuNSB3b3VsZCBmaXJlIHRoZSBldmVudHMgaW4gdGhlIG1pZGRsZSBvZiB0aGUgY29udGFpbmVyLCBcbiAgICAgKiAwIGZvciB0aGUgdG9wIGFuZCAxIGZvciB0aGUgYm90dG9tLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHRhcmdldFBlcmNlbnQ6IG51bWJlciA9IDA7XG5cbiAgICAvKiogXG4gICAgICogRXZlbnQgZmlyZWQgb24gdGhlIHNjcm9sbCBlbGVtZW50IHdoZW4gYSBuZXcgaXRlbSBiZWNvbWVzIGFjdGl2YXRlZCBieSB0aGUgc2Nyb2xsc3B5IC4gXG4gICAgICogVGhlIHJldHVybmVkIHZhbHVlIGlzIHRoZSBIVE1MRWxlbWVudCBpdHNlbGYuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHJlYWRvbmx5IHNweUNoYW5nZTogRXZlbnRFbWl0dGVyPEhUTUxFbGVtZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8SFRNTEVsZW1lbnQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgY3VycmVudEFjdGl2ZTogSFRNTEVsZW1lbnQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxSZWY6IEVsZW1lbnRSZWYpIHt9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ3Njcm9sbCcsIFsnJGV2ZW50J10pXG4gICAgb25TY3JvbGwoZXZlbnQ6IGFueSkge1xuICAgICAgICBsZXQgc3BpZWRUYWc6IEhUTUxFbGVtZW50O1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5jaGlsZHJlbjtcbiAgICAgICAgY29uc3QgdGFyZ2V0U2Nyb2xsVG9wID0gZXZlbnQudGFyZ2V0LnNjcm9sbFRvcDtcbiAgICAgICAgY29uc3QgdGFyZ2V0T2Zmc2V0VG9wID0gZXZlbnQudGFyZ2V0Lm9mZnNldFRvcDtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50OiBIVE1MRWxlbWVudCA9IGNoaWxkcmVuW2ldO1xuICAgICAgICAgICAgaWYgKHRoaXMudHJhY2tlZFRhZ3Muc29tZSh0YWcgPT4gdGFnLnRvTG9jYWxlVXBwZXJDYXNlKCkgPT09IGVsZW1lbnQudGFnTmFtZS50b0xvY2FsZVVwcGVyQ2FzZSgpKSkge1xuICAgICAgICAgICAgICAgIGlmICgoZWxlbWVudC5vZmZzZXRUb3AgLSB0YXJnZXRPZmZzZXRUb3ApIDw9IHRhcmdldFNjcm9sbFRvcCArIGV2ZW50LnRhcmdldC5vZmZzZXRIZWlnaHQgKiB0aGlzLnRhcmdldFBlcmNlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3BpZWRUYWcgPSBlbGVtZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgoc3BpZWRUYWcgfHwgdGhpcy5maXJlRW1wdHkpICYmIHNwaWVkVGFnICE9PSB0aGlzLmN1cnJlbnRBY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEFjdGl2ZSA9IHNwaWVkVGFnO1xuICAgICAgICAgICAgdGhpcy5zcHlDaGFuZ2UuZW1pdCh0aGlzLmN1cnJlbnRBY3RpdmUpO1xuICAgICAgICB9XG4gICAgfVxuXG59XG4iXX0=