anchor.diff:  var labelClass = classFn('&-label')
   var value = (state.value || state.value === '' ) ? state.value : props.defaultValue
   
  -.is-input(className=classFn())
  -  if props.template
  -    AutoInputSave(template=props.template)
  -      block input(savedValue, fns)
  -        = inputContent(fns.onChange)
  -        yield icon
  -  else if props.noTemplate
  +if props.template
  +  AutoInputSave.is-input(className=classFn() template=props.template onStart=props.onSaveStart onFinish=props.onSaveFinish onError=props.onSaveError)
  +    block input(savedValue, fns)
  +      = inputContent(fns.onChange)
  +      yield icon
  +else if props.noTemplate
  +  .is-input(className=classFn())
       = inputContent()
       yield icon
   
  
positive.code:   @prop {Function} [onBlur]
    @prop {Function} [onChange]
    @prop {Function} [onFocus]
    @prop {Function} [onKeydown]
    @prop {Number} [maxLength]
    @prop {Number} [minLength]
    @prop {Object} [template]
  
negative.code:     if (this.props.onBlur) this.props.onBlur.apply(null, arguments);
    }
  
    export function onChange (autoSave, evt) {
      var value = evt.target.value;
      if (this.props.onChange) this.props.onChange(evt);
      if (this.props.saveOnChange) this.saveValue(autoSave, value, evt)
    }
  
    export function saveValue (cb, value, evt) {
      var hasValue = !!value;
      if (this.state.hasValue !== hasValue) this.setState({hasValue: hasValue});
      this.setState({value: value});
      if (cb) cb(evt, value.trim()); 
    }
  