anchor.diff:      }
   }
   
  -class DataAttr extends AttrCore{
  +class DataAttr extends Component{
   
       DataAttr(){
         this.meta('id','DataAttr');
         this.enableSubnet();
   
         this.makePort('in:get');
  +      this.makePort('in:elem');
         this.makePort('in:set');
  -      this.makePort('out:res');
  -
  -      this.network.add('elements/GetDataAttr',(com){
  -
  -      });
  -
  -      this.network.add('elements/SetDataAttr',(com){
  -
  -      });
  -
  -    }
  -}
  -
  +      this.makePort('in:val');
  +      this.makePort('out:val');
  +
  +      this.network.makePort('in:get');
  +      this.network.makePort('in:elem');
  +      this.network.makePort('in:set');
  +      this.network.makePort('in:val');
  +      this.network.makePort('out:val');
  +      
  +      this.port('in:elem').bindPort(this.network.port('in:elem'));
  +      this.port('in:get').bindPort(this.network.port('in:get'));
  +      this.port('in:set').bindPort(this.network.port('in:set'));
  +      this.port('in:val').bindPort(this.network.port('in:val'));
  +      this.port('out:val').bindPort(this.network.port('out:val'));
  +
  +      this.network.port('in:elem').forceCondition(Elements.isElement);
  +      this.network.port('static:option').bindPort(this.port('in:elem'));
  +    
  +      this.network.port('in:get').forceCondition(Valids.isString);
  +      this.network.port('in:val').forceCondition(Valids.isString);
  +      this.network.port('in:set').forceCondition(Valids.isString);
  +
  +      this.network.add('elements/GetDataAttr','getDataAttr');
  +      this.network.add('elements/SetDataAttr','setDataAttr');
  +  
  +      this.network.ensureBinding('getDataAttr','in:elem','*','in:elem');
  +      this.network.ensureBinding('setDataAttr','in:elem','*','in:elem');
  +
  +      this.network.ensureBinding('getDataAttr','in:elem','*','in:elem');
  +      this.network.ensureBinding('getDataAttr','in:get','*','in:get');
  +      this.network.ensureBinding('getDataAttr','out:val','*','out:val');
  +
  +      this.network.ensureBinding('setDataAttr','in:elem','*','in:elem');
  +      this.network.ensureBinding('setDataAttr','in:set','*','in:set');
  +      this.network.ensureBinding('setDataAttr','in:val','*','in:val');
  +
  +    }
  +}
  +
  +class WriteHTML extends AttrCore{
  +  
  +    WriteHTML(){
  +      this makePort('in:html');
  +      this makePort('out:elem');
  +
  +      this.port('in:html').forceCondition(Valids.isString);
  +      this.port('in:html').tap((n){
  +        this.elem.innerHTML = n.data;
  +        this.port('out:elem').send(this.elem);
  +      });
  +    }
  +}
  +
  +class ReadHTML extends AttrCore{
  +  
  +    ReadHTML(){
  +      this.makePort('out:html');
  +
  +      this.port('in:elem').tap((n){
  +        this.port('out:html').send(n.data.innerHTML);
  +      });
  +    }
  +}
   
   class Element extends Component{
     html.Element elem;
  
positive.code: 
  }
  
  class GetDataAttr extends AttrCore{
  
      GetDataAttr(){
  
negative.code:   Element(): super("Element"){
      this.makePort('in:elem');
      this.makePort('out:elem');
      
  
      this.port('in:elem').forceCondition(Elements.isElement);
  
      this.port('in:elem').onSocketSubscription((sub){
          this.port('in:elem').send(this.elem,sub.get('alias'));
  