agt 0.0.4 → 0.0.5
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.
- checksums.yaml +4 -4
 - data/CHANGELOG.md +10 -2
 - data/app/assets/javascripts/agt/dom.coffee +7 -2
 - data/app/assets/javascripts/agt/function.coffee +136 -114
 - data/app/assets/javascripts/agt/{models/mixins/model.coffee → mixins/collectionable.coffee} +35 -17
 - data/app/assets/javascripts/agt/object.coffee +8 -0
 - data/app/assets/javascripts/agt/widgets/widgets.coffee +5 -1
 - data/lib/agt/version.rb +1 -1
 - metadata +3 -3
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 6d8dccd0f25aabdb783a8f30d525ba1fe9541266
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 18e725c31cb93f2844ae52f68cef53286c8830ae
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: b25e48db126cd1c7de237e001ffeb8579b9cf1e40f5a53e2ef07884a9bf7ed700424535b8c14c11fc0d16d5acb52c814277708b6029a8f63d79f4002c0c01141
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: f592ca2a69860e754c22acd9e065579c63534fbbcd9e7c22b87e687a4a8e3a4fd7d0eea57168297e28e43aa72ebf019538ad509e4be6db5e0e5448880a6d8c03
         
     | 
    
        data/CHANGELOG.md
    CHANGED
    
    | 
         @@ -1,5 +1,13 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
             
     | 
| 
       2 
     | 
    
         
            -
            #  
     | 
| 
      
 1 
     | 
    
         
            +
            a name="v0.0.5"></a>
         
     | 
| 
      
 2 
     | 
    
         
            +
            # v0.0.5 (2015-01-23)
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            ## :bug: Bug Fixes
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            - Fix event related issues on IE8 ([10b771df](https://github.com/abe33/agt.git/commit/10b771dfb9a5809b2df9309d7f9b89762815ee65))
         
     | 
| 
      
 7 
     | 
    
         
            +
            - Add a fallback for mixins used in IE8 ([faec4cdb](https://github.com/abe33/agt.git/commit/faec4cdb25e393c2e65e289ef4046cd117f46e96))
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            <a name="v0.0.4"></a>
         
     | 
| 
      
 10 
     | 
    
         
            +
            # v0.0.4 (2014-09-09)
         
     | 
| 
       3 
11 
     | 
    
         | 
| 
       4 
12 
     | 
    
         
             
            ## :sparkles: Features
         
     | 
| 
       5 
13 
     | 
    
         | 
| 
         @@ -5,8 +5,13 @@ agt.domEvent = (type, data={}, options={bubbles, cancelable}={}) -> 
     | 
|
| 
       5 
5 
     | 
    
         
             
                  cancelable: cancelable ? true
         
     | 
| 
       6 
6 
     | 
    
         
             
                }
         
     | 
| 
       7 
7 
     | 
    
         
             
              catch e
         
     | 
| 
       8 
     | 
    
         
            -
                 
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
      
 8 
     | 
    
         
            +
                if document.createEvent?
         
     | 
| 
      
 9 
     | 
    
         
            +
                  event = document.createEvent 'Event'
         
     | 
| 
      
 10 
     | 
    
         
            +
                  event.initEvent type, bubbles ? true, cancelable ? true
         
     | 
| 
      
 11 
     | 
    
         
            +
                else if document.createEventObject?
         
     | 
| 
      
 12 
     | 
    
         
            +
                  event = document.createEventObject()
         
     | 
| 
      
 13 
     | 
    
         
            +
                  event.type = type
         
     | 
| 
      
 14 
     | 
    
         
            +
                  event[k] = v for k,v of options
         
     | 
| 
       10 
15 
     | 
    
         | 
| 
       11 
16 
     | 
    
         
             
              event.data = data
         
     | 
| 
       12 
17 
     | 
    
         
             
              event
         
     | 
| 
         @@ -1,3 +1,6 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
             
     | 
| 
      
 2 
     | 
    
         
            +
            warn = (msg) -> console?.warn?(msg)
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
       1 
4 
     | 
    
         
             
            ### Public ###
         
     | 
| 
       2 
5 
     | 
    
         | 
| 
       3 
6 
     | 
    
         
             
            # Creates a new non-enumerable method on the current class prototype.
         
     | 
| 
         @@ -10,11 +13,15 @@ 
     | 
|
| 
       10 
13 
     | 
    
         
             
            # name - The {String} for the method name.
         
     | 
| 
       11 
14 
     | 
    
         
             
            # block - The {Function} body.
         
     | 
| 
       12 
15 
     | 
    
         
             
            Function::def = (name, block) ->
         
     | 
| 
       13 
     | 
    
         
            -
              Object. 
     | 
| 
       14 
     | 
    
         
            -
                 
     | 
| 
       15 
     | 
    
         
            -
                 
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
      
 16 
     | 
    
         
            +
              if Object.NO_DEFINE_PROPERTY
         
     | 
| 
      
 17 
     | 
    
         
            +
                warn "Using Function::def in a context where Object.defineProperty is not supported, falling back to prototype decoration."
         
     | 
| 
      
 18 
     | 
    
         
            +
                @prototype[name] = block
         
     | 
| 
      
 19 
     | 
    
         
            +
              else
         
     | 
| 
      
 20 
     | 
    
         
            +
                Object.defineProperty @prototype, name, {
         
     | 
| 
      
 21 
     | 
    
         
            +
                  value: block
         
     | 
| 
      
 22 
     | 
    
         
            +
                  configurable: true
         
     | 
| 
      
 23 
     | 
    
         
            +
                  enumerable: false
         
     | 
| 
      
 24 
     | 
    
         
            +
                }
         
     | 
| 
       18 
25 
     | 
    
         
             
              this
         
     | 
| 
       19 
26 
     | 
    
         | 
| 
       20 
27 
     | 
    
         
             
            # Creates a virtual property on the current class's prototype.
         
     | 
| 
         @@ -42,13 +49,15 @@ Function::accessor = (name, options) -> 
     | 
|
| 
       42 
49 
     | 
    
         | 
| 
       43 
50 
     | 
    
         
             
              options.get ||= oldDescriptor.get if oldDescriptor?
         
     | 
| 
       44 
51 
     | 
    
         
             
              options.set ||= oldDescriptor.set if oldDescriptor?
         
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
     | 
    
         
            -
             
     | 
| 
       47 
     | 
    
         
            -
             
     | 
| 
       48 
     | 
    
         
            -
                 
     | 
| 
       49 
     | 
    
         
            -
             
     | 
| 
       50 
     | 
    
         
            -
             
     | 
| 
       51 
     | 
    
         
            -
             
     | 
| 
      
 52 
     | 
    
         
            +
              if Object.NO_DEFINE_PROPERTY
         
     | 
| 
      
 53 
     | 
    
         
            +
                throw new Error "Using Function::accessor in a context where Object.defineProperty is not supported."
         
     | 
| 
      
 54 
     | 
    
         
            +
              else
         
     | 
| 
      
 55 
     | 
    
         
            +
                Object.defineProperty @prototype, name, {
         
     | 
| 
      
 56 
     | 
    
         
            +
                  get: options.get
         
     | 
| 
      
 57 
     | 
    
         
            +
                  set: options.set
         
     | 
| 
      
 58 
     | 
    
         
            +
                  configurable: true
         
     | 
| 
      
 59 
     | 
    
         
            +
                  enumerable: true
         
     | 
| 
      
 60 
     | 
    
         
            +
                }
         
     | 
| 
       52 
61 
     | 
    
         
             
              this
         
     | 
| 
       53 
62 
     | 
    
         | 
| 
       54 
63 
     | 
    
         
             
            # Creates a getter on the given class prototype.
         
     | 
| 
         @@ -150,72 +159,80 @@ Function::include = (mixins...) -> 
     | 
|
| 
       150 
159 
     | 
    
         
             
                # We loop through all the enumerable properties of the mixin's
         
     | 
| 
       151 
160 
     | 
    
         
             
                # prototype that is not marked for exclusion.
         
     | 
| 
       152 
161 
     | 
    
         
             
                keys = Object.keys mixin.prototype
         
     | 
| 
       153 
     | 
    
         
            -
                for k in keys
         
     | 
| 
       154 
     | 
    
         
            -
                  if k not in excl
         
     | 
| 
       155 
     | 
    
         
            -
             
     | 
| 
       156 
     | 
    
         
            -
                    # We prefer working with property descriptors rather than with
         
     | 
| 
       157 
     | 
    
         
            -
                    # the plain values.
         
     | 
| 
       158 
     | 
    
         
            -
                    oldDescriptor = Object.getPropertyDescriptor @prototype, k
         
     | 
| 
       159 
     | 
    
         
            -
                    newDescriptor = Object.getPropertyDescriptor mixin.prototype, k
         
     | 
| 
       160 
     | 
    
         
            -
             
     | 
| 
       161 
     | 
    
         
            -
                    # If the two descriptors are available we'll have to go deeper.
         
     | 
| 
       162 
     | 
    
         
            -
                    if oldDescriptor? and newDescriptor?
         
     | 
| 
       163 
     | 
    
         
            -
                      oldHasAccessor = oldDescriptor.get? or oldDescriptor.set?
         
     | 
| 
       164 
     | 
    
         
            -
                      newHasAccessor = newDescriptor.get? or newDescriptor.set?
         
     | 
| 
       165 
     | 
    
         
            -
                      bothHaveGet = oldDescriptor.get? and newDescriptor.get?
         
     | 
| 
       166 
     | 
    
         
            -
                      bothHaveSet = oldDescriptor.set? and newDescriptor.set?
         
     | 
| 
       167 
     | 
    
         
            -
                      bothHaveValue = oldDescriptor.value? and newDescriptor.value?
         
     | 
| 
       168 
     | 
    
         
            -
             
     | 
| 
       169 
     | 
    
         
            -
                      # When both properties are accessors we'll be able to follow
         
     | 
| 
       170 
     | 
    
         
            -
                      # the super accross them.
         
     | 
| 
       171 
     | 
    
         
            -
                      #
         
     | 
| 
       172 
     | 
    
         
            -
                      # Super methods are registered if both are there for getters
         
     | 
| 
       173 
     | 
    
         
            -
                      # and setters.
         
     | 
| 
       174 
     | 
    
         
            -
                      if oldHasAccessor and newHasAccessor
         
     | 
| 
       175 
     | 
    
         
            -
                        registerSuper k, newDescriptor.get, @, oldDescriptor.get, mixin if bothHaveGet
         
     | 
| 
       176 
     | 
    
         
            -
                        registerSuper k, newDescriptor.set, @, oldDescriptor.set, mixin if bothHaveSet
         
     | 
| 
       177 
     | 
    
         
            -
             
     | 
| 
       178 
     | 
    
         
            -
                        # If there was a getter or a setter and the new accessor
         
     | 
| 
       179 
     | 
    
         
            -
                        # doesn't define one them, the previous value is used.
         
     | 
| 
       180 
     | 
    
         
            -
                        newDescriptor.get ||= oldDescriptor.get
         
     | 
| 
       181 
     | 
    
         
            -
                        newDescriptor.set ||= oldDescriptor.set
         
     | 
| 
       182 
     | 
    
         
            -
             
     | 
| 
       183 
     | 
    
         
            -
                      # When both have a value, the super is also available.
         
     | 
| 
       184 
     | 
    
         
            -
                      else if bothHaveValue
         
     | 
| 
       185 
     | 
    
         
            -
                        registerSuper k, newDescriptor.value, @, oldDescriptor.value, mixin
         
     | 
| 
       186 
162 
     | 
    
         | 
| 
       187 
     | 
    
         
            -
             
     | 
| 
       188 
     | 
    
         
            -
             
     | 
| 
       189 
     | 
    
         
            -
             
     | 
| 
       190 
     | 
    
         
            -
             
     | 
| 
       191 
     | 
    
         
            -
                       
     | 
| 
       192 
     | 
    
         
            -
                      # and overriding the property to have access to its super property
         
     | 
| 
       193 
     | 
    
         
            -
                      # through the `super` keyword or with `this.super` method.
         
     | 
| 
       194 
     | 
    
         
            -
                      Object.defineProperty @__super__, k, newDescriptor
         
     | 
| 
       195 
     | 
    
         
            -
             
     | 
| 
       196 
     | 
    
         
            -
                    # We only have a descriptor for the new property, the previous
         
     | 
| 
       197 
     | 
    
         
            -
                    # one is just added to the class `__super__` property.
         
     | 
| 
       198 
     | 
    
         
            -
                    else if newDescriptor?
         
     | 
| 
       199 
     | 
    
         
            -
                      @__super__[k] = mixin[k]
         
     | 
| 
       200 
     | 
    
         
            -
             
     | 
| 
       201 
     | 
    
         
            -
                    # We only have a descriptor for the previous property, we'll
         
     | 
| 
       202 
     | 
    
         
            -
                    # create it on the class `__super__` property.
         
     | 
| 
       203 
     | 
    
         
            -
                    else if oldDescriptor?
         
     | 
| 
       204 
     | 
    
         
            -
                      Object.defineProperty @__super__, k, newDescriptor
         
     | 
| 
       205 
     | 
    
         
            -
             
     | 
| 
       206 
     | 
    
         
            -
                    # No descriptors at all. The super property is attached directly
         
     | 
| 
       207 
     | 
    
         
            -
                    # to the value.
         
     | 
| 
       208 
     | 
    
         
            -
                    else if @::[k]?
         
     | 
| 
       209 
     | 
    
         
            -
                      registerSuper k, mixin[k], @, @::[k], mixin
         
     | 
| 
       210 
     | 
    
         
            -
                      @__super__[k] = mixin[k]
         
     | 
| 
       211 
     | 
    
         
            -
             
     | 
| 
       212 
     | 
    
         
            -
                    # With a descriptor the new property is created using
         
     | 
| 
       213 
     | 
    
         
            -
                    # `Object.defineProperty` or by affecting the value
         
     | 
| 
       214 
     | 
    
         
            -
                    # to the prototype.
         
     | 
| 
       215 
     | 
    
         
            -
                    if newDescriptor?
         
     | 
| 
       216 
     | 
    
         
            -
                      Object.defineProperty @prototype, k, newDescriptor
         
     | 
| 
       217 
     | 
    
         
            -
                    else
         
     | 
| 
      
 163 
     | 
    
         
            +
                if Object.NO_DEFINE_PROPERTY
         
     | 
| 
      
 164 
     | 
    
         
            +
                  warn "Using Function::include in a context where Object.defineProperty is not supported. Falling back to direct prototype decoration."
         
     | 
| 
      
 165 
     | 
    
         
            +
                  for k in keys
         
     | 
| 
      
 166 
     | 
    
         
            +
                    if k not in excl
         
     | 
| 
      
 167 
     | 
    
         
            +
                      @__super__[k] = mixin::[k]
         
     | 
| 
       218 
168 
     | 
    
         
             
                      @::[k] = mixin::[k]
         
     | 
| 
      
 169 
     | 
    
         
            +
                else
         
     | 
| 
      
 170 
     | 
    
         
            +
                  for k in keys
         
     | 
| 
      
 171 
     | 
    
         
            +
                    if k not in excl
         
     | 
| 
      
 172 
     | 
    
         
            +
             
     | 
| 
      
 173 
     | 
    
         
            +
                      # We prefer working with property descriptors rather than with
         
     | 
| 
      
 174 
     | 
    
         
            +
                      # the plain values.
         
     | 
| 
      
 175 
     | 
    
         
            +
                      oldDescriptor = Object.getPropertyDescriptor @prototype, k
         
     | 
| 
      
 176 
     | 
    
         
            +
                      newDescriptor = Object.getPropertyDescriptor mixin.prototype, k
         
     | 
| 
      
 177 
     | 
    
         
            +
             
     | 
| 
      
 178 
     | 
    
         
            +
                      # If the two descriptors are available we'll have to go deeper.
         
     | 
| 
      
 179 
     | 
    
         
            +
                      if oldDescriptor? and newDescriptor?
         
     | 
| 
      
 180 
     | 
    
         
            +
                        oldHasAccessor = oldDescriptor.get? or oldDescriptor.set?
         
     | 
| 
      
 181 
     | 
    
         
            +
                        newHasAccessor = newDescriptor.get? or newDescriptor.set?
         
     | 
| 
      
 182 
     | 
    
         
            +
                        bothHaveGet = oldDescriptor.get? and newDescriptor.get?
         
     | 
| 
      
 183 
     | 
    
         
            +
                        bothHaveSet = oldDescriptor.set? and newDescriptor.set?
         
     | 
| 
      
 184 
     | 
    
         
            +
                        bothHaveValue = oldDescriptor.value? and newDescriptor.value?
         
     | 
| 
      
 185 
     | 
    
         
            +
             
     | 
| 
      
 186 
     | 
    
         
            +
                        # When both properties are accessors we'll be able to follow
         
     | 
| 
      
 187 
     | 
    
         
            +
                        # the super accross them.
         
     | 
| 
      
 188 
     | 
    
         
            +
                        #
         
     | 
| 
      
 189 
     | 
    
         
            +
                        # Super methods are registered if both are there for getters
         
     | 
| 
      
 190 
     | 
    
         
            +
                        # and setters.
         
     | 
| 
      
 191 
     | 
    
         
            +
                        if oldHasAccessor and newHasAccessor
         
     | 
| 
      
 192 
     | 
    
         
            +
                          registerSuper k, newDescriptor.get, @, oldDescriptor.get, mixin if bothHaveGet
         
     | 
| 
      
 193 
     | 
    
         
            +
                          registerSuper k, newDescriptor.set, @, oldDescriptor.set, mixin if bothHaveSet
         
     | 
| 
      
 194 
     | 
    
         
            +
             
     | 
| 
      
 195 
     | 
    
         
            +
                          # If there was a getter or a setter and the new accessor
         
     | 
| 
      
 196 
     | 
    
         
            +
                          # doesn't define one them, the previous value is used.
         
     | 
| 
      
 197 
     | 
    
         
            +
                          newDescriptor.get ||= oldDescriptor.get
         
     | 
| 
      
 198 
     | 
    
         
            +
                          newDescriptor.set ||= oldDescriptor.set
         
     | 
| 
      
 199 
     | 
    
         
            +
             
     | 
| 
      
 200 
     | 
    
         
            +
                        # When both have a value, the super is also available.
         
     | 
| 
      
 201 
     | 
    
         
            +
                        else if bothHaveValue
         
     | 
| 
      
 202 
     | 
    
         
            +
                          registerSuper k, newDescriptor.value, @, oldDescriptor.value, mixin
         
     | 
| 
      
 203 
     | 
    
         
            +
             
     | 
| 
      
 204 
     | 
    
         
            +
                        else
         
     | 
| 
      
 205 
     | 
    
         
            +
                          throw new Error "Can't mix accessors and plain values inheritance"
         
     | 
| 
      
 206 
     | 
    
         
            +
             
     | 
| 
      
 207 
     | 
    
         
            +
                        # We also have to create the property on the class `__super__`
         
     | 
| 
      
 208 
     | 
    
         
            +
                        # property. It'll allow the method defined on the class itself
         
     | 
| 
      
 209 
     | 
    
         
            +
                        # and overriding the property to have access to its super property
         
     | 
| 
      
 210 
     | 
    
         
            +
                        # through the `super` keyword or with `this.super` method.
         
     | 
| 
      
 211 
     | 
    
         
            +
                        Object.defineProperty @__super__, k, newDescriptor
         
     | 
| 
      
 212 
     | 
    
         
            +
             
     | 
| 
      
 213 
     | 
    
         
            +
                      # We only have a descriptor for the new property, the previous
         
     | 
| 
      
 214 
     | 
    
         
            +
                      # one is just added to the class `__super__` property.
         
     | 
| 
      
 215 
     | 
    
         
            +
                      else if newDescriptor?
         
     | 
| 
      
 216 
     | 
    
         
            +
                        Object.defineProperty @__super__, k, newDescriptor
         
     | 
| 
      
 217 
     | 
    
         
            +
             
     | 
| 
      
 218 
     | 
    
         
            +
                      # We only have a descriptor for the previous property, we'll
         
     | 
| 
      
 219 
     | 
    
         
            +
                      # create it on the class `__super__` property.
         
     | 
| 
      
 220 
     | 
    
         
            +
                      else if oldDescriptor?
         
     | 
| 
      
 221 
     | 
    
         
            +
                        @__super__[k] = mixins::[k]
         
     | 
| 
      
 222 
     | 
    
         
            +
             
     | 
| 
      
 223 
     | 
    
         
            +
                      # No descriptors at all. The super property is attached directly
         
     | 
| 
      
 224 
     | 
    
         
            +
                      # to the value.
         
     | 
| 
      
 225 
     | 
    
         
            +
                      else if @::[k]?
         
     | 
| 
      
 226 
     | 
    
         
            +
                        registerSuper k, mixin::[k], @, @::[k], mixin
         
     | 
| 
      
 227 
     | 
    
         
            +
                        @__super__[k] = mixin::[k]
         
     | 
| 
      
 228 
     | 
    
         
            +
             
     | 
| 
      
 229 
     | 
    
         
            +
                      # With a descriptor the new property is created using
         
     | 
| 
      
 230 
     | 
    
         
            +
                      # `Object.defineProperty` or by affecting the value
         
     | 
| 
      
 231 
     | 
    
         
            +
                      # to the prototype.
         
     | 
| 
      
 232 
     | 
    
         
            +
                      if newDescriptor?
         
     | 
| 
      
 233 
     | 
    
         
            +
                        Object.defineProperty @prototype, k, newDescriptor
         
     | 
| 
      
 234 
     | 
    
         
            +
                      else
         
     | 
| 
      
 235 
     | 
    
         
            +
                        @::[k] = mixin::[k]
         
     | 
| 
       219 
236 
     | 
    
         | 
| 
       220 
237 
     | 
    
         
             
                # The `included` hook is triggered on the mixin.
         
     | 
| 
       221 
238 
     | 
    
         
             
                mixin.included? this
         
     | 
| 
         @@ -250,46 +267,51 @@ Function::extend = (mixins...) -> 
     | 
|
| 
       250 
267 
     | 
    
         
             
                excl = excl.concat mixin.excluded if mixin.excluded?
         
     | 
| 
       251 
268 
     | 
    
         | 
| 
       252 
269 
     | 
    
         
             
                keys = Object.keys mixin
         
     | 
| 
       253 
     | 
    
         
            -
                for k in keys
         
     | 
| 
       254 
     | 
    
         
            -
                  if k not in excl
         
     | 
| 
       255 
     | 
    
         
            -
                    oldDescriptor = Object.getPropertyDescriptor this, k
         
     | 
| 
       256 
     | 
    
         
            -
                    newDescriptor = Object.getPropertyDescriptor mixin, k
         
     | 
| 
       257 
     | 
    
         
            -
             
     | 
| 
       258 
     | 
    
         
            -
                    if oldDescriptor? and newDescriptor?
         
     | 
| 
       259 
     | 
    
         
            -
                      oldHasAccessor = oldDescriptor.get? or oldDescriptor.set?
         
     | 
| 
       260 
     | 
    
         
            -
                      newHasAccessor = newDescriptor.get? or newDescriptor.set?
         
     | 
| 
       261 
     | 
    
         
            -
                      bothHaveGet = oldDescriptor.get? and newDescriptor.get?
         
     | 
| 
       262 
     | 
    
         
            -
                      bothHaveSet = oldDescriptor.set? and newDescriptor.set?
         
     | 
| 
       263 
     | 
    
         
            -
                      bothHaveValue = oldDescriptor.value? and newDescriptor.value?
         
     | 
| 
       264 
     | 
    
         
            -
             
     | 
| 
       265 
     | 
    
         
            -
                      # When both properties are accessors we'll be able to follow
         
     | 
| 
       266 
     | 
    
         
            -
                      # the super accross them
         
     | 
| 
       267 
     | 
    
         
            -
                      #
         
     | 
| 
       268 
     | 
    
         
            -
                      # Super methods are registered if both are there for getters
         
     | 
| 
       269 
     | 
    
         
            -
                      # and setters.
         
     | 
| 
       270 
     | 
    
         
            -
                      if oldHasAccessor and newHasAccessor
         
     | 
| 
       271 
     | 
    
         
            -
                        registerSuper k, newDescriptor.get, @, oldDescriptor.get, mixin if bothHaveGet
         
     | 
| 
       272 
     | 
    
         
            -
                        registerSuper k, newDescriptor.set, @, oldDescriptor.set, mixin if bothHaveSet
         
     | 
| 
       273 
     | 
    
         
            -
             
     | 
| 
       274 
     | 
    
         
            -
                        # If there was a getter or a setter and the new accessor
         
     | 
| 
       275 
     | 
    
         
            -
                        # doesn't define one them, the previous value is used.
         
     | 
| 
       276 
     | 
    
         
            -
                        newDescriptor.get ||= oldDescriptor.get
         
     | 
| 
       277 
     | 
    
         
            -
                        newDescriptor.set ||= oldDescriptor.set
         
     | 
| 
       278 
     | 
    
         
            -
             
     | 
| 
       279 
     | 
    
         
            -
                      # When both have a value, the super is also available.
         
     | 
| 
       280 
     | 
    
         
            -
                      else if bothHaveValue
         
     | 
| 
       281 
     | 
    
         
            -
                        registerSuper k, newDescriptor.value, @, oldDescriptor.value, mixin
         
     | 
| 
       282 
270 
     | 
    
         | 
| 
      
 271 
     | 
    
         
            +
                if Object.NO_DEFINE_PROPERTY
         
     | 
| 
      
 272 
     | 
    
         
            +
                  warn "Using Function::include in a context where Object.defineProperty is not supported. Falling back to direct prototype decoration."
         
     | 
| 
      
 273 
     | 
    
         
            +
                  @[k] = mixin[k] for k in keys when k not in excl
         
     | 
| 
      
 274 
     | 
    
         
            +
                else
         
     | 
| 
      
 275 
     | 
    
         
            +
                  for k in keys
         
     | 
| 
      
 276 
     | 
    
         
            +
                    if k not in excl
         
     | 
| 
      
 277 
     | 
    
         
            +
                      oldDescriptor = Object.getPropertyDescriptor this, k
         
     | 
| 
      
 278 
     | 
    
         
            +
                      newDescriptor = Object.getPropertyDescriptor mixin, k
         
     | 
| 
      
 279 
     | 
    
         
            +
             
     | 
| 
      
 280 
     | 
    
         
            +
                      if oldDescriptor? and newDescriptor?
         
     | 
| 
      
 281 
     | 
    
         
            +
                        oldHasAccessor = oldDescriptor.get? or oldDescriptor.set?
         
     | 
| 
      
 282 
     | 
    
         
            +
                        newHasAccessor = newDescriptor.get? or newDescriptor.set?
         
     | 
| 
      
 283 
     | 
    
         
            +
                        bothHaveGet = oldDescriptor.get? and newDescriptor.get?
         
     | 
| 
      
 284 
     | 
    
         
            +
                        bothHaveSet = oldDescriptor.set? and newDescriptor.set?
         
     | 
| 
      
 285 
     | 
    
         
            +
                        bothHaveValue = oldDescriptor.value? and newDescriptor.value?
         
     | 
| 
      
 286 
     | 
    
         
            +
             
     | 
| 
      
 287 
     | 
    
         
            +
                        # When both properties are accessors we'll be able to follow
         
     | 
| 
      
 288 
     | 
    
         
            +
                        # the super accross them
         
     | 
| 
      
 289 
     | 
    
         
            +
                        #
         
     | 
| 
      
 290 
     | 
    
         
            +
                        # Super methods are registered if both are there for getters
         
     | 
| 
      
 291 
     | 
    
         
            +
                        # and setters.
         
     | 
| 
      
 292 
     | 
    
         
            +
                        if oldHasAccessor and newHasAccessor
         
     | 
| 
      
 293 
     | 
    
         
            +
                          registerSuper k, newDescriptor.get, @, oldDescriptor.get, mixin if bothHaveGet
         
     | 
| 
      
 294 
     | 
    
         
            +
                          registerSuper k, newDescriptor.set, @, oldDescriptor.set, mixin if bothHaveSet
         
     | 
| 
      
 295 
     | 
    
         
            +
             
     | 
| 
      
 296 
     | 
    
         
            +
                          # If there was a getter or a setter and the new accessor
         
     | 
| 
      
 297 
     | 
    
         
            +
                          # doesn't define one them, the previous value is used.
         
     | 
| 
      
 298 
     | 
    
         
            +
                          newDescriptor.get ||= oldDescriptor.get
         
     | 
| 
      
 299 
     | 
    
         
            +
                          newDescriptor.set ||= oldDescriptor.set
         
     | 
| 
      
 300 
     | 
    
         
            +
             
     | 
| 
      
 301 
     | 
    
         
            +
                        # When both have a value, the super is also available.
         
     | 
| 
      
 302 
     | 
    
         
            +
                        else if bothHaveValue
         
     | 
| 
      
 303 
     | 
    
         
            +
                          registerSuper k, newDescriptor.value, @, oldDescriptor.value, mixin
         
     | 
| 
      
 304 
     | 
    
         
            +
             
     | 
| 
      
 305 
     | 
    
         
            +
                        else
         
     | 
| 
      
 306 
     | 
    
         
            +
                          throw new Error "Can't mix accessors and plain values inheritance"
         
     | 
| 
      
 307 
     | 
    
         
            +
             
     | 
| 
      
 308 
     | 
    
         
            +
                      # With a descriptor the new property is created using
         
     | 
| 
      
 309 
     | 
    
         
            +
                      # `Object.defineProperty` or by affecting the value
         
     | 
| 
      
 310 
     | 
    
         
            +
                      # to the prototype.
         
     | 
| 
      
 311 
     | 
    
         
            +
                      if newDescriptor?
         
     | 
| 
      
 312 
     | 
    
         
            +
                        Object.defineProperty this, k, newDescriptor
         
     | 
| 
       283 
313 
     | 
    
         
             
                      else
         
     | 
| 
       284 
     | 
    
         
            -
                         
     | 
| 
       285 
     | 
    
         
            -
             
     | 
| 
       286 
     | 
    
         
            -
                    # With a descriptor the new property is created using
         
     | 
| 
       287 
     | 
    
         
            -
                    # `Object.defineProperty` or by affecting the value
         
     | 
| 
       288 
     | 
    
         
            -
                    # to the prototype.
         
     | 
| 
       289 
     | 
    
         
            -
                    if newDescriptor?
         
     | 
| 
       290 
     | 
    
         
            -
                      Object.defineProperty this, k, newDescriptor
         
     | 
| 
       291 
     | 
    
         
            -
                    else
         
     | 
| 
       292 
     | 
    
         
            -
                      @[k] = mixin[k]
         
     | 
| 
      
 314 
     | 
    
         
            +
                        @[k] = mixin[k]
         
     | 
| 
       293 
315 
     | 
    
         | 
| 
       294 
316 
     | 
    
         
             
                mixin.extended? this
         
     | 
| 
       295 
317 
     | 
    
         | 
| 
         @@ -1,11 +1,11 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            namespace('agt. 
     | 
| 
      
 1 
     | 
    
         
            +
            namespace('agt.mixins')
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
            # Creates a collection class for the given model. This class
         
     | 
| 
      
 3 
     | 
    
         
            +
            # Internal: Creates a collection class for the given model. This class
         
     | 
| 
       4 
4 
     | 
    
         
             
            # will be decorated with the scopes defined on the model class
         
     | 
| 
       5 
5 
     | 
    
         
             
            # so it have to be specific to the model class.
         
     | 
| 
       6 
6 
     | 
    
         
             
            buildCollectionClass = (model) ->
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
     | 
    
         
            -
              # The Collection class behaves mostly like an array except that
         
     | 
| 
      
 8 
     | 
    
         
            +
              # Public: The Collection class behaves mostly like an array except that
         
     | 
| 
       9 
9 
     | 
    
         
             
              # every methods that should return an array return a collection
         
     | 
| 
       10 
10 
     | 
    
         
             
              # instead.
         
     | 
| 
       11 
11 
     | 
    
         
             
              class Collection
         
     | 
| 
         @@ -28,9 +28,7 @@ buildCollectionClass = (model) -> 
     | 
|
| 
       28 
28 
     | 
    
         
             
                          # With this we can call `collection[index]` and access the content
         
     | 
| 
       29 
29 
     | 
    
         
             
                          # of the collection array.
         
     | 
| 
       30 
30 
     | 
    
         
             
                          index = parseInt(name)
         
     | 
| 
       31 
     | 
    
         
            -
                           
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
                          target.array[index]
         
     | 
| 
      
 31 
     | 
    
         
            +
                          target.get(index)
         
     | 
| 
       34 
32 
     | 
    
         
             
                        else
         
     | 
| 
       35 
33 
     | 
    
         
             
                          target[name]
         
     | 
| 
       36 
34 
     | 
    
         
             
                  }
         
     | 
| 
         @@ -53,17 +51,36 @@ buildCollectionClass = (model) -> 
     | 
|
| 
       53 
51 
     | 
    
         | 
| 
       54 
52 
     | 
    
         
             
                constructor: (@array=[]) ->
         
     | 
| 
       55 
53 
     | 
    
         | 
| 
       56 
     | 
    
         
            -
                 
     | 
| 
      
 54 
     | 
    
         
            +
                get: (index) ->
         
     | 
| 
      
 55 
     | 
    
         
            +
                  index = @length + index if index < 0
         
     | 
| 
      
 56 
     | 
    
         
            +
                  @array[index]
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
                first: -> @get(0)
         
     | 
| 
       57 
59 
     | 
    
         | 
| 
       58 
     | 
    
         
            -
                last: -> @ 
     | 
| 
      
 60 
     | 
    
         
            +
                last: -> @get(-1)
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
                where: (conditions={}) ->
         
     | 
| 
      
 63 
     | 
    
         
            +
                  @filter (model) => @matchConditions(model, conditions)
         
     | 
| 
       59 
64 
     | 
    
         | 
| 
       60 
65 
     | 
    
         
             
                map: (block) ->
         
     | 
| 
       61 
     | 
    
         
            -
                   
     | 
| 
       62 
     | 
    
         
            -
                    @ 
     | 
| 
      
 66 
     | 
    
         
            +
                  if typeof block is 'string'
         
     | 
| 
      
 67 
     | 
    
         
            +
                    @distinct(block)
         
     | 
| 
       63 
68 
     | 
    
         
             
                  else
         
     | 
| 
       64 
69 
     | 
    
         
             
                    @array.map(block)
         
     | 
| 
       65 
70 
     | 
    
         | 
| 
       66 
     | 
    
         
            -
             
     | 
| 
      
 71 
     | 
    
         
            +
                sum: (field) -> @reduce ((a,b) -> a + b[field]), 0
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
                group: (key) ->
         
     | 
| 
      
 74 
     | 
    
         
            +
                  results = {}
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
      
 76 
     | 
    
         
            +
                  for record in @array
         
     | 
| 
      
 77 
     | 
    
         
            +
                    slot = record[key]
         
     | 
| 
      
 78 
     | 
    
         
            +
                    slot = slot.id if typeof slot is 'object' and slot.id?
         
     | 
| 
      
 79 
     | 
    
         
            +
                    results[slot] ?= @constructor.create()
         
     | 
| 
      
 80 
     | 
    
         
            +
                    results[slot].push record
         
     | 
| 
      
 81 
     | 
    
         
            +
             
     | 
| 
      
 82 
     | 
    
         
            +
                  results
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
       67 
84 
     | 
    
         | 
| 
       68 
85 
     | 
    
         
             
                distinct: (field) ->
         
     | 
| 
       69 
86 
     | 
    
         
             
                  values = []
         
     | 
| 
         @@ -73,9 +90,6 @@ buildCollectionClass = (model) -> 
     | 
|
| 
       73 
90 
     | 
    
         | 
| 
       74 
91 
     | 
    
         
             
                  values
         
     | 
| 
       75 
92 
     | 
    
         | 
| 
       76 
     | 
    
         
            -
                where: (conditions={}) ->
         
     | 
| 
       77 
     | 
    
         
            -
                  @filter (model) => @matchConditions(model, conditions)
         
     | 
| 
       78 
     | 
    
         
            -
             
     | 
| 
       79 
93 
     | 
    
         
             
                matchConditions: (model, conditions) ->
         
     | 
| 
       80 
94 
     | 
    
         
             
                  res = true
         
     | 
| 
       81 
95 
     | 
    
         
             
                  for k,v of conditions
         
     | 
| 
         @@ -85,13 +99,14 @@ buildCollectionClass = (model) -> 
     | 
|
| 
       85 
99 
     | 
    
         
             
                      res &&= model[k] is v
         
     | 
| 
       86 
100 
     | 
    
         
             
                  res
         
     | 
| 
       87 
101 
     | 
    
         | 
| 
       88 
     | 
    
         
            -
             
     | 
| 
      
 102 
     | 
    
         
            +
            # Public:
         
     | 
| 
      
 103 
     | 
    
         
            +
            class agt.mixins.Collectionable
         
     | 
| 
       89 
104 
     | 
    
         
             
              @extend agt.mixins.Delegation
         
     | 
| 
       90 
105 
     | 
    
         | 
| 
       91 
106 
     | 
    
         
             
              @delegatesCollectionMethods: (methods...) ->
         
     | 
| 
       92 
107 
     | 
    
         
             
                methods.forEach (method) => @[method] = -> @instances[method](arguments...)
         
     | 
| 
       93 
108 
     | 
    
         | 
| 
       94 
     | 
    
         
            -
              @delegatesCollectionMethods 'first', 'last', 'where', 'distinct'
         
     | 
| 
      
 109 
     | 
    
         
            +
              @delegatesCollectionMethods 'first', 'last', 'where', 'distinct', 'sum', 'group'
         
     | 
| 
       95 
110 
     | 
    
         | 
| 
       96 
111 
     | 
    
         
             
              ### Public ###
         
     | 
| 
       97 
112 
     | 
    
         | 
| 
         @@ -101,7 +116,7 @@ class agt.models.Model 
     | 
|
| 
       101 
116 
     | 
    
         | 
| 
       102 
117 
     | 
    
         
             
                @Collection = buildCollectionClass(this)
         
     | 
| 
       103 
118 
     | 
    
         | 
| 
       104 
     | 
    
         
            -
                @instances = @Collection.create( 
     | 
| 
      
 119 
     | 
    
         
            +
                @instances = @Collection.create()
         
     | 
| 
       105 
120 
     | 
    
         
             
                @nextId = 1
         
     | 
| 
       106 
121 
     | 
    
         | 
| 
       107 
122 
     | 
    
         
             
                @initialized = true
         
     | 
| 
         @@ -120,6 +135,9 @@ class agt.models.Model 
     | 
|
| 
       120 
135 
     | 
    
         
             
              @unregister: (instance) ->
         
     | 
| 
       121 
136 
     | 
    
         
             
                @instances.splice(@instances.indexOf(instance), 1) if instance in @instances
         
     | 
| 
       122 
137 
     | 
    
         | 
| 
      
 138 
     | 
    
         
            +
              @unregisterAll: ->
         
     | 
| 
      
 139 
     | 
    
         
            +
                @instances = @Collection.create()
         
     | 
| 
      
 140 
     | 
    
         
            +
             
     | 
| 
       123 
141 
     | 
    
         
             
              ### Scopes ###
         
     | 
| 
       124 
142 
     | 
    
         | 
| 
       125 
143 
     | 
    
         
             
              @all: ->
         
     | 
| 
         @@ -7,3 +7,11 @@ unless Object.getPropertyDescriptor? 
     | 
|
| 
       7 
7 
     | 
    
         
             
                  descriptor
         
     | 
| 
       8 
8 
     | 
    
         
             
              else
         
     | 
| 
       9 
9 
     | 
    
         
             
                Object.getPropertyDescriptor = -> undefined
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            Object.NO_DEFINE_PROPERTY = not Object.defineProperty?
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            if Object.defineProperty?
         
     | 
| 
      
 14 
     | 
    
         
            +
              try
         
     | 
| 
      
 15 
     | 
    
         
            +
                Object.defineProperty(Array.prototype,'test', value: 'test')
         
     | 
| 
      
 16 
     | 
    
         
            +
              catch e
         
     | 
| 
      
 17 
     | 
    
         
            +
                Object.NO_DEFINE_PROPERTY = true
         
     | 
| 
         @@ -107,7 +107,11 @@ agt.widgets = (name, selector, options={}, block) -> 
     | 
|
| 
       107 
107 
     | 
    
         
             
                  else
         
     | 
| 
       108 
108 
     | 
    
         
             
                    widget.activate()
         
     | 
| 
       109 
109 
     | 
    
         | 
| 
       110 
     | 
    
         
            -
                   
     | 
| 
      
 110 
     | 
    
         
            +
                  event = agt.domEvent("#{name}:handled", {element, widget})
         
     | 
| 
      
 111 
     | 
    
         
            +
                  if document.dispatchEvent?
         
     | 
| 
      
 112 
     | 
    
         
            +
                    document.dispatchEvent(event)
         
     | 
| 
      
 113 
     | 
    
         
            +
                  else
         
     | 
| 
      
 114 
     | 
    
         
            +
                    console?.warn? 'HTMLElement::dispatchEvent is not available on this platform. Unable to dispatch custom events on DOM nodes.'
         
     | 
| 
       111 
115 
     | 
    
         | 
| 
       112 
116 
     | 
    
         
             
                  block?.call element, element, widget
         
     | 
| 
       113 
117 
     | 
    
         | 
    
        data/lib/agt/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: agt
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.0.5
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Cédric Néhémie
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date:  
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2015-01-23 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: bundler
         
     | 
| 
         @@ -84,6 +84,7 @@ files: 
     | 
|
| 
       84 
84 
     | 
    
         
             
            - app/assets/javascripts/agt/mixins/aliasable.coffee
         
     | 
| 
       85 
85 
     | 
    
         
             
            - app/assets/javascripts/agt/mixins/alternate_case.coffee
         
     | 
| 
       86 
86 
     | 
    
         
             
            - app/assets/javascripts/agt/mixins/cloneable.coffee
         
     | 
| 
      
 87 
     | 
    
         
            +
            - app/assets/javascripts/agt/mixins/collectionable.coffee
         
     | 
| 
       87 
88 
     | 
    
         
             
            - app/assets/javascripts/agt/mixins/delegation.coffee
         
     | 
| 
       88 
89 
     | 
    
         
             
            - app/assets/javascripts/agt/mixins/disposable.coffee
         
     | 
| 
       89 
90 
     | 
    
         
             
            - app/assets/javascripts/agt/mixins/emitter.coffee
         
     | 
| 
         @@ -99,7 +100,6 @@ files: 
     | 
|
| 
       99 
100 
     | 
    
         
             
            - app/assets/javascripts/agt/mixins/sourcable.coffee
         
     | 
| 
       100 
101 
     | 
    
         
             
            - app/assets/javascripts/agt/mixins/state_machine.coffee
         
     | 
| 
       101 
102 
     | 
    
         
             
            - app/assets/javascripts/agt/mixins/subscriber.coffee
         
     | 
| 
       102 
     | 
    
         
            -
            - app/assets/javascripts/agt/models/mixins/model.coffee
         
     | 
| 
       103 
103 
     | 
    
         
             
            - app/assets/javascripts/agt/net/router.coffee
         
     | 
| 
       104 
104 
     | 
    
         
             
            - app/assets/javascripts/agt/object.coffee
         
     | 
| 
       105 
105 
     | 
    
         
             
            - app/assets/javascripts/agt/particles/actions/base_action.coffee
         
     |