[Vorschlag] 98_help.pm zur Anzeige modulspezifischer Doku

Begonnen von betateilchen, 16 Februar 2015, 18:44:11

Vorheriges Thema - Nächstes Thema

betateilchen

Zitat von: rudolfkoenig am 21 Februar 2015, 23:24:44
- <html></html> entfernen, ist eh "Unsinn", da diese Tags an die falsche Stelle im Dokument eingebaut werden, und damit von allen Browsern nur ignoriert werden.

Bisher was das kein Unsinn, sondern zwingend notwendig, damit fhemweb diesen output als html überhaupt darstellt.
Und bisher war es auch so, dass ein output, der irgendwo \n enthielt, in fhemweb völliges Chaos verursachte...

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

betateilchen

Deine Vorschläge und Umbauten bringen nicht sonderlich viel:


  • ein Anhängen von \n bewirkt keine Änderung an der verkorksten Ausgabe von at (sogar im Frontend herrscht Chaos)
  • das Entfernen von <html></html> verändert auch nichts
  • der Aufruf von help ohne Modulname funktioniert nicht mehr
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

justme1968

das <html></html> ist der indikator damit fhemweb weiss das ein modul html ausgibt das nicht weiter durch FW_htmlEscape geschickt oder anderweitig bearbeitet werden soll. nach dem erkennen könnte man das tag noch abschneiden und nicht an den browser durchreichen.

das tag sollte aber nur beim aufruf von help aus fhemweb aus angehängt werden. nicht beim aufruf per telnet. so war das zumindest bisher.

der <html> tag wird übrigens auch von list verwendet um in fhemweb die klickbaren links einzubauen.




hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

betateilchen

in der telnet-Ausgabe kommt ohnehin kein <html> mit.

Aber im Moment ist die help-Ausgabe durch Rudis Änderungen bei der Ausgabe ziemlich kaputt :(

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

rudolfkoenig

Zitatein Anhängen von \n bewirkt keine Änderung an der verkorksten Ausgabe von at (sogar im Frontend herrscht Chaos)
Diese Aussage ist falsch, mit folgenden patch
@@ -140,7 +140,7 @@
      } elsif($l =~ m/^=end html$lang$/) {
         $skip = 1;
      } elsif(!$skip) {
-        $output .= $l;
+        $output .= $l."\n";
      }
    }
    return $output;

ist die Anzeige von "help at" korrekt, siehe Anhang.

Zitatdas Entfernen von <html></html> verändert auch nichts
der Aufruf von help ohne Modulname funktioniert nicht mehr
Ich habe das <html> von andre falsch verstanden (soll signalisieren, dass der Rueckgabewert html ist), und help war der erste Anwendungsfall dafuer, auch wenn es vor knapp einem Jahr eingebaut wurde. Leider war die Pruefung fehlerhaft, und hat Mehrzeiler nicht erwischt. Habs korrigiert, mit dem Ergebnis, dass "help" ohne Argument wieder funktioniert. Mit Argument hat es auch vorher getan.

Zitatin der telnet-Ausgabe kommt ohnehin kein <html> mit.
Entspricht nicht meiner Erfahrung:
fhem> help at
<html>
<h3>at</h3>
...
<html>
fhem>

rudolfkoenig

Leider muss durch meine letzte Aenderung betateilchen das help Modul wieder anpassen.
Also: help soll bleiben wie heute frueh, nur die Newlines haette ich gerne auch im HTML Fall.

Sorry fuer die Verwirrung.


betateilchen

#36

  • help ohne Paramter liefert jetzt auch html output. Und das in einem vernünftigen Format (im Gegensatz zu früher) in dem auch die einzelnen Spalten erkennbar und ordentlich lesbar sind.
  • das \n habe ich eingebaut
  • telnet liefert kein <html> mehr, das war lediglich ein vergessenes Überbleibsel aus dem Rekursionsumbau von gestern.
  • das Aussehen der Hilfetexte in telnet hat für mich nicht oberste Priorität


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

rudolfkoenig

Zitathast du dir das mit dem scrollTop noch mal angeschaut?
Ja, fand es aber verwirrend, wenn die Seite nach dem Click ploetzlich anders ausschaut.
Ich sehe aber ein, dass auch lange Detailseiten gibt, und habe es deswegen mit etwas Animation eingebaut.

Zitatapropos links: im darkstyle sind die ganzen links nicht zu erkennen.
Der Autor von darkstyle (wer war das eigentlich?) hat es bestimmt, dass Links nur bei hover  wahrnembar sind.
Ich will da nicht reinreden, vorallem ist mir der Fix nicht offensichtlich.

betateilchen

Ich hatte ja grade mal wieder ein paar Stunden Bahn-Fahrzeit und da habe ich fleißig am help-Modul weitergebastelt.

Alles was als "commands" anzusehen ist, wird nun aus drei Quellen ermittelt:


  • alles, was in der fhem.pl bereits als Hilfetexte in %cmds definiert wird
  • alles, was in commandref_frame.html in der Liste "commands" steht
  • alles, was ich im Modul selbst als command definiert habe (global, devspec, perl etc)

Standardmäßig wird bei noch nicht geladenen Command-Modulen ein Hilfetext "use "help <command>" for more info" ausgegeben. Wurde das Modul bereits geladen, steht der vom Modul vorgegebene Hilfe-Kurztext in der Ausgabe.

Funktioniert soweit auch alles ganz gut, es gibt aber auch da wieder ein paar Ausreißer:


  • Die als commands in der commandref_frame definierten Befehle "createlog" und "usb" passen nicht in diese Logik, da sie eigentlich aus dem Modul autocreate stammen und ihre Beschreibung sich auch dort befindet.
  • Das Modul apptime, für das es in der Maintainer.txt keinen Eintrag gibt (wenn ich es nicht übersehen habe) hält sich nicht an die Syntax für den Hilfetext, der eine Trennung zwischen Parameter und Text mittels Komma vorsieht.


Ich werde noch ein bisschen testen und die neue Modulversion vermutlich heute abend noch einchecken.


Zitat
Possible commands:

Command        Parameter
               Description
----------------------------------------------------------------------
CULflash       use "help CULflash" for more help                 
               
IF             use "help IF" for more help                       
               
JsonList       use "help JsonList" for more help                 
               
JsonList2      use "help JsonList2" for more help               
               
apptime        use "help apptime" for more help                 
               
attr           <devspec> <attrname> [<attrval>]
               set attribute for <devspec>
attributes     use "help attributes" for more help               
               
backup         use "help backup" for more help                   
               
cmdalias       use "help cmdalias" for more help                 
               
command        use "help command" for more help                 
               
commands       use "help commands" for more help                 
               
configdb       use "help configdb" for more help                 
               
copy           use "help copy" for more help                     
               
createlog      use "help createlog" for more help               
               
define         <name> <type> <options>         
               define a device/at/notify entity
delete         <devspec>                                   
               delete the corresponding definition(s)
deleteattr     <devspec> [<attrname>]               
               delete attribute for <devspec>
deletereading  <devspec> [<attrname>]               
               delete user defined reading for <devspec>
devspec        use "help devspec" for more help                 

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

rudolfkoenig

Ich habe usb und createlog in fhem.pl %cmds mit einem ModuleName Eintrag angelegt, was auf dem Quell-Modul verweist. AnalyzeCommand wertet es aus, d.h. autocreate wird geladen (falls das noch nicht der Fall war), wenn man usb eintippt. Evtl. koennte man das beim help auch beruecksichtigen.

Btw: wenn man im telnet help ohne Argument eingibt, dann kommt was schwer lesbares zurueck, was mit vielen HTML Tags versehen ist. Wg. apptime muss vmtl. Martin (HM) dran.

betateilchen

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

betateilchen

Zitat von: rudolfkoenig am 01 März 2015, 14:01:02
Btw: wenn man im telnet help ohne Argument eingibt, dann kommt was schwer lesbares zurueck, was mit vielen HTML Tags versehen ist.

Habe ich gerade gefixt.

Zitat von: rudolfkoenig am 01 März 2015, 14:01:02
Ich habe usb und createlog in fhem.pl %cmds mit einem ModuleName Eintrag angelegt, was auf dem Quell-Modul verweist. AnalyzeCommand wertet es aus, d.h. autocreate wird geladen (falls das noch nicht der Fall war), wenn man usb eintippt. Evtl. koennte man das beim help auch beruecksichtigen.

Dazu habe ich aktuell noch keine Idee, aber ich habe mich auch noch nicht intensiv damit befaßt. Irgendwas wird mir dazu sicher noch einfallen.

Zitat von: rudolfkoenig am 01 März 2015, 14:01:02
Wg. apptime muss vmtl. Martin (HM) dran.

Das fehlende Komma habe ich neulich schon eingebaut.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Zitat von: rudolfkoenig am 01 März 2015, 14:01:02
Ich habe usb und createlog in fhem.pl %cmds mit einem ModuleName Eintrag angelegt, was auf dem Quell-Modul verweist.

Wann und wo sollte ich denn den Eintrag ModuleName finden?

Wenn ich mir aktuell die %cmds ausgeben lasse, bekomme ich nur folgende Infos:



$VAR13 = 'createlog';
$VAR14 = {
           'Hlp' => '<device>,create log/weblink for <device>',
           'Fn' => 'CommandCreateLog'
         };

$VAR31 = 'usb';
$VAR32 = {
           'Hlp' => '[scan|create],display or create fhem-entries for USB devices',
           'Fn' => 'CommandUsb'
         };


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

rudolfkoenig

Sorry, mein Fehler.
Die Eintraege gibts in fhem.pl, sie werden beim Laden von autocreate.pm ueberschrieben.
Da ich das Laden testen wollte, habe ich autocreate nicht definiert, und nach dem Laden war ich ja happy, dass ich fertig bin.

Habe autocreate.pm angepasst und eingecheckt.

betateilchen

Ok, hab ich jetzt eingebaut. Bei "help usb" und "help createlog" wird nun der Hilfetext von autocreate geladen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!