FHEM Forum

FHEM - Entwicklung => FHEM Development => Thema gestartet von: Markus Bloch am 24 Januar 2018, 13:29:53

Titel: commandref_modular.pl - Erfassen von Ankern mit Modulnamen als Präfix
Beitrag von: Markus Bloch am 24 Januar 2018, 13:29:53
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
Titel: Antw:commandref_modular.pl - Erfassen von Ankern mit Modulnamen als Präfix
Beitrag von: rudolfkoenig am 25 Januar 2018, 15:51:17
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.
Titel: Antw:commandref_modular.pl - Erfassen von Ankern mit Modulnamen als Präfix
Beitrag von: Markus Bloch am 25 Januar 2018, 16:09:59
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.
Titel: Antw:commandref_modular.pl - Erfassen von Ankern mit Modulnamen als Präfix
Beitrag von: rudolfkoenig am 25 Januar 2018, 16:38:14
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.
Titel: Antw:commandref_modular.pl - Erfassen von Ankern mit Modulnamen als Präfix
Beitrag von: betateilchen am 25 Januar 2018, 21:34:27
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,


Viele Grüße
Udo
Titel: Antw:commandref_modular.pl - Erfassen von Ankern mit Modulnamen als Präfix
Beitrag von: rudolfkoenig am 25 Januar 2018, 23:16:18
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.
Titel: Antw:commandref_modular.pl - Erfassen von Ankern mit Modulnamen als Präfix
Beitrag von: nils_ am 26 Januar 2018, 11:25:24
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 :)
Titel: Antw:commandref_modular.pl - Erfassen von Ankern mit Modulnamen als Präfix
Beitrag von: Markus Bloch am 27 Januar 2018, 13:55:27
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
Titel: Antw:commandref_modular.pl - Erfassen von Ankern mit Modulnamen als Präfix
Beitrag von: rudolfkoenig am 27 Januar 2018, 22:30:19
Danke, habs eingecheckt.