Ankündigung

Einklappen
Keine Ankündigung bisher.

Statusanzeige im Multitrigger

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • netzkind
    antwortet
    Ich meinte damit alle Trigger. Vielleicht kann man es auch als Widget-Option machen, ob der Button einen state-change haben soll.

    Damit können wir dann gleich ein wenig aufräumen, was es Neueinsteigern in der Config leichter machen KÖNNTE. Denk ich mir zumindest so, wenn die Auswahl an Widgets übersichtlicher ist.. und wir eliminieren code-duplication.

    Grüße,
    Julian

    Gesendet von meinem GT-I9100 mit Tapatalk

    Einen Kommentar schreiben:


  • Chris M.
    antwortet
    Zitat von netzkind Beitrag anzeigen
    Nachdem es jetzt kein Trigger mehr ist (fire&forget, es gibt keinen Status), sondern ein Switch mit Trigger-Option, sollte man ihn auch umbenennen. Wobei das wieder alte Configs unbrauchbar macht. Das sollte man noch mal überdenken.
    Nennt man's "Multitrigger" weil's ein Trigger mit Switch-Option ist?
    Oder nennt man's "Multiswitch" weil's ein Switch mit Trigger-Option ist?

    Schwierig.
    Zitat von netzkind Beitrag anzeigen
    Wenn man die Trigger vor dem Hintergrund von writeonly vielleicht auch ganz wegwerfen könnte...
    Was nach der Logik auch die normalen Trigger überflüssig machen würde.

    Wobei ich mir gerade nicht sicher bin, ob der "Status" beim Switch mit Writeonly nicht alleine durch einen Click geändert wird, also zwischen Pressed und Unpressed geschaltet wird.

    => Interessantes Thema. Aber das Konzept sollte stehen, bevor wir's umsetzen.

    Einen Kommentar schreiben:


  • netzkind
    antwortet
    Nachdem es jetzt kein Trigger mehr ist (fire&forget, es gibt keinen Status), sondern ein Switch mit Trigger-Option, sollte man ihn auch umbenennen. Wobei das wieder alte Configs unbrauchbar macht. Das sollte man noch mal überdenken.

    Wenn man die Trigger vor dem Hintergrund von writeonly vielleicht auch ganz wegwerfen könnte...

    Grüße,
    Julian

    Gesendet von meinem GT-I9100 mit Tapatalk

    Einen Kommentar schreiben:


  • chriss1980
    antwortet
    Endlich

    Was lange währt... usw.

    Einrückung ist korrigiert, die Anmerkungen von Jan sind umgesetzt (Default-Verhalten und das Attribut im XML optional) und die Änderung in Revision 663 im SVN.

    Ich hoffe, dass der Commit okay ist - falls nicht, bitte reverten und mir kurz bescheid geben. Bei mir läuft die Statusanzeige problemlos.

    Schöne Grüße
    Christian

    ps: Ich hätte das auch gerne im Wiki dokumentiert, allerdings habe ich keine Editierrechte (Benutzer cschleiffer)

    Einen Kommentar schreiben:


  • Chris M.
    antwortet
    Zitat von chriss1980 Beitrag anzeigen
    Weh o weh... da scheint doch irgendwas mit Tabs und Spaces gemischt zu sein. Ich prüfe das dann auch nochmal.
    Bitte zu Tabs auch beachten: SourceForge.net: CometVisu/CodingStyle - Open Automation

    Einen Kommentar schreiben:


  • chriss1980
    antwortet
    Hallo Jan, Chris,

    Zitat von JNK Beitrag anzeigen
    Du hast "showstatus" als "required", das ist nicht gut, weil es bisherige config bricht. Besser wäre, das optional zu lassen und (zweiter Punkt) am Anfang (ungetestet)

    var showstatus = $p.attr("showstatus") || false;

    einzufügen und dann in den späteren Abfragen nur

    if (showstatus) { .... }

    zu verwenden.

    Das ist m.E. eleganter und führt gleichzeitig für alles bestehende die default-option "false" ein.
    okay, brechen der Config ist natürlich nicht schön und Dein Vorschlag sollte ja gut funktionieren. Ich pflege das noch ein.

    Zitat von Chris M. Beitrag anzeigen
    Was Du vor dem Checkin aber noch mal kontrollieren solltest ist die Einrückung. Die sieht mir laut Diff nicht immer ganz glücklich aus.
    Weh o weh... da scheint doch irgendwas mit Tabs und Spaces gemischt zu sein. Ich prüfe das dann auch nochmal.

    Danke für die Geduld und das Feedback!

    Christian

    Einen Kommentar schreiben:


  • Chris M.
    antwortet
    Ich hab den Code nicht im Detail gegen den bestehenden geprüft, sieht aber erst mal vernünftig aus.

    Was Du vor dem Checkin aber noch mal kontrollieren solltest ist die Einrückung. Die sieht mir laut Diff nicht immer ganz glücklich aus.

    PS: Habe gerade den Kommentar vom Jan gesehen: sehe ich auch so.

    Einen Kommentar schreiben:


  • JNK
    antwortet
    Sieht soweit ganz gut aus. Zwei Sachen hätte ich trotzdem:

    Du hast "showstatus" als "required", das ist nicht gut, weil es bisherige config bricht. Besser wäre, das optional zu lassen und (zweiter Punkt) am Anfang (ungetestet)

    var showstatus = $p.attr("showstatus") || false;

    einzufügen und dann in den späteren Abfragen nur

    if (showstatus) { .... }

    zu verwenden.

    Das ist m.E. eleganter und führt gleichzeitig für alles bestehende die default-option "false" ein.


    Gruss,

    der Jan

    Einen Kommentar schreiben:


  • chriss1980
    antwortet
    Oh man, das war einfach *vordenkopfschlag*

    Dann hier meine Änderungsvorschläge/Diffs zum aktuellen Trunk. Wenn genehmigt, committe ich das auch gerne.

    Code:
    Index: designs/structure_pure.js
    ===================================================================
    --- designs/structure_pure.js   (Revision 566)
    +++ designs/structure_pure.js   (Arbeitskopie)
    @@ -406,6 +406,7 @@
         content:      false
       });
    
    +
       this.addCreator('toggle', {
         create: function( page, path ) {
           var $p = $(page);
    @@ -505,6 +506,9 @@
               'align'   : $p.attr('align'),
               'type'    : 'switch'
             } ).bind( 'click', this.action );
    +               if( $p.attr( 'showstatus' ) == 'true' ) {
    +                       for( var addr in address ) $actor.bind( addr, this.update );
    +               }
             buttons.append( $actor );
             if( 1 == (buttonCount++ % 2) ) buttons.append( $('<br/>') );
           }
    @@ -524,6 +528,9 @@
               'type'    : 'switch',
               'align'   : $p.attr('align')
             } ).bind( 'click', this.action );
    +               if( $p.attr( 'showstatus' ) == 'true' ) {
    +                       for( var addr in address ) $actor.bind( addr, this.update );
    +               }
             buttons.append( $actor );
             if( 1 == (buttonCount++ % 2) ) buttons.append( $('<br/>') );
           }
    @@ -542,6 +549,9 @@
               'value'   : $p.attr('button3value'),
               'type'    : 'switch'
             } ).bind( 'click', this.action );
    +               if( $p.attr( 'showstatus' ) == 'true' ) {
    +                       for( var addr in address ) $actor.bind( addr, this.update );
    +               }
             buttons.append( $actor );
             if( 1 == buttonCount++ % 2 ) buttons.append( $('<br/>') );
           }
    @@ -560,6 +570,9 @@
               'value'   : $p.attr('button4value'),
               'type'    : 'switch',
             } ).bind( 'click', this.action );
    +               if( $p.attr( 'showstatus' ) == 'true' ) {
    +                       for( var addr in address ) $actor.bind( addr, this.update );
    +               }
             buttons.append( $actor );
             if( 1 == buttonCount++ % 2 ) buttons.append( $('<br/>') );
           }
    @@ -569,9 +582,11 @@
         },
         update: function(e,d) {
           var element = $(this);
    -      var value = defaultUpdate( e, d, element );
    -      element.removeClass( value == 0 ? 'switchPressed' : 'switchUnpressed' );
    -      element.addClass(    value == 0 ? 'switchUnpressed' : 'switchPressed' );
    +      //var value = defaultUpdate( e, d, element );
    +         var thisTransform = element.data().address[ e.type ][0];
    +         var value = transformDecode( element.data().address[ e.type ][0], d );
    +      element.removeClass( value == element.data().value ? 'switchUnpressed' : 'switchPressed' );
    +      element.addClass(    value == element.data().value ? 'switchPressed' : 'switchUnpressed' );
         },
         action: function() {
           var data = $(this).data();
    @@ -592,7 +607,8 @@
           button4value:      { type: 'string'  , required: false },
           mapping:           { type: 'mapping' , required: false },
           styling:           { type: 'styling' , required: false },
    -      align:             { type: 'string'  , required: false }
    +      align:             { type: 'string'  , required: false },
    +         showstatus:        { type: 'list'   , required: true, list: {'true': "yes", 'false': "no"}   }
         },
         elements: {
           label:             { type: 'string',    required: false, multi: false },
    Code:
    Index: visu_config.xsd
    ===================================================================
    --- visu_config.xsd     (Revision 566)
    +++ visu_config.xsd     (Arbeitskopie)
    @@ -63,9 +63,9 @@
    
     <xsd:attribute name="readonly" type="xsd:boolean" />
     <xsd:attribute name="align" type="xsd:string" />
    +<xsd:attribute name="showstatus" type="xsd:string" />
    
     <!-- complex elements -->
    -
     <xsd:element name="pages">
         <xsd:complexType>
             <xsd:choice minOccurs="0" maxOccurs="unbounded">
    @@ -304,6 +304,7 @@
         </xsd:choice>
         <xsd:attribute ref="mapping" use="optional" />
         <xsd:attribute ref="styling" use="optional" />
    +       <xsd:attribute name="showstatus" type="xsd:string" use="required" />
         <xsd:attribute name="button1label" type="xsd:string" use="optional" />
         <xsd:attribute name="button1value" type="xsd:string" use="optional" />
         <xsd:attribute name="button2label" type="xsd:string" use="optional" />
    Schöne Grüße
    Christian

    Einen Kommentar schreiben:


  • Chris M.
    antwortet
    Zitat von chriss1980 Beitrag anzeigen
    ]Das funktioniert aber leider nicht, d.h. der Editor zeigt kein neues Feld an. Weiter oben im XSD sind die Attribute nochmal separat definiert, auch das dortige hinzufügen hat nicht geholfen.
    Der Editor schaut nicht auf das XSD, das dient nur der Überprüfung der XML-Syntax.

    Wenn etwas im Editor nicht erscheint, dann muss in der structure_*.js nachgebessert werden.

    Einen Kommentar schreiben:


  • chriss1980
    antwortet
    Zitat von JNK Beitrag anzeigen
    Editor: Das sollte eigentlich so gehen.
    Tja, zumindest zeigt der Editor mein neues Multiswitch-Widget in der Drop-Down-Auswahl an. Das würde also schonmal funktionieren.
    Ich habe dann im DTD einfach eine Zeile für das neue Attribut (jetzt im Multitrigger) einfügen wollen:

    Code:
    <xsd:complexType name="multitrigger">
    ...
        <xsd:attribute name="showstatus" type="xsd:boolean" use="required" />
    ...
    </xsd:complexType>
    Das funktioniert aber leider nicht, d.h. der Editor zeigt kein neues Feld an. Weiter oben im XSD sind die Attribute nochmal separat definiert, auch das dortige hinzufügen hat nicht geholfen.

    Übersehe ich etwas? Hat jemand Tipps?

    Danke
    Christian

    Einen Kommentar schreiben:


  • JNK
    antwortet
    Editor: Das sollte eigentlich so gehen.

    Einen Kommentar schreiben:


  • chriss1980
    antwortet
    Zitat von JNK Beitrag anzeigen
    Die Frage ist, ob das wirklich als eigenes Widget Sinn macht, oder ob nicht etwas wie showstatus="true/false" als Attribut einfacher wäre, und dann "update" entsprechend angepasst wird. Das würde die "overall"-Codemenge vermutlich reduzieren und auch die Zahl an Widgets nicht ausufern lassen. Die Funktion ist ja doch sehr ähnlich.
    Ja, das klingt sinnvoll. Auch daran kann ich mich gerne versuchen und dann einen entsprechenden Diff posten oder in einem Ticket ablegen.

    ABER... wie schaut das an der Stelle mit dem Editor aus? Müsste der auch entsprechend angepasst werden oder versteht der Editor das bei entsprechendem DTD automatisch?

    Einen Kommentar schreiben:


  • Chris M.
    antwortet
    Zitat von JNK Beitrag anzeigen
    Sieht soweit ganz gut aus, hätte ich auch so gemacht. Die Frage ist, ob das wirklich als eigenes Widget Sinn macht, oder ob nicht etwas wie showstatus="true/false" als Attribut einfacher wäre, und dann "update" entsprechend angepasst wird.
    Ich habe nicht auf den Code geschaut (Pfui!), aber:
    Wenn der Unterschied zum Multitrigger sehr gering ist, dann ist die Lösung per Parameter sicher nicht verkehrt.
    Wenn dagegen das HTML gänzlich anders aufgebaut ist, wäre ich für neues Widget.
    Zitat von JNK Beitrag anzeigen
    Ich bin allerdings immer noch der Meinung, dass das mit button1, button2, ... irgendwie Müll ist.
    Ehrlich? Das Multi<...> ist an sich Müll. (Der Infotrigger auch)
    Es ist nur eine Zwischenlösung bis die Groups ordentlich funktionieren.

    Dann könnte man sich das problemlos aus den Basis-Widgets zusammenbauen. (Gerne auch als Template im Editor, wie bei den Includes schon angedacht).

    Einen Kommentar schreiben:


  • JNK
    antwortet
    Zitat von chriss1980 Beitrag anzeigen
    Das scheint bei mir erstmal zu funktioniere, ich würde mich aber trotzdem freuen, wenn einer der Experten einen Kommentar abgibt. Die Modifikationen sind eigentlich nur eine Anpassung der update()-Funktion sowie Registrierung der update()-Funktion für jeden (!) der Buttons in der create()-Funktion.
    Sieht soweit ganz gut aus, hätte ich auch so gemacht. Die Frage ist, ob das wirklich als eigenes Widget Sinn macht, oder ob nicht etwas wie showstatus="true/false" als Attribut einfacher wäre, und dann "update" entsprechend angepasst wird. Das würde die "overall"-Codemenge vermutlich reduzieren und auch die Zahl an Widgets nicht ausufern lassen. Die Funktion ist ja doch sehr ähnlich.

    Ich bin allerdings immer noch der Meinung, dass das mit button1, button2, ... irgendwie Müll ist. Ich hatte beim Multitrigger schon vorgeschlagen so etwas wie

    Code:
    <multitrigger>
      <address ..... >.....</address>
      ...
      <button value="x">label1</button>
      <button value="x">label2</button>
      ...
    zu realisieren. das wäre m.E. auch für den JS-Code einfacher. Das einzige was dagegen spricht ist, dass der Editor damit nicht umgehen kann bzw konnte. Geht das jetzt oder kann man dem das einfach beibringen? Julian?

    Einen Kommentar schreiben:

Lädt...
X