1
0
Fork 0
mirror of https://github.com/koalyptus/TableFilter.git synced 2024-05-23 16:52:26 +02:00
TableFilter/dist/tablefilter_all.js

10 lines
105 KiB
JavaScript
Raw Normal View History

2014-10-18 14:00:34 +02:00
/*------------------------------------------------------------------------
- TableFilter v3.0 by Max Guglielmi
- build date: Sat Oct 18 2014 22:43:34
- http://tablefilter.free.fr
- Copyright (c) 2014, Licensed under the MIT License
------------------------------------------------------------------------*/
function TF(){}function tf_IsValidDate(a,b){if(b||(b="DMY"),b=b.toUpperCase(),3!=b.length&&"DDMMMYYYY"===b){var c=tf_FormatDate(a,b);a=c.getDate()+"/"+(c.getMonth()+1)+"/"+c.getFullYear(),b="DMY"}(-1===b.indexOf("M")||-1===b.indexOf("D")||-1===b.indexOf("Y"))&&(b="DMY");var d,e;if("Y"==b.substring(0,1)?(d=/^\d{2}(\-|\/|\.)\d{1,2}\1\d{1,2}$/,e=/^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$/):"Y"==b.substring(1,2)?(d=/^\d{1,2}(\-|\/|\.)\d{2}\1\d{1,2}$/,e=/^\d{1,2}(\-|\/|\.)\d{4}\1\d{1,2}$/):(d=/^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{2}$/,e=/^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/),d.test(a)===!1&&e.test(a)===!1)return!1;var f,g,h,i=a.split(RegExp.$1);f="M"===b.substring(0,1)?i[0]:"M"===b.substring(1,2)?i[1]:i[2],g="D"===b.substring(0,1)?i[0]:"D"===b.substring(1,2)?i[1]:i[2],h="Y"===b.substring(0,1)?i[0]:"Y"===b.substring(1,2)?i[1]:i[2],parseFloat(h)<=50&&(h=(parseFloat(h)+2e3).toString()),parseFloat(h)<=99&&(h=(parseFloat(h)+1900).toString());var j=new Date(parseFloat(h),parseFloat(f)-1,parseFloat(g),0,0,0,0);return parseFloat(g)!=j.getDate()?!1:parseFloat(f)-1!=j.getMonth()?!1:!0}function tf_FormatDate(a,b){function c(a){if(void 0===a)return 0;if(a.length>2)return a;var b;return 99>=a&&a>50&&(b="19"+a),(50>a||"00"===a)&&(b="20"+a),b}function d(a){if(void 0===a)return 0;for(var b,c=["january","february","march","april","may","june","july","august","september","october","november","december","jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],d=0;d<c.length;d++){var e=c[d];if(a.toLowerCase()===e){b=d+1;break}}return(b>11||23>b)&&(b-=12),1>b||b>12?0:b}if(b||(b="DMY"),!a||""===a)return new Date(1001,0,1);var e,f;switch(b.toUpperCase()){case"DDMMMYYYY":f=a.replace(/[- \/.]/g," ").split(" "),e=new Date(c(f[2]),d(f[1])-1,f[0]);break;case"DMY":f=a.replace(/^(0?[1-9]|[12][0-9]|3[01])([- \/.])(0?[1-9]|1[012])([- \/.])((\d\d)?\d\d)$/,"$1 $3 $5").split(" "),e=new Date(c(f[2]),f[1]-1,f[0]);break;case"MDY":f=a.replace(/^(0?[1-9]|1[012])([- \/.])(0?[1-9]|[12][0-9]|3[01])([- \/.])((\d\d)?\d\d)$/,"$1 $3 $5").split(" "),e=new Date(c(f[2]),f[0]-1,f[1]);break;case"YMD":f=a.replace(/^((\d\d)?\d\d)([- \/.])(0?[1-9]|1[012])([- \/.])(0?[1-9]|[12][0-9]|3[01])$/,"$1 $4 $6").split(" "),e=new Date(c(f[0]),f[1]-1,f[2]);break;default:f=a.replace(/^(0?[1-9]|[12][0-9]|3[01])([- \/.])(0?[1-9]|1[012])([- \/.])((\d\d)?\d\d)$/,"$1 $3 $5").split(" "),e=new Date(c(f[2]),f[1]-1,f[0])}return e}function setFilterGrid(a){if(0!==arguments.length){var b=new TableFilter(arguments[0],arguments[1],arguments[2]);return b.init(),window["tf_"+a]=b,b}}function initFilterGrid(){if(document.getElementsByTagName)for(var a,b=TF.tag(document,"table"),c=0;c<b.length;c++){var d=b[c],e=d.getAttribute("id");TF.Dom.hasClass(d,"filterable")&&e&&(a=TF.Types.isObj(e+"_config")?window[e+"_config"]:void 0,window[e+"_isUnob"]=!0,setFilterGrid(e,a))}}!function(a,b){"use strict";b.Str={},b.Str.lower=function(a){return a.toLowerCase()},b.Str.upper=function(a){return a.toUpperCase()},b.Str.trim=function(a){return a.trim?a.trim():a.replace(/^\s*|\s*$/g,"")},b.Str.isEmpty=function(a){return""===this.trim(a)},b.Str.rgxEsc=function(a){function b(b){var c=new RegExp("\\"+b,"g");a=a.replace(c,"\\"+b)}for(var c=["\\","[","^","$",".","|","?","*","+","(",")"],d=0;d<c.length;d++)b(c[d]);return a},b.Str.matchCase=function(a,b){return b?a:this.lower(a)}}(this,this.TF),function(a,b){"use strict";function c(){return document.documentElement.classList}b.Dom={},b.Dom.getText=function(a){var b=a.textContent||a.innerText||a.innerHTML.replace(/<[^<>]+>/g,"");return b=b.replace(/^\s+/,"").replace(/\s+$/,"")},b.Dom.create=function(a){if(a&&""!==a){var b=document.createElement(a),c=arguments;if(c.length>1)for(var d=0;d<c.length;d++){var e=typeof c[d];"object"===e.toLowerCase()&&2===c[d].length&&b.setAttribute(c[d][0],c[d][1])}return b}},b.Dom.text=function(a){return document.createTextNode(a)},b.Dom.position=function(a){var b=0,c=0;if(a&&a.offsetParent)do b+=a.offsetLeft,c+=a.offsetTop;while(a==a.offsetParent);return{left:b,top:c}},b.Dom.hasClass=function(a,b){return a?c()?a.classList.contains(b):a.className.match(ne
a.Ext.list[b]={name:b,description:c,file:f,path:h,callback:e}}}}this.EvtManager(this.Evt.name.loadextensions)},_LoadExtensions:function(){if(this.hasExtensions&&types.isArray(this.extensions.name)&&types.isArray(this.extensions.src))for(var a=this.extensions,b=0;b<a.name.length;b++){var c=a.src[b],d=a.name[b],e=a.initialize&&a.initialize[b]?a.initialize[b]:null,f=a.description&&a.description[b]?a.description[b]:null;this.Ext.add(d,f,c,e),isImported(c)?e.call(null,this):this.IncludeFile(d,c,e)}},LoadThemes:function(){this.EvtManager(this.Evt.name.loadthemes)},_LoadThemes:function(){if(this.hasThemes){if(!this.Thm){var a=this;this.Thm={list:{},add:function(b,c,d,e){var f=d.split("/")[d.split("/").length-1],g=new RegExp(f),h=d.replace(g,"");a.Thm.list[b]={name:b,description:c,file:f,path:h,callback:e}}}}if(this.enableDefaultTheme&&(this.themes={name:["DefaultTheme"],src:[this.themesPath+"Default/TF_Default.css"],description:["Default Theme"]},this.Thm.add("DefaultTheme",this.themesPath+"Default/TF_Default.css","Default Theme")),types.isArray(this.themes.name)&&types.isArray(this.themes.src))for(var b=this.themes,c=0;c<b.name.length;c++){var d=b.src[c],e=b.name[c],f=b.initialize&&b.initialize[c]?b.initialize[c]:null,g=b.description&&b.description[c]?b.description[c]:null;this.Thm.add(e,g,d,f),isImported(d,"link")||this.IncludeFile(e,d,null,"link"),types.isFn(f)&&f.call(null,this)}this.btnResetText=null,this.btnResetHtml='<input type="button" value="" class="'+this.btnResetCssClass+'" title="Clear filters" />',this.btnPrevPageHtml='<input type="button" value="" class="'+this.btnPageCssClass+' previousPage" title="Previous page" />',this.btnNextPageHtml='<input type="button" value="" class="'+this.btnPageCssClass+' nextPage" title="Next page" />',this.btnFirstPageHtml='<input type="button" value="" class="'+this.btnPageCssClass+' firstPage" title="First page" />',this.btnLastPageHtml='<input type="button" value="" class="'+this.btnPageCssClass+' lastPage" title="Last page" />',this.loader=!0,this.loaderHtml='<div class="defaultLoader"></div>',this.loaderText=null}},RemoveGrid:function(){if(this.fltGrid&&this.hasGrid){var a=this.tbl.rows;this.paging&&this.RemovePaging(),this.statusBar&&this.RemoveStatusBar(),this.rowsCounter&&this.RemoveRowsCounter(),this.btnReset&&this.RemoveResetBtn(),(this.helpInstructions||!this.helpInstructions)&&this.RemoveHelpInstructions(),this.paging&&this.RemoveResultsPerPage(),this.isExternalFlt&&!this.popUpFilters&&this.RemoveExternalFlts(),this.fixedHeaders&&this.RemoveFixedHeaders(),this.infDiv&&this.RemoveTopDiv(),this.highlightKeywords&&this.UnhighlightAll(),this.sort&&this.RemoveSort(),this.loader&&this.RemoveLoader(),this.popUpFilters&&this.RemovePopupFilters(),this.markActiveColumns&&this.ClearActiveColumns(),(this.editable||this.selectable)&&this.RemoveEditable();for(var b=this.refRow;b<this.nbRows;b++){a[b].style.display="";try{a[b].hasAttribute("validRow")&&a[b].removeAttribute("validRow")}catch(c){for(var d=a[b],e=d.attributes,f=0;f<e.length;f++)"validrow"===str.lower(e.nodeName)&&d.removeAttribute("validRow")}this.alternateBgs&&this.RemoveRowBg(b)}this.fltGrid&&!this.gridLayout&&(this.fltGridEl=a[this.filtersRowIndex],this.tbl.deleteRow(this.filtersRowIndex)),this.gridLayout&&this.RemoveGridLayout(),dom.removeClass(this.tbl,this.prfxTf),this.activeFlt=null,this.isStartBgAlternate=!0,this.hasGrid=!1}},SetTopDiv:function(){if(null===this.infDiv){var a=dom.create("div",["id",this.prfxInfDiv+this.id]);a.className=this.infDivCssClass,this.toolBarTgtId?TF.id(this.toolBarTgtId).appendChild(a):this.fixedHeaders&&this.contDiv?this.contDiv.parentNode.insertBefore(a,this.contDiv):this.gridLayout?(this.tblMainCont.appendChild(a),a.className=this.gridInfDivCssClass):this.tbl.parentNode.insertBefore(a,this.tbl),this.infDiv=TF.id(this.prfxInfDiv+this.id);var b=dom.create("div",["id",this.prfxLDiv+this.id]);b.className=this.lDivCssClass,a.appendChild(b),this.lDiv=TF.id(this.prfxLDiv+this.id);var c=dom.create("div",["id",this.prfxRDiv+this.id]);c.className=this.rDivCssClass,a.appendChild(c),this.rDiv=TF
array.has(l,v,this.matchCase)||l.push(u);var w=p[t];this.refreshFilters&&this.disableExcludedOptions&&(w||(p[t]=this.GetFilteredDataCol(t)),array.has(w,v,this.matchCase)||array.has(o,v,this.matchCase)||this.isFirstLoad||o.push(u))}}if(m){var x=this.__getCustomValues(a);l=x[0],n=x[1]}if(this.sortSlc&&!m&&(this.matchCase?(l.sort(),o&&o.sort()):(l.sort(ignoreCaseSort),o&&o.sort(ignoreCaseSort))),this.sortNumAsc&&array.has(this.sortNumAsc,a))try{l.sort(numSortAsc),o&&o.sort(numSortAsc),m&&n.sort(numSortAsc)}catch(y){l.sort(),o&&o.sort(),m&&n.sort()}if(this.sortNumDesc&&array.has(this.sortNumDesc,a))try{l.sort(numSortDesc),o&&o.sort(numSortDesc),m&&n.sort(numSortDesc)}catch(y){l.sort(),o&&o.sort(),m&&n.sort()}if(e(this.separator),this.fillSlcOnDemand&&(g.innerHTML=""),g.appendChild(h),g.setAttribute("filled","1"),j.rememberGridValues&&tf_isIE){var z=h.getAttribute("indexes");if(z)for(var A=z.split(","),B=0;B<A.length;B++){var C=TF.id(this.fltIds[a]+"_"+A[B]);C&&(C.checked=!0)}}}},__setCheckListValues:function(a){if(a){for(var b=a.value,c=parseInt(a.id.split("_")[2],10),d="ul",e="li",f=a;str.lower(f.nodeName)!==d;)f=f.parentNode;var g=f.childNodes[c],h=f.getAttribute("colIndex"),i=f.getAttribute("value"),j=f.getAttribute("indexes");if(a.checked){if(""===b){if(j&&""!==j)for(var k=j.split(this.separator),l=0;l<k.length;l++){var m=TF.id(this.fltIds[h]+"_"+k[l]);m&&(m.checked=!1,dom.removeClass(f.childNodes[k[l]],this.checkListSlcItemCssClass))}f.setAttribute("value",""),f.setAttribute("indexes","")}else i=i?i:"",b=str.trim(i+" "+b+" "+this.orOperator),c=j+c+this.separator,f.setAttribute("value",b),f.setAttribute("indexes",c),TF.id(this.fltIds[h]+"_0")&&(TF.id(this.fltIds[h]+"_0").checked=!1);str.lower(g.nodeName)===e&&(dom.removeClass(f.childNodes[0],this.checkListSlcItemCssClass),dom.addClass(g,this.checkListSlcItemCssClass))}else{if(""!==b){var n=new RegExp(str.rgxEsc(b+" "+this.orOperator));i=i.replace(n,""),f.setAttribute("value",str.trim(i));var o=new RegExp(str.rgxEsc(c+this.separator));j=j.replace(o,""),f.setAttribute("indexes",j)}str.lower(g.nodeName)===e&&dom.removeClass(g,this.checkListSlcItemCssClass)}}},SetResetBtn:function(){if(this.hasGrid||this.isFirstLoad||!this.btnResetEl){var a=this.fObj;this.btnResetTgtId=a.btn_reset_target_id||null,this.btnResetEl=null,this.btnResetText=a.btn_reset_text||"Reset",this.btnResetTooltip=a.btn_reset_tooltip||"Clear filters",this.btnResetHtml=a.btn_reset_html||(this.enableIcons?'<input type="button" value="" class="'+this.btnResetCssClass+'" title="'+this.btnResetTooltip+'" />':null);var b=dom.create("span",["id",this.prfxResetSpan+this.id]);this.btnResetTgtId||this.SetTopDiv();var c=this.btnResetTgtId?TF.id(this.btnResetTgtId):this.rDiv;if(c.appendChild(b),this.btnResetHtml){b.innerHTML=this.btnResetHtml;var d=b.firstChild;d.onclick=this.Evt._Clear}else{var e=dom.create("a",["href","javascript:void(0);"]);e.className=this.btnResetCssClass,e.appendChild(dom.text(this.btnResetText)),b.appendChild(e),e.onclick=this.Evt._Clear}this.btnResetEl=TF.id(this.prfxResetSpan+this.id).firstChild}},RemoveResetBtn:function(){if(this.hasGrid&&this.btnResetEl){var a=TF.id(this.prfxResetSpan+this.id);a&&a.parentNode.removeChild(a),this.btnResetEl=null}},SetStatusBar:function(){if(this.hasGrid||this.isFirstLoad){var a=this.fObj;this.statusBarTgtId=a.status_bar_target_id||null,this.statusBarDiv=null,this.statusBarSpan=null,this.statusBarSpanText=null,this.statusBarText=a.status_bar_text||"",this.statusBarCssClass=a.status_bar_css_class||"status",this.statusBarCloseDelay=250;var b=dom.create("div",["id",this.prfxStatus+this.id]);b.className=this.statusBarCssClass;var c=dom.create("span",["id",this.prfxStatusSpan+this.id]),d=dom.create("span",["id",this.prfxStatusTxt+this.id]);d.appendChild(dom.text(this.statusBarText)),this.onBeforeShowMsg=types.isFn(a.on_before_show_msg)?a.on_before_show_msg:null,this.onAfterShowMsg=types.isFn(a.on_after_show_msg)?a.on_after_show_msg:null,this.statusBarTgtId||this.SetTopDiv();var e=this.statusBarTgtId?TF.id(this.statusBarTgtId):this.lDiv;this.statusBarDiv&&tf_isIE&&(
""!==p&&array.has(k,p,!0)?(o.checked=!0,this.__setCheckListValues(o)):(o.checked=!1,this.__setCheckListValues(o))}}}},SetColWidths:function(a){function b(a){if((d||d.nbCells==d.colWidth.length)&&d.nbCells==a.cells.length)for(var b=0;b<d.nbCells;b++)a.cells[b].style.width=d.colWidth[b]}if(this.fltGrid&&this.hasColWidth){var c,d=this;c=void 0===a?"none"!=this.tbl.rows[0].style.display?0:1:a,b(this.tbl.rows[c])}},SetVisibleRows:function(){if(this.hasGrid&&this.hasVisibleRows&&!this.paging)for(var a=0;a<this.visibleRows.length;a++)this.visibleRows[a]<=this.nbRows&&this.SetRowValidation(this.visibleRows[a],!0)},ClearFilters:function(){this.EvtManager(this.Evt.name.clear)},_ClearFilters:function(){if(this.fltGrid){this.onBeforeReset&&this.onBeforeReset.call(null,this,this.GetFiltersValue());for(var a=0;a<this.fltIds.length;a++)this.SetFilterValue(a,"");this.refreshFilters&&(this.activeFilterId="",this.RefreshFiltersGrid()),this.rememberPageLen&&cookie.remove(this.pgLenCookie),this.rememberPageNb&&cookie.remove(this.pgNbCookie),this.onAfterReset&&this.onAfterReset.call(null,this)}},ClearActiveColumns:function(){for(var a=0;a<this.fltIds.length;a++)dom.removeClass(this.GetHeaderElement(a),this.activeColumnsCssClass)},RefreshGrid:function(a){var b=a?a:this.fObj,c=this.sort;c&&(this.sort=!1),this.nbRows=this.GetRowsNb(),this.RemoveGrid(),window["tf_"+this.id]=new TF(this.id,this.startRow,b),this.isFirstLoad=!0,this.fltIds=[],this._AddGrid(),c&&(this.st.setTBody(this.tbl.tBodies[0]),this.sort=!0)},RefreshFiltersGrid:function(){var a=this.GetFiltersByType(this.fltTypeSlc,!0),b=this.GetFiltersByType(this.fltTypeMulti,!0),c=this.GetFiltersByType(this.fltTypeCheckList,!0),d=a.concat(b);if(d=d.concat(c),this.activeFilterId){var e=this.activeFilterId.split("_")[0];e=e.split(this.prfxFlt)[1];for(var f,g=0;g<d.length;g++){var h=TF.id(this.fltIds[d[g]]);if(f=this.GetFilterValue(d[g]),e!==d[g]||this.paging&&array.has(a,d[g])&&e===d[g]||!this.paging&&(array.has(c,d[g])||array.has(b,d[g]))||f===this.displayAllText){if(array.has(c,d[g])?this.checkListDiv[d[g]].innerHTML="":h.innerHTML="",this.fillSlcOnDemand){var i=dom.createOpt(this.displayAllText,"");h&&h.appendChild(i)}array.has(c,d[g])?this._PopulateCheckList(d[g]):this._PopulateSelect(d[g],!0),this.SetFilterValue(d[g],f)}}}},SetColOperation:function(){if(this.isFirstLoad||this.hasGrid){this.onBeforeOperation&&this.onBeforeOperation.call(null,this);var colOperation=this.colOperation,labelId=colOperation.id,colIndex=colOperation.col,operation=colOperation.operation,outputType=colOperation.write_method,totRowIndex=colOperation.tot_row_index,excludeRow=colOperation.exclude_row,decimalPrecision=void 0!==colOperation.decimal_precision?colOperation.decimal_precision:2,ucolIndex=[],ucolMax=0;ucolIndex[ucolMax]=colIndex[0];for(var ii=1;ii<colIndex.length;ii++){for(var saved=0,jj=0;ucolMax>=jj;jj++)ucolIndex[jj]===colIndex[ii]&&(saved=1);0===saved&&(ucolMax++,ucolIndex[ucolMax]=colIndex[ii])}if("object"==str.lower(typeof labelId)&&"object"==str.lower(typeof colIndex)&&"object"==str.lower(typeof operation))for(var row=this.tbl.rows,colvalues=[],ucol=0;ucolMax>=ucol;ucol++){colvalues.push(this.GetColValues(ucolIndex[ucol],!0,excludeRow));for(var result,nbvalues=0,temp,meanValue=0,sumValue=0,minValue=null,maxValue=null,q1Value=null,medValue=null,q3Value=null,meanFlag=0,sumFlag=0,minFlag=0,maxFlag=0,q1Flag=0,medFlag=0,q3Flag=0,theList=[],opsThisCol=[],decThisCol=[],labThisCol=[],oTypeThisCol=[],mThisCol=-1,k=0;k<colIndex.length;k++)if(colIndex[k]===ucolIndex[ucol])switch(mThisCol++,opsThisCol[mThisCol]=str.lower(operation[k]),decThisCol[mThisCol]=decimalPrecision[k],labThisCol[mThisCol]=labelId[k],oTypeThisCol=void 0!==outputType&&"object"===str.lower(typeof outputType)?outputType[k]:null,opsThisCol[mThisCol]){case"mean":meanFlag=1;break;case"sum":sumFlag=1;break;case"min":minFlag=1;break;case"max":maxFlag=1;break;case"median":medFlag=1;break;case"q1":q1Flag=1;break;case"q3":q3Flag=1}for(var j=0;j<colvalues[ucol].length;j++){if((1==q1Flag||1==q3Flag||1==medFlag)&&j<colvalues[ucol].length-1)for(k=j+1;k<