angular-horizontal-scroll-table
Version:
angular-horizontal-scroll-table is A simple solution for horizontal scroll in any table.
1 lines • 13 kB
Source Map (JSON)
{"version":3,"file":"angular-horizontal-scroll-table.mjs","sources":["../../../projects/angular-horizontal-scroll-table/src/lib/BassHorizontalScroll.directive.ts","../../../projects/angular-horizontal-scroll-table/src/lib/angular-horizontal-scroll-table.module.ts","../../../projects/angular-horizontal-scroll-table/src/public-api.ts","../../../projects/angular-horizontal-scroll-table/src/angular-horizontal-scroll-table.ts"],"sourcesContent":["import {\r\n Directive,\r\n Input,\r\n ElementRef,\r\n Renderer2,\r\n OnInit,\r\n OnDestroy,\r\n OnChanges,\r\n SimpleChanges,\r\n HostListener} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[bassHorizontalScroll]'\r\n})\r\nexport class BassHorizontalScrollDirective implements OnInit, OnDestroy, OnChanges {\r\n @Input() tableId: string;\r\n @Input() tableTHeadId: string;\r\n @Input() tableTHeadTrId: string;\r\n @Input() pageUpdated: boolean; // fire to resize scroll ues (pageUpdated = !pageUpdated)\r\n @Input() pageDestored: boolean; // fire to remove header when tab change => (\"with cache\")\r\n z2table: HTMLElement;\r\n z2tableTHeadTr: HTMLElement;\r\n z2tableTHead: HTMLElement;\r\n scrollBarContainer: HTMLElement;\r\n scrollBarWrap: HTMLElement;\r\n fristtime = true;\r\n\r\n @HostListener('scroll', ['$event.target'])\r\n onScroll(e: any) {\r\n this.changeScrollOfBarWrap(e.scrollLeft);\r\n }\r\n\r\n constructor(private el: ElementRef, private renderer: Renderer2) { }\r\n\r\n ngOnInit() {\r\n setTimeout(() => {\r\n this.inIt();\r\n }, 1000);\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (this.z2table) {\r\n setTimeout(() => {\r\n this.changes(changes);\r\n }, 1000);\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n window.removeEventListener('scroll', this.onBodyscroll, true);\r\n }\r\n\r\n inIt() {\r\n this.z2tableinit();\r\n this.addScrollBars();\r\n\r\n // get event on body/window scroll\r\n window.addEventListener('scroll', this.onBodyscroll, true);\r\n\r\n this.addZ2ScrollEvents();\r\n\r\n const scrollFound = this.containerHasHorizontalScrollbar();\r\n if (scrollFound) {\r\n this.showOrHideScroll();\r\n }\r\n\r\n this.hideBodyScroll();\r\n }\r\n\r\n changes(changes: any) {\r\n if (changes.pageDestored) {\r\n // // check if table in small or table in smaller than the window width\r\n this.containerHasHorizontalScrollbar();\r\n\r\n setTimeout(() => {\r\n \r\n window.scroll({\r\n top: 2,\r\n left: 0,\r\n behavior: 'smooth'\r\n });\r\n window.scroll({\r\n top: 0,\r\n left: 0,\r\n behavior: 'smooth'\r\n });\r\n \r\n }, 1000);\r\n } else {\r\n this.resizeZ2Table();\r\n\r\n const scrollFound = this.containerHasHorizontalScrollbar();\r\n if (scrollFound) {\r\n this.showOrHideScroll();\r\n }\r\n }\r\n }\r\n\r\n containerHasHorizontalScrollbar(): boolean {\r\n const hasHorizontalScrollbar = this.el.nativeElement.scrollWidth > this.el.nativeElement.clientWidth;\r\n if (hasHorizontalScrollbar === false) {\r\n this.scrollBarWrap.style.visibility = 'hidden';\r\n return false;\r\n } else {\r\n this.scrollBarWrap.style.visibility = 'visible';\r\n return true;\r\n }\r\n }\r\n\r\n resizeZ2Table() {\r\n // tslint:disable-next-line:max-line-length\r\n const scrollBarHeight = ( window.innerWidth - document.documentElement.clientWidth ) === 0 ? 17 : window.innerWidth - document.documentElement.clientWidth;\r\n\r\n // resize z2table\r\n const scrollBarContainerStyle = 'width: ' + (this.z2table.offsetWidth) + 'px;height: 1px';\r\n this.scrollBarContainer.setAttribute('style', scrollBarContainerStyle);\r\n\r\n // tslint:disable-next-line:max-line-length\r\n const scrollBarWrapStyle = 'width: ' + (this.el.nativeElement.offsetWidth) + 'px;height:' + scrollBarHeight + 'px;position: fixed;overflow-x: scroll;visibility: visible;bottom: 0;z-index: 2;';\r\n this.scrollBarWrap.setAttribute('style', scrollBarWrapStyle);\r\n }\r\n\r\n z2tableinit() {\r\n this.z2table = document.querySelector('#' + this.tableId) as HTMLElement;\r\n this.z2tableTHead = document.querySelector('#' + this.tableTHeadId) as HTMLElement;\r\n this.z2tableTHeadTr = document.querySelector('#' + this.tableTHeadTrId) as HTMLElement;\r\n\r\n this.el.nativeElement.classList.add('BassBarContainer');\r\n this.el.nativeElement.style.overflow = 'auto';\r\n\r\n this.hideBodyScroll();\r\n\r\n if (!this.z2table) {\r\n console.log('loooook table id not found..........');\r\n }\r\n if (!this.z2tableTHead) {\r\n console.log('loooook table thead id not found..........');\r\n }\r\n if (!this.z2tableTHeadTr) {\r\n console.log('loooook table thead tr not found..........');\r\n }\r\n }\r\n\r\n addScrollBars() {\r\n // add elements of scroll\r\n this.scrollBarContainer = this.renderer.createElement('div') as HTMLElement;\r\n this.scrollBarWrap = this.renderer.createElement('div') as HTMLElement;\r\n this.scrollBarWrap.id = 'BassScrollBar';\r\n\r\n this.resizeZ2Table();\r\n\r\n }\r\n\r\n onBodyscroll = (): void => {\r\n if (this.z2table) {\r\n const scrollFound = this.containerHasHorizontalScrollbar();\r\n if (scrollFound) {\r\n this.showOrHideScroll();\r\n }\r\n this.hideBodyScroll();\r\n }\r\n }\r\n\r\n showOrHideScroll() {\r\n // get heigt of thead\r\n const theadHeight = this.z2tableTHead.clientHeight;\r\n const fixedNavbarHeight = theadHeight;\r\n // Current container's top position\r\n const bottomPosition = window.pageYOffset + window.innerHeight - theadHeight + fixedNavbarHeight;\r\n\r\n // Detect Current container's top is in the table scope\r\n if (this.z2table.offsetTop - 1 <= bottomPosition && (this.z2table.offsetTop + this.z2table.clientHeight - 1) >= bottomPosition) {\r\n this.scrollBarWrap.style.visibility = 'visible';\r\n } else {\r\n this.scrollBarWrap.style.visibility = 'hidden';\r\n }\r\n }\r\n\r\n addZ2ScrollEvents() {\r\n // tslint:disable-next-line:max-line-length\r\n if (this.z2table) {\r\n\r\n // add events on elements\r\n this.scrollBarWrap.onscroll = (e: any) => {\r\n this.changeScrollOfContainer(e.target.scrollLeft);\r\n };\r\n\r\n // add elements beyond table\r\n this.renderer.appendChild(\r\n this.scrollBarWrap,\r\n this.scrollBarContainer\r\n );\r\n\r\n this.renderer.appendChild(\r\n this.el.nativeElement,\r\n this.scrollBarWrap\r\n );\r\n }\r\n }\r\n\r\n // change Scroll Of container when BarWrap scroll move\r\n changeScrollOfContainer(leftPosition: number) {\r\n this.el.nativeElement.scrollLeft = leftPosition;\r\n this.z2tableTHead.scrollLeft = leftPosition;\r\n }\r\n\r\n // change Scroll Of BarWrap when container scroll move\r\n changeScrollOfBarWrap(leftPosition: number) {\r\n this.scrollBarWrap.scrollLeft = leftPosition;\r\n this.z2tableTHead.scrollLeft = leftPosition;\r\n }\r\n\r\n hideBodyScroll() {\r\n const bodyEl = document.getElementsByTagName('body')[0];\r\n if (bodyEl) {\r\n bodyEl.setAttribute('style', 'overflow-y: scroll;overflow-x: hidden;');\r\n }\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\nimport { BassHorizontalScrollDirective } from './BassHorizontalScroll.directive';\n\n\n\n@NgModule({\n declarations: [\n BassHorizontalScrollDirective\n ],\n imports: [\n ],\n exports: [\n BassHorizontalScrollDirective\n ]\n})\nexport class NgHorizontalScrollModule { }\n","/*\n * Public API Surface of angular-horizontal-scroll-table\n */\n\nexport * from './lib/BassHorizontalScroll.directive';\nexport * from './lib/angular-horizontal-scroll-table.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}