Autor Thema: Online Attributhilfe für ähnliche Attribute duplizieren/übernehmen  (Gelesen 1343 mal)

Offline Thorsten Pferdekaemper

  • Developer
  • Hero Member
  • ****
  • Beiträge: 6231
  • Finger weg von der fhem.cfg
Falls jemand einen Vorschlag hat, wie man vom Attributnamen auch in anderen Faellen zum Hilfstext-ID kommt, bitte melden.
Mich mal meld...
Ich habe mal folgendes Experiment in fhemweb.js eingebaut:
    if(!$(aTag).length) { // old style #2 syntax : webCmd
      var v = (val).replace(/[^a-z0-9_-]/ig,'_');
      aTag = $("#content > #workbench").find("a[name="+v+"]");
    }

// PFE experiments begin
if(!$(aTag).length) {
$("#content > #workbench").find("a[id^='"+mtype+"-"+selType+"-'][data-pattern]").each(
function(index) {
if( val.match($(this).data("pattern")) ) {
aTag = $(this);
return false;
};
return true;
}
);
};
// PFE experiments end


    if($(aTag).length) {
      var liTag = $(aTag).next("li");
...und in meiner Doku steht jetzt folgendes:
<li><a id="FUIP-attr-backend_" data-pattern="backend_.*">backend_.*</a>: Adresse eines (entfernten) Backend-FHEMs<br>
Wenn ich jetzt aus der Liste "backend_home" auswähle, dann kommt diese Doku hoch.
Ich dachte erst, dass das für die Performance ganz schlecht wird, aber es ist gar nicht so schlimm, da sowieso nur die Elemente ausgewählt werden, die auch das "data-pattern" Attribut haben. Das dürfte nicht wirklich schlimm sein.

Was haltet Ihr davon?

Gruß,
   Thorsten

FUIP

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7097
Guten Morgen,

habe heute früh auf allen Instanzen nochmal ein Update vorgenommen und jetzt läuft es ganz hervorragend.  :)
Auch bei Set/Get.
Weiß nicht was da gestern schief gelaufen war.

Nochmals herzlichen Dank Rudi, das ist eine sehr hilfreiche Erweiterung.

LG und einen schönen Sonntag.
ESXi 6.5 @NUC6i5SYH mit FHEM auf Debian 10, DbLog/DbRep mit MariaDB auf Synology
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 24157
Zitat
Was haltet Ihr davon?
Viel, gekauft, ich habe dein Patch etwas vereinfacht eingebaut.

@Heiko: da diese Methode auch das implizite Loeschen der Zahlen am Ende abdeckt, aber transparent ist, habe ich den Hack mit dem Loeschen der Zahlen am Ende entfernt => Es tut mir leid, aber du muss deine Doku mit data-pattern="consumer.*" erweitern :)

Offline Thorsten Pferdekaemper

  • Developer
  • Hero Member
  • ****
  • Beiträge: 6231
  • Finger weg von der fhem.cfg
Hi,
danke für's Einbauen!

Das mit dem "return false" / "return true" war übrigens Absicht und es tut auch was. Zumindest das "return false" sollte bewirken, dass nicht weitergesucht wird, wenn ein Match gefunden wird. Das bringt ein paar Mikrosekunden und sorgt auch dafür, dass der erste Treffer benutzt wird. Bei Dir wird jetzt der letzte Treffer genommen. Das ist meiner Meinung nach nicht ganz so intuitiv.
Momentan ist das vielleicht egal, aber wenn das vielleicht mal ein bisschen mehr benutzt wird, dann wird es schwierig, das noch zu ändern.

EDIT:
Es gibt auch noch die "Kapitel"-Namen in der Doku, also z.B.
   <a name="Helloattr"></a>
Sollte das auch geändert werden in
   <a id"Hello-attr"></a>
?
Analog für define, set, get (etc.?)

Sind die ganzen Sachen eigentlich irgendwo dokumentiert? Hier z.B. sieht es etwas anders aus: https://wiki.fhem.de/wiki/DevelopmentModuleIntro#.22Hello_World.22_Beispiel
und hier steht dazu gar nichts:
https://wiki.fhem.de/wiki/Guidelines_zur_Dokumentation


Gruß,
   Thorsten
« Letzte Änderung: 02 Mai 2021, 11:17:13 von Thorsten Pferdekaemper »
FUIP

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 24157
Das Optimieren habe ich auch ueberlegt, und habe die Microsekunden fuer die etwas bessere Lesbarkeit geopfert.
Falls mehrere data-patterns fuer ein Attribut zutreffen, dann tut mir das nur ein ganz ganz bisschen Leid.

Zitat
Sollte das auch geändert werden in
Ja, die Ursache bzw. Beschreibung ist hier https://forum.fhem.de/index.php/topic,118915.msg1135123.html#msg1135123
Ich habe in den MQTT2* Modulen damit angefangen, und habe vor meine anderen Module bei Gelegenheit auch nachzuziehen.

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7097
Zitat
Es tut mir leid, aber du muss deine Doku mit data-pattern="consumer.*" erweitern

Kein Problem  :) ... habs angepasst und funktioniert.
ESXi 6.5 @NUC6i5SYH mit FHEM auf Debian 10, DbLog/DbRep mit MariaDB auf Synology
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Offline Thorsten Pferdekaemper

  • Developer
  • Hero Member
  • ****
  • Beiträge: 6231
  • Finger weg von der fhem.cfg
Das Optimieren habe ich auch ueberlegt, und habe die Microsekunden fuer die etwas bessere Lesbarkeit geopfert.
Falls mehrere data-patterns fuer ein Attribut zutreffen, dann tut mir das nur ein ganz ganz bisschen Leid.
Das ist auch ok für mich.

Zitat
Ja, die Ursache bzw. Beschreibung ist hier https://forum.fhem.de/index.php/topic,118915.msg1135123.html#msg1135123
Ich habe in den MQTT2* Modulen damit angefangen, und habe vor meine anderen Module bei Gelegenheit auch nachzuziehen.
Mal sehen, vielleicht habe ich die Muße, das irgendwo im Wiki aufzuschreiben.

Gruß,
   Thorsten
FUIP

Offline Thorsten Pferdekaemper

  • Developer
  • Hero Member
  • ****
  • Beiträge: 6231
  • Finger weg von der fhem.cfg
Hi,
ich habe mich jetzt nochmal damit befasst, nicht zuletzt wegen der Doku. Dabei sind mir noch folgende Sachen aufgefallen:

Anzeige mehrerer Hilfetexte, wenn's mal nicht ganz so schnell geht
Wenn das Laden des ersten Hilfetextes etwas dauert (kann bei großen Modulen schnell mal passieren), dann klicke ich manchmal schon auf das nächste Attribut. Das Ergebnis sieht dann so aus, wie im Screenshot "DoppelteDoku".
Die zweite Doku geht erst weg, wenn man die ganze Seite aktualisiert. (Wenn man schnell klickt, kann man auch mehr als zwei hinbekommen.)
Das Problem liegt daran, dass das Laden der Doku asynchron passiert und man währenddessen ein anderes Attribut wählen kann. Das Löschen der "alten" Doku wird aber am Anfang synchron gemacht.
Lösen lässt sich das so:
      if(!$(liTag).length)
        liTag = $(aTag).parent().next("li");
      if($(liTag).length) {
// PFE experiments begin
$("#devSpecHelp").remove();
// PFE experiments end
        $(sel).closest("div[cmd='"+selType+"']")
           .after('<div class="makeTable" id="devSpecHelp"></div>')
        $("#devSpecHelp").html($(liTag).html());
      }
    }
    wb.remove();
...wobei ich mir nicht 100% sicher bin, ob die Callbacks immer in der richtigen Reihenfolge kommen. Soweit ich es ausprobiert habe hat es immer gepasst.

Device specific help geht manchmal nicht auf
Ich hatte mich schon lange gewundert, warum die "Device specific help" manchmal erst beim zweiten Klick aufgeht. Das passiert dann, wenn man vorher schon eine Set-/Get- oder Attribut-Hilfe offen hat. Dann geht beim ersten Klick die offene Hilfe zu und erst der zweite Klick öffnet die richtige Hilfe.
Das kann man auch relativ einfach wegbekommen:
  $("div.devSpecHelp a").each(function(){       // Help on detail window
    var dev = FW_getLink(this).split("#").pop();
    $(this).unbind("click");
    $(this).attr("href", "#"); // Desktop: show underlined Text
    $(this).removeAttr("onclick");

    $(this).click(function(evt){
  // PFE experiments begin
          if($("#content > #devSpecHelp").length) {
  // if($("#devSpecHelp").length) {
  // PFE experiments end  
  $("#devSpecHelp").remove();
  return;
      }
  // PFE experiments begin
  $("#devSpecHelp").remove();
  // PFE experiments end  
      FW_getHelp(dev, function(data){
        $("#content").append('<div id="devSpecHelp"></div>');
        $("#devSpecHelp").html(data);
        var off = $("#devSpecHelp").position().top-20;
        $('body, html').animate({scrollTop:off}, 500);
      });
    });
  });
Dadurch bleibt die vorherige Funktionalität erhalten (d.h. man kann die "Device specific help" auch wieder zumachen), aber eben nur auf die "Device specific help" bezogen.

Attribut-Hilfe erscheint nicht, wenn man das Attribut über den Link auswählt
Bisher erscheint die Attribut-Hilfe nur, wenn man das Attribut über die Drop-Down-Liste auswählt. Das mache ich praktisch nie, wenn das Attribut schon gesetzt ist.
Man kann das auch relativ einfach ändern:
  $("table.attributes tr div.dname")    // Click on attribute fills input value
    .each(function(){
      $(this)
        .html('<a>'+$(this).html()+'</a>')
        .css({cursor:"pointer"})
        .click(function(){
          var attrName = $(this).text();
          var sel = "#sel_attr"+$(this).attr("data-name").replace(/\./g,'_');
          if($(sel+" option[value='"+attrName+"']").length == 0)
            $(sel).append('<option value="'+attrName+'">'+attrName+'</option>');
          $(sel).val(attrName);
          FW_detailSelect(sel, true);
    // PFE experiments begin
  $(sel).trigger("change");
          // PFE experiments end  
        });
    });
Man könnte sich auch auf den Standpunkt stellen, dass man das Attribut ja schon kennt, wenn man es mal gesetzt hat. Komischerweise ist das bei mir oft nicht so. Außerdem schreiben einige Module Vorbelegungen explizit in die Attribute rein, wodurch die Attribute auch schon da sind, bevor man sie als Benutzer angefasst hat.

Gruß,
   Thorsten


FUIP

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 24157
Zitat
Anzeige mehrerer Hilfetexte, wenn's mal nicht ganz so schnell geht
Die Ursache liegt vmtl. nicht in der grossen Doku, sondern im langsamen (weil blockierten) FHEM.
Ich habe die Aenderung uebernommen.

Zitat
Device specific help geht manchmal nicht auf
Da war eigentlich Absicht, damit man die Hilfe entfernen kann. Mit der Aenderung hat man zwei identische IDs im Dokument, was nicht der reinen Lehre entspricht, und erfordert, dass Ueberall die lange Identifikation (#content>#devSpecHelp, usw) verwendet wird. Ich habe die Aenderung erstmal nicht eingebaut.

Zitat
Attribut-Hilfe erscheint nicht, wenn man das Attribut über den Link auswählt
Das habe ich urspruenglich aus genau dem erwaehnten Gruenden nicht eingebaut, wollte "alte Benutzer" nicht aergern.
Bin aber nicht mehr sicher, dass meine Grunde valide sind, und habe die Aenderung uebernommen.

Offline Thorsten Pferdekaemper

  • Developer
  • Hero Member
  • ****
  • Beiträge: 6231
  • Finger weg von der fhem.cfg
Hi,
danke für's Übernehmen!

Da war eigentlich Absicht, damit man die Hilfe entfernen kann. Mit der Aenderung hat man zwei identische IDs im Dokument, was nicht der reinen Lehre entspricht, und erfordert, dass Ueberall die lange Identifikation (#content>#devSpecHelp, usw) verwendet wird. Ich habe die Aenderung erstmal nicht eingebaut.
Die identischen #devSpecHelp waren vorher schon da. Meine Änderung bedeutet nur, dass beim Klick auf den Link nur geprüft wird, ob "#content>#devSpecHelp" offen ist und nicht irgendein #devSpecHelp.
Mit meiner Änderung kann man die Set/Get/Attribut-Hilfe tatsächlich nicht mehr entfernen. Ich hätte aber auch nicht vermutet, dass man durch einen Klick auf "Device specific help" die Attribut-Hilfe wegbekommt. Ich selbst weiß das jetzt alles und habe kein persönliches Problem damit. Ich hatte halt eher einen Bug dahinter vermutet als Absicht.
Schöner wäre es meiner Meinung nach, wenn es direkt bei der Set/Get/Attribut-Hilfe ein Knöpchen gäbe, um die Doku zu schließen. Ich kann ja mal was dazu ausprobieren.

Gruß,
   Thorsten
FUIP

 

decade-submarginal