So,
auf Basis des Multitriggers habe ich mich mal an dem JS versucht:
Code:
VisuDesign_Custom.prototype.addCreator('multiswitch', {
create: function( page, path ) {
var $p = $(page);
var ret_val = $('<div class="widget clearfix switch" />');
var labelElement = $p.find('label')[0];
var label = labelElement ? '<div class="label">' + labelElement.textContent + '</div>' : '';
var address = {};
$p.find('address').each( function(){
var src = this.textContent;
var transform = this.getAttribute('transform');
var readonly = this.getAttribute('readonly');
ga_list.push( src )
address[ '_' + src ] = [ transform, readonly=='true' ];
});
ret_val.append( label );
var buttons = $('<div style="float:left"/>');
var buttonCount = 0;
if( $p.attr('button1label') )
{
//buttonCount++;
var actor = '<div class="actor switchUnpressed ';
if ( $p.attr( 'align' ) )
actor += $p.attr( 'align' );
actor += '">';
actor += '<div class="value">' + $p.attr('button1label') + '</div>';
actor += '</div>';
var $actor = $(actor).data( {
'address' : address,
'mapping' : $p.attr('mapping'),
'styling' : $p.attr('styling'),
'value' : $p.attr('button1value'),
'align' : $p.attr('align'),
'type' : 'switch'
} ).bind( 'click', this.action );
for( var addr in address ) $actor.bind( addr, this.update );
buttons.append( $actor );
if( 1 == (buttonCount++ % 2) ) buttons.append( $('<br/>') );
}
if( $p.attr('button2label') )
{
var actor = '<div class="actor switchUnpressed ';
if ( $p.attr( 'align' ) )
actor += $p.attr( 'align' );
actor += '">';
actor += '<div class="value">' + $p.attr('button2label') + '</div>';
actor += '</div>';
var $actor = $(actor).data( {
'address' : address,
'mapping' : $p.attr('mapping'),
'styling' : $p.attr('styling'),
'value' : $p.attr('button2value'),
'type' : 'switch',
'align' : $p.attr('align')
} ).bind( 'click', this.action );
for( var addr in address ) $actor.bind( addr, this.update );
buttons.append( $actor );
if( 1 == (buttonCount++ % 2) ) buttons.append( $('<br/>') );
}
if( $p.attr('button3label') )
{
var actor = '<div class="actor switchUnpressed ';
if ( $p.attr( 'align' ) )
actor += $p.attr( 'align' );
actor += '">';
actor += '<div class="value">' + $p.attr('button3label') + '</div>';
actor += '</div>';
var $actor = $(actor).data( {
'address' : address,
'mapping' : $p.attr('mapping'),
'styling' : $p.attr('styling'),
'value' : $p.attr('button3value'),
'type' : 'switch'
} ).bind( 'click', this.action );
for( var addr in address ) $actor.bind( addr, this.update );
buttons.append( $actor );
if( 1 == buttonCount++ % 2 ) buttons.append( $('<br/>') );
}
if( $p.attr('button4label') )
{
var actor = '<div class="actor switchUnpressed ';
if ( $p.attr( 'align' ) )
actor += $p.attr( 'align' );
actor += '">';
actor += '<div class="value">' + $p.attr('button4label') + '</div>';
actor += '</div>';
var $actor = $(actor).data( {
'address' : address,
'mapping' : $p.attr('mapping'),
'styling' : $p.attr('styling'),
'value' : $p.attr('button4value'),
'type' : 'switch',
} ).bind( 'click', this.action );
for( var addr in address ) $actor.bind( addr, this.update );
buttons.append( $actor );
if( 1 == buttonCount++ % 2 ) buttons.append( $('<br/>') );
}
// for( var addr in address ) $actor.bind( addr, this.update );
// ret_val.append( label ).append( $actor );
return ret_val.append( buttons );
},
update: function(e,d) {
var element = $(this);
//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();
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.value ) );
}
},
attributes: {
button1label: { type: 'string' , required: false },
button1value: { type: 'string' , required: false },
button2label: { type: 'string' , required: false },
button2value: { type: 'string' , required: false },
button3label: { type: 'string' , required: false },
button3value: { type: 'string' , required: false },
button4label: { type: 'string' , required: false },
button4value: { type: 'string' , required: false },
mapping: { type: 'mapping' , required: false },
styling: { type: 'styling' , required: false },
align: { type: 'string' , required: false }
},
elements: {
label: { type: 'string', required: false, multi: false },
address: { type: 'address', required: true, multi: true }
},
content: false
});
Um kurz mein Vorgehen für eventuelle Nachahmer zu dokumentieren:
- den Multitrigger in structure_pure.js auskommentiert und in structure_custom.js eingefügt
- Modifikationen im structure_custom.js gemacht
- Widget im structure_custom.js umbenannt, in visu_config.xml entsprechendes Elemt geändert und natürlich auch in visu_config.xsd die sämtliche Abschnitte basierend auf dem Mutitrigger ergänzt
Schöne Grüße
Christian



Einen Kommentar schreiben: