Autor Thema: Möglichkeit für ein Modul eigenes .js File einzubinden.  (Gelesen 4777 mal)

Offline Dirk

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2093
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

Offline Martin Fischer

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 2075
    • www.fischer-net.de/
Aw: Möglichkeit für ein Modul eigenes .js File einzubinden.
« Antwort #1 am: 18 Januar 2013, 23:15:17 »
> 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.

Offline Dirk

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2093
Aw: Möglichkeit für ein Modul eigenes .js File einzubinden.
« Antwort #2 am: 18 Januar 2013, 23:20:23 »
> 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

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 24366
Aw: Möglichkeit für ein Modul eigenes .js File einzubinden.
« Antwort #3 am: 19 Januar 2013, 10:18:57 »
Was soll das .js bewirken?
Und soll es im Raum-Uebersicht oder im Raum-Detail-Ansicht geladen sein?

Offline Dirk

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2093
Aw: Möglichkeit für ein Modul eigenes .js File einzubinden.
« Antwort #4 am: 19 Januar 2013, 13:08:50 »
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

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 24366
Aw: Möglichkeit für ein Modul eigenes .js File einzubinden.
« Antwort #5 am: 20 Januar 2013, 12:08:28 »
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.

Offline Dirk

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2093
Aw: Möglichkeit für ein Modul eigenes .js File einzubinden.
« Antwort #6 am: 20 Januar 2013, 20:22:38 »
Zitat
Weblink geht natuerlich auch jetzt, ist aber nur im richtigen Raum-Ansicht wirksam.
Mit Weblink als Beispiel wollte ich nur die Art der Einbindung skizieren.

Zitat
Hab 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?

Zitat
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.
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.

Zitat
Apropos: 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

Offline Dirk

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2093
Aw: Möglichkeit für ein Modul eigenes .js File einzubinden.
« Antwort #7 am: 27 Januar 2013, 15:27:08 »
Ein Ergebnis der APP findet ihr hier:

Beitrag: Neue Fullscreen Browser APP für Android (WebViewControl)

Gruß
Dirk

Offline Dirk

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2093
Aw: Möglichkeit für ein Modul eigenes .js File einzubinden.
« Antwort #8 am: 27 Januar 2013, 15:54:15 »
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

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 24366
Aw: Möglichkeit für ein Modul eigenes .js File einzubinden.
« Antwort #9 am: 27 Januar 2013, 16:11:29 »
Einwand, ich habe es selbst eingescheckt.
Mag nicht wenn mehrere Leute an einem Modul arbeiten.

Offline Dirk

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2093
Aw: Möglichkeit für ein Modul eigenes .js File einzubinden.
« Antwort #10 am: 27 Januar 2013, 16:13:45 »
Deshalb frage ich immer nett :)
Danke dir.

Gruß
Dirk