333 lines
12 KiB
JavaScript
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>
|
|
*/ |