Javascript Editor einbinden

Begonnen von papa, 18 Februar 2014, 20:30:04

Vorheriges Thema - Nächstes Thema

betateilchen

das manuelle Ändern ist "kompliziert" aber was codemirror kann: ein AutoResize

(http://up.picr.de/17429447hi.jpg)

(http://up.picr.de/17429449zu.jpg)

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

klausw

das ist meiner Meinung nach noch besser
im Editorfenster kann schließlich nicht genug platz sein
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

betateilchen

#62
ich finde auch, je mehr Platz umso besser :) Ich hoffe nur, dass das nicht irgendwann Performance-Probleme gibt.

Das sind die Änderungen fürs autoResize



    if( AttrVal($FW_wname,'enhancedEditor',0) ) {
      my $ext = ($fileName =~ m/\.(.*)$/)[0];
      FW_codemirrorLink($ext);
->      FW_pO "<style type=\"text/css\">".
->           ".CodeMirror {height: auto;}".
->            ".CodeMirror-scroll {overflow-y: hidden; overflow-x: auto;}".
->            "</style>".
            "<script>".
            "var editor = CodeMirror.fromTextArea(document.getElementById(\"data\"),".
            FW_codemirrorParams($ext) . ");".
            "</script>";
    }

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

klausw

Zitat von: betateilchen am 21 Februar 2014, 14:31:14
ich finde auch, je mehr Platz umso besser :) Ich hoffe nur, dass das nicht irgendwann Performance-Probleme gibt.

Das Javascript wird doch vom Browser verarbeitet. Der hat hoffentlich noch Luft  nach oben, was die Performance angeht :)
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

papa

#64
Ich habe mal mit einen fhem Mode begonnen. Dieser fügt dem perl Mode noch ein paar Keywörter hinzu. Außerdem beinhaltet er auch die Autocompletion. Zum Probieren mal das angehängt 01_FHEMWEB.pm nehmen. Außerdem muss das fhem.js in den in das Verzeichnis codemirror/mode/fhem.

Leider kriege ich die Geräteliste per jsonlist Kommando nicht zum laufen. Deshalb geht auch das Einblenden der Geräteliste noch nicht. Vielleicht hat ja jemand eine Idee, der vertrauter mit Javascript ist.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

papa

Jetzt funktioniert auch die Hilfe mit der Liste aller definierten Devices. Das ganze wird mit Ctrl+Space angezeigt.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

fhainz

Hallo papa,

hast du vielleicht eine .patch Datei zur 01_FHEMWEB.pm ?


Grüße

fhainz

@Betateilchen
Ich hab deinen fix für das autoResize ausprobiert. Leider klappt das bei mir nicht. Hast du eine Idee?

if( AttrVal($FW_wname,'enhancedEditor',0) ) {
      my $ext = ($fileName =~ m/\.(.*)$/)[0];
      FW_codemirrorLink($ext);
      FW_pO "<style type=\"text/css\">".
           ".CodeMirror {height: auto;}".
            ".CodeMirror-scroll {overflow-y: hidden; overflow-x: auto;}".
            "</style>".
      FW_pO "<script>var editor = CodeMirror.fromTextArea(document.getElementById(\"data\"),".
            FW_codemirrorParams($ext) . ");</script>";
    }



Grüße

papa

Zitat von: fhainz am 22 Februar 2014, 14:50:48
hast du vielleicht eine .patch Datei zur 01_FHEMWEB.pm ?

Nein - leider nicht - keine richtige Entwicklungsumgebung. Aber ich habe die Änderungen hier mal rot eingefärbt.


my %codemirrorMapping = ( pm => "fhem",
                          cfg => "fhem",
                          css => "css",
                          svg => "xml",
);

sub FW_codemirrorLink($)
{
  my ($ext) = @_;

  my $lang = $codemirrorMapping{$ext};
  my $theme = AttrVal($FW_wname,'enhancedEditorTheme','blackboard');

  $lang = "perl" if( !$lang );

  FW_pO "<script type=\"text/javascript\" src=\"$FW_ME/pgm2/jquery.min.js\"></script>";
  FW_pO "<link rel=\"stylesheet\" href=\"$FW_ME/codemirror/lib/codemirror.css\">";
  FW_pO "<script type=\"text/javascript\" src=\"$FW_ME/codemirror/lib/codemirror.js\"></script>";
  FW_pO "<link rel=\"stylesheet\" href=\"$FW_ME/codemirror/theme/$theme.css\">";
  FW_pO "<script type=\"text/javascript\" src=\"$FW_ME/codemirror/addon/edit/closebrackets.js\"></script>";
  FW_pO "<script type=\"text/javascript\" src=\"$FW_ME/codemirror/addon/edit/matchbrackets.js\"></script>";
  FW_pO "<script type=\"text/javascript\" src=\"$FW_ME/codemirror/addon/hint/show-hint.js\"></script>";
  FW_pO "<link rel=\"stylesheet\" href=\"$FW_ME/codemirror/addon/hint/show-hint.css\">";

  FW_pO "<script type=\"text/javascript\" src=\"$FW_ME/codemirror/mode/$lang/$lang.js\"></script>" if( $lang );
  return;
}
sub FW_codemirrorParams($)
{
  my ($ext) = @_;

  my $theme = AttrVal($FW_wname,'enhancedEditorTheme','blackboard');

  #my $lang = $codemirrorMapping{$ext};
  #if( !$lang ) {
  #  $lang = "";
  #} else {
  #  $lang .= ": true,";
  #}
  #return "{theme: '". $theme. "', $lang lineNumbers: true, matchBrackets: true, autoCloseBrackets: true}";

  return "{theme: '". $theme. "', lineNumbers: true, matchBrackets: true, autoCloseBrackets: true, extraKeys: {'Ctrl-Space': 'autocomplete'} }";
}
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

betateilchen

Zitat von: fhainz am 22 Februar 2014, 15:10:22Hast du eine Idee?

klar, nach "</style>" kommt ein ; kein .

Hättest Du es einfach so übernommen, wie von mir vorgeschlagen, hätte es funktioniert.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

ich werde mir die Änderung von papa heute abend mal anschauen und dann einfach mal eine komplette 01_FHEMWEB zum Testen hier reinhängen. Dauert aber noch ein bißchen, ich hab erstmal Hunger :)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

fhainz

Hätte ich mir auch denken können.  ::)
Nun klappts, danke!

fhainz

Die auto-vervöllständigung ist wirklich cool! Funktioniert super bei mir!  8)

Ich häng hier den patch von andre an. Die Änderungen von betateilchen (autoResize) und von papa (autocomplete) hab ich manuell eingefügt und den patch getestet.
Falls jemand testen will.


Grüße

papa

Ich habe hier nochmal eine aktuallisierte Version der Autovervollständigung. Das JSON Handling ist jetzt async. Außerdem wird ein existierender Alias mit angezeigt.

Folgende Punkte sind noch auf meiner Liste:

* vollständige Liste der FHEM Keyword / Variablen
* Zwischenspeichern der Device Liste - oder alternativ eine gekürzte jsonlist mit Namen & Alias
* Kontextsensitive Hilfe - z.B. wenn der Cursor hinter 'attr' steht, brauchen nur die Devices angezeigt zu werden. Wenn dann schon 'attr dev123' dasteht - nur die Attribute von 'dev123'. Analog könnte man auch die Devices und Readings bei 'ReadingsVal' einblenden. Weitere Vorschläge sind gerne willkommen.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

oniT

Hallo,

da es mich auch interessieren würde wie das ganze Aussieht, muss ich mal fragen wie ich den oder im allgemeinen die Patch einspiele? Mittels FTP übertragen ist klar, ein Reload durchführen auch. Aber dann kommt eine Fehlermeldung. Würde mich bitte mal einer darüber aufklären.

Danke

Gruß,
Tino
BBB - debian weezy - FHEM 5.7
HMLAN - HM-LC-Bl1-FM, HM-ES-PMSw1-PI, HM-LC-Sw1-FM, HM-TC-IT-WM-W-EU, HM-WDS40-TH-I, HM-Sen-Wa-Od, HM-Sec-RHS
Dimplex Wärmepumpe / Dimplex ZL 300 - Modbus TCP
SDM630M - Modbus TCP
SolarLog 200 / SMA SonnyBoy 1.5/2.5 - Modbus TCP