Files
2024-12-17 17:34:10 +01:00

333 lines
12 KiB
JavaScript

/* future reference */
/*
function isValidDate(d) {
if ( Object.prototype.toString.call(d) !== "[object Date]" ) return false;
return !isNaN(d.getTime());
}
function _convertOperand(operand, data_type) {
switch (data_type) {
case 'numeric_int':
operand = operand.replace(/,/g, '').replace(/\./g, '');
operand = parseInt(operand.replace(/[^\d.-]/g, ''));
if (isNaN(operand)) return false;
else return operand;
break;
case 'numeric_period':
operand = operand.replace(/,/g, '');
operand = parseFloat(operand.replace(/[^\d.-]/g, ''));
if (isNaN(operand)) return false;
else return operand;
break;
case 'numeric_comma':
operand = operand.replace(/\./g, '');
operand = operand.replace(',', '.');
operand = parseFloat(operand.replace(/[^\d.-]/g, ''));
if (isNaN(operand)) return false;
else return operand;
break;
case 'date_auto':
operand = Date.parse(operand);
if (isNaN(operand)) return false;
else return operand;
break;
case 'date_ymd':
var parts = operand.split(/[-.\/]+/)
if (parts.length == 3) {
// new Date(year, month [, day [, hours[, minutes[, seconds[, ms]]]]])
var operand = new Date(parts[0], parts[1]-1, parts[2]); // Note: months are 0-based
if (isValidDate(operand)) return operand.getTime();
else return false;
} else return false;
break;
case 'date_ydm':
var parts = operand.split(/[-.\/]+/)
if (parts.length == 3) {
// new Date(year, month [, day [, hours[, minutes[, seconds[, ms]]]]])
var operand = new Date(parts[0], parts[2]-1, parts[1]); // Note: months are 0-based
if (isValidDate(operand)) return operand.getTime();
else return false;
} else return false;
break;
case 'date_dmy':
var parts = operand.split(/[-.\/]+/)
if (parts.length == 3) {
// new Date(year, month [, day [, hours[, minutes[, seconds[, ms]]]]])
var operand = new Date(parts[2], parts[1]-1, parts[0]); // Note: months are 0-based
if (isValidDate(operand)) return operand.getTime();
else return false;
} else return false;
break;
case 'date_mdy':
var parts = operand.split(/[-.\/]+/)
if (parts.length == 3) {
// new Date(year, month [, day [, hours[, minutes[, seconds[, ms]]]]])
var operand = new Date(parts[2], parts[0]-1, parts[1]); // Note: months are 0-based
if (isValidDate(operand)) return operand.getTime();
else return false;
} else return false;
break;
}
}
function _compareOperands(operation, operand_1, operand_2, data_type, entry) {
if (entry === false) return false;
switch (operation) {
case 'greater':
if (operand_1 === false) return true;
if (entry >= operand_1) return true; else return false;
break;
case 'less':
if (operand_1 === false) return true;
if (entry <= operand_1) return true; else return false;
break;
case 'equal':
if (operand_1 === false) return true;
if (entry == operand_1) return true; else return false;
break;
case 'between':
if ((operand_1 === false)&&(operand_2 === false)) {
return true;
} else if (operand_1 === false) {
if (entry <= operand_2) return true; else return false;
} else if (operand_2 === false) {
if (entry >= operand_1) return true; else return false;
} else {
if ((entry >= operand_1)&&(entry <= operand_2)) return true; else return false;
}
break;
}
}
function Ha ( oSettings, sInput, iColumn, bRegex, bSmart, bCaseInsensitive )
{
if ( sInput === "" )
{
return;
}
if ((bRegex !== true)&&(bRegex !== false)) {
sCompare = true;
data_type = bRegex;
} else {
sCompare = false;
}
if ( sCompare ) {
var iIndexCorrector = 0;
var matches, operation = false, operand_1 = null, operand_2 = null, entry = null;
var regex_greater = />(.+)/g;
var regex_less = /<(.+)/g;
var regex_between = /(.+)&(.+)/gi;
matches = regex_greater.exec(sInput);
if (matches) {
operation = 'greater';
operand_1 = _convertOperand(matches[1].replace(/ /g,''), data_type);
operand_2 = null;
}
matches = regex_less.exec(sInput);
if (matches) {
operation = 'less';
operand_1 = _convertOperand(matches[1].replace(/ /g,''), data_type);
operand_2 = null;
}
matches = regex_between.exec(sInput);
if (matches) {
operation = 'between';
operand_1 = _convertOperand(matches[1].replace(/ /g,''), data_type);
operand_2 = _convertOperand(matches[2].replace(/ /g,''), data_type);
}
if (operation === false) {
operation = 'equal';
operand_1 = _convertOperand(sInput.replace(/ /g,''), data_type);
}
if (operation) {
for ( var i=oSettings.aiDisplay.length-1 ; i>=0 ; i-- )
{
var sData = Ja( v( oSettings, oSettings.aiDisplay[i], iColumn, 'filter' ),
oSettings.aoColumns[iColumn].sType );
if (sData === '') entry = false;
else entry = _convertOperand(sData, data_type);
if ( (entry === false) || ( ! _compareOperands(operation, operand_1, operand_2, data_type, entry ) ) )
{
oSettings.aiDisplay.splice( i, 1 );
iIndexCorrector++;
}
}
}
return;
}
var iIndexCorrector = 0;
var rpSearch = ma( sInput, bRegex, bSmart, bCaseInsensitive, sCompare );
for ( var i=oSettings.aiDisplay.length-1 ; i>=0 ; i-- )
{
var sData = Ja( v( oSettings, oSettings.aiDisplay[i], iColumn, 'filter' ),
oSettings.aoColumns[iColumn].sType );
if ( ! rpSearch.test( sData ) )
{
oSettings.aiDisplay.splice( i, 1 );
iIndexCorrector++;
}
}
}
function updatePlotByHeaderSelection(plot_id, header_id, data ) {
var plot1 = graph_plots[plot_id];
var i, num_of_series = plot1.series.length;
if (data) {
var new_data = [];
for (i=0;i< num_of_series;i++) {
plot1.series[i].data.push(data[i]);
new_data[i] = plot1.series[i].data.push(data[i]);
}
plot1.resetAxesScale();
plot1.replot({graph_data: new_data});
} else {
for (i=0;i< num_of_series;i++) {
plot1.series[i].data.splice(header_id,1);
}
plot1.resetAxesScale();
plot1.replot();
}
return;
}
function datatablesFixVerticalHeaderAlignment(table_id) {
var dt_scroller = jtQuery("#" + table_id).closest(".dataTables_scroll");
if (dt_scroller) {
var scroll_header = dt_scroller.find(".dataTables_scrollHead");
var scroll_innerheader = dt_scroller.find(".dataTables_scrollHeadInner");
var scroll_body = dt_scroller.find(".dataTables_scrollBody");
var header_table = dt_scroller.find(".dataTables_scrollHeadInner > table.dataTable");
var data_table = dt_scroller.find(".dataTables_scrollBody > table.dataTable");
var table_width = scroll_body.innerWidth() + "px";
var helperDiv = jtQuery('<div />');
scroll_body.append(helperDiv);
table_width = helperDiv.width();
helperDiv.remove();
header_table.css("width", table_width);
data_table.css("width", table_width);
scroll_innerheader.css("width", table_width);
header_table.css("table-layout", "fixed");
data_table.css("table-layout", "fixed");
var header_widths = [];
data_table.find("tr").each(function() {
var tr = jtQuery(this);
tr.find("td").each(function(i) {
td_width = jtQuery(this).width();
td_width = getComputedStyle(this, null).width;
if (!header_widths[i]) header_widths[i] = td_width;
else if (header_widths[i] < td_width) header_widths[i] = td_width;
});
});
data_table.find("tr").each(function() {
var tr = jtQuery(this);
tr.find("td").each(function(i) {
if (header_widths[i]) jtQuery(this).css("width", header_widths[i] + "px");
});
});
header_table.find("tr").each(function() {
var tr = jtQuery(this);
tr.find("td").each(function(i) {
if (header_widths[i]) jtQuery(this).css("width", header_widths[i] + "px");
});
});
}
}
function datatablesFixVerticalScroll(table_id) {
var dt_scroller = jtQuery("#" + table_id).closest(".dataTables_scroll");
if (dt_scroller) {
var top_scroll = dt_scroller.find(".dataTables_scrollHead");
var bottom_scroll = dt_scroller.find(".dataTables_scrollBody");
var sync_bound = bottom_scroll.hasClass( "sync_bound" );
if (top_scroll && bottom_scroll) {
if (!sync_bound) {
bottom_scroll.on("scroll", function () { top_scroll.scrollLeft(jtQuery(this).scrollLeft()); });
bottom_scroll.addClass("sync_bound");
}
}
setInterval(function() { datatablesFixVerticalHeaderAlignment(table_id)}, 650);
}
}
function datatablesVerticalScrollFix(table_id) {
var dt_scroller = jtQuery("#" + table_id).closest(".dataTables_scroll");
if (dt_scroller) {
var scroll_header = dt_scroller.find(".dataTables_scrollHeadInner");
var scroll_body = dt_scroller.find(".dataTables_scrollBody");
var header_table = dt_scroller.find(".dataTables_scrollHeadInner > table.dataTable");
var data_table = dt_scroller.find(".dataTables_scrollBody > table.dataTable");
var td_width, inner_width = scroll_body.innerWidth()+"px", outer_width = scroll_header.outerWidth()+"px", table_width=scroll_header.width()+"px"
header_table.css("width", table_width);
data_table.css("width", table_width);
var header_widths = [];
data_table.find("tr").each(function() {
var tr = jtQuery(this);
tr.find("td").each(function(i) {
td_width = jtQuery(this).innerWidth();
if (!header_widths[i]) header_widths[i] = td_width;
else if (header_widths[i] < td_width) header_widths[i] = td_width;
});
});
data_table.find("tr").each(function() {
var tr = jtQuery(this);
tr.find("td").each(function(i) {
if (header_widths[i]) jtQuery(this).css("width", header_widths[i] + "px");
});
});
header_table.find("tr").each(function() {
tr = jtQuery(this);
tr.find("td").each(function(i) {
if (header_widths[i]) jtQuery(this).css("width", header_widths[i] + "px");
});
});
}
}
*/
/*
Current solutions
(1) Using javascript, creating virtual div tag and get the text
function remove_tags(html)
{
var tmp = document.createElement("DIV");
tmp.innerHTML = html;
return tmp.textContent||tmp.innerText;
}
(2) Using regex
function remove_tags(html)
{
return html.replace(/<(?:.|\n)*?>/gm, '');
}
(3) Using JQuery
function remove_tags(html)
{
return jQuery(html).text();
}
These three solutions are working correctly, but if the string is like this
<div> hello <hi all !> </div>
*/