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>
 | |
|  */ |