rasputin 0.10.7 → 0.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +22 -21
- data/lib/rasputin/handlebars/compiler.rb +1 -1
- data/lib/rasputin/handlebars/handlebars.js +20 -20
- data/lib/rasputin/handlebars/template.rb +2 -2
- data/lib/rasputin/version.rb +1 -1
- data/rasputin.gemspec +2 -2
- data/vendor/assets/javascripts/{sproutcore-datastore.js → ember-datastore.js} +925 -925
- data/vendor/assets/javascripts/{sproutcore-datetime.js → ember-datetime.js} +99 -99
- data/vendor/assets/javascripts/ember-i18n.js +21 -0
- data/vendor/assets/javascripts/{sproutcore-routing.js → ember-routing.js} +26 -26
- data/vendor/assets/javascripts/{sproutcore-touch.js → ember-touch.js} +91 -93
- data/vendor/assets/javascripts/{sproutcore.js → ember.js} +1369 -1355
- metadata +18 -20
- data/vendor/assets/javascripts/sproutcore-i18n.js +0 -21
- data/vendor/assets/javascripts/sproutcore-statechart.js +0 -3265
- data/vendor/assets/javascripts/sproutcore-utils.js +0 -73
| @@ -0,0 +1,21 @@ | |
| 1 | 
            +
            (function() {
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            Ember.I18n = I18n;
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            Ember.String.loc = function(scope, options) {
         | 
| 6 | 
            +
              return Ember.I18n.translate(scope, options);
         | 
| 7 | 
            +
            };
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            Ember.STRINGS = Ember.I18n.translations;
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            Ember.Handlebars.registerHelper('loc', function(property) {
         | 
| 12 | 
            +
              return Ember.String.loc(property);
         | 
| 13 | 
            +
            });
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            if (Ember.EXTEND_PROTOTYPES) {
         | 
| 16 | 
            +
              String.prototype.loc = function(options) {
         | 
| 17 | 
            +
                return Ember.String.loc(String(this), options);
         | 
| 18 | 
            +
              };
         | 
| 19 | 
            +
            }
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            })();
         | 
| @@ -1,5 +1,5 @@ | |
| 1 1 | 
             
            // ==========================================================================
         | 
| 2 | 
            -
            // Project:    | 
| 2 | 
            +
            // Project:   Ember - JavaScript Application Framework
         | 
| 3 3 | 
             
            // Copyright: ©2006-2011 Strobe Inc. and contributors.
         | 
| 4 4 | 
             
            //            Portions ©2008-2011 Apple Inc. All rights reserved.
         | 
| 5 5 | 
             
            // License:   Licensed under MIT license (see license.js)
         | 
| @@ -7,7 +7,7 @@ | |
| 7 7 |  | 
| 8 8 | 
             
            (function() {
         | 
| 9 9 |  | 
| 10 | 
            -
            var get =  | 
| 10 | 
            +
            var get = Ember.get, set = Ember.set;
         | 
| 11 11 |  | 
| 12 12 | 
             
            /**
         | 
| 13 13 | 
             
              Wether the browser supports HTML5 history.
         | 
| @@ -22,11 +22,11 @@ var supportsHashChange = ('onhashchange' in window) && (document.documentMode == | |
| 22 22 | 
             
            /**
         | 
| 23 23 | 
             
              @class
         | 
| 24 24 |  | 
| 25 | 
            -
              Route is a class used internally by  | 
| 25 | 
            +
              Route is a class used internally by Ember.routes. The routes defined by your
         | 
| 26 26 | 
             
              application are stored in a tree structure, and this is the class for the
         | 
| 27 27 | 
             
              nodes.
         | 
| 28 28 | 
             
            */
         | 
| 29 | 
            -
            var Route =  | 
| 29 | 
            +
            var Route = Ember.Object.extend(
         | 
| 30 30 | 
             
            /** @scope Route.prototype */ {
         | 
| 31 31 |  | 
| 32 32 | 
             
              target: null,
         | 
| @@ -43,7 +43,7 @@ var Route = SC.Object.extend( | |
| 43 43 | 
             
                var part, nextRoute;
         | 
| 44 44 |  | 
| 45 45 | 
             
                // clone the parts array because we are going to alter it
         | 
| 46 | 
            -
                parts =  | 
| 46 | 
            +
                parts = Ember.copy(parts);
         | 
| 47 47 |  | 
| 48 48 | 
             
                if (!parts || parts.length === 0) {
         | 
| 49 49 | 
             
                  this.target = target;
         | 
| @@ -86,7 +86,7 @@ var Route = SC.Object.extend( | |
| 86 86 | 
             
                var part, key, route;
         | 
| 87 87 |  | 
| 88 88 | 
             
                // clone the parts array because we are going to alter it
         | 
| 89 | 
            -
                parts =  | 
| 89 | 
            +
                parts = Ember.copy(parts);
         | 
| 90 90 |  | 
| 91 91 | 
             
                // if parts is empty, we are done
         | 
| 92 92 | 
             
                if (!parts || parts.length === 0) {
         | 
| @@ -128,37 +128,37 @@ var Route = SC.Object.extend( | |
| 128 128 | 
             
            /**
         | 
| 129 129 | 
             
              @class
         | 
| 130 130 |  | 
| 131 | 
            -
               | 
| 131 | 
            +
              Ember.routes manages the browser location. You can change the hash part of the
         | 
| 132 132 | 
             
              current location. The following code
         | 
| 133 133 |  | 
| 134 | 
            -
                   | 
| 134 | 
            +
                  Ember.routes.set('location', 'notes/edit/4');
         | 
| 135 135 |  | 
| 136 136 | 
             
              will change the location to http://domain.tld/my_app#notes/edit/4. Adding
         | 
| 137 137 | 
             
              routes will register a handler that will be called whenever the location
         | 
| 138 138 | 
             
              changes and matches the route:
         | 
| 139 139 |  | 
| 140 | 
            -
                   | 
| 140 | 
            +
                  Ember.routes.add(':controller/:action/:id', MyApp, MyApp.route);
         | 
| 141 141 |  | 
| 142 142 | 
             
              You can pass additional parameters in the location hash that will be relayed
         | 
| 143 143 | 
             
              to the route handler:
         | 
| 144 144 |  | 
| 145 | 
            -
                   | 
| 145 | 
            +
                  Ember.routes.set('location', 'notes/show/4?format=xml&language=fr');
         | 
| 146 146 |  | 
| 147 147 | 
             
              The syntax for the location hash is described in the location property
         | 
| 148 148 | 
             
              documentation, and the syntax for adding handlers is described in the
         | 
| 149 149 | 
             
              add method documentation.
         | 
| 150 150 |  | 
| 151 151 | 
             
              Browsers keep track of the locations in their history, so when the user
         | 
| 152 | 
            -
              presses the 'back' or 'forward' button, the location is changed,  | 
| 152 | 
            +
              presses the 'back' or 'forward' button, the location is changed, Ember.route
         | 
| 153 153 | 
             
              catches it and calls your handler. Except for Internet Explorer versions 7
         | 
| 154 154 | 
             
              and earlier, which do not modify the history stack when the location hash
         | 
| 155 155 | 
             
              changes.
         | 
| 156 156 |  | 
| 157 | 
            -
               | 
| 157 | 
            +
              Ember.routes also supports HTML5 history, which uses a '/' instead of a '#'
         | 
| 158 158 | 
             
              in the URLs, so that all your website's URLs are consistent.
         | 
| 159 159 | 
             
            */
         | 
| 160 | 
            -
            var routes =  | 
| 161 | 
            -
              /** @scope  | 
| 160 | 
            +
            var routes = Ember.routes = Ember.Object.create(
         | 
| 161 | 
            +
              /** @scope Ember.routes.prototype */{
         | 
| 162 162 |  | 
| 163 163 | 
             
              /**
         | 
| 164 164 | 
             
                Set this property to true if you want to use HTML5 history, if available on
         | 
| @@ -221,7 +221,7 @@ var routes = SC.routes = SC.Object.create( | |
| 221 221 |  | 
| 222 222 | 
             
              /** @private
         | 
| 223 223 | 
             
                A boolean value indicating whether or not the ping method has been called
         | 
| 224 | 
            -
                to setup the  | 
| 224 | 
            +
                to setup the Ember.routes.
         | 
| 225 225 |  | 
| 226 226 | 
             
                @property
         | 
| 227 227 | 
             
                @type {Boolean}
         | 
| @@ -303,7 +303,7 @@ var routes = SC.routes = SC.Object.create( | |
| 303 303 |  | 
| 304 304 | 
             
                The following code
         | 
| 305 305 |  | 
| 306 | 
            -
                     | 
| 306 | 
            +
                    Ember.routes.set('location', 'notes/edit/4');
         | 
| 307 307 |  | 
| 308 308 | 
             
                will change the location to http://domain.tld/my_app#notes/edit/4 and call
         | 
| 309 309 | 
             
                the correct route handler if it has been registered with the add method.
         | 
| @@ -311,8 +311,8 @@ var routes = SC.routes = SC.Object.create( | |
| 311 311 | 
             
                You can also pass additional parameters. They will be relayed to the route
         | 
| 312 312 | 
             
                handler. For example, the following code
         | 
| 313 313 |  | 
| 314 | 
            -
                     | 
| 315 | 
            -
                     | 
| 314 | 
            +
                    Ember.routes.add(':controller/:action/:id', MyApp, MyApp.route);
         | 
| 315 | 
            +
                    Ember.routes.set('location', 'notes/show/4?format=xml&language=fr');
         | 
| 316 316 |  | 
| 317 317 | 
             
                will change the location to
         | 
| 318 318 | 
             
                http://domain.tld/my_app#notes/show/4?format=xml&language=fr and call the
         | 
| @@ -328,7 +328,7 @@ var routes = SC.routes = SC.Object.create( | |
| 328 328 |  | 
| 329 329 | 
             
                The location can also be set with a hash, the following code
         | 
| 330 330 |  | 
| 331 | 
            -
                     | 
| 331 | 
            +
                    Ember.routes.set('location',
         | 
| 332 332 | 
             
                      { route: 'notes/edit/4', format: 'xml', language: 'fr' });
         | 
| 333 333 |  | 
| 334 334 | 
             
                will change the location to
         | 
| @@ -358,7 +358,7 @@ var routes = SC.routes = SC.Object.create( | |
| 358 358 | 
             
                    value = crumbs.route + crumbs.params;
         | 
| 359 359 | 
             
                  }
         | 
| 360 360 |  | 
| 361 | 
            -
                  if (! | 
| 361 | 
            +
                  if (!Ember.empty(value) || (this._location && this._location !== value)) {
         | 
| 362 362 | 
             
                    encodedValue = encodeURI(value);
         | 
| 363 363 |  | 
| 364 364 | 
             
                    if (this.usesHistory) {
         | 
| @@ -404,7 +404,7 @@ var routes = SC.routes = SC.Object.create( | |
| 404 404 | 
             
                      jQuery(window).bind('hashchange', hashChange);
         | 
| 405 405 |  | 
| 406 406 | 
             
                    } else {
         | 
| 407 | 
            -
                      // we don't use a  | 
| 407 | 
            +
                      // we don't use a Ember.Timer because we don't want
         | 
| 408 408 | 
             
                      // a run loop to be triggered at each ping
         | 
| 409 409 | 
             
                      that = this;
         | 
| 410 410 | 
             
                      this._invokeHashChange = function() {
         | 
| @@ -441,13 +441,13 @@ var routes = SC.routes = SC.Object.create( | |
| 441 441 | 
             
              */
         | 
| 442 442 | 
             
              add: function(route, target, method) {
         | 
| 443 443 | 
             
                if (!this._didSetup) {
         | 
| 444 | 
            -
                   | 
| 444 | 
            +
                  Ember.run.once(this, 'ping');
         | 
| 445 445 | 
             
                }
         | 
| 446 446 |  | 
| 447 | 
            -
                if (method === undefined &&  | 
| 447 | 
            +
                if (method === undefined && Ember.typeOf(target) === 'function') {
         | 
| 448 448 | 
             
                  method = target;
         | 
| 449 449 | 
             
                  target = null;
         | 
| 450 | 
            -
                } else if ( | 
| 450 | 
            +
                } else if (Ember.typeOf(method) === 'string') {
         | 
| 451 451 | 
             
                  method = target[method];
         | 
| 452 452 | 
             
                }
         | 
| 453 453 |  | 
| @@ -521,7 +521,7 @@ function hashChange(event) { | |
| 521 521 | 
             
              }
         | 
| 522 522 |  | 
| 523 523 | 
             
              if (get(routes, 'location') !== loc && !routes._skipRoute) {
         | 
| 524 | 
            -
                 | 
| 524 | 
            +
                Ember.run.once(function() {
         | 
| 525 525 | 
             
                  set(routes, 'location', loc);
         | 
| 526 526 | 
             
                });
         | 
| 527 527 | 
             
              }
         | 
| @@ -538,7 +538,7 @@ function popState(event) { | |
| 538 538 | 
             
                loc = loc.slice(base.length + 1, loc.length);
         | 
| 539 539 |  | 
| 540 540 | 
             
                if (get(routes, 'location') !== loc && !routes._skipRoute) {
         | 
| 541 | 
            -
                   | 
| 541 | 
            +
                  Ember.run.once(function() {
         | 
| 542 542 | 
             
                    set(routes, 'location', loc);
         | 
| 543 543 | 
             
                  });
         | 
| 544 544 | 
             
                }
         | 
| @@ -1,30 +1,28 @@ | |
| 1 | 
            -
            //=require TransformJS
         | 
| 2 | 
            -
             | 
| 3 1 | 
             
            (function(exports) {
         | 
| 4 2 | 
             
            // ==========================================================================
         | 
| 5 | 
            -
            // Project:   | 
| 3 | 
            +
            // Project:  Ember Runtime
         | 
| 6 4 | 
             
            // Copyright: ©2011 Strobe Inc. and contributors.
         | 
| 7 5 | 
             
            // License:   Licensed under MIT license (see license.js)
         | 
| 8 6 | 
             
            // ==========================================================================
         | 
| 9 7 |  | 
| 10 | 
            -
            var get =  | 
| 11 | 
            -
            var set =  | 
| 8 | 
            +
            var get = Ember.get;
         | 
| 9 | 
            +
            var set = Ember.set;
         | 
| 12 10 |  | 
| 13 11 | 
             
            /**
         | 
| 14 12 | 
             
              @class
         | 
| 15 13 |  | 
| 16 14 | 
             
              Registry of known gestures in the system. This is a singleton class, and is
         | 
| 17 | 
            -
              used by  | 
| 15 | 
            +
              used by Ember.View to analyze instances of Ember.View for gesture support.
         | 
| 18 16 |  | 
| 19 17 | 
             
              You will not use this class yourself. Rather, gesture recognizers will call
         | 
| 20 | 
            -
               | 
| 18 | 
            +
              Ember.Gestures.register(name, recognizer) when they want to make the system aware
         | 
| 21 19 | 
             
              of them.
         | 
| 22 20 |  | 
| 23 21 | 
             
              @private
         | 
| 24 | 
            -
              @extends  | 
| 22 | 
            +
              @extends Ember.Object
         | 
| 25 23 | 
             
            */
         | 
| 26 | 
            -
             | 
| 27 | 
            -
            /** @scope  | 
| 24 | 
            +
            Ember.Gestures = Ember.Object.create(
         | 
| 25 | 
            +
            /** @scope Ember.Gestures.prototype */{
         | 
| 28 26 |  | 
| 29 27 | 
             
              _registeredGestures: null,
         | 
| 30 28 |  | 
| @@ -38,11 +36,11 @@ SC.Gestures = SC.Object.create( | |
| 38 36 | 
             
                Registers a gesture recognizer to the system. The gesture recognizer is
         | 
| 39 37 | 
             
                identified by the name parameter, which must be globally unique.
         | 
| 40 38 | 
             
              */
         | 
| 41 | 
            -
              register: function(name,  | 
| 39 | 
            +
              register: function(name, recognizer) {
         | 
| 42 40 | 
             
                var registeredGestures = this._registeredGestures;
         | 
| 43 41 |  | 
| 44 42 | 
             
                if (registeredGestures[name] !== undefined) {
         | 
| 45 | 
            -
                  throw new  | 
| 43 | 
            +
                  throw new Ember.Error(name+" already exists as a registered gesture recognizers. Gesture recognizers must have globally unique names.");
         | 
| 46 44 | 
             
                }
         | 
| 47 45 |  | 
| 48 46 | 
             
                registeredGestures[name] = recognizer;
         | 
| @@ -79,28 +77,28 @@ SC.Gestures = SC.Object.create( | |
| 79 77 | 
             
            // License:   Licensed under MIT license (see license.js)
         | 
| 80 78 | 
             
            // ==========================================================================
         | 
| 81 79 |  | 
| 82 | 
            -
            var get =  | 
| 83 | 
            -
            var set =  | 
| 80 | 
            +
            var get = Ember.get;
         | 
| 81 | 
            +
            var set = Ember.set;
         | 
| 84 82 |  | 
| 85 83 | 
             
            /**
         | 
| 86 84 | 
             
              @class
         | 
| 87 85 |  | 
| 88 86 | 
             
              Manages multiplegesture recognizers that are associated with a view.
         | 
| 89 | 
            -
              This class is instantiated automatically by  | 
| 87 | 
            +
              This class is instantiated automatically by Ember.View and you wouldn't
         | 
| 90 88 | 
             
              interact with it yourself.
         | 
| 91 89 |  | 
| 92 | 
            -
               | 
| 90 | 
            +
              Ember.GestureManager mainly acts as a composite for the multiple gesture
         | 
| 93 91 | 
             
              recognizers associated with a view. Whenever it gets a touch event, it
         | 
| 94 92 | 
             
              relays it to the gestures. The other main resposibility of
         | 
| 95 | 
            -
               | 
| 93 | 
            +
              Ember.GestureManager is to handle re-dispatching of events to the view.
         | 
| 96 94 |  | 
| 97 | 
            -
              @extends  | 
| 95 | 
            +
              @extends Ember.Object
         | 
| 98 96 | 
             
            */
         | 
| 99 | 
            -
             | 
| 97 | 
            +
            Ember.GestureManager = Ember.Object.extend({
         | 
| 100 98 |  | 
| 101 99 | 
             
              /**
         | 
| 102 100 | 
             
                An array containing all the gesture recognizers associated with a
         | 
| 103 | 
            -
                view. This is set automatically by  | 
| 101 | 
            +
                view. This is set automatically by Ember.View.
         | 
| 104 102 |  | 
| 105 103 | 
             
                @default null
         | 
| 106 104 | 
             
                @type Array
         | 
| @@ -120,7 +118,7 @@ SC.GestureManager = SC.Object.extend({ | |
| 120 118 | 
             
              _redispatchToNearestParentViewWaitingForTouches: function(evt, view) {
         | 
| 121 119 | 
             
                var foundManager = null,
         | 
| 122 120 | 
             
                    successful = false;
         | 
| 123 | 
            -
                 | 
| 121 | 
            +
                view = get(view, 'parentView');
         | 
| 124 122 |  | 
| 125 123 | 
             
                while(view) {
         | 
| 126 124 | 
             
                  var manager = get(view, 'eventManager');
         | 
| @@ -129,7 +127,7 @@ SC.GestureManager = SC.Object.extend({ | |
| 129 127 | 
             
                    var gestures = get(manager, 'gestures');
         | 
| 130 128 |  | 
| 131 129 | 
             
                    for (var i=0, l=gestures.length; i<l; i++) {
         | 
| 132 | 
            -
                      if (get(gestures[i], 'state') ===  | 
| 130 | 
            +
                      if (get(gestures[i], 'state') === Ember.Gesture.WAITING_FOR_TOUCHES) {
         | 
| 133 131 | 
             
                        foundManager = manager;
         | 
| 134 132 | 
             
                      }
         | 
| 135 133 | 
             
                    }
         | 
| @@ -208,10 +206,10 @@ SC.GestureManager = SC.Object.extend({ | |
| 208 206 | 
             
                  gesture = gestures[i];
         | 
| 209 207 | 
             
                  handler = gesture[eventName];
         | 
| 210 208 |  | 
| 211 | 
            -
                  if ( | 
| 209 | 
            +
                  if (Ember.typeOf(handler) === 'function') {
         | 
| 212 210 | 
             
                    result = handler.call(gesture, eventObject, view, this);
         | 
| 213 211 | 
             
                  }
         | 
| 214 | 
            -
                } | 
| 212 | 
            +
                }
         | 
| 215 213 |  | 
| 216 214 | 
             
                this._flushReDispatchQueue();
         | 
| 217 215 |  | 
| @@ -283,8 +281,8 @@ SC.GestureManager = SC.Object.extend({ | |
| 283 281 | 
             
            // License:   Licensed under MIT license (see license.js)
         | 
| 284 282 | 
             
            // ==========================================================================
         | 
| 285 283 |  | 
| 286 | 
            -
            var get =  | 
| 287 | 
            -
            var set =  | 
| 284 | 
            +
            var get = Ember.get;
         | 
| 285 | 
            +
            var set = Ember.set;
         | 
| 288 286 |  | 
| 289 287 | 
             
            /**
         | 
| 290 288 | 
             
              @class
         | 
| @@ -293,7 +291,7 @@ var set = SC.set; | |
| 293 291 | 
             
              Used to manage and maintain a list of active touches related to a gesture 
         | 
| 294 292 | 
             
              recognizer.
         | 
| 295 293 | 
             
            */
         | 
| 296 | 
            -
             | 
| 294 | 
            +
            Ember.TouchList = Ember.Object.extend({
         | 
| 297 295 | 
             
              touches: null,
         | 
| 298 296 |  | 
| 299 297 | 
             
              timestamp: null,
         | 
| @@ -376,8 +374,8 @@ SC.TouchList = SC.Object.extend({ | |
| 376 374 |  | 
| 377 375 |  | 
| 378 376 |  | 
| 379 | 
            -
            var get =  | 
| 380 | 
            -
            var set =  | 
| 377 | 
            +
            var get = Ember.get;
         | 
| 378 | 
            +
            var set = Ember.set;
         | 
| 381 379 |  | 
| 382 380 | 
             
            var sigFigs = 100;
         | 
| 383 381 |  | 
| @@ -416,11 +414,11 @@ var sigFigs = 100; | |
| 416 414 |  | 
| 417 415 | 
             
              ## Usage
         | 
| 418 416 |  | 
| 419 | 
            -
              While you wouldn't use  | 
| 417 | 
            +
              While you wouldn't use Ember.Gesture directly, all its subclasses implement the 
         | 
| 420 418 | 
             
              same API. For example, to implement pinch on a view, you implement one or more 
         | 
| 421 419 | 
             
              of the pinch events. For example:
         | 
| 422 420 |  | 
| 423 | 
            -
                  var myView =  | 
| 421 | 
            +
                  var myView = Ember.View.create({
         | 
| 424 422 | 
             
                    pinchStart: function(recognizer) {
         | 
| 425 423 | 
             
                      this.$().css('background','red');
         | 
| 426 424 | 
             
                    },
         | 
| @@ -453,7 +451,7 @@ var sigFigs = 100; | |
| 453 451 | 
             
              two-finger gesture. In that case, you can override defaults by specifying an 
         | 
| 454 452 | 
             
              Options hash. 
         | 
| 455 453 |  | 
| 456 | 
            -
                  var myView =  | 
| 454 | 
            +
                  var myView = Ember.View.create({
         | 
| 457 455 | 
             
                    panOptions: {
         | 
| 458 456 | 
             
                      numberOfRequiredTouches: 2
         | 
| 459 457 | 
             
                    }
         | 
| @@ -461,7 +459,7 @@ var sigFigs = 100; | |
| 461 459 |  | 
| 462 460 | 
             
              ## Creating Custom Gesture Recognizers
         | 
| 463 461 |  | 
| 464 | 
            -
               | 
| 462 | 
            +
              Ember.Gesture also defines an API which its subclasses can implement to build
         | 
| 465 463 | 
             
              custom gestures. The methods are:
         | 
| 466 464 |  | 
| 467 465 | 
             
                * **didBecomePossible** - Called when a gesture enters a possible state. This
         | 
| @@ -504,16 +502,16 @@ var sigFigs = 100; | |
| 504 502 | 
             
              gestures. Discrete gestures do not get Start, Change nor Cancel events sent, 
         | 
| 505 503 | 
             
              since they represent a single, instantaneous event, rather than a continuous 
         | 
| 506 504 | 
             
              motion. If you are implementing your own discrete gesture recognizer, you must 
         | 
| 507 | 
            -
              set the isDiscreteGesture property to yes, and  | 
| 505 | 
            +
              set the isDiscreteGesture property to yes, and Ember.Gesture will adapt its behavior.
         | 
| 508 506 |  | 
| 509 507 | 
             
              Discrete gestures use the shouldEnd callback to either accept or decline the gesture
         | 
| 510 508 | 
             
              event. If it is declined, then the gesture will enter a Cancelled state.
         | 
| 511 509 |  | 
| 512 | 
            -
              @extends  | 
| 510 | 
            +
              @extends Ember.Object
         | 
| 513 511 | 
             
            */
         | 
| 514 512 |  | 
| 515 | 
            -
             | 
| 516 | 
            -
              /** @scope  | 
| 513 | 
            +
            Ember.Gesture = Ember.Object.extend(
         | 
| 514 | 
            +
              /** @scope Ember.Gesture.prototype */{
         | 
| 517 515 |  | 
| 518 516 | 
             
              /**
         | 
| 519 517 | 
             
                The current state of the gesture recognizer. This value can be any one
         | 
| @@ -525,7 +523,7 @@ SC.Gesture = SC.Object.extend( | |
| 525 523 |  | 
| 526 524 | 
             
              /**
         | 
| 527 525 | 
             
                A string of the gesture recognizer's name. This value is set automatically
         | 
| 528 | 
            -
                but  | 
| 526 | 
            +
                but Ember.Gestures when a gesture is registered.
         | 
| 529 527 |  | 
| 530 528 | 
             
                @type String
         | 
| 531 529 | 
             
              */
         | 
| @@ -571,7 +569,7 @@ SC.Gesture = SC.Object.extend( | |
| 571 569 |  | 
| 572 570 | 
             
              init: function() {
         | 
| 573 571 | 
             
                this._super();
         | 
| 574 | 
            -
                this.touches =  | 
| 572 | 
            +
                this.touches = Ember.TouchList.create();
         | 
| 575 573 | 
             
              },
         | 
| 576 574 |  | 
| 577 575 | 
             
              //..............................................
         | 
| @@ -611,7 +609,7 @@ SC.Gesture = SC.Object.extend( | |
| 611 609 | 
             
              /** @private */
         | 
| 612 610 | 
             
              attemptGestureEventDelivery: function(evt, view, eventName, stopPropagation) {
         | 
| 613 611 | 
             
                if (stopPropagation === undefined) {
         | 
| 614 | 
            -
                   | 
| 612 | 
            +
                  stopPropagation = true;
         | 
| 615 613 | 
             
                }
         | 
| 616 614 |  | 
| 617 615 | 
             
                if (this.notifyViewOfGestureEvent(view, eventName) === false) {
         | 
| @@ -689,7 +687,7 @@ SC.Gesture = SC.Object.extend( | |
| 689 687 | 
             
                var handler = view[eventName];
         | 
| 690 688 | 
             
                var result = true;
         | 
| 691 689 |  | 
| 692 | 
            -
                if ( | 
| 690 | 
            +
                if (Ember.typeOf(handler) === 'function') {
         | 
| 693 691 | 
             
                  result = handler.call(view, this, data);
         | 
| 694 692 | 
             
                }
         | 
| 695 693 |  | 
| @@ -697,7 +695,7 @@ SC.Gesture = SC.Object.extend( | |
| 697 695 | 
             
              },
         | 
| 698 696 |  | 
| 699 697 | 
             
              toString: function() {
         | 
| 700 | 
            -
                return  | 
| 698 | 
            +
                return Ember.Gesture+'<'+Ember.guidFor(this)+'>';
         | 
| 701 699 | 
             
              },
         | 
| 702 700 |  | 
| 703 701 | 
             
              /** @private */
         | 
| @@ -726,15 +724,15 @@ SC.Gesture = SC.Object.extend( | |
| 726 724 | 
             
                }
         | 
| 727 725 |  | 
| 728 726 | 
             
                if (_touches.get('length') < get(this, 'numberOfRequiredTouches')) {
         | 
| 729 | 
            -
                  set(this ,'state',  | 
| 727 | 
            +
                  set(this ,'state', Ember.Gesture.WAITING_FOR_TOUCHES);
         | 
| 730 728 |  | 
| 731 729 | 
             
                } else {
         | 
| 732 730 | 
             
                  // Discrete gestures may skip the possible step if they're ready to begin
         | 
| 733 731 | 
             
                  if (get(this, 'gestureIsDiscrete') && this.shouldBegin()) {
         | 
| 734 | 
            -
                    set(this, 'state',  | 
| 732 | 
            +
                    set(this, 'state', Ember.Gesture.BEGAN);
         | 
| 735 733 | 
             
                    this.didBegin();
         | 
| 736 734 | 
             
                  } else {
         | 
| 737 | 
            -
                    set(this, 'state',  | 
| 735 | 
            +
                    set(this, 'state', Ember.Gesture.POSSIBLE);
         | 
| 738 736 | 
             
                    this.didBecomePossible();
         | 
| 739 737 | 
             
                  }
         | 
| 740 738 | 
             
                }
         | 
| @@ -746,7 +744,7 @@ SC.Gesture = SC.Object.extend( | |
| 746 744 | 
             
              touchMove: function(evt, view, manager) {
         | 
| 747 745 | 
             
                var state = get(this, 'state');
         | 
| 748 746 |  | 
| 749 | 
            -
                if (state ===  | 
| 747 | 
            +
                if (state === Ember.Gesture.WAITING_FOR_TOUCHES || state === Ember.Gesture.ENDED || state === Ember.Gesture.CANCELLED) {
         | 
| 750 748 | 
             
                  // Nothing to do here
         | 
| 751 749 | 
             
                  manager.redispatchEventToView(view,'touchmove', evt);
         | 
| 752 750 | 
             
                  return;
         | 
| @@ -763,9 +761,9 @@ SC.Gesture = SC.Object.extend( | |
| 763 761 | 
             
                  _touches.updateTouch(touch);
         | 
| 764 762 | 
             
                }
         | 
| 765 763 |  | 
| 766 | 
            -
                if (state ===  | 
| 764 | 
            +
                if (state === Ember.Gesture.POSSIBLE) {
         | 
| 767 765 | 
             
                  if (this.shouldBegin()) {
         | 
| 768 | 
            -
                    set(this, 'state',  | 
| 766 | 
            +
                    set(this, 'state', Ember.Gesture.BEGAN);
         | 
| 769 767 | 
             
                    this.didBegin();
         | 
| 770 768 |  | 
| 771 769 | 
             
                    // Give the gesture a chance to update its state so the view can get 
         | 
| @@ -776,8 +774,8 @@ SC.Gesture = SC.Object.extend( | |
| 776 774 | 
             
                  }
         | 
| 777 775 |  | 
| 778 776 | 
             
                // Discrete gestures don't fire changed events
         | 
| 779 | 
            -
                } else if ((state ===  | 
| 780 | 
            -
                  set(this, 'state',  | 
| 777 | 
            +
                } else if ((state === Ember.Gesture.BEGAN || state === Ember.Gesture.CHANGED) && !get(this, 'gestureIsDiscrete')) {
         | 
| 778 | 
            +
                  set(this, 'state', Ember.Gesture.CHANGED);
         | 
| 781 779 | 
             
                  this.didChange();
         | 
| 782 780 |  | 
| 783 781 | 
             
                  this.attemptGestureEventDelivery(evt, view, get(this, 'name')+'Change');
         | 
| @@ -793,19 +791,19 @@ SC.Gesture = SC.Object.extend( | |
| 793 791 | 
             
                if (get(this, 'gestureIsDiscrete')) {
         | 
| 794 792 |  | 
| 795 793 | 
             
                  // Discrete gestures use shouldEnd to either accept or decline the gesture.
         | 
| 796 | 
            -
                  if (this.state ===  | 
| 797 | 
            -
                    set(this, 'state',  | 
| 794 | 
            +
                  if (this.state === Ember.Gesture.BEGAN && this.shouldEnd()) {
         | 
| 795 | 
            +
                    set(this, 'state', Ember.Gesture.ENDED);
         | 
| 798 796 | 
             
                    this.didEnd();
         | 
| 799 797 | 
             
                    this.attemptGestureEventDelivery(evt, view, get(this, 'name')+'End');
         | 
| 800 798 | 
             
                  } else {
         | 
| 801 | 
            -
                    set(this, 'state',  | 
| 799 | 
            +
                    set(this, 'state', Ember.Gesture.CANCELLED);
         | 
| 802 800 | 
             
                    this.didCancel();
         | 
| 803 801 | 
             
                    this.attemptGestureEventDelivery(evt, view, get(this, 'name')+'Cancel');
         | 
| 804 802 | 
             
                  } 
         | 
| 805 803 | 
             
                } 
         | 
| 806 804 | 
             
                else {
         | 
| 807 | 
            -
                  if ((this.state ===  | 
| 808 | 
            -
                    set(this, 'state',  | 
| 805 | 
            +
                  if ((this.state === Ember.Gesture.BEGAN || this.state === Ember.Gesture.CHANGED) && this.shouldEnd()) {
         | 
| 806 | 
            +
                    set(this, 'state', Ember.Gesture.ENDED);
         | 
| 809 807 | 
             
                    this.didEnd();
         | 
| 810 808 |  | 
| 811 809 | 
             
                    this.attemptGestureEventDelivery(evt, view, get(this, 'name')+'End');
         | 
| @@ -819,9 +817,9 @@ SC.Gesture = SC.Object.extend( | |
| 819 817 |  | 
| 820 818 | 
             
              /** @private */
         | 
| 821 819 | 
             
              touchCancel: function(evt, view, manager) {
         | 
| 822 | 
            -
                if (this.state !==  | 
| 820 | 
            +
                if (this.state !== Ember.Gesture.CANCELLED) {
         | 
| 823 821 | 
             
                  this._resetState();
         | 
| 824 | 
            -
                  set(this, 'state',  | 
| 822 | 
            +
                  set(this, 'state', Ember.Gesture.CANCELLED);
         | 
| 825 823 | 
             
                  this.notifyViewOfGestureEvent(view,get(this, 'name')+'Cancel');
         | 
| 826 824 | 
             
                } else {
         | 
| 827 825 | 
             
                  manager.redispatchEventToView(view,'touchcancel', evt);
         | 
| @@ -829,12 +827,12 @@ SC.Gesture = SC.Object.extend( | |
| 829 827 | 
             
              }
         | 
| 830 828 | 
             
            });
         | 
| 831 829 |  | 
| 832 | 
            -
             | 
| 833 | 
            -
             | 
| 834 | 
            -
             | 
| 835 | 
            -
             | 
| 836 | 
            -
             | 
| 837 | 
            -
             | 
| 830 | 
            +
            Ember.Gesture.WAITING_FOR_TOUCHES = 0;
         | 
| 831 | 
            +
            Ember.Gesture.POSSIBLE = 1;
         | 
| 832 | 
            +
            Ember.Gesture.BEGAN = 2;
         | 
| 833 | 
            +
            Ember.Gesture.CHANGED = 3;
         | 
| 834 | 
            +
            Ember.Gesture.ENDED = 4;
         | 
| 835 | 
            +
            Ember.Gesture.CANCELLED = 4;
         | 
| 838 836 |  | 
| 839 837 | 
             
            })({});
         | 
| 840 838 |  | 
| @@ -846,8 +844,8 @@ SC.Gesture.CANCELLED = 4; | |
| 846 844 | 
             
            // License:   Licensed under MIT license (see license.js)
         | 
| 847 845 | 
             
            // ==========================================================================
         | 
| 848 846 |  | 
| 849 | 
            -
            var get =  | 
| 850 | 
            -
            var set =  | 
| 847 | 
            +
            var get = Ember.get;
         | 
| 848 | 
            +
            var set = Ember.set;
         | 
| 851 849 |  | 
| 852 850 | 
             
            var sigFigs = 100;
         | 
| 853 851 |  | 
| @@ -860,7 +858,7 @@ var sigFigs = 100; | |
| 860 858 | 
             
              For pinchChange events, the pinch gesture recognizer includes a scale property
         | 
| 861 859 | 
             
              which can be applied as a CSS transform directly.
         | 
| 862 860 |  | 
| 863 | 
            -
                var myview =  | 
| 861 | 
            +
                var myview = Ember.View.create({
         | 
| 864 862 | 
             
                  elementId: 'gestureTest',
         | 
| 865 863 |  | 
| 866 864 | 
             
                  pinchChange: function(rec) {
         | 
| @@ -873,7 +871,7 @@ var sigFigs = 100; | |
| 873 871 | 
             
              You can specify how many touches the gesture requires to start using the numberOfRequiredTouches
         | 
| 874 872 | 
             
              property, which you can set in the pinchOptions hash:
         | 
| 875 873 |  | 
| 876 | 
            -
                var myview =  | 
| 874 | 
            +
                var myview = Ember.View.create({
         | 
| 877 875 | 
             
                  pinchOptions: {
         | 
| 878 876 | 
             
                    numberOfRequiredTouches: 3
         | 
| 879 877 | 
             
                  }
         | 
| @@ -881,9 +879,9 @@ var sigFigs = 100; | |
| 881 879 | 
             
                })
         | 
| 882 880 |  | 
| 883 881 |  | 
| 884 | 
            -
              @extends  | 
| 882 | 
            +
              @extends Ember.Gesture
         | 
| 885 883 | 
             
            */
         | 
| 886 | 
            -
             | 
| 884 | 
            +
            Ember.PinchGestureRecognizer = Ember.Gesture.extend({
         | 
| 887 885 |  | 
| 888 886 | 
             
              /**
         | 
| 889 887 | 
             
                The scale value which represents the current amount of scaling that has been applied
         | 
| @@ -973,7 +971,7 @@ SC.PinchGestureRecognizer = SC.Gesture.extend({ | |
| 973 971 | 
             
              }
         | 
| 974 972 | 
             
            });
         | 
| 975 973 |  | 
| 976 | 
            -
             | 
| 974 | 
            +
            Ember.Gestures.register('pinch', Ember.PinchGestureRecognizer);
         | 
| 977 975 |  | 
| 978 976 | 
             
            })({});
         | 
| 979 977 |  | 
| @@ -985,8 +983,8 @@ SC.Gestures.register('pinch', SC.PinchGestureRecognizer); | |
| 985 983 | 
             
            // License:   Licensed under MIT license (see license.js)
         | 
| 986 984 | 
             
            // ==========================================================================
         | 
| 987 985 |  | 
| 988 | 
            -
            var get =  | 
| 989 | 
            -
            var set =  | 
| 986 | 
            +
            var get = Ember.get;
         | 
| 987 | 
            +
            var set = Ember.set;
         | 
| 990 988 | 
             
            var x = 0;
         | 
| 991 989 |  | 
| 992 990 | 
             
            /**
         | 
| @@ -1000,7 +998,7 @@ var x = 0; | |
| 1000 998 | 
             
              which can be applied as a CSS transform directly. Translation values are hashes
         | 
| 1001 999 | 
             
              which contain an x and a y value.
         | 
| 1002 1000 |  | 
| 1003 | 
            -
                var myview =  | 
| 1001 | 
            +
                var myview = Ember.View.create({
         | 
| 1004 1002 | 
             
                  elementId: 'gestureTest',
         | 
| 1005 1003 |  | 
| 1006 1004 | 
             
                  panChange: function(rec) {
         | 
| @@ -1015,16 +1013,16 @@ var x = 0; | |
| 1015 1013 | 
             
              You can specify how many touches the gesture requires to start using the numberOfRequiredTouches
         | 
| 1016 1014 | 
             
              property, which you can set in the panOptions hash:
         | 
| 1017 1015 |  | 
| 1018 | 
            -
                var myview =  | 
| 1016 | 
            +
                var myview = Ember.View.create({
         | 
| 1019 1017 | 
             
                  panOptions: {
         | 
| 1020 1018 | 
             
                    numberOfRequiredTouches: 3
         | 
| 1021 1019 | 
             
                  }
         | 
| 1022 1020 | 
             
                  ...
         | 
| 1023 1021 | 
             
                })
         | 
| 1024 1022 |  | 
| 1025 | 
            -
              @extends  | 
| 1023 | 
            +
              @extends Ember.Gesture
         | 
| 1026 1024 | 
             
            */
         | 
| 1027 | 
            -
             | 
| 1025 | 
            +
            Ember.PanGestureRecognizer = Ember.Gesture.extend({
         | 
| 1028 1026 |  | 
| 1029 1027 | 
             
              /**
         | 
| 1030 1028 | 
             
                The translation value which represents the current amount of movement that has been applied
         | 
| @@ -1102,7 +1100,7 @@ SC.PanGestureRecognizer = SC.Gesture.extend({ | |
| 1102 1100 | 
             
              }
         | 
| 1103 1101 | 
             
            });
         | 
| 1104 1102 |  | 
| 1105 | 
            -
             | 
| 1103 | 
            +
            Ember.Gestures.register('pan', Ember.PanGestureRecognizer);
         | 
| 1106 1104 |  | 
| 1107 1105 | 
             
            })({});
         | 
| 1108 1106 |  | 
| @@ -1114,8 +1112,8 @@ SC.Gestures.register('pan', SC.PanGestureRecognizer); | |
| 1114 1112 | 
             
            // License:   Licensed under MIT license (see license.js)
         | 
| 1115 1113 | 
             
            // ==========================================================================
         | 
| 1116 1114 |  | 
| 1117 | 
            -
            var get =  | 
| 1118 | 
            -
            var set =  | 
| 1115 | 
            +
            var get = Ember.get;
         | 
| 1116 | 
            +
            var set = Ember.set;
         | 
| 1119 1117 |  | 
| 1120 1118 | 
             
            /**
         | 
| 1121 1119 | 
             
              @class
         | 
| @@ -1124,7 +1122,7 @@ var set = SC.set; | |
| 1124 1122 | 
             
              of wiggle-room between a start and end of a touch. Taps are discrete gestures
         | 
| 1125 1123 | 
             
              so only tapEnd() will get fired on a view.
         | 
| 1126 1124 |  | 
| 1127 | 
            -
                var myview =  | 
| 1125 | 
            +
                var myview = Ember.View.create({
         | 
| 1128 1126 | 
             
                  elementId: 'gestureTest',
         | 
| 1129 1127 |  | 
| 1130 1128 | 
             
                  tapEnd: function(recognizer) {
         | 
| @@ -1135,7 +1133,7 @@ var set = SC.set; | |
| 1135 1133 | 
             
              You can specify how many touches the gesture requires to start using the numberOfRequiredTouches
         | 
| 1136 1134 | 
             
              property, which you can set in the panOptions hash:
         | 
| 1137 1135 |  | 
| 1138 | 
            -
                var myview =  | 
| 1136 | 
            +
                var myview = Ember.View.create({
         | 
| 1139 1137 | 
             
                  tapOptions: {
         | 
| 1140 1138 | 
             
                    numberOfTaps: 3
         | 
| 1141 1139 | 
             
                  }
         | 
| @@ -1145,9 +1143,9 @@ var set = SC.set; | |
| 1145 1143 | 
             
              And you can also specify the number of taps required for the gesture to fire using the numberOfTaps
         | 
| 1146 1144 | 
             
              property.
         | 
| 1147 1145 |  | 
| 1148 | 
            -
              @extends  | 
| 1146 | 
            +
              @extends Ember.Gesture
         | 
| 1149 1147 | 
             
            */
         | 
| 1150 | 
            -
             | 
| 1148 | 
            +
            Ember.TapGestureRecognizer = Ember.Gesture.extend({
         | 
| 1151 1149 |  | 
| 1152 1150 | 
             
              /**
         | 
| 1153 1151 | 
             
                The translation value which represents the current amount of movement that has been applied
         | 
| @@ -1219,7 +1217,7 @@ SC.TapGestureRecognizer = SC.Gesture.extend({ | |
| 1219 1217 | 
             
              }
         | 
| 1220 1218 | 
             
            });
         | 
| 1221 1219 |  | 
| 1222 | 
            -
             | 
| 1220 | 
            +
            Ember.Gestures.register('tap', Ember.TapGestureRecognizer);
         | 
| 1223 1221 |  | 
| 1224 1222 | 
             
            })({});
         | 
| 1225 1223 |  | 
| @@ -1238,21 +1236,21 @@ SC.Gestures.register('tap', SC.TapGestureRecognizer); | |
| 1238 1236 | 
             
            // License:   Licensed under MIT license (see license.js)
         | 
| 1239 1237 | 
             
            // ==========================================================================
         | 
| 1240 1238 |  | 
| 1241 | 
            -
            var get =  | 
| 1242 | 
            -
            var set =  | 
| 1239 | 
            +
            var get = Ember.get;
         | 
| 1240 | 
            +
            var set = Ember.set;
         | 
| 1243 1241 |  | 
| 1244 1242 | 
             
            /** 
         | 
| 1245 1243 | 
             
              @class
         | 
| 1246 1244 |  | 
| 1247 | 
            -
              Extends  | 
| 1245 | 
            +
              Extends Ember.View by making the init method gesture-aware.
         | 
| 1248 1246 |  | 
| 1249 | 
            -
              @extends  | 
| 1247 | 
            +
              @extends Ember.Object
         | 
| 1250 1248 | 
             
            */
         | 
| 1251 | 
            -
             | 
| 1252 | 
            -
            /** @scope  | 
| 1249 | 
            +
            Ember.View.reopen(
         | 
| 1250 | 
            +
            /** @scope Ember.View.prototype */{
         | 
| 1253 1251 |  | 
| 1254 1252 | 
             
              /**
         | 
| 1255 | 
            -
                The  | 
| 1253 | 
            +
                The Ember.GestureManager instance which will manager the gestures of the view.    
         | 
| 1256 1254 | 
             
                This object is automatically created and set at init-time.
         | 
| 1257 1255 |  | 
| 1258 1256 | 
             
                @default null
         | 
| @@ -1267,7 +1265,7 @@ SC.View.reopen( | |
| 1267 1265 | 
             
              init: function() {
         | 
| 1268 1266 | 
             
                this._super();
         | 
| 1269 1267 |  | 
| 1270 | 
            -
                var knownGestures =  | 
| 1268 | 
            +
                var knownGestures = Ember.Gestures.knownGestures();
         | 
| 1271 1269 | 
             
                var eventManager = get(this, 'eventManager');
         | 
| 1272 1270 |  | 
| 1273 1271 | 
             
                if (knownGestures && !eventManager) {
         | 
| @@ -1290,7 +1288,7 @@ SC.View.reopen( | |
| 1290 1288 | 
             
                    }
         | 
| 1291 1289 | 
             
                  }
         | 
| 1292 1290 |  | 
| 1293 | 
            -
                  var manager =  | 
| 1291 | 
            +
                  var manager = Ember.GestureManager.create({
         | 
| 1294 1292 | 
             
                    gestures: gestures
         | 
| 1295 1293 | 
             
                  });
         | 
| 1296 1294 |  |