UNPKG

angular-fixed-header-table

Version:

angular-Fixed-Header-table is A simple solution for fixed header in any table.

1 lines 16.1 kB
{"version":3,"file":"angular-fixed-header-table.mjs","sources":["../../../projects/angular-fixed-header-table/src/lib/BassFixedHeader.directive.ts","../../../projects/angular-fixed-header-table/src/lib/angular-fixed-header-table.module.ts","../../../projects/angular-fixed-header-table/src/public-api.ts","../../../projects/angular-fixed-header-table/src/angular-fixed-header-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 } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[bassFixedHeader]'\r\n})\r\n/*\r\n- in constactor, to detect change with RouteReuseStrategy\r\n- then add in subscribe pageUpdated\r\n\r\nprivate router: Router\r\nrouter.events.subscribe((evt) => {\r\n if (!(evt instanceof NavigationEnd)) {\r\n return;\r\n }\r\n this.pageUpdated = !this.pageUpdated;\r\n});\r\n*/\r\nexport class BassFixedHeaderDirective implements OnInit, OnDestroy, OnChanges {\r\n @Input() tableId: string;\r\n @Input() tableTHeadId: string;\r\n @Input() tableTBodyId: 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 @Input() stopFixed: boolean = false;\r\n\r\n z2table: HTMLElement;\r\n z2tableTHeadTr: HTMLElement;\r\n z2tableTHead: HTMLElement;\r\n z2tableTBody: HTMLElement;\r\n\r\n theadPaddingTopBottom = '0.45rem';\r\n theadPaddingLeftRight = '1rem';\r\n\r\n constructor(private el: ElementRef, private renderer: Renderer2) { }\r\n\r\n ngOnInit() {\r\n if (!this.stopFixed) {\r\n setTimeout(() => {\r\n this.inIt();\r\n }, 1000);\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (this.z2table && !this.stopFixed) {\r\n setTimeout(() => {\r\n this.changes(changes);\r\n }, 1000);\r\n }\r\n }\r\n\r\n\r\n ngOnDestroy() {\r\n if (!this.stopFixed) {\r\n this.removeTheadToFixedItems();\r\n window.removeEventListener('scroll', this.onBodyscroll, true);\r\n }\r\n }\r\n\r\n inIt() {\r\n\r\n this.z2tableinit();\r\n\r\n // get event on body/window scroll\r\n window.addEventListener('scroll', this.onBodyscroll, true);\r\n\r\n // called 2 times because the wired behavie of table wjen style attr added to Element\r\n this.checkPaddingAndTHSize();\r\n this.checkPaddingAndTHSize();\r\n this.scroll();\r\n }\r\n\r\n changes(changes: any) {\r\n if (changes.pageDestored) {\r\n this.removeTheadToFixedItems();\r\n this.scroll();\r\n } else {\r\n this.checkPaddingAndTHSize();\r\n this.scroll();\r\n }\r\n }\r\n\r\n checkPaddingAndTHSize() {\r\n const scrollFound = this.containerHasHorizontalScrollbar();\r\n if (!scrollFound) {\r\n // no scroll,,, small caoumns\r\n setTimeout(() => {\r\n this.changeThSizes();\r\n }, 500);\r\n this.z2table.style.tableLayout = 'fixed';\r\n } else {\r\n \r\n // tslint:disable-next-line:prefer-for-of\r\n for (let index = 0; index < this.z2tableTHeadTr.children.length; index++) {\r\n const oldTh = this.z2tableTHeadTr.children[index] as HTMLElement;\r\n oldTh.removeAttribute('style');\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 return false;\r\n } else {\r\n return true;\r\n }\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 this.z2tableTBody = document.querySelector('#' + this.tableTBodyId) as HTMLElement;\r\n\r\n if (!this.z2table) {\r\n console.log('loooook table id not found..........');\r\n } else {\r\n this.z2table.style.tableLayout = 'fixed';\r\n this.z2table.style.width = 'max-content';\r\n }\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 onBodyscroll = (e: any): void => {\r\n this.scroll();\r\n }\r\n\r\n scroll() {\r\n // tthis check because of tabs cache\r\n const table = document.querySelector('#' + this.tableId);\r\n if (this.z2table && table) {\r\n\r\n const bounding = this.z2table.getBoundingClientRect();\r\n const tableOffsetTop = this.z2table.offsetTop;\r\n const windowOffset = window.pageYOffset;\r\n const tHeadHeight = this.z2tableTHead.clientHeight;\r\n const pos2 = document.documentElement.scrollTop;\r\n\r\n if (this.z2tableTHead) {\r\n\r\n // page at end\r\n // console.log('nnn', (window.innerHeight + window.scrollY) >= document.body.offsetHeight);\r\n\r\n if ((windowOffset + tHeadHeight) > ( tableOffsetTop )) {\r\n if ((window.scrollY) > ( tableOffsetTop )) {\r\n this.z2tableTHead.classList.add('z2TblScroll');\r\n this.addTheadToFixedItems();\r\n }\r\n } else {\r\n this.z2tableTHead.classList.remove('z2TblScroll');\r\n this.removeTheadToFixedItems();\r\n }\r\n }\r\n }\r\n }\r\n\r\n changeThSizes() {\r\n if (this.z2tableTBody && this.z2tableTBody.children && this.z2tableTBody.children.length >= 1) {\r\n // tslint:disable-next-line:prefer-for-of\r\n for (let index = 0; index < this.z2tableTHeadTr.children.length; index++) {\r\n const oldTd = this.z2tableTBody.children[0].children[index] as HTMLElement;\r\n const oldTh = this.z2tableTHeadTr.children[index] as HTMLElement;\r\n if (!oldTh.hasAttribute('hidden')) {\r\n\r\n let orPadding = 0; // beacause border-right\r\n const elStyles = window.getComputedStyle(oldTh);\r\n orPadding = orPadding\r\n + Number(elStyles.paddingLeft.replace('px', ''))\r\n + Number(elStyles.paddingRight.replace('px', ''))\r\n + Number(elStyles.marginLeft.replace('px', ''))\r\n + Number(elStyles.marginRight.replace('px', ''));\r\n\r\n if (oldTd && oldTd.clientWidth) {\r\n const newWeidth = oldTd.clientWidth - orPadding;\r\n if (newWeidth !== 0) {\r\n const styles = 'min-width: ' + newWeidth + 'px !important;';\r\n oldTh.setAttribute('style', styles);\r\n }\r\n }\r\n\r\n }\r\n }\r\n }\r\n }\r\n\r\n addTheadToFixedItems() {\r\n const fixedItems = document.getElementById('fixedItems');\r\n const fixedItemsStyle = 'height:0px;display: block;';\r\n fixedItems?.setAttribute('style', fixedItemsStyle);\r\n\r\n const itemsEl = fixedItems?.querySelector('#' + this.tableId);\r\n if (!itemsEl) {\r\n\r\n const containerDiv = this.renderer.createElement('div') as HTMLElement;\r\n containerDiv.id = this.tableId;\r\n containerDiv.classList.add('z2table-container');\r\n const containerDivStyle = 'width: ' + this.el.nativeElement.clientWidth + 'px';\r\n containerDiv.setAttribute('style', containerDivStyle);\r\n\r\n const tableDiv = this.renderer.createElement('div') as HTMLElement;\r\n\r\n const tableDivStyle = 'width: inherit';\r\n tableDiv.setAttribute('style', tableDivStyle);\r\n\r\n this.renderer.appendChild(tableDiv, this.z2tableTHead);\r\n this.renderer.appendChild(containerDiv, tableDiv);\r\n this.renderer.appendChild(fixedItems, containerDiv);\r\n\r\n this.z2tableTHead.scrollLeft = this.el.nativeElement.scrollLeft;\r\n\r\n } else {\r\n const containerDiv = itemsEl;\r\n (containerDiv as HTMLElement).style.display = 'block';\r\n this.renderer.appendChild(containerDiv.lastChild, this.z2tableTHead);\r\n\r\n this.z2tableTHead.scrollLeft = this.el.nativeElement.scrollLeft;\r\n }\r\n\r\n }\r\n\r\n removeTheadToFixedItems() {\r\n const fixedItems = document.getElementById('fixedItems');\r\n if (fixedItems && fixedItems.firstChild) {\r\n\r\n this.renderer.appendChild(this.z2table, this.z2tableTHead);\r\n\r\n // tslint:disable-next-line:prefer-for-of\r\n for (let index = 0; index < fixedItems.children.length; index++) {\r\n const element = fixedItems.children[index];\r\n element.remove();\r\n }\r\n\r\n fixedItems.setAttribute('style', 'display: none;overflow:hidden !important');\r\n }\r\n }\r\n\r\n}\r\n\r\n","import { NgModule } from '@angular/core';\nimport { BassFixedHeaderDirective } from './BassFixedHeader.directive';\n\n\n\n@NgModule({\n declarations: [\n BassFixedHeaderDirective,\n ],\n imports: [\n ],\n exports: [\n BassFixedHeaderDirective,\n ]\n})\nexport class NgFixedHeaderModule { }\n","/*\n * Public API Surface of angular-fixed-header-table\n */\n\nexport * from './lib/BassFixedHeader.directive';\nexport * from './lib/angular-fixed-header-table.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}