FHEM Forum

FHEM - Entwicklung => FHEM Development => Thema gestartet von: betateilchen am 31 Januar 2015, 11:28:02

Titel: [Wunsch] FHEMWEB Extensions in neuem Browser-Tab/-Fenster öffnen
Beitrag von: betateilchen am 31 Januar 2015, 11:28:02
Seit langem stört mich, dass bei Klick auf "RSS" oder "GDS Files" die jeweiligen Übersichten das laufende FHEM Frontend ersetzen, da diese HTML Seiten kein explizites target besitzen. Deshalb habe ich mich auf die Suche nach einer möglichst wenig aufwändigen Lösung gemacht und bin zu folgenden vier Zeilen code in 01_FHEMWEB gekommen:


Index: 01_FHEMWEB.pm
===================================================================
--- 01_FHEMWEB.pm (revision 7780)
+++ 01_FHEMWEB.pm (working copy)
@@ -1281,8 +1281,10 @@
         }

         # Force external browser if FHEMWEB is installed as an offline app.
-        if($l2 =~ m/.html$/ || $l2 =~ m/^http/) {
-           FW_pO "<td><div><a href=\"$l2\">$icon$l1</a></div></td>";
+        my $target = '';
+           $target = 'target=\"_blank\" ' if $l2 =~ s/\+//;
+        if($l2 =~ m/.html$/ || $l2 =~ m/^http/ || length($target)) {
+           FW_pO "<td><div><a href=\"$l2\" $target >$icon$l1</a></div></td>";
         } else {
           FW_pH $l2, "$icon$l1", 1, $class;
         }


Damit hat man die Möglichkeit, beim Registrieren einer FWEXT einfach dem Link ein "+" voranzustellen, um zu kennzeichnen, dass dieser Link in einem neuen Tab/Browser geöffnet werden soll.

Beispiel:


sub GDS_addExtension($$$) {
    my ($func,$link,$friendlyname)= @_;
      my $url = "/" . $link;
    $data{FWEXT}{$url}{FUNC} = $func;
    $data{FWEXT}{$url}{LINK} = "+$link";
    $data{FWEXT}{$url}{NAME} = $friendlyname;
}


Diese simple Lösung funktioniert hier seit zwei Tagen problemlos und verhält sich transparent gegenüber bestehenden Anwendungen, die bereits eigene FWEXT registrieren.
Titel: Antw:[Wunsch] FHEMWEB Extensions in neuem Browser-Tab/-Fenster öffnen
Beitrag von: rudolfkoenig am 31 Januar 2015, 11:50:55
Habs eingecheckt, konnte es aber nicht wirklich testen.
Titel: Antw:[Wunsch] FHEMWEB Extensions in neuem Browser-Tab/-Fenster öffnen
Beitrag von: betateilchen am 31 Januar 2015, 12:12:20
Danke. Du kannst das Ergebnis relativ simpel mit der eben von mir eingecheckten GDS-Version testen:



define gdstest GDS bla bla



Dananch hast Du links im fhem-Menü einen Eintrag "GDS Files". Wenn Du diesen Link anklickst, sollte sich die Auswahlliste der Wetterkarten in einem neuen Tab/Fenster öffnen. (echte Inhalte kommen da natürlich keine,  aber darum gehts in diesem Test nicht)

Danach kannst Du das GDS device einfach wieder löschen. Der Menüeintrag verschwindet nach dem nächsten fhem-Neustart. (ich hab das Undefine noch nicht ausprogrammiert, da ich dabei erst prüfen muss, ob es sich um das letzte GDS device handelt)
Titel: Antw:[Wunsch] FHEMWEB Extensions in neuem Browser-Tab/-Fenster öffnen
Beitrag von: UliM am 01 Februar 2015, 19:14:14
Hi,
möglicherweise gibt's hier nen Nebeneffekt:
http://forum.fhem.de/index.php?topic=33181.new#new
Ist nur ein Verdacht wegen des '+' im menuEntries...
Gruß, Uli
Titel: Antw:[Wunsch] FHEMWEB Extensions in neuem Browser-Tab/-Fenster öffnen
Beitrag von: betateilchen am 01 Februar 2015, 21:02:02
es gibt offenbar eine simple Lösung: in den menuEntries die "+" Zeichen durch "%20" ersetzen.

Edit: Das mit den %20 steht übrigens auch so in der commandref, dort ist weit und breit nichts von einem Pluszeichen als Leerzeichenersatz zu lesen.
Titel: Antw:[Wunsch] FHEMWEB Extensions in neuem Browser-Tab/-Fenster öffnen
Beitrag von: betateilchen am 01 Februar 2015, 22:10:44
@Rudi: mit einer verbesserten regexp können wir das Problem mit dem Pluszeichen in menuEntries vermeiden:


Index: 01_FHEMWEB.pm
===================================================================
--- 01_FHEMWEB.pm (revision 7816)
+++ 01_FHEMWEB.pm (working copy)
@@ -1282,7 +1282,7 @@

         # Force external browser if FHEMWEB is installed as an offline app.
         my $target = '';        # Forum 33066
-           $target = 'target=\"_blank\" ' if($l2 =~ s/\+//);
+           $target = 'target="_blank"' if($l2 =~ s/^$FW_ME\/\+/$FW_ME\//);
         if($l2 =~ m/.html$/ || $l2 =~ m/^http/ || length($target)) {
            FW_pO "<td><div><a href=\"$l2\" $target >$icon$l1</a></div></td>";
         } else {

Titel: Antw:[Wunsch] FHEMWEB Extensions in neuem Browser-Tab/-Fenster öffnen
Beitrag von: justme1968 am 02 Februar 2015, 09:41:04
das + zeichen ist im query teil offiziell als ersatz für das leerzeichen vorgesehen:

Within the query string, the plus sign is reserved as shorthand notation for a space. Therefore, real plus signs must be encoded. This method was used to make query URIs easier to pass in systems which did not allow spaces.

das ist nicht fhem spezifisch sondern ist vom w3c in einem rfc geregelt.

von daher ist es eine unglückliche wahl wenn das mit dem dieser änderung  nicht mehr möglich ist.
Titel: Antw:[Wunsch] FHEMWEB Extensions in neuem Browser-Tab/-Fenster öffnen
Beitrag von: betateilchen am 02 Februar 2015, 10:05:41
Mit der veränderten regexp die vor Deinem Beitrag hier im Thread steht, funktioniert es ja auch wieder...
Titel: Antw:[Wunsch] FHEMWEB Extensions in neuem Browser-Tab/-Fenster öffnen
Beitrag von: justme1968 am 02 Februar 2015, 10:10:40
dann ist ja alles gut ...
Titel: Antw:[Wunsch] FHEMWEB Extensions in neuem Browser-Tab/-Fenster öffnen
Beitrag von: rudolfkoenig am 03 Februar 2015, 07:37:57
Habe den Patch von Vorgestern eingespielt.