UNPKG

truly-ui

Version:

Web Components for Desktop Applications.

109 lines (107 loc) 12.8 kB
/* 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 { KeyEvent } from '../core/enums/key-events'; import * as i0 from "@angular/core"; export class ScrollManager { constructor(renderer, scrollContainer) { this.renderer = renderer; this.scrollContainer = scrollContainer; this.cursorIndex = 1; this.currentScroll = 0; } ngOnInit() { this.listenController(); } ngAfterViewInit() { setTimeout(() => { this.numberItemsContainer = Math.floor(this.scrollContainer.nativeElement.offsetHeight / parseInt(this.listItemHeight, 10)); }); } listenController() { if (this.elementController) { this.renderer.listen(this.elementController, 'keydown', ($event) => { if (this.isArrowUp($event)) { this.onArrowUp(); } else if (this.isArrowDown($event)) { this.onArrowDown(); } }); } } isArrowUp($event) { return $event.code === KeyEvent.ARROWUP; } isArrowDown($event) { return $event.code === KeyEvent.ARROWDOWN; } onArrowUp() { if (this.cursorIndex === 1 && this.currentScroll === 0) { this.cursorIndex = this.numberItemsContainer; return this.setScrollTop(10000); } if (this.cursorIndex > 1) { this.cursorIndex--; } else { this.setScrollTop(this.currentScroll - parseInt(this.listItemHeight, 10)); } } setScrollTop(value) { this.scrollContainer.nativeElement.scrollTop = value; this.currentScroll = this.scrollContainer.nativeElement.scrollTop; } onArrowDown() { if ((this.getContainerHeight() + this.getScrollTop()) >= this.getScrollHeight()) { this.cursorIndex = 1; return this.setScrollTop(0); } if (this.cursorIndex < this.numberItemsContainer) { this.cursorIndex++; } else { this.setScrollTop(this.currentScroll + parseInt(this.listItemHeight, 10)); } } getContainerHeight() { return this.scrollContainer.nativeElement.offsetHeight; } getScrollHeight() { return this.scrollContainer.nativeElement.scrollHeight; } getScrollTop() { return this.scrollContainer.nativeElement.scrollTop; } } /** @nocollapse */ ScrollManager.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ScrollManager, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); /** @nocollapse */ ScrollManager.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: ScrollManager, selector: "[scrollManager]", inputs: { elementController: "elementController", listItemHeight: "listItemHeight" }, ngImport: i0 }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ScrollManager, decorators: [{ type: Directive, args: [{ selector: '[scrollManager]' }] }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }]; }, propDecorators: { elementController: [{ type: Input }], listItemHeight: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLW1hbmFnZXIuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdHJ1bHktdWkvc3JjL2NvbXBvbmVudHMvbWlzYy9zY3JvbGwtbWFuYWdlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBQ0gsT0FBTyxFQUFpQixTQUFTLEVBQWMsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUMvRixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7O0FBS3BELE1BQU0sT0FBTyxhQUFhO0lBWXhCLFlBQXFCLFFBQW1CLEVBQVUsZUFBMkI7UUFBeEQsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUFVLG9CQUFlLEdBQWYsZUFBZSxDQUFZO1FBTnJFLGdCQUFXLEdBQUcsQ0FBQyxDQUFDO1FBSWhCLGtCQUFhLEdBQUcsQ0FBQyxDQUFDO0lBRzFCLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGVBQWU7UUFDYixVQUFVLENBQUUsR0FBRyxFQUFFO1lBQ2YsSUFBSSxDQUFDLG9CQUFvQjtnQkFDdkIsSUFBSSxDQUFDLEtBQUssQ0FBRSxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEdBQUcsUUFBUSxDQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFFLENBQUUsQ0FBQztRQUN4RyxDQUFDLENBQUUsQ0FBQztJQUNOLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFLLElBQUksQ0FBQyxpQkFBaUIsRUFBRztZQUM1QixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLENBQUUsTUFBTSxFQUFHLEVBQUU7Z0JBQ3BFLElBQUssSUFBSSxDQUFDLFNBQVMsQ0FBRSxNQUFNLENBQUUsRUFBRztvQkFDOUIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2lCQUNsQjtxQkFBTSxJQUFLLElBQUksQ0FBQyxXQUFXLENBQUUsTUFBTSxDQUFFLEVBQUc7b0JBQ3ZDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztpQkFDcEI7WUFDSCxDQUFDLENBQUUsQ0FBQztTQUNMO0lBQ0gsQ0FBQztJQUVELFNBQVMsQ0FBRSxNQUFNO1FBQ2YsT0FBTyxNQUFNLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxPQUFPLENBQUM7SUFDMUMsQ0FBQztJQUVELFdBQVcsQ0FBRSxNQUFNO1FBQ2pCLE9BQU8sTUFBTSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsU0FBUyxDQUFDO0lBQzVDLENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSyxJQUFJLENBQUMsV0FBVyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLENBQUMsRUFBRztZQUN4RCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztZQUM3QyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUUsS0FBSyxDQUFFLENBQUM7U0FDbkM7UUFFRCxJQUFLLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxFQUFHO1lBQzFCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNwQjthQUFNO1lBQ0wsSUFBSSxDQUFDLFlBQVksQ0FBRSxJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBRSxDQUFFLENBQUM7U0FDL0U7SUFDSCxDQUFDO0lBRUQsWUFBWSxDQUFFLEtBQWE7UUFDekIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUNyRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsV0FBVztRQUNULElBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUc7WUFDakYsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7WUFDckIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFFLENBQUMsQ0FBRSxDQUFDO1NBQy9CO1FBRUQsSUFBSyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRztZQUNsRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDcEI7YUFBTTtZQUNMLElBQUksQ0FBQyxZQUFZLENBQUUsSUFBSSxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUUsQ0FBRSxDQUFDO1NBQy9FO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQztJQUN6RCxDQUFDO0lBRUQsZUFBZTtRQUNiLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDO0lBQ3pELENBQUM7SUFFRCxZQUFZO1FBQ1YsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUM7SUFDdEQsQ0FBQzs7OEhBdkZVLGFBQWE7a0hBQWIsYUFBYTs0RkFBYixhQUFhO2tCQUh6QixTQUFTO21CQUFFO29CQUNWLFFBQVEsRUFBRSxpQkFBaUI7aUJBQzVCO3lIQUdVLGlCQUFpQjtzQkFBekIsS0FBSztnQkFFRyxjQUFjO3NCQUF0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiBNSVQgTGljZW5zZVxuXG4gQ29weXJpZ2h0IChjKSAyMDE5IFRlbWFpbmZvIFNpc3RlbWFzXG5cbiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuIFNPRlRXQVJFLlxuICovXG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0LCBPbkluaXQsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgS2V5RXZlbnQgfSBmcm9tICcuLi9jb3JlL2VudW1zL2tleS1ldmVudHMnO1xuXG5ARGlyZWN0aXZlKCB7XG4gIHNlbGVjdG9yOiAnW3Njcm9sbE1hbmFnZXJdJ1xufSApXG5leHBvcnQgY2xhc3MgU2Nyb2xsTWFuYWdlciBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgQElucHV0KCkgZWxlbWVudENvbnRyb2xsZXI6IEhUTUxFbGVtZW50O1xuXG4gIEBJbnB1dCgpIGxpc3RJdGVtSGVpZ2h0OiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjdXJzb3JJbmRleCA9IDE7XG5cbiAgcHJpdmF0ZSBudW1iZXJJdGVtc0NvbnRhaW5lcjogbnVtYmVyO1xuXG4gIHByaXZhdGUgY3VycmVudFNjcm9sbCA9IDA7XG5cbiAgY29uc3RydWN0b3IoIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMiwgcHJpdmF0ZSBzY3JvbGxDb250YWluZXI6IEVsZW1lbnRSZWYgKSB7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmxpc3RlbkNvbnRyb2xsZXIoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBzZXRUaW1lb3V0KCAoKSA9PiB7XG4gICAgICB0aGlzLm51bWJlckl0ZW1zQ29udGFpbmVyID1cbiAgICAgICAgTWF0aC5mbG9vciggdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQgLyBwYXJzZUludCggdGhpcy5saXN0SXRlbUhlaWdodCwgMTAgKSApO1xuICAgIH0gKTtcbiAgfVxuXG4gIGxpc3RlbkNvbnRyb2xsZXIoKSB7XG4gICAgaWYgKCB0aGlzLmVsZW1lbnRDb250cm9sbGVyICkge1xuICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4oIHRoaXMuZWxlbWVudENvbnRyb2xsZXIsICdrZXlkb3duJywgKCAkZXZlbnQgKSA9PiB7XG4gICAgICAgIGlmICggdGhpcy5pc0Fycm93VXAoICRldmVudCApICkge1xuICAgICAgICAgIHRoaXMub25BcnJvd1VwKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIHRoaXMuaXNBcnJvd0Rvd24oICRldmVudCApICkge1xuICAgICAgICAgIHRoaXMub25BcnJvd0Rvd24oKTtcbiAgICAgICAgfVxuICAgICAgfSApO1xuICAgIH1cbiAgfVxuXG4gIGlzQXJyb3dVcCggJGV2ZW50ICkge1xuICAgIHJldHVybiAkZXZlbnQuY29kZSA9PT0gS2V5RXZlbnQuQVJST1dVUDtcbiAgfVxuXG4gIGlzQXJyb3dEb3duKCAkZXZlbnQgKSB7XG4gICAgcmV0dXJuICRldmVudC5jb2RlID09PSBLZXlFdmVudC5BUlJPV0RPV047XG4gIH1cblxuICBvbkFycm93VXAoKSB7XG4gICAgaWYgKCB0aGlzLmN1cnNvckluZGV4ID09PSAxICYmIHRoaXMuY3VycmVudFNjcm9sbCA9PT0gMCApIHtcbiAgICAgIHRoaXMuY3Vyc29ySW5kZXggPSB0aGlzLm51bWJlckl0ZW1zQ29udGFpbmVyO1xuICAgICAgcmV0dXJuIHRoaXMuc2V0U2Nyb2xsVG9wKCAxMDAwMCApO1xuICAgIH1cblxuICAgIGlmICggdGhpcy5jdXJzb3JJbmRleCA+IDEgKSB7XG4gICAgICB0aGlzLmN1cnNvckluZGV4LS07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0U2Nyb2xsVG9wKCB0aGlzLmN1cnJlbnRTY3JvbGwgLSBwYXJzZUludCggdGhpcy5saXN0SXRlbUhlaWdodCwgMTAgKSApO1xuICAgIH1cbiAgfVxuXG4gIHNldFNjcm9sbFRvcCggdmFsdWU6IG51bWJlciApIHtcbiAgICB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IHZhbHVlO1xuICAgIHRoaXMuY3VycmVudFNjcm9sbCA9IHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wO1xuICB9XG5cbiAgb25BcnJvd0Rvd24oKSB7XG4gICAgaWYgKCAodGhpcy5nZXRDb250YWluZXJIZWlnaHQoKSArIHRoaXMuZ2V0U2Nyb2xsVG9wKCkpID49IHRoaXMuZ2V0U2Nyb2xsSGVpZ2h0KCkgKSB7XG4gICAgICB0aGlzLmN1cnNvckluZGV4ID0gMTtcbiAgICAgIHJldHVybiB0aGlzLnNldFNjcm9sbFRvcCggMCApO1xuICAgIH1cblxuICAgIGlmICggdGhpcy5jdXJzb3JJbmRleCA8IHRoaXMubnVtYmVySXRlbXNDb250YWluZXIgKSB7XG4gICAgICB0aGlzLmN1cnNvckluZGV4Kys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0U2Nyb2xsVG9wKCB0aGlzLmN1cnJlbnRTY3JvbGwgKyBwYXJzZUludCggdGhpcy5saXN0SXRlbUhlaWdodCwgMTAgKSApO1xuICAgIH1cbiAgfVxuXG4gIGdldENvbnRhaW5lckhlaWdodCgpIHtcbiAgICByZXR1cm4gdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gIH1cblxuICBnZXRTY3JvbGxIZWlnaHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0O1xuICB9XG5cbiAgZ2V0U2Nyb2xsVG9wKCkge1xuICAgIHJldHVybiB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcDtcbiAgfVxuXG59XG4iXX0=