Hallo Zusammen
Im Zusammenhang mit dem neuen Editor bin ich wieder auf meien selbstgebauten widgets gestossen (siehe Shutter).
Ich habe mir da auch mal einen Trigger gebaut der beim Drücken und Loslassen jeweils eine 1 und eine 0 sendet (Taster).
Ist bei mir schon seit längerem so im Einsatz.
Funktioniert mit hier gängigen Browsern (Chrome, FF) und auch mit Android Tablets / Phones.
Ich bin immer etwas zurückhaltend mit einchecken ins SVN (Account habe noch keinen).
Wenn das allgemein für gut/sinnvoll gehalten wird, dann müsste nur noch ein geeigneter Name her (zb pushbutton oder so).
Evtl. könnte auch der trigger so umgebeut werden, dass der diese Möglichkeit schon drin hat. Das könnte dann z.B. per Attribut "konfiguriert" werden.
Hier mein umgebauter Trigger:
Grüsse
Iwan
Im Zusammenhang mit dem neuen Editor bin ich wieder auf meien selbstgebauten widgets gestossen (siehe Shutter).
Ich habe mir da auch mal einen Trigger gebaut der beim Drücken und Loslassen jeweils eine 1 und eine 0 sendet (Taster).
Ist bei mir schon seit längerem so im Einsatz.
Funktioniert mit hier gängigen Browsern (Chrome, FF) und auch mit Android Tablets / Phones.
Ich bin immer etwas zurückhaltend mit einchecken ins SVN (Account habe noch keinen).
Wenn das allgemein für gut/sinnvoll gehalten wird, dann müsste nur noch ein geeigneter Name her (zb pushbutton oder so).
Evtl. könnte auch der trigger so umgebeut werden, dass der diese Möglichkeit schon drin hat. Das könnte dann z.B. per Attribut "konfiguriert" werden.
Hier mein umgebauter Trigger:
PHP-Code:
VisuDesign_Custom.prototype.addCreator('switch_1_0',{
create: function( element, path, flavour, type ) {
var $e = $(element);
var layout = $e.children('layout')[0];
var style = layout ? 'style="' + extractLayout( layout, type ) + '"' : '';
var ret_val = $('<div class="widget clearfix switch" ' + style + '/>');
ret_val.setWidgetLayout($e)
var label = extractLabel( $e.find('label')[0] );
var address = makeAddressList($e);
var lastevent;
var actor = '<div class="actor switchUnpressed"><div class="value">-</div></div>';
var $actor = $(actor).data( {
'address' : address,
'mapping' : $e.attr('mapping'),
'styling' : $e.attr('styling'),
'down_value' : $e.attr('down_value') || 1,
'up_value' : $e.attr('up_value') || 0,
'align' : $e.attr('align'),
'type' : 'switch'
} ).bind( 'mousedown touchstart', this.mousedown).bind( 'mouseup touchend', this.mouseup ).bind( 'mouseout',this.mouseout );
for( var addr in address )
{
if( address[addr][1] & 1 ) $actor.bind( addr, this.update ); // only when read flag is set
}
ret_val.append(label).append( $actor );
return ret_val;
},
update: function(e,d) {
var element = $(this);
var value = defaultUpdate( e, d, element );
var off = map( element.data( 'up_value' ), element.data('mapping') );
element.removeClass( value == off ? 'switchPressed' : 'switchUnpressed' );
element.addClass( value == off ? 'switchUnpressed' : 'switchPressed' );
},
mousedown: function(event) {
if(typeof lastevent === 'undefined'){ lastevent = ""; };
if(typeof lasteventhist === 'undefined'){ lasteventhist = ""; };
if(lastevent !== 'touchstart'){
lastevent = event.type;
$(this).removeClass('switchUnpressed').addClass('switchPressed');
var data = $(this).data();
for( var addr in data.address )
{
if( data.address[addr][1] == true ) continue; // skip read only
visu.write( addr.substr(1), transformEncode( data.address[addr][0], data.down_value) );
//visu.write( addr.substr(1), transformEncode( data.address[addr][0], data.value == data.up_value ? data.down_value : data.up_value ) );
//visu.write( addr.substr(1), transformEncode( data.address[addr][0], data.sendValue ) );
}
}
},
mouseup: function(event) {
if(lastevent !== 'touchstart'){
$(this).removeClass('switchPressed').addClass('switchUnpressed')
var data = $(this).data();
for( var addr in data.address )
{
if( data.address[addr][1] == true ) continue; // skip read only
visu.write( addr.substr(1), transformEncode( data.address[addr][0], data.up_value) );
//visu.write( addr.substr(1), transformEncode( data.address[addr][0], data.value == data.up_value ? data.down_value : data.up_value ) );
//visu.write( addr.substr(1), transformEncode( data.address[addr][0], data.sendValue ) );
}
}
lastevent = event.type;
},
mouseout: function(event) {
$(this).removeClass('switchPressed').addClass('switchUnpressed');
},
attributes: {
down_value: { type: 'string' , required: false },
up_value: { type: 'string' , required: false },
mapping: { type: 'mapping', required: false },
styling: { type: 'styling', required: false },
align: { type: 'string' , required: false },
colspan: { type: 'numeric', required: false },
rowspan: { type: 'numeric', required: false }
},
elements: {
layout: { type: 'layout' , required: false, multi: false },
label: { type: 'string' , required: true , multi: false },
address: { type: 'address', required: true , multi: true }
},
content: false
});
Iwan
Kommentar