// ========================================================================== // Project: SproutCore - JavaScript Application Framework // Copyright: ©2006-2011 Strobe Inc. and contributors. // Portions ©2008-2011 Apple Inc. All rights reserved. // License: Licensed under MIT license (see license.js) // ==========================================================================

sc_require('views/template');

/**

@class
@extends SC.TemplateView
@extends SC.ActionSupport

*/ SC.Button = SC.TemplateView.extend(SC.ActionSupport, /** @scope SC.Button.prototype */{

classNames: ['sc-button'],

mouseDown: function() {
  this.set('isActive', true);
  this._isMouseDown = YES;
},

mouseExited: function() {
  this.set('isActive', false);
},

mouseEntered: function() {
  if (this._isMouseDown) {
    this.set('isActive', true);
  }
},

rootResponder: function() {
  var pane = this.get('pane');
  return pane.get('rootResponder');
}.property('pane').cacheable(),

mouseUp: function(event) {
  if (this.get('isActive')) {
    this.fireAction();
    this.set('isActive', false);
  }

  this._isMouseDown = NO;
},

touchStart: function(touch) {
  this.mouseDown(touch);
},

touchEnd: function(touch) {
  this.mouseUp(touch);
},

keyDown: function(evt) {
  var ret = NO,
      view;
  if (evt.which === 9 || evt.keyCode === 9) {
    view = evt.shiftKey ? this.get('previousValidKeyView') : this.get('nextValidKeyView');
    if (view) {
      view.becomeFirstResponder();
    } else {
      evt.allowDefault();
    }
    ret = YES;
  } else if (evt.which === SC.Event.KEY_SPACE || evt.which === SC.Event.KEY_RETURN) {
    this.set('isActive', YES);
    this.invokeLater('_runAction', SC.ButtonView.TRIGGER_DELAY);
    ret = YES;
  }

  return ret;
},

keyUp: function(evt) {
  this.set('isActive', NO);
  return YES;
},

_runAction: function() {
  this.fireAction();
  this.set('isActive', NO);
}

});