Antrag/Vorschlag für eine Filtermöglichkeit bei der Log Anzeige

Begonnen von eki, 15 Februar 2021, 13:10:32

Vorheriges Thema - Nächstes Thema

eki

Ich habe bei mir mal probehalber ein "Filter" Feature für die Logfile Anzeige eingebaut (mit relativ überschaubaren Änderungen in 01_FHEMWEB.pm und fhemweb.json), und möchte das hier mal zur Diskussion stellen. Für mich ist das vor allem im FHEM Logfile eine Hilfe, weil ich da immer mal wieder nach bestimmten Dingen suche, oder manche Sachen ausblenden will, um mich auf das Wesentliche konzentrieren zu können (kann man natürlich auch mit Betriebssystem Funktionen machen, ist aber so komfortabler).

Die Änderungen in 01_FHEMWEB.pm:
Zeile 2218ff:
  FW_outputChunk($FW_chash, "<a name='top'></a>".
        "<div><label>Filter:</label><input id='flf_filter' type='search'><input id='flf_check' type='checkbox'></div><br>" . # Anchor point for filter features for FileLog
        "<a href='#end_of_file'>jump to the end</a><br><br><div id='flf_content'>", $d)

Zeile 2230ff:
  FW_outputChunk($FW_chash, "</div><br/><a name='end_of_file'></a>".
        "<a href='#top'>jump to the top</a><br/><br/>", $d)


Die Änderungen in fhemweb.js:
Zeile 341ff:
  FW_treeMenu();
  FW_filelogFilter(); // register filtering function for logfile display

Zeile 1043ff:
function
FW_filelogFilter()
{
  var setFilteredContent = function(elem) {
    var flfFilter = elem.find("input#flf_filter");
    var flfCheck = elem.find("input#flf_check");
    var flfActive = flfCheck.is(':checked'); // state of toggle button for switching filter on/off
    var flfRegExp = new RegExp("^.*^((?!" + flfFilter.val() + ").)*$.*$\n","mg"); // need to invert search to only keep lines matching input search string
    var flfFullText = elem.find("#flf_backup");
    if (flfFullText.length==0) { // save original content for further processing but hide
      flfFullText = elem.find("[id=flf_content]").clone(true);
      flfFullText.attr("id","flf_backup");
      flfCheck.after(flfFullText);
      flfFullText.hide();
    }
    var flfContent = elem.find("[id=flf_backup]"); // get original text as input for filtering
    if (flfActive) { // filter needs to be applied
      var flfFilteredContent = flfContent.text().replace(flfRegExp,'');
    } else {         // no filtering, keep original text
      var flfFilteredContent = flfContent.text();
    }
    elem.find("[id=flf_content]").text(flfFilteredContent); // exchange displayed text with filtered one
  };
  $(document).find('input#flf_filter').change(function(){ // callback for changes in filter string
   setFilteredContent($(this).parent().parent());
  });
  $(document).find('input#flf_check').change(function(){
   setFilteredContent($(this).parent().parent());         // callback for filter toggle button
  })
}

eki

... mal als "Ansporn" für Rudi ein Bild, wie das dann aussieht.

JoWiemann

Zitat von: eki am 24 Februar 2021, 07:35:28
... mal als "Ansporn" für Rudi ein Bild, wie das dann aussieht.

Rudi liebt Patchfiles.
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

eki


hmtec99

Eki! Gedankenübertragung!

Vor 20 Minuten hätte ich mir genau das gewünscht!

Bitte umsetzen!  ;)