diff options
| author | Misko Hevery | 2010-01-11 17:32:33 -0800 | 
|---|---|---|
| committer | Misko Hevery | 2010-01-11 17:32:33 -0800 | 
| commit | 6d5471c9bea9671dec7900a7bc548aea8ddd5a3e (patch) | |
| tree | 23a0affaa4b977b0eb776f515bd27eda89431049 /src/Scope.js | |
| parent | 1a42a3fab99ca02af0476f5a87175c53104aa2e3 (diff) | |
| download | angular.js-6d5471c9bea9671dec7900a7bc548aea8ddd5a3e.tar.bz2 | |
all files converted to prototype= {}
Diffstat (limited to 'src/Scope.js')
| -rw-r--r-- | src/Scope.js | 295 | 
1 files changed, 147 insertions, 148 deletions
diff --git a/src/Scope.js b/src/Scope.js index f4b34c3c..dcc50007 100644 --- a/src/Scope.js +++ b/src/Scope.js @@ -1,6 +1,4 @@ -// Copyright (C) 2009 BRAT Tech LLC - -Scope = function(initialState, name) { +function Scope(initialState, name) {    this.widgets = [];    this.watchListeners = {};    this.name = name; @@ -15,31 +13,6 @@ Scope = function(initialState, name) {  };  Scope.expressionCache = {}; - -Scope.prototype.updateView = function() { -  var self = this; -  this.fireWatchers(); -  _.each(this.widgets, function(widget){ -    self.evalWidget(widget, "", {}, function(){ -      this.updateView(self); -    }); -  }); -}; - -Scope.prototype.addWidget = function(controller) { -  if (controller) this.widgets.push(controller); -}; - -Scope.prototype.isProperty = function(exp) { -  for ( var i = 0; i < exp.length; i++) { -    var ch = exp.charAt(i); -    if (ch!='.'  && !Lexer.prototype.isIdent(ch)) { -      return false; -    } -  } -  return true; -}; -  Scope.getter = function(instance, path) {    if (!path) return instance;    var element = path.split('.'); @@ -70,129 +43,155 @@ Scope.getter = function(instance, path) {    return instance;  }; -Scope.prototype.get = function(path) { -  return Scope.getter(this.state, path); -}; - -Scope.prototype.set = function(path, value) { -  var element = path.split('.'); -  var instance = this.state; -  for ( var i = 0; element.length > 1; i++) { -    var key = element.shift(); -    var newInstance = instance[key]; -    if (!newInstance) { -      newInstance = {}; -      instance[key] = newInstance; +Scope.prototype = { +  updateView: function() { +    var self = this; +    this.fireWatchers(); +    _.each(this.widgets, function(widget){ +      self.evalWidget(widget, "", {}, function(){ +        this.updateView(self); +      }); +    }); +  }, +   +  addWidget: function(controller) { +    if (controller) this.widgets.push(controller); +  }, +   +  isProperty: function(exp) { +    for ( var i = 0; i < exp.length; i++) { +      var ch = exp.charAt(i); +      if (ch!='.'  && !Lexer.prototype.isIdent(ch)) { +        return false; +      }      } -    instance = newInstance; -  } -  instance[element.shift()] = value; -  return value; -}; - -Scope.prototype.setEval = function(expressionText, value) { -  this.eval(expressionText + "=" + toJson(value)); -}; - -Scope.prototype.eval = function(expressionText, context) { -  var expression = Scope.expressionCache[expressionText]; -  if (!expression) { -    var parser = new Parser(expressionText); -    expression = parser.statements(); -    parser.assertAllConsumed(); -    Scope.expressionCache[expressionText] = expression; -  } -  context = context || {}; -  context.scope = this; -  return expression(context); -}; - -//TODO: Refactor. This function needs to be an execution closure for widgets -// move to widgets -// remove expression, just have inner closure. -Scope.prototype.evalWidget = function(widget, expression, context, onSuccess, onFailure) { -  try { -    var value = this.eval(expression, context); -    if (widget.hasError) { -      widget.hasError = false; -      jQuery(widget.view). -        removeClass('ng-exception'). -        removeAttr('ng-error'); +    return true; +  }, +     +  get: function(path) { +    return Scope.getter(this.state, path); +  }, +   +  set: function(path, value) { +    var element = path.split('.'); +    var instance = this.state; +    for ( var i = 0; element.length > 1; i++) { +      var key = element.shift(); +      var newInstance = instance[key]; +      if (!newInstance) { +        newInstance = {}; +        instance[key] = newInstance; +      } +      instance = newInstance;      } -    if (onSuccess) { -      value = onSuccess.apply(widget, [value]); +    instance[element.shift()] = value; +    return value; +  }, +   +  setEval: function(expressionText, value) { +    this.eval(expressionText + "=" + toJson(value)); +  }, +   +  eval: function(expressionText, context) { +    var expression = Scope.expressionCache[expressionText]; +    if (!expression) { +      var parser = new Parser(expressionText); +      expression = parser.statements(); +      parser.assertAllConsumed(); +      Scope.expressionCache[expressionText] = expression;      } -    return true; -  } catch (e){ -    error('Eval Widget Error:', e); -    var jsonError = toJson(e, true); -    widget.hasError = true; -    jQuery(widget.view). -      addClass('ng-exception'). -      attr('ng-error', jsonError); -    if (onFailure) { -      onFailure.apply(widget, [e, jsonError]); +    context = context || {}; +    context.scope = this; +    return expression(context); +  }, +   +  //TODO: Refactor. This function needs to be an execution closure for widgets +  // move to widgets +  // remove expression, just have inner closure. +  evalWidget: function(widget, expression, context, onSuccess, onFailure) { +    try { +      var value = this.eval(expression, context); +      if (widget.hasError) { +        widget.hasError = false; +        jQuery(widget.view). +          removeClass('ng-exception'). +          removeAttr('ng-error'); +      } +      if (onSuccess) { +        value = onSuccess.apply(widget, [value]); +      } +      return true; +    } catch (e){ +      error('Eval Widget Error:', e); +      var jsonError = toJson(e, true); +      widget.hasError = true; +      jQuery(widget.view). +        addClass('ng-exception'). +        attr('ng-error', jsonError); +      if (onFailure) { +        onFailure.apply(widget, [e, jsonError]); +      } +      return false;      } -    return false; -  } -}; - -Scope.prototype.validate = function(expressionText, value) { -  var expression = Scope.expressionCache[expressionText]; -  if (!expression) { -    expression = new Parser(expressionText).validator(); -    Scope.expressionCache[expressionText] = expression; -  } -  var self = {scope:this}; -  return expression(self)(self, value); -}; - -Scope.prototype.entity = function(entityDeclaration) { -  var expression = new Parser(entityDeclaration).entityDeclaration(); -  return expression({scope:this}); -}; - -Scope.prototype.markInvalid = function(widget) { -  this.state.$invalidWidgets.push(widget); -}; - -Scope.prototype.watch = function(declaration) { -  var self = this; -  new Parser(declaration).watch()({ -    scope:this, -    addListener:function(watch, exp){ -      self.addWatchListener(watch, function(n,o){ -        try { -          return exp({scope:self}, n, o); -        } catch(e) { -          alert(e); -        } -      }); +  }, +   +  validate: function(expressionText, value) { +    var expression = Scope.expressionCache[expressionText]; +    if (!expression) { +      expression = new Parser(expressionText).validator(); +      Scope.expressionCache[expressionText] = expression;      } -  }); -}; - -Scope.prototype.addWatchListener = function(watchExpression, listener) { -  var watcher = this.watchListeners[watchExpression]; -  if (!watcher) { -    watcher = {listeners:[], expression:watchExpression}; -    this.watchListeners[watchExpression] = watcher; -  } -  watcher.listeners.push(listener); -}; - -Scope.prototype.fireWatchers = function() { -  var self = this; -  var fired = false; -  foreach(this.watchListeners, function(watcher) { -    var value = self.eval(watcher.expression); -    if (value !== watcher.lastValue) { -      foreach(watcher.listeners, function(listener){ -        listener(value, watcher.lastValue); -        fired = true; -      }); -      watcher.lastValue = value; +    var self = {scope:this}; +    return expression(self)(self, value); +  }, +   +  entity: function(entityDeclaration) { +    var expression = new Parser(entityDeclaration).entityDeclaration(); +    return expression({scope:this}); +  }, +   +  markInvalid: function(widget) { +    this.state.$invalidWidgets.push(widget); +  }, +   +  watch: function(declaration) { +    var self = this; +    new Parser(declaration).watch()({ +      scope:this, +      addListener:function(watch, exp){ +        self.addWatchListener(watch, function(n,o){ +          try { +            return exp({scope:self}, n, o); +          } catch(e) { +            alert(e); +          } +        }); +      } +    }); +  }, +   +  addWatchListener: function(watchExpression, listener) { +    var watcher = this.watchListeners[watchExpression]; +    if (!watcher) { +      watcher = {listeners:[], expression:watchExpression}; +      this.watchListeners[watchExpression] = watcher;      } -  }); -  return fired; -}; +    watcher.listeners.push(listener); +  }, +   +  fireWatchers: function() { +    var self = this; +    var fired = false; +    foreach(this.watchListeners, function(watcher) { +      var value = self.eval(watcher.expression); +      if (value !== watcher.lastValue) { +        foreach(watcher.listeners, function(listener){ +          listener(value, watcher.lastValue); +          fired = true; +        }); +        watcher.lastValue = value; +      } +    }); +    return fired; +  } +};
\ No newline at end of file  | 
