2015-03-07 12:14:25 +01:00
( function ( root , factory ) {
if ( typeof define === 'function' && define . amd ) {
define ( factory ) ;
} else if ( typeof exports === 'object' ) {
module . exports = factory ;
} else {
root . TableFilter = factory ( ) ;
}
} ) ( this , function ( ) { / * *
* @ license almond 0.3 . 0 Copyright ( c ) 2011 - 2014 , The Dojo Foundation All Rights Reserved .
* Available via the MIT or new BSD license .
* see : http : //github.com/jrburke/almond for details
* /
//Going sloppy to avoid 'use strict' string cost, but strict practices should
//be followed.
/*jslint sloppy: true */
/*global setTimeout: false */
var requirejs , require , define ;
( function ( undef ) {
var main , req , makeMap , handlers ,
defined = { } ,
waiting = { } ,
config = { } ,
defining = { } ,
hasOwn = Object . prototype . hasOwnProperty ,
aps = [ ] . slice ,
jsSuffixRegExp = /\.js$/ ;
function hasProp ( obj , prop ) {
return hasOwn . call ( obj , prop ) ;
}
/ * *
* Given a relative module name , like . / something , normalize it to
* a real name that can be mapped to a path .
* @ param { String } name the relative name
* @ param { String } baseName a real name that the name arg is relative
* to .
* @ returns { String } normalized name
* /
function normalize ( name , baseName ) {
var nameParts , nameSegment , mapValue , foundMap , lastIndex ,
foundI , foundStarMap , starI , i , j , part ,
baseParts = baseName && baseName . split ( "/" ) ,
map = config . map ,
starMap = ( map && map [ '*' ] ) || { } ;
//Adjust any relative paths.
if ( name && name . charAt ( 0 ) === "." ) {
//If have a base name, try to normalize against it,
//otherwise, assume it is a top-level require that will
//be relative to baseUrl in the end.
if ( baseName ) {
//Convert baseName to array, and lop off the last part,
//so that . matches that "directory" and not name of the baseName's
//module. For instance, baseName of "one/two/three", maps to
//"one/two/three.js", but we want the directory, "one/two" for
//this normalization.
baseParts = baseParts . slice ( 0 , baseParts . length - 1 ) ;
name = name . split ( '/' ) ;
lastIndex = name . length - 1 ;
// Node .js allowance:
if ( config . nodeIdCompat && jsSuffixRegExp . test ( name [ lastIndex ] ) ) {
name [ lastIndex ] = name [ lastIndex ] . replace ( jsSuffixRegExp , '' ) ;
}
name = baseParts . concat ( name ) ;
//start trimDots
for ( i = 0 ; i < name . length ; i += 1 ) {
part = name [ i ] ;
if ( part === "." ) {
name . splice ( i , 1 ) ;
i -= 1 ;
} else if ( part === ".." ) {
if ( i === 1 && ( name [ 2 ] === '..' || name [ 0 ] === '..' ) ) {
//End of the line. Keep at least one non-dot
//path segment at the front so it can be mapped
//correctly to disk. Otherwise, there is likely
//no path mapping for a path starting with '..'.
//This can still fail, but catches the most reasonable
//uses of ..
break ;
} else if ( i > 0 ) {
name . splice ( i - 1 , 2 ) ;
i -= 2 ;
}
}
}
//end trimDots
name = name . join ( "/" ) ;
} else if ( name . indexOf ( './' ) === 0 ) {
// No baseName, so this is ID is resolved relative
// to baseUrl, pull off the leading dot.
name = name . substring ( 2 ) ;
}
}
//Apply map config if available.
if ( ( baseParts || starMap ) && map ) {
nameParts = name . split ( '/' ) ;
for ( i = nameParts . length ; i > 0 ; i -= 1 ) {
nameSegment = nameParts . slice ( 0 , i ) . join ( "/" ) ;
if ( baseParts ) {
//Find the longest baseName segment match in the config.
//So, do joins on the biggest to smallest lengths of baseParts.
for ( j = baseParts . length ; j > 0 ; j -= 1 ) {
mapValue = map [ baseParts . slice ( 0 , j ) . join ( '/' ) ] ;
//baseName segment has config, find if it has one for
//this name.
if ( mapValue ) {
mapValue = mapValue [ nameSegment ] ;
if ( mapValue ) {
//Match, update name to the new value.
foundMap = mapValue ;
foundI = i ;
break ;
}
}
}
}
if ( foundMap ) {
break ;
}
//Check for a star map match, but just hold on to it,
//if there is a shorter segment match later in a matching
//config, then favor over this star map.
if ( ! foundStarMap && starMap && starMap [ nameSegment ] ) {
foundStarMap = starMap [ nameSegment ] ;
starI = i ;
}
}
if ( ! foundMap && foundStarMap ) {
foundMap = foundStarMap ;
foundI = starI ;
}
if ( foundMap ) {
nameParts . splice ( 0 , foundI , foundMap ) ;
name = nameParts . join ( '/' ) ;
}
}
return name ;
}
function makeRequire ( relName , forceSync ) {
return function ( ) {
//A version of a require function that passes a moduleName
//value for items that may need to
//look up paths relative to the moduleName
var args = aps . call ( arguments , 0 ) ;
//If first arg is not require('string'), and there is only
//one arg, it is the array form without a callback. Insert
//a null so that the following concat is correct.
if ( typeof args [ 0 ] !== 'string' && args . length === 1 ) {
args . push ( null ) ;
}
return req . apply ( undef , args . concat ( [ relName , forceSync ] ) ) ;
} ;
}
function makeNormalize ( relName ) {
return function ( name ) {
return normalize ( name , relName ) ;
} ;
}
function makeLoad ( depName ) {
return function ( value ) {
defined [ depName ] = value ;
} ;
}
function callDep ( name ) {
if ( hasProp ( waiting , name ) ) {
var args = waiting [ name ] ;
delete waiting [ name ] ;
defining [ name ] = true ;
main . apply ( undef , args ) ;
}
if ( ! hasProp ( defined , name ) && ! hasProp ( defining , name ) ) {
throw new Error ( 'No ' + name ) ;
}
return defined [ name ] ;
}
//Turns a plugin!resource to [plugin, resource]
//with the plugin being undefined if the name
//did not have a plugin prefix.
function splitPrefix ( name ) {
var prefix ,
index = name ? name . indexOf ( '!' ) : - 1 ;
if ( index > - 1 ) {
prefix = name . substring ( 0 , index ) ;
name = name . substring ( index + 1 , name . length ) ;
}
return [ prefix , name ] ;
}
/ * *
* Makes a name map , normalizing the name , and using a plugin
* for normalization if necessary . Grabs a ref to plugin
* too , as an optimization .
* /
makeMap = function ( name , relName ) {
var plugin ,
parts = splitPrefix ( name ) ,
prefix = parts [ 0 ] ;
name = parts [ 1 ] ;
if ( prefix ) {
prefix = normalize ( prefix , relName ) ;
plugin = callDep ( prefix ) ;
}
//Normalize according
if ( prefix ) {
if ( plugin && plugin . normalize ) {
name = plugin . normalize ( name , makeNormalize ( relName ) ) ;
} else {
name = normalize ( name , relName ) ;
}
} else {
name = normalize ( name , relName ) ;
parts = splitPrefix ( name ) ;
prefix = parts [ 0 ] ;
name = parts [ 1 ] ;
if ( prefix ) {
plugin = callDep ( prefix ) ;
}
}
//Using ridiculous property names for space reasons
return {
f : prefix ? prefix + '!' + name : name , //fullName
n : name ,
pr : prefix ,
p : plugin
} ;
} ;
function makeConfig ( name ) {
return function ( ) {
return ( config && config . config && config . config [ name ] ) || { } ;
} ;
}
handlers = {
require : function ( name ) {
return makeRequire ( name ) ;
} ,
exports : function ( name ) {
var e = defined [ name ] ;
if ( typeof e !== 'undefined' ) {
return e ;
} else {
return ( defined [ name ] = { } ) ;
}
} ,
module : function ( name ) {
return {
id : name ,
uri : '' ,
exports : defined [ name ] ,
config : makeConfig ( name )
} ;
}
} ;
main = function ( name , deps , callback , relName ) {
var cjsModule , depName , ret , map , i ,
args = [ ] ,
callbackType = typeof callback ,
usingExports ;
//Use name if no relName
relName = relName || name ;
//Call the callback to define the module, if necessary.
if ( callbackType === 'undefined' || callbackType === 'function' ) {
//Pull out the defined dependencies and pass the ordered
//values to the callback.
//Default to [require, exports, module] if no deps
deps = ! deps . length && callback . length ? [ 'require' , 'exports' , 'module' ] : deps ;
for ( i = 0 ; i < deps . length ; i += 1 ) {
map = makeMap ( deps [ i ] , relName ) ;
depName = map . f ;
//Fast path CommonJS standard dependencies.
if ( depName === "require" ) {
args [ i ] = handlers . require ( name ) ;
} else if ( depName === "exports" ) {
//CommonJS module spec 1.1
args [ i ] = handlers . exports ( name ) ;
usingExports = true ;
} else if ( depName === "module" ) {
//CommonJS module spec 1.1
cjsModule = args [ i ] = handlers . module ( name ) ;
} else if ( hasProp ( defined , depName ) ||
hasProp ( waiting , depName ) ||
hasProp ( defining , depName ) ) {
args [ i ] = callDep ( depName ) ;
} else if ( map . p ) {
map . p . load ( map . n , makeRequire ( relName , true ) , makeLoad ( depName ) , { } ) ;
args [ i ] = defined [ depName ] ;
} else {
throw new Error ( name + ' missing ' + depName ) ;
}
}
ret = callback ? callback . apply ( defined [ name ] , args ) : undefined ;
if ( name ) {
//If setting exports via "module" is in play,
//favor that over return value and exports. After that,
//favor a non-undefined return value over exports use.
if ( cjsModule && cjsModule . exports !== undef &&
cjsModule . exports !== defined [ name ] ) {
defined [ name ] = cjsModule . exports ;
} else if ( ret !== undef || ! usingExports ) {
//Use the return value from the function.
defined [ name ] = ret ;
}
}
} else if ( name ) {
//May just be an object definition for the module. Only
//worry about defining if have a module name.
defined [ name ] = callback ;
}
} ;
requirejs = require = req = function ( deps , callback , relName , forceSync , alt ) {
if ( typeof deps === "string" ) {
if ( handlers [ deps ] ) {
//callback in this case is really relName
return handlers [ deps ] ( callback ) ;
}
//Just return the module wanted. In this scenario, the
//deps arg is the module name, and second arg (if passed)
//is just the relName.
//Normalize module name, if it contains . or ..
return callDep ( makeMap ( deps , callback ) . f ) ;
} else if ( ! deps . splice ) {
//deps is a config object, not an array.
config = deps ;
if ( config . deps ) {
req ( config . deps , config . callback ) ;
}
if ( ! callback ) {
return ;
}
if ( callback . splice ) {
//callback is an array, which means it is a dependency list.
//Adjust args if there are dependencies
deps = callback ;
callback = relName ;
relName = null ;
} else {
deps = undef ;
}
}
//Support require(['a'])
callback = callback || function ( ) { } ;
//If relName is a function, it is an errback handler,
//so remove it.
if ( typeof relName === 'function' ) {
relName = forceSync ;
forceSync = alt ;
}
//Simulate async callback;
if ( forceSync ) {
main ( undef , deps , callback , relName ) ;
} else {
//Using a non-zero value because of concern for what old browsers
//do, and latest browsers "upgrade" to 4 if lower value is used:
//http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout:
//If want a value immediately, use require('id') instead -- something
//that works in almond on the global level, but not guaranteed and
//unlikely to work in other AMD implementations.
setTimeout ( function ( ) {
main ( undef , deps , callback , relName ) ;
} , 4 ) ;
}
return req ;
} ;
/ * *
* Just drops the config on the floor , but returns req in case
* the config return value is used .
* /
req . config = function ( cfg ) {
return req ( cfg ) ;
} ;
/ * *
* Expose module registry for debugging and tooling
* /
requirejs . _defined = defined ;
define = function ( name , deps , callback ) {
//This module may not have dependencies
if ( ! deps . splice ) {
//deps is not an array, so probably means
//an object literal or factory function for
//the value. Adjust args.
callback = deps ;
deps = [ ] ;
}
if ( ! hasProp ( defined , name ) && ! hasProp ( waiting , name ) ) {
waiting [ name ] = [ name , deps , callback ] ;
}
} ;
define . amd = {
jQuery : true
} ;
} ( ) ) ;
define ( "../libs/almond/almond" , function ( ) { } ) ;
define ( 'event' , [ "exports" ] , function ( exports ) {
/ * *
* DOM event utilities
* /
var Event = {
add : function add ( obj , type , func , capture ) {
if ( obj . addEventListener ) {
obj . addEventListener ( type , func , capture ) ;
} else if ( obj . attachEvent ) {
obj . attachEvent ( "on" + type , func ) ;
} else {
obj [ "on" + type ] = func ;
}
} ,
remove : function remove ( obj , type , func , capture ) {
if ( obj . detachEvent ) {
obj . detachEvent ( "on" + type , func ) ;
} else if ( obj . removeEventListener ) {
obj . removeEventListener ( type , func , capture ) ;
} else {
obj [ "on" + type ] = null ;
}
} ,
stop : function stop ( evt ) {
if ( ! evt ) {
evt = window . event ;
}
if ( evt . stopPropagation ) {
evt . stopPropagation ( ) ;
} else {
evt . cancelBubble = true ;
}
} ,
cancel : function cancel ( evt ) {
if ( ! evt ) {
evt = window . event ;
}
if ( evt . preventDefault ) {
evt . preventDefault ( ) ;
} else {
evt . returnValue = false ;
}
}
} ;
exports . Event = Event ;
} ) ;
//# sourceMappingURL=event.js.map;
define ( 'dom' , [ "exports" ] , function ( exports ) {
/ * *
* DOM utilities
* /
var Dom = { } ;
/ * *
* Returns text + text of children of given node
* @ param { NodeElement } node
* @ return { String }
* /
Dom . getText = function ( node ) {
var s = node . textContent || node . innerText || node . innerHTML . replace ( /<[^<>]+>/g , "" ) ;
s = s . replace ( /^\s+/ , "" ) . replace ( /\s+$/ , "" ) ;
return s ;
} ;
/ * *
* Creates an html element with given collection of attributes
* @ param { String } tag a string of the html tag to create
* @ param { Array } an undetermined number of arrays containing the with 2
* items , the attribute name and its value [ 'id' , 'myId' ]
* @ return { Object } created element
* /
Dom . create = function ( tag ) {
if ( ! tag || tag === "" ) {
return ;
}
var el = document . createElement ( tag ) ,
args = arguments ;
if ( args . length > 1 ) {
for ( var i = 0 ; i < args . length ; i ++ ) {
var argtype = typeof args [ i ] ;
if ( argtype . toLowerCase ( ) === "object" && args [ i ] . length === 2 ) {
el . setAttribute ( args [ i ] [ 0 ] , args [ i ] [ 1 ] ) ;
}
}
}
return el ;
} ;
/ * *
* Returns a text node with given text
* @ param { String } text
* @ return { Object }
* /
Dom . text = function ( text ) {
return document . createTextNode ( text ) ;
} ;
/ * *
* Returns offset position of passed element
* @ param { object } obj [ description ]
* @ return { object } literal object with left and top values
* /
Dom . position = function ( obj ) {
var l = 0 ,
t = 0 ;
if ( obj && obj . offsetParent ) {
do {
l += obj . offsetLeft ;
t += obj . offsetTop ;
} while ( obj == obj . offsetParent ) ;
}
return { left : l , top : t } ;
} ;
Dom . hasClass = function ( ele , cls ) {
if ( ! ele ) {
return false ;
}
if ( supportsClassList ( ) ) {
return ele . classList . contains ( cls ) ;
}
return ele . className . match ( new RegExp ( "(\\s|^)" + cls + "(\\s|$)" ) ) ;
} ;
Dom . addClass = function ( ele , cls ) {
if ( ! ele ) {
return ;
}
if ( supportsClassList ( ) ) {
ele . classList . add ( cls ) ;
return ;
}
if ( ele . className === "" ) {
ele . className = cls ;
} else if ( ! this . hasClass ( ele , cls ) ) {
ele . className += " " + cls ;
}
} ;
Dom . removeClass = function ( ele , cls ) {
if ( ! ele ) {
return ;
}
if ( supportsClassList ( ) ) {
ele . classList . remove ( cls ) ;
return ;
}
var reg = new RegExp ( "(\\s|^)" + cls + "(\\s|$)" , "g" ) ;
ele . className = ele . className . replace ( reg , "" ) ;
} ;
/ * *
* Creates and returns an option element
* @ param { String } text option text
* @ param { String } value option value
* @ param { Boolean } isSel whether option is selected
* @ return { Object } option element
* /
Dom . createOpt = function ( text , value , isSel ) {
var isSelected = isSel ? true : false ,
opt = isSelected ? this . create ( "option" , [ "value" , value ] , [ "selected" , "true" ] ) : this . create ( "option" , [ "value" , value ] ) ;
opt . appendChild ( this . text ( text ) ) ;
return opt ;
} ;
/ * *
* Creates and returns a checklist item
* @ param { Number } chkIndex index of check item
* @ param { String } chkValue check item value
* @ param { String } labelText check item label text
* @ return { Object } li DOM element
* /
Dom . createCheckItem = function ( chkIndex , chkValue , labelText ) {
var li = this . create ( "li" ) ,
label = this . create ( "label" , [ "for" , chkIndex ] ) ,
check = this . create ( "input" , [ "id" , chkIndex ] , [ "name" , chkIndex ] , [ "type" , "checkbox" ] , [ "value" , chkValue ] ) ;
label . appendChild ( check ) ;
label . appendChild ( this . text ( labelText ) ) ;
li . appendChild ( label ) ;
li . label = label ;
li . check = check ;
return li ;
} ;
Dom . id = function ( id ) {
return document . getElementById ( id ) ;
} ;
Dom . tag = function ( o , tagname ) {
return o . getElementsByTagName ( tagname ) ;
} ;
// HTML5 classList API
function supportsClassList ( ) {
return document . documentElement . classList ;
}
exports . Dom = Dom ;
} ) ;
//# sourceMappingURL=dom.js.map;
define ( 'string' , [ "exports" ] , function ( exports ) {
/ * *
* String utilities
* /
var Str = { } ;
Str . lower = function ( text ) {
return text . toLowerCase ( ) ;
} ;
Str . upper = function ( text ) {
return text . toUpperCase ( ) ;
} ;
Str . trim = function ( text ) {
if ( text . trim ) {
return text . trim ( ) ;
}
return text . replace ( /^\s*|\s*$/g , "" ) ;
} ;
Str . isEmpty = function ( text ) {
return this . trim ( text ) === "" ;
} ;
Str . rgxEsc = function ( text ) {
function escape ( e ) {
var a = new RegExp ( "\\" + e , "g" ) ;
text = text . replace ( a , "\\" + e ) ;
}
var chars = [ "\\" , "[" , "^" , "$" , "." , "|" , "?" , "*" , "+" , "(" , ")" ] ;
for ( var e = 0 ; e < chars . length ; e ++ ) {
escape ( chars [ e ] ) ;
}
return text ;
} ;
Str . matchCase = function ( text , mc ) {
if ( ! mc ) {
return this . lower ( text ) ;
}
return text ;
} ;
exports . Str = Str ;
} ) ;
//# sourceMappingURL=string.js.map;
define ( 'cookie' , [ "exports" ] , function ( exports ) {
/ * *
* Cookie utilities
* /
var Cookie = { } ;
Cookie . write = function ( name , value , hours ) {
var expire = "" ;
if ( hours ) {
expire = new Date ( new Date ( ) . getTime ( ) + hours * 3600000 ) ;
expire = "; expires=" + expire . toGMTString ( ) ;
}
document . cookie = name + "=" + escape ( value ) + expire ;
} ;
Cookie . read = function ( name ) {
var cookieValue = "" ,
search = name + "=" ;
if ( document . cookie . length > 0 ) {
var cookie = document . cookie ,
offset = cookie . indexOf ( search ) ;
if ( offset !== - 1 ) {
offset += search . length ;
var end = cookie . indexOf ( ";" , offset ) ;
if ( end === - 1 ) {
end = cookie . length ;
}
cookieValue = unescape ( cookie . substring ( offset , end ) ) ;
}
}
return cookieValue ;
} ;
Cookie . remove = function ( name ) {
this . write ( name , "" , - 1 ) ;
} ;
Cookie . valueToArray = function ( name , separator ) {
if ( ! separator ) {
separator = "," ;
}
//reads the cookie
var val = this . read ( name ) ;
//creates an array with filters' values
var arr = val . split ( separator ) ;
return arr ;
} ;
Cookie . getValueByIndex = function ( name , index , separator ) {
if ( ! separator ) {
separator = "," ;
}
//reads the cookie
var val = this . valueToArray ( name , separator ) ;
return val [ index ] ;
} ;
exports . Cookie = Cookie ;
} ) ;
//# sourceMappingURL=cookie.js.map;
define ( 'types' , [ "exports" ] , function ( exports ) {
/ * *
* Types utilities
* /
var Types = { } ;
var UNDEFINED = void 0 ;
/ * *
* Checks if var exists and is an object
* @ param { String or Object } v
* @ return { Boolean }
* /
Types . isObj = function ( v ) {
var isO = false ;
if ( typeof v === "string" ) {
if ( window [ v ] && typeof window [ v ] === "object" ) {
isO = true ;
}
} else {
if ( v && typeof v === "object" ) {
isO = true ;
}
}
return isO ;
} ;
/ * *
* Checks if passed parameter is a function
* @ param { Function } fn
* @ return { Boolean }
* /
Types . isFn = function ( fn ) {
return fn && fn . constructor == Function ;
} ;
/ * *
* Checks if passed param is an array
* @ param { Array } obj
* @ return { Boolean }
* /
Types . isArray = function ( obj ) {
return obj && obj . constructor == Array ;
} ;
/ * *
* Determines if passed param is undefined
* @ param { Any } o
* @ return { Boolean }
* /
Types . isUndef = function ( o ) {
return o === UNDEFINED ;
} ;
exports . Types = Types ;
} ) ;
//# sourceMappingURL=types.js.map;
define ( 'array' , [ "exports" , "string" ] , function ( exports , _string ) {
/ * *
* Array utilities
* /
var Str = _string . Str ;
var Arr = {
has : function has ( arr , val , caseSensitive ) {
var sCase = caseSensitive === undefined ? false : caseSensitive ;
for ( var i = 0 ; i < arr . length ; i ++ ) {
if ( Str . matchCase ( arr [ i ] . toString ( ) , sCase ) == val ) {
return true ;
}
}
return false ;
} ,
indexByValue : function indexByValue ( arr , val , caseSensitive ) {
var sCase = caseSensitive === undefined ? false : caseSensitive ;
for ( var i = 0 ; i < arr . length ; i ++ ) {
if ( Str . matchCase ( arr [ i ] . toString ( ) , sCase ) == val ) {
return i ;
}
}
return - 1 ;
}
} ;
exports . Arr = Arr ;
} ) ;
//# sourceMappingURL=array.js.map;
define ( 'helpers' , [ "exports" ] , function ( exports ) {
/ * *
* Misc helpers
* /
var Helpers = {
isIE : function isIE ( ) {
return /msie|MSIE/ . test ( navigator . userAgent ) ;
} ,
removeNbFormat : function removeNbFormat ( data , format ) {
if ( ! data ) {
return ;
}
if ( ! format ) {
format = "us" ;
}
var n = data ;
if ( str . lower ( format ) === "us" ) {
n = + n . replace ( /[^\d\.-]/g , "" ) ;
} else {
n = + n . replace ( /[^\d\,-]/g , "" ) . replace ( "," , "." ) ;
}
return n ;
}
} ;
exports . Helpers = Helpers ;
} ) ;
//# sourceMappingURL=helpers.js.map;
define ( 'date' , [ "exports" ] , function ( exports ) {
/ * *
* Date utilities
* /
var DateHelper = {
isValid : function isValid ( dateStr , format ) {
if ( ! format ) {
format = "DMY" ;
}
format = format . toUpperCase ( ) ;
if ( format . length != 3 ) {
if ( format === "DDMMMYYYY" ) {
var d = this . format ( dateStr , format ) ;
dateStr = d . getDate ( ) + "/" + ( d . getMonth ( ) + 1 ) + "/" + d . getFullYear ( ) ;
format = "DMY" ;
}
}
if ( format . indexOf ( "M" ) === - 1 || format . indexOf ( "D" ) === - 1 || format . indexOf ( "Y" ) === - 1 ) {
format = "DMY" ;
}
var reg1 , reg2 ;
// If the year is first
if ( format . substring ( 0 , 1 ) == "Y" ) {
reg1 = /^\d{2}(\-|\/|\.)\d{1,2}\1\d{1,2}$/ ;
reg2 = /^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$/ ;
} else if ( format . substring ( 1 , 2 ) == "Y" ) {
// If the year is second
reg1 = /^\d{1,2}(\-|\/|\.)\d{2}\1\d{1,2}$/ ;
reg2 = /^\d{1,2}(\-|\/|\.)\d{4}\1\d{1,2}$/ ;
} else {
// The year must be third
reg1 = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{2}$/ ;
reg2 = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/ ;
}
// If it doesn't conform to the right format (with either a 2 digit year or
// 4 digit year), fail
if ( reg1 . test ( dateStr ) === false && reg2 . test ( dateStr ) === false ) {
return false ;
}
// Split into 3 parts based on what the divider was
var parts = dateStr . split ( RegExp . $1 ) ;
var mm , dd , yy ;
// Check to see if the 3 parts end up making a valid date
if ( format . substring ( 0 , 1 ) === "M" ) {
mm = parts [ 0 ] ;
} else if ( format . substring ( 1 , 2 ) === "M" ) {
mm = parts [ 1 ] ;
} else {
mm = parts [ 2 ] ;
}
if ( format . substring ( 0 , 1 ) === "D" ) {
dd = parts [ 0 ] ;
} else if ( format . substring ( 1 , 2 ) === "D" ) {
dd = parts [ 1 ] ;
} else {
dd = parts [ 2 ] ;
}
if ( format . substring ( 0 , 1 ) === "Y" ) {
yy = parts [ 0 ] ;
} else if ( format . substring ( 1 , 2 ) === "Y" ) {
yy = parts [ 1 ] ;
} else {
yy = parts [ 2 ] ;
}
if ( parseInt ( yy , 10 ) <= 50 ) {
yy = ( parseInt ( yy , 10 ) + 2000 ) . toString ( ) ;
}
if ( parseInt ( yy , 10 ) <= 99 ) {
yy = ( parseInt ( yy , 10 ) + 1900 ) . toString ( ) ;
}
var dt = new Date ( parseInt ( yy , 10 ) , parseInt ( mm , 10 ) - 1 , parseInt ( dd , 10 ) , 0 , 0 , 0 , 0 ) ;
if ( parseInt ( dd , 10 ) != dt . getDate ( ) ) {
return false ;
}
if ( parseInt ( mm , 10 ) - 1 != dt . getMonth ( ) ) {
return false ;
}
return true ;
} ,
format : ( function ( _format ) {
var _formatWrapper = function format ( _x , _x2 ) {
return _format . apply ( this , arguments ) ;
} ;
_formatWrapper . toString = function ( ) {
return _format . toString ( ) ;
} ;
return _formatWrapper ;
} ) ( function ( dateStr , format ) {
if ( ! format ) {
format = "DMY" ;
}
if ( ! dateStr || dateStr === "" ) {
return new Date ( 1001 , 0 , 1 ) ;
}
var oDate , parts ;
function y2kDate ( yr ) {
if ( yr === undefined ) {
return 0 ;
}
if ( yr . length > 2 ) {
return yr ;
}
var y ;
//>50 belong to 1900
if ( yr <= 99 && yr > 50 ) {
y = "19" + yr ;
}
//<50 belong to 2000
if ( yr < 50 || yr === "00" ) {
y = "20" + yr ;
}
return y ;
}
function mmm2mm ( mmm ) {
if ( mmm === undefined ) {
return 0 ;
}
var mondigit ;
var MONTH _NAMES = [ "january" , "february" , "march" , "april" , "may" , "june" , "july" , "august" , "september" , "october" , "november" , "december" , "jan" , "feb" , "mar" , "apr" , "may" , "jun" , "jul" , "aug" , "sep" , "oct" , "nov" , "dec" ] ;
for ( var m _i = 0 ; m _i < MONTH _NAMES . length ; m _i ++ ) {
var month _name = MONTH _NAMES [ m _i ] ;
if ( mmm . toLowerCase ( ) === month _name ) {
mondigit = m _i + 1 ;
break ;
}
}
if ( mondigit > 11 || mondigit < 23 ) {
mondigit = mondigit - 12 ;
}
if ( mondigit < 1 || mondigit > 12 ) {
return 0 ;
}
return mondigit ;
}
switch ( format . toUpperCase ( ) ) {
case "DDMMMYYYY" :
parts = dateStr . replace ( /[- \/.]/g , " " ) . split ( " " ) ;
oDate = new Date ( y2kDate ( parts [ 2 ] ) , mmm2mm ( parts [ 1 ] ) - 1 , parts [ 0 ] ) ;
break ;
case "DMY" :
parts = dateStr . replace ( /^(0?[1-9]|[12][0-9]|3[01])([- \/.])(0?[1-9]|1[012])([- \/.])((\d\d)?\d\d)$/ , "$1 $3 $5" ) . split ( " " ) ;
oDate = new Date ( y2kDate ( parts [ 2 ] ) , parts [ 1 ] - 1 , parts [ 0 ] ) ;
break ;
case "MDY" :
parts = dateStr . replace ( /^(0?[1-9]|1[012])([- \/.])(0?[1-9]|[12][0-9]|3[01])([- \/.])((\d\d)?\d\d)$/ , "$1 $3 $5" ) . split ( " " ) ;
oDate = new Date ( y2kDate ( parts [ 2 ] ) , parts [ 0 ] - 1 , parts [ 1 ] ) ;
break ;
case "YMD" :
parts = dateStr . replace ( /^((\d\d)?\d\d)([- \/.])(0?[1-9]|1[012])([- \/.])(0?[1-9]|[12][0-9]|3[01])$/ , "$1 $4 $6" ) . split ( " " ) ;
oDate = new Date ( y2kDate ( parts [ 0 ] ) , parts [ 1 ] - 1 , parts [ 2 ] ) ;
break ;
default :
//in case format is not correct
parts = dateStr . replace ( /^(0?[1-9]|[12][0-9]|3[01])([- \/.])(0?[1-9]|1[012])([- \/.])((\d\d)?\d\d)$/ , "$1 $3 $5" ) . split ( " " ) ;
oDate = new Date ( y2kDate ( parts [ 2 ] ) , parts [ 1 ] - 1 , parts [ 0 ] ) ;
break ;
}
return oDate ;
} )
} ;
exports . DateHelper = DateHelper ;
} ) ;
//# sourceMappingURL=date.js.map;
define ( 'sort' , [ "exports" , "string" ] , function ( exports , _string ) {
/ * *
* Sort helpers
* /
var Str = _string . Str ;
var Sort = {
ignoreCase : function ignoreCase ( a , b ) {
var x = Str . lower ( a ) ;
var y = Str . lower ( b ) ;
return x < y ? - 1 : x > y ? 1 : 0 ;
}
} ;
exports . Sort = Sort ;
} ) ;
//# sourceMappingURL=sort.js.map;
define ( 'modules/store' , [ "exports" , "../cookie" ] , function ( exports , _cookie ) {
var _prototypeProperties = function ( child , staticProps , instanceProps ) { if ( staticProps ) Object . defineProperties ( child , staticProps ) ; if ( instanceProps ) Object . defineProperties ( child . prototype , instanceProps ) ; } ;
var _classCallCheck = function ( instance , Constructor ) { if ( ! ( instance instanceof Constructor ) ) { throw new TypeError ( "Cannot call a class as a function" ) ; } } ;
var Cookie = _cookie . Cookie ;
var Store = exports . Store = ( function ( ) {
/ * *
* Store , persistence manager
* @ param { Object } tf TableFilter instance
* /
function Store ( tf ) {
_classCallCheck ( this , Store ) ;
var f = tf . config ( ) ;
this . duration = ! isNaN ( f . set _cookie _duration ) ? parseInt ( f . set _cookie _duration , 10 ) : 100000 ;
this . tf = tf ;
}
_prototypeProperties ( Store , null , {
saveFilterValues : {
/ * *
* Store filters ' values in cookie
* @ param { String } cookie name
* /
value : function saveFilterValues ( name ) {
var tf = this . tf ;
var fltValues = [ ] ;
//store filters' values
for ( var i = 0 ; i < tf . fltIds . length ; i ++ ) {
var value = tf . getFilterValue ( i ) ;
if ( value === "" ) {
value = " " ;
}
fltValues . push ( value ) ;
}
//adds array size
fltValues . push ( tf . fltIds . length ) ;
//writes cookie
Cookie . write ( name , fltValues . join ( tf . separator ) , this . duration ) ;
} ,
writable : true ,
configurable : true
} ,
getFilterValues : {
/ * *
* Retrieve filters ' values from cookie
* @ param { String } cookie name
* @ return { Array }
* /
value : function getFilterValues ( name ) {
var flts = Cookie . read ( name ) ;
var rgx = new RegExp ( this . tf . separator , "g" ) ;
// filters' values array
return flts . split ( rgx ) ;
} ,
writable : true ,
configurable : true
} ,
savePageNb : {
/ * *
* Store page number in cookie
* @ param { String } cookie name
* /
value : function savePageNb ( name ) {
Cookie . write ( name , this . tf . Cpt . paging . currentPageNb , this . duration ) ;
} ,
writable : true ,
configurable : true
} ,
getPageNb : {
/ * *
* Retrieve page number from cookie
* @ param { String } cookie name
* @ return { String }
* /
value : function getPageNb ( name ) {
return Cookie . read ( name ) ;
} ,
writable : true ,
configurable : true
} ,
savePageLength : {
/ * *
* Store page length in cookie
* @ param { String } cookie name
* /
value : function savePageLength ( name ) {
Cookie . write ( name , this . tf . Cpt . paging . resultsPerPageSlc . selectedIndex , this . duration ) ;
} ,
writable : true ,
configurable : true
} ,
getPageLength : {
/ * *
* Retrieve page length from cookie
* @ param { String } cookie name
* @ return { String }
* /
value : function getPageLength ( name ) {
return Cookie . read ( name ) ;
} ,
writable : true ,
configurable : true
}
} ) ;
return Store ;
} ) ( ) ;
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
} ) ;
//# sourceMappingURL=store.js.map;
define ( 'modules/gridLayout' , [ "exports" , "../dom" , "../types" , "../helpers" , "../event" ] , function ( exports , _dom , _types , _helpers , _event ) {
var _prototypeProperties = function ( child , staticProps , instanceProps ) { if ( staticProps ) Object . defineProperties ( child , staticProps ) ; if ( instanceProps ) Object . defineProperties ( child . prototype , instanceProps ) ; } ;
var _classCallCheck = function ( instance , Constructor ) { if ( ! ( instance instanceof Constructor ) ) { throw new TypeError ( "Cannot call a class as a function" ) ; } } ;
var Dom = _dom . Dom ;
var Types = _types . Types ;
var Helpers = _helpers . Helpers ;
var Event = _event . Event ;
var GridLayout = exports . GridLayout = ( function ( ) {
/ * *
* Grid layout , table with fixed headers
* @ param { Object } tf TableFilter instance
* /
function GridLayout ( tf ) {
_classCallCheck ( this , GridLayout ) ;
var f = tf . config ( ) ;
//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 : false ;
//defines col resizer script path
this . gridColResizerPath = f . grid _cont _col _resizer _path || this . basePath + "TFExt_ColsResizer/TFExt_ColsResizer.js" ;
this . gridColElms = [ ] ;
this . tf = tf ;
}
_prototypeProperties ( GridLayout , null , {
init : {
/ * *
* Generates a grid with fixed headers
* /
value : function init ( ) {
var tf = this . tf ;
var f = tf . config ( ) ;
var tbl = tf . tbl ;
if ( ! tf . gridLayout ) {
return ;
}
tf . isExternalFlt = true ;
// default width of 100px if column widths not set
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 , 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 , tbl ) ;
var t = tbl . parentNode . removeChild ( 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 ( 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 ;
//content table without headers needs col widths to be reset
tf . setColWidths ( ) ;
//Headers container width
this . headTblCont . style . width = this . tblCont . clientWidth + "px" ;
tbl . style . width = "" ;
//scroll synchronisation
var o = this ;
Event . add ( this . tblCont , "scroll" , function ( evt ) {
//this = scroll element
var scrollLeft = this . scrollLeft ;
o . headTblCont . scrollLeft = scrollLeft ;
//New pointerX calc taking into account scrollLeft
if ( ! o . isPointerXOverwritten ) {
try {
o . Evt . pointerX = function ( evt ) {
var e = evt || global . event ;
var bdScrollLeft = tf _StandardBody ( ) . scrollLeft + scrollLeft ;
return e . pageX + scrollLeft || e . clientX + bdScrollLeft ;
} ;
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 ;
//Col elements are enough to keep column widths after sorting and
//filtering
var createColTags = function createColTags ( o ) {
if ( ! o ) {
return ;
}
for ( var k = tf . nbCells - 1 ; k >= 0 ; k -- ) {
var col = Dom . create ( "col" , [ "id" , tf . id + "_col_" + k ] ) ;
tbl . firstChild . parentNode . insertBefore ( col , tbl . firstChild ) ;
col . style . width = tf . 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 < tf . nbCells ; ii ++ ) {
cols [ ii ] . setAttribute ( "id" , tf . id + "_col_" + ii ) ;
cols [ ii ] . style . width = tf . colWidth [ ii ] ;
o . gridColElms . push ( cols [ ii ] ) ;
}
}
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 ( 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" ;
}
// Re-adjust reference row
//tf.refRow = Helpers.isIE() ? (tf.refRow+1) : 0;
} ,
writable : true ,
configurable : true
} ,
destroy : {
/ * *
* Removes the grid layout
* /
value : function 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 ;
//needed to keep reference of table element
tbl = Dom . id ( tf . id ) ;
} ,
writable : true ,
configurable : true
}
} ) ;
return GridLayout ;
} ) ( ) ;
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
} ) ;
//# sourceMappingURL=gridLayout.js.map;
define ( 'modules/loader' , [ "exports" , "../dom" , "../types" ] , function ( exports , _dom , _types ) {
var _prototypeProperties = function ( child , staticProps , instanceProps ) { if ( staticProps ) Object . defineProperties ( child , staticProps ) ; if ( instanceProps ) Object . defineProperties ( child . prototype , instanceProps ) ; } ;
var _classCallCheck = function ( instance , Constructor ) { if ( ! ( instance instanceof Constructor ) ) { throw new TypeError ( "Cannot call a class as a function" ) ; } } ;
var Dom = _dom . Dom ;
var Types = _types . Types ;
var global = window ;
/ * *
* Loading message / spinner
* @ param { Object } tf TableFilter instance
* /
var Loader = exports . Loader = ( function ( ) {
function Loader ( tf ) {
_classCallCheck ( this , Loader ) ;
// TableFilter configuration
var f = tf . config ( ) ;
//id of container element
this . loaderTgtId = f . loader _target _id || null ;
//div containing loader
this . loaderDiv = null ;
//defines loader text
this . loaderText = f . loader _text || "Loading..." ;
//defines loader innerHtml
this . loaderHtml = f . loader _html || null ;
//defines css class for loader div
this . loaderCssClass = f . loader _css _class || "loader" ;
//delay for hiding loader
this . loaderCloseDelay = 200 ;
//callback function before loader is displayed
this . onShowLoader = Types . isFn ( f . on _show _loader ) ? f . on _show _loader : null ;
//callback function after loader is closed
this . onHideLoader = Types . isFn ( f . on _hide _loader ) ? f . on _hide _loader : null ;
this . tf = tf ;
var containerDiv = Dom . create ( "div" , [ "id" , tf . prfxLoader + tf . id ] ) ;
containerDiv . className = this . loaderCssClass ;
var targetEl = ! this . loaderTgtId ? tf . tbl . parentNode : Dom . id ( this . loaderTgtId ) ;
if ( ! this . loaderTgtId ) {
targetEl . insertBefore ( containerDiv , tf . tbl ) ;
} else {
targetEl . appendChild ( containerDiv ) ;
}
this . loaderDiv = Dom . id ( tf . prfxLoader + tf . id ) ;
if ( ! this . loaderHtml ) {
this . loaderDiv . appendChild ( Dom . text ( this . loaderText ) ) ;
} else {
this . loaderDiv . innerHTML = this . loaderHtml ;
}
}
_prototypeProperties ( Loader , null , {
show : {
value : function show ( p ) {
var _this = this ;
if ( ! this . tf . loader || ! this . loaderDiv || this . loaderDiv . style . display === p ) {
return ;
}
var displayLoader = function ( ) {
if ( ! _this . loaderDiv ) {
return ;
}
if ( _this . onShowLoader && p !== "none" ) {
_this . onShowLoader . call ( null , _this ) ;
}
_this . loaderDiv . style . display = p ;
if ( _this . onHideLoader && p === "none" ) {
_this . onHideLoader . call ( null , _this ) ;
}
} ;
var t = p === "none" ? this . loaderCloseDelay : 1 ;
global . setTimeout ( displayLoader , t ) ;
} ,
writable : true ,
configurable : true
} ,
remove : {
value : function remove ( ) {
if ( ! this . loaderDiv ) {
return ;
}
var tf = this . tf ,
targetEl = ! this . loaderTgtId ? tf . gridLayout ? tf . Cpt . gridLayout . tblCont : tf . tbl . parentNode : Dom . id ( this . loaderTgtId ) ;
targetEl . removeChild ( this . loaderDiv ) ;
this . loaderDiv = null ;
} ,
writable : true ,
configurable : true
}
} ) ;
return Loader ;
} ) ( ) ;
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
} ) ;
//# sourceMappingURL=loader.js.map;
define ( 'modules/highlightKeywords' , [ "exports" , "../dom" , "../string" ] , function ( exports , _dom , _string ) {
var _prototypeProperties = function ( child , staticProps , instanceProps ) { if ( staticProps ) Object . defineProperties ( child , staticProps ) ; if ( instanceProps ) Object . defineProperties ( child . prototype , instanceProps ) ; } ;
var _classCallCheck = function ( instance , Constructor ) { if ( ! ( instance instanceof Constructor ) ) { throw new TypeError ( "Cannot call a class as a function" ) ; } } ;
var Dom = _dom . Dom ;
var Str = _string . Str ;
var HighlightKeyword = exports . HighlightKeyword = ( function ( ) {
/ * *
* HighlightKeyword , highlight matched keyword
* @ param { Object } tf TableFilter instance
* /
function HighlightKeyword ( tf ) {
_classCallCheck ( this , HighlightKeyword ) ;
var f = tf . config ( ) ;
//defines css class for highlighting
this . highlightCssClass = f . highlight _css _class || "keyword" ;
this . highlightedNodes = [ ] ;
this . tf = tf ;
}
_prototypeProperties ( HighlightKeyword , null , {
highlight : {
/ * *
* highlight occurences of searched term in passed node
* @ param { Node } node
* @ param { String } word Searched term
* @ param { String } cssClass Css class name
* /
value : function highlight ( node , word , cssClass ) {
// Iterate into this nodes childNodes
if ( node . hasChildNodes ) {
var children = node . childNodes ;
for ( var i = 0 ; i < children . length ; i ++ ) {
this . highlight ( children [ i ] , word , cssClass ) ;
}
}
if ( node . nodeType === 3 ) {
var tempNodeVal = Str . lower ( node . nodeValue ) ;
var tempWordVal = Str . lower ( word ) ;
if ( tempNodeVal . indexOf ( tempWordVal ) != - 1 ) {
var pn = node . parentNode ;
if ( pn && pn . className != cssClass ) {
// word not highlighted yet
var nv = node . nodeValue ,
ni = tempNodeVal . indexOf ( tempWordVal ) ,
// Create a load of replacement nodes
before = Dom . text ( nv . substr ( 0 , ni ) ) ,
docWordVal = nv . substr ( ni , word . length ) ,
after = Dom . text ( nv . substr ( ni + word . length ) ) ,
hiwordtext = Dom . text ( docWordVal ) ,
hiword = Dom . create ( "span" ) ;
hiword . className = cssClass ;
hiword . appendChild ( hiwordtext ) ;
pn . insertBefore ( before , node ) ;
pn . insertBefore ( hiword , node ) ;
pn . insertBefore ( after , node ) ;
pn . removeChild ( node ) ;
this . highlightedNodes . push ( hiword . firstChild ) ;
}
}
}
} ,
writable : true ,
configurable : true
} ,
unhighlight : {
/ * *
* Removes highlight to nodes matching passed string
* @ param { String } word
* @ param { String } cssClass Css class to remove
* /
value : function unhighlight ( word , cssClass ) {
var arrRemove = [ ] ;
var highlightedNodes = this . highlightedNodes ;
for ( var i = 0 ; i < highlightedNodes . length ; i ++ ) {
var n = highlightedNodes [ i ] ;
if ( ! n ) {
continue ;
}
var tempNodeVal = Str . lower ( n . nodeValue ) ,
tempWordVal = Str . lower ( word ) ;
if ( tempNodeVal . indexOf ( tempWordVal ) !== - 1 ) {
var pn = n . parentNode ;
if ( pn && pn . className === cssClass ) {
var prevSib = pn . previousSibling ,
nextSib = pn . nextSibling ;
if ( ! prevSib || ! nextSib ) {
continue ;
}
nextSib . nodeValue = prevSib . nodeValue + n . nodeValue + nextSib . nodeValue ;
prevSib . nodeValue = "" ;
n . nodeValue = "" ;
arrRemove . push ( i ) ;
}
}
}
for ( var k = 0 ; k < arrRemove . length ; k ++ ) {
highlightedNodes . splice ( arrRemove [ k ] , 1 ) ;
}
} ,
writable : true ,
configurable : true
} ,
unhighlightAll : {
/ * *
* Clear all occurrences of highlighted nodes
* /
value : function unhighlightAll ( ) {
if ( ! this . tf . highlightKeywords || ! this . tf . searchArgs ) {
return ;
}
for ( var y = 0 ; y < this . tf . searchArgs . length ; y ++ ) {
this . unhighlight ( this . tf . searchArgs [ y ] , this . highlightCssClass ) ;
}
this . highlightedNodes = [ ] ;
} ,
writable : true ,
configurable : true
}
} ) ;
return HighlightKeyword ;
} ) ( ) ;
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
} ) ;
//# sourceMappingURL=highlightKeywords.js.map;
define ( 'modules/popupFilter' , [ "exports" , "../types" , "../dom" , "../event" , "../helpers" ] , function ( exports , _types , _dom , _event , _helpers ) {
var _prototypeProperties = function ( child , staticProps , instanceProps ) { if ( staticProps ) Object . defineProperties ( child , staticProps ) ; if ( instanceProps ) Object . defineProperties ( child . prototype , instanceProps ) ; } ;
var _classCallCheck = function ( instance , Constructor ) { if ( ! ( instance instanceof Constructor ) ) { throw new TypeError ( "Cannot call a class as a function" ) ; } } ;
var Types = _types . Types ;
var Dom = _dom . Dom ;
var Event = _event . Event ;
var Helpers = _helpers . Helpers ;
var PopupFilter = exports . PopupFilter = ( function ( ) {
/ * *
* Pop - up filter component
* @ param { Object } tf TableFilter instance
* /
function PopupFilter ( tf ) {
_classCallCheck ( this , PopupFilter ) ;
// Configuration object
var f = tf . config ( ) ;
// Enable external filters behaviour
tf . isExternalFlt = true ;
tf . externalFltTgtIds = [ ] ;
//filter icon path
this . popUpImgFlt = f . popup _filters _image || tf . themesPath + "icn_filter.gif" ;
//active filter icon path
this . popUpImgFltActive = f . popup _filters _image _active || tf . themesPath + "icn_filterActive.gif" ;
this . popUpImgFltHtml = f . popup _filters _image _html || "<img src=\"" + this . popUpImgFlt + "\" alt=\"Column filter\" />" ;
//defines css class for popup div containing filter
this . popUpDivCssClass = f . popup _div _css _class || "popUpFilter" ;
//callback function before popup filtes is opened
this . onBeforePopUpOpen = Types . isFn ( f . on _before _popup _filter _open ) ? f . on _before _popup _filter _open : null ;
//callback function after popup filtes is opened
this . onAfterPopUpOpen = Types . isFn ( f . on _after _popup _filter _open ) ? f . on _after _popup _filter _open : null ;
//callback function before popup filtes is closed
this . onBeforePopUpClose = Types . isFn ( f . on _before _popup _filter _close ) ? f . on _before _popup _filter _close : null ;
//callback function after popup filtes is closed
this . onAfterPopUpClose = Types . isFn ( f . on _after _popup _filter _close ) ? f . on _after _popup _filter _close : null ;
//stores filters spans
this . popUpFltSpans = [ ] ;
//stores filters icons
this . popUpFltImgs = [ ] ;
//stores filters containers
this . popUpFltElms = this . popUpFltElmCache || [ ] ;
this . popUpFltAdjustToContainer = true ;
this . tf = tf ;
}
_prototypeProperties ( PopupFilter , null , {
onClick : {
value : function onClick ( e ) {
var evt = e || global . event ,
elm = evt . target . parentNode ,
colIndex = parseInt ( elm . getAttribute ( "ci" ) , 10 ) ;
this . closeAll ( colIndex ) ;
this . toggle ( colIndex ) ;
if ( this . popUpFltAdjustToContainer ) {
var popUpDiv = this . popUpFltElms [ colIndex ] ,
header = this . tf . getHeaderElement ( colIndex ) ,
headerWidth = header . clientWidth * 0.95 ;
if ( Helpers . isIE ( ) ) {
var headerLeft = Dom . position ( header ) . left ;
popUpDiv . style . left = headerLeft + "px" ;
}
popUpDiv . style . width = parseInt ( headerWidth , 10 ) + "px" ;
}
Event . cancel ( evt ) ;
Event . stop ( evt ) ;
} ,
writable : true ,
configurable : true
} ,
init : {
/ * *
* Initialize DOM elements
* /
value : function init ( ) {
var _this = this ;
var tf = this . tf ;
for ( var i = 0 ; i < tf . nbCells ; i ++ ) {
if ( tf [ "col" + i ] === tf . fltTypeNone ) {
continue ;
}
var popUpSpan = Dom . create ( "span" , [ "id" , tf . prfxPopUpSpan + tf . id + "_" + i ] , [ "ci" , i ] ) ;
popUpSpan . innerHTML = this . popUpImgFltHtml ;
var header = tf . getHeaderElement ( i ) ;
header . appendChild ( popUpSpan ) ;
Event . add ( popUpSpan , "click" , function ( evt ) {
_this . onClick ( evt ) ;
} ) ;
this . popUpFltSpans [ i ] = popUpSpan ;
this . popUpFltImgs [ i ] = popUpSpan . firstChild ;
}
} ,
writable : true ,
configurable : true
} ,
buildAll : {
/ * *
* Build all pop - up filters elements
* /
value : function buildAll ( ) {
for ( var i = 0 ; i < this . popUpFltElmCache . length ; i ++ ) {
this . build ( i , this . popUpFltElmCache [ i ] ) ;
}
} ,
writable : true ,
configurable : true
} ,
build : {
/ * *
* Build a specified pop - up filter elements
* @ param { Number } colIndex Column index
* @ param { Object } div Optional container DOM element
* /
value : function build ( colIndex , div ) {
var tf = this . tf ;
var popUpDiv = ! div ? Dom . create ( "div" , [ "id" , tf . prfxPopUpDiv + tf . id + "_" + colIndex ] ) : div ;
popUpDiv . className = this . popUpDivCssClass ;
tf . externalFltTgtIds . push ( popUpDiv . id ) ;
var header = tf . getHeaderElement ( colIndex ) ;
header . insertBefore ( popUpDiv , header . firstChild ) ;
Event . add ( popUpDiv , "click" , function ( evt ) {
Event . stop ( evt ) ;
} ) ;
this . popUpFltElms [ colIndex ] = popUpDiv ;
} ,
writable : true ,
configurable : true
} ,
toggle : {
/ * *
* Toogle visibility of specified filter
* @ param { Number } colIndex Column index
* /
value : function toggle ( colIndex ) {
var tf = this . tf ,
popUpFltElm = this . popUpFltElms [ colIndex ] ;
if ( popUpFltElm . style . display === "none" || popUpFltElm . style . display === "" ) {
if ( this . onBeforePopUpOpen ) {
this . onBeforePopUpOpen . call ( null , this , this . popUpFltElms [ colIndex ] , colIndex ) ;
}
popUpFltElm . style . display = "block" ;
if ( tf [ "col" + colIndex ] === tf . fltTypeInp ) {
tf . GetFilterElement ( colIndex ) . focus ( ) ;
}
if ( this . onAfterPopUpOpen ) {
this . onAfterPopUpOpen . call ( null , this , this . popUpFltElms [ colIndex ] , colIndex ) ;
}
} else {
if ( this . onBeforePopUpClose ) {
this . onBeforePopUpClose . call ( null , this , this . popUpFltElms [ colIndex ] , colIndex ) ;
}
popUpFltElm . style . display = "none" ;
if ( this . onAfterPopUpClose ) {
this . onAfterPopUpClose . call ( null , this , this . popUpFltElms [ colIndex ] , colIndex ) ;
}
}
} ,
writable : true ,
configurable : true
} ,
closeAll : {
/ * *
* Close all filters excepted for the specified one if any
* @ param { Number } exceptIdx Column index of the filter to not close
* /
value : function closeAll ( exceptIdx ) {
for ( var i = 0 ; i < this . popUpFltElms . length ; i ++ ) {
if ( i === exceptIdx ) {
continue ;
}
var popUpFltElm = this . popUpFltElms [ i ] ;
if ( popUpFltElm ) {
popUpFltElm . style . display = "none" ;
}
}
} ,
writable : true ,
configurable : true
} ,
buildIcons : {
/ * *
* Build all the icons representing the pop - up filters
* /
value : function buildIcons ( ) {
for ( var i = 0 ; i < this . popUpFltImgs . length ; i ++ ) {
this . buildIcon ( i , false ) ;
}
} ,
writable : true ,
configurable : true
} ,
buildIcon : {
/ * *
* Build specified icon
* @ param { Number } colIndex Column index
* @ param { Boolean } active Apply active state
* /
value : function buildIcon ( colIndex , active ) {
var activeImg = Types . isUndef ( active ) ? true : active ;
if ( this . popUpFltImgs [ colIndex ] ) {
this . popUpFltImgs [ colIndex ] . src = active ? this . popUpImgFltActive : this . popUpImgFlt ;
}
} ,
writable : true ,
configurable : true
} ,
destroy : {
/ * *
* Remove pop - up filters
* /
value : function destroy ( ) {
this . popUpFltElmCache = [ ] ;
for ( var i = 0 ; i < this . popUpFltElms . length ; i ++ ) {
var popUpFltElm = this . popUpFltElms [ i ] ,
popUpFltSpan = this . popUpFltSpans [ i ] ,
popUpFltImg = this . popUpFltImgs [ i ] ;
if ( popUpFltElm ) {
popUpFltElm . parentNode . removeChild ( popUpFltElm ) ;
this . popUpFltElmCache [ i ] = popUpFltElm ;
}
popUpFltElm = null ;
if ( popUpFltSpan ) {
popUpFltSpan . parentNode . removeChild ( popUpFltSpan ) ;
}
popUpFltSpan = null ;
if ( popUpFltImg ) {
popUpFltImg . parentNode . removeChild ( popUpFltImg ) ;
}
popUpFltImg = null ;
}
this . popUpFltElms = [ ] ;
this . popUpFltSpans = [ ] ;
this . popUpFltImgs = [ ] ;
} ,
writable : true ,
configurable : true
}
} ) ;
return PopupFilter ;
} ) ( ) ;
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
} ) ;
//# sourceMappingURL=popupFilter.js.map;
define ( 'modules/dropdown' , [ "exports" , "../dom" , "../array" , "../string" , "../sort" ] , function ( exports , _dom , _array , _string , _sort ) {
var _prototypeProperties = function ( child , staticProps , instanceProps ) { if ( staticProps ) Object . defineProperties ( child , staticProps ) ; if ( instanceProps ) Object . defineProperties ( child . prototype , instanceProps ) ; } ;
var _classCallCheck = function ( instance , Constructor ) { if ( ! ( instance instanceof Constructor ) ) { throw new TypeError ( "Cannot call a class as a function" ) ; } } ;
var Dom = _dom . Dom ;
var array = _array . Arr ;
var Str = _string . Str ;
var Sort = _sort . Sort ;
var Dropdown = exports . Dropdown = ( function ( ) {
/ * *
* Dropdown UI component
* @ param { Object } tf TableFilter instance
* /
function Dropdown ( tf ) {
_classCallCheck ( this , Dropdown ) ;
// Configuration object
var f = tf . config ( ) ;
this . enableSlcResetFilter = f . enable _slc _reset _filter ? false : true ;
//defines empty option text
this . nonEmptyText = f . non _empty _text || "(Non empty)" ;
//sets select filling method: 'innerHTML' or 'createElement'
this . slcFillingMethod = f . slc _filling _method || "createElement" ;
//IE only, tooltip text appearing on select before it is populated
this . activateSlcTooltip = f . activate _slc _tooltip || "Click to activate" ;
//tooltip text appearing on multiple select
this . multipleSlcTooltip = f . multiple _slc _tooltip || "Use Ctrl key for multiple selections" ;
this . isCustom = null ;
this . opts = null ;
this . optsTxt = null ;
this . slcInnerHtml = null ;
this . tf = tf ;
}
_prototypeProperties ( Dropdown , null , {
build : {
/ * *
* Build drop - down filter UI asynchronously
* @ param { Number } colIndex Column index
* @ param { Boolean } isRefreshed Enable linked refresh behaviour
* @ param { Boolean } isExternal Render in external container
* @ param { String } extSlcId External container id
* /
value : function build ( colIndex , isRefreshed , isExternal , extSlcId ) {
var tf = this . tf ;
tf . EvtManager ( tf . Evt . name . dropdown , {
slcIndex : colIndex ,
slcRefreshed : isRefreshed ,
slcExternal : isExternal ,
slcId : extSlcId
} ) ;
} ,
writable : true ,
configurable : true
} ,
_build : {
/ * *
* Build drop - down filter UI
* @ param { Number } colIndex Column index
* @ param { Boolean } isRefreshed Enable linked refresh behaviour
* @ param { Boolean } isExternal Render in external container
* @ param { String } extSlcId External container id
* /
value : function _build ( colIndex ) {
var isRefreshed = arguments [ 1 ] === undefined ? false : arguments [ 1 ] ;
var isExternal = arguments [ 2 ] === undefined ? false : arguments [ 2 ] ;
var extSlcId = arguments [ 3 ] === undefined ? null : arguments [ 3 ] ;
var tf = this . tf ;
colIndex = parseInt ( colIndex , 10 ) ;
this . opts = [ ] ;
this . optsTxt = [ ] ;
this . slcInnerHtml = "" ;
var slcId = tf . fltIds [ colIndex ] ;
if ( ! Dom . id ( slcId ) && ! isExternal || ! Dom . id ( extSlcId ) && isExternal ) {
return ;
}
var slc = ! isExternal ? Dom . id ( slcId ) : Dom . id ( extSlcId ) ,
rows = tf . tbl . rows ,
matchCase = tf . matchCase ,
fillMethod = Str . lower ( this . slcFillingMethod ) ;
//custom select test
this . isCustom = tf . hasCustomSlcOptions && array . has ( tf . customSlcOptions . cols , colIndex ) ;
//custom selects text
var activeFlt ;
if ( isRefreshed && tf . activeFilterId ) {
activeFlt = tf . activeFilterId . split ( "_" ) [ 0 ] ;
activeFlt = activeFlt . split ( tf . prfxFlt ) [ 1 ] ;
}
/*** remember grid values ***/
var fltsValues = [ ] ,
fltArr = [ ] ;
if ( tf . rememberGridValues ) {
fltsValues = tf . Cpt . store . getFilterValues ( tf . fltsValuesCookie ) ;
if ( fltsValues && ! Str . isEmpty ( fltsValues . toString ( ) ) ) {
if ( this . isCustom ) {
fltArr . push ( fltsValues [ colIndex ] ) ;
} else {
fltArr = fltsValues [ colIndex ] . split ( " " + tf . orOperator + " " ) ;
}
}
}
var excludedOpts = null ,
filteredDataCol = null ;
if ( isRefreshed && tf . disableExcludedOptions ) {
excludedOpts = [ ] ;
filteredDataCol = [ ] ;
}
for ( var k = tf . refRow ; k < tf . nbRows ; k ++ ) {
// always visible rows don't need to appear on selects as always
// valid
if ( tf . hasVisibleRows && array . has ( tf . visibleRows , k ) && ! tf . paging ) {
continue ;
}
var cell = rows [ k ] . cells ,
nchilds = cell . length ;
// checks if row has exact cell #
if ( nchilds !== tf . nbCells || this . isCustom ) {
continue ;
}
// this loop retrieves cell data
for ( var j = 0 ; j < nchilds ; j ++ ) {
if ( colIndex === j && ( ! isRefreshed || isRefreshed && tf . disableExcludedOptions ) || colIndex == j && isRefreshed && ( rows [ k ] . style . display === "" && ! tf . paging || tf . paging && ( ! tf . validRowsIndex || tf . validRowsIndex && array . has ( tf . validRowsIndex , k ) ) && ( activeFlt === undefined || activeFlt == colIndex || activeFlt != colIndex && array . has ( tf . validRowsIndex , k ) ) ) ) {
var cell _data = tf . getCellData ( j , cell [ j ] ) ,
//Vary Peter's patch
cell _string = Str . matchCase ( cell _data , matchCase ) ;
// checks if celldata is already in array
if ( ! array . has ( this . opts , cell _string , matchCase ) ) {
this . opts . push ( cell _data ) ;
}
if ( isRefreshed && tf . disableExcludedOptions ) {
var filteredCol = filteredDataCol [ j ] ;
if ( ! filteredCol ) {
filteredCol = this . GetFilteredDataCol ( j ) ;
}
if ( ! array . has ( filteredCol , cell _string , matchCase ) && ! array . has ( excludedOpts , cell _string , matchCase ) && ! this . isFirstLoad ) {
excludedOpts . push ( cell _data ) ;
}
}
} //if colIndex==j
} //for j
} //for k
//Retrieves custom values
if ( this . isCustom ) {
var customValues = tf . _ _getCustomValues ( colIndex ) ;
this . opts = customValues [ 0 ] ;
this . optsTxt = customValues [ 1 ] ;
}
if ( tf . sortSlc && ! this . isCustom ) {
if ( ! matchCase ) {
this . opts . sort ( Sort . ignoreCase ) ;
if ( excludedOpts ) {
excludedOpts . sort ( Sort . ignoreCase ) ;
}
} else {
this . opts . sort ( ) ;
if ( excludedOpts ) {
excludedOpts . sort ( ) ;
}
}
}
//asc sort
if ( tf . sortNumAsc && array . has ( tf . sortNumAsc , colIndex ) ) {
try {
this . opts . sort ( numSortAsc ) ;
if ( excludedOpts ) {
excludedOpts . sort ( numSortAsc ) ;
}
if ( this . isCustom ) {
this . optsTxt . sort ( numSortAsc ) ;
}
} catch ( e ) {
this . opts . sort ( ) ;
if ( excludedOpts ) {
excludedOpts . sort ( ) ;
}
if ( this . isCustom ) {
this . optsTxt . sort ( ) ;
}
} //in case there are alphanumeric values
}
//desc sort
if ( tf . sortNumDesc && array . has ( tf . sortNumDesc , colIndex ) ) {
try {
this . opts . sort ( numSortDesc ) ;
if ( excludedOpts ) {
excludedOpts . sort ( numSortDesc ) ;
}
if ( this . isCustom ) {
this . optsTxt . sort ( numSortDesc ) ;
}
} catch ( e ) {
this . opts . sort ( ) ;
if ( excludedOpts ) {
excludedOpts . sort ( ) ;
}
if ( this . isCustom ) {
this . optsTxt . sort ( ) ;
}
} //in case there are alphanumeric values
}
//populates drop-down
this . addOptions ( colIndex , slc , isRefreshed , excludedOpts , fltsValues , fltArr ) ;
} ,
writable : true ,
configurable : true
} ,
addOptions : {
/ * *
* Add drop - down options
* @ param { Number } colIndex Column index
* @ param { Object } slc Select Dom element
* @ param { Boolean } isRefreshed Enable linked refresh behaviour
* @ param { Array } excludedOpts Array of excluded options
* @ param { Array } fltsValues Collection of persisted filter values
* @ param { Array } fltArr Collection of persisted filter values
* /
value : function addOptions ( colIndex , slc , isRefreshed , excludedOpts , fltsValues , fltArr ) {
var tf = this . tf ,
fillMethod = Str . lower ( this . slcFillingMethod ) ,
slcValue = slc . value ;
slc . innerHTML = "" ;
slc = this . addFirstOption ( slc ) ;
for ( var y = 0 ; y < this . opts . length ; y ++ ) {
if ( this . opts [ y ] === "" ) {
continue ;
}
var val = this . opts [ y ] ; //option value
var lbl = this . isCustom ? this . optsTxt [ y ] : val ; //option text
var isDisabled = false ;
if ( isRefreshed && this . disableExcludedOptions && array . has ( excludedOpts , Str . matchCase ( val , tf . matchCase ) , tf . matchCase ) ) {
isDisabled = true ;
}
if ( fillMethod === "innerhtml" ) {
var slcAttr = "" ;
if ( tf . fillSlcOnDemand && slcValue === this . opts [ y ] ) {
slcAttr = "selected=\"selected\"" ;
}
this . slcInnerHtml += "<option value=\"" + val + "\" " + slcAttr + ( isDisabled ? "disabled=\"disabled\"" : "" ) + ">" + lbl + "</option>" ;
} else {
var opt ;
//fill select on demand
if ( tf . fillSlcOnDemand && slcValue === this . opts [ y ] && tf [ "col" + colIndex ] === tf . fltTypeSlc ) {
opt = Dom . createOpt ( lbl , val , true ) ;
} else {
if ( tf [ "col" + colIndex ] !== tf . fltTypeMulti ) {
opt = Dom . createOpt ( lbl , val , fltsValues [ colIndex ] !== " " && val === fltsValues [ colIndex ] ? true : false ) ;
} else {
opt = Dom . createOpt ( lbl , val , array . has ( fltArr , Str . matchCase ( this . opts [ y ] , tf . matchCase ) , tf . matchCase ) || fltArr . toString ( ) . indexOf ( val ) !== - 1 ? true : false ) ;
}
}
if ( isDisabled ) {
opt . disabled = true ;
}
slc . appendChild ( opt ) ;
}
} // for y
if ( fillMethod === "innerhtml" ) {
slc . innerHTML += this . slcInnerHtml ;
}
slc . setAttribute ( "filled" , "1" ) ;
} ,
writable : true ,
configurable : true
} ,
addFirstOption : {
/ * *
* Add drop - down header option
* @ param { Object } slc Select DOM element
* /
value : function addFirstOption ( slc ) {
var tf = this . tf ,
fillMethod = Str . lower ( this . slcFillingMethod ) ;
if ( fillMethod === "innerhtml" ) {
this . slcInnerHtml += "<option value=\"\">" + tf . displayAllText + "</option>" ;
} else {
var opt0 = Dom . createOpt ( ! this . enableSlcResetFilter ? "" : tf . displayAllText , "" ) ;
if ( ! this . enableSlcResetFilter ) {
opt0 . style . display = "none" ;
}
slc . appendChild ( opt0 ) ;
if ( tf . enableEmptyOption ) {
var opt1 = Dom . createOpt ( tf . emptyText , tf . emOperator ) ;
slc . appendChild ( opt1 ) ;
}
if ( tf . enableNonEmptyOption ) {
var opt2 = Dom . createOpt ( tf . nonEmptyText , tf . nmOperator ) ;
slc . appendChild ( opt2 ) ;
}
}
return slc ;
} ,
writable : true ,
configurable : true
}
} ) ;
return Dropdown ;
} ) ( ) ;
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
} ) ;
//# sourceMappingURL=dropdown.js.map;
define ( 'modules/checkList' , [ "exports" , "../dom" , "../array" , "../string" , "../sort" , "../event" ] , function ( exports , _dom , _array , _string , _sort , _event ) {
var _prototypeProperties = function ( child , staticProps , instanceProps ) { if ( staticProps ) Object . defineProperties ( child , staticProps ) ; if ( instanceProps ) Object . defineProperties ( child . prototype , instanceProps ) ; } ;
var _classCallCheck = function ( instance , Constructor ) { if ( ! ( instance instanceof Constructor ) ) { throw new TypeError ( "Cannot call a class as a function" ) ; } } ;
var Dom = _dom . Dom ;
var array = _array . Arr ;
var Str = _string . Str ;
var Sort = _sort . Sort ;
var Event = _event . Event ;
var CheckList = exports . CheckList = ( function ( ) {
/ * *
* Checklist UI component
* @ param { Object } tf TableFilter instance
* /
function CheckList ( tf ) {
_classCallCheck ( this , CheckList ) ;
// Configuration object
var f = tf . config ( ) ;
this . checkListDiv = [ ] ; //checklist container div
//defines css class for div containing checklist filter
this . checkListDivCssClass = f . div _checklist _css _class || "div_checklist" ;
//defines css class for checklist filters
this . checkListCssClass = f . checklist _css _class || "flt_checklist" ;
//defines css class for checklist item (li)
this . checkListItemCssClass = f . checklist _item _css _class || "flt_checklist_item" ;
//defines css class for selected checklist item (li)
this . checkListSlcItemCssClass = f . checklist _selected _item _css _class || "flt_checklist_slc_item" ;
//Load on demand text
this . activateCheckListTxt = f . activate _checklist _text || "Click to load filter data" ;
//defines css class for checklist filters
this . checkListItemDisabledCssClass = f . checklist _item _disabled _css _class || "flt_checklist_item_disabled" ;
this . enableCheckListResetFilter = f . enable _checklist _reset _filter === false ? false : true ;
this . isCustom = null ;
this . opts = null ;
this . optsTxt = null ;
this . tf = tf ;
}
_prototypeProperties ( CheckList , null , {
onChange : {
// TODO: add _OnSlcChange event here
value : function onChange ( evt ) {
this . tf . Evt . _OnSlcChange ( evt ) ;
} ,
writable : true ,
configurable : true
} ,
optionClick : {
value : function optionClick ( evt ) {
this . setCheckListValues ( evt . target ) ;
this . onChange ( evt ) ;
} ,
writable : true ,
configurable : true
} ,
build : {
/ * *
* Build checklist UI asynchronously
* @ param { Number } colIndex Column index
* @ param { Boolean } isExternal Render in external container
* @ param { String } extFltId External container id
* /
value : function build ( colIndex , isExternal , extFltId ) {
var tf = this . tf ;
tf . EvtManager ( tf . Evt . name . checklist , { slcIndex : colIndex , slcExternal : isExternal , slcId : extFltId } ) ;
} ,
writable : true ,
configurable : true
} ,
_build : {
/ * *
* Build checklist UI
* @ param { Number } colIndex Column index
* @ param { Boolean } isExternal Render in external container
* @ param { String } extFltId External container id
* /
value : function _build ( colIndex ) {
var _this = this ;
var isExternal = arguments [ 1 ] === undefined ? false : arguments [ 1 ] ;
var extFltId = arguments [ 2 ] === undefined ? null : arguments [ 2 ] ;
var tf = this . tf ;
colIndex = parseInt ( colIndex , 10 ) ;
this . opts = [ ] ;
this . optsTxt = [ ] ;
var divFltId = tf . prfxCheckListDiv + colIndex + "_" + tf . id ;
if ( ! Dom . id ( divFltId ) && ! isExternal || ! Dom . id ( extFltId ) && isExternal ) {
return ;
}
var flt = ! isExternal ? this . checkListDiv [ colIndex ] : Dom . id ( extFltId ) ;
var ul = Dom . create ( "ul" , [ "id" , tf . fltIds [ colIndex ] ] , [ "colIndex" , colIndex ] ) ;
ul . className = this . checkListCssClass ;
Event . add ( ul , "change" , function ( evt ) {
_this . onChange ( evt ) ;
} ) ;
var rows = tf . tbl . rows ;
this . isCustom = tf . hasCustomSlcOptions && array . has ( tf . customSlcOptions . cols , colIndex ) ;
var activeFlt ;
if ( tf . refreshFilters && tf . activeFilterId ) {
activeFlt = tf . activeFilterId . split ( "_" ) [ 0 ] ;
activeFlt = activeFlt . split ( tf . prfxFlt ) [ 1 ] ;
}
var excludedOpts ,
filteredDataCol = [ ] ;
if ( tf . refreshFilters && tf . disableExcludedOptions ) {
excludedOpts = [ ] ;
}
for ( var k = tf . refRow ; k < tf . nbRows ; k ++ ) {
// always visible rows don't need to appear on selects as always
// valid
if ( tf . hasVisibleRows && array . has ( tf . visibleRows , k ) && ! tf . paging ) {
continue ;
}
var cells = rows [ k ] . cells ;
var ncells = cells . length ;
// checks if row has exact cell #
if ( ncells !== tf . nbCells || this . isCustom ) {
continue ;
}
// this loop retrieves cell data
for ( var j = 0 ; j < ncells ; j ++ ) {
if ( colIndex === j && ( ! tf . refreshFilters || tf . refreshFilters && tf . disableExcludedOptions ) || colIndex === j && tf . refreshFilters && ( rows [ k ] . style . display === "" && ! tf . paging || tf . paging && ( ! activeFlt || activeFlt === colIndex || activeFlt != colIndex && array . has ( tf . validRowsIndex , k ) ) ) ) {
var cell _data = tf . getCellData ( j , cells [ j ] ) ;
//Vary Peter's patch
var cell _string = Str . matchCase ( cell _data , tf . matchCase ) ;
// checks if celldata is already in array
if ( ! array . has ( this . opts , cell _string , tf . matchCase ) ) {
this . opts . push ( cell _data ) ;
}
var filteredCol = filteredDataCol [ j ] ;
if ( tf . refreshFilters && tf . disableExcludedOptions ) {
if ( ! filteredCol ) {
filteredDataCol [ j ] = tf . GetFilteredDataCol ( j ) ;
}
if ( ! array . has ( filteredCol , cell _string , tf . matchCase ) && ! array . has ( excludedOpts , cell _string , tf . matchCase ) && ! tf . isFirstLoad ) {
excludedOpts . push ( cell _data ) ;
}
}
}
}
}
//Retrieves custom values
if ( this . isCustom ) {
var customValues = tf . _ _getCustomValues ( colIndex ) ;
this . opts = customValues [ 0 ] ;
this . optsTxt = customValues [ 1 ] ;
}
if ( tf . sortSlc && ! this . isCustom ) {
if ( ! tf . matchCase ) {
this . opts . sort ( Sort . ignoreCase ) ;
if ( excludedOpts ) {
excludedOpts . sort ( Sort . ignoreCase ) ;
}
} else {
this . opts . sort ( ) ;
if ( excludedOpts ) {
excludedOpts . sort ( ) ;
}
}
}
//asc sort
if ( tf . sortNumAsc && array . has ( tf . sortNumAsc , colIndex ) ) {
try {
this . opts . sort ( numSortAsc ) ;
if ( excludedOpts ) {
excludedOpts . sort ( numSortAsc ) ;
}
if ( this . isCustom ) {
this . optsTxt . sort ( numSortAsc ) ;
}
} catch ( e ) {
this . opts . sort ( ) ;
if ( excludedOpts ) {
excludedOpts . sort ( ) ;
}
if ( this . isCustom ) {
this . optsTxt . sort ( ) ;
}
} //in case there are alphanumeric values
}
//desc sort
if ( tf . sortNumDesc && array . has ( tf . sortNumDesc , colIndex ) ) {
try {
this . opts . sort ( numSortDesc ) ;
if ( excludedOpts ) {
excludedOpts . sort ( numSortDesc ) ;
}
if ( this . isCustom ) {
this . optsTxt . sort ( numSortDesc ) ;
}
} catch ( e ) {
this . opts . sort ( ) ;
if ( excludedOpts ) {
excludedOpts . sort ( ) ;
}
if ( this . isCustom ) {
this . optsTxt . sort ( ) ;
}
} //in case there are alphanumeric values
}
this . addChecks ( colIndex , ul , tf . separator ) ;
if ( tf . fillSlcOnDemand ) {
flt . innerHTML = "" ;
}
flt . appendChild ( ul ) ;
flt . setAttribute ( "filled" , "1" ) ;
} ,
writable : true ,
configurable : true
} ,
addChecks : {
/ * *
* Add checklist options
* @ param { Number } colIndex Column index
* @ param { Object } ul Ul element
* @ param { String } separator Data separator
* /
value : function addChecks ( colIndex , ul , separator ) {
var _this = this ;
var tf = this . tf ;
var chkCt = this . addTChecks ( colIndex , ul ) ;
var flts _values = [ ] ,
fltArr = [ ] ; //remember grid values
var store = tf . Cpt . store ;
var tmpVal = store ? store . getFilterValues ( tf . fltsValuesCookie ) [ colIndex ] : null ;
if ( tmpVal && Str . trim ( tmpVal ) . length > 0 ) {
if ( tf . hasCustomSlcOptions && array . has ( tf . customSlcOptions . cols , colIndex ) ) {
fltArr . push ( tmpVal ) ;
} else {
fltArr = tmpVal . split ( " " + tf . orOperator + " " ) ;
}
}
for ( var y = 0 ; y < this . opts . length ; y ++ ) {
var val = this . opts [ y ] ; //item value
var lbl = this . isCustom ? this . optsTxt [ y ] : val ; //item text
var li = Dom . createCheckItem ( tf . fltIds [ colIndex ] + "_" + ( y + chkCt ) , val , lbl ) ;
li . className = this . checkListItemCssClass ;
if ( tf . refreshFilters && tf . disableExcludedOptions && array . has ( excludedOpts , Str . matchCase ( val , tf . matchCase ) , tf . matchCase ) ) {
Dom . addClass ( li , this . checkListItemDisabledCssClass ) ;
li . check . disabled = true ;
li . disabled = true ;
} else {
Event . add ( li . check , "click" , function ( evt ) {
_this . optionClick ( evt ) ;
} ) ;
}
ul . appendChild ( li ) ;
if ( val === "" ) {
//item is hidden
li . style . display = "none" ;
}
/*** remember grid values ***/
if ( tf . rememberGridValues ) {
if ( tf . hasCustomSlcOptions && array . has ( tf . customSlcOptions . cols , colIndex ) && fltArr . toString ( ) . indexOf ( val ) != - 1 || array . has ( fltArr , Str . matchCase ( val , tf . matchCase ) , tf . matchCase ) ) {
li . check . checked = true ;
this . setCheckListValues ( li . check ) ;
}
}
}
} ,
writable : true ,
configurable : true
} ,
addTChecks : {
/ * *
* Add checklist header option
* @ param { Number } colIndex Column index
* @ param { Object } ul Ul element
* /
value : function addTChecks ( colIndex , ul ) {
var _this = this ;
var tf = this . tf ;
var chkCt = 1 ;
var li0 = Dom . createCheckItem ( tf . fltIds [ colIndex ] + "_0" , "" , tf . displayAllText ) ;
li0 . className = this . checkListItemCssClass ;
ul . appendChild ( li0 ) ;
Event . add ( li0 . check , "click" , function ( evt ) {
_this . optionClick ( evt ) ;
} ) ;
if ( ! this . enableCheckListResetFilter ) {
li0 . style . display = "none" ;
}
if ( tf . enableEmptyOption ) {
var li1 = Dom . createCheckItem ( tf . fltIds [ colIndex ] + "_1" , tf . emOperator , tf . emptyText ) ;
li1 . className = this . checkListItemCssClass ;
ul . appendChild ( li1 ) ;
Event . add ( li1 . check , "click" , function ( evt ) {
_this . optionClick ( evt ) ;
} ) ;
chkCt ++ ;
}
if ( tf . enableNonEmptyOption ) {
var li2 = Dom . createCheckItem ( tf . fltIds [ colIndex ] + "_2" , tf . nmOperator , tf . nonEmptyText ) ;
li2 . className = this . checkListItemCssClass ;
ul . appendChild ( li2 ) ;
Event . add ( li2 . check , "click" , function ( evt ) {
_this . optionClick ( evt ) ;
} ) ;
chkCt ++ ;
}
return chkCt ;
} ,
writable : true ,
configurable : true
} ,
setCheckListValues : {
/ * *
* Store checked options in DOM element attribute
* @ param { Object } o checklist option DOM element
* /
value : function setCheckListValues ( o ) {
if ( ! o ) {
return ;
}
var tf = this . tf ;
var chkValue = o . value ; //checked item value
var chkIndex = parseInt ( o . id . split ( "_" ) [ 2 ] , 10 ) ;
var filterTag = "ul" ,
itemTag = "li" ;
var n = o ;
//ul tag search
while ( Str . lower ( n . nodeName ) !== filterTag ) {
n = n . parentNode ;
}
var li = n . childNodes [ chkIndex ] ;
var colIndex = n . getAttribute ( "colIndex" ) ;
var fltValue = n . getAttribute ( "value" ) ; //filter value (ul tag)
var fltIndexes = n . getAttribute ( "indexes" ) ; //selected items (ul tag)
if ( o . checked ) {
//show all item
if ( chkValue === "" ) {
if ( fltIndexes && fltIndexes !== "" ) {
//items indexes
var indSplit = fltIndexes . split ( tf . separator ) ;
//checked items loop
for ( var u = 0 ; u < indSplit . length ; u ++ ) {
//checked item
var cChk = Dom . id ( tf . fltIds [ colIndex ] + "_" + indSplit [ u ] ) ;
if ( cChk ) {
cChk . checked = false ;
Dom . removeClass ( n . childNodes [ indSplit [ u ] ] , this . checkListSlcItemCssClass ) ;
}
}
}
n . setAttribute ( "value" , "" ) ;
n . setAttribute ( "indexes" , "" ) ;
} else {
fltValue = fltValue ? fltValue : "" ;
chkValue = Str . trim ( fltValue + " " + chkValue + " " + tf . orOperator ) ;
chkIndex = fltIndexes + chkIndex + tf . separator ;
n . setAttribute ( "value" , chkValue ) ;
n . setAttribute ( "indexes" , chkIndex ) ;
//1st option unchecked
if ( Dom . id ( tf . fltIds [ colIndex ] + "_0" ) ) {
Dom . id ( tf . fltIds [ colIndex ] + "_0" ) . checked = false ;
}
}
if ( Str . lower ( li . nodeName ) === itemTag ) {
Dom . removeClass ( n . childNodes [ 0 ] , this . checkListSlcItemCssClass ) ;
Dom . addClass ( li , this . checkListSlcItemCssClass ) ;
}
} else {
//removes values and indexes
if ( chkValue !== "" ) {
var replaceValue = new RegExp ( Str . rgxEsc ( chkValue + " " + tf . orOperator ) ) ;
fltValue = fltValue . replace ( replaceValue , "" ) ;
n . setAttribute ( "value" , Str . trim ( fltValue ) ) ;
var replaceIndex = new RegExp ( Str . rgxEsc ( chkIndex + tf . separator ) ) ;
fltIndexes = fltIndexes . replace ( replaceIndex , "" ) ;
n . setAttribute ( "indexes" , fltIndexes ) ;
}
if ( Str . lower ( li . nodeName ) === itemTag ) {
Dom . removeClass ( li , this . checkListSlcItemCssClass ) ;
}
}
} ,
writable : true ,
configurable : true
}
} ) ;
return CheckList ;
} ) ( ) ;
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
} ) ;
//# sourceMappingURL=checkList.js.map;
define ( 'modules/rowsCounter' , [ "exports" , "../dom" , "../types" , "../helpers" ] , function ( exports , _dom , _types , _helpers ) {
var _prototypeProperties = function ( child , staticProps , instanceProps ) { if ( staticProps ) Object . defineProperties ( child , staticProps ) ; if ( instanceProps ) Object . defineProperties ( child . prototype , instanceProps ) ; } ;
var _classCallCheck = function ( instance , Constructor ) { if ( ! ( instance instanceof Constructor ) ) { throw new TypeError ( "Cannot call a class as a function" ) ; } } ;
var Dom = _dom . Dom ;
var Types = _types . Types ;
var Helpers = _helpers . Helpers ;
var RowsCounter = exports . RowsCounter = ( function ( ) {
/ * *
* Rows counter
* @ param { Object } tf TableFilter instance
* /
function RowsCounter ( tf ) {
_classCallCheck ( this , RowsCounter ) ;
// TableFilter configuration
var f = tf . config ( ) ;
//id of custom container element
this . rowsCounterTgtId = f . rows _counter _target _id || null ;
//element containing tot nb rows
this . rowsCounterDiv = null ;
//element containing tot nb rows label
this . rowsCounterSpan = null ;
//defines rows counter text
this . rowsCounterText = f . rows _counter _text || "Rows: " ;
this . fromToTextSeparator = f . from _to _text _separator || "-" ;
this . overText = f . over _text || " / " ;
//defines css class rows counter
this . totRowsCssClass = f . tot _rows _css _class || "tot" ;
//callback raised before counter is refreshed
this . onBeforeRefreshCounter = Types . isFn ( f . on _before _refresh _counter ) ? f . on _before _refresh _counter : null ;
//callback raised after counter is refreshed
this . onAfterRefreshCounter = Types . isFn ( f . on _after _refresh _counter ) ? f . on _after _refresh _counter : null ;
this . tf = tf ;
}
_prototypeProperties ( RowsCounter , null , {
init : {
value : function init ( ) {
var tf = this . tf ;
if ( ! tf . hasGrid ( ) && ! tf . isFirstLoad || this . rowsCounterSpan ) {
return ;
}
//rows counter container
var countDiv = Dom . create ( "div" , [ "id" , tf . prfxCounter + tf . id ] ) ;
countDiv . className = this . totRowsCssClass ;
//rows counter label
var countSpan = Dom . create ( "span" , [ "id" , tf . prfxTotRows + tf . id ] ) ;
var countText = Dom . create ( "span" , [ "id" , tf . prfxTotRowsTxt + tf . id ] ) ;
countText . appendChild ( Dom . text ( this . rowsCounterText ) ) ;
// counter is added to defined element
if ( ! this . rowsCounterTgtId ) {
tf . setToolbar ( ) ;
}
var targetEl = ! this . rowsCounterTgtId ? tf . lDiv : Dom . id ( this . rowsCounterTgtId ) ;
//IE only: clears all for sure
if ( this . rowsCounterDiv && Helpers . isIE ( ) ) {
this . rowsCounterDiv . outerHTML = "" ;
}
//default container: 'lDiv'
if ( ! this . rowsCounterTgtId ) {
countDiv . appendChild ( countText ) ;
countDiv . appendChild ( countSpan ) ;
targetEl . appendChild ( countDiv ) ;
} else {
//custom container, no need to append statusDiv
targetEl . appendChild ( countText ) ;
targetEl . appendChild ( countSpan ) ;
}
this . rowsCounterDiv = countDiv ;
this . rowsCounterSpan = countSpan ;
this . refresh ( ) ;
} ,
writable : true ,
configurable : true
} ,
refresh : {
value : function refresh ( p ) {
if ( ! this . rowsCounterSpan ) {
return ;
}
var tf = this . tf ;
if ( this . onBeforeRefreshCounter ) {
this . onBeforeRefreshCounter . call ( null , tf , this . rowsCounterSpan ) ;
}
var totTxt ;
if ( ! tf . paging ) {
if ( p && p !== "" ) {
totTxt = p ;
} else {
totTxt = tf . nbFilterableRows - tf . nbHiddenRows - ( tf . hasVisibleRows ? tf . visibleRows . length : 0 ) ;
}
} else {
var paging = tf . Cpt . paging ;
if ( paging ) {
//paging start row
var paging _start _row = parseInt ( paging . startPagingRow , 10 ) + ( tf . nbVisibleRows > 0 ? 1 : 0 ) ;
var paging _end _row = paging _start _row + paging . pagingLength - 1 <= tf . nbVisibleRows ? paging _start _row + paging . pagingLength - 1 : tf . nbVisibleRows ;
totTxt = paging _start _row + this . fromToTextSeparator + paging _end _row + this . overText + tf . nbVisibleRows ;
}
}
this . rowsCounterSpan . innerHTML = totTxt ;
if ( this . onAfterRefreshCounter ) {
this . onAfterRefreshCounter . call ( null , tf , this . rowsCounterSpan , totTxt ) ;
}
} ,
writable : true ,
configurable : true
} ,
destroy : {
value : function destroy ( ) {
var tf = this . tf ;
if ( ! tf . hasGrid ( ) ) {
return ;
}
if ( ! this . rowsCounterSpan ) {
return ;
}
if ( ! this . rowsCounterTgtId && this . rowsCounterDiv ) {
//IE only: clears all for sure
if ( Helpers . isIE ( ) ) {
this . rowsCounterDiv . outerHTML = "" ;
} else {
this . rowsCounterDiv . parentNode . removeChild ( this . rowsCounterDiv ) ;
}
} else {
Dom . id ( this . rowsCounterTgtId ) . innerHTML = "" ;
}
this . rowsCounterSpan = null ;
this . rowsCounterDiv = null ;
} ,
writable : true ,
configurable : true
}
} ) ;
return RowsCounter ;
} ) ( ) ;
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
} ) ;
//# sourceMappingURL=rowsCounter.js.map;
define ( 'modules/statusBar' , [ "exports" , "../dom" , "../event" , "../types" , "../helpers" ] , function ( exports , _dom , _event , _types , _helpers ) {
var _prototypeProperties = function ( child , staticProps , instanceProps ) { if ( staticProps ) Object . defineProperties ( child , staticProps ) ; if ( instanceProps ) Object . defineProperties ( child . prototype , instanceProps ) ; } ;
var _classCallCheck = function ( instance , Constructor ) { if ( ! ( instance instanceof Constructor ) ) { throw new TypeError ( "Cannot call a class as a function" ) ; } } ;
var Dom = _dom . Dom ;
var Event = _event . Event ;
var Types = _types . Types ;
var Helpers = _helpers . Helpers ;
var global = window ;
var StatusBar = exports . StatusBar = ( function ( ) {
/ * *
* Status bar UI component
* @ param { Object } tf TableFilter instance
* /
function StatusBar ( tf ) {
_classCallCheck ( this , StatusBar ) ;
// Configuration object
var f = tf . config ( ) ;
//id of custom container element
this . statusBarTgtId = f . status _bar _target _id || null ;
//element containing status bar label
this . statusBarDiv = null ;
//status bar
this . statusBarSpan = null ;
//status bar label
this . statusBarSpanText = null ;
//defines status bar text
this . statusBarText = f . status _bar _text || "" ;
//defines css class status bar
this . statusBarCssClass = f . status _bar _css _class || "status" ;
//delay for status bar clearing
this . statusBarCloseDelay = 250 ;
//calls function before message is displayed
this . onBeforeShowMsg = Types . isFn ( f . on _before _show _msg ) ? f . on _before _show _msg : null ;
//calls function after message is displayed
this . onAfterShowMsg = Types . isFn ( f . on _after _show _msg ) ? f . on _after _show _msg : null ;
this . tf = tf ;
}
_prototypeProperties ( StatusBar , null , {
init : {
value : function init ( ) {
var tf = this . tf ;
if ( ! tf . hasGrid ( ) && ! tf . isFirstLoad ) {
return ;
}
//status bar container
var statusDiv = Dom . create ( "div" , [ "id" , tf . prfxStatus + tf . id ] ) ;
statusDiv . className = this . statusBarCssClass ;
//status bar label
var statusSpan = Dom . create ( "span" , [ "id" , tf . prfxStatusSpan + tf . id ] ) ;
//preceding text
var statusSpanText = Dom . create ( "span" , [ "id" , tf . prfxStatusTxt + tf . id ] ) ;
statusSpanText . appendChild ( Dom . text ( this . statusBarText ) ) ;
// target element container
if ( ! this . statusBarTgtId ) {
tf . setToolbar ( ) ;
}
var targetEl = ! this . statusBarTgtId ? tf . lDiv : Dom . id ( this . statusBarTgtId ) ;
// TODO: use alternative to outerHTML
if ( this . statusBarDiv && Helpers . isIE ( ) ) {
this . statusBarDiv . outerHTML = "" ;
}
//default container: 'lDiv'
if ( ! this . statusBarTgtId ) {
statusDiv . appendChild ( statusSpanText ) ;
statusDiv . appendChild ( statusSpan ) ;
targetEl . appendChild ( statusDiv ) ;
} else {
// custom container, no need to append statusDiv
targetEl . appendChild ( statusSpanText ) ;
targetEl . appendChild ( statusSpan ) ;
}
this . statusBarDiv = statusDiv ;
this . statusBarSpan = statusSpan ;
this . statusBarSpanText = statusSpanText ;
} ,
writable : true ,
configurable : true
} ,
message : {
value : function message ( ) {
var _this = this ;
var t = arguments [ 0 ] === undefined ? "" : arguments [ 0 ] ;
var tf = this . tf ;
if ( ! tf . statusBar || ! this . statusBarSpan ) {
return ;
}
if ( this . onBeforeShowMsg ) {
this . onBeforeShowMsg . call ( null , this . tf , t ) ;
}
var d = t === "" ? this . statusBarCloseDelay : 1 ;
global . setTimeout ( function ( ) {
_this . statusBarSpan . innerHTML = t ;
if ( _this . onAfterShowMsg ) {
_this . onAfterShowMsg . call ( null , _this . tf , t ) ;
}
} , d ) ;
} ,
writable : true ,
configurable : true
} ,
destroy : {
value : function destroy ( ) {
var tf = this . tf ;
if ( ! tf . hasGrid ( ) || ! this . statusBarDiv ) {
return ;
}
this . statusBarDiv . innerHTML = "" ;
this . statusBarDiv . parentNode . removeChild ( this . statusBarDiv ) ;
this . statusBarSpan = null ;
this . statusBarSpanText = null ;
this . statusBarDiv = null ;
} ,
writable : true ,
configurable : true
}
} ) ;
return StatusBar ;
} ) ( ) ;
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
} ) ;
//# sourceMappingURL=statusBar.js.map;
define ( 'modules/paging' , [ "exports" , "../dom" , "../types" , "../string" , "../helpers" , "../event" ] , function ( exports , _dom , _types , _string , _helpers , _event ) {
var _prototypeProperties = function ( child , staticProps , instanceProps ) { if ( staticProps ) Object . defineProperties ( child , staticProps ) ; if ( instanceProps ) Object . defineProperties ( child . prototype , instanceProps ) ; } ;
var _classCallCheck = function ( instance , Constructor ) { if ( ! ( instance instanceof Constructor ) ) { throw new TypeError ( "Cannot call a class as a function" ) ; } } ;
var Dom = _dom . Dom ;
var Types = _types . Types ;
var Str = _string . Str ;
var Helpers = _helpers . Helpers ;
var Event = _event . Event ;
var Paging = exports . Paging = ( function ( ) {
/ * *
* Pagination component
* @ param { Object } tf TableFilter instance
* /
function Paging ( tf ) {
_classCallCheck ( this , Paging ) ;
// Configuration object
var f = tf . config ( ) ;
//css class for paging buttons (previous,next,etc.)
this . btnPageCssClass = f . paging _btn _css _class || "pgInp" ;
//stores paging select element
this . pagingSlc = null ;
//results per page select element
this . resultsPerPageSlc = null ;
//id of container element
this . pagingTgtId = f . paging _target _id || null ;
//defines table paging length
this . pagingLength = ! isNaN ( f . paging _length ) ? f . paging _length : 10 ;
//id of container element
this . resultsPerPageTgtId = f . results _per _page _target _id || null ;
//css class for paging select element
this . pgSlcCssClass = f . paging _slc _css _class || "pgSlc" ;
//css class for paging input element
this . pgInpCssClass = f . paging _inp _css _class || "pgNbInp" ;
//stores results per page text and values
this . resultsPerPage = f . results _per _page || null ;
//enables/disables results per page drop-down
this . hasResultsPerPage = Types . isArray ( this . resultsPerPage ) ;
//defines css class for results per page select
this . resultsSlcCssClass = f . results _slc _css _class || "rspg" ;
//css class for label preceding results per page select
this . resultsSpanCssClass = f . results _span _css _class || "rspgSpan" ;
//1st row index of current page
this . startPagingRow = 0 ;
//total nb of pages
this . nbPages = 0 ;
//current page nb
this . currentPageNb = 1 ;
//defines next page button text
this . btnNextPageText = f . btn _next _page _text || ">" ;
//defines previous page button text
this . btnPrevPageText = f . btn _prev _page _text || "<" ;
//defines last page button text
this . btnLastPageText = f . btn _last _page _text || ">|" ;
//defines first page button text
this . btnFirstPageText = f . btn _first _page _text || "|<" ;
//defines next page button html
this . btnNextPageHtml = f . btn _next _page _html || ( ! tf . enableIcons ? null : "<input type=\"button\" value=\"\" class=\"" + this . btnPageCssClass + " nextPage\" title=\"Next page\" />" ) ;
//defines previous page button html
this . btnPrevPageHtml = f . btn _prev _page _html || ( ! tf . enableIcons ? null : "<input type=\"button\" value=\"\" class=\"" + this . btnPageCssClass + " previousPage\" title=\"Previous page\" />" ) ;
//defines last page button html
this . btnFirstPageHtml = f . btn _first _page _html || ( ! tf . enableIcons ? null : "<input type=\"button\" value=\"\" class=\"" + this . btnPageCssClass + " firstPage\" title=\"First page\" />" ) ;
//defines previous page button html
this . btnLastPageHtml = f . btn _last _page _html || ( ! tf . enableIcons ? null : "<input type=\"button\" value=\"\" class=\"" + this . btnPageCssClass + " lastPage\" title=\"Last page\" />" ) ;
//defines text preceeding page selector drop-down
this . pageText = f . page _text || " Page " ;
//defines text after page selector drop-down
this . ofText = f . of _text || " of " ;
//css class for span containing tot nb of pages
this . nbPgSpanCssClass = f . nb _pages _css _class || "nbpg" ;
//enables/disables paging buttons
this . hasPagingBtns = f . paging _btns === false ? false : true ;
//defines previous page button html
this . pageSelectorType = f . page _selector _type || tf . fltTypeSlc ;
//calls function before page is changed
this . onBeforeChangePage = Types . isFn ( f . on _before _change _page ) ? f . on _before _change _page : null ;
//calls function before page is changed
this . onAfterChangePage = Types . isFn ( f . on _after _change _page ) ? f . on _after _change _page : null ;
var start _row = this . refRow ;
var nrows = this . nbRows ;
//calculates page nb
this . nbPages = Math . ceil ( ( nrows - start _row ) / this . pagingLength ) ;
//Paging elements events
var o = this ;
// Paging DOM events
this . evt = {
slcIndex : function slcIndex ( ) {
return o . pageSelectorType === tf . fltTypeSlc ? o . pagingSlc . options . selectedIndex : parseInt ( o . pagingSlc . value , 10 ) - 1 ;
} ,
nbOpts : function nbOpts ( ) {
return o . pageSelectorType === tf . fltTypeSlc ? parseInt ( o . pagingSlc . options . length , 10 ) - 1 : o . nbPages - 1 ;
} ,
next : function next ( ) {
var nextIndex = o . evt . slcIndex ( ) < o . evt . nbOpts ( ) ? o . evt . slcIndex ( ) + 1 : 0 ;
o . changePage ( nextIndex ) ;
} ,
prev : function prev ( ) {
var prevIndex = o . evt . slcIndex ( ) > 0 ? o . evt . slcIndex ( ) - 1 : o . evt . nbOpts ( ) ;
o . changePage ( prevIndex ) ;
} ,
last : function last ( ) {
o . changePage ( o . evt . nbOpts ( ) ) ;
} ,
first : function first ( ) {
o . changePage ( 0 ) ;
} ,
_detectKey : function _detectKey ( e ) {
var key = tf . Evt . getKeyCode ( e ) ;
if ( key === 13 ) {
if ( tf . sorted ) {
tf . filter ( ) ;
o . changePage ( o . evt . slcIndex ( ) ) ;
} else {
o . changePage ( ) ;
}
this . blur ( ) ;
}
} ,
slcPagesChange : null ,
nextEvt : null ,
prevEvt : null ,
lastEvt : null ,
firstEvt : null
} ;
this . tf = tf ;
}
_prototypeProperties ( Paging , null , {
init : {
/ * *
* Initialize DOM elements
* /
value : function init ( ) {
var _this = this ;
var slcPages ;
var tf = this . tf ;
var evt = this . evt ;
// Check resultsPerPage is in expected format and initialise the
// results per page component
if ( this . hasResultsPerPage ) {
if ( this . resultsPerPage . length < 2 ) {
this . hasResultsPerPage = false ;
} else {
this . pagingLength = this . resultsPerPage [ 1 ] [ 0 ] ;
this . setResultsPerPage ( ) ;
}
}
/ * = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
- onchange event for paging select
=== === === === === === === === === === === === === === === === === == * /
evt . slcPagesChange = function ( event ) {
// if(evt._Paging._OnSlcPagesChangeEvt){
// evt._Paging._OnSlcPagesChangeEvt();
// }
_this . changePage ( ) ;
event . target . blur ( ) ;
} ;
// Paging drop-down list selector
if ( this . pageSelectorType === tf . fltTypeSlc ) {
slcPages = Dom . create ( tf . fltTypeSlc , [ "id" , tf . prfxSlcPages + tf . id ] ) ;
slcPages . className = this . pgSlcCssClass ;
Event . add ( slcPages , "change" , evt . slcPagesChange ) ;
}
// Paging input selector
if ( this . pageSelectorType === tf . fltTypeInp ) {
slcPages = Dom . create ( tf . fltTypeInp , [ "id" , tf . prfxSlcPages + tf . id ] , [ "value" , this . currentPageNb ] ) ;
slcPages . className = this . pgInpCssClass ;
Event . add ( slcPages , "keypress" , evt . _detectKey ) ;
}
// btns containers
var btnNextSpan = Dom . create ( "span" , [ "id" , tf . prfxBtnNextSpan + tf . id ] ) ;
var btnPrevSpan = Dom . create ( "span" , [ "id" , tf . prfxBtnPrevSpan + tf . id ] ) ;
var btnLastSpan = Dom . create ( "span" , [ "id" , tf . prfxBtnLastSpan + tf . id ] ) ;
var btnFirstSpan = Dom . create ( "span" , [ "id" , tf . prfxBtnFirstSpan + tf . id ] ) ;
if ( this . hasPagingBtns ) {
// Next button
if ( ! this . btnNextPageHtml ) {
var btn _next = Dom . create ( tf . fltTypeInp , [ "id" , tf . prfxBtnNext + tf . id ] , [ "type" , "button" ] , [ "value" , this . btnNextPageText ] , [ "title" , "Next" ] ) ;
btn _next . className = this . btnPageCssClass ;
Event . add ( btn _next , "click" , evt . next ) ;
btnNextSpan . appendChild ( btn _next ) ;
} else {
btnNextSpan . innerHTML = this . btnNextPageHtml ;
Event . add ( btnNextSpan , "click" , evt . next ) ;
}
// Previous button
if ( ! this . btnPrevPageHtml ) {
var btn _prev = Dom . create ( tf . fltTypeInp , [ "id" , tf . prfxBtnPrev + tf . id ] , [ "type" , "button" ] , [ "value" , this . btnPrevPageText ] , [ "title" , "Previous" ] ) ;
btn _prev . className = this . btnPageCssClass ;
Event . add ( btn _prev , "click" , evt . prev ) ;
btnPrevSpan . appendChild ( btn _prev ) ;
} else {
btnPrevSpan . innerHTML = this . btnPrevPageHtml ;
Event . add ( btnPrevSpan , "click" , evt . prev ) ;
}
// Last button
if ( ! this . btnLastPageHtml ) {
var btn _last = Dom . create ( tf . fltTypeInp , [ "id" , tf . prfxBtnLast + tf . id ] , [ "type" , "button" ] , [ "value" , this . btnLastPageText ] , [ "title" , "Last" ] ) ;
btn _last . className = this . btnPageCssClass ;
Event . add ( btn _last , "click" , evt . last ) ;
btnLastSpan . appendChild ( btn _last ) ;
} else {
btnLastSpan . innerHTML = this . btnLastPageHtml ;
Event . add ( btnLastSpan , "click" , evt . last ) ;
}
// First button
if ( ! this . btnFirstPageHtml ) {
var btn _first = Dom . create ( tf . fltTypeInp , [ "id" , tf . prfxBtnFirst + tf . id ] , [ "type" , "button" ] , [ "value" , this . btnFirstPageText ] , [ "title" , "First" ] ) ;
btn _first . className = this . btnPageCssClass ;
Event . add ( btn _first , "click" , evt . first ) ;
btnFirstSpan . appendChild ( btn _first ) ;
} else {
btnFirstSpan . innerHTML = this . btnFirstPageHtml ;
Event . add ( btnFirstSpan , "click" , evt . first ) ;
}
}
// paging elements (buttons+drop-down list) are added to defined element
if ( ! this . pagingTgtId ) {
tf . setToolbar ( ) ;
}
var targetEl = ! this . pagingTgtId ? tf . mDiv : Dom . id ( this . pagingTgtId ) ;
targetEl . appendChild ( btnFirstSpan ) ;
targetEl . appendChild ( btnPrevSpan ) ;
var pgBeforeSpan = Dom . create ( "span" , [ "id" , tf . prfxPgBeforeSpan + tf . id ] ) ;
pgBeforeSpan . appendChild ( Dom . text ( this . pageText ) ) ;
pgBeforeSpan . className = this . nbPgSpanCssClass ;
targetEl . appendChild ( pgBeforeSpan ) ;
targetEl . appendChild ( slcPages ) ;
var pgAfterSpan = Dom . create ( "span" , [ "id" , tf . prfxPgAfterSpan + tf . id ] ) ;
pgAfterSpan . appendChild ( Dom . text ( this . ofText ) ) ;
pgAfterSpan . className = this . nbPgSpanCssClass ;
targetEl . appendChild ( pgAfterSpan ) ;
var pgspan = Dom . create ( "span" , [ "id" , tf . prfxPgSpan + tf . id ] ) ;
pgspan . className = this . nbPgSpanCssClass ;
pgspan . appendChild ( Dom . text ( " " + this . nbPages + " " ) ) ;
targetEl . appendChild ( pgspan ) ;
targetEl . appendChild ( btnNextSpan ) ;
targetEl . appendChild ( btnLastSpan ) ;
this . pagingSlc = Dom . id ( tf . prfxSlcPages + tf . id ) ;
// if this.rememberGridValues==true this.setPagingInfo() is called
// in ResetGridValues() method
if ( ! tf . rememberGridValues || this . isPagingRemoved ) {
this . setPagingInfo ( ) ;
}
if ( ! tf . fltGrid ) {
tf . ValidateAllRows ( ) ;
this . setPagingInfo ( tf . validRowsIndex ) ;
}
this . isPagingRemoved = false ;
} ,
writable : true ,
configurable : true
} ,
addPaging : {
/ * *
* Add paging when filters are already instanciated
* @ param { Boolean } filterTable Execute filtering once paging instanciated
* /
value : function addPaging ( ) {
var filterTable = arguments [ 0 ] === undefined ? false : arguments [ 0 ] ;
var tf = this . tf ;
if ( ! tf . hasGrid ( ) || tf . paging ) {
return ;
}
tf . paging = true ;
this . isPagingRemoved = true ;
this . init ( ) ;
tf . resetValues ( ) ;
if ( filterTable ) {
tf . filter ( ) ;
}
} ,
writable : true ,
configurable : true
} ,
setPagingInfo : {
/ * *
* Calculate number of pages based on valid rows
* Refresh paging select according to number of pages
* @ param { Array } validRows Collection of valid rows
* /
value : function setPagingInfo ( validRows ) {
var tf = this . tf ;
var rows = tf . tbl . rows ;
var mdiv = ! this . pagingTgtId ? tf . mDiv : Dom . id ( this . pagingTgtId ) ;
var pgspan = Dom . id ( tf . prfxPgSpan + tf . id ) ;
//stores valid rows indexes
if ( validRows && validRows . length > 0 ) {
tf . validRowsIndex = validRows ;
} else {
//re-sets valid rows indexes array
tf . validRowsIndex = [ ] ;
//counts rows to be grouped
for ( var j = tf . refRow ; j < tf . nbRows ; j ++ ) {
var row = rows [ j ] ;
if ( ! row ) {
continue ;
}
var isRowValid = row . getAttribute ( "validRow" ) ;
if ( isRowValid === "true" || ! isRowValid ) {
tf . validRowsIndex . push ( j ) ;
}
}
}
//calculate nb of pages
this . nbPages = Math . ceil ( tf . validRowsIndex . length / this . pagingLength ) ;
//refresh page nb span
pgspan . innerHTML = this . nbPages ;
//select clearing shortcut
if ( this . pageSelectorType === tf . fltTypeSlc ) {
this . pagingSlc . innerHTML = "" ;
}
if ( this . nbPages > 0 ) {
mdiv . style . visibility = "visible" ;
if ( this . pageSelectorType === tf . fltTypeSlc ) {
for ( var z = 0 ; z < this . nbPages ; z ++ ) {
var currOpt = new Option ( z + 1 , z * this . pagingLength , false , false ) ;
this . pagingSlc . options [ z ] = currOpt ;
}
} else {
//input type
this . pagingSlc . value = this . currentPageNb ;
}
} else {
/*** if no results paging select and buttons are hidden ***/
mdiv . style . visibility = "hidden" ;
}
this . groupByPage ( tf . validRowsIndex ) ;
} ,
writable : true ,
configurable : true
} ,
groupByPage : {
/ * *
* Group table rows by page and display valid rows
* @ param { Array } validRows Collection of valid rows
* /
value : function groupByPage ( validRows ) {
var tf = this . tf ;
var rows = tf . tbl . rows ;
var paging _end _row = parseInt ( this . startPagingRow , 10 ) + parseInt ( this . pagingLength , 10 ) ;
//store valid rows indexes
if ( validRows ) {
tf . validRowsIndex = validRows ;
}
//this loop shows valid rows of current page
for ( var h = 0 ; h < tf . validRowsIndex . length ; h ++ ) {
var r = rows [ tf . validRowsIndex [ h ] ] ;
if ( h >= this . startPagingRow && h < paging _end _row ) {
if ( r . getAttribute ( "validRow" ) === "true" || ! r . getAttribute ( "validRow" ) ) {
r . style . display = "" ;
}
if ( tf . alternateBgs && tf . Cpt . alternateRows ) {
tf . Cpt . alternateRows . setRowBg ( tf . validRowsIndex [ h ] , h ) ;
}
} else {
r . style . display = "none" ;
if ( tf . alternateBgs && tf . Cpt . alternateRows ) {
tf . Cpt . alternateRows . removeRowBg ( tf . validRowsIndex [ h ] ) ;
}
}
}
tf . nbVisibleRows = tf . validRowsIndex . length ;
tf . isStartBgAlternate = false ;
//re-applies filter behaviours after filtering process
tf . applyGridProps ( ) ;
} ,
writable : true ,
configurable : true
} ,
setPage : {
/ * *
* Show page based on passed param value ( string or number ) :
* @ param { String } or { Number } cmd possible string values : 'next' ,
* 'previous' , 'last' , 'first' or page number as per param
* /
value : function setPage ( cmd ) {
var tf = this . tf ;
if ( ! tf . hasGrid ( ) || ! this . paging ) {
return ;
}
var btnEvt = this . evt ,
cmdtype = typeof cmd ;
if ( cmdtype === "string" ) {
switch ( Str . lower ( cmd ) ) {
case "next" :
btnEvt . next ( ) ;
break ;
case "previous" :
btnEvt . prev ( ) ;
break ;
case "last" :
btnEvt . last ( ) ;
break ;
case "first" :
btnEvt . first ( ) ;
break ;
default :
btnEvt . next ( ) ;
break ;
}
} else if ( cmdtype === "number" ) {
this . changePage ( cmd - 1 ) ;
}
} ,
writable : true ,
configurable : true
} ,
setResultsPerPage : {
/ * *
* Generates UI elements for the number of results per page drop - down
* /
value : function setResultsPerPage ( ) {
var _this = this ;
var tf = this . tf ;
var evt = this . evt ;
if ( ! tf . hasGrid ( ) && ! tf . isFirstLoad ) {
return ;
}
if ( this . resultsPerPageSlc || ! this . resultsPerPage ) {
return ;
}
/ * = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
- onchange event for results per page select
=== === === === === === === === === === === === === === === === === == * /
evt . slcResultsChange = function ( ev ) {
_this . changeResultsPerPage ( ) ;
ev . target . blur ( ) ;
} ;
var slcR = Dom . create ( tf . fltTypeSlc , [ "id" , tf . prfxSlcResults + tf . id ] ) ;
slcR . className = tf . resultsSlcCssClass ;
var slcRText = this . resultsPerPage [ 0 ] ,
slcROpts = this . resultsPerPage [ 1 ] ;
var slcRSpan = Dom . create ( "span" , [ "id" , tf . prfxSlcResultsTxt + tf . id ] ) ;
slcRSpan . className = this . resultsSpanCssClass ;
// results per page select is added to external element
if ( ! this . resultsPerPageTgtId ) {
tf . setToolbar ( ) ;
}
var targetEl = ! this . resultsPerPageTgtId ? tf . rDiv : Dom . id ( this . resultsPerPageTgtId ) ;
slcRSpan . appendChild ( Dom . text ( slcRText ) ) ;
targetEl . appendChild ( slcRSpan ) ;
targetEl . appendChild ( slcR ) ;
this . resultsPerPageSlc = Dom . id ( tf . prfxSlcResults + tf . id ) ;
for ( var r = 0 ; r < slcROpts . length ; r ++ ) {
var currOpt = new Option ( slcROpts [ r ] , slcROpts [ r ] , false , false ) ;
this . resultsPerPageSlc . options [ r ] = currOpt ;
}
Event . add ( slcR , "change" , evt . slcResultsChange ) ;
} ,
writable : true ,
configurable : true
} ,
removeResultsPerPage : {
/ * *
* Remove number of results per page UI elements
* /
value : function removeResultsPerPage ( ) {
var tf = this . tf ;
if ( ! tf . hasGrid ( ) || ! this . resultsPerPageSlc || ! this . resultsPerPage ) {
return ;
}
var slcR = this . resultsPerPageSlc ,
slcRSpan = Dom . id ( tf . prfxSlcResultsTxt + tf . id ) ;
if ( slcR ) {
slcR . parentNode . removeChild ( slcR ) ;
}
if ( slcRSpan ) {
slcRSpan . parentNode . removeChild ( slcRSpan ) ;
}
this . resultsPerPageSlc = null ;
} ,
writable : true ,
configurable : true
} ,
changePage : {
/ * *
* Change the page asynchronously according to passed index
* @ param { Number } index Index of the page ( 0 - n )
* /
value : function changePage ( index ) {
var tf = this . tf ;
var evt = tf . Evt ;
tf . EvtManager ( evt . name . changepage , { pgIndex : index } ) ;
} ,
writable : true ,
configurable : true
} ,
changeResultsPerPage : {
/ * *
* Change rows asynchronously according to page results
* /
value : function changeResultsPerPage ( ) {
var tf = this . tf ;
var evt = tf . Evt ;
tf . EvtManager ( evt . name . changeresultsperpage ) ;
} ,
writable : true ,
configurable : true
} ,
resetPage : {
/ * *
* Re - set asynchronously page nb at page re - load
* /
value : function resetPage ( ) {
var tf = this . tf ;
var evt = tf . Evt ;
tf . EvtManager ( evt . name . resetpage ) ;
} ,
writable : true ,
configurable : true
} ,
resetPageLength : {
/ * *
* Re - set asynchronously page length at page re - load
* /
value : function resetPageLength ( ) {
var tf = this . tf ;
var evt = tf . Evt ;
tf . EvtManager ( evt . name . resetpagelength ) ;
} ,
writable : true ,
configurable : true
} ,
_changePage : {
/ * *
* Change the page according to passed index
* @ param { Number } index Index of the page ( 0 - n )
* /
value : function _changePage ( index ) {
var tf = this . tf ;
if ( ! tf . paging ) {
return ;
}
if ( index === null ) {
index = this . pageSelectorType === tf . fltTypeSlc ? this . pagingSlc . options . selectedIndex : this . pagingSlc . value - 1 ;
}
if ( index >= 0 && index <= this . nbPages - 1 ) {
if ( this . onBeforeChangePage ) {
this . onBeforeChangePage . call ( null , this , index ) ;
}
this . currentPageNb = parseInt ( index , 10 ) + 1 ;
if ( this . pageSelectorType === tf . fltTypeSlc ) {
this . pagingSlc . options [ index ] . selected = true ;
} else {
this . pagingSlc . value = this . currentPageNb ;
}
if ( tf . rememberPageNb ) {
tf . Cpt . store . savePageNb ( tf . pgNbCookie ) ;
}
this . startPagingRow = this . pageSelectorType === tf . fltTypeSlc ? this . pagingSlc . value : index * this . pagingLength ;
this . groupByPage ( ) ;
if ( this . onAfterChangePage ) {
this . onAfterChangePage . call ( null , this , index ) ;
}
}
} ,
writable : true ,
configurable : true
} ,
_changeResultsPerPage : {
/ * *
* Change rows according to page results
* /
value : function _changeResultsPerPage ( ) {
var tf = this . tf ;
if ( ! tf . paging ) {
return ;
}
var slcR = this . resultsPerPageSlc ;
var slcPagesSelIndex = this . pageSelectorType === tf . fltTypeSlc ? this . pagingSlc . selectedIndex : parseInt ( this . pagingSlc . value - 1 , 10 ) ;
this . pagingLength = parseInt ( slcR . options [ slcR . selectedIndex ] . value , 10 ) ;
this . startPagingRow = this . pagingLength * slcPagesSelIndex ;
if ( ! isNaN ( this . pagingLength ) ) {
if ( this . startPagingRow >= tf . nbFilterableRows ) {
this . startPagingRow = tf . nbFilterableRows - this . pagingLength ;
}
this . setPagingInfo ( ) ;
if ( this . pageSelectorType === tf . fltTypeSlc ) {
var slcIndex = this . pagingSlc . options . length - 1 <= slcPagesSelIndex ? this . pagingSlc . options . length - 1 : slcPagesSelIndex ;
this . pagingSlc . options [ slcIndex ] . selected = true ;
}
if ( tf . rememberPageLen ) {
tf . Cpt . store . savePageLength ( tf . pgLenCookie ) ;
}
}
} ,
writable : true ,
configurable : true
} ,
_resetPage : {
/ * *
* Re - set page nb at page re - load
* /
value : function _resetPage ( name ) {
var tf = this . tf ;
var pgnb = tf . Cpt . store . getPageNb ( name ) ;
if ( pgnb !== "" ) {
this . changePage ( pgnb - 1 ) ;
}
} ,
writable : true ,
configurable : true
} ,
_resetPageLength : {
/ * *
* Re - set page length at page re - load
* /
value : function _resetPageLength ( name ) {
var tf = this . tf ;
if ( ! tf . paging ) {
return ;
}
var pglenIndex = tf . Cpt . store . getPageLength ( name ) ;
if ( pglenIndex !== "" ) {
this . resultsPerPageSlc . options [ pglenIndex ] . selected = true ;
this . changeResultsPerPage ( ) ;
}
} ,
writable : true ,
configurable : true
} ,
destroy : {
/ * *
* Remove paging feature
* /
value : function destroy ( ) {
var tf = this . tf ;
if ( ! tf . hasGrid ( ) ) {
return ;
}
// btns containers
var btnNextSpan , btnPrevSpan , btnLastSpan , btnFirstSpan ;
var pgBeforeSpan , pgAfterSpan , pgspan ;
btnNextSpan = Dom . id ( tf . prfxBtnNextSpan + tf . id ) ;
btnPrevSpan = Dom . id ( tf . prfxBtnPrevSpan + tf . id ) ;
btnLastSpan = Dom . id ( tf . prfxBtnLastSpan + tf . id ) ;
btnFirstSpan = Dom . id ( tf . prfxBtnFirstSpan + tf . id ) ;
//span containing 'Page' text
pgBeforeSpan = Dom . id ( tf . prfxPgBeforeSpan + tf . id ) ;
//span containing 'of' text
pgAfterSpan = Dom . id ( tf . prfxPgAfterSpan + tf . id ) ;
//span containing nb of pages
pgspan = Dom . id ( tf . prfxPgSpan + tf . id ) ;
var evt = this . evt ;
if ( this . pagingSlc ) {
if ( this . pageSelectorType === tf . fltTypeSlc ) {
Event . remove ( this . pagingSlc , "change" , evt . slcPagesChange ) ;
} else if ( this . pageSelectorType === tf . fltTypeInp ) {
Event . remove ( this . pagingSlc , "keypress" , evt . _detectKey ) ;
}
this . pagingSlc . parentNode . removeChild ( this . pagingSlc ) ;
}
if ( btnNextSpan ) {
Event . remove ( btnNextSpan , "click" , evt . next ) ;
btnNextSpan . parentNode . removeChild ( btnNextSpan ) ;
}
if ( btnPrevSpan ) {
Event . remove ( btnPrevSpan , "click" , evt . prev ) ;
btnPrevSpan . parentNode . removeChild ( btnPrevSpan ) ;
}
if ( btnLastSpan ) {
Event . remove ( btnLastSpan , "click" , evt . last ) ;
btnLastSpan . parentNode . removeChild ( btnLastSpan ) ;
}
if ( btnFirstSpan ) {
Event . remove ( btnFirstSpan , "click" , evt . first ) ;
btnFirstSpan . parentNode . removeChild ( btnFirstSpan ) ;
}
if ( pgBeforeSpan ) {
pgBeforeSpan . parentNode . removeChild ( pgBeforeSpan ) ;
}
if ( pgAfterSpan ) {
pgAfterSpan . parentNode . removeChild ( pgAfterSpan ) ;
}
if ( pgspan ) {
pgspan . parentNode . removeChild ( pgspan ) ;
}
if ( this . hasResultsPerPage ) {
this . removeResultsPerPage ( ) ;
}
this . pagingSlc = null ;
this . nbPages = 0 ;
this . isPagingRemoved = true ;
tf . paging = false ;
} ,
writable : true ,
configurable : true
}
} ) ;
return Paging ;
} ) ( ) ;
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
} ) ;
//# sourceMappingURL=paging.js.map;
define ( 'modules/clearButton' , [ "exports" , "../dom" , "../event" ] , function ( exports , _dom , _event ) {
var _prototypeProperties = function ( child , staticProps , instanceProps ) { if ( staticProps ) Object . defineProperties ( child , staticProps ) ; if ( instanceProps ) Object . defineProperties ( child . prototype , instanceProps ) ; } ;
var _classCallCheck = function ( instance , Constructor ) { if ( ! ( instance instanceof Constructor ) ) { throw new TypeError ( "Cannot call a class as a function" ) ; } } ;
var Dom = _dom . Dom ;
var Event = _event . Event ;
var ClearButton = exports . ClearButton = ( function ( ) {
/ * *
* Clear button component
* @ param { Object } tf TableFilter instance
* /
function ClearButton ( tf ) {
_classCallCheck ( this , ClearButton ) ;
// Configuration object
var f = tf . config ( ) ;
//id of container element
this . btnResetTgtId = f . btn _reset _target _id || null ;
//reset button element
this . btnResetEl = null ;
//defines reset text
this . btnResetText = f . btn _reset _text || "Reset" ;
//defines reset button tooltip
this . btnResetTooltip = f . btn _reset _tooltip || "Clear filters" ;
//defines reset button innerHtml
this . btnResetHtml = f . btn _reset _html || ( ! tf . enableIcons ? null : "<input type=\"button\" value=\"\" class=\"" + tf . btnResetCssClass + "\" " + "title=\"" + this . btnResetTooltip + "\" />" ) ;
this . tf = tf ;
}
_prototypeProperties ( ClearButton , null , {
onClick : {
value : function onClick ( ) {
this . tf . clearFilters ( ) ;
} ,
writable : true ,
configurable : true
} ,
init : {
/ * *
* Build DOM elements
* /
value : function init ( ) {
var _this = this ;
var tf = this . tf ;
if ( ! tf . hasGrid ( ) && ! tf . isFirstLoad && tf . btnResetEl ) {
return ;
}
var resetspan = Dom . create ( "span" , [ "id" , tf . prfxResetSpan + tf . id ] ) ;
// reset button is added to defined element
if ( ! this . btnResetTgtId ) {
tf . setToolbar ( ) ;
}
var targetEl = ! this . btnResetTgtId ? tf . rDiv : Dom . id ( this . btnResetTgtId ) ;
targetEl . appendChild ( resetspan ) ;
if ( ! this . btnResetHtml ) {
var fltreset = Dom . create ( "a" , [ "href" , "javascript:void(0);" ] ) ;
fltreset . className = tf . btnResetCssClass ;
fltreset . appendChild ( Dom . text ( this . btnResetText ) ) ;
resetspan . appendChild ( fltreset ) ;
// fltreset.onclick = this.Evt._Clear;
Event . add ( fltreset , "click" , function ( ) {
_this . onClick ( ) ;
} ) ;
} else {
resetspan . innerHTML = this . btnResetHtml ;
var resetEl = resetspan . firstChild ;
// resetEl.onclick = this.Evt._Clear;
Event . add ( resetEl , "click" , function ( ) {
_this . onClick ( ) ;
} ) ;
}
this . btnResetEl = resetspan . firstChild ;
} ,
writable : true ,
configurable : true
} ,
destroy : {
/ * *
* Remove clear button UI
* /
value : function destroy ( ) {
var tf = this . tf ;
if ( ! tf . hasGrid ( ) || ! this . btnResetEl ) {
return ;
}
var resetspan = Dom . id ( tf . prfxResetSpan + tf . id ) ;
if ( resetspan ) {
resetspan . parentNode . removeChild ( resetspan ) ;
}
this . btnResetEl = null ;
} ,
writable : true ,
configurable : true
}
} ) ;
return ClearButton ;
} ) ( ) ;
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
} ) ;
//# sourceMappingURL=clearButton.js.map;
define ( 'modules/help' , [ "exports" , "../dom" , "../event" ] , function ( exports , _dom , _event ) {
var _prototypeProperties = function ( child , staticProps , instanceProps ) { if ( staticProps ) Object . defineProperties ( child , staticProps ) ; if ( instanceProps ) Object . defineProperties ( child . prototype , instanceProps ) ; } ;
var _classCallCheck = function ( instance , Constructor ) { if ( ! ( instance instanceof Constructor ) ) { throw new TypeError ( "Cannot call a class as a function" ) ; } } ;
var Dom = _dom . Dom ;
var Event = _event . Event ;
var Help = exports . Help = ( function ( ) {
/ * *
* Help UI component
* @ param { Object } tf TableFilter instance
* /
function Help ( tf ) {
_classCallCheck ( this , Help ) ;
// Configuration object
var f = tf . config ( ) ;
//id of custom container element for instructions
this . helpInstrTgtId = f . help _instructions _target _id || null ;
//id of custom container element for instructions
this . helpInstrContTgtId = f . help _instructions _container _target _id || null ;
//defines help text
this . helpInstrText = f . help _instructions _text ? f . help _instructions _text : "Use the filters above each column to filter and limit table " + "data. Avanced searches can be performed by using the following " + "operators: <br /><b><</b>, <b><=</b>, <b>></b>, " + "<b>>=</b>, <b>=</b>, <b>*</b>, <b>!</b>, <b>{</b>, <b>}</b>, " + "<b>||</b>,<b>&&</b>, <b>[empty]</b>, <b>[nonempty]</b>, " + "<b>rgx:</b><br/> These operators are described here:<br/>" + "<a href=\"http://tablefilter.free.fr/#operators\" " + "target=\"_blank\">http://tablefilter.free.fr/#operators</a><hr/>" ;
//defines help innerHtml
this . helpInstrHtml = f . help _instructions _html || null ;
//defines reset button text
this . helpInstrBtnText = f . help _instructions _btn _text || "?" ;
//defines reset button innerHtml
this . helpInstrBtnHtml = f . help _instructions _btn _html || null ;
//defines css class for help button
this . helpInstrBtnCssClass = f . help _instructions _btn _css _class || "helpBtn" ;
//defines css class for help container
this . helpInstrContCssClass = f . help _instructions _container _css _class || "helpCont" ;
//help button element
this . helpInstrBtnEl = null ;
//help content div
this . helpInstrContEl = null ;
this . helpInstrDefaultHtml = "<div class=\"helpFooter\"><h4>HTML Table " + "Filter Generator v. " + tf . version + "</h4>" + "<a href=\"http://tablefilter.free.fr\" target=\"_blank\">" + "http://tablefilter.free.fr</a><br/>" + "<span>©2009-" + tf . year + " Max Guglielmi.</span>" + "<div align=\"center\" style=\"margin-top:8px;\">" + "<a href=\"javascript:void(0);\">Close</a></div></div>" ;
this . tf = tf ;
}
_prototypeProperties ( Help , null , {
init : {
value : function init ( ) {
var _this = this ;
if ( this . helpInstrBtnEl ) {
return ;
}
var tf = this . tf ;
var helpspan = Dom . create ( "span" , [ "id" , tf . prfxHelpSpan + tf . id ] ) ;
var helpdiv = Dom . create ( "div" , [ "id" , tf . prfxHelpDiv + tf . id ] ) ;
//help button is added to defined element
if ( ! this . helpInstrTgtId ) {
tf . setToolbar ( ) ;
}
var targetEl = ! this . helpInstrTgtId ? tf . rDiv : Dom . id ( this . helpInstrTgtId ) ;
targetEl . appendChild ( helpspan ) ;
var divContainer = ! this . helpInstrContTgtId ? helpspan : Dom . id ( this . helpInstrContTgtId ) ;
if ( ! this . helpInstrBtnHtml ) {
divContainer . appendChild ( helpdiv ) ;
var helplink = Dom . create ( "a" , [ "href" , "javascript:void(0);" ] ) ;
helplink . className = this . helpInstrBtnCssClass ;
helplink . appendChild ( Dom . text ( this . helpInstrBtnText ) ) ;
helpspan . appendChild ( helplink ) ;
Event . add ( helplink , "click" , function ( ) {
_this . toggle ( ) ;
} ) ;
} else {
helpspan . innerHTML = this . helpInstrBtnHtml ;
var helpEl = helpspan . firstChild ;
Event . add ( helpEl , "click" , function ( ) {
_this . toggle ( ) ;
} ) ;
divContainer . appendChild ( helpdiv ) ;
}
if ( ! this . helpInstrHtml ) {
helpdiv . innerHTML = this . helpInstrText ;
helpdiv . className = this . helpInstrContCssClass ;
Event . add ( helpdiv , "dblclick" , function ( ) {
_this . toggle ( ) ;
} ) ;
} else {
if ( this . helpInstrContTgtId ) {
divContainer . appendChild ( helpdiv ) ;
}
helpdiv . innerHTML = this . helpInstrHtml ;
if ( ! this . helpInstrContTgtId ) {
helpdiv . className = this . helpInstrContCssClass ;
Event . add ( helpdiv , "dblclick" , function ( ) {
_this . toggle ( ) ;
} ) ;
}
}
helpdiv . innerHTML += this . helpInstrDefaultHtml ;
Event . add ( helpdiv , "click" , function ( ) {
_this . toggle ( ) ;
} ) ;
this . helpInstrContEl = helpdiv ;
this . helpInstrBtnEl = helpspan ;
} ,
writable : true ,
configurable : true
} ,
toggle : {
/ * *
* Toggle help pop - up
* /
value : function toggle ( ) {
if ( ! this . helpInstrContEl ) {
return ;
}
var divDisplay = this . helpInstrContEl . style . display ;
if ( divDisplay === "" || divDisplay === "none" ) {
this . helpInstrContEl . style . display = "block" ;
// TODO: use CSS instead for element positioning
var btnLeft = Dom . position ( this . helpInstrBtnEl ) . left ;
if ( ! this . helpInstrContTgtId ) {
this . helpInstrContEl . style . left = btnLeft - this . helpInstrContEl . clientWidth + 25 + "px" ;
}
} else {
this . helpInstrContEl . style . display = "none" ;
}
} ,
writable : true ,
configurable : true
} ,
destroy : {
/ * *
* Remove help UI
* /
value : function destroy ( ) {
if ( ! this . helpInstrBtnEl ) {
return ;
}
this . helpInstrBtnEl . parentNode . removeChild ( this . helpInstrBtnEl ) ;
this . helpInstrBtnEl = null ;
if ( ! this . helpInstrContEl ) {
return ;
}
this . helpInstrContEl . parentNode . removeChild ( this . helpInstrContEl ) ;
this . helpInstrContEl = null ;
} ,
writable : true ,
configurable : true
}
} ) ;
return Help ;
} ) ( ) ;
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
} ) ;
//# sourceMappingURL=help.js.map;
define ( 'modules/alternateRows' , [ "exports" , "../dom" ] , function ( exports , _dom ) {
var _prototypeProperties = function ( child , staticProps , instanceProps ) { if ( staticProps ) Object . defineProperties ( child , staticProps ) ; if ( instanceProps ) Object . defineProperties ( child . prototype , instanceProps ) ; } ;
var _classCallCheck = function ( instance , Constructor ) { if ( ! ( instance instanceof Constructor ) ) { throw new TypeError ( "Cannot call a class as a function" ) ; } } ;
var Dom = _dom . Dom ;
var AlternateRows = exports . AlternateRows = ( function ( ) {
/ * *
* Alternating rows color
* @ param { Object } tf TableFilter instance
* /
function AlternateRows ( tf ) {
_classCallCheck ( this , AlternateRows ) ;
var f = tf . config ( ) ;
//defines css class for even rows
this . evenCss = f . even _row _css _class || "even" ;
//defines css class for odd rows
this . oddCss = f . odd _row _css _class || "odd" ;
this . tf = tf ;
}
_prototypeProperties ( AlternateRows , null , {
init : {
/ * *
* Sets alternating rows color
* /
value : function init ( ) {
if ( ! this . tf . hasGrid ( ) && ! this . tf . isFirstLoad ) {
return ;
}
var rows = this . tf . tbl . rows ;
var noValidRowsIndex = this . tf . validRowsIndex === null ;
//1st index
var beginIndex = noValidRowsIndex ? this . tf . refRow : 0 ;
// nb indexes
var indexLen = noValidRowsIndex ? this . tf . nbFilterableRows + beginIndex : this . tf . validRowsIndex . length ;
var idx = 0 ;
//alternates bg color
for ( var j = beginIndex ; j < indexLen ; j ++ ) {
var rowIdx = noValidRowsIndex ? j : this . tf . validRowsIndex [ j ] ;
this . setRowBg ( rowIdx , idx ) ;
idx ++ ;
}
} ,
writable : true ,
configurable : true
} ,
setRowBg : {
/ * *
* Sets row background color
* @ param { Number } rowIdx Row index
* @ param { Number } idx Valid rows collection index needed to calculate bg
* color
* /
value : function setRowBg ( rowIdx , idx ) {
if ( ! this . tf . alternateBgs || isNaN ( rowIdx ) ) {
return ;
}
var rows = this . tf . tbl . rows ;
var i = ! idx ? rowIdx : idx ;
this . removeRowBg ( rowIdx ) ;
Dom . addClass ( rows [ rowIdx ] , i % 2 ? this . evenCss : this . oddCss ) ;
} ,
writable : true ,
configurable : true
} ,
removeRowBg : {
/ * *
* Removes row background color
* @ param { Number } idx Row index
* /
value : function removeRowBg ( idx ) {
if ( isNaN ( idx ) ) {
return ;
}
var rows = this . tf . tbl . rows ;
Dom . removeClass ( rows [ idx ] , this . oddCss ) ;
Dom . removeClass ( rows [ idx ] , this . evenCss ) ;
} ,
writable : true ,
configurable : true
} ,
remove : {
/ * *
* Removes all row background color
* /
value : function remove ( ) {
if ( ! this . tf . hasGrid ( ) ) {
return ;
}
var row = this . tf . tbl . rows ;
for ( var i = this . tf . refRow ; i < this . tf . nbRows ; i ++ ) {
this . removeRowBg ( i ) ;
}
this . tf . isStartBgAlternate = true ;
} ,
writable : true ,
configurable : true
} ,
enable : {
value : function enable ( ) {
this . tf . alternateBgs = true ;
} ,
writable : true ,
configurable : true
} ,
disable : {
value : function disable ( ) {
this . tf . alternateBgs = false ;
} ,
writable : true ,
configurable : true
}
} ) ;
return AlternateRows ;
} ) ( ) ;
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
} ) ;
//# sourceMappingURL=alternateRows.js.map;
define ( 'modules/colOps' , [ "exports" , "../dom" , "../string" , "../types" ] , function ( exports , _dom , _string , _types ) {
var _prototypeProperties = function ( child , staticProps , instanceProps ) { if ( staticProps ) Object . defineProperties ( child , staticProps ) ; if ( instanceProps ) Object . defineProperties ( child . prototype , instanceProps ) ; } ;
var _classCallCheck = function ( instance , Constructor ) { if ( ! ( instance instanceof Constructor ) ) { throw new TypeError ( "Cannot call a class as a function" ) ; } } ;
var Dom = _dom . Dom ;
var Str = _string . Str ;
var Types = _types . Types ;
var ColOps = exports . ColOps = ( function ( ) {
/ * *
* Column calculations
* @ param { Object } tf TableFilter instance
* /
function ColOps ( tf ) {
_classCallCheck ( this , ColOps ) ;
var f = tf . config ( ) ;
this . colOperation = f . col _operation ;
//calls function before col operation
this . onBeforeOperation = Types . isFn ( f . on _before _operation ) ? f . on _before _operation : null ;
//calls function after col operation
this . onAfterOperation = Types . isFn ( f . on _after _operation ) ? f . on _after _operation : null ;
this . tf = tf ;
}
_prototypeProperties ( ColOps , null , {
calc : {
/ * *
* Calculates columns ' values
* Configuration options are stored in 'colOperation' property
* - 'id' contains ids of elements showing result ( array )
* - 'col' contains the columns ' indexes ( array )
* - 'operation' contains operation type ( array , values : 'sum' , 'mean' ,
* 'min' , 'max' , 'median' , 'q1' , 'q3' )
* - 'write_method' array defines which method to use for displaying the
* result ( innerHTML , setValue , createTextNode ) - default : 'innerHTML'
* - 'tot_row_index' defines in which row results are displayed
* ( integers array )
*
* - changes made by Nuovella :
* ( 1 ) optimized the routine ( now it will only process each column once ) ,
* ( 2 ) added calculations for the median , lower and upper quartile .
* /
value : function calc ( ) {
if ( ! this . tf . isFirstLoad && ! this . tf . hasGrid ( ) ) {
return ;
}
if ( this . onBeforeOperation ) {
this . onBeforeOperation . call ( null , this . tf ) ;
}
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 = colOperation . decimal _precision !== undefined ? colOperation . decimal _precision : 2 ;
//nuovella: determine unique list of columns to operate on
var ucolIndex = [ ] ,
ucolMax = 0 ;
ucolIndex [ ucolMax ] = colIndex [ 0 ] ;
for ( var ii = 1 ; ii < colIndex . length ; ii ++ ) {
var saved = 0 ;
//see if colIndex[ii] is already in the list of unique indexes
for ( var jj = 0 ; jj <= ucolMax ; jj ++ ) {
if ( ucolIndex [ jj ] === colIndex [ ii ] ) {
saved = 1 ;
}
}
//if not saved then, save the index;
if ( saved === 0 ) {
ucolMax ++ ;
ucolIndex [ ucolMax ] = colIndex [ ii ] ;
}
}
if ( Str . lower ( typeof labelId ) == "object" && Str . lower ( typeof colIndex ) == "object" && Str . lower ( typeof operation ) == "object" ) {
var row = this . tf . tbl . rows ,
colvalues = [ ] ;
for ( var ucol = 0 ; ucol <= ucolMax ; ucol ++ ) {
//this retrieves col values
//use ucolIndex because we only want to pass through this loop
//once for each column get the values in this unique column
colvalues . push ( this . tf . getColValues ( ucolIndex [ ucol ] , true , excludeRow ) ) ;
//next: calculate all operations for this column
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 ;
for ( var k = 0 ; k < colIndex . length ; k ++ ) {
if ( colIndex [ k ] === ucolIndex [ ucol ] ) {
mThisCol ++ ;
opsThisCol [ mThisCol ] = Str . lower ( operation [ k ] ) ;
decThisCol [ mThisCol ] = decimalPrecision [ k ] ;
labThisCol [ mThisCol ] = labelId [ k ] ;
oTypeThisCol = outputType !== undefined && Str . lower ( typeof outputType ) === "object" ? outputType [ k ] : null ;
switch ( 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 ;
break ;
}
}
}
for ( var j = 0 ; j < colvalues [ ucol ] . length ; j ++ ) {
//sort the list for calculation of median and quartiles
if ( q1Flag == 1 || q3Flag == 1 || medFlag == 1 ) {
if ( j < colvalues [ ucol ] . length - 1 ) {
for ( k = j + 1 ; k < colvalues [ ucol ] . length ; k ++ ) {
if ( eval ( colvalues [ ucol ] [ k ] ) < eval ( colvalues [ ucol ] [ j ] ) ) {
temp = colvalues [ ucol ] [ j ] ;
colvalues [ ucol ] [ j ] = colvalues [ ucol ] [ k ] ;
colvalues [ ucol ] [ k ] = temp ;
}
}
}
}
var cvalue = parseFloat ( colvalues [ ucol ] [ j ] ) ;
theList [ j ] = parseFloat ( cvalue ) ;
if ( ! isNaN ( cvalue ) ) {
nbvalues ++ ;
if ( sumFlag === 1 || meanFlag === 1 ) {
sumValue += parseFloat ( cvalue ) ;
}
if ( minFlag === 1 ) {
if ( minValue === null ) {
minValue = parseFloat ( cvalue ) ;
} else {
minValue = parseFloat ( cvalue ) < minValue ? parseFloat ( cvalue ) : minValue ;
}
}
if ( maxFlag === 1 ) {
if ( maxValue === null ) {
maxValue = parseFloat ( cvalue ) ;
} else {
maxValue = parseFloat ( cvalue ) > maxValue ? parseFloat ( cvalue ) : maxValue ;
}
}
}
} //for j
if ( meanFlag === 1 ) {
meanValue = sumValue / nbvalues ;
}
if ( medFlag === 1 ) {
var aux = 0 ;
if ( nbvalues % 2 === 1 ) {
aux = Math . floor ( nbvalues / 2 ) ;
medValue = theList [ aux ] ;
} else {
medValue = ( theList [ nbvalues / 2 ] + theList [ nbvalues / 2 - 1 ] ) / 2 ;
}
}
var posa ;
if ( q1Flag === 1 ) {
posa = 0 ;
posa = Math . floor ( nbvalues / 4 ) ;
if ( 4 * posa == nbvalues ) {
q1Value = ( theList [ posa - 1 ] + theList [ posa ] ) / 2 ;
} else {
q1Value = theList [ posa ] ;
}
}
if ( q3Flag === 1 ) {
posa = 0 ;
var posb = 0 ;
posa = Math . floor ( nbvalues / 4 ) ;
if ( 4 * posa === nbvalues ) {
posb = 3 * posa ;
q3Value = ( theList [ posb ] + theList [ posb - 1 ] ) / 2 ;
} else {
q3Value = theList [ nbvalues - posa - 1 ] ;
}
}
for ( var i = 0 ; i <= mThisCol ; i ++ ) {
switch ( opsThisCol [ i ] ) {
case "mean" :
result = meanValue ;
break ;
case "sum" :
result = sumValue ;
break ;
case "min" :
result = minValue ;
break ;
case "max" :
result = maxValue ;
break ;
case "median" :
result = medValue ;
break ;
case "q1" :
result = q1Value ;
break ;
case "q3" :
result = q3Value ;
break ;
}
var precision = ! isNaN ( decThisCol [ i ] ) ? decThisCol [ i ] : 2 ;
//if outputType is defined
if ( oTypeThisCol && result ) {
result = result . toFixed ( precision ) ;
if ( Dom . id ( labThisCol [ i ] ) ) {
switch ( Str . lower ( oTypeThisCol ) ) {
case "innerhtml" :
if ( isNaN ( result ) || ! isFinite ( result ) || nbvalues === 0 ) {
Dom . id ( labThisCol [ i ] ) . innerHTML = "." ;
} else {
Dom . id ( labThisCol [ i ] ) . innerHTML = result ;
}
break ;
case "setvalue" :
Dom . id ( labThisCol [ i ] ) . value = result ;
break ;
case "createtextnode" :
var oldnode = Dom . id ( labThisCol [ i ] ) . firstChild ;
var txtnode = Dom . text ( result ) ;
Dom . id ( labThisCol [ i ] ) . replaceChild ( txtnode , oldnode ) ;
break ;
} //switch
}
} else {
try {
if ( isNaN ( result ) || ! isFinite ( result ) || nbvalues === 0 ) {
Dom . id ( labThisCol [ i ] ) . innerHTML = "." ;
} else {
Dom . id ( labThisCol [ i ] ) . innerHTML = result . toFixed ( precision ) ;
}
} catch ( e ) { } //catch
} //else
} //for i
// row(s) with result are always visible
var totRow = totRowIndex && totRowIndex [ ucol ] ? row [ totRowIndex [ ucol ] ] : null ;
if ( totRow ) {
totRow . style . display = "" ;
}
} //for ucol
} //if typeof
if ( this . onAfterOperation ) {
this . onAfterOperation . call ( null , this . tf ) ;
}
} ,
writable : true ,
configurable : true
}
} ) ;
return ColOps ;
} ) ( ) ;
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
} ) ;
//# sourceMappingURL=colOps.js.map;
define ( 'tablefilter' , [ "exports" , "module" , "event" , "dom" , "string" , "cookie" , "types" , "array" , "helpers" , "date" , "sort" , "modules/store" , "modules/gridLayout" , "modules/loader" , "modules/highlightKeywords" , "modules/popupFilter" , "modules/dropdown" , "modules/checkList" , "modules/rowsCounter" , "modules/statusBar" , "modules/paging" , "modules/clearButton" , "modules/help" , "modules/alternateRows" , "modules/colOps" ] , function ( exports , module , _event , _dom , _string , _cookie , _types , _array , _helpers , _date , _sort , _modulesStore , _modulesGridLayout , _modulesLoader , _modulesHighlightKeywords , _modulesPopupFilter , _modulesDropdown , _modulesCheckList , _modulesRowsCounter , _modulesStatusBar , _modulesPaging , _modulesClearButton , _modulesHelp , _modulesAlternateRows , _modulesColOps ) { var _prototypeProperties = function ( child , staticProps , instanceProps ) { if ( staticProps ) Object . defineProperties ( child , staticProps ) ; if ( instanceProps ) Object . defineProperties ( child . prototype , instanceProps ) ; } ; var _classCallCheck = function ( instance , Constructor ) { if ( ! ( instance instanceof Constructor ) ) { throw new TypeError ( "Cannot call a class as a function" ) ; } } ; var evt = _event . Event ; var dom = _dom . Dom ; var str = _string . Str ; var cookie = _cookie . Cookie ; var types = _types . Types ; var array = _array . Arr ; var hlp = _helpers . Helpers ; var dateHelper = _date . DateHelper ; var Sort = _sort . Sort ; var Store = _modulesStore . Store ; var GridLayout = _modulesGridLayout . GridLayout ; var Loader = _modulesLoader . Loader ; var HighlightKeyword = _modulesHighlightKeywords . HighlightKeyword ; var PopupFilter = _modulesPopupFilter . PopupFilter ; var Dropdown = _modulesDropdown . Dropdown ; var CheckList = _modulesCheckList . CheckList ; var RowsCounter = _modulesRowsCounter . RowsCounter ; var StatusBar = _modulesStatusBar . StatusBar ; var Paging = _modulesPaging . Paging ; var ClearButton = _modulesClearButton . ClearButton ; var Help = _modulesHelp . Help ; var AlternateRows = _modulesAlternateRows . AlternateRows ; var ColOps = _modulesColOps . ColOps ; var global = window , isValidDate = dateHelper . isValid , formatDate = dateHelper . format , doc = global . document ; var TableFilter = ( function ( ) { function TableFilter ( id ) { _classCallCheck ( this , TableFilter ) ; if ( arguments . length === 0 ) { return ; } this . id = id ; this . version = "3.0" ; this . year = new Date ( ) . getFullYear ( ) ; this . tbl = dom . id ( id ) ; this . startRow = null ; this . refRow = null ; this . headersRow = null ; this . cfg = { } ; this . nbFilterableRows = null ; this . nbRows = null ; this . nbCells = null ; this . _hasGrid = false ; this . enableModules = false ; if ( ! this . tbl || str . lower ( this . tbl . nodeName ) !== "table" || this . getRowsNb ( ) === 0 ) { throw new Error ( "Could not instantiate TF object: HTML table not found." ) ; } if ( arguments . length > 1 ) { for ( var i = 0 ; i < arguments . length ; i ++ ) { var arg = arguments [ i ] ; var argtype = typeof arg ; switch ( str . lower ( argtype ) ) { case "number" : this . startRow = arg ; break ; case "object" : this . cfg = arg ; break ; } } } var f = this . cfg ; this . refRow = this . startRow === null ? 2 : this . startRow + 1 ; try { this . nbCells = this . getCellsNb ( this . refRow ) ; } catch ( e ) { this . nbCells = this . getCellsNb ( 0 ) ; } this . basePath = f . base _path !== undefined ? f . base _path : "" ; this . fltTypeInp = "input" ; this . fltTypeSlc = "select" ; this . fltTypeMulti = "multiple" ; this . fltTypeCheckList = "checklist" ; this . fltTypeNone = "none" ; this . fltCol = [ ] ; for ( var j = 0 ; j < this . nbCells ; j ++ ) { var cfgCol = f [ "col_" + j ] ; var col = ! cfgCol ? this . fltTypeInp : str . lower ( cfgCol ) ; this . fltCol . push ( col ) ; this [ "col" + j ] = col ; } this . publicMethods = f . public _methods !== undefined ? f . public _methods : false ; this . fltGrid = f . grid === false ? false : true ; this . gridLayout = f . grid _layout ? true : false ; this . sourceTblHtml = null ; if ( this . gridLayout ) { if ( this . tbl . outerHTML === undefined ) { setOuterHtml ( ) ; } this . sourceTblHtml = this . tbl . outerHTML ; } this . filtersRowIndex = f . filters _row _index || 0 ; this . headersRow = f . headers _row _index || ( this . filtersRowIndex === 0 ? 1 : 0 ) ; if ( this . gridLayout ) { if ( this . headersRow > 1 ) { this . filtersRowIndex = this . headersRow + 1 ; } else { this . filtersRowIndex = 1 ; this . headersRow = 0 ; } } this . fltCellTag = f . filters _cell _tag !== "th" || f . filters _cell _tag !== "td" ? "td" : f . filters _cell _tag ; this . fltIds = [ ] ; this . fltElms = [ ] ; this . searchArgs = null ; this . tblData = [
//# sourceMappingURL=tablefilter.js.map;
define ( "tablefilter" , function ( ) { } ) ;
return require ( 'tablefilter' ) ;
} ) ;