Autor Thema: vorschlag: newline in attribut werten zulassen  (Gelesen 8249 mal)

Offline justme1968

  • Developer
  • Hero Member
  • ****
  • Beiträge: 19110
vorschlag: newline in attribut werten zulassen
« am: 17 Oktober 2015, 20:23:27 »
zufälligerweise gab es heute zwei unabhängige fälle bei denen es nützlich wäre wenn fhemweb attribute mit newline handhaben könnte:

- mehrzeilige comment attribute: http://forum.fhem.de/index.php/topic,42405.msg345697.html#msg345697
- das mibs attribut von sysstat: http://forum.fhem.de/index.php/topic,10573.msg345514.html#msg345514

für readingsGroup wäre es glaube ich auch praktisch.

eine mögliche lösung könnte so aussehen:
- in fhemweb.js wird im empfangene attribut wert nicht mehr alle newline entfernt sondern nur das letzte. alle anderen werden durch einen platzhalter
- wenn das attribut in einem textField-long editiert wird werden die platzhalter wieder zu echten newline um das mehrzeilige editieren zu ermöglichen
- im ergebniss von textField-long werden die echten newline wieder durch die platzhalter
- fhemweb ersetzt die im post empfangenen platzhalter durch echte newline

im prinzip könnte man als platzhalter \\n oder <br> verwenden oder wie im DEF vorgehen. das funktioniert aber nicht weil textarea nur einzeilig ist und weil <br> und anderer html text auch 1:1 schon im attribut vorkommen können. ich habe deshalb unicode \u2424 als platzhalter genommen. das sollte im browser sogar als sinnvolles zeichen dargestellt (␤)werden und lässt sich zur not sogar im textarea eingeben.

die nötigen änderungen sind:--- fhemweb.js (revision 9035)
+++ fhemweb.js (working copy)
@@ -619,7 +619,8 @@
   qConn.onreadystatechange = function() {
     if(qConn.readyState != 4)
       return;
-    var qResp = qConn.responseText.replace(/[\r\n]/g, "");
+    var qResp = qConn.responseText.replace(/\n$/, '');
+    qResp = qResp.replace(/\n/g, '\u2424');
     if(el.setValueFn)
       el.setValueFn(qResp);
     qConn.abort();
@@ -669,7 +670,9 @@
         '<textarea id="td_longText" rows="25" cols="60" style="width:99%"/>'+
       '</div>');
 
-    $("#td_longText").val($(inp).val());
+    var txt = $(inp).val();
+    txt = txt.replace(/\u2424/g, '\n');
+    $("#td_longText").val(txt);
 
     var cm;
     if( typeof AddCodeMirror == 'function' )
@@ -688,6 +691,7 @@
           if(cm)
             $("#td_longText").val(cm.getValue());
           var res=$("#td_longText").val();
+          res = res.replace(/\n/g, '\u2424' );
           $(this).dialog('close');
           $(inp).val(res);
           addBlur();

01_FHEMWEB.pm:--- 01_FHEMWEB.pm (revision 9418)
+++ 01_FHEMWEB.pm (working copy)
@@ -901,6 +901,11 @@
   $cmd.=" $arg{$c}" if(defined($arg{$c}) &&
                        ($arg{$c} ne "state" || $cmd !~ m/^set/));
   $cmd.=" $val{$c}" if(defined($val{$c}));
+
+  #replace unicode newline symbol \u2424 with real newline
+  my $nl = chr(226) . chr(144) . chr(164);
+  $cmd =~ s/$nl/\n/g;
+
   return ($cmd, $c);
 }

getestet mit safari,chrome und firefox unter mac os x. ich habe gerade keine windows rechner in der nähe.

gruss
  andre
« Letzte Änderung: 17 Oktober 2015, 20:37:41 von justme1968 »
FHEM5.4,DS1512+,2xCULv3,DS9490R,HMLAN,2xRasPi
CUL_HM:HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-MDIR,HM-SEC-RHS
HUEBridge,HUEDevice:LCT001,LLC001,LLC006,LWL001
OWDevice:DS1420,DS18B20,DS2406,DS2423
FS20:fs20as4,fs20bs,fs20di
AKCP:THS01,WS15
CUL_WS:S300TH

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15910
  • s/fhem\.cfg/configDB/g
Antw:vorschlag: newline in attribut werten zulassen
« Antwort #1 am: 17 Oktober 2015, 20:48:59 »
und das Ganze dann noch im codemirror editierbar machen  8)

*duck-und-weg*
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Nächster Hamburg-Stammtisch: 14.06.2019

Offline rapster

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 924
Antw:vorschlag: newline in attribut werten zulassen
« Antwort #2 am: 17 Oktober 2015, 20:52:17 »
Sehr schön, das habe ich mir schon länger gewünscht :)

Funktioniert zwar generell im IE,FF41,Edge@Windows
Allerdings habe ich soeben mal versucht den cellStyle einer readingsGroup mehrzeilig zu speichern. Hier zerschießt es mir anschließend die gesamte rg  :(

cellStyle {␤ "r:1"=>'style="font-weight:bold;font-size:16px"',␤    "r:2,c:0"=>'style="font-weight:bold"',␤ "r:5,c:0" =>'style="font-weight:bold"',␤    "r:8,c:0"=>'style="font-weight:bold"',␤    "r:11,c:0"=>'style="font-weight:bold"'␤}
Gruß
  Claudiu

Offline justme1968

  • Developer
  • Hero Member
  • ****
  • Beiträge: 19110
Antw:vorschlag: newline in attribut werten zulassen
« Antwort #3 am: 17 Oktober 2015, 20:56:09 »
@betateilchen: die textField-long popups sind schon mit codemirror editierbar. geht also automatisch spätestens wenn du wigetOverride <attribut>:textField-long für die entsprechenden attribute setzt.

@rapster: kann es sein das du den FHEMWEB teil bzw. das reload dazu vergessen hast? die ␤ werden zwar von der js seite an fhemweb zurück geschickt aber dort durch echte \n ersetzt. d.h. die ␤ dürfen nie im attribut auftauchen.

gruss
  andre
FHEM5.4,DS1512+,2xCULv3,DS9490R,HMLAN,2xRasPi
CUL_HM:HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-MDIR,HM-SEC-RHS
HUEBridge,HUEDevice:LCT001,LLC001,LLC006,LWL001
OWDevice:DS1420,DS18B20,DS2406,DS2423
FS20:fs20as4,fs20bs,fs20di
AKCP:THS01,WS15
CUL_WS:S300TH

Offline rapster

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 924
Antw:vorschlag: newline in attribut werten zulassen
« Antwort #4 am: 17 Oktober 2015, 20:59:49 »
Ne fhemheb Teil ist drin,
hab fhem sogar ein ganzen restart spendiert   ::)

EDIT,
habs vorhin auch aus dem Editor-Fenster herauskopiert, hier mal aus der configDB:
search result for: cellStyle in version: 0
--------------------------------------------------------------------------------
attr heatingInfo cellStyle { "r:1"=>'style="font-weight:bold;;font-size:16px"',"r:2,c:0"=>'style="font-weight:bold"',  "r:5,c:0" =>'style="font-weight:bold"',  "r:8,c:0"=>'style="font-weight:bold"',  "r:11,c:0"=>'style="font-weight:bold"'}
Da sind die NL's zumindest nicht zu sehen.

EDIT2: nochmal ein Bild angehangen ;)
« Letzte Änderung: 17 Oktober 2015, 21:04:35 von rapster »

Offline justme1968

  • Developer
  • Hero Member
  • ****
  • Beiträge: 19110
Antw:vorschlag: newline in attribut werten zulassen
« Antwort #5 am: 17 Oktober 2015, 21:31:08 »
im kleinen textfield sind die ␤ zu sehen. das ist ok. im grossen popup werden sie durch echte new line ersetzt. im text neben dem attribut namen sind sie nicht zu sehen. das ist auch ok. schau mal bitte in dein config file ob sie da auftauchen. dort sollten ganz normale zeilenenden auftauchen die mit \ maskiert sind.

gruss
  andre

ps: ich glaube ich weiss was dein problem ist...
      readingsGroup muss angepasst werden damit an ein paar stellen die regex für ^{.*}$ die mehrzeiligen strings auch versteht.
      das kommite ich dann wenn rudi den patch akzeptiert. anbei eine test version.
« Letzte Änderung: 17 Oktober 2015, 21:32:50 von justme1968 »
FHEM5.4,DS1512+,2xCULv3,DS9490R,HMLAN,2xRasPi
CUL_HM:HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-MDIR,HM-SEC-RHS
HUEBridge,HUEDevice:LCT001,LLC001,LLC006,LWL001
OWDevice:DS1420,DS18B20,DS2406,DS2423
FS20:fs20as4,fs20bs,fs20di
AKCP:THS01,WS15
CUL_WS:S300TH

Offline rapster

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 924
Antw:vorschlag: newline in attribut werten zulassen
« Antwort #6 am: 17 Oktober 2015, 23:03:24 »
Schaut auf den ersten Blick erstmal gut aus mit der angehängten readingsGroup.pm  8)

Auf dieses Problem könnten allerdings falls der Patch so akzeptiert wird wahrscheinlich mehrere Module stoßen wenn der User der Meinung ist das Attribut jeweils in mehreren Zeilen unterzubringen? Hmm...

Gruß
  Claudiu

Offline rapster

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 924
Antw:vorschlag: newline in attribut werten zulassen
« Antwort #7 am: 17 Oktober 2015, 23:08:59 »
Nachtrag auf deine Frage, in der configDB sind's echte newlines (siehe Bild), ebenfalls bei einem configDB search:
Die Zeilen werden allerdings nicht mit \ abgeschlossen.

search result for: cellstyle in version: 0
--------------------------------------------------------------------------------
attr heatingInfo cellStyle {
"r:1"=>'style="font-weight:bold;;font-size:16px"',
"r:2,c:0"=>'style="font-weight:bold"',
"r:5,c:0" =>'style="font-weight:bold"',
"r:8,c:0"=>'style="font-weight:bold"',
"r:11,c:0"=>'style="font-weight:bold"'
}

Offline justme1968

  • Developer
  • Hero Member
  • ****
  • Beiträge: 19110
vorschlag: newline in attribut werten zulassen
« Antwort #8 am: 17 Oktober 2015, 23:13:23 »
ich glaube das ist eher unkritisch. die meisten attribute sind eher kurz und selbst bei längeren wird selten per regex auf ^ und $ geprüft sondern meist mit split gearbeitet. comment ist völlig unkritisch. mibs auch. readngsGroup ist angepasst. meine anderen module prüfe ich uns ziehe sie nach. auf die schnelle fällt mir nur noch devStateIcon ein.  außerdem bekommt man die newline ja nicht automatisch sondern muss sie erst mit einem textField-long freischalten.

das schaut gut aus. genau so soll es sein. die \ siehst du nur im config file. bei allen anderen ausgaben sind sie transparent und treten nur als zeilenumbruch in erscheinung.

gruss
  andre
« Letzte Änderung: 17 Oktober 2015, 23:16:50 von justme1968 »
FHEM5.4,DS1512+,2xCULv3,DS9490R,HMLAN,2xRasPi
CUL_HM:HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-MDIR,HM-SEC-RHS
HUEBridge,HUEDevice:LCT001,LLC001,LLC006,LWL001
OWDevice:DS1420,DS18B20,DS2406,DS2423
FS20:fs20as4,fs20bs,fs20di
AKCP:THS01,WS15
CUL_WS:S300TH

Offline rapster

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 924
Antw:vorschlag: newline in attribut werten zulassen
« Antwort #9 am: 17 Oktober 2015, 23:23:49 »
Auf die \ kommts (mir) zwar nicht an, allerdings bei einem mehrzeiligen notify seh ich sie in der config:

search result for: ntfy_Tuerklingel in version: 0
--------------------------------------------------------------------------------
define ntfy_Tuerklingel notify ^og_flur_sci_klingel:\s*closed.* {\
my $minDelay = 10;;\
    \
if ( time - ReadingsVal($SELF,'lastExecution',0) > $minDelay ) {\
fhem("set Sonos_Kueche,Sonos_Keller,Sonos_Bad,Sonos_Schlafzimmer Speak 48 de |doorbell| ");;\
CommandSetReading(undef, "$SELF lastExecution ". time);;\
}\
}\

Bei mehrzeiligen Attributen wie im letzten Post zu sehen nicht ;)

Gruß
  Claudiu

Offline justme1968

  • Developer
  • Hero Member
  • ****
  • Beiträge: 19110
Antw:vorschlag: newline in attribut werten zulassen
« Antwort #10 am: 18 Oktober 2015, 00:23:29 »
dann muss betateilchen was dazu sagen. ich habe keine idee warum sie bei einer normalen ausgabe erscheinen. ausser sie werden absichtlich hinzugefügt. dann müsste das für die attribute auch gemacht werden. im config file sind sie jedenfalls da.

gruss
  andre
FHEM5.4,DS1512+,2xCULv3,DS9490R,HMLAN,2xRasPi
CUL_HM:HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-MDIR,HM-SEC-RHS
HUEBridge,HUEDevice:LCT001,LLC001,LLC006,LWL001
OWDevice:DS1420,DS18B20,DS2406,DS2423
FS20:fs20as4,fs20bs,fs20di
AKCP:THS01,WS15
CUL_WS:S300TH

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 20459
Antw:vorschlag: newline in attribut werten zulassen
« Antwort #11 am: 18 Oktober 2015, 12:14:25 »
Habs eingecheckt. Weiterhin habe im telnet Modul die mehrzeilige Eingabe gefixt (\ entfernt), und das comment-Attribut auf textField-long gesetzt.

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15910
  • s/fhem\.cfg/configDB/g
Antw:vorschlag: newline in attribut werten zulassen
« Antwort #12 am: 18 Oktober 2015, 16:51:49 »
dann muss betateilchen was dazu sagen.

ganz einfach: weil es bisher keine mehrzeiligen Attribute gab und deshalb auch keine Behandlung von newlines nötig war.

@rapster: ist das nur ein Anzeigeproblem oder gibt es irgendwelche Fehler in der Nutzung der neuen mehrzeiligen Attribute?
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Nächster Hamburg-Stammtisch: 14.06.2019

Offline justme1968

  • Developer
  • Hero Member
  • ****
  • Beiträge: 19110
Antw:vorschlag: newline in attribut werten zulassen
« Antwort #13 am: 18 Oktober 2015, 17:00:31 »
anders formuliert: die db sollte newline doch eigentlich transparent handhaben da sie nicht zeilenweise arbeitet. wo kommen die \ an den zeilenenden  der DEF anzeige oben her? sie erfüllen da ja keinen zweck.
FHEM5.4,DS1512+,2xCULv3,DS9490R,HMLAN,2xRasPi
CUL_HM:HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-MDIR,HM-SEC-RHS
HUEBridge,HUEDevice:LCT001,LLC001,LLC006,LWL001
OWDevice:DS1420,DS18B20,DS2406,DS2423
FS20:fs20as4,fs20bs,fs20di
AKCP:THS01,WS15
CUL_WS:S300TH

Offline rapster

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 924
Antw:vorschlag: newline in attribut werten zulassen
« Antwort #14 am: 18 Oktober 2015, 17:27:24 »
@rapster: ist das nur ein Anzeigeproblem oder gibt es irgendwelche Fehler in der Nutzung der neuen mehrzeiligen Attribute?

Das betrifft lediglich die Anzeige, habe mittlerweile mehrere Sachen ohne Probleme auf multi line umgestellt.

Gruß
  Claudiu