CGI-WebToolkit
view release on metacpan or search on metacpan
t/private/javascripts/tablekit.js view on Meta::CPAN
}
if(!t) {
t = $w(cell.className).detect(function(n){ // then look for a data type classname on the heading row cell
return (TableKit.Sortable.types[n]) ? true : false;
});
}
if(!t) {
var rows = TableKit.getBodyRows(table);
cell = rows[0].cells[index]; // grab same index cell from body row to try and match data type
t = TableKit.Sortable.detectors.detect(
function(d){
return TableKit.Sortable.types[d].detect(TableKit.getCellText(cell));
});
}
cache[index] = t;
}
return cache[index];
},
_coltypecache : {}
};
TableKit.Sortable.detectors = $A($w('date-iso date date-eu date-au time currency datasize number casesensitivetext text')); // setting it here because Safari complained when I did it above...
TableKit.Sortable.Type = Class.create();
TableKit.Sortable.Type.prototype = {
initialize : function(name, options){
this.name = name;
options = Object.extend({
normal : function(v){
return v;
},
pattern : /.*/
}, options || {});
this.normal = options.normal;
this.pattern = options.pattern;
if(options.compare) {
this.compare = options.compare;
}
if(options.detect) {
this.detect = options.detect;
}
},
compare : function(a,b){
return TableKit.Sortable.Type.compare(this.normal(a), this.normal(b));
},
detect : function(v){
return this.pattern.test(v);
}
};
TableKit.Sortable.Type.compare = function(a,b) {
return a < b ? -1 : a === b ? 0 : 1;
};
TableKit.Sortable.addSortType(
new TableKit.Sortable.Type('number', {
pattern : /^[-+]?[\d]*\.?[\d]+(?:[eE][-+]?[\d]+)?/,
normal : function(v) {
// This will grab the first thing that looks like a number from a string, so you can use it to order a column of various srings containing numbers.
v = parseFloat(v.replace(/^.*?([-+]?[\d]*\.?[\d]+(?:[eE][-+]?[\d]+)?).*$/,"$1"));
return isNaN(v) ? 0 : v;
}}),
new TableKit.Sortable.Type('text',{
normal : function(v) {
return v ? v.toLowerCase() : '';
}}),
new TableKit.Sortable.Type('casesensitivetext',{pattern : /^[A-Z]+$/}),
new TableKit.Sortable.Type('datasize',{
pattern : /^[-+]?[\d]*\.?[\d]+(?:[eE][-+]?[\d]+)?\s?[k|m|g|t]b$/i,
normal : function(v) {
var r = v.match(/^([-+]?[\d]*\.?[\d]+([eE][-+]?[\d]+)?)\s?([k|m|g|t]?b)?/i);
var b = r[1] ? Number(r[1]).valueOf() : 0;
var m = r[3] ? r[3].substr(0,1).toLowerCase() : '';
var result = b;
switch(m) {
case 'k':
result = b * 1024;
break;
case 'm':
result = b * 1024 * 1024;
break;
case 'g':
result = b * 1024 * 1024 * 1024;
break;
case 't':
result = b * 1024 * 1024 * 1024 * 1024;
break;
}
return result;
}}),
new TableKit.Sortable.Type('date-au',{
pattern : /^\d{2}\/\d{2}\/\d{4}\s?(?:\d{1,2}\:\d{2}(?:\:\d{2})?\s?[a|p]?m?)?/i,
normal : function(v) {
if(!this.pattern.test(v)) {return 0;}
var r = v.match(/^(\d{2})\/(\d{2})\/(\d{4})\s?(?:(\d{1,2})\:(\d{2})(?:\:(\d{2}))?\s?([a|p]?m?))?/i);
var yr_num = r[3];
var mo_num = parseInt(r[2],10)-1;
var day_num = r[1];
var hr_num = r[4] ? r[4] : 0;
if(r[7]) {
var chr = parseInt(r[4],10);
if(r[7].toLowerCase().indexOf('p') !== -1) {
hr_num = chr < 12 ? chr + 12 : chr;
} else if(r[7].toLowerCase().indexOf('a') !== -1) {
hr_num = chr < 12 ? chr : 0;
}
}
var min_num = r[5] ? r[5] : 0;
var sec_num = r[6] ? r[6] : 0;
return new Date(yr_num, mo_num, day_num, hr_num, min_num, sec_num, 0).valueOf();
}}),
new TableKit.Sortable.Type('date-us',{
pattern : /^\d{2}\/\d{2}\/\d{4}\s?(?:\d{1,2}\:\d{2}(?:\:\d{2})?\s?[a|p]?m?)?/i,
normal : function(v) {
if(!this.pattern.test(v)) {return 0;}
var r = v.match(/^(\d{2})\/(\d{2})\/(\d{4})\s?(?:(\d{1,2})\:(\d{2})(?:\:(\d{2}))?\s?([a|p]?m?))?/i);
var yr_num = r[3];
var mo_num = parseInt(r[1],10)-1;
var day_num = r[2];
var hr_num = r[4] ? r[4] : 0;
if(r[7]) {
( run in 1.069 second using v1.01-cache-2.11-cpan-39bf76dae61 )