Files
conservatorio-tomadini/components/com_tabulizer/assets/js/datatables/jtquery.dataTables.extensions.js
2024-12-17 17:34:10 +01:00

374 lines
13 KiB
JavaScript

/**
* =========================================================================
* Plugins and other extensions
* =========================================================================
*/
jtQuery.fn.dataTableExt.oApi.fnGetFilteredNodes = function ( oSettings )
{
var anRows = [];
for ( var i=0, iLen=oSettings.aiDisplay.length ; i<iLen ; i++ )
{
var nRow = oSettings.aoData[ oSettings.aiDisplay[i] ].nTr;
anRows.push( nRow );
}
return anRows;
};
/**
* =========================================================================
* Bug fixes
* =========================================================================
*/
function datatablesFixVerticalHeaderAlignment(e){var t=jtQuery("#"+e).closest(".dataTables_scroll");if(t){var n=t.find(".dataTables_scrollHead");var r=t.find(".dataTables_scrollHeadInner");var i=t.find(".dataTables_scrollBody");var s=t.find(".dataTables_scrollHeadInner > table.dataTable");var o=t.find(".dataTables_scrollBody > table.dataTable");var u=i.innerWidth()+"px";var a=jtQuery("<div />");i.append(a);u=a.width();a.remove();s.css("width",u);o.css("width",u);r.css("width",u);s.css("table-layout","fixed");o.css("table-layout","fixed");var f=[];o.find("tr").each(function(){var e=jtQuery(this);e.find("td").each(function(e){td_width=getComputedStyle(this,null).width;if(!f[e])f[e]=td_width;else if(f[e]<td_width)f[e]=td_width})});o.find("tr").each(function(){var e=jtQuery(this);e.find("td").each(function(e){if(f[e])jtQuery(this).css("width",f[e]+"px")})});s.find("tr").each(function(){var e=jtQuery(this);e.find("td").each(function(e){if(f[e])jtQuery(this).css("width",f[e]+"px")})})}}
function datatablesFixVerticalScroll(a){var l=jtQuery("#"+a).closest(".dataTables_scroll");if(l){var s=l.find(".dataTables_scrollHead"),t=l.find(".dataTables_scrollBody"),e=t.hasClass("sync_bound");s&&t&&(e||(t.on("scroll",function(){s.scrollLeft(jtQuery(this).scrollLeft())}),t.addClass("sync_bound"))),setInterval(function(){datatablesFixVerticalHeaderAlignment(a)},650)}}
/**
* =========================================================================
* Search/filter Highlight code
* =========================================================================
*/
function searchHTML(searchString, htmlString) {
var expr = new RegExp(searchString, "gi");
var container = jtQuery("<div>").html(htmlString);
var elements = container.find("*").andSelf();
var textNodes = elements.contents().not(elements);
textNodes.each(function() {
var matches = this.nodeValue.match(expr);
if (matches) {
var parts = this.nodeValue.split(expr);
for (var n = 0; n < parts.length; n++) {
if (n) {
jtQuery('<span class="search_highlight">').text(matches[n - 1]).insertBefore(this);
}
if (parts[n]) {
jtQuery(document.createTextNode(parts[n])).insertBefore(this);
}
}
jtQuery(this).remove();
}
});
return container.html();
}
/**
* =========================================================================
* DataTypes
* =========================================================================
*/
if(typeof cleanHTMLTags !== 'function') {
function cleanHTMLTags(html) {
if (html == '') return html;
html = html.replace(/<(?:.|\n)*?>/gm, '');
return html;
}
}
if(typeof cleanAndTrim !== 'function') {
function cleanAndTrim(str) {
str_text = jtQuery("<div/>").html(str).text();
str_text = str_text.replace(/[&nbsp;]/gm, "").trim();
return str_text;
}
}
/**
* Text with acutes or other string that need localized comparisons
*/
/*
jtQuery.fn.dataTableExt.aTypes.unshift(
function ( sData )
{
return 'local-str';
}
);
*/
jtQuery.fn.dataTableExt.oSort['local-str-asc'] = function(a,b) {
a = cleanAndTrim(a);
b = cleanAndTrim(b);
return a.localeCompare(b);
};
jtQuery.fn.dataTableExt.oSort['local-str-desc'] = function(a,b) {
a = cleanAndTrim(a);
b = cleanAndTrim(b);
return b.localeCompare(a);
};
/**
* String Dates
* Sort properly dates similar to Monday, 15th of April
*/
function isDateSystem(str) {
if (str == '') return true;
var d = Date.parse(str);
if (isNaN(d) == false) return true;
else return false;
}
function parseDateSystem(str) {
str = cleanHTMLTags(str);
str = str.replace(/[&nbsp;]/gmi, "");
var d = Date.parse(str);
if (isNaN(d) == false) return 0;
else return d;
}
function isDDMMYY(str) {
if (str == '') return true;
var r = /^(0?[1-9]|[12][0-9]|3[01])[\/\-\.](0?[1-9]|1[012])[\/\-\.]\d{2}$/;
return r.test(str);
}
function parseDDMMYY(str) {
if (str == '') return 0;
var m = str.match(/^(0?[1-9]|[12][0-9]|3[01])[\/\-\.](0?[1-9]|1[012])[\/\-\.](\d{2})$/);
if (m) {
var day = parseInt(m[1]);
var month = parseInt(m[2])-1;
var year = parseInt(m[3]);
year = (year>30)?parseInt("19"+ m[3]):parseInt("20"+ m[3]);
return new Date(year, month, day).getTime();;
} else return 0;
}
function isMMDDYY(str) {
if (str == '') return true;
var r = /^(0?[1-9]|1[012])[\/\-\.](0?[1-9]|[12][0-9]|3[01])[\/\-\.]\d{2}$/;
return r.test(str);
}
function parseMMDDYY(str) {
if (str == '') return 0;
var m = str.match(/^(0?[1-9]|1[012])[\/\-\.](0?[1-9]|[12][0-9]|3[01])[\/\-\.](\d{2})$/);
if (m) {
var day = parseInt(m[2]);
var month = parseInt(m[1])-1;
var year = parseInt(m[3]);
year = (year>30)?parseInt("19"+ m[3]):parseInt("20"+ m[3]);
return new Date(year, month, day).getTime();
} else return 0;
}
function isMMDDYYYY(str) {
if (str == '') return true;
var r = /^(0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])[\/\-]\d{4}$/;
return r.test(str);
}
function parseMMDDYYYY(str) {
if (str == '') return 0;
var m = str.match(/^(0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])[\/\-](\d{4})$/);
if (m) {
var day = parseInt(m[2]);
var month = parseInt(m[1])-1;
var year = parseInt(m[3]);
return new Date(year, month, day).getTime();
} else return 0;
}
function isDDMMYYYY(str) {
if (str == '') return true;
var r = /^(0?[1-9]|[12][0-9]|3[01])[\/\-](0?[1-9]|1[012])[\/\-]\d{4}$/;
return r.test(str);
}
function parseDDMMYYYY(str) {
if (str == '') return 0;
var m = str.match(/^(0?[1-9]|[12][0-9]|3[01])[\/\-](0?[1-9]|1[012])[\/\-](\d{4})$/);
if (m) {
var day = parseInt(m[1]);
var month = parseInt(m[2])-1;
var year = parseInt(m[3]);
return new Date(year, month, day).getTime();
} else return 0;
}
jtQuery.fn.dataTableExt.oSort['date-str-asc'] = function(a,b) {
var x = parseDateStrType(a, 'asc'), y = parseDateStrType(b, 'asc');
return ((x < y) ? -1 : ((x > y) ? 1 : 0));
};
jtQuery.fn.dataTableExt.oSort['date-str-desc'] = function(a,b) {
var x = parseDateStrType(a, 'desc'), y = parseDateStrType(b, 'desc');
return ((x < y) ? 1 : ((x > y) ? -1 : 0));
};
function isDateStrType(str) {
return isDateSystem(str);
}
function parseDateStrType(str) {
str = cleanAndTrim(str);
return parseDateSystem(str);
}
/*
jtQuery.fn.dataTableExt.aTypes.unshift(
function ( sData ) {
sData = cleanAndTrim(sData);
if (sData == "") return 'date-str';
if (isDateStrType(sData)) return 'date-str';
else return null;
}
);
*/
/**
* Forced Comma Formatted Number
*/
function getForcedCommaFormattedNumber (str) {
var r = /^[+-]?\d+(\.\d{3})*\,?\d*$/;
if (r.test(str)) {
x = str.replace( /\./g, "" );
x = x.replace( /,/, "." );
x = parseFloat( x );
} else {
x = parseFloat ( str);
}
return x;
}
function parseForcedCommaFormattedNumber(a, sorting_order) {
var empty_value = (sorting_order == 'asc') ? Number.MAX_VALUE : -Number.MAX_VALUE;
a = jtQuery("<div/>").html(a).text();
a = cleanHTMLTags(a);
a = a.replace(/[^0-9.,\-\+]/g, "");
if (( a == "-" ) || (a == "+") || (a == "")) a = empty_value;
else a = getForcedCommaFormattedNumber(a);
return a;
}
jtQuery.fn.dataTableExt.oSort['forced-numeric-comma-asc'] = function(a,b) {
var x = parseForcedCommaFormattedNumber(a, 'asc'), y = parseForcedCommaFormattedNumber(b, 'asc');
return ((x < y) ? -1 : ((x > y) ? 1 : 0));
};
jtQuery.fn.dataTableExt.oSort['forced-numeric-comma-desc'] = function(a,b) {
var x = parseForcedCommaFormattedNumber(a, 'desc'), y = parseForcedCommaFormattedNumber(b, 'desc');
return ((x < y) ? 1 : ((x > y) ? -1 : 0));
};
/**
* Forced Period Formatted Number
*/
function getForcedPeriodFormattedNumber (str) {
var r = /^[+-]?\d+(,\d{3})*\.?\d*$/;
if (r.test(str)) {
x = str.replace( /,/g, "" );
x = parseFloat( x );
} else {
x = parseFloat ( str);
}
return x;
}
function parseForcedPeriodFormattedNumber(a, sorting_order) {
var empty_value = (sorting_order == 'asc') ? Number.MAX_VALUE : -Number.MAX_VALUE;
a = jtQuery("<div/>").html(a).text();
a = cleanHTMLTags(a);
a = a.replace(/[^0-9.,\-\+]/g, "");
if (( a == "-" ) || (a == "+") || (a == "")) a = empty_value;
else a = getForcedPeriodFormattedNumber(a);
return a;
}
jtQuery.fn.dataTableExt.oSort['forced-numeric-period-asc'] = function(a,b) {
var x = parseForcedPeriodFormattedNumber(a, 'asc'), y = parseForcedPeriodFormattedNumber(b, 'asc');
return ((x < y) ? -1 : ((x > y) ? 1 : 0));
};
jtQuery.fn.dataTableExt.oSort['forced-numeric-period-desc'] = function(a,b) {
var x = parseForcedPeriodFormattedNumber(a, 'desc'), y = parseForcedPeriodFormattedNumber(b, 'desc');
return ((x < y) ? 1 : ((x > y) ? -1 : 0));
};
/**
* Comma Separated Numbers
* Sort properly numbers with commas that may be enclosed in HTML tags, e.g. 1,000 1,100,090 1,234.56 <strong>1000</strong>, $100, 5% 3.2%
*/
if(typeof overwriteCommaFormattedNumberWithCustom !== 'boolean') {
function isCommaFormattedNumber (str) {
var r1 = /^[+-]?\d+(,\d{3})*\.?\d*$/;
var r2 = /^[+-]?\d+(\.\d{3})*\,?\d*$/;
var r3 = /^[+-]?\d+(,\d+)$/;
if (r1.test(str)) { regex_id = 1; return true; }
else if (r2.test(str)) { regex_id = 2; return true; }
else if (r3.test(str)) { regex_id = 3; return true; }
else { regex_id = 0; return false; }
}
function getCommaFormattedNumber (str) {
var r1 = /^[+-]?\d+(,\d{3})*\.?\d*$/;
var r2 = /^[+-]?\d+(\.\d{3})*\,?\d*$/;
var r3 = /^[+-]?\d+(,\d+)$/;
var regex_id = 0;
if (r1.test(str)) { regex_id = 1; }
else if (r2.test(str)) { regex_id = 2; }
else if (r3.test(str)) { regex_id = 3; }
else { regex_id = 0; return str; }
var x = null;
switch (regex_id) {
case 1: x = str.replace( /,/g, "" );
break;
case 2: x = str.replace( /\./g, "" );
x = x.replace( /,/, "." );
break;
case 3: x = str.replace( /,/, "." );
break;
default:
// we should never reach this line!
return str;
}
x = parseFloat( x );
return x;
}
function parseCommaFormattedNumber(a, sorting_order) {
var empty_value = (sorting_order == 'asc') ? Number.MAX_VALUE : -Number.MAX_VALUE;
a = jtQuery("<div/>").html(a).text();
a = cleanHTMLTags(a);
a = a.replace(/[\s|&nbsp;]/gmi, "").replace(/[\+|%|\$|\£|\€]/gm,"");
if (( a == "-" ) || (a == "+") || (a == "")) a = empty_value;
else a = getCommaFormattedNumber(a);
return a;
}
jtQuery.fn.dataTableExt.aTypes.unshift(
function ( sData )
{
sData = jtQuery("<div/>").html(sData).text();
sData = cleanHTMLTags(sData);
sData = sData.replace(/[\s|&nbsp;]/gmi, "").replace(/[\+|%|\$|\£|\€]/gm,"");
if (sData == "") return 'numeric-comma';
if (isCommaFormattedNumber(sData)) return 'numeric-comma';
else return null;
}
);
jtQuery.fn.dataTableExt.oSort['numeric-comma-asc'] = function(a,b) {
var x = parseCommaFormattedNumber(a, 'asc'), y = parseCommaFormattedNumber(b, 'asc');
return ((x < y) ? -1 : ((x > y) ? 1 : 0));
};
jtQuery.fn.dataTableExt.oSort['numeric-comma-desc'] = function(a,b) {
var x = parseCommaFormattedNumber(a, 'desc'), y = parseCommaFormattedNumber(b, 'desc');
return ((x < y) ? 1 : ((x > y) ? -1 : 0));
};
}