1
0
Fork 0
mirror of https://github.com/koalyptus/TableFilter.git synced 2024-04-28 12:52:49 +02:00

Added requiresjs build config in grunt file

This commit is contained in:
Max Guglielmi 2014-11-02 01:34:37 +11:00
parent b5eee075ee
commit fc41c6fb33
26 changed files with 262 additions and 3093 deletions

View file

@ -8,19 +8,6 @@ module.exports = function (grunt) {
dist_folder: 'dist/',
source_folder: 'src/',
// meta: {
// src: [
// //'<%= source_folder %>string.js',
// // '<%= source_folder %>dom.js',
// // '<%= source_folder %>event.js',
// // '<%= source_folder %>types.js',
// // '<%= source_folder %>cookie.js',
// //'<%= source_folder %>array.js',
// // '<%= source_folder %>date.js',
// // '<%= source_folder %>core.js'
// ]
// },
// A list of files, which will be syntax-checked by JSHint
jshint: {
src: ['Gruntfile.js', 'src/*.js'],
@ -47,14 +34,33 @@ module.exports = function (grunt) {
tasks: ['dev']
},
requirejs: {
compile: {
options: {
baseUrl: 'src/',
'paths': {
'tf': '.'
},
include: ['../libs/almond/almond','core'],
out: 'dist/tablefilter.js',
wrap: {
startFile: "src/start.frag",
endFile: "src/end.frag"
}/*,
optimize: 'uglify2',
preserveLicenseComments: false,
generateSourceMaps: true*/
}
}
},
concat: {
js: {
/*js: {
files: [{
//src: ['<%= meta.src %>'],
src: ['<%= source_folder %>core.js'],
dest: '<%= dist_folder %>core.js'
}]
},
},*/
css: {
files: [{
src: ['<%= source_folder %>filtergrid.css'],
@ -76,8 +82,8 @@ module.exports = function (grunt) {
},
js: {
src: ['<%= concat.js.files[0].dest %>'],
dest: '<%= concat.js.files[0].dest %>'
src: ['<%= dist_folder %>tablefilter.js'],
dest: '<%= dist_folder %>tablefilter.js'
}
},
@ -102,39 +108,23 @@ module.exports = function (grunt) {
//{ src: ['<%= source_folder %>tablefilter_all.js'], dest: '<%= dist_folder %>tablefilter_all-uncompressed.js' },
//{ src: ['<%= source_folder %>tablefilter.js'], dest: '<%= dist_folder %>tablefilter-uncompressed.js' },
// { src: ['<%= source_folder %>filtergrid.css'], dest: '<%= dist_folder %>filtergrid-uncompressed.css' },
{ src: ['<%= source_folder %>tf-main.js'], dest: '<%= dist_folder %>tf-main.js' },
{ src: ['<%= source_folder %>string.js'], dest: '<%= dist_folder %>string.js' },
{ src: ['<%= source_folder %>array.js'], dest: '<%= dist_folder %>array.js' },
{ src: ['<%= source_folder %>cookie.js'], dest: '<%= dist_folder %>cookie.js' },
{ src: ['<%= source_folder %>date.js'], dest: '<%= dist_folder %>date.js' },
{ src: ['<%= source_folder %>dom.js'], dest: '<%= dist_folder %>dom.js' },
{ src: ['<%= source_folder %>event.js'], dest: '<%= dist_folder %>event.js' },
{ src: ['<%= source_folder %>types.js'], dest: '<%= dist_folder %>types.js' },
{ src: ['**'], cwd: '<%= source_folder %>modules/', dest: '<%= dist_folder %>modules/', expand: true },
// { src: ['<%= source_folder %>tf-main.js'], dest: '<%= dist_folder %>tf-main.js' },
// { src: ['<%= source_folder %>string.js'], dest: '<%= dist_folder %>string.js' },
// { src: ['<%= source_folder %>array.js'], dest: '<%= dist_folder %>array.js' },
// { src: ['<%= source_folder %>cookie.js'], dest: '<%= dist_folder %>cookie.js' },
// { src: ['<%= source_folder %>date.js'], dest: '<%= dist_folder %>date.js' },
// { src: ['<%= source_folder %>dom.js'], dest: '<%= dist_folder %>dom.js' },
// { src: ['<%= source_folder %>event.js'], dest: '<%= dist_folder %>event.js' },
// { src: ['<%= source_folder %>types.js'], dest: '<%= dist_folder %>types.js' },
// { src: ['**'], cwd: '<%= source_folder %>modules/', dest: '<%= dist_folder %>modules/', expand: true },
// { src: ['<%= source_folder %>/*.js'], dest: '<%= dist_folder %>', flatten: true, expand: false },
{ src: ['libs/requirejs/require.js'], dest: '<%= dist_folder %>/libs/require.js' },
// { src: ['libs/requirejs/require.js'], dest: '<%= dist_folder %>/libs/require.js' },
{ src: ['**'], cwd: '<%= source_folder %>TF_Modules/', dest: '<%= dist_folder %>TF_Modules/', expand: true },
{ src: ['**'], cwd: '<%= source_folder %>TF_Themes/', dest: '<%= dist_folder %>TF_Themes/', expand: true }
]
}
},
requirejs: {
compile: {
options: {
baseUrl: 'src/',
'paths': {
'tf': '.'
},
include: ['../libs/almond/almond','core'],
out: 'dist/tf.js',
wrap: {
startFile: "parts/start.frag",
endFile: "parts/end.frag"
}
}
}
}
});
// Load the plugins that provide the tasks we specified in package.json.
@ -148,6 +138,6 @@ module.exports = function (grunt) {
// This is the default task being executed if Grunt
// is called without any further parameter.
grunt.registerTask('default', ['jshint', 'concat', 'uglify', 'cssmin', 'copy', 'requirejs']);
grunt.registerTask('default', ['jshint', 'requirejs', 'concat', 'uglify', 'cssmin', 'copy']);
grunt.registerTask('dev', ['jshint', 'concat', 'cssmin', 'copy']);
};

View file

@ -6,8 +6,12 @@
"Max Guglielmi"
],
"description": "Filter HTML tables data easily",
"main": ["dist/tablefilter_all.js", "dist/filtergrid.css"],
"main": [
"dist/tablefilter_all.js",
"dist/filtergrid.css"
],
"moduleType": [
"amd",
"globals"
],
"keywords": [
@ -22,9 +26,11 @@
"node_modules",
"bower_components",
"test",
"tests"
"tests",
"libs"
],
"dependencies": {
"almond": "~0.3.0",
"requirejs": null
}
}

32
dist/array.js vendored
View file

@ -1,32 +0,0 @@
/**
* Array utilities
*/
define(function (require) {
'use strict';
var str = require('./string');
var Arr = {
has: function(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(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;
}
};
return Arr;
});

62
dist/cookie.js vendored
View file

@ -1,62 +0,0 @@
/**
* Cookie utilities
*/
define(function () {
'use strict';
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];
};
return Cookie;
});

10
dist/core.js vendored

File diff suppressed because one or more lines are too long

169
dist/date.js vendored
View file

@ -1,169 +0,0 @@
/**
* Date utilities
*/
define(function () {
'use strict';
var DateHelper = {
isValid: function(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(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;
}
};
return DateHelper;
});

155
dist/dom.js vendored
View file

@ -1,155 +0,0 @@
/**
* DOM utilities
*/
define(function (require) {
'use strict';
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;
};
// HTML5 classList API
function supportsClassList(){
return document.documentElement.classList;
}
return Dom;
});

57
dist/event.js vendored
View file

@ -1,57 +0,0 @@
/**
* DOM event utilities
*/
define(function () {
'use strict';
var Event = {};
Event.add = function(obj, type, func, capture){
if(obj.attachEvent){
obj.attachEvent('on'+type, func);
}
else if(obj.addEventListener){
obj.addEventListener(type, func,
(capture===undefined ? false : capture));
} else{
obj['on'+type] = func;
}
};
Event.remove = function(obj, type, func, capture){
if(obj.detachEvent){
obj.detachEvent('on'+type,func);
}
else if(obj.removeEventListener){
obj.removeEventListener(type, func,
(capture===undefined ? false : capture));
} else {
obj['on'+type] = null;
}
};
Event.stop = function(evt){
if(!evt){
evt = window.event;
}
if(evt.stopPropagation){
evt.stopPropagation();
} else {
evt.cancelBubble = true;
}
};
Event.cancel = function(evt){
if(!evt){
evt = window.event;
}
if(evt.preventDefault) {
evt.preventDefault();
} else {
evt.returnValue = false;
}
};
return Event;
});

2
dist/filtergrid.css vendored
View file

@ -1,6 +1,6 @@
/*------------------------------------------------------------------------
- TableFilter stylesheet by Max Guglielmi
- (build date: Sat Nov 01 2014 22:27:27)
- (build date: Sun Nov 02 2014 01:26:16)
- Edit below for your projects' needs
------------------------------------------------------------------------*/

2076
dist/libs/require.js vendored

File diff suppressed because it is too large Load diff

View file

@ -1,87 +0,0 @@
define(['../dom', '../types'], function (dom, types) {
'use strict';
console.log(arguments);
var global = window;
function Loader(tf){
// Original configuration
var f = tf.fObj;
//id of container element
tf.loaderTgtId = f.loader_target_id || null;
//div containing loader
tf.loaderDiv = null;
//defines loader text
tf.loaderText = f.loader_text || 'Loading...';
//defines loader innerHtml
tf.loaderHtml = f.loader_html || null;
//defines css class for loader div
tf.loaderCssClass = f.loader_css_class || 'loader';
//delay for hiding loader
tf.loaderCloseDelay = 200;
//callback function before loader is displayed
tf.onShowLoader = types.isFn(f.on_show_loader) ?
f.on_show_loader : null;
//callback function after loader is closed
tf.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 = tf.loaderCssClass;
var targetEl = !tf.loaderTgtId ?
(tf.gridLayout ? tf.tblCont : tf.tbl.parentNode) :
TF.id(tf.loaderTgtId);
if(!tf.loaderTgtId){
targetEl.insertBefore(containerDiv, tf.tbl);
} else {
targetEl.appendChild(containerDiv);
}
tf.loaderDiv = TF.id(tf.prfxLoader+tf.id);
if(!tf.loaderHtml){
tf.loaderDiv.appendChild(dom.text(tf.loaderText));
} else {
tf.loaderDiv.innerHTML = tf.loaderHtml;
}
}
Loader.prototype.show = function(p) {
if(!this.tf.loader || !this.tf.loaderDiv ||
this.tf.loaderDiv.style.display===p){
return;
}
var o = this.tf;
function displayLoader(){
if(!o.loaderDiv){
return;
}
if(o.onShowLoader && p!=='none'){
o.onShowLoader.call(null, o);
}
o.loaderDiv.style.display = p;
if(o.onHideLoader && p==='none'){
o.onHideLoader.call(null, o);
}
}
var t = p==='none' ? this.tf.loaderCloseDelay : 1;
global.setTimeout(displayLoader, t);
};
Loader.prototype.remove = function() {
if(!this.tf.loaderDiv){
return;
}
var targetEl = !this.tf.loaderTgtId ?
(this.tf.gridLayout ? this.tf.tblCont : this.tf.tbl.parentNode) :
TF.id(this.tf.loaderTgtId);
targetEl.removeChild(this.tf.loaderDiv);
this.tf.loaderDiv = null;
};
return Loader;
});

View file

@ -1,7 +0,0 @@
define(['../core'], function (require) {
'use strict';
function Loader(){}
return Loader;
});

50
dist/string.js vendored
View file

@ -1,50 +0,0 @@
/**
* String utilities
*/
define(function () {
'use strict';
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;
};
return Str;
});

10
dist/tablefilter.js vendored Normal file

File diff suppressed because one or more lines are too long

26
dist/tf-main.js vendored
View file

@ -1,26 +0,0 @@
// requirejs.config({
// baseUrl: '../dist/libs',
// paths: {
// tf: '.'
// }
// });
requirejs(['core'], function(TableFilter){
// Your logic here
var tf = new TableFilter("demo", {
col_0: 'select',
col_3: 'checklist',
base_path: './',
enable_default_theme: true,
paging: false,
alternate_rows: true,
highlight_keywords: true,
match_case: false,
remember_grid_values: true,
btn_reset: true,
grid_layout: false
});
tf.init();
});

48
dist/types.js vendored
View file

@ -1,48 +0,0 @@
/**
* Types utilities
*/
define(function () {
'use strict';
var Types = {};
/**
* 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);
};
return Types;
});

View file

@ -1,7 +1,8 @@
<!DOCTYPE html>
<html lang="en">
<head>
<link href="../dist/filtergrid.css">
<title>HTML Table Filter Generator</title>
<link rel="stylesheet" href="../dist/filtergrid.css">
</head>
<body>
<table id="demo" cellpadding="0" cellspacing="0">
@ -65,12 +66,23 @@
</tbody>
</table>
<script type="text/javascript" src="../dist/tablefilter_all.js"></script>
<script type="text/javascript" src="../dist/tablefilter.js"></script>
<script>
var tf = setFilterGrid("demo", {
var tf = new TableFilter("demo", {
col_0: 'select',
col_3: 'checklist',
base_path: '../dist/',
enable_default_theme: true
enable_default_theme: true,
paging: false,
alternate_rows: true,
highlight_keywords: true,
match_case: false,
remember_grid_values: true,
btn_reset: true,
grid_layout: false
});
tf.init();
</script>
</body>
</html>

View file

@ -40,9 +40,9 @@ var global = this,
cookie = require('cookie'),
types = require('types'),
array = require('array'),
hlp = require('helpers'),
isValidDate = require('date').isValid,
formatDate = require('date').format,
loader = require('modules/loader'),
doc = global.document;
/**
@ -57,7 +57,7 @@ function TableFilter(id) {
this.id = id;
this.version = '3.0';
this.year = new Date().getFullYear();
this.tbl = TF.id(id);
this.tbl = dom.id(id);
this.startRow = null;
this.refRow = null;
this.headersRow = null;
@ -98,7 +98,7 @@ function TableFilter(id) {
catch(e){ this.nbCells = this.GetCellsNb(0); }
//default script base path
this.basePath = f.base_path!==undefined ? f.base_path : 'TableFilter/';
this.basePath = f.base_path!==undefined ? f.base_path : '';
/*** filter types ***/
this.fltTypeInp = 'input';
@ -697,6 +697,9 @@ function TableFilter(id) {
//themes path
this.themesPath = f.themes_path || this.basePath+'TF_Themes/';
// Components
this.loaderCpt = null;
/*** TF events ***/
var o = this;
this.Evt = {
@ -797,7 +800,7 @@ function TableFilter(id) {
_OnInpFocus: function(e) {
var _evt = e || global.event;
o.activeFilterId = this.getAttribute('id');
o.activeFlt = TF.id(o.activeFilterId);
o.activeFlt = dom.id(o.activeFilterId);
//Watermark
if(!o.isInpWatermarkArray){
if(this.value === o.inpWatermark &&
@ -827,12 +830,12 @@ function TableFilter(id) {
_OnSlcFocus: function(e) {
var _evt = e || global.event;
o.activeFilterId = this.getAttribute('id');
o.activeFlt = TF.id(o.activeFilterId);
o.activeFlt = dom.id(o.activeFilterId);
// select is populated when element has focus
if(o.fillSlcOnDemand && this.getAttribute('filled') === '0'){
var ct = this.getAttribute('ct');
o.PopulateSelect(ct);
if(!TF.isIE){ this.setAttribute('filled','1'); }
if(!hlp.isIE()){ this.setAttribute('filled','1'); }
}
if(o.popUpFilters){
evt.cancel(_evt);
@ -880,7 +883,7 @@ function TableFilter(id) {
=====================================================*/
_OnCheckListFocus: function(e) {
o.activeFilterId = this.firstChild.getAttribute('id');
o.activeFlt = TF.id(o.activeFilterId);
o.activeFlt = dom.id(o.activeFilterId);
},
_OnCheckListBlur: function(e){},
/*====================================================
@ -955,14 +958,13 @@ TableFilter.prototype = {
this.isExternalFlt = true;
this.SetGridLayout();
//Once grid generated 1st filterable row is 0 again
this.refRow = TF.isIE ? (this.refRow+1) : 0;
this.refRow = hlp.isIE() ? (this.refRow+1) : 0;
}
if(this.loader){
//this.SetLoader();
var Loader = require('modules/loader');
this.loaderComponent = new Loader(this);
console.log(this.loaderComponent);
this.loaderCpt = new Loader(this);
}
if(this.popUpFilters){
@ -994,7 +996,7 @@ TableFilter.prototype = {
if(this.isFirstLoad){
var fltrow;
if(!this.gridLayout){
var thead = TF.tag(this.tbl,'thead');
var thead = dom.tag(this.tbl,'thead');
if(thead.length > 0){
fltrow = thead[0].insertRow(this.filtersRowIndex);
} else {
@ -1072,7 +1074,7 @@ TableFilter.prototype = {
//filter is appended in desired element
if(externalFltTgtId){
TF.id(externalFltTgtId).appendChild(slc);
dom.id(externalFltTgtId).appendChild(slc);
this.externalFltEls.push(slc);
} else {
fltcell.appendChild(slc);
@ -1103,7 +1105,7 @@ TableFilter.prototype = {
select is disabled and by clicking on element
(parent td), users enable drop-down and select is
populated at same time. */
if(this.fillSlcOnDemand && TF.isIE){
if(this.fillSlcOnDemand && hlp.isIE()){
slc.disabled = true;
slc.title = this.activateSlcTooltip;
slc.parentNode.onclick = this.Evt._EnableSlc;
@ -1121,7 +1123,7 @@ TableFilter.prototype = {
//filter is appended in desired element
if(externalFltTgtId){
TF.id(externalFltTgtId).appendChild(divCont);
dom.id(externalFltTgtId).appendChild(divCont);
this.externalFltEls.push(divCont);
} else {
fltcell.appendChild(divCont);
@ -1161,7 +1163,7 @@ TableFilter.prototype = {
//filter is appended in desired element
if(externalFltTgtId){
TF.id(externalFltTgtId).appendChild(inp);
dom.id(externalFltTgtId).appendChild(inp);
this.externalFltEls.push(inp);
} else {
fltcell.appendChild(inp);
@ -1194,7 +1196,7 @@ TableFilter.prototype = {
//filter is appended in desired element
if(externalFltTgtId){
TF.id(externalFltTgtId).appendChild(btn);
dom.id(externalFltTgtId).appendChild(btn);
} else{
fltcell.appendChild(btn);
}
@ -1265,7 +1267,7 @@ TableFilter.prototype = {
if(this.loader){
//this.ShowLoader('none');
this.loaderComponent.show('none');
this.loaderCpt.show('none');
}
/* Loads extensions */
@ -1351,14 +1353,14 @@ TableFilter.prototype = {
}
if(o.loader){
//o.ShowLoader('none');
o.loaderComponent.show('none');
o.loaderCpt.show('none');
}
}
if(this.loader || this.status || this.statusBar) {
try{
//this.ShowLoader('');
this.loaderComponent.show('');
this.loaderCpt.show('');
this.StatusMsg(o['msg'+evt]);
} catch(e){}
global.setTimeout(efx,this.execDelay);
@ -1551,7 +1553,7 @@ TableFilter.prototype = {
}
if(this.loader){
// this.RemoveLoader();
this.loaderComponent.remove();
this.loaderCpt.remove();
}
if(this.popUpFilters){
this.RemovePopupFilters();
@ -1617,7 +1619,7 @@ TableFilter.prototype = {
//custom container
if(this.toolBarTgtId){
TF.id(this.toolBarTgtId).appendChild(infdiv);
dom.id(this.toolBarTgtId).appendChild(infdiv);
}
//fixed headers
else if(this.fixedHeaders && this.contDiv){
@ -1632,26 +1634,26 @@ TableFilter.prototype = {
else{
this.tbl.parentNode.insertBefore(infdiv, this.tbl);
}
this.infDiv = TF.id(this.prfxInfDiv+this.id);
this.infDiv = dom.id(this.prfxInfDiv+this.id);
/*** left div containing rows # displayer ***/
var ldiv = dom.create('div', ['id',this.prfxLDiv+this.id]);
ldiv.className = this.lDivCssClass;
infdiv.appendChild(ldiv);
this.lDiv = TF.id(this.prfxLDiv+this.id);
this.lDiv = dom.id(this.prfxLDiv+this.id);
/*** right div containing reset button
+ nb results per page select ***/
var rdiv = dom.create('div', ['id',this.prfxRDiv+this.id]);
rdiv.className = this.rDivCssClass;
infdiv.appendChild(rdiv);
this.rDiv = TF.id(this.prfxRDiv+this.id);
this.rDiv = dom.id(this.prfxRDiv+this.id);
/*** mid div containing paging elements ***/
var mdiv = dom.create('div', ['id',this.prfxMDiv+this.id]);
mdiv.className = this.mDivCssClass;
infdiv.appendChild(mdiv);
this.mDiv = TF.id(this.prfxMDiv+this.id);
this.mDiv = dom.id(this.prfxMDiv+this.id);
if(!this.helpInstructions){
this.SetHelpInstructions();
@ -1679,99 +1681,13 @@ TableFilter.prototype = {
}
for(var ct=0; ct<this.externalFltTgtIds.length; ct++){
var externalFltTgtId = this.externalFltTgtIds[ct],
externalFlt = TF.id(externalFltTgtId);
externalFlt = dom.id(externalFltTgtId);
if(externalFlt){
externalFlt.innerHTML = '';
}
}
},
/*====================================================
- generates loader div
=====================================================*/
// SetLoader: function(){
// if(this.loaderDiv){
// return;
// }
// var f = this.fObj;
// //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;
// var containerDiv = dom.create('div',['id',this.prfxLoader+this.id]);
// containerDiv.className = this.loaderCssClass;// for ie<=6
// var targetEl = (!this.loaderTgtId) ?
// (this.gridLayout ? this.tblCont : this.tbl.parentNode) :
// TF.id(this.loaderTgtId);
// if(!this.loaderTgtId){
// targetEl.insertBefore(containerDiv, this.tbl);
// } else {
// targetEl.appendChild(containerDiv);
// }
// this.loaderDiv = TF.id(this.prfxLoader+this.id);
// if(!this.loaderHtml){
// this.loaderDiv.appendChild(dom.text(this.loaderText));
// } else {
// this.loaderDiv.innerHTML = this.loaderHtml;
// }
// },
/*====================================================
- removes loader div
=====================================================*/
// RemoveLoader: function(){
// if(!this.loaderDiv){
// return;
// }
// var targetEl = (!this.loaderTgtId) ?
// (this.gridLayout ? this.tblCont : this.tbl.parentNode) :
// TF.id(this.loaderTgtId);
// targetEl.removeChild(this.loaderDiv);
// this.loaderDiv = null;
// },
/*====================================================
- displays/hides loader div
=====================================================*/
// ShowLoader: function(p){
// if(!this.loader || !this.loaderDiv || this.loaderDiv.style.display===p){
// return;
// }
// var o = this;
// function displayLoader(){
// if(!o.loaderDiv){
// return;
// }
// if(o.onShowLoader && p!=='none'){
// o.onShowLoader.call(null,o);
// }
// o.loaderDiv.style.display = p;
// if(o.onHideLoader && p==='none'){
// o.onHideLoader.call(null,o);
// }
// }
// var t = p==='none' ? this.loaderCloseDelay : 1;
// global.setTimeout(displayLoader,t);
// },
/*====================================================
- Sets sorting feature by loading
WebFX Sortable Table 1.12 plugin by Erik Arvidsson
@ -1886,7 +1802,7 @@ TableFilter.prototype = {
//start row for EditTable constructor needs to be calculated
var startRow,
ezEditConfig = o.ezEditTableConfig,
thead = TF.tag(o.tbl,'thead');
thead = dom.tag(o.tbl,'thead');
//if thead exists and startRow not specified, startRow is calculated
//automatically by EditTable
@ -2328,7 +2244,7 @@ TableFilter.prototype = {
o.ChangePage();
this.blur();
//ie only: blur is not enough...
if(this.parentNode && TF.isIE){
if(this.parentNode && hlp.isIE()){
this.parentNode.focus();
}
};
@ -2435,7 +2351,7 @@ TableFilter.prototype = {
if(!this.pagingTgtId){
this.SetTopDiv();
}
var targetEl = !this.pagingTgtId ? this.mDiv : TF.id(this.pagingTgtId);
var targetEl = !this.pagingTgtId ? this.mDiv : dom.id(this.pagingTgtId);
/***
if paging previously removed this prevents IE memory leak with
@ -2467,7 +2383,7 @@ TableFilter.prototype = {
targetEl.appendChild(pgspan);
targetEl.appendChild(btnNextSpan);
targetEl.appendChild(btnLastSpan);
this.pagingSlc = TF.id(this.prfxSlcPages+this.id);
this.pagingSlc = dom.id(this.prfxSlcPages+this.id);
// if this.rememberGridValues==true this.SetPagingInfo() is called
// in ResetGridValues() method
@ -2494,16 +2410,16 @@ TableFilter.prototype = {
// btns containers
var btnNextSpan, btnPrevSpan, btnLastSpan, btnFirstSpan;
var pgBeforeSpan, pgAfterSpan, pgspan;
btnNextSpan = TF.id(this.prfxBtnNextSpan+this.id);
btnPrevSpan = TF.id(this.prfxBtnPrevSpan+this.id);
btnLastSpan = TF.id(this.prfxBtnLastSpan+this.id);
btnFirstSpan = TF.id(this.prfxBtnFirstSpan+this.id);
btnNextSpan = dom.id(this.prfxBtnNextSpan+this.id);
btnPrevSpan = dom.id(this.prfxBtnPrevSpan+this.id);
btnLastSpan = dom.id(this.prfxBtnLastSpan+this.id);
btnFirstSpan = dom.id(this.prfxBtnFirstSpan+this.id);
//span containing 'Page' text
pgBeforeSpan = TF.id(this.prfxPgBeforeSpan+this.id);
pgBeforeSpan = dom.id(this.prfxPgBeforeSpan+this.id);
//span containing 'of' text
pgAfterSpan = TF.id(this.prfxPgAfterSpan+this.id);
pgAfterSpan = dom.id(this.prfxPgAfterSpan+this.id);
//span containing nb of pages
pgspan = TF.id(this.prfxPgSpan+this.id);
pgspan = dom.id(this.prfxPgSpan+this.id);
this.pagingSlc.parentNode.removeChild(this.pagingSlc);
@ -2547,8 +2463,8 @@ TableFilter.prototype = {
=====================================================*/
SetPagingInfo: function(validRows){
var rows = this.tbl.rows;
var mdiv = !this.pagingTgtId ? this.mDiv : TF.id(this.pagingTgtId);
var pgspan = TF.id(this.prfxPgSpan+this.id);
var mdiv = !this.pagingTgtId ? this.mDiv : dom.id(this.pagingTgtId);
var pgspan = dom.id(this.prfxPgSpan+this.id);
//stores valid rows indexes
if(validRows && validRows.length>0){
this.validRowsIndex = validRows;
@ -2697,7 +2613,7 @@ TableFilter.prototype = {
o.ChangeResultsPerPage();
this.blur();
//ie only: blur is not enough...
if(this.parentNode && TF.isIE){
if(this.parentNode && hlp.isIE()){
this.parentNode.focus();
}
};
@ -2717,12 +2633,12 @@ TableFilter.prototype = {
this.SetTopDiv();
}
var targetEl = !this.resultsPerPageTgtId ?
this.rDiv : TF.id( this.resultsPerPageTgtId );
this.rDiv : dom.id( this.resultsPerPageTgtId );
slcRSpan.appendChild(dom.text(slcRText));
targetEl.appendChild(slcRSpan);
targetEl.appendChild(slcR);
this.resultsPerPageSlc = TF.id(this.prfxSlcResults+this.id);
this.resultsPerPageSlc = dom.id(this.prfxSlcResults+this.id);
for(var r=0; r<slcROpts.length; r++)
{
@ -2740,7 +2656,7 @@ TableFilter.prototype = {
return;
}
var slcR = this.resultsPerPageSlc,
slcRSpan = TF.id(this.prfxSlcResultsTxt+this.id);
slcRSpan = dom.id(this.prfxSlcResultsTxt+this.id);
if(slcR){
slcR.parentNode.removeChild( slcR );
}
@ -2807,11 +2723,11 @@ TableFilter.prototype = {
this.SetTopDiv();
}
var targetEl = !this.helpInstrTgtId ?
this.rDiv : TF.id(this.helpInstrTgtId);
this.rDiv : dom.id(this.helpInstrTgtId);
targetEl.appendChild(helpspan);
var divContainer = !this.helpInstrContTgtId ?
helpspan : TF.id( this.helpInstrContTgtId );
helpspan : dom.id( this.helpInstrContTgtId );
if(!this.helpInstrBtnHtml){
divContainer.appendChild(helpdiv);
@ -3024,11 +2940,11 @@ TableFilter.prototype = {
_PopulateSelect: function(colIndex,isRefreshed,isExternal,extSlcId) {
isExternal = isExternal===undefined ? false : isExternal;
var slcId = this.fltIds[colIndex];
if((!TF.id(slcId) && !isExternal) ||
(!TF.id(extSlcId) && isExternal)){
if((!dom.id(slcId) && !isExternal) ||
(!dom.id(extSlcId) && isExternal)){
return;
}
var slc = !isExternal ? TF.id(slcId) : TF.id(extSlcId),
var slc = !isExternal ? dom.id(slcId) : dom.id(extSlcId),
o = this,
row = this.tbl.rows,
matchCase = this.matchCase,
@ -3347,13 +3263,13 @@ TableFilter.prototype = {
_PopulateCheckList: function(colIndex, isExternal, extFltId){
isExternal = !isExternal ? false : isExternal;
var divFltId = this.prfxCheckListDiv+colIndex+'_'+this.id;
if(!TF.id(divFltId) && !isExternal){
if(!dom.id(divFltId) && !isExternal){
return;
}
if(!TF.id(extFltId) && isExternal){
if(!dom.id(extFltId) && isExternal){
return;
}
var flt = !isExternal ? this.checkListDiv[colIndex] : TF.id(extFltId);
var flt = !isExternal ? this.checkListDiv[colIndex] : dom.id(extFltId);
var ul = dom.create('ul',
['id',this.fltIds[colIndex]], ['colIndex',colIndex]);
ul.className = this.checkListCssClass;
@ -3495,7 +3411,7 @@ TableFilter.prototype = {
li0.style.display = 'none';
}
//IE: label looses check capability
if(TF.isIE){
if(hlp.isIE()){
li0.label.onclick = function(){ li0.check.click(); };
}
@ -3509,7 +3425,7 @@ TableFilter.prototype = {
ul.onchange.call(null, e);
};
//IE: label looses check capability
if(TF.isIE){
if(hlp.isIE()){
li1.label.onclick = function(){ li1.check.click(); };
}
chkCt++;
@ -3528,7 +3444,7 @@ TableFilter.prototype = {
ul.onchange.call(null, e);
};
//IE: label looses check capability
if(TF.isIE)
if(hlp.isIE())
{
li2.label.onclick = function(){ li2.check.click(); };
}
@ -3591,7 +3507,7 @@ TableFilter.prototype = {
}
}
//IE: label looses check capability
if(TF.isIE){
if(hlp.isIE()){
li.label.onclick = labelClick;
}
}
@ -3607,13 +3523,13 @@ TableFilter.prototype = {
flt.setAttribute('filled','1');
/*** remember grid values IE only, items remain un-checked ***/
if(o.rememberGridValues && TF.isIE){
if(o.rememberGridValues && hlp.isIE()){
var slcIndexes = ul.getAttribute('indexes');
if(slcIndexes){
var indSplit = slcIndexes.split(',');//items indexes
for(var n=0; n<indSplit.length; n++){
//checked item
var cChk = TF.id(this.fltIds[colIndex]+'_'+indSplit[n]);
var cChk = dom.id(this.fltIds[colIndex]+'_'+indSplit[n]);
if(cChk){
cChk.checked = true;
}
@ -3653,7 +3569,8 @@ TableFilter.prototype = {
//checked items loop
for(var u=0; u<indSplit.length; u++){
//checked item
var cChk = TF.id(this.fltIds[colIndex]+'_'+indSplit[u]);
var cChk = dom.id(
this.fltIds[colIndex]+'_'+indSplit[u]);
if(cChk){
cChk.checked = false;
dom.removeClass(
@ -3674,8 +3591,8 @@ TableFilter.prototype = {
n.setAttribute('value', chkValue );
n.setAttribute('indexes', chkIndex);
//1st option unchecked
if(TF.id(this.fltIds[colIndex]+'_0')){
TF.id(this.fltIds[colIndex]+'_0').checked = false;
if(dom.id(this.fltIds[colIndex]+'_0')){
dom.id(this.fltIds[colIndex]+'_0').checked = false;
}
}
@ -3732,7 +3649,7 @@ TableFilter.prototype = {
this.SetTopDiv();
}
var targetEl = !this.btnResetTgtId ? this.rDiv :
TF.id( this.btnResetTgtId );
dom.id( this.btnResetTgtId );
targetEl.appendChild(resetspan);
if(!this.btnResetHtml){
@ -3746,7 +3663,7 @@ TableFilter.prototype = {
var resetEl = resetspan.firstChild;
resetEl.onclick = this.Evt._Clear;
}
this.btnResetEl = TF.id(this.prfxResetSpan+this.id).firstChild;
this.btnResetEl = dom.id(this.prfxResetSpan+this.id).firstChild;
},
/*====================================================
@ -3756,7 +3673,7 @@ TableFilter.prototype = {
if(!this.hasGrid || !this.btnResetEl){
return;
}
var resetspan = TF.id(this.prfxResetSpan+this.id);
var resetspan = dom.id(this.prfxResetSpan+this.id);
if(resetspan){
resetspan.parentNode.removeChild( resetspan );
}
@ -3807,9 +3724,9 @@ TableFilter.prototype = {
this.SetTopDiv();
}
var targetEl = (!this.statusBarTgtId) ?
this.lDiv : TF.id(this.statusBarTgtId);
this.lDiv : dom.id(this.statusBarTgtId);
if(this.statusBarDiv && TF.isIE){
if(this.statusBarDiv && hlp.isIE()){
this.statusBarDiv.outerHTML = '';
}
@ -3824,9 +3741,9 @@ TableFilter.prototype = {
targetEl.appendChild(statusSpan);
}
this.statusBarDiv = TF.id( this.prfxStatus+this.id );
this.statusBarSpan = TF.id( this.prfxStatusSpan+this.id );
this.statusBarSpanText = TF.id( this.prfxStatusTxt+this.id );
this.statusBarDiv = dom.id( this.prfxStatus+this.id );
this.statusBarSpan = dom.id( this.prfxStatusSpan+this.id );
this.statusBarSpanText = dom.id( this.prfxStatusTxt+this.id );
},
/*====================================================
@ -3924,10 +3841,10 @@ TableFilter.prototype = {
this.SetTopDiv();
}
var targetEl = !this.rowsCounterTgtId ?
this.lDiv : TF.id( this.rowsCounterTgtId );
this.lDiv : dom.id( this.rowsCounterTgtId );
//IE only: clears all for sure
if(this.rowsCounterDiv && TF.isIE){
if(this.rowsCounterDiv && hlp.isIE()){
this.rowsCounterDiv.outerHTML = '';
}
//default container: 'lDiv'
@ -3941,8 +3858,8 @@ TableFilter.prototype = {
targetEl.appendChild(countText);
targetEl.appendChild(countSpan);
}
this.rowsCounterDiv = TF.id( this.prfxCounter+this.id );
this.rowsCounterSpan = TF.id( this.prfxTotRows+this.id );
this.rowsCounterDiv = dom.id( this.prfxCounter+this.id );
this.rowsCounterSpan = dom.id( this.prfxTotRows+this.id );
this.RefreshNbRows();
},
@ -3960,13 +3877,13 @@ TableFilter.prototype = {
if(!this.rowsCounterTgtId && this.rowsCounterDiv){
//IE only: clears all for sure
if(TF.isIE){
if(hlp.isIE()){
this.rowsCounterDiv.outerHTML = '';
} else {
this.rowsCounterDiv.parentNode.removeChild(this.rowsCounterDiv);
}
} else {
TF.id( this.rowsCounterTgtId ).innerHTML = '';
dom.id( this.rowsCounterTgtId ).innerHTML = '';
}
this.rowsCounterSpan = null;
this.rowsCounterDiv = null;
@ -4183,7 +4100,7 @@ TableFilter.prototype = {
this.tblCont.parentNode.insertBefore(this.headTblCont, this.tblCont);
//THead needs to be removed in content table for sort feature
var thead = TF.tag(this.tbl,'thead');
var thead = dom.tag(this.tbl,'thead');
if(thead.length>0){
this.tbl.removeChild(thead[0]);
}
@ -4202,7 +4119,7 @@ TableFilter.prototype = {
this.SetColWidths();
this.tbl.style.width = '';
if(TF.isIE){
if(hlp.isIE()){
this.headTbl.style.width = '';
}
@ -4265,8 +4182,8 @@ TableFilter.prototype = {
f.col_enable_text_ellipsis = false;
//Cols generation for all browsers excepted IE<=7
o.tblHasColTag = TF.tag(o.tbl,'col').length > 0 ? true : false;
if(!TF.isIE){
o.tblHasColTag = dom.tag(o.tbl,'col').length > 0 ? true : false;
if(!hlp.isIE()){
//Col elements are enough to keep column widths after sorting and
//filtering
var createColTags = function(o){
@ -4285,7 +4202,7 @@ TableFilter.prototype = {
if(!o.tblHasColTag){
createColTags(o);
} else {
var cols = TF.tag(o.tbl,'col');
var cols = dom.tag(o.tbl,'col');
for(var ii=0; ii<o.nbCells; ii++){
cols[ii].setAttribute('id', o.id+'_col_'+ii);
cols[ii].style.width = o.colWidth[ii];
@ -4296,8 +4213,8 @@ TableFilter.prototype = {
//IE <= 7 needs an additional row for widths as col element width is
//not enough...
if(TF.isIE){
var tbody = TF.tag(o.tbl,'tbody'),
if(hlp.isIE()){
var tbody = dom.tag(o.tbl,'tbody'),
r;
if( tbody.length>0 ){
r = tbody[0].insertRow(0);
@ -4356,11 +4273,11 @@ TableFilter.prototype = {
var thCW = o.crWColsRow.cells[colIndex].clientWidth;
var tdCW = o.crWRowDataTbl.cells[colIndex].clientWidth;
if(TF.isIE){
if(hlp.isIE()){
o.tbl.style.width = o.headTbl.clientWidth+'px';
}
if(thCW != tdCW && !TF.isIE){
if(thCW != tdCW && !hlp.isIE()){
o.headTbl.style.width = o.tbl.clientWidth+'px';
}
@ -4392,7 +4309,7 @@ TableFilter.prototype = {
this.tblCont = null;
this.tbl.outerHTML = this.sourceTblHtml;
this.tbl = TF.id(this.id); //needed to keep reference
this.tbl = dom.id(this.id); //needed to keep reference
},
/*====================================================
@ -4448,7 +4365,7 @@ TableFilter.prototype = {
var popUpDiv = o.popUpFltElms[colIndex],
header = o.GetHeaderElement(colIndex),
headerWidth = header.clientWidth * 0.95;
if(TF.isIE){
if(hlp.isIE()){
var headerLeft = dom.position(header).left;
popUpDiv.style.left = (headerLeft) + 'px';
}
@ -4695,7 +4612,7 @@ TableFilter.prototype = {
// value(s) for filtering
if(this['col'+i]===this.fltTypeSlc ||
this['col'+i]===this.fltTypeMulti){
var slc = TF.id( this.fltIds[i] );
var slc = dom.id( this.fltIds[i] );
slc.options[0].selected = false;
//selects
@ -4716,7 +4633,7 @@ TableFilter.prototype = {
this.hasStoredValues = true;
// IE multiple selection work-around
if(TF.isIE){
if(hlp.isIE()){
this.__deferMultipleSelection(slc,j,false);
hasStoredValues = false;
}
@ -4841,11 +4758,11 @@ TableFilter.prototype = {
if(this.contDiv){
return;
}
var thead = TF.tag(this.tbl,'thead');
var thead = dom.tag(this.tbl,'thead');
if(thead.length===0){
return;
}
var tbody = TF.tag(this.tbl,'tbody');
var tbody = dom.tag(this.tbl,'tbody');
//firefox returns tbody height
if(tbody[0].clientHeight!==0){
//previous values
@ -4863,12 +4780,12 @@ TableFilter.prototype = {
contDiv.className = this.contDivCssClass;
this.tbl.parentNode.insertBefore(contDiv, this.tbl);
contDiv.appendChild(this.tbl);
this.contDiv = TF.id(this.prfxContentDiv+this.id);
this.contDiv = dom.id(this.prfxContentDiv+this.id);
//prevents headers moving during window scroll (IE)
this.contDiv.style.position = 'relative';
var theadH = 0;
var theadTr = TF.tag(thead[0],'tr');
var theadTr = dom.tag(thead[0],'tr');
//css below emulates fixed headers on IE<=6
for(var i=0; i<theadTr.length; i++){
theadTr[i].style.cssText += 'position:relative; ' +
@ -4878,12 +4795,12 @@ TableFilter.prototype = {
this.contDiv.style.height = (this.tBodyH+theadH)+'px';
var tfoot = TF.tag(this.tbl,'tfoot');
var tfoot = dom.tag(this.tbl,'tfoot');
if(tfoot.length===0){
return;
}
var tfootTr = TF.tag(tfoot[0],'tr');
var tfootTr = dom.tag(tfoot[0],'tr');
//css below emulates fixed footer on IE<=6
for(var j=0; j<tfootTr.length; j++){
@ -4907,29 +4824,29 @@ TableFilter.prototype = {
this.contDiv.parentNode.insertBefore(this.tbl, this.contDiv);
this.contDiv.parentNode.removeChild( this.contDiv );
this.contDiv = null;
var thead = TF.tag(this.tbl,'thead');
var thead = dom.tag(this.tbl,'thead');
if(thead.length===0){
return;
}
var theadTr = TF.tag(thead[0],'tr');
var theadTr = dom.tag(thead[0],'tr');
if(theadTr.length===0){
return;
}
for(var i=0; i<theadTr.length; i++){
theadTr[i].style.cssText = '';
}
var tfoot = TF.tag(this.tbl,'tfoot');
var tfoot = dom.tag(this.tbl,'tfoot');
if(tfoot.length===0){
return;
}
var tfootTr = TF.tag(tfoot[0],'tr');
var tfootTr = dom.tag(tfoot[0],'tr');
for(var j=0; j<tfootTr.length; j++){
tfootTr[j].style.position = 'relative';
tfootTr[j].style.top = '';
tfootTr[j].style.overeflowX = '';
}
} else {
var tbody = TF.tag(this.tbl,'tbody');
var tbody = dom.tag(this.tbl,'tbody');
if(tbody.length===0){
return;
}
@ -5521,7 +5438,7 @@ TableFilter.prototype = {
if(!this.fltGrid){
return null;
}
return TF.id(this.fltIds[index]);
return dom.id(this.fltIds[index]);
},
/*====================================================
@ -5733,7 +5650,7 @@ TableFilter.prototype = {
if(slc.options[j].value!=='' &&
array.has(s, slc.options[j].value, true)){
// IE multiple selection work-around
if(TF.isIE){
if(hlp.isIE()){
//when last value reached filtering can be executed
var filter = ct==(s.length-1) && execFilter ?
true : false;
@ -5752,10 +5669,10 @@ TableFilter.prototype = {
var sarg = searcharg.split(' '+this.orOperator+' '),
fltValue = slc.setAttribute('value',''),
fltIndex = slc.setAttribute('indexes','');
for(var k=0; k<TF.tag(slc,'li').length; k++){
var li = TF.tag(slc,'li')[k],
lbl = TF.tag(li,'label')[0],
chk = TF.tag(li,'input')[0],
for(var k=0; k<dom.tag(slc,'li').length; k++){
var li = dom.tag(slc,'li')[k],
lbl = dom.tag(li,'label')[0],
chk = dom.tag(li,'input')[0],
lblTxt = str.matchCase(
dom.getText(lbl), this.matchCase);
if(lblTxt!=='' && array.has(sarg, lblTxt, true)){
@ -5892,7 +5809,7 @@ TableFilter.prototype = {
activeFlt = activeFlt.split(this.prfxFlt)[1];
var slcSelectedValue;
for(var i=0; i<slcIndex.length; i++){
var curSlc = TF.id(this.fltIds[slcIndex[i]]);
var curSlc = dom.id(this.fltIds[slcIndex[i]]);
slcSelectedValue = this.GetFilterValue(slcIndex[i]);
if(activeFlt!==slcIndex[i] ||
(this.paging && array.has(slcA1, slcIndex[i]) &&
@ -6167,24 +6084,24 @@ TableFilter.prototype = {
//if outputType is defined
if(oTypeThisCol && result){
result = result.toFixed( precision );
if(TF.id(labThisCol[i])){
if(dom.id(labThisCol[i])){
switch( str.lower(oTypeThisCol) ){
case 'innerhtml':
if (isNaN(result) || !isFinite(result) ||
nbvalues===0){
TF.id(labThisCol[i]).innerHTML = '.';
dom.id(labThisCol[i]).innerHTML = '.';
} else{
TF.id(labThisCol[i]).innerHTML = result;
dom.id(labThisCol[i]).innerHTML = result;
}
break;
case 'setvalue':
TF.id( labThisCol[i] ).value = result;
dom.id( labThisCol[i] ).value = result;
break;
case 'createtextnode':
var oldnode = TF.id(labThisCol[i])
var oldnode = dom.id(labThisCol[i])
.firstChild;
var txtnode = dom.text(result);
TF.id(labThisCol[i])
dom.id(labThisCol[i])
.replaceChild(txtnode, oldnode);
break;
}//switch
@ -6193,9 +6110,9 @@ TableFilter.prototype = {
try{
if(isNaN(result) || !isFinite(result) ||
nbvalues===0){
TF.id(labThisCol[i]).innerHTML = '.';
dom.id(labThisCol[i]).innerHTML = '.';
} else {
TF.id(labThisCol[i]).innerHTML = result.toFixed(
dom.id(labThisCol[i]).innerHTML = result.toFixed(
precision);
}
} catch(e) {}//catch
@ -6329,7 +6246,7 @@ TableFilter.prototype = {
// filters are appended in external placeholders elements
if(this.isExternalFlt){
for(var ct=0; ct<this.externalFltTgtIds.length; ct++){
var extFlt = TF.id(this.externalFltTgtIds[ct]);
var extFlt = dom.id(this.externalFltTgtIds[ct]);
if(extFlt){
extFlt.appendChild(this.externalFltEls[ct]);
var colFltType = this['col'+ct];
@ -6423,7 +6340,7 @@ TableFilter.prototype = {
var o = this,
isLoaded = false,
file,
head = TF.tag(doc,'head')[0];
head = dom.tag(doc,'head')[0];
if(str.lower(ftype) === 'link'){
file = dom.create(
@ -6551,7 +6468,7 @@ TableFilter.prototype = {
=====================================================*/
GetHeaderElement: function(colIndex){
var table = this.gridLayout ? this.headTbl : this.tbl;
var header, tHead = TF.tag(this.tbl,'thead');
var header, tHead = dom.tag(this.tbl,'thead');
for(var i=0; i<this.nbCells; i++){
if(i !== colIndex){
continue;
@ -6613,7 +6530,7 @@ function isImported(filePath, type){
var imported = false,
importType = !type ? 'script' : type,
attr = importType == 'script' ? 'src' : 'href',
files = TF.tag(doc,importType);
files = dom.tag(doc,importType);
for (var i=0; i<files.length; i++){
if(files[i][attr] === undefined){
continue;
@ -6690,19 +6607,6 @@ return TableFilter;
});
// modules container
function TF(){}
TF.id = function(id){
return document.getElementById(id);
};
TF.tag = function(o, tagname){
return o.getElementsByTagName(tagname);
};
TF.isIE = /msie|MSIE/.test(navigator.userAgent);
/*====================================================
- Sets filters grid bar
- Calls TF Constructor and generates grid bar
@ -6737,7 +6641,7 @@ TF.isIE = /msie|MSIE/.test(navigator.userAgent);
// function initFilterGrid(){
// if(!document.getElementsByTagName){ return; }
// var tbls = TF.tag(document,'table'), config;
// var tbls = dom.tag(document,'table'), config;
// for (var i=0; i<tbls.length; i++){
// var cTbl = tbls[i], cTblId = cTbl.getAttribute('id');
// if(TF.Dom.hasClass(cTbl,'filterable') && cTblId){

View file

@ -146,6 +146,14 @@ define(function (require) {
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;

View file

@ -0,0 +1,4 @@
return require('core');
});

15
src/helpers.js Normal file
View file

@ -0,0 +1,15 @@
/**
* Misc helpers
*/
define(function (require) {
'use strict';
var Helpers = {
isIE: function(){
return (/msie|MSIE/).test(navigator.userAgent);
}
};
return Helpers;
});

View file

@ -2,7 +2,7 @@
<html lang="en">
<head>
<title>HTML Table Filter Generator</title>
<script data-main="../dist/tf-main" src="../dist/libs/require.js"></script>
<script src="../libs/requirejs/require.js"></script>
</head>
<body>
<table id="demo" cellpadding="0" cellspacing="0">
@ -67,19 +67,24 @@
</table>
<script>
// var tf = setFilterGrid("demo", {
// col_0: 'select',
// col_3: 'checklist',
// base_path: './',
// enable_default_theme: true,
// paging: false,
// alternate_rows: true,
// highlight_keywords: true,
// match_case: false,
// remember_grid_values: true,
// btn_reset: true,
// grid_layout: false
// });
requirejs(['core'], function(TableFilter){
// Your logic here
var tf = new TableFilter("demo", {
col_0: 'select',
col_3: 'checklist',
base_path: './',
enable_default_theme: true,
paging: false,
alternate_rows: true,
highlight_keywords: true,
match_case: false,
remember_grid_values: true,
btn_reset: true,
grid_layout: false
});
tf.init();
});
</script>
</body>
</html>

View file

@ -1,6 +1,5 @@
define(['../dom', '../types'], function (dom, types) {
'use strict';
console.log(arguments);
var global = window;
@ -34,13 +33,13 @@ console.log(arguments);
var targetEl = !tf.loaderTgtId ?
(tf.gridLayout ? tf.tblCont : tf.tbl.parentNode) :
TF.id(tf.loaderTgtId);
dom.id(tf.loaderTgtId);
if(!tf.loaderTgtId){
targetEl.insertBefore(containerDiv, tf.tbl);
} else {
targetEl.appendChild(containerDiv);
}
tf.loaderDiv = TF.id(tf.prfxLoader+tf.id);
tf.loaderDiv = dom.id(tf.prfxLoader+tf.id);
if(!tf.loaderHtml){
tf.loaderDiv.appendChild(dom.text(tf.loaderText));
} else {
@ -78,7 +77,7 @@ console.log(arguments);
}
var targetEl = !this.tf.loaderTgtId ?
(this.tf.gridLayout ? this.tf.tblCont : this.tf.tbl.parentNode) :
TF.id(this.tf.loaderTgtId);
dom.id(this.tf.loaderTgtId);
targetEl.removeChild(this.tf.loaderDiv);
this.tf.loaderDiv = null;
};

View file

@ -0,0 +1,10 @@
(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() {

View file

@ -1,26 +0,0 @@
// requirejs.config({
// baseUrl: '../dist/libs',
// paths: {
// tf: '.'
// }
// });
requirejs(['core'], function(TableFilter){
// Your logic here
var tf = new TableFilter("demo", {
col_0: 'select',
col_3: 'checklist',
base_path: './',
enable_default_theme: true,
paging: false,
alternate_rows: true,
highlight_keywords: true,
match_case: false,
remember_grid_values: true,
btn_reset: true,
grid_layout: false
});
tf.init();
});

View file

@ -7,6 +7,8 @@ define(function () {
var Types = {};
var UNDEFINED = void 0;
/**
* Checks if var exists and is an object
* @param {String or Object} v
@ -44,5 +46,14 @@ define(function () {
return (obj && obj.constructor == Array);
};
/**
* Determines if passed param is undefined
* @param {Any} o
* @return {Boolean}
*/
Types.isUndef = function(o){
return o === UNDEFINED;
};
return Types;
});