[PATCH] - fhemweb.js & 01_FHEMWEB.pm - Codemirror / perlSyntaxCheck Problem

Begonnen von rapster, 18 April 2016, 18:26:22

Vorheriges Thema - Nächstes Thema

rapster

Hi Rudi,

bzgl. des Problems: https://forum.fhem.de/index.php/topic,20444.msg438948.html#msg438948

Ein Patch für fhemweb.js und 01_FHEMWEB.pm durch welchen Codemirror und perlSyntaxCheck zumindest schonmal im DEF zusammen funktionieren.
Falls noch an anderer Stelle Probleme mit Codemirror auftreten muss ich mir das dann nochmal gesondert anschauen.

Nachdem der Patch eingecheckt ist, muss ich die fhem_codemirror.js noch aktualisieren, da dann die eigene DEF-Behandlung an der Stelle nicht mehr notwendig ist.
Das ist allerdings unproblematisch und kann separat eingecheckt werden.

Gruß
Claudiu

rudolfkoenig



rapster

Hi Rudi,

mir ist heute aufgefallen dass nach den Updates von gestern leider der Codemirror im FW_style edit nicht mehr gestartet wird.

Im Anhang nochmal ein Patch für die fhemweb.js welcher dieses Problem behebt.
Generell kann zwar die erste Passage auch woanders reingepackt werden solange bei FW_style edit noch nicht der neue SyntaxCheck verwendet wird, allerdings sind so alle CM Initialisierungen schonmal an einem Platz.

In der zweiten Passage habe ich nochmal eine kurze Prüfung eingebaut ob für ein textField-long bereits ein CM gestartet wurde.
Generell sollte es zwar an dieser Stelle nicht passieren das Codemirror zwei mal gestartet wird, allerdings schadet es denke ich nicht es trotzdem abzufangen.

Gruß
Claudiu


rudolfkoenig

Habs eingecheckt.

Die Aenderungen klingen fuer mich nach einem Fix an falschen Stelle, sowas gehoert doch nach fhem_codemirror.js. Dass man AddCodeMirror fuer ein dynamisch erzeugtes textarea aufruft, verstehe ich noch irgendwie (mit viel grummeln), aber bei statisch hinzugefuegten textarea muss doch das ohne einen expliziten Aufruf gehen, ging bisher ja auch.

rapster

Ja ist richtig, bisher wurde durch die fhem_codemirror.js bei jedem $(document).ready nach einer Textbox gesucht und diese dann falls nicht vorhanden mit CM ausgestattet.

Allerdings, zumindest bei DEF und Attributen wird die Textbox value mit dem pearlSyntaxCheck zusammen so abgerufen, dass bei verwenden von CM der veraltete Code gespeichert wurde.

Zusammen mit PSC muss über die CM callback Funktion getValue() die CM value abgerufen werden, damit die aktuelle value gespeichert wird.

Den code für die data-textarea könnte auch in die fhem_codemirror.js, da hier anscheinend (noch?) nicht der neue PSC angewendet wird, oder?
Aber falls sich das ändert müsste hier wieder mit cm.getValue() gearbeitet werden und du bräuchtest die variable.
So sind nun zumindest alle Aufrufe von AddCodeMirror() aus der fhem_codemirror.js in der fhemweb.js zu finden.

rapster

Hi,

mir ist gerade noch ein komisches Verhalten aufgefallen, allerdings tritt dieses anscheinend auch auf wenn CM und PSC garnicht verwendet werden.

Wenn ich ein Textfeld Attribut bearbeite und dieses dann speichere, wird der neue Attribut Wert nur in der DEF-Zeile angezeigt (Der DEF Inhalt wird überschrieben).
In der entsprechenden Attribut Zeile bleibt der alte Attribut-Wert bis die Seite reloaded wurde (DEF stimmt dann auch wieder).

Magst du deswegen mal guckn, seh zumindest auf die schnelle gerade nicht wo es genau hängt...? Auf einem älteren System ist dieses Verhalten nicht zu beobachten.
An den Patches der letzten Tage kann es denke ich nicht liegen, da der korrekte Text nach schließen des Dialoges ja erstmal richtig im Input-Field landet.

Gruß
Claudiu

rudolfkoenig

ZitatWenn ich ein Textfeld Attribut bearbeite und dieses dann speichere, wird der neue Attribut Wert nur in der DEF-Zeile angezeigt
Habs gefixt, vmtl. ohne Nebeneffekt. Bitte testen.

rapster

Danke, schaut nach einem ersten kurzen Test gut aus :-)

Gruß
Claudiu

rapster

Mir sind grad noch 2 weitere bugs aufgefallen.

1. Wenn man z.B. bei irgend einem DOIF device den DEF-Editor offen hat und mit geöffnetem DEF-Editor versucht ein Attribut zu speichern (z.B. icon) erhält man ein Popup mit dem Inhalt "Please define ( first"

2. Wenn man bei einem readingsProxy das setFn Attribut speichert werden die Änderungen für dieses Attribut erst nach einem site reload angezeigt.
Bei anderen Attributen z.B. icon wird der Wert allerdings sofort aktualisiert.

EDIT: Tritt auch bei einem dummy und dem Attr setList auf, und bei userReadings.

Evtl. tritt das nicht nur bei DOIF und readingsProxy auf, hier ist es mir allerdings grad aufgefallen.

rudolfkoenig

1. Kann das Problem nicht nachvollziehen mit
define di_Modul DOIF ([Switch1] eq "on" and [Switch2] eq "on")  (set lamp on)
attr di_Modul icon audio_play

2. ist mir zu aufwendig es zu reproduzieren, bitte um Beispiel, am besten nach aktualisierten 01_FHEMWEB.pm, siehe 3.
3. (dummy) konnte nachstellen, habs gefixt.

rapster

3. scheint zu funktionieren, Danke!

zu 1.
1.1 minimales DOIF device erstellen:
define di_Modul DOIF ([10:00])
1.2 In der Detail-Ansicht den DEF-Editor öffnen.
1.3 Bei geöffnetem DEF-Editor versuchen ein Attribut zu speichern.

Im angehängten Bild habe ich z.B. Versucht attr comment zu setzen.

Das Problem tritt auch bei anderen Modulen auf, z.B. readingsProxy.


Zu 2.
Hier habe ich noch bisschen mehr rausfinden können, das Problem tritt nur bei multiline Attributen auf.

2.1 minimalen readingsProxy erstellen:
define rp_Modul readingsProxy rp_Modul
2.2 multine attr setFn setzen:
{
return undef
}

=> Attribut wird erstellt und richtig angezeigt
2.3 attr setFn auf andere multiline-value ändern:
{ 1;
return undef
}

=> Attribut wird gespeichert, allerdings erst nach einem site-reload angezeigt.
2.4 attr setFn auf singleline-value ändern:
{ 1; return undef }
=> Attribut wird gespeichert und sofort richtig angezeigt.


Jeweils mit 01_FHEMWEB.pm 11326 2016-04-27 09:11:31Z getestet.

rudolfkoenig

1.1/1.2/1.2 durchgefuehrt, kirege keine Meldung, Attribut wird korrekt gesetzt. (Chrome/Firefox)
2. konnte ich nachvollziehen, habs gefixt. Bin leider nicht sicher, ob es keine Nebeneffekte hat :(

rapster

Danke dir, 2. scheint nun zu funktionieren, ich werde beobachten ob dadurch an andrer Stelle was komisch läuft  ;D

Zu 1. habe ich gerade getestet dass die Meldung nur bei Verwendung von cm.getValue() auftritt, also nur wenn Codemirror auch aktiviert ist.
Hattest du Codemirror bei deinem Test aktiviert?