Möglichkeit für ein Modul eigenes .js File einzubinden.

Begonnen von Dirk, 18 Januar 2013, 22:42:42

Vorheriges Thema - Nächstes Thema

Dirk

Hallo zusammen,

Für ein neues Modul hätte ich gerne die Möglichkeit ein eigenes .js File einzubinden.
Da das so derzeit nicht vorgesehen ist, hier die Frage ob jemand einen besseren Vorschlag hat das zu implementieren.

Derzeit sieht mein Vorschlag für eine Erweiterung von FHEMWEB.pl so aus:

@@ -594,6 +594,17 @@

   my $prf = AttrVal($FW_wname, "stylesheetPrefix", "");
   FW_pO "<link href=\"$FW_ME/css/style.css\" rel=\"stylesheet\"/>";
+
+  ########################
+  # FW Extensions
+  if(defined($data{FWEXT})) {
+    foreach my $k (sort keys %{$data{FWEXT}}) {
+      my $h = $data{FWEXT}{$k};
+      next if($h !~ m/HASH/ || !$h->{SCRIPT});
+      FW_pO "<script type=\"text/javascript\" src=\"$FW_ME/js/$h->{SCRIPT}\"></script>";
+    }
+  }
+
   FW_pO "<script type=\"text/javascript\" src=\"$FW_ME/js/svg.js\"></script>"
                         if($FW_plotmode eq "SVG");
   FW_pO "<script type=\"text/javascript\" src=\"$FW_ME/js/fhemweb.js\"></script>";


Hat jemand einen anderen / besseren Vorschlag dies zu tun?
Ansonsten würde ich das mal so einchecken.

Gruß
Dirk

Martin Fischer

> Hat jemand einen anderen / besseren Vorschlag dies zu tun?

ein anderer vorschlag: das benötigte script direkt aus javascript heraus laden. dann bleibt nämlich FHEMWEB.pl unangetastet.

alternativ:

> Ansonsten würde ich das mal so einchecken.

dieses vorher mit rudi abstimmen, da er gerne FHEMWEB.pl selber verwalten möchte.

gruss martin
--
Admin, Developer, Gründungsmitglied des FHEM e.V.

Dirk

> ein anderer vorschlag: das benötigte script direkt aus javascript heraus laden...

Dann also den code in fhemweb.js oder console.js integrieren?
Dann läd aber jeder den Code, auch wenn das modul nicht benutzt wird.

> dieses vorher mit rudi abstimmen, da er gerne FHEMWEB.pl selber verwalten möchte.
Daher der Thread hier vorher :)

@Rudi, was sagst du dazu?

Gruß
Dirk

rudolfkoenig

Was soll das .js bewirken?
Und soll es im Raum-Uebersicht oder im Raum-Detail-Ansicht geladen sein?

Dirk

Hi Rudi,

im Grunde genommen soll das js File dann global geladen werden. Also wie svg.js oder fhemweb.js auch.
Das muss auch nicht zwangsweise innerhalb eines Moduls gemacht werden, war für mich nur naheliegend, da ich das in Verbindung mit einem Modul auch nutzen möchte.

Grundsätzlich könnte man das ggf. auch in weblink implementieren. Dann hätten auch User, die keine Module entwickeln möchten, eine Erweiterungsmöglichkeit per Konfiguration. Das ganze müsste dann natürlich auch im Floorplan nachgezogen werden.

Natürlich könnte man die benötigten Funktionen auch in svg.js odr fhemweb.js einbauen. Ich bevorzuge aber eine einfache Lösung wo der "Endbenutzer" nicht erst Dateien bearbeiten muss.

Gruß
Dirk

rudolfkoenig

Weblink geht natuerlich auch jetzt, ist aber nur im richtigen Raum-Ansicht wirksam.

Hab Dein Patch eingebaut, obwohl es mir nich wirklich gefaellt:
- das Flag ist nicht im Modul-Kontext.
- alle FHEMWEB Instanzen laden das .js (floorplan/smallscreen/etc)

Mir faellt z.Zt nichts besseres ein, stell Dich aber darauf ein, dass sich das aendert :) In diesem Zusammenhang haette ich gerne auch eine Moeglichkeit, dass der Benutzer selbst .js Dateien hinzufuegen kann (fuer Uhrzeit Anzeigen, etc).

Was demnaechst kommt ist eine Moeglichkeit im Detail-Ansicht modulspezifische (HTML) Bereiche zu haben, um z.Bsp. notify/at/etc netter bearbeiten zu koennen, das wird Dir aber vmtl. nicht reichen. Apropos: Du hast es immer noch nicht verraten, was Du mit dem .js vorhast.

Dirk

ZitatWeblink geht natuerlich auch jetzt, ist aber nur im richtigen Raum-Ansicht wirksam.
Mit Weblink als Beispiel wollte ich nur die Art der Einbindung skizieren.

ZitatHab Dein Patch eingebaut, obwohl es mir nich wirklich gefaellt
Danke. So schnell hatte ich damit gar nicht gerechten. Dann hätt ich das ja auch direkt machen können :). Glücklich mit meiner Umsetzung bin ich so auch noch nicht. Ich wollte das hier eigentlich erst mal zu Diskusion stellen. Der Weg über die Config währ mir auch lieber.

Zitat... stell Dich aber darauf ein, dass sich das aendert :) In diesem Zusammenhang haette ich gerne auch eine Moeglichkeit, dass der Benutzer selbst .js Dateien hinzufuegen kann (fuer Uhrzeit Anzeigen, etc).
Ich könnte dich da bei der Implementierung unterstützen. Z.b als Attribut von FHEMWEB? oder hast du da eine andere Idee im Kopf?

ZitatWas demnaechst kommt ist eine Moeglichkeit im Detail-Ansicht modulspezifische (HTML) Bereiche zu haben, um z.Bsp. notify/at/etc netter bearbeiten zu koennen, das wird Dir aber vmtl. nicht reichen.
Dann Sollte man das da bereits schon berücksichtigen. FLOORPLAN macht ja die komplette HFML-Ausgabe auch selber. Somit sollte es ein Systemeinheitlichen "HTML-Body" geben und die Module ggf. nur den "Contenbereich" befüllen können.

ZitatApropos: Du hast es immer noch nicht verraten, was Du mit dem .js vorhast.
Das stimmt. Also:
Ich habe eine Android-App gebaut welche man also Fullscreen-Browser nutzen kann. Diese App kann per Javascript zwischen der angezeigten Website und dem Android-Gerät kommunizieren. Derzeit währen das: "Eingeschaltet bleiben", das Ändern der Helligkeit, Akku und Netzwerkstatus lesen usw.
Hier veröffentlichen wollte ich das aber erst wenn das mit dem Javascript mit "einfachen" Konfig-Aufgaben durch den Enduser erledigt werden kann.

Das Javascript sollte da dafür natürlich in jeder FHEM Seite geladen sein. Derzeit macht das JS einen Longpoll und wartet auf entsprechende Anweisungen. So soll es dann möglich sein per FHEM SET z.B. das Gerät gezielt abzuschalten, die Helligkeit zu ändern oder auch den Akkuladestatus zu lesen.

Gruß
Dirk

Dirk


Dirk

Einen Patch hätte ich noch. Die Links werden nämlich auch angezeigt wenn keine Links zum anzeigen da sind.

--- 01_FHEMWEB.pm (revision 2577)
+++ 01_FHEMWEB.pm (working copy)
@@ -972,7 +972,10 @@
       push(@list1, $h->{NAME});
       push(@list2, $FW_ME ."/".$h->{LINK});
     }
-    push(@list1, ""); push(@list2, "");
+    
+    if (@list1 > 1) {
+      push(@list1, ""); push(@list2, "");
+    }
   }
   $FW_room = "" if(!$FW_room);


@Rudi
Ich würde das mal Einchecken wenn du keine Einwände hast.

Gruß
Dirk

rudolfkoenig

Einwand, ich habe es selbst eingescheckt.
Mag nicht wenn mehrere Leute an einem Modul arbeiten.

Dirk

Deshalb frage ich immer nett :)
Danke dir.

Gruß
Dirk