From cd6a57cd3f5b4e9c072e22cd2efc46b1f243c8eb Mon Sep 17 00:00:00 2001 From: Max Guglielmi Date: Sun, 23 Nov 2014 01:01:29 +1100 Subject: [PATCH] Added grid layout module --- Gruntfile.js | 2 +- dist/filtergrid.css | 2 +- src-es6/modules/gridLayout.js | 374 +++++++++++++++++ src-es6/modules/loader.js | 3 +- src/core.js | 749 +++++++++++++++++----------------- src/index.html | 5 +- src/modules/gridLayout.js | 378 +++++++++++++++++ src/modules/gridLayout.js.map | 1 + src/modules/loader.js | 2 +- src/modules/loader.js.map | 2 +- test/test-grid-layout.html | 0 test/test-grid-layout.js | 0 12 files changed, 1139 insertions(+), 379 deletions(-) create mode 100644 src-es6/modules/gridLayout.js create mode 100644 src/modules/gridLayout.js create mode 100644 src/modules/gridLayout.js.map create mode 100644 test/test-grid-layout.html create mode 100644 test/test-grid-layout.js diff --git a/Gruntfile.js b/Gruntfile.js index 14ead752..0c272534 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -112,7 +112,7 @@ module.exports = function (grunt) { sourceMap: true, modules: 'amd' }, - build:{ + build: { files: [{ expand: true, cwd: 'src-es6', diff --git a/dist/filtergrid.css b/dist/filtergrid.css index 4b0ab400..9707b3e4 100644 --- a/dist/filtergrid.css +++ b/dist/filtergrid.css @@ -1,6 +1,6 @@ /*------------------------------------------------------------------------ - TableFilter stylesheet by Max Guglielmi - - (build date: Sat Nov 22 2014 16:50:14) + - (build date: Sun Nov 23 2014 00:56:49) - Edit below for your projects' needs ------------------------------------------------------------------------*/ diff --git a/src-es6/modules/gridLayout.js b/src-es6/modules/gridLayout.js new file mode 100644 index 00000000..85a6d70a --- /dev/null +++ b/src-es6/modules/gridLayout.js @@ -0,0 +1,374 @@ +import {Dom} from '../dom'; +import {Types} from '../types'; +import {Helpers} from '../helpers'; +import {Event} from '../event'; + +export class GridLayout{ + + constructor(tf) { + var f = tf.fObj; + + //defines grid width + this.gridWidth = f.grid_width || null; + //defines grid height + this.gridHeight = f.grid_height || null; + //defines css class for main container + this.gridMainContCssClass = f.grid_cont_css_class || 'grd_Cont'; + //defines css class for div containing table + this.gridContCssClass = f.grid_tbl_cont_css_class || 'grd_tblCont'; + //defines css class for div containing headers' table + this.gridHeadContCssClass = f.grid_tblHead_cont_css_class || + 'grd_headTblCont'; + //defines css class for div containing rows counter, paging etc. + this.gridInfDivCssClass = f.grid_inf_grid_css_class || 'grd_inf'; + //defines which row contains column headers + this.gridHeadRowIndex = f.grid_headers_row_index || 0; + //array of headers row indexes to be placed in header table + this.gridHeadRows = f.grid_headers_rows || [0]; + //generate filters in table headers + this.gridEnableFilters = f.grid_enable_default_filters!==undefined ? + f.grid_enable_default_filters : true; + //default col width + this.gridDefaultColWidth = f.grid_default_col_width || '100px'; + //enables/disables columns resizer + this.gridEnableColResizer = f.grid_enable_cols_resizer!==undefined ? + f.grid_enable_cols_resizer : true; + //defines col resizer script path + this.gridColResizerPath = f.grid_cont_col_resizer_path || + this.basePath+'TFExt_ColsResizer/TFExt_ColsResizer.js'; + + this.tf = tf; + } + + init(){ + var tf = this.tf; + var f = tf.fObj; + var tbl = tf.tbl; + + tf.isExternalFlt = true; + + // in case column widths are not set default width 100px + if(!tf.hasColWidth){ + tf.colWidth = []; + for(var k=0; k0){ + tbl.removeChild(thead[0]); + } + + //Headers table style + this.headTbl.style.width = tbl.style.width; + this.headTbl.style.tableLayout = 'fixed'; + tbl.style.tableLayout = 'fixed'; + this.headTbl.cellPadding = tbl.cellPadding; + this.headTbl.cellSpacing = tbl.cellSpacing; + + //Headers container width + this.headTblCont.style.width = this.tblCont.clientWidth+'px'; + + //content table without headers needs col widths to be reset + tf.SetColWidths(); + + tbl.style.width = ''; + if(Helpers.isIE()){ + this.headTbl.style.width = ''; + } + + //scroll synchronisation + var o = this; //TF object + + Event.add(this.tblCont, 'scroll', function(){ + o.headTblCont.scrollLeft = this.scrollLeft; + var _o = this; //this = scroll element + //New pointerX calc taking into account scrollLeft + if(!o.isPointerXOverwritten){ + try{ + o.Evt.pointerX = function(e){ + e = e || global.event; + var scrollLeft = tf_StandardBody().scrollLeft + + _o.scrollLeft; + return (e.pageX + _o.scrollLeft) || + (e.clientX + scrollLeft); + }; + o.isPointerXOverwritten = true; + } catch(err) { + o.isPointerXOverwritten = false; + } + } + }); + + //Sort is enabled if not specified in config object + if(f.sort !== false){ + tf.sort = true; + tf.sortConfig.asyncSort = true; + tf.sortConfig.triggerIds = sortTriggers; + } + + if(this.gridEnableColResizer){ + if(!tf.hasExtensions){ + tf.extensions = { + name:['ColumnsResizer_'+tf.id], + src:[this.gridColResizerPath], + description:['Columns Resizing'], + initialize:[function(o){ + o.SetColsResizer('ColumnsResizer_'+o.id);}] + }; + tf.hasExtensions = true; + } else { + if(!tf.__containsStr( + 'colsresizer', + Str.lower(tf.extensions.src.toString())) ){ + tf.extensions.name.push('ColumnsResizer_'+tf.id); + tf.extensions.src.push(tf.gridColResizerPath); + tf.extensions.description.push('Columns Resizing'); + tf.extensions.initialize.push(function(o){ + o.SetColsResizer('ColumnsResizer_'+o.id);}); + } + } + } + + //Default columns resizer properties for grid layout + f.col_resizer_cols_headers_table = this.headTbl.getAttribute('id'); + f.col_resizer_cols_headers_index = this.gridHeadRowIndex; + f.col_resizer_width_adjustment = 0; + f.col_enable_text_ellipsis = false; + + //Cols generation for all browsers excepted IE<=7 + o.tblHasColTag = Dom.tag(tbl, 'col').length > 0 ? true : false; + if(!Helpers.isIE()){ + //Col elements are enough to keep column widths after sorting and + //filtering + var createColTags = function(o){ + if(!o){ + return; + } + for(var k=(o.nbCells-1); k>=0; k--){ + var col = Dom.create( 'col', ['id', o.id+'_col_'+k]); + tbl.firstChild.parentNode.insertBefore(col, tbl.firstChild); + col.style.width = o.colWidth[k]; + o.gridColElms[k] = col; + } + o.tblHasColTag = true; + }; + if(!o.tblHasColTag){ + createColTags(o); + } else { + var cols = Dom.tag(tbl,'col'); + for(var ii=0; ii0 ){ + r = tbody[0].insertRow(0); + } else{ + r = tbl.insertRow(0); + } + r.style.height = '0px'; + for(var x=0; x0){ + tbody[0].moveRow(o.leadColWidthsRow.rowIndex, 0); + } else { + tbl.moveRow(o.leadColWidthsRow.rowIndex, 0); + } + } + if(afterSortFn){ + afterSortFn.call(null, o, colIndex); + } + }; + } + + var afterColResizedFn = Types.isFn(f.on_after_col_resized) ? + f.on_after_col_resized : null; + f.on_after_col_resized = function(o,colIndex){ + if(!colIndex){ + return; + } + var w = o.crWColsRow.cells[colIndex].style.width; + var col = o.gridColElms[colIndex]; + col.style.width = w; + + var thCW = o.crWColsRow.cells[colIndex].clientWidth; + var tdCW = o.crWRowDataTbl.cells[colIndex].clientWidth; + + if(Helpers.isIE()){ + tbl.style.width = o.headTbl.clientWidth+'px'; + } + + if(thCW != tdCW && !Helpers.isIE()){ + o.headTbl.style.width = tbl.clientWidth+'px'; + } + + if(afterColResizedFn){ + afterColResizedFn.call(null,o,colIndex); + } + }; + + if(tbl.clientWidth !== this.headTbl.clientWidth){ + tbl.style.width = this.headTbl.clientWidth+'px'; + } + + tf.refRow = Helpers.isIE() ? (tf.refRow+1) : 0; + } + + destroy(){ + var tf = this.tf; + var tbl = tf.tbl; + + if(!tf.gridLayout){ + return; + } + var t = tbl.parentNode.removeChild(tbl); + this.tblMainCont.parentNode.insertBefore(t, this.tblMainCont); + this.tblMainCont.parentNode.removeChild(this.tblMainCont); + + this.tblMainCont = null; + this.headTblCont = null; + this.headTbl = null; + this.tblCont = null; + + tbl.outerHTML = tf.sourceTblHtml; + tbl = Dom.id(tf.id); //needed to keep reference + } +} \ No newline at end of file diff --git a/src-es6/modules/loader.js b/src-es6/modules/loader.js index 473a6e8b..688a1785 100644 --- a/src-es6/modules/loader.js +++ b/src-es6/modules/loader.js @@ -39,8 +39,7 @@ export class Loader{ containerDiv.className = this.loaderCssClass; var targetEl = !this.loaderTgtId ? - (tf.gridLayout ? tf.tblCont : tf.tbl.parentNode) : - Dom.id(this.loaderTgtId); + tf.tbl.parentNode : Dom.id(this.loaderTgtId); if(!this.loaderTgtId){ targetEl.insertBefore(containerDiv, tf.tbl); } else { diff --git a/src/core.js b/src/core.js index f05c1bd6..4eb2bb68 100644 --- a/src/core.js +++ b/src/core.js @@ -677,7 +677,8 @@ function TableFilter(id) { loader: null, alternateRows: null, colOps: null, - rowsCounter: null + rowsCounter: null, + GridLayout: null }; /*** TF events ***/ @@ -835,7 +836,7 @@ function TableFilter(id) { /*==================================================== - onchange event for select filters =====================================================*/ - _OnSlcChange: function(e) {console.log(o, o.activeFlt); + _OnSlcChange: function(e) { if(!o.activeFlt){ return; } var colIndex = o.activeFlt.getAttribute('colIndex'); //Checks filter is a checklist and caller is not null @@ -948,10 +949,13 @@ TableFilter.prototype = { if(this.hasThemes){ this._LoadThemes(); } if(this.gridLayout){ - this.isExternalFlt = true; - this.SetGridLayout(); + // this.isExternalFlt = true; + //this.SetGridLayout(); //Once grid generated 1st filterable row is 0 again - this.refRow = hlp.isIE() ? (this.refRow+1) : 0; + //this.refRow = hlp.isIE() ? (this.refRow+1) : 0; + var GridLayout = require('modules/gridLayout').GridLayout; + this.Cpt.gridLayout = new GridLayout(this); + this.Cpt.gridLayout.init(); } if(this.loader){ @@ -1370,55 +1374,55 @@ TableFilter.prototype = { this.IncludeFile(module.name, module.path, module.init); }, - // LoadExtensions : function(){ - // if(!this.Ext){ - // /*** TF extensions ***/ - // var o = this; - // this.Ext = { - // list: {}, - // add: function(extName, extDesc, extPath, extCallBack){ - // var file = extPath.split('/')[extPath.split('/').length-1], - // re = new RegExp(file), - // path = extPath.replace(re,''); - // o.Ext.list[extName] = { - // name: extName, - // description: extDesc, - // file: file, - // path: path, - // callback: extCallBack - // }; - // } - // }; - // } - // this.EvtManager(this.Evt.name.loadextensions); - // }, + LoadExtensions : function(){ + if(!this.Ext){ + /*** TF extensions ***/ + var o = this; + this.Ext = { + list: {}, + add: function(extName, extDesc, extPath, extCallBack){ + var file = extPath.split('/')[extPath.split('/').length-1], + re = new RegExp(file), + path = extPath.replace(re,''); + o.Ext.list[extName] = { + name: extName, + description: extDesc, + file: file, + path: path, + callback: extCallBack + }; + } + }; + } + this.EvtManager(this.Evt.name.loadextensions); + }, /*==================================================== - loads TF extensions =====================================================*/ - // _LoadExtensions : function(){ - // if(!this.hasExtensions || !types.isArray(this.extensions.name) || - // !types.isArray(this.extensions.src)){ - // return; - // } - // var ext = this.extensions; - // for(var e=0; e0){ - this.tbl.removeChild(thead[0]); - } + // //THead needs to be removed in content table for sort feature + // var thead = dom.tag(this.tbl,'thead'); + // if(thead.length>0){ + // this.tbl.removeChild(thead[0]); + // } - //Headers table style - this.headTbl.style.width = this.tbl.style.width; - this.headTbl.style.tableLayout = 'fixed'; - this.tbl.style.tableLayout = 'fixed'; - this.headTbl.cellPadding = this.tbl.cellPadding; - this.headTbl.cellSpacing = this.tbl.cellSpacing; + // //Headers table style + // this.headTbl.style.width = this.tbl.style.width; + // this.headTbl.style.tableLayout = 'fixed'; + // this.tbl.style.tableLayout = 'fixed'; + // this.headTbl.cellPadding = this.tbl.cellPadding; + // this.headTbl.cellSpacing = this.tbl.cellSpacing; - //Headers container width - this.headTblCont.style.width = this.tblCont.clientWidth+'px'; + // //Headers container width + // this.headTblCont.style.width = this.tblCont.clientWidth+'px'; - //content table without headers needs col widths to be reset - this.SetColWidths(); + // //content table without headers needs col widths to be reset + // this.SetColWidths(); - this.tbl.style.width = ''; - if(hlp.isIE()){ - this.headTbl.style.width = ''; - } + // this.tbl.style.width = ''; + // if(hlp.isIE()){ + // this.headTbl.style.width = ''; + // } - //scroll synchronisation - var o = this; //TF object - this.tblCont.onscroll = function(){ - o.headTblCont.scrollLeft = this.scrollLeft; - var _o = this; //this = scroll element - //New pointerX calc taking into account scrollLeft - if(!o.isPointerXOverwritten){ - try{ - o.Evt.pointerX = function(e){ - e = e || global.event; - var scrollLeft = tf_StandardBody().scrollLeft + - _o.scrollLeft; - return (e.pageX + _o.scrollLeft) || - (e.clientX + scrollLeft); - }; - o.isPointerXOverwritten = true; - } catch(err) { - o.isPointerXOverwritten = false; - } - } - }; + // //scroll synchronisation + // var o = this; //TF object + // this.tblCont.onscroll = function(){ + // o.headTblCont.scrollLeft = this.scrollLeft; + // var _o = this; //this = scroll element + // //New pointerX calc taking into account scrollLeft + // if(!o.isPointerXOverwritten){ + // try{ + // o.Evt.pointerX = function(e){ + // e = e || global.event; + // var scrollLeft = tf_StandardBody().scrollLeft + + // _o.scrollLeft; + // return (e.pageX + _o.scrollLeft) || + // (e.clientX + scrollLeft); + // }; + // o.isPointerXOverwritten = true; + // } catch(err) { + // o.isPointerXOverwritten = false; + // } + // } + // }; - //Sort is enabled if not specified in config object - if(f.sort !== false){ - this.sort = true; - this.sortConfig.asyncSort = true; - this.sortConfig.triggerIds = sortTriggers; - } + // //Sort is enabled if not specified in config object + // if(f.sort !== false){ + // this.sort = true; + // this.sortConfig.asyncSort = true; + // this.sortConfig.triggerIds = sortTriggers; + // } - if(this.gridEnableColResizer){ - if(!this.hasExtensions){ - this.extensions = { - name:['ColumnsResizer_'+this.id], - src:[this.gridColResizerPath], - description:['Columns Resizing'], - initialize:[function(o){ - o.SetColsResizer('ColumnsResizer_'+o.id);}] - }; - this.hasExtensions = true; - } else { - if(!this.__containsStr( - 'colsresizer', - str.lower(this.extensions.src.toString())) ){ - this.extensions.name.push('ColumnsResizer_'+this.id); - this.extensions.src.push(this.gridColResizerPath); - this.extensions.description.push('Columns Resizing'); - this.extensions.initialize.push(function(o){ - o.SetColsResizer('ColumnsResizer_'+o.id);}); - } - } - } + // if(this.gridEnableColResizer){ + // if(!this.hasExtensions){ + // this.extensions = { + // name:['ColumnsResizer_'+this.id], + // src:[this.gridColResizerPath], + // description:['Columns Resizing'], + // initialize:[function(o){ + // o.SetColsResizer('ColumnsResizer_'+o.id);}] + // }; + // this.hasExtensions = true; + // } else { + // if(!this.__containsStr( + // 'colsresizer', + // str.lower(this.extensions.src.toString())) ){ + // this.extensions.name.push('ColumnsResizer_'+this.id); + // this.extensions.src.push(this.gridColResizerPath); + // this.extensions.description.push('Columns Resizing'); + // this.extensions.initialize.push(function(o){ + // o.SetColsResizer('ColumnsResizer_'+o.id);}); + // } + // } + // } - //Default columns resizer properties for grid layout - f.col_resizer_cols_headers_table = this.headTbl.getAttribute('id'); - f.col_resizer_cols_headers_index = this.gridHeadRowIndex; - f.col_resizer_width_adjustment = 0; - f.col_enable_text_ellipsis = false; + // //Default columns resizer properties for grid layout + // f.col_resizer_cols_headers_table = this.headTbl.getAttribute('id'); + // f.col_resizer_cols_headers_index = this.gridHeadRowIndex; + // f.col_resizer_width_adjustment = 0; + // f.col_enable_text_ellipsis = false; - //Cols generation for all browsers excepted IE<=7 - o.tblHasColTag = dom.tag(o.tbl,'col').length > 0 ? true : false; - if(!hlp.isIE()){ - //Col elements are enough to keep column widths after sorting and - //filtering - var createColTags = function(o){ - if(!o){ - return; - } - for(var k=(o.nbCells-1); k>=0; k--){ - var col = dom.create( 'col', ['id', o.id+'_col_'+k]); - o.tbl.firstChild.parentNode.insertBefore( - col,o.tbl.firstChild); - col.style.width = o.colWidth[k]; - o.gridColElms[k] = col; - } - o.tblHasColTag = true; - }; - if(!o.tblHasColTag){ - createColTags(o); - } else { - var cols = dom.tag(o.tbl,'col'); - for(var ii=0; ii 0 ? true : false; + // if(!hlp.isIE()){ + // //Col elements are enough to keep column widths after sorting and + // //filtering + // var createColTags = function(o){ + // if(!o){ + // return; + // } + // for(var k=(o.nbCells-1); k>=0; k--){ + // var col = dom.create( 'col', ['id', o.id+'_col_'+k]); + // o.tbl.firstChild.parentNode.insertBefore( + // col,o.tbl.firstChild); + // col.style.width = o.colWidth[k]; + // o.gridColElms[k] = col; + // } + // o.tblHasColTag = true; + // }; + // if(!o.tblHasColTag){ + // createColTags(o); + // } else { + // var cols = dom.tag(o.tbl,'col'); + // for(var ii=0; ii0 ){ - r = tbody[0].insertRow(0); - } else{ - r = o.tbl.insertRow(0); - } - r.style.height = '0px'; - for(var x=0; x0 ){ + // r = tbody[0].insertRow(0); + // } else{ + // r = o.tbl.insertRow(0); + // } + // r.style.height = '0px'; + // for(var x=0; x0){ - tbody[0].moveRow(o.leadColWidthsRow.rowIndex, 0); - } else { - o.tbl.moveRow(o.leadColWidthsRow.rowIndex, 0); - } - } - if(afterSortFn){ - afterSortFn.call(null,o,colIndex); - } - }; - } + // var afterSortFn = types.isFn(f.on_after_sort) ? + // f.on_after_sort : null; + // f.on_after_sort = function(o,colIndex){ + // if(o.leadColWidthsRow.rowIndex !== 0){ + // var r = o.leadColWidthsRow; + // if(tbody.length>0){ + // tbody[0].moveRow(o.leadColWidthsRow.rowIndex, 0); + // } else { + // o.tbl.moveRow(o.leadColWidthsRow.rowIndex, 0); + // } + // } + // if(afterSortFn){ + // afterSortFn.call(null,o,colIndex); + // } + // }; + // } - var afterColResizedFn = types.isFn(f.on_after_col_resized) ? - f.on_after_col_resized : null; - f.on_after_col_resized = function(o,colIndex){ - if(!colIndex){ - return; - } - var w = o.crWColsRow.cells[colIndex].style.width; - var col = o.gridColElms[colIndex]; - col.style.width = w; + // var afterColResizedFn = types.isFn(f.on_after_col_resized) ? + // f.on_after_col_resized : null; + // f.on_after_col_resized = function(o,colIndex){ + // if(!colIndex){ + // return; + // } + // var w = o.crWColsRow.cells[colIndex].style.width; + // var col = o.gridColElms[colIndex]; + // col.style.width = w; - var thCW = o.crWColsRow.cells[colIndex].clientWidth; - var tdCW = o.crWRowDataTbl.cells[colIndex].clientWidth; + // var thCW = o.crWColsRow.cells[colIndex].clientWidth; + // var tdCW = o.crWRowDataTbl.cells[colIndex].clientWidth; - if(hlp.isIE()){ - o.tbl.style.width = o.headTbl.clientWidth+'px'; - } + // if(hlp.isIE()){ + // o.tbl.style.width = o.headTbl.clientWidth+'px'; + // } - if(thCW != tdCW && !hlp.isIE()){ - o.headTbl.style.width = o.tbl.clientWidth+'px'; - } + // if(thCW != tdCW && !hlp.isIE()){ + // o.headTbl.style.width = o.tbl.clientWidth+'px'; + // } - if(afterColResizedFn){ - afterColResizedFn.call(null,o,colIndex); - } - }; + // if(afterColResizedFn){ + // afterColResizedFn.call(null,o,colIndex); + // } + // }; - if(this.tbl.clientWidth !== this.headTbl.clientWidth){ - this.tbl.style.width = this.headTbl.clientWidth+'px'; - } + // if(this.tbl.clientWidth !== this.headTbl.clientWidth){ + // this.tbl.style.width = this.headTbl.clientWidth+'px'; + // } - }, + // }, /*==================================================== - removes the grid layout =====================================================*/ - RemoveGridLayout: function(){ - if(!this.gridLayout){ - return; - } - var t = this.tbl.parentNode.removeChild(this.tbl); - this.tblMainCont.parentNode.insertBefore(t, this.tblMainCont); - this.tblMainCont.parentNode.removeChild( this.tblMainCont ); + // RemoveGridLayout: function(){ + // if(!this.gridLayout){ + // return; + // } + // var t = this.tbl.parentNode.removeChild(this.tbl); + // this.tblMainCont.parentNode.insertBefore(t, this.tblMainCont); + // this.tblMainCont.parentNode.removeChild( this.tblMainCont ); - this.tblMainCont = null; - this.headTblCont = null; - this.headTbl = null; - this.tblCont = null; + // this.tblMainCont = null; + // this.headTblCont = null; + // this.headTbl = null; + // this.tblCont = null; - this.tbl.outerHTML = this.sourceTblHtml; - this.tbl = dom.id(this.id); //needed to keep reference - }, + // this.tbl.outerHTML = this.sourceTblHtml; + // this.tbl = dom.id(this.id); //needed to keep reference + // }, /*==================================================== - generates popup filters div diff --git a/src/index.html b/src/index.html index 4203bd06..ded40907 100644 --- a/src/index.html +++ b/src/index.html @@ -73,6 +73,7 @@ col_0: 'select', col_3: 'checklist', base_path: './', + loader: false, rows_counter: true, enable_default_theme: true, paging: false, @@ -81,7 +82,9 @@ match_case: false, remember_grid_values: true, btn_reset: true, - grid_layout: false + grid_layout: true, + grid_width: '500px', + grid_height: '200px' }); tf.init(); diff --git a/src/modules/gridLayout.js b/src/modules/gridLayout.js new file mode 100644 index 00000000..ea6ba5f3 --- /dev/null +++ b/src/modules/gridLayout.js @@ -0,0 +1,378 @@ +define(["exports", "../dom", "../types", "../helpers", "../event"], function (exports, _dom, _types, _helpers, _event) { + "use strict"; + + var _classProps = function (child, staticProps, instanceProps) { + if (staticProps) Object.defineProperties(child, staticProps); + if (instanceProps) Object.defineProperties(child.prototype, instanceProps); + }; + + var Dom = _dom.Dom; + var Types = _types.Types; + var Helpers = _helpers.Helpers; + var Event = _event.Event; + var GridLayout = (function () { + var GridLayout = function GridLayout(tf) { + var f = tf.fObj; + + //defines grid width + this.gridWidth = f.grid_width || null; + //defines grid height + this.gridHeight = f.grid_height || null; + //defines css class for main container + this.gridMainContCssClass = f.grid_cont_css_class || "grd_Cont"; + //defines css class for div containing table + this.gridContCssClass = f.grid_tbl_cont_css_class || "grd_tblCont"; + //defines css class for div containing headers' table + this.gridHeadContCssClass = f.grid_tblHead_cont_css_class || "grd_headTblCont"; + //defines css class for div containing rows counter, paging etc. + this.gridInfDivCssClass = f.grid_inf_grid_css_class || "grd_inf"; + //defines which row contains column headers + this.gridHeadRowIndex = f.grid_headers_row_index || 0; + //array of headers row indexes to be placed in header table + this.gridHeadRows = f.grid_headers_rows || [0]; + //generate filters in table headers + this.gridEnableFilters = f.grid_enable_default_filters !== undefined ? f.grid_enable_default_filters : true; + //default col width + this.gridDefaultColWidth = f.grid_default_col_width || "100px"; + //enables/disables columns resizer + this.gridEnableColResizer = f.grid_enable_cols_resizer !== undefined ? f.grid_enable_cols_resizer : true; + //defines col resizer script path + this.gridColResizerPath = f.grid_cont_col_resizer_path || this.basePath + "TFExt_ColsResizer/TFExt_ColsResizer.js"; + + this.tf = tf; + }; + + _classProps(GridLayout, null, { + init: { + writable: true, + value: function () { + var tf = this.tf; + var f = tf.fObj; + var tbl = tf.tbl; + + tf.isExternalFlt = true; + + // in case column widths are not set default width 100px + if (!tf.hasColWidth) { + tf.colWidth = []; + for (var k = 0; k < tf.nbCells; k++) { + var colW, cell = tbl.rows[this.gridHeadRowIndex].cells[k]; + if (cell.width !== "") { + colW = cell.width; + } else if (cell.style.width !== "") { + colW = parseInt(cell.style.width, 10); + } else { + colW = this.gridDefaultColWidth; + } + tf.colWidth[k] = colW; + } + tf.hasColWidth = true; + } + tf.SetColWidths(this.gridHeadRowIndex); + + var tblW; //initial table width + if (tbl.width !== "") { + tblW = tbl.width; + } else if (tbl.style.width !== "") { + tblW = parseInt(tbl.style.width, 10); + } else { + tblW = tbl.clientWidth; + } + + //Main container: it will contain all the elements + this.tblMainCont = Dom.create("div", ["id", tf.prfxMainTblCont + tf.id]); + this.tblMainCont.className = this.gridMainContCssClass; + if (this.gridWidth) { + this.tblMainCont.style.width = this.gridWidth; + } + tbl.parentNode.insertBefore(this.tblMainCont, tf.tbl); + + //Table container: div wrapping content table + this.tblCont = Dom.create("div", ["id", tf.prfxTblCont + tf.id]); + this.tblCont.className = this.gridContCssClass; + if (this.gridWidth) { + this.tblCont.style.width = this.gridWidth; + } + if (this.gridHeight) { + this.tblCont.style.height = this.gridHeight; + } + tbl.parentNode.insertBefore(this.tblCont, tf.tbl); + var t = tbl.parentNode.removeChild(tf.tbl); + this.tblCont.appendChild(t); + + //In case table width is expressed in % + if (tbl.style.width === "") { + tbl.style.width = (tf.__containsStr("%", tblW) ? tbl.clientWidth : tblW) + "px"; + } + + var d = this.tblCont.parentNode.removeChild(this.tblCont); + this.tblMainCont.appendChild(d); + + //Headers table container: div wrapping headers table + this.headTblCont = Dom.create("div", ["id", tf.prfxHeadTblCont + tf.id]); + this.headTblCont.className = this.gridHeadContCssClass; + if (this.gridWidth) { + this.headTblCont.style.width = this.gridWidth; + } + + //Headers table + this.headTbl = Dom.create("table", ["id", tf.prfxHeadTbl + tf.id]); + var tH = Dom.create("tHead"); //IE<7 needs it + + //1st row should be headers row, ids are added if not set + //Those ids are used by the sort feature + var hRow = tbl.rows[this.gridHeadRowIndex]; + var sortTriggers = []; + for (var n = 0; n < tf.nbCells; n++) { + var c = hRow.cells[n]; + var thId = c.getAttribute("id"); + if (!thId || thId === "") { + thId = tf.prfxGridTh + n + "_" + tf.id; + c.setAttribute("id", thId); + } + sortTriggers.push(thId); + } + + //Filters row is created + var filtersRow = Dom.create("tr"); + if (this.gridEnableFilters && tf.fltGrid) { + tf.externalFltTgtIds = []; + for (var j = 0; j < tf.nbCells; j++) { + var fltTdId = tf.prfxFlt + j + tf.prfxGridFltTd + tf.id; + var cl = Dom.create(tf.fltCellTag, ["id", fltTdId]); + filtersRow.appendChild(cl); + tf.externalFltTgtIds[j] = fltTdId; + } + } + //Headers row are moved from content table to headers table + for (var i = 0; i < this.gridHeadRows.length; i++) { + var headRow = tbl.rows[this.gridHeadRows[0]]; + tH.appendChild(headRow); + } + this.headTbl.appendChild(tH); + if (tf.filtersRowIndex === 0) { + tH.insertBefore(filtersRow, hRow); + } else { + tH.appendChild(filtersRow); + } + + this.headTblCont.appendChild(this.headTbl); + this.tblCont.parentNode.insertBefore(this.headTblCont, this.tblCont); + + //THead needs to be removed in content table for sort feature + var thead = Dom.tag(tf.tbl, "thead"); + if (thead.length > 0) { + tbl.removeChild(thead[0]); + } + + //Headers table style + this.headTbl.style.width = tbl.style.width; + this.headTbl.style.tableLayout = "fixed"; + tbl.style.tableLayout = "fixed"; + this.headTbl.cellPadding = tbl.cellPadding; + this.headTbl.cellSpacing = tbl.cellSpacing; + + //Headers container width + this.headTblCont.style.width = this.tblCont.clientWidth + "px"; + + //content table without headers needs col widths to be reset + tf.SetColWidths(); + + tbl.style.width = ""; + if (Helpers.isIE()) { + this.headTbl.style.width = ""; + } + + //scroll synchronisation + var o = this; //TF object + + Event.add(this.tblCont, "scroll", function () { + o.headTblCont.scrollLeft = this.scrollLeft; + var _o = this; //this = scroll element + //New pointerX calc taking into account scrollLeft + if (!o.isPointerXOverwritten) { + try { + o.Evt.pointerX = function (e) { + e = e || global.event; + var scrollLeft = tf_StandardBody().scrollLeft + _o.scrollLeft; + return (e.pageX + _o.scrollLeft) || (e.clientX + scrollLeft); + }; + o.isPointerXOverwritten = true; + } catch (err) { + o.isPointerXOverwritten = false; + } + } + }); + + //Sort is enabled if not specified in config object + if (f.sort !== false) { + tf.sort = true; + tf.sortConfig.asyncSort = true; + tf.sortConfig.triggerIds = sortTriggers; + } + + if (this.gridEnableColResizer) { + if (!tf.hasExtensions) { + tf.extensions = { + name: ["ColumnsResizer_" + tf.id], + src: [this.gridColResizerPath], + description: ["Columns Resizing"], + initialize: [function (o) { + o.SetColsResizer("ColumnsResizer_" + o.id); + }] + }; + tf.hasExtensions = true; + } else { + if (!tf.__containsStr("colsresizer", Str.lower(tf.extensions.src.toString()))) { + tf.extensions.name.push("ColumnsResizer_" + tf.id); + tf.extensions.src.push(tf.gridColResizerPath); + tf.extensions.description.push("Columns Resizing"); + tf.extensions.initialize.push(function (o) { + o.SetColsResizer("ColumnsResizer_" + o.id); + }); + } + } + } + + //Default columns resizer properties for grid layout + f.col_resizer_cols_headers_table = this.headTbl.getAttribute("id"); + f.col_resizer_cols_headers_index = this.gridHeadRowIndex; + f.col_resizer_width_adjustment = 0; + f.col_enable_text_ellipsis = false; + + //Cols generation for all browsers excepted IE<=7 + o.tblHasColTag = Dom.tag(tbl, "col").length > 0 ? true : false; + if (!Helpers.isIE()) { + //Col elements are enough to keep column widths after sorting and + //filtering + var createColTags = function (o) { + if (!o) { + return; + } + for (var k = (o.nbCells - 1); k >= 0; k--) { + var col = Dom.create("col", ["id", o.id + "_col_" + k]); + tbl.firstChild.parentNode.insertBefore(col, tbl.firstChild); + col.style.width = o.colWidth[k]; + o.gridColElms[k] = col; + } + o.tblHasColTag = true; + }; + if (!o.tblHasColTag) { + createColTags(o); + } else { + var cols = Dom.tag(tbl, "col"); + for (var ii = 0; ii < o.nbCells; ii++) { + cols[ii].setAttribute("id", o.id + "_col_" + ii); + cols[ii].style.width = o.colWidth[ii]; + o.gridColElms.push(cols[ii]); + } + } + } + + //IE <= 7 needs an additional row for widths as col element width is + //not enough... + if (Helpers.isIE()) { + var tbody = Dom.tag(tbl, "tbody"), r; + if (tbody.length > 0) { + r = tbody[0].insertRow(0); + } else { + r = tbl.insertRow(0); + } + r.style.height = "0px"; + for (var x = 0; x < o.nbCells; x++) { + var col = Dom.create("td", ["id", o.id + "_col_" + x]); + col.style.width = o.colWidth[x]; + tbl.rows[1].cells[x].style.width = ""; + r.appendChild(col); + o.gridColElms.push(col); + } + this.hasGridWidthsRow = true; + //Data table row with widths expressed + o.leadColWidthsRow = tbl.rows[0]; + o.leadColWidthsRow.setAttribute("validRow", "false"); + + var beforeSortFn = Types.isFn(f.on_before_sort) ? f.on_before_sort : null; + f.on_before_sort = function (o, colIndex) { + o.leadColWidthsRow.setAttribute("validRow", "false"); + if (beforeSortFn) { + beforeSortFn.call(null, o, colIndex); + } + }; + + var afterSortFn = Types.isFn(f.on_after_sort) ? f.on_after_sort : null; + f.on_after_sort = function (o, colIndex) { + if (o.leadColWidthsRow.rowIndex !== 0) { + var r = o.leadColWidthsRow; + if (tbody.length > 0) { + tbody[0].moveRow(o.leadColWidthsRow.rowIndex, 0); + } else { + tbl.moveRow(o.leadColWidthsRow.rowIndex, 0); + } + } + if (afterSortFn) { + afterSortFn.call(null, o, colIndex); + } + }; + } + + var afterColResizedFn = Types.isFn(f.on_after_col_resized) ? f.on_after_col_resized : null; + f.on_after_col_resized = function (o, colIndex) { + if (!colIndex) { + return; + } + var w = o.crWColsRow.cells[colIndex].style.width; + var col = o.gridColElms[colIndex]; + col.style.width = w; + + var thCW = o.crWColsRow.cells[colIndex].clientWidth; + var tdCW = o.crWRowDataTbl.cells[colIndex].clientWidth; + + if (Helpers.isIE()) { + tbl.style.width = o.headTbl.clientWidth + "px"; + } + + if (thCW != tdCW && !Helpers.isIE()) { + o.headTbl.style.width = tbl.clientWidth + "px"; + } + + if (afterColResizedFn) { + afterColResizedFn.call(null, o, colIndex); + } + }; + + if (tbl.clientWidth !== this.headTbl.clientWidth) { + tbl.style.width = this.headTbl.clientWidth + "px"; + } + + tf.refRow = Helpers.isIE() ? (tf.refRow + 1) : 0; + } + }, + destroy: { + writable: true, + value: function () { + var tf = this.tf; + var tbl = tf.tbl; + + if (!tf.gridLayout) { + return; + } + var t = tbl.parentNode.removeChild(tbl); + this.tblMainCont.parentNode.insertBefore(t, this.tblMainCont); + this.tblMainCont.parentNode.removeChild(this.tblMainCont); + + this.tblMainCont = null; + this.headTblCont = null; + this.headTbl = null; + this.tblCont = null; + + tbl.outerHTML = tf.sourceTblHtml; + tbl = Dom.id(tf.id); //needed to keep reference + } + } + }); + + return GridLayout; + })(); + + exports.GridLayout = GridLayout; +}); \ No newline at end of file diff --git a/src/modules/gridLayout.js.map b/src/modules/gridLayout.js.map new file mode 100644 index 00000000..4b86085b --- /dev/null +++ b/src/modules/gridLayout.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["src-es6/modules/gridLayout.js"],"names":[],"mappings":"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","file":"src-es6/modules/gridLayout.js","sourcesContent":["import {Dom} from '../dom';\r\nimport {Types} from '../types';\r\nimport {Helpers} from '../helpers';\r\nimport {Event} from '../event';\r\n\r\nexport class GridLayout{\r\n\r\n constructor(tf) {\r\n var f = tf.fObj;\r\n\r\n //defines grid width\r\n this.gridWidth = f.grid_width || null;\r\n //defines grid height\r\n this.gridHeight = f.grid_height || null;\r\n //defines css class for main container\r\n this.gridMainContCssClass = f.grid_cont_css_class || 'grd_Cont';\r\n //defines css class for div containing table\r\n this.gridContCssClass = f.grid_tbl_cont_css_class || 'grd_tblCont';\r\n //defines css class for div containing headers' table\r\n this.gridHeadContCssClass = f.grid_tblHead_cont_css_class ||\r\n 'grd_headTblCont';\r\n //defines css class for div containing rows counter, paging etc.\r\n this.gridInfDivCssClass = f.grid_inf_grid_css_class || 'grd_inf';\r\n //defines which row contains column headers\r\n this.gridHeadRowIndex = f.grid_headers_row_index || 0;\r\n //array of headers row indexes to be placed in header table\r\n this.gridHeadRows = f.grid_headers_rows || [0];\r\n //generate filters in table headers\r\n this.gridEnableFilters = f.grid_enable_default_filters!==undefined ?\r\n f.grid_enable_default_filters : true;\r\n //default col width\r\n this.gridDefaultColWidth = f.grid_default_col_width || '100px';\r\n //enables/disables columns resizer\r\n this.gridEnableColResizer = f.grid_enable_cols_resizer!==undefined ?\r\n f.grid_enable_cols_resizer : true;\r\n //defines col resizer script path\r\n this.gridColResizerPath = f.grid_cont_col_resizer_path ||\r\n this.basePath+'TFExt_ColsResizer/TFExt_ColsResizer.js';\r\n\r\n this.tf = tf;\r\n }\r\n\r\n init(){\r\n var tf = this.tf;\r\n var f = tf.fObj;\r\n var tbl = tf.tbl;\r\n\r\n tf.isExternalFlt = true;\r\n\r\n // in case column widths are not set default width 100px\r\n if(!tf.hasColWidth){\r\n tf.colWidth = [];\r\n for(var k=0; k0){\r\n tbl.removeChild(thead[0]);\r\n }\r\n\r\n //Headers table style\r\n this.headTbl.style.width = tbl.style.width;\r\n this.headTbl.style.tableLayout = 'fixed';\r\n tbl.style.tableLayout = 'fixed';\r\n this.headTbl.cellPadding = tbl.cellPadding;\r\n this.headTbl.cellSpacing = tbl.cellSpacing;\r\n\r\n //Headers container width\r\n this.headTblCont.style.width = this.tblCont.clientWidth+'px';\r\n\r\n //content table without headers needs col widths to be reset\r\n tf.SetColWidths();\r\n\r\n tbl.style.width = '';\r\n if(Helpers.isIE()){\r\n this.headTbl.style.width = '';\r\n }\r\n\r\n //scroll synchronisation\r\n var o = this; //TF object\r\n\r\n Event.add(this.tblCont, 'scroll', function(){\r\n o.headTblCont.scrollLeft = this.scrollLeft;\r\n var _o = this; //this = scroll element\r\n //New pointerX calc taking into account scrollLeft\r\n if(!o.isPointerXOverwritten){\r\n try{\r\n o.Evt.pointerX = function(e){\r\n e = e || global.event;\r\n var scrollLeft = tf_StandardBody().scrollLeft +\r\n _o.scrollLeft;\r\n return (e.pageX + _o.scrollLeft) ||\r\n (e.clientX + scrollLeft);\r\n };\r\n o.isPointerXOverwritten = true;\r\n } catch(err) {\r\n o.isPointerXOverwritten = false;\r\n }\r\n }\r\n });\r\n\r\n //Sort is enabled if not specified in config object\r\n if(f.sort !== false){\r\n tf.sort = true;\r\n tf.sortConfig.asyncSort = true;\r\n tf.sortConfig.triggerIds = sortTriggers;\r\n }\r\n\r\n if(this.gridEnableColResizer){\r\n if(!tf.hasExtensions){\r\n tf.extensions = {\r\n name:['ColumnsResizer_'+tf.id],\r\n src:[this.gridColResizerPath],\r\n description:['Columns Resizing'],\r\n initialize:[function(o){\r\n o.SetColsResizer('ColumnsResizer_'+o.id);}]\r\n };\r\n tf.hasExtensions = true;\r\n } else {\r\n if(!tf.__containsStr(\r\n 'colsresizer',\r\n Str.lower(tf.extensions.src.toString())) ){\r\n tf.extensions.name.push('ColumnsResizer_'+tf.id);\r\n tf.extensions.src.push(tf.gridColResizerPath);\r\n tf.extensions.description.push('Columns Resizing');\r\n tf.extensions.initialize.push(function(o){\r\n o.SetColsResizer('ColumnsResizer_'+o.id);});\r\n }\r\n }\r\n }\r\n\r\n //Default columns resizer properties for grid layout\r\n f.col_resizer_cols_headers_table = this.headTbl.getAttribute('id');\r\n f.col_resizer_cols_headers_index = this.gridHeadRowIndex;\r\n f.col_resizer_width_adjustment = 0;\r\n f.col_enable_text_ellipsis = false;\r\n\r\n //Cols generation for all browsers excepted IE<=7\r\n o.tblHasColTag = Dom.tag(tbl, 'col').length > 0 ? true : false;\r\n if(!Helpers.isIE()){\r\n //Col elements are enough to keep column widths after sorting and\r\n //filtering\r\n var createColTags = function(o){\r\n if(!o){\r\n return;\r\n }\r\n for(var k=(o.nbCells-1); k>=0; k--){\r\n var col = Dom.create( 'col', ['id', o.id+'_col_'+k]);\r\n tbl.firstChild.parentNode.insertBefore(col, tbl.firstChild);\r\n col.style.width = o.colWidth[k];\r\n o.gridColElms[k] = col;\r\n }\r\n o.tblHasColTag = true;\r\n };\r\n if(!o.tblHasColTag){\r\n createColTags(o);\r\n } else {\r\n var cols = Dom.tag(tbl,'col');\r\n for(var ii=0; ii0 ){\r\n r = tbody[0].insertRow(0);\r\n } else{\r\n r = tbl.insertRow(0);\r\n }\r\n r.style.height = '0px';\r\n for(var x=0; x0){\r\n tbody[0].moveRow(o.leadColWidthsRow.rowIndex, 0);\r\n } else {\r\n tbl.moveRow(o.leadColWidthsRow.rowIndex, 0);\r\n }\r\n }\r\n if(afterSortFn){\r\n afterSortFn.call(null, o, colIndex);\r\n }\r\n };\r\n }\r\n\r\n var afterColResizedFn = Types.isFn(f.on_after_col_resized) ?\r\n f.on_after_col_resized : null;\r\n f.on_after_col_resized = function(o,colIndex){\r\n if(!colIndex){\r\n return;\r\n }\r\n var w = o.crWColsRow.cells[colIndex].style.width;\r\n var col = o.gridColElms[colIndex];\r\n col.style.width = w;\r\n\r\n var thCW = o.crWColsRow.cells[colIndex].clientWidth;\r\n var tdCW = o.crWRowDataTbl.cells[colIndex].clientWidth;\r\n\r\n if(Helpers.isIE()){\r\n tbl.style.width = o.headTbl.clientWidth+'px';\r\n }\r\n\r\n if(thCW != tdCW && !Helpers.isIE()){\r\n o.headTbl.style.width = tbl.clientWidth+'px';\r\n }\r\n\r\n if(afterColResizedFn){\r\n afterColResizedFn.call(null,o,colIndex);\r\n }\r\n };\r\n\r\n if(tbl.clientWidth !== this.headTbl.clientWidth){\r\n tbl.style.width = this.headTbl.clientWidth+'px';\r\n }\r\n\r\n tf.refRow = Helpers.isIE() ? (tf.refRow+1) : 0;\r\n }\r\n\r\n destroy(){\r\n var tf = this.tf;\r\n var tbl = tf.tbl;\r\n\r\n if(!tf.gridLayout){\r\n return;\r\n }\r\n var t = tbl.parentNode.removeChild(tbl);\r\n this.tblMainCont.parentNode.insertBefore(t, this.tblMainCont);\r\n this.tblMainCont.parentNode.removeChild(this.tblMainCont);\r\n\r\n this.tblMainCont = null;\r\n this.headTblCont = null;\r\n this.headTbl = null;\r\n this.tblCont = null;\r\n\r\n tbl.outerHTML = tf.sourceTblHtml;\r\n tbl = Dom.id(tf.id); //needed to keep reference\r\n }\r\n}"]} \ No newline at end of file diff --git a/src/modules/loader.js b/src/modules/loader.js index bdc6c1bd..e996a60a 100644 --- a/src/modules/loader.js +++ b/src/modules/loader.js @@ -38,7 +38,7 @@ define(["exports", "../dom", "../types"], function (exports, _dom, _types) { var containerDiv = Dom.create("div", ["id", tf.prfxLoader + tf.id]); containerDiv.className = this.loaderCssClass; - var targetEl = !this.loaderTgtId ? (tf.gridLayout ? tf.tblCont : tf.tbl.parentNode) : Dom.id(this.loaderTgtId); + var targetEl = !this.loaderTgtId ? tf.tbl.parentNode : Dom.id(this.loaderTgtId); if (!this.loaderTgtId) { targetEl.insertBefore(containerDiv, tf.tbl); } else { diff --git a/src/modules/loader.js.map b/src/modules/loader.js.map index fc7f7097..f44384b3 100644 --- a/src/modules/loader.js.map +++ b/src/modules/loader.js.map @@ -1 +1 @@ -{"version":3,"sources":["src-es6/modules/loader.js"],"names":[],"mappings":"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","file":"src-es6/modules/loader.js","sourcesContent":["\r\nimport {Dom} from '../dom';\r\nimport {Types} from '../types';\r\n\r\nvar global = window;\r\n\r\n/**\r\n * Loading message/spinner\r\n * @param {Object} tf TableFilter instance\r\n */\r\nexport class Loader{\r\n\r\n constructor(tf){\r\n\r\n // TableFilter configuration\r\n var f = tf.fObj;\r\n //id of container element\r\n this.loaderTgtId = f.loader_target_id || null;\r\n //div containing loader\r\n this.loaderDiv = null;\r\n //defines loader text\r\n this.loaderText = f.loader_text || 'Loading...';\r\n //defines loader innerHtml\r\n this.loaderHtml = f.loader_html || null;\r\n //defines css class for loader div\r\n this.loaderCssClass = f.loader_css_class || 'loader';\r\n //delay for hiding loader\r\n this.loaderCloseDelay = 200;\r\n //callback function before loader is displayed\r\n this.onShowLoader = Types.isFn(f.on_show_loader) ?\r\n f.on_show_loader : null;\r\n //callback function after loader is closed\r\n this.onHideLoader = Types.isFn(f.on_hide_loader) ?\r\n f.on_hide_loader : null;\r\n\r\n this.tf = tf;\r\n\r\n var containerDiv = Dom.create('div', ['id', tf.prfxLoader+tf.id]);\r\n containerDiv.className = this.loaderCssClass;\r\n\r\n var targetEl = !this.loaderTgtId ?\r\n (tf.gridLayout ? tf.tblCont : tf.tbl.parentNode) :\r\n Dom.id(this.loaderTgtId);\r\n if(!this.loaderTgtId){\r\n targetEl.insertBefore(containerDiv, tf.tbl);\r\n } else {\r\n targetEl.appendChild(containerDiv);\r\n }\r\n this.loaderDiv = Dom.id(tf.prfxLoader+tf.id);\r\n if(!this.loaderHtml){\r\n this.loaderDiv.appendChild(Dom.text(this.loaderText));\r\n } else {\r\n this.loaderDiv.innerHTML = this.loaderHtml;\r\n }\r\n }\r\n\r\n show(p) {\r\n if(!this.tf.loader || !this.loaderDiv ||\r\n this.loaderDiv.style.display===p){\r\n return;\r\n }\r\n\r\n var displayLoader = () => {\r\n if(!this.loaderDiv){\r\n return;\r\n }\r\n if(this.onShowLoader && p!=='none'){\r\n this.onShowLoader.call(null, this);\r\n }\r\n this.loaderDiv.style.display = p;\r\n if(this.onHideLoader && p==='none'){\r\n this.onHideLoader.call(null, this);\r\n }\r\n };\r\n\r\n var t = p==='none' ? this.loaderCloseDelay : 1;\r\n global.setTimeout(displayLoader, t);\r\n }\r\n\r\n remove(){\r\n if(!this.loaderDiv){\r\n return;\r\n }\r\n var targetEl = !this.loaderTgtId ?\r\n (this.tf.gridLayout ? this.tf.tblCont : this.tf.tbl.parentNode):\r\n Dom.id(this.loaderTgtId);\r\n targetEl.removeChild(this.loaderDiv);\r\n this.loaderDiv = null;\r\n }\r\n}\r\n"]} \ No newline at end of file +{"version":3,"sources":["src-es6/modules/loader.js"],"names":[],"mappings":"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","file":"src-es6/modules/loader.js","sourcesContent":["\r\nimport {Dom} from '../dom';\r\nimport {Types} from '../types';\r\n\r\nvar global = window;\r\n\r\n/**\r\n * Loading message/spinner\r\n * @param {Object} tf TableFilter instance\r\n */\r\nexport class Loader{\r\n\r\n constructor(tf){\r\n\r\n // TableFilter configuration\r\n var f = tf.fObj;\r\n //id of container element\r\n this.loaderTgtId = f.loader_target_id || null;\r\n //div containing loader\r\n this.loaderDiv = null;\r\n //defines loader text\r\n this.loaderText = f.loader_text || 'Loading...';\r\n //defines loader innerHtml\r\n this.loaderHtml = f.loader_html || null;\r\n //defines css class for loader div\r\n this.loaderCssClass = f.loader_css_class || 'loader';\r\n //delay for hiding loader\r\n this.loaderCloseDelay = 200;\r\n //callback function before loader is displayed\r\n this.onShowLoader = Types.isFn(f.on_show_loader) ?\r\n f.on_show_loader : null;\r\n //callback function after loader is closed\r\n this.onHideLoader = Types.isFn(f.on_hide_loader) ?\r\n f.on_hide_loader : null;\r\n\r\n this.tf = tf;\r\n\r\n var containerDiv = Dom.create('div', ['id', tf.prfxLoader+tf.id]);\r\n containerDiv.className = this.loaderCssClass;\r\n\r\n var targetEl = !this.loaderTgtId ?\r\n tf.tbl.parentNode : Dom.id(this.loaderTgtId);\r\n if(!this.loaderTgtId){\r\n targetEl.insertBefore(containerDiv, tf.tbl);\r\n } else {\r\n targetEl.appendChild(containerDiv);\r\n }\r\n this.loaderDiv = Dom.id(tf.prfxLoader+tf.id);\r\n if(!this.loaderHtml){\r\n this.loaderDiv.appendChild(Dom.text(this.loaderText));\r\n } else {\r\n this.loaderDiv.innerHTML = this.loaderHtml;\r\n }\r\n }\r\n\r\n show(p) {\r\n if(!this.tf.loader || !this.loaderDiv ||\r\n this.loaderDiv.style.display===p){\r\n return;\r\n }\r\n\r\n var displayLoader = () => {\r\n if(!this.loaderDiv){\r\n return;\r\n }\r\n if(this.onShowLoader && p!=='none'){\r\n this.onShowLoader.call(null, this);\r\n }\r\n this.loaderDiv.style.display = p;\r\n if(this.onHideLoader && p==='none'){\r\n this.onHideLoader.call(null, this);\r\n }\r\n };\r\n\r\n var t = p==='none' ? this.loaderCloseDelay : 1;\r\n global.setTimeout(displayLoader, t);\r\n }\r\n\r\n remove(){\r\n if(!this.loaderDiv){\r\n return;\r\n }\r\n var targetEl = !this.loaderTgtId ?\r\n (this.tf.gridLayout ? this.tf.tblCont : this.tf.tbl.parentNode):\r\n Dom.id(this.loaderTgtId);\r\n targetEl.removeChild(this.loaderDiv);\r\n this.loaderDiv = null;\r\n }\r\n}\r\n"]} \ No newline at end of file diff --git a/test/test-grid-layout.html b/test/test-grid-layout.html new file mode 100644 index 00000000..e69de29b diff --git a/test/test-grid-layout.js b/test/test-grid-layout.js new file mode 100644 index 00000000..e69de29b