374 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			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(/[ ]/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(/[ ]/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| ]/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| ]/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));
 | |
|     };
 | |
| 
 | |
| }
 | |
| 
 | |
| 
 |