commandref_modular.pl - Erfassen von Ankern mit Modulnamen als Präfix

Begonnen von Markus Bloch, 24 Januar 2018, 13:29:53

Vorheriges Thema - Nächstes Thema

Markus Bloch

Hallo Rudi,

ich habe in der modularen Commandref mit meinen Modulen immer das Problem gehabt, dass Links auf direkte Attribute/Readings/etc. nicht funktionieren, da er das dazugehörige Modul in den hinterlegten modLinks nicht finden kann.

Ich rufe also beispielhaft folgende URL auf: /fhem/docs/commandref.html#FB_CALLLIST_create-readings

Dann erscheint in der JS-Konsole folgender Output:

fhemdoc_modular.js:25 fd_fC:help FB_CALLLIST_create-readings EN

Um hieraus auf den richtigen Modulnamen zu schließen, wird in fhemdoc_modular.js ja die Variable fd_modLinks mit einer Zuordnung von Ankerbezeichnung zu zugehörigem Modulname herangezogen. Diese entstammt ja aus commandref_modular.pl beim durchgehen der Moduldateien:

        $modData{$mName}{modLinks}{$1} = 1
                 if($l =~ m/<a\s+name=['"]([^ '"]+)['"]>/ && $1 !~ /^$mName/)


Warum werden hier explizit Ankerbezeichnungen die mit dem Modulnamen beginnen übergangen? Was ist der Hintergund herizu? Wenn ich die Prüfung auf !~ /^$mName/ entferne, werden die Anker korrekt gefunden und dem Modul richtig zugeordnet, sodass die entsprechende URL problemlos aufgerufen werden kann. Ich kann es mir nur so erklären, dass Ankerbezeichnungen die dem Modulnamen entsprechen übergangen werden sollen, was ich nachvollziehbar finde, aber dann sollte man besser "$1 ne $mName" nehmen.

Kannst Du mir weiterhelfen?

Viele Grüße

Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

rudolfkoenig

ZitatIch kann es mir nur so erklären, dass Ankerbezeichnungen die dem Modulnamen entsprechen übergangen werden sollen, was ich nachvollziehbar finde, aber dann sollte man besser "$1 ne $mName" nehmen.

Es geht um mehr:
  <a name="FS20"></a>
  <a name="FS20define"></a>
  <a name="FS20set"></a>
  <a name="FS20attr"></a>
  <a name="FS20events"></a>
Mir faellt keine schoene Loesung ein, nur dass du den zu "exportierenden" Anker zusaetzlich mit dem exp_ Praefix versiehst.

Markus Bloch

#2
Meine Lösung währe:

        $modData{$mName}{modLinks}{$1} = 1
                 if($l =~ m/<a\s+name=['"]([^ '"]+)['"]>/ && $1 ne $mName)


Damit könnte das hinzufügen von den genannten Ankern in fhemdoc_modular.js entfallen.

Das sind Millisekunden über die wir hier diskutieren.
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

rudolfkoenig

Habs geaendert und eingecheckt ich meine auch, dass es keine negativen Nebeneffekte hat, ausser einen etwas groesseren commandref.html (wg. dem hidden div am Anfang).

Was mir aufgefallen ist:
- @martinp876: in CUL_HM und HMInfo wird auch der <a name=""> Link mit # gestartet, das ist mindestens ueberfluessig, wenn nicht schaedlich.
- betateilchen: Seit MAINTAINER & co in help auftauchen, rutscht der Name des Moduls am Ende der Zeile (siehe Anhang), ich wuerde ihn lieber am Anfang der Zeilen sehen.

betateilchen

Zitat von: rudolfkoenig am 25 Januar 2018, 16:38:14
- betateilchen: Seit MAINTAINER & co in help auftauchen, rutscht der Name des Moduls am Ende der Zeile (siehe Anhang), ich wuerde ihn lieber am Anfang der Zeilen sehen.

Hallo Rudi,


  • der von Dir angegebene Zeitpunkt des Auftretens dieses Phänomens ist falsch, das hat lange Zeit korrekt funktioniert
  • das Verhalten ist Style-anhängig - siehe Anhang. Im dark-Style funktioniert das Ganze problemlos.
  • wegen 2. betrachte ich das nicht wirklich als meine Baustelle, das Verhalten zu beheben.
  • Markus hatte das Problem diese Woche bereits analysiert und festgestellt, dass es nicht an help liegt.Dabei ist er auf folgende Diskussion von Mitte Dezember gestoßen, mit der ich aber nichts anfangen kann. https://forum.fhem.de/index.php/topic,81087.msg729527.html#msg729527

Viele Grüße
Udo
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

Danke fuer den Link, habs gefixt.
Ich wollte damals die in dem commandref_join Version vorhandenen en/de links dichter unter dem Header platzieren, habe aber die falsche Methode gewaehlt.

nils_

Zitat von: rudolfkoenig am 25 Januar 2018, 23:16:18
Ich wollte damals die in dem commandref_join Version vorhandenen en/de links dichter unter dem Header platzieren, habe aber die falsche Methode gewaehlt.
da hast du meine hemdsärmelige css-änderung leider übernommen. ich hatte damals schon die böse vorahnung das das noch nebenwirkungen hat.


danke für den fix :)
viele Wege in FHEM es gibt!

Markus Bloch

Noch einen kleinen Schönheitsfehler entdeckt:

Wenn man die Commandref geöffnet und manuell den URL-Hash ändert (z.B."commandref.html#PRESENCE" in "commandref.html#Pushbullet" ändert und <ENTER> drückt), wird das entsprechende Modul nicht nachgeladen und angezeigt.

Folgender Patch behebt dies:

Index: www/pgm2/fhemdoc_modular.js
===================================================================
--- www/pgm2/fhemdoc_modular.js (revision 16009)
+++ www/pgm2/fhemdoc_modular.js (working copy)
@@ -207,6 +207,10 @@

   if(location.hash)
     loadOneDoc(location.hash.substr(1), fd_lang);
+
+  $(window).bind('hashchange', function() {
+    loadOneDoc(location.hash.substr(1), fd_lang);
+  });

   $("a[name=loadAll]").show().click(function(e){
     e.preventDefault();


Viele Grüße

Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

rudolfkoenig