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
Ankündigung
Einklappen
Keine Ankündigung bisher.
Statusanzeige im Multitrigger
Einklappen
X
-
Nennt man's "Multitrigger" weil's ein Trigger mit Switch-Option ist?Zitat von netzkind Beitrag anzeigenNachdem 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.
Oder nennt man's "Multiswitch" weil's ein Switch mit Trigger-Option ist?
Schwierig.
Was nach der Logik auch die normalen Trigger überflüssig machen würde.Zitat von netzkind Beitrag anzeigenWenn man die Trigger vor dem Hintergrund von writeonly vielleicht auch ganz wegwerfen könnte...
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:
-
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:
-
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:
-
Bitte zu Tabs auch beachten: SourceForge.net: CometVisu/CodingStyle - Open AutomationZitat von chriss1980 Beitrag anzeigenWeh o weh... da scheint doch irgendwas mit Tabs und Spaces gemischt zu sein. Ich prüfe das dann auch nochmal.
Einen Kommentar schreiben:
-
Hallo Jan, Chris,
okay, brechen der Config ist natürlich nicht schön und Dein Vorschlag sollte ja gut funktionieren. Ich pflege das noch ein.Zitat von JNK Beitrag anzeigenDu 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.
Weh o weh... da scheint doch irgendwas mit Tabs und Spaces gemischt zu sein. Ich prüfe das dann auch nochmal.Zitat von Chris M. Beitrag anzeigenWas Du vor dem Checkin aber noch mal kontrollieren solltest ist die Einrückung. Die sieht mir laut Diff nicht immer ganz glücklich aus.
Danke für die Geduld und das Feedback!
Christian
Einen Kommentar schreiben:
-
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:
-
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:
-
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 },Schöne GrüßeCode: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" />
Christian
Einen Kommentar schreiben:
-
Der Editor schaut nicht auf das XSD, das dient nur der Überprüfung der XML-Syntax.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.
Wenn etwas im Editor nicht erscheint, dann muss in der structure_*.js nachgebessert werden.
Einen Kommentar schreiben:
-
Tja, zumindest zeigt der Editor mein neues Multiswitch-Widget in der Drop-Down-Auswahl an. Das würde also schonmal funktionieren.Zitat von JNK Beitrag anzeigenEditor: Das sollte eigentlich so gehen.
Ich habe dann im DTD einfach eine Zeile für das neue Attribut (jetzt im Multitrigger) einfügen wollen:
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.Code:<xsd:complexType name="multitrigger"> ... <xsd:attribute name="showstatus" type="xsd:boolean" use="required" /> ... </xsd:complexType>
Übersehe ich etwas? Hat jemand Tipps?
Danke
Christian
Einen Kommentar schreiben:
-
Ja, das klingt sinnvoll. Auch daran kann ich mich gerne versuchen und dann einen entsprechenden Diff posten oder in einem Ticket ablegen.Zitat von JNK Beitrag anzeigenDie 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.
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:
-
Ich habe nicht auf den Code geschaut (Pfui!), aber:Zitat von JNK Beitrag anzeigenSieht 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.
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.
Ehrlich? Das Multi<...> ist an sich Müll. (Der Infotrigger auch)Zitat von JNK Beitrag anzeigenIch bin allerdings immer noch der Meinung, dass das mit button1, button2, ... irgendwie Müll ist.
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:
-
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.Zitat von chriss1980 Beitrag anzeigenDas 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.
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
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?Code:<multitrigger> <address ..... >.....</address> ... <button value="x">label1</button> <button value="x">label2</button> ...
Einen Kommentar schreiben:


Einen Kommentar schreiben: