anchor.diff:  
   }
   
  +class HasClass extends AttrCore{
  +
  +    HasClass(){
  +      this.meta('id','HasClass');
  +
  +      this.makePort('in:val');
  +      this.makePort('out:success');
  +      this.makePort('err:failed');
  +
  +      this.port('in:val').forceCondition(Elements.elementExist(this.elem));
  +      this.port('in:val').forceCondition(Valids.isString);
  +      this.port('in:val').tap((n){
  +          if(!this.elem.classes.contains(n.data)) return this.port('err:failed').send(n);
  +          this.port('out:success').send(n);
  +      });
  +    }
  +
  +}
  +
   class GetDataAttr extends AttrCore{
   
       GetDataAttr(){
  
positive.code:   Element(): super("Element"){
      this.makePort('in:elem');
      this.makePort('out:elem');
      this.makePort('in:beat');
      
      var beat = (n){
        this.port('out:elem').send(this.elem);
      }
  
      this.port('in:elem').forceCondition(Elements.isElement);
      this.port('in:beat').forceCondition(Elements.isElement);
  
      this.port('in:elem').onSocketSubscription((sub){
          this.port('in:elem').send(this.elem,sub.get('alias'));
  
negative.code:       this.makePort('err:failed');
  
        this.port('in:val').forceCondition(Elements.elementExist(this.elem));
        this.port('in:val').forceCondition(Valids.isString);
        this.port('in:val').tap((n){
            if(!this.elem.classes.contains(n.data)) return this.port('err:failed').send(n);
            this.elem.remove(n.data);
  