import { AttributeController } from '../view/exported';
import { IBindingContext } from './exported';


export interface IOverrideContext {
  context?: IOverrideContext;
  overrideContext?: IOverrideContext;
}


export interface IAttribute {

  /**
   * Element of the attribute
   */
  $element?: Element | Node | HTMLElement;


  /**
   * DOM attributes on Element
   */
  $attribute?: Attr;



  /**
   * binding context
   */
  $bindingContext?: IBindingContext;


  /**
   * controller
   */
  $controller?: AttributeController;



  /**
   * when created, and $element etc is set
   */
  created?(): void;



  /**
   * when its element is attached to parent node when this is called
   * Good place to call addEventlister
   */
  attached?(): void;



  /**
   * when its element is about to be detached from parent node
   * Good place to call removeEventlister
   */
  detached?(): void;


  /**
   * typical event handler for behavior
   */
  eventHandlerBinded?(): void;
}


