ember-source 1.6.0.beta.2 → 1.6.0.beta.3
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/VERSION +1 -1
- data/dist/ember-data-deps.js +529 -351
- data/dist/ember-data-deps.min.js +6 -6
- data/dist/ember-data-deps.prod.js +530 -351
- data/dist/ember-runtime.js +529 -351
- data/dist/ember-runtime.min.js +6 -6
- data/dist/ember-runtime.prod.js +530 -351
- data/dist/ember-spade.js +2 -2
- data/dist/ember-template-compiler.js +2 -1
- data/dist/ember-template-compiler.min.js +1 -1
- data/dist/ember-template-compiler.prod.js +2 -1
- data/dist/ember-tests.js +2 -4
- data/dist/ember.js +1130 -750
- data/dist/ember.min.js +12 -12
- data/dist/ember.prod.js +1127 -748
- metadata +2 -4
- data/dist/ember-debug.js +0 -228
- data/dist/ember.min.closure.js +0 -526
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ada851f21b260c904705035c0a631897773a817e
|
4
|
+
data.tar.gz: 26395d03156650a3110ef8e068f5151eeb9f1067
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 43f71aa0b1c91021ab24bdb7259b7cdd549ebc495082e5a5491b05a703aeb7317e236117157a0a91ccee16eb7dc6d6abf73f764ab7305e151369e3040d86ed84
|
7
|
+
data.tar.gz: 42a5bcab100ac254580c52d8753382c2ff780e92477b4810716d35ce60d88f68628947d00e047aa783708405ed989640a2ca549ed8b8bfbee011beeb718fe728
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.6.0-beta.
|
1
|
+
1.6.0-beta.3
|
data/dist/ember-data-deps.js
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
* Portions Copyright 2008-2011 Apple Inc. All rights reserved.
|
6
6
|
* @license Licensed under MIT license
|
7
7
|
* See https://raw.github.com/emberjs/ember.js/master/LICENSE
|
8
|
-
* @version 1.6.0-beta.
|
8
|
+
* @version 1.6.0-beta.3
|
9
9
|
*/
|
10
10
|
|
11
11
|
|
@@ -1174,11 +1174,11 @@ define("ember-metal/computed",
|
|
1174
1174
|
});
|
1175
1175
|
|
1176
1176
|
var tom = Person.create({
|
1177
|
-
firstName:
|
1178
|
-
lastName:
|
1177
|
+
firstName: 'Tom',
|
1178
|
+
lastName: 'Dale'
|
1179
1179
|
});
|
1180
1180
|
|
1181
|
-
tom.get('fullName') //
|
1181
|
+
tom.get('fullName') // 'Tom Dale'
|
1182
1182
|
```
|
1183
1183
|
|
1184
1184
|
You can also define what Ember should do when setting a computed property.
|
@@ -1214,9 +1214,9 @@ define("ember-metal/computed",
|
|
1214
1214
|
});
|
1215
1215
|
|
1216
1216
|
var person = Person.create();
|
1217
|
-
person.set('fullName',
|
1218
|
-
person.get('firstName') // Peter
|
1219
|
-
person.get('lastName') // Wagenet
|
1217
|
+
person.set('fullName', 'Peter Wagenet');
|
1218
|
+
person.get('firstName') // 'Peter'
|
1219
|
+
person.get('lastName') // 'Wagenet'
|
1220
1220
|
```
|
1221
1221
|
|
1222
1222
|
@class ComputedProperty
|
@@ -1323,7 +1323,8 @@ define("ember-metal/computed",
|
|
1323
1323
|
firstName: 'Barack',
|
1324
1324
|
lastName: 'Obama',
|
1325
1325
|
});
|
1326
|
-
|
1326
|
+
|
1327
|
+
MyApp.president.get('fullName'); // 'Barack Obama'
|
1327
1328
|
```
|
1328
1329
|
|
1329
1330
|
@method property
|
@@ -1417,11 +1418,11 @@ define("ember-metal/computed",
|
|
1417
1418
|
|
1418
1419
|
|
1419
1420
|
var tom = Person.create({
|
1420
|
-
firstName:
|
1421
|
-
lastName:
|
1421
|
+
firstName: 'Tom',
|
1422
|
+
lastName: 'Dale'
|
1422
1423
|
});
|
1423
1424
|
|
1424
|
-
tom.get('fullName') //
|
1425
|
+
tom.get('fullName') // 'Tom Dale'
|
1425
1426
|
```
|
1426
1427
|
|
1427
1428
|
@method get
|
@@ -1495,7 +1496,7 @@ define("ember-metal/computed",
|
|
1495
1496
|
hadCachedValue = true;
|
1496
1497
|
}
|
1497
1498
|
|
1498
|
-
// Check if the CP has been wrapped. If
|
1499
|
+
// Check if the CP has been wrapped. If it has, use the
|
1499
1500
|
// length from the wrapped function.
|
1500
1501
|
|
1501
1502
|
funcArgLength = func.wrappedFunction ? func.wrappedFunction.__ember_arity__ : func.__ember_arity__;
|
@@ -1565,6 +1566,7 @@ define("ember-metal/computed",
|
|
1565
1566
|
The function should accept two parameters, key and value. If value is not
|
1566
1567
|
undefined you should set the value first. In either case return the
|
1567
1568
|
current value of the property.
|
1569
|
+
|
1568
1570
|
@method computed
|
1569
1571
|
@for Ember
|
1570
1572
|
@param {Function} func The computed property function.
|
@@ -1671,7 +1673,9 @@ define("ember-metal/computed",
|
|
1671
1673
|
var ToDoList = Ember.Object.extend({
|
1672
1674
|
done: Ember.computed.empty('todos')
|
1673
1675
|
});
|
1676
|
+
|
1674
1677
|
var todoList = ToDoList.create({todos: ['Unit Test', 'Documentation', 'Release']});
|
1678
|
+
|
1675
1679
|
todoList.get('done'); // false
|
1676
1680
|
todoList.get('todos').clear();
|
1677
1681
|
todoList.get('done'); // true
|
@@ -1701,9 +1705,11 @@ define("ember-metal/computed",
|
|
1701
1705
|
|
1702
1706
|
```javascript
|
1703
1707
|
var Hamster = Ember.Object.extend({
|
1704
|
-
hasStuff: computed.notEmpty('backpack.[]')
|
1708
|
+
hasStuff: Ember.computed.notEmpty('backpack.[]')
|
1705
1709
|
});
|
1710
|
+
|
1706
1711
|
var hamster = Hamster.create({backpack: ['Food', 'Sleeping Bag', 'Tent']});
|
1712
|
+
|
1707
1713
|
hamster.get('hasStuff'); // true
|
1708
1714
|
hamster.get('backpack').clear(); // []
|
1709
1715
|
hamster.get('hasStuff'); // false
|
@@ -1728,9 +1734,11 @@ define("ember-metal/computed",
|
|
1728
1734
|
|
1729
1735
|
```javascript
|
1730
1736
|
var Hamster = Ember.Object.extend({
|
1731
|
-
isHungry: computed.none('food')
|
1737
|
+
isHungry: Ember.computed.none('food')
|
1732
1738
|
});
|
1739
|
+
|
1733
1740
|
var hamster = Hamster.create();
|
1741
|
+
|
1734
1742
|
hamster.get('isHungry'); // true
|
1735
1743
|
hamster.set('food', 'Banana');
|
1736
1744
|
hamster.get('isHungry'); // false
|
@@ -1756,9 +1764,11 @@ define("ember-metal/computed",
|
|
1756
1764
|
|
1757
1765
|
```javascript
|
1758
1766
|
var User = Ember.Object.extend({
|
1759
|
-
isAnonymous: computed.not('loggedIn')
|
1767
|
+
isAnonymous: Ember.computed.not('loggedIn')
|
1760
1768
|
});
|
1769
|
+
|
1761
1770
|
var user = User.create({loggedIn: false});
|
1771
|
+
|
1762
1772
|
user.get('isAnonymous'); // true
|
1763
1773
|
user.set('loggedIn', true);
|
1764
1774
|
user.get('isAnonymous'); // false
|
@@ -1780,9 +1790,11 @@ define("ember-metal/computed",
|
|
1780
1790
|
|
1781
1791
|
```javascript
|
1782
1792
|
var Hamster = Ember.Object.extend({
|
1783
|
-
hasBananas: computed.bool('numBananas')
|
1793
|
+
hasBananas: Ember.computed.bool('numBananas')
|
1784
1794
|
});
|
1795
|
+
|
1785
1796
|
var hamster = Hamster.create();
|
1797
|
+
|
1786
1798
|
hamster.get('hasBananas'); // false
|
1787
1799
|
hamster.set('numBananas', 0);
|
1788
1800
|
hamster.get('hasBananas'); // false
|
@@ -1811,9 +1823,11 @@ define("ember-metal/computed",
|
|
1811
1823
|
|
1812
1824
|
```javascript
|
1813
1825
|
var User = Ember.Object.extend({
|
1814
|
-
hasValidEmail: computed.match('email', /^.+@.+\..+$/)
|
1826
|
+
hasValidEmail: Ember.computed.match('email', /^.+@.+\..+$/)
|
1815
1827
|
});
|
1828
|
+
|
1816
1829
|
var user = User.create({loggedIn: false});
|
1830
|
+
|
1817
1831
|
user.get('hasValidEmail'); // false
|
1818
1832
|
user.set('email', '');
|
1819
1833
|
user.get('hasValidEmail'); // false
|
@@ -1841,9 +1855,11 @@ define("ember-metal/computed",
|
|
1841
1855
|
|
1842
1856
|
```javascript
|
1843
1857
|
var Hamster = Ember.Object.extend({
|
1844
|
-
napTime: computed.equal('state', 'sleepy')
|
1858
|
+
napTime: Ember.computed.equal('state', 'sleepy')
|
1845
1859
|
});
|
1860
|
+
|
1846
1861
|
var hamster = Hamster.create();
|
1862
|
+
|
1847
1863
|
hamster.get('napTime'); // false
|
1848
1864
|
hamster.set('state', 'sleepy');
|
1849
1865
|
hamster.get('napTime'); // true
|
@@ -1870,9 +1886,11 @@ define("ember-metal/computed",
|
|
1870
1886
|
|
1871
1887
|
```javascript
|
1872
1888
|
var Hamster = Ember.Object.extend({
|
1873
|
-
hasTooManyBananas: computed.gt('numBananas', 10)
|
1889
|
+
hasTooManyBananas: Ember.computed.gt('numBananas', 10)
|
1874
1890
|
});
|
1891
|
+
|
1875
1892
|
var hamster = Hamster.create();
|
1893
|
+
|
1876
1894
|
hamster.get('hasTooManyBananas'); // false
|
1877
1895
|
hamster.set('numBananas', 3);
|
1878
1896
|
hamster.get('hasTooManyBananas'); // false
|
@@ -1899,9 +1917,11 @@ define("ember-metal/computed",
|
|
1899
1917
|
|
1900
1918
|
```javascript
|
1901
1919
|
var Hamster = Ember.Object.extend({
|
1902
|
-
hasTooManyBananas: computed.gte('numBananas', 10)
|
1920
|
+
hasTooManyBananas: Ember.computed.gte('numBananas', 10)
|
1903
1921
|
});
|
1922
|
+
|
1904
1923
|
var hamster = Hamster.create();
|
1924
|
+
|
1905
1925
|
hamster.get('hasTooManyBananas'); // false
|
1906
1926
|
hamster.set('numBananas', 3);
|
1907
1927
|
hamster.get('hasTooManyBananas'); // false
|
@@ -1928,9 +1948,11 @@ define("ember-metal/computed",
|
|
1928
1948
|
|
1929
1949
|
```javascript
|
1930
1950
|
var Hamster = Ember.Object.extend({
|
1931
|
-
needsMoreBananas: computed.lt('numBananas', 3)
|
1951
|
+
needsMoreBananas: Ember.computed.lt('numBananas', 3)
|
1932
1952
|
});
|
1953
|
+
|
1933
1954
|
var hamster = Hamster.create();
|
1955
|
+
|
1934
1956
|
hamster.get('needsMoreBananas'); // true
|
1935
1957
|
hamster.set('numBananas', 3);
|
1936
1958
|
hamster.get('needsMoreBananas'); // false
|
@@ -1957,9 +1979,11 @@ define("ember-metal/computed",
|
|
1957
1979
|
|
1958
1980
|
```javascript
|
1959
1981
|
var Hamster = Ember.Object.extend({
|
1960
|
-
needsMoreBananas: computed.lte('numBananas', 3)
|
1982
|
+
needsMoreBananas: Ember.computed.lte('numBananas', 3)
|
1961
1983
|
});
|
1984
|
+
|
1962
1985
|
var hamster = Hamster.create();
|
1986
|
+
|
1963
1987
|
hamster.get('needsMoreBananas'); // true
|
1964
1988
|
hamster.set('numBananas', 5);
|
1965
1989
|
hamster.get('needsMoreBananas'); // false
|
@@ -1986,9 +2010,11 @@ define("ember-metal/computed",
|
|
1986
2010
|
|
1987
2011
|
```javascript
|
1988
2012
|
var Hamster = Ember.Object.extend({
|
1989
|
-
readyForCamp: computed.and('hasTent', 'hasBackpack')
|
2013
|
+
readyForCamp: Ember.computed.and('hasTent', 'hasBackpack')
|
1990
2014
|
});
|
2015
|
+
|
1991
2016
|
var hamster = Hamster.create();
|
2017
|
+
|
1992
2018
|
hamster.get('readyForCamp'); // false
|
1993
2019
|
hamster.set('hasTent', true);
|
1994
2020
|
hamster.get('readyForCamp'); // false
|
@@ -2019,9 +2045,11 @@ define("ember-metal/computed",
|
|
2019
2045
|
|
2020
2046
|
```javascript
|
2021
2047
|
var Hamster = Ember.Object.extend({
|
2022
|
-
readyForRain: computed.or('hasJacket', 'hasUmbrella')
|
2048
|
+
readyForRain: Ember.computed.or('hasJacket', 'hasUmbrella')
|
2023
2049
|
});
|
2050
|
+
|
2024
2051
|
var hamster = Hamster.create();
|
2052
|
+
|
2025
2053
|
hamster.get('readyForRain'); // false
|
2026
2054
|
hamster.set('hasJacket', true);
|
2027
2055
|
hamster.get('readyForRain'); // true
|
@@ -2050,9 +2078,11 @@ define("ember-metal/computed",
|
|
2050
2078
|
|
2051
2079
|
```javascript
|
2052
2080
|
var Hamster = Ember.Object.extend({
|
2053
|
-
hasClothes: computed.any('hat', 'shirt')
|
2081
|
+
hasClothes: Ember.computed.any('hat', 'shirt')
|
2054
2082
|
});
|
2083
|
+
|
2055
2084
|
var hamster = Hamster.create();
|
2085
|
+
|
2056
2086
|
hamster.get('hasClothes'); // null
|
2057
2087
|
hamster.set('shirt', 'Hawaiian Shirt');
|
2058
2088
|
hamster.get('hasClothes'); // 'Hawaiian Shirt'
|
@@ -2081,9 +2111,11 @@ define("ember-metal/computed",
|
|
2081
2111
|
|
2082
2112
|
```javascript
|
2083
2113
|
var Hamster = Ember.Object.extend({
|
2084
|
-
clothes: computed.collect('hat', 'shirt')
|
2114
|
+
clothes: Ember.computed.collect('hat', 'shirt')
|
2085
2115
|
});
|
2116
|
+
|
2086
2117
|
var hamster = Hamster.create();
|
2118
|
+
|
2087
2119
|
hamster.get('clothes'); // [null, null]
|
2088
2120
|
hamster.set('hat', 'Camp Hat');
|
2089
2121
|
hamster.set('shirt', 'Camp Shirt');
|
@@ -2118,16 +2150,18 @@ define("ember-metal/computed",
|
|
2118
2150
|
```javascript
|
2119
2151
|
Person = Ember.Object.extend({
|
2120
2152
|
name: 'Alex Matchneer',
|
2121
|
-
nomen: computed.alias('name')
|
2153
|
+
nomen: Ember.computed.alias('name')
|
2122
2154
|
});
|
2123
2155
|
|
2124
2156
|
alex = Person.create();
|
2157
|
+
|
2125
2158
|
alex.get('nomen'); // 'Alex Matchneer'
|
2126
2159
|
alex.get('name'); // 'Alex Matchneer'
|
2127
2160
|
|
2128
2161
|
alex.set('nomen', '@machty');
|
2129
2162
|
alex.get('name'); // '@machty'
|
2130
2163
|
```
|
2164
|
+
|
2131
2165
|
@method computed.alias
|
2132
2166
|
@for Ember
|
2133
2167
|
@param {String} dependentKey
|
@@ -2149,31 +2183,26 @@ define("ember-metal/computed",
|
|
2149
2183
|
Where `computed.alias` aliases `get` and `set`, and allows for bidirectional
|
2150
2184
|
data flow, `computed.oneWay` only provides an aliased `get`. The `set` will
|
2151
2185
|
not mutate the upstream property, rather causes the current property to
|
2152
|
-
become the value set. This causes the downstream property to
|
2186
|
+
become the value set. This causes the downstream property to permanently
|
2153
2187
|
diverge from the upstream property.
|
2154
2188
|
|
2155
2189
|
Example
|
2156
2190
|
|
2157
2191
|
```javascript
|
2158
|
-
User = Ember.Object.extend({
|
2192
|
+
var User = Ember.Object.extend({
|
2159
2193
|
firstName: null,
|
2160
2194
|
lastName: null,
|
2161
|
-
nickName: computed.oneWay('firstName')
|
2195
|
+
nickName: Ember.computed.oneWay('firstName')
|
2162
2196
|
});
|
2163
2197
|
|
2164
|
-
|
2198
|
+
var teddy = User.create({
|
2165
2199
|
firstName: 'Teddy',
|
2166
2200
|
lastName: 'Zeenny'
|
2167
2201
|
});
|
2168
2202
|
|
2169
|
-
|
2170
|
-
|
2171
|
-
|
2172
|
-
user.set('nickName', 'TeddyBear');
|
2173
|
-
# 'TeddyBear'
|
2174
|
-
|
2175
|
-
user.get('firstName');
|
2176
|
-
# 'Teddy'
|
2203
|
+
teddy.get('nickName'); // 'Teddy'
|
2204
|
+
teddy.set('nickName', 'TeddyBear'); // 'TeddyBear'
|
2205
|
+
teddy.get('firstName'); // 'Teddy'
|
2177
2206
|
```
|
2178
2207
|
|
2179
2208
|
@method computed.oneWay
|
@@ -2212,26 +2241,21 @@ define("ember-metal/computed",
|
|
2212
2241
|
Example
|
2213
2242
|
|
2214
2243
|
```javascript
|
2215
|
-
User = Ember.Object.extend({
|
2244
|
+
var User = Ember.Object.extend({
|
2216
2245
|
firstName: null,
|
2217
2246
|
lastName: null,
|
2218
|
-
nickName: computed.readOnly('firstName')
|
2247
|
+
nickName: Ember.computed.readOnly('firstName')
|
2219
2248
|
});
|
2220
2249
|
|
2221
|
-
|
2250
|
+
var teddy = User.create({
|
2222
2251
|
firstName: 'Teddy',
|
2223
2252
|
lastName: 'Zeenny'
|
2224
2253
|
});
|
2225
2254
|
|
2226
|
-
|
2227
|
-
|
2228
|
-
|
2229
|
-
|
2230
|
-
# throws Exception
|
2231
|
-
# throw new Ember.Error('Cannot Set: nickName on: <User:ember27288>' );`
|
2232
|
-
|
2233
|
-
user.get('firstName');
|
2234
|
-
# 'Teddy'
|
2255
|
+
teddy.get('nickName'); // 'Teddy'
|
2256
|
+
teddy.set('nickName', 'TeddyBear'); // throws Exception
|
2257
|
+
// throw new Ember.Error('Cannot Set: nickName on: <User:ember27288>' );`
|
2258
|
+
teddy.get('firstName'); // 'Teddy'
|
2235
2259
|
```
|
2236
2260
|
|
2237
2261
|
@method computed.readOnly
|
@@ -2239,6 +2263,7 @@ define("ember-metal/computed",
|
|
2239
2263
|
@param {String} dependentKey
|
2240
2264
|
@return {Ember.ComputedProperty} computed property which creates a
|
2241
2265
|
one way computed property to the original value for property.
|
2266
|
+
@since 1.5.0
|
2242
2267
|
*/
|
2243
2268
|
computed.readOnly = function(dependentKey) {
|
2244
2269
|
return computed(dependentKey, function() {
|
@@ -2254,9 +2279,11 @@ define("ember-metal/computed",
|
|
2254
2279
|
|
2255
2280
|
```javascript
|
2256
2281
|
var Hamster = Ember.Object.extend({
|
2257
|
-
wishList: computed.defaultTo('favoriteFood')
|
2282
|
+
wishList: Ember.computed.defaultTo('favoriteFood')
|
2258
2283
|
});
|
2284
|
+
|
2259
2285
|
var hamster = Hamster.create({favoriteFood: 'Banana'});
|
2286
|
+
|
2260
2287
|
hamster.get('wishList'); // 'Banana'
|
2261
2288
|
hamster.set('wishList', 'More Unit Tests');
|
2262
2289
|
hamster.get('wishList'); // 'More Unit Tests'
|
@@ -2311,7 +2338,7 @@ define("ember-metal/core",
|
|
2311
2338
|
|
2312
2339
|
@class Ember
|
2313
2340
|
@static
|
2314
|
-
@version 1.6.0-beta.
|
2341
|
+
@version 1.6.0-beta.3
|
2315
2342
|
*/
|
2316
2343
|
|
2317
2344
|
if ('undefined' === typeof Ember) {
|
@@ -2338,10 +2365,10 @@ define("ember-metal/core",
|
|
2338
2365
|
/**
|
2339
2366
|
@property VERSION
|
2340
2367
|
@type String
|
2341
|
-
@default '1.6.0-beta.
|
2368
|
+
@default '1.6.0-beta.3'
|
2342
2369
|
@static
|
2343
2370
|
*/
|
2344
|
-
Ember.VERSION = '1.6.0-beta.
|
2371
|
+
Ember.VERSION = '1.6.0-beta.3';
|
2345
2372
|
|
2346
2373
|
/**
|
2347
2374
|
Standard environmental variables. You can define these in a global `EmberENV`
|
@@ -2382,8 +2409,10 @@ define("ember-metal/core",
|
|
2382
2409
|
|
2383
2410
|
You can also define `ENV.FEATURES` if you need to enable features flagged at runtime.
|
2384
2411
|
|
2385
|
-
@
|
2386
|
-
@
|
2412
|
+
@class FEATURES
|
2413
|
+
@namespace Ember
|
2414
|
+
@static
|
2415
|
+
@since 1.1.0
|
2387
2416
|
*/
|
2388
2417
|
|
2389
2418
|
Ember.FEATURES = Ember.ENV.FEATURES || {};
|
@@ -2399,7 +2428,10 @@ define("ember-metal/core",
|
|
2399
2428
|
enabled/disabled.
|
2400
2429
|
|
2401
2430
|
@method isEnabled
|
2402
|
-
@param {
|
2431
|
+
@param {String} feature
|
2432
|
+
@return {Boolean}
|
2433
|
+
@for Ember.FEATURES
|
2434
|
+
@since 1.1.0
|
2403
2435
|
*/
|
2404
2436
|
|
2405
2437
|
Ember.FEATURES.isEnabled = function(feature) {
|
@@ -2433,6 +2465,7 @@ define("ember-metal/core",
|
|
2433
2465
|
@property EXTEND_PROTOTYPES
|
2434
2466
|
@type Boolean
|
2435
2467
|
@default true
|
2468
|
+
@for Ember
|
2436
2469
|
*/
|
2437
2470
|
Ember.EXTEND_PROTOTYPES = Ember.ENV.EXTEND_PROTOTYPES;
|
2438
2471
|
|
@@ -2566,6 +2599,7 @@ define("ember-metal/enumerable_utils",
|
|
2566
2599
|
* @param {Object} thisArg Value to use as this when executing *callback*
|
2567
2600
|
*
|
2568
2601
|
* @return {Array} An array containing the filtered values
|
2602
|
+
* @since 1.4.0
|
2569
2603
|
*/
|
2570
2604
|
filter: function(obj, callback, thisArg) {
|
2571
2605
|
return obj.filter ? obj.filter.call(obj, callback, thisArg) : filter.call(obj, callback, thisArg);
|
@@ -3532,6 +3566,7 @@ define("ember-metal/is_blank",
|
|
3532
3566
|
@for Ember
|
3533
3567
|
@param {Object} obj Value to test
|
3534
3568
|
@return {Boolean}
|
3569
|
+
@since 1.5.0
|
3535
3570
|
*/
|
3536
3571
|
function isBlank(obj) {
|
3537
3572
|
return isEmpty(obj) || (typeof obj === 'string' && obj.match(/\S/) === null);
|
@@ -3988,6 +4023,8 @@ define("ember-metal",
|
|
3988
4023
|
};
|
3989
4024
|
```
|
3990
4025
|
|
4026
|
+
Internally, `Ember.onerror` is used as Backburner's error handler.
|
4027
|
+
|
3991
4028
|
@event onerror
|
3992
4029
|
@for Ember
|
3993
4030
|
@param {Exception} error the error object
|
@@ -6357,7 +6394,9 @@ define("ember-metal/run_loop",
|
|
6357
6394
|
},
|
6358
6395
|
defaultQueue: 'actions',
|
6359
6396
|
onBegin: onBegin,
|
6360
|
-
onEnd: onEnd
|
6397
|
+
onEnd: onEnd,
|
6398
|
+
onErrorTarget: Ember,
|
6399
|
+
onErrorMethod: 'onerror'
|
6361
6400
|
}),
|
6362
6401
|
slice = [].slice,
|
6363
6402
|
concat = [].concat;
|
@@ -6394,20 +6433,9 @@ define("ember-metal/run_loop",
|
|
6394
6433
|
@return {Object} return value from invoking the passed function.
|
6395
6434
|
*/
|
6396
6435
|
var run = function() {
|
6397
|
-
|
6398
|
-
return onerror(arguments);
|
6399
|
-
} else {
|
6400
|
-
return apply(backburner, backburner.run, arguments);
|
6401
|
-
}
|
6436
|
+
return apply(backburner, backburner.run, arguments);
|
6402
6437
|
};
|
6403
6438
|
|
6404
|
-
function onerror(args) {
|
6405
|
-
try {
|
6406
|
-
return apply(backburner, backburner.run, args);
|
6407
|
-
} catch(error) {
|
6408
|
-
Ember.onerror(error);
|
6409
|
-
}
|
6410
|
-
}
|
6411
6439
|
/**
|
6412
6440
|
If no run-loop is present, it creates a new one. If a run loop is
|
6413
6441
|
present it will queue itself to run on the existing run-loops action
|
@@ -6494,6 +6522,7 @@ define("ember-metal/run_loop",
|
|
6494
6522
|
@param {Object} [args*] Any additional arguments you wish to pass to the method.
|
6495
6523
|
@return {Object} return value from invoking the passed function. Please note,
|
6496
6524
|
when called within an existing loop, no return value is possible.
|
6525
|
+
@since 1.4.0
|
6497
6526
|
*/
|
6498
6527
|
run.bind = function(target, method /* args*/) {
|
6499
6528
|
var args = slice.call(arguments);
|
@@ -7017,6 +7046,10 @@ define("ember-metal/utils",
|
|
7017
7046
|
/**
|
7018
7047
|
Prefix used for guids through out Ember.
|
7019
7048
|
@private
|
7049
|
+
@property GUID_PREFIX
|
7050
|
+
@for Ember
|
7051
|
+
@type String
|
7052
|
+
@final
|
7020
7053
|
*/
|
7021
7054
|
var GUID_PREFIX = 'ember';
|
7022
7055
|
|
@@ -7392,7 +7425,7 @@ define("ember-metal/utils",
|
|
7392
7425
|
if (!obj || obj.setInterval) { return false; }
|
7393
7426
|
if (Array.isArray && Array.isArray(obj)) { return true; }
|
7394
7427
|
if (EmberArray && EmberArray.detect(obj)) { return true; }
|
7395
|
-
if ((obj.length !== undefined) && 'object'===
|
7428
|
+
if ((obj.length !== undefined) && 'object'=== typeOf(obj)) { return true; }
|
7396
7429
|
return false;
|
7397
7430
|
};
|
7398
7431
|
|
@@ -7722,6 +7755,7 @@ define("ember-metal/utils",
|
|
7722
7755
|
@for Ember
|
7723
7756
|
@param {Object} obj The object you want to inspect.
|
7724
7757
|
@return {String} A description of the object
|
7758
|
+
@since 1.4.0
|
7725
7759
|
*/
|
7726
7760
|
function inspect(obj) {
|
7727
7761
|
var type = typeOf(obj);
|
@@ -7796,219 +7830,7 @@ define("ember-metal/utils",
|
|
7796
7830
|
__exports__.applyStr = applyStr;
|
7797
7831
|
__exports__.apply = apply;
|
7798
7832
|
});
|
7799
|
-
define("backburner
|
7800
|
-
["exports"],
|
7801
|
-
function(__exports__) {
|
7802
|
-
"use strict";
|
7803
|
-
function Queue(daq, name, options) {
|
7804
|
-
this.daq = daq;
|
7805
|
-
this.name = name;
|
7806
|
-
this.options = options;
|
7807
|
-
this._queue = [];
|
7808
|
-
}
|
7809
|
-
|
7810
|
-
Queue.prototype = {
|
7811
|
-
daq: null,
|
7812
|
-
name: null,
|
7813
|
-
options: null,
|
7814
|
-
_queue: null,
|
7815
|
-
|
7816
|
-
push: function(target, method, args, stack) {
|
7817
|
-
var queue = this._queue;
|
7818
|
-
queue.push(target, method, args, stack);
|
7819
|
-
return {queue: this, target: target, method: method};
|
7820
|
-
},
|
7821
|
-
|
7822
|
-
pushUnique: function(target, method, args, stack) {
|
7823
|
-
var queue = this._queue, currentTarget, currentMethod, i, l;
|
7824
|
-
|
7825
|
-
for (i = 0, l = queue.length; i < l; i += 4) {
|
7826
|
-
currentTarget = queue[i];
|
7827
|
-
currentMethod = queue[i+1];
|
7828
|
-
|
7829
|
-
if (currentTarget === target && currentMethod === method) {
|
7830
|
-
queue[i+2] = args; // replace args
|
7831
|
-
queue[i+3] = stack; // replace stack
|
7832
|
-
return {queue: this, target: target, method: method}; // TODO: test this code path
|
7833
|
-
}
|
7834
|
-
}
|
7835
|
-
|
7836
|
-
this._queue.push(target, method, args, stack);
|
7837
|
-
return {queue: this, target: target, method: method};
|
7838
|
-
},
|
7839
|
-
|
7840
|
-
// TODO: remove me, only being used for Ember.run.sync
|
7841
|
-
flush: function() {
|
7842
|
-
var queue = this._queue,
|
7843
|
-
options = this.options,
|
7844
|
-
before = options && options.before,
|
7845
|
-
after = options && options.after,
|
7846
|
-
target, method, args, stack, i, l = queue.length;
|
7847
|
-
|
7848
|
-
if (l && before) { before(); }
|
7849
|
-
for (i = 0; i < l; i += 4) {
|
7850
|
-
target = queue[i];
|
7851
|
-
method = queue[i+1];
|
7852
|
-
args = queue[i+2];
|
7853
|
-
stack = queue[i+3]; // Debugging assistance
|
7854
|
-
|
7855
|
-
// TODO: error handling
|
7856
|
-
if (args && args.length > 0) {
|
7857
|
-
method.apply(target, args);
|
7858
|
-
} else {
|
7859
|
-
method.call(target);
|
7860
|
-
}
|
7861
|
-
}
|
7862
|
-
if (l && after) { after(); }
|
7863
|
-
|
7864
|
-
// check if new items have been added
|
7865
|
-
if (queue.length > l) {
|
7866
|
-
this._queue = queue.slice(l);
|
7867
|
-
this.flush();
|
7868
|
-
} else {
|
7869
|
-
this._queue.length = 0;
|
7870
|
-
}
|
7871
|
-
},
|
7872
|
-
|
7873
|
-
cancel: function(actionToCancel) {
|
7874
|
-
var queue = this._queue, currentTarget, currentMethod, i, l;
|
7875
|
-
|
7876
|
-
for (i = 0, l = queue.length; i < l; i += 4) {
|
7877
|
-
currentTarget = queue[i];
|
7878
|
-
currentMethod = queue[i+1];
|
7879
|
-
|
7880
|
-
if (currentTarget === actionToCancel.target && currentMethod === actionToCancel.method) {
|
7881
|
-
queue.splice(i, 4);
|
7882
|
-
return true;
|
7883
|
-
}
|
7884
|
-
}
|
7885
|
-
|
7886
|
-
// if not found in current queue
|
7887
|
-
// could be in the queue that is being flushed
|
7888
|
-
queue = this._queueBeingFlushed;
|
7889
|
-
if (!queue) {
|
7890
|
-
return;
|
7891
|
-
}
|
7892
|
-
for (i = 0, l = queue.length; i < l; i += 4) {
|
7893
|
-
currentTarget = queue[i];
|
7894
|
-
currentMethod = queue[i+1];
|
7895
|
-
|
7896
|
-
if (currentTarget === actionToCancel.target && currentMethod === actionToCancel.method) {
|
7897
|
-
// don't mess with array during flush
|
7898
|
-
// just nullify the method
|
7899
|
-
queue[i+1] = null;
|
7900
|
-
return true;
|
7901
|
-
}
|
7902
|
-
}
|
7903
|
-
}
|
7904
|
-
};
|
7905
|
-
|
7906
|
-
__exports__.Queue = Queue;
|
7907
|
-
});
|
7908
|
-
|
7909
|
-
define("backburner/deferred_action_queues",
|
7910
|
-
["backburner/queue","exports"],
|
7911
|
-
function(__dependency1__, __exports__) {
|
7912
|
-
"use strict";
|
7913
|
-
var Queue = __dependency1__.Queue;
|
7914
|
-
|
7915
|
-
function DeferredActionQueues(queueNames, options) {
|
7916
|
-
var queues = this.queues = {};
|
7917
|
-
this.queueNames = queueNames = queueNames || [];
|
7918
|
-
|
7919
|
-
var queueName;
|
7920
|
-
for (var i = 0, l = queueNames.length; i < l; i++) {
|
7921
|
-
queueName = queueNames[i];
|
7922
|
-
queues[queueName] = new Queue(this, queueName, options[queueName]);
|
7923
|
-
}
|
7924
|
-
}
|
7925
|
-
|
7926
|
-
DeferredActionQueues.prototype = {
|
7927
|
-
queueNames: null,
|
7928
|
-
queues: null,
|
7929
|
-
|
7930
|
-
schedule: function(queueName, target, method, args, onceFlag, stack) {
|
7931
|
-
var queues = this.queues,
|
7932
|
-
queue = queues[queueName];
|
7933
|
-
|
7934
|
-
if (!queue) { throw new Error("You attempted to schedule an action in a queue (" + queueName + ") that doesn't exist"); }
|
7935
|
-
|
7936
|
-
if (onceFlag) {
|
7937
|
-
return queue.pushUnique(target, method, args, stack);
|
7938
|
-
} else {
|
7939
|
-
return queue.push(target, method, args, stack);
|
7940
|
-
}
|
7941
|
-
},
|
7942
|
-
|
7943
|
-
flush: function() {
|
7944
|
-
var queues = this.queues,
|
7945
|
-
queueNames = this.queueNames,
|
7946
|
-
queueName, queue, queueItems, priorQueueNameIndex,
|
7947
|
-
queueNameIndex = 0, numberOfQueues = queueNames.length;
|
7948
|
-
|
7949
|
-
outerloop:
|
7950
|
-
while (queueNameIndex < numberOfQueues) {
|
7951
|
-
queueName = queueNames[queueNameIndex];
|
7952
|
-
queue = queues[queueName];
|
7953
|
-
queueItems = queue._queueBeingFlushed = queue._queue.slice();
|
7954
|
-
queue._queue = [];
|
7955
|
-
|
7956
|
-
var options = queue.options,
|
7957
|
-
before = options && options.before,
|
7958
|
-
after = options && options.after,
|
7959
|
-
target, method, args, stack,
|
7960
|
-
queueIndex = 0, numberOfQueueItems = queueItems.length;
|
7961
|
-
|
7962
|
-
if (numberOfQueueItems && before) { before(); }
|
7963
|
-
while (queueIndex < numberOfQueueItems) {
|
7964
|
-
target = queueItems[queueIndex];
|
7965
|
-
method = queueItems[queueIndex+1];
|
7966
|
-
args = queueItems[queueIndex+2];
|
7967
|
-
stack = queueItems[queueIndex+3]; // Debugging assistance
|
7968
|
-
|
7969
|
-
if (typeof method === 'string') { method = target[method]; }
|
7970
|
-
|
7971
|
-
// method could have been nullified / canceled during flush
|
7972
|
-
if (method) {
|
7973
|
-
// TODO: error handling
|
7974
|
-
if (args && args.length > 0) {
|
7975
|
-
method.apply(target, args);
|
7976
|
-
} else {
|
7977
|
-
method.call(target);
|
7978
|
-
}
|
7979
|
-
}
|
7980
|
-
|
7981
|
-
queueIndex += 4;
|
7982
|
-
}
|
7983
|
-
queue._queueBeingFlushed = null;
|
7984
|
-
if (numberOfQueueItems && after) { after(); }
|
7985
|
-
|
7986
|
-
if ((priorQueueNameIndex = indexOfPriorQueueWithActions(this, queueNameIndex)) !== -1) {
|
7987
|
-
queueNameIndex = priorQueueNameIndex;
|
7988
|
-
continue outerloop;
|
7989
|
-
}
|
7990
|
-
|
7991
|
-
queueNameIndex++;
|
7992
|
-
}
|
7993
|
-
}
|
7994
|
-
};
|
7995
|
-
|
7996
|
-
function indexOfPriorQueueWithActions(daq, currentQueueIndex) {
|
7997
|
-
var queueName, queue;
|
7998
|
-
|
7999
|
-
for (var i = 0, l = currentQueueIndex; i <= l; i++) {
|
8000
|
-
queueName = daq.queueNames[i];
|
8001
|
-
queue = daq.queues[queueName];
|
8002
|
-
if (queue._queue.length) { return i; }
|
8003
|
-
}
|
8004
|
-
|
8005
|
-
return -1;
|
8006
|
-
}
|
8007
|
-
|
8008
|
-
__exports__.DeferredActionQueues = DeferredActionQueues;
|
8009
|
-
});
|
8010
|
-
|
8011
|
-
define("backburner",
|
7833
|
+
define("backburner",
|
8012
7834
|
["backburner/deferred_action_queues","exports"],
|
8013
7835
|
function(__dependency1__, __exports__) {
|
8014
7836
|
"use strict";
|
@@ -8023,6 +7845,15 @@ define("backburner",
|
|
8023
7845
|
global = this,
|
8024
7846
|
NUMBER = /\d+/;
|
8025
7847
|
|
7848
|
+
// In IE 6-8, try/finally doesn't work without a catch.
|
7849
|
+
// Unfortunately, this is impossible to test for since wrapping it in a parent try/catch doesn't trigger the bug.
|
7850
|
+
// This tests for another broken try/catch behavior that only exhibits in the same versions of IE.
|
7851
|
+
var needsIETryCatchFix = (function(e,x){
|
7852
|
+
try{ x(); }
|
7853
|
+
catch(e) { } // jshint ignore:line
|
7854
|
+
return !!e;
|
7855
|
+
})();
|
7856
|
+
|
8026
7857
|
function isCoercableNumber(number) {
|
8027
7858
|
return typeof number === 'number' || NUMBER.test(number);
|
8028
7859
|
}
|
@@ -8043,42 +7874,53 @@ define("backburner",
|
|
8043
7874
|
instanceStack: null,
|
8044
7875
|
|
8045
7876
|
begin: function() {
|
8046
|
-
var
|
7877
|
+
var options = this.options,
|
7878
|
+
onBegin = options && options.onBegin,
|
8047
7879
|
previousInstance = this.currentInstance;
|
8048
7880
|
|
8049
7881
|
if (previousInstance) {
|
8050
7882
|
this.instanceStack.push(previousInstance);
|
8051
7883
|
}
|
8052
7884
|
|
8053
|
-
this.currentInstance = new DeferredActionQueues(this.queueNames,
|
7885
|
+
this.currentInstance = new DeferredActionQueues(this.queueNames, options);
|
8054
7886
|
if (onBegin) {
|
8055
7887
|
onBegin(this.currentInstance, previousInstance);
|
8056
7888
|
}
|
8057
7889
|
},
|
8058
7890
|
|
8059
7891
|
end: function() {
|
8060
|
-
var
|
7892
|
+
var options = this.options,
|
7893
|
+
onEnd = options && options.onEnd,
|
8061
7894
|
currentInstance = this.currentInstance,
|
8062
7895
|
nextInstance = null;
|
8063
7896
|
|
7897
|
+
// Prevent double-finally bug in Safari 6.0.2 and iOS 6
|
7898
|
+
// This bug appears to be resolved in Safari 6.0.5 and iOS 7
|
7899
|
+
var finallyAlreadyCalled = false;
|
8064
7900
|
try {
|
8065
7901
|
currentInstance.flush();
|
8066
7902
|
} finally {
|
8067
|
-
|
7903
|
+
if (!finallyAlreadyCalled) {
|
7904
|
+
finallyAlreadyCalled = true;
|
8068
7905
|
|
8069
|
-
|
8070
|
-
|
8071
|
-
this.
|
8072
|
-
|
7906
|
+
this.currentInstance = null;
|
7907
|
+
|
7908
|
+
if (this.instanceStack.length) {
|
7909
|
+
nextInstance = this.instanceStack.pop();
|
7910
|
+
this.currentInstance = nextInstance;
|
7911
|
+
}
|
8073
7912
|
|
8074
|
-
|
8075
|
-
|
7913
|
+
if (onEnd) {
|
7914
|
+
onEnd(currentInstance, nextInstance);
|
7915
|
+
}
|
8076
7916
|
}
|
8077
7917
|
}
|
8078
7918
|
},
|
8079
7919
|
|
8080
7920
|
run: function(target, method /*, args */) {
|
8081
|
-
var
|
7921
|
+
var options = this.options,
|
7922
|
+
ret, length = arguments.length;
|
7923
|
+
|
8082
7924
|
this.begin();
|
8083
7925
|
|
8084
7926
|
if (!method) {
|
@@ -8090,21 +7932,33 @@ define("backburner",
|
|
8090
7932
|
method = target[method];
|
8091
7933
|
}
|
8092
7934
|
|
8093
|
-
|
8094
|
-
var
|
8095
|
-
|
8096
|
-
|
8097
|
-
|
8098
|
-
|
8099
|
-
|
7935
|
+
var onError = options.onError || (options.onErrorTarget && options.onErrorTarget[options.onErrorMethod]);
|
7936
|
+
var args = slice.call(arguments, 2);
|
7937
|
+
|
7938
|
+
// guard against Safari 6's double-finally bug
|
7939
|
+
var didFinally = false;
|
7940
|
+
|
7941
|
+
if (onError) {
|
7942
|
+
try {
|
7943
|
+
return method.apply(target, args);
|
7944
|
+
} catch(error) {
|
7945
|
+
onError(error);
|
7946
|
+
} finally {
|
7947
|
+
if (!didFinally) {
|
7948
|
+
didFinally = true;
|
7949
|
+
this.end();
|
7950
|
+
}
|
8100
7951
|
}
|
8101
|
-
}
|
8102
|
-
|
8103
|
-
|
8104
|
-
|
7952
|
+
} else {
|
7953
|
+
try {
|
7954
|
+
return method.apply(target, args);
|
7955
|
+
} finally {
|
7956
|
+
if (!didFinally) {
|
7957
|
+
didFinally = true;
|
7958
|
+
this.end();
|
7959
|
+
}
|
8105
7960
|
}
|
8106
7961
|
}
|
8107
|
-
return ret;
|
8108
7962
|
},
|
8109
7963
|
|
8110
7964
|
defer: function(queueName, target, method /* , args */) {
|
@@ -8145,6 +7999,7 @@ define("backburner",
|
|
8145
7999
|
var method, wait, target;
|
8146
8000
|
var self = this;
|
8147
8001
|
var methodOrTarget, methodOrWait, methodOrArgs;
|
8002
|
+
var options = this.options;
|
8148
8003
|
|
8149
8004
|
if (length === 0) {
|
8150
8005
|
return;
|
@@ -8171,6 +8026,8 @@ define("backburner",
|
|
8171
8026
|
|
8172
8027
|
if (isCoercableNumber(last)) {
|
8173
8028
|
wait = args.pop();
|
8029
|
+
} else {
|
8030
|
+
wait = 0;
|
8174
8031
|
}
|
8175
8032
|
|
8176
8033
|
methodOrTarget = args[0];
|
@@ -8192,15 +8049,22 @@ define("backburner",
|
|
8192
8049
|
method = target[method];
|
8193
8050
|
}
|
8194
8051
|
|
8052
|
+
var onError = options.onError || (options.onErrorTarget && options.onErrorTarget[options.onErrorMethod]);
|
8053
|
+
|
8195
8054
|
function fn() {
|
8196
|
-
|
8055
|
+
if (onError) {
|
8056
|
+
try {
|
8057
|
+
method.apply(target, args);
|
8058
|
+
} catch (e) {
|
8059
|
+
onError(e);
|
8060
|
+
}
|
8061
|
+
} else {
|
8062
|
+
method.apply(target, args);
|
8063
|
+
}
|
8197
8064
|
}
|
8198
8065
|
|
8199
|
-
// find position to insert
|
8200
|
-
var i,
|
8201
|
-
for (i = 0, l = timers.length; i < l; i += 2) {
|
8202
|
-
if (executeAt < timers[i]) { break; }
|
8203
|
-
}
|
8066
|
+
// find position to insert
|
8067
|
+
var i = searchTimer(executeAt, timers);
|
8204
8068
|
|
8205
8069
|
timers.splice(i, 0, executeAt, fn);
|
8206
8070
|
|
@@ -8322,7 +8186,7 @@ define("backburner",
|
|
8322
8186
|
},
|
8323
8187
|
|
8324
8188
|
hasTimers: function() {
|
8325
|
-
return !!timers.length || autorun;
|
8189
|
+
return !!timers.length || !!debouncees.length || !!throttlers.length || autorun;
|
8326
8190
|
},
|
8327
8191
|
|
8328
8192
|
cancel: function(timer) {
|
@@ -8366,12 +8230,32 @@ define("backburner",
|
|
8366
8230
|
|
8367
8231
|
return false;
|
8368
8232
|
}
|
8233
|
+
};
|
8234
|
+
|
8235
|
+
Backburner.prototype.schedule = Backburner.prototype.defer;
|
8236
|
+
Backburner.prototype.scheduleOnce = Backburner.prototype.deferOnce;
|
8237
|
+
Backburner.prototype.later = Backburner.prototype.setTimeout;
|
8238
|
+
|
8239
|
+
if (needsIETryCatchFix) {
|
8240
|
+
var originalRun = Backburner.prototype.run;
|
8241
|
+
Backburner.prototype.run = function() {
|
8242
|
+
try {
|
8243
|
+
originalRun.apply(this, arguments);
|
8244
|
+
} catch (e) {
|
8245
|
+
throw e;
|
8246
|
+
}
|
8247
|
+
};
|
8369
8248
|
|
8370
|
-
|
8249
|
+
var originalEnd = Backburner.prototype.end;
|
8250
|
+
Backburner.prototype.end = function() {
|
8251
|
+
try {
|
8252
|
+
originalEnd.apply(this, arguments);
|
8253
|
+
} catch (e) {
|
8254
|
+
throw e;
|
8255
|
+
}
|
8256
|
+
};
|
8257
|
+
}
|
8371
8258
|
|
8372
|
-
Backburner.prototype.schedule = Backburner.prototype.defer;
|
8373
|
-
Backburner.prototype.scheduleOnce = Backburner.prototype.deferOnce;
|
8374
|
-
Backburner.prototype.later = Backburner.prototype.setTimeout;
|
8375
8259
|
|
8376
8260
|
function createAutorun(backburner) {
|
8377
8261
|
backburner.begin();
|
@@ -8400,11 +8284,7 @@ define("backburner",
|
|
8400
8284
|
time, fns, i, l;
|
8401
8285
|
|
8402
8286
|
self.run(function() {
|
8403
|
-
|
8404
|
-
for (i = 0, l = timers.length; i < l; i += 2) {
|
8405
|
-
time = timers[i];
|
8406
|
-
if (time > now) { break; }
|
8407
|
-
}
|
8287
|
+
i = searchTimer(now, timers);
|
8408
8288
|
|
8409
8289
|
fns = timers.splice(0, i);
|
8410
8290
|
|
@@ -8448,9 +8328,285 @@ define("backburner",
|
|
8448
8328
|
return index;
|
8449
8329
|
}
|
8450
8330
|
|
8331
|
+
function searchTimer(time, timers) {
|
8332
|
+
var start = 0,
|
8333
|
+
end = timers.length - 2,
|
8334
|
+
middle, l;
|
8335
|
+
|
8336
|
+
while (start < end) {
|
8337
|
+
// since timers is an array of pairs 'l' will always
|
8338
|
+
// be an integer
|
8339
|
+
l = (end - start) / 2;
|
8340
|
+
|
8341
|
+
// compensate for the index in case even number
|
8342
|
+
// of pairs inside timers
|
8343
|
+
middle = start + l - (l % 2);
|
8344
|
+
|
8345
|
+
if (time >= timers[middle]) {
|
8346
|
+
start = middle + 2;
|
8347
|
+
} else {
|
8348
|
+
end = middle;
|
8349
|
+
}
|
8350
|
+
}
|
8351
|
+
|
8352
|
+
return (time >= timers[start]) ? start + 2 : start;
|
8353
|
+
}
|
8354
|
+
|
8451
8355
|
__exports__.Backburner = Backburner;
|
8452
8356
|
});
|
8357
|
+
define("backburner/deferred_action_queues",
|
8358
|
+
["backburner/queue","exports"],
|
8359
|
+
function(__dependency1__, __exports__) {
|
8360
|
+
"use strict";
|
8361
|
+
var Queue = __dependency1__.Queue;
|
8362
|
+
|
8363
|
+
function DeferredActionQueues(queueNames, options) {
|
8364
|
+
var queues = this.queues = {};
|
8365
|
+
this.queueNames = queueNames = queueNames || [];
|
8366
|
+
|
8367
|
+
this.options = options;
|
8368
|
+
|
8369
|
+
var queueName;
|
8370
|
+
for (var i = 0, l = queueNames.length; i < l; i++) {
|
8371
|
+
queueName = queueNames[i];
|
8372
|
+
queues[queueName] = new Queue(this, queueName, this.options);
|
8373
|
+
}
|
8374
|
+
}
|
8375
|
+
|
8376
|
+
DeferredActionQueues.prototype = {
|
8377
|
+
queueNames: null,
|
8378
|
+
queues: null,
|
8379
|
+
options: null,
|
8380
|
+
|
8381
|
+
schedule: function(queueName, target, method, args, onceFlag, stack) {
|
8382
|
+
var queues = this.queues,
|
8383
|
+
queue = queues[queueName];
|
8384
|
+
|
8385
|
+
if (!queue) { throw new Error("You attempted to schedule an action in a queue (" + queueName + ") that doesn't exist"); }
|
8386
|
+
|
8387
|
+
if (onceFlag) {
|
8388
|
+
return queue.pushUnique(target, method, args, stack);
|
8389
|
+
} else {
|
8390
|
+
return queue.push(target, method, args, stack);
|
8391
|
+
}
|
8392
|
+
},
|
8393
|
+
|
8394
|
+
invoke: function(target, method, args, _) {
|
8395
|
+
if (args && args.length > 0) {
|
8396
|
+
method.apply(target, args);
|
8397
|
+
} else {
|
8398
|
+
method.call(target);
|
8399
|
+
}
|
8400
|
+
},
|
8401
|
+
|
8402
|
+
invokeWithOnError: function(target, method, args, onError) {
|
8403
|
+
try {
|
8404
|
+
if (args && args.length > 0) {
|
8405
|
+
method.apply(target, args);
|
8406
|
+
} else {
|
8407
|
+
method.call(target);
|
8408
|
+
}
|
8409
|
+
} catch(error) {
|
8410
|
+
onError(error);
|
8411
|
+
}
|
8412
|
+
},
|
8413
|
+
|
8414
|
+
flush: function() {
|
8415
|
+
var queues = this.queues,
|
8416
|
+
queueNames = this.queueNames,
|
8417
|
+
queueName, queue, queueItems, priorQueueNameIndex,
|
8418
|
+
queueNameIndex = 0, numberOfQueues = queueNames.length,
|
8419
|
+
options = this.options,
|
8420
|
+
onError = options.onError || (options.onErrorTarget && options.onErrorTarget[options.onErrorMethod]),
|
8421
|
+
invoke = onError ? this.invokeWithOnError : this.invoke;
|
8422
|
+
|
8423
|
+
outerloop:
|
8424
|
+
while (queueNameIndex < numberOfQueues) {
|
8425
|
+
queueName = queueNames[queueNameIndex];
|
8426
|
+
queue = queues[queueName];
|
8427
|
+
queueItems = queue._queueBeingFlushed = queue._queue.slice();
|
8428
|
+
queue._queue = [];
|
8429
|
+
|
8430
|
+
var queueOptions = queue.options, // TODO: write a test for this
|
8431
|
+
before = queueOptions && queueOptions.before,
|
8432
|
+
after = queueOptions && queueOptions.after,
|
8433
|
+
target, method, args, stack,
|
8434
|
+
queueIndex = 0, numberOfQueueItems = queueItems.length;
|
8435
|
+
|
8436
|
+
if (numberOfQueueItems && before) { before(); }
|
8437
|
+
|
8438
|
+
while (queueIndex < numberOfQueueItems) {
|
8439
|
+
target = queueItems[queueIndex];
|
8440
|
+
method = queueItems[queueIndex+1];
|
8441
|
+
args = queueItems[queueIndex+2];
|
8442
|
+
stack = queueItems[queueIndex+3]; // Debugging assistance
|
8443
|
+
|
8444
|
+
if (typeof method === 'string') { method = target[method]; }
|
8445
|
+
|
8446
|
+
// method could have been nullified / canceled during flush
|
8447
|
+
if (method) {
|
8448
|
+
invoke(target, method, args, onError);
|
8449
|
+
}
|
8450
|
+
|
8451
|
+
queueIndex += 4;
|
8452
|
+
}
|
8453
|
+
|
8454
|
+
queue._queueBeingFlushed = null;
|
8455
|
+
if (numberOfQueueItems && after) { after(); }
|
8456
|
+
|
8457
|
+
if ((priorQueueNameIndex = indexOfPriorQueueWithActions(this, queueNameIndex)) !== -1) {
|
8458
|
+
queueNameIndex = priorQueueNameIndex;
|
8459
|
+
continue outerloop;
|
8460
|
+
}
|
8461
|
+
|
8462
|
+
queueNameIndex++;
|
8463
|
+
}
|
8464
|
+
}
|
8465
|
+
};
|
8466
|
+
|
8467
|
+
function indexOfPriorQueueWithActions(daq, currentQueueIndex) {
|
8468
|
+
var queueName, queue;
|
8469
|
+
|
8470
|
+
for (var i = 0, l = currentQueueIndex; i <= l; i++) {
|
8471
|
+
queueName = daq.queueNames[i];
|
8472
|
+
queue = daq.queues[queueName];
|
8473
|
+
if (queue._queue.length) { return i; }
|
8474
|
+
}
|
8475
|
+
|
8476
|
+
return -1;
|
8477
|
+
}
|
8478
|
+
|
8479
|
+
__exports__.DeferredActionQueues = DeferredActionQueues;
|
8480
|
+
});
|
8481
|
+
define("backburner/queue",
|
8482
|
+
["exports"],
|
8483
|
+
function(__exports__) {
|
8484
|
+
"use strict";
|
8485
|
+
function Queue(daq, name, options) {
|
8486
|
+
this.daq = daq;
|
8487
|
+
this.name = name;
|
8488
|
+
this.globalOptions = options;
|
8489
|
+
this.options = options[name];
|
8490
|
+
this._queue = [];
|
8491
|
+
}
|
8492
|
+
|
8493
|
+
Queue.prototype = {
|
8494
|
+
daq: null,
|
8495
|
+
name: null,
|
8496
|
+
options: null,
|
8497
|
+
onError: null,
|
8498
|
+
_queue: null,
|
8499
|
+
|
8500
|
+
push: function(target, method, args, stack) {
|
8501
|
+
var queue = this._queue;
|
8502
|
+
queue.push(target, method, args, stack);
|
8503
|
+
return {queue: this, target: target, method: method};
|
8504
|
+
},
|
8505
|
+
|
8506
|
+
pushUnique: function(target, method, args, stack) {
|
8507
|
+
var queue = this._queue, currentTarget, currentMethod, i, l;
|
8508
|
+
|
8509
|
+
for (i = 0, l = queue.length; i < l; i += 4) {
|
8510
|
+
currentTarget = queue[i];
|
8511
|
+
currentMethod = queue[i+1];
|
8512
|
+
|
8513
|
+
if (currentTarget === target && currentMethod === method) {
|
8514
|
+
queue[i+2] = args; // replace args
|
8515
|
+
queue[i+3] = stack; // replace stack
|
8516
|
+
return {queue: this, target: target, method: method};
|
8517
|
+
}
|
8518
|
+
}
|
8519
|
+
|
8520
|
+
this._queue.push(target, method, args, stack);
|
8521
|
+
return {queue: this, target: target, method: method};
|
8522
|
+
},
|
8523
|
+
|
8524
|
+
// TODO: remove me, only being used for Ember.run.sync
|
8525
|
+
flush: function() {
|
8526
|
+
var queue = this._queue,
|
8527
|
+
globalOptions = this.globalOptions,
|
8528
|
+
options = this.options,
|
8529
|
+
before = options && options.before,
|
8530
|
+
after = options && options.after,
|
8531
|
+
onError = globalOptions.onError || (globalOptions.onErrorTarget && globalOptions.onErrorTarget[globalOptions.onErrorMethod]),
|
8532
|
+
target, method, args, stack, i, l = queue.length;
|
8533
|
+
|
8534
|
+
if (l && before) { before(); }
|
8535
|
+
for (i = 0; i < l; i += 4) {
|
8536
|
+
target = queue[i];
|
8537
|
+
method = queue[i+1];
|
8538
|
+
args = queue[i+2];
|
8539
|
+
stack = queue[i+3]; // Debugging assistance
|
8540
|
+
|
8541
|
+
// TODO: error handling
|
8542
|
+
if (args && args.length > 0) {
|
8543
|
+
if (onError) {
|
8544
|
+
try {
|
8545
|
+
method.apply(target, args);
|
8546
|
+
} catch (e) {
|
8547
|
+
onError(e);
|
8548
|
+
}
|
8549
|
+
} else {
|
8550
|
+
method.apply(target, args);
|
8551
|
+
}
|
8552
|
+
} else {
|
8553
|
+
if (onError) {
|
8554
|
+
try {
|
8555
|
+
method.call(target);
|
8556
|
+
} catch(e) {
|
8557
|
+
onError(e);
|
8558
|
+
}
|
8559
|
+
} else {
|
8560
|
+
method.call(target);
|
8561
|
+
}
|
8562
|
+
}
|
8563
|
+
}
|
8564
|
+
if (l && after) { after(); }
|
8565
|
+
|
8566
|
+
// check if new items have been added
|
8567
|
+
if (queue.length > l) {
|
8568
|
+
this._queue = queue.slice(l);
|
8569
|
+
this.flush();
|
8570
|
+
} else {
|
8571
|
+
this._queue.length = 0;
|
8572
|
+
}
|
8573
|
+
},
|
8574
|
+
|
8575
|
+
cancel: function(actionToCancel) {
|
8576
|
+
var queue = this._queue, currentTarget, currentMethod, i, l;
|
8577
|
+
|
8578
|
+
for (i = 0, l = queue.length; i < l; i += 4) {
|
8579
|
+
currentTarget = queue[i];
|
8580
|
+
currentMethod = queue[i+1];
|
8581
|
+
|
8582
|
+
if (currentTarget === actionToCancel.target && currentMethod === actionToCancel.method) {
|
8583
|
+
queue.splice(i, 4);
|
8584
|
+
return true;
|
8585
|
+
}
|
8586
|
+
}
|
8587
|
+
|
8588
|
+
// if not found in current queue
|
8589
|
+
// could be in the queue that is being flushed
|
8590
|
+
queue = this._queueBeingFlushed;
|
8591
|
+
if (!queue) {
|
8592
|
+
return;
|
8593
|
+
}
|
8594
|
+
for (i = 0, l = queue.length; i < l; i += 4) {
|
8595
|
+
currentTarget = queue[i];
|
8596
|
+
currentMethod = queue[i+1];
|
8597
|
+
|
8598
|
+
if (currentTarget === actionToCancel.target && currentMethod === actionToCancel.method) {
|
8599
|
+
// don't mess with array during flush
|
8600
|
+
// just nullify the method
|
8601
|
+
queue[i+1] = null;
|
8602
|
+
return true;
|
8603
|
+
}
|
8604
|
+
}
|
8605
|
+
}
|
8606
|
+
};
|
8453
8607
|
|
8608
|
+
__exports__.Queue = Queue;
|
8609
|
+
});
|
8454
8610
|
define("ember-metal/watch_key",
|
8455
8611
|
["ember-metal/core","ember-metal/utils","ember-metal/platform","exports"],
|
8456
8612
|
function(__dependency1__, __dependency2__, __dependency3__, __exports__) {
|
@@ -11804,7 +11960,7 @@ define("container",
|
|
11804
11960
|
["container/container","exports"],
|
11805
11961
|
function(__dependency1__, __exports__) {
|
11806
11962
|
"use strict";
|
11807
|
-
|
11963
|
+
/*
|
11808
11964
|
Public api for the container is still in flux.
|
11809
11965
|
The public api, specified on the application namespace should be considered the stable api.
|
11810
11966
|
// @module container
|
@@ -12388,11 +12544,11 @@ define("ember-runtime/computed/reduce_computed",
|
|
12388
12544
|
var length = get(array, 'length');
|
12389
12545
|
// OPTIMIZE: we could stop updating once we hit the object whose observer
|
12390
12546
|
// fired; ie partially apply the transformations
|
12391
|
-
trackedArray.apply(function (observerContexts, offset, operation) {
|
12547
|
+
trackedArray.apply(function (observerContexts, offset, operation, operationIndex) {
|
12392
12548
|
// we don't even have observer contexts for removed items, even if we did,
|
12393
12549
|
// they no longer have any index in the array
|
12394
12550
|
if (operation === TrackedArray.DELETE) { return; }
|
12395
|
-
if (operation === TrackedArray.RETAIN && observerContexts.length === length && offset === 0) {
|
12551
|
+
if (operationIndex === 0 && operation === TrackedArray.RETAIN && observerContexts.length === length && offset === 0) {
|
12396
12552
|
// If we update many items we don't want to walk the array each time: we
|
12397
12553
|
// only need to update the indexes at most once per run loop.
|
12398
12554
|
return;
|
@@ -12643,10 +12799,11 @@ define("ember-runtime/computed/reduce_computed",
|
|
12643
12799
|
this.cacheable();
|
12644
12800
|
|
12645
12801
|
this.recomputeOnce = function(propertyName) {
|
12646
|
-
//
|
12647
|
-
|
12802
|
+
// What we really want to do is coalesce by <cp, propertyName>.
|
12803
|
+
// We need a form of `scheduleOnce` that accepts an arbitrary token to
|
12804
|
+
// coalesce by, in addition to the target and method.
|
12805
|
+
run.once(this, recompute, propertyName);
|
12648
12806
|
};
|
12649
|
-
|
12650
12807
|
var recompute = function(propertyName) {
|
12651
12808
|
var dependentKeys = cp._dependentKeys,
|
12652
12809
|
meta = cp._instanceMeta(this, propertyName),
|
@@ -13005,7 +13162,7 @@ define("ember-runtime/computed/reduce_computed",
|
|
13005
13162
|
}
|
13006
13163
|
|
13007
13164
|
return cp;
|
13008
|
-
}
|
13165
|
+
}
|
13009
13166
|
|
13010
13167
|
__exports__.reduceComputed = reduceComputed;
|
13011
13168
|
__exports__.ReduceComputedProperty = ReduceComputedProperty;
|
@@ -13049,6 +13206,7 @@ define("ember-runtime/computed/reduce_computed_macros",
|
|
13049
13206
|
@for Ember
|
13050
13207
|
@param {String} dependentKey
|
13051
13208
|
@return {Ember.ComputedProperty} computes the sum of all values in the dependentKey's array
|
13209
|
+
@since 1.4.0
|
13052
13210
|
*/
|
13053
13211
|
|
13054
13212
|
function sum(dependentKey){
|
@@ -14000,6 +14158,7 @@ define("ember-runtime/controllers/array_controller",
|
|
14000
14158
|
* from participating in the parentController hierarchy.
|
14001
14159
|
*
|
14002
14160
|
* @private
|
14161
|
+
* @property _isVirtual
|
14003
14162
|
* @type Boolean
|
14004
14163
|
*/
|
14005
14164
|
_isVirtual: false,
|
@@ -14085,8 +14244,14 @@ define("ember-runtime/controllers/controller",
|
|
14085
14244
|
For example, when a Handlebars template uses the `{{action}}` helper,
|
14086
14245
|
it will attempt to send the action to the view's controller's `target`.
|
14087
14246
|
|
14088
|
-
By default,
|
14089
|
-
instantiated
|
14247
|
+
By default, the value of the target property is set to the router, and
|
14248
|
+
is injected when a controller is instantiated. This injection is defined
|
14249
|
+
in Ember.Application#buildContainer, and is applied as part of the
|
14250
|
+
applications initialization process. It can also be set after a controller
|
14251
|
+
has been instantiated, for instance when using the render helper in a
|
14252
|
+
template, or when a controller is used as an `itemController`. In most
|
14253
|
+
cases the `target` property will automatically be set to the logical
|
14254
|
+
consumer of actions for the controller.
|
14090
14255
|
|
14091
14256
|
@property target
|
14092
14257
|
@default null
|
@@ -14514,6 +14679,8 @@ define("ember-runtime/ext/rsvp",
|
|
14514
14679
|
} else {
|
14515
14680
|
throw error;
|
14516
14681
|
}
|
14682
|
+
} else if (Ember.onerror) {
|
14683
|
+
Ember.onerror(error);
|
14517
14684
|
} else {
|
14518
14685
|
Logger.error(error.stack);
|
14519
14686
|
Ember.assert(error, false);
|
@@ -14658,7 +14825,7 @@ define("ember-runtime/keys",
|
|
14658
14825
|
@return {Array} Array containing keys of obj
|
14659
14826
|
*/
|
14660
14827
|
var keys = Object.keys;
|
14661
|
-
if (keys || create.isSimulated) {
|
14828
|
+
if (!keys || create.isSimulated) {
|
14662
14829
|
var prototypeProperties = [
|
14663
14830
|
'constructor',
|
14664
14831
|
'hasOwnProperty',
|
@@ -16326,6 +16493,7 @@ define("ember-runtime/mixins/enumerable",
|
|
16326
16493
|
@param {String} key the property to test
|
16327
16494
|
@param {String} [value] optional value to test against.
|
16328
16495
|
@return {Boolean}
|
16496
|
+
@since 1.3.0
|
16329
16497
|
*/
|
16330
16498
|
isEvery: function(key, value) {
|
16331
16499
|
return this.every(apply(this, iter, arguments));
|
@@ -16428,6 +16596,7 @@ define("ember-runtime/mixins/enumerable",
|
|
16428
16596
|
@param {String} key the property to test
|
16429
16597
|
@param {String} [value] optional value to test against.
|
16430
16598
|
@return {Boolean} `true` if the passed function returns `true` for any item
|
16599
|
+
@since 1.3.0
|
16431
16600
|
*/
|
16432
16601
|
isAny: function(key, value) {
|
16433
16602
|
return this.any(apply(this, iter, arguments));
|
@@ -16746,6 +16915,7 @@ define("ember-runtime/mixins/enumerable",
|
|
16746
16915
|
@method sortBy
|
16747
16916
|
@param {String} property name(s) to sort on
|
16748
16917
|
@return {Array} The sorted array.
|
16918
|
+
@since 1.2.0
|
16749
16919
|
*/
|
16750
16920
|
sortBy: function() {
|
16751
16921
|
var sortKeys = arguments;
|
@@ -17881,7 +18051,6 @@ define("ember-runtime/mixins/observable",
|
|
17881
18051
|
@param {String} key The key to observer
|
17882
18052
|
@param {Object} target The target object to invoke
|
17883
18053
|
@param {String|Function} method The method to invoke.
|
17884
|
-
@return {Ember.Object} self
|
17885
18054
|
*/
|
17886
18055
|
addObserver: function(key, target, method) {
|
17887
18056
|
addObserver(this, key, target, method);
|
@@ -17896,7 +18065,6 @@ define("ember-runtime/mixins/observable",
|
|
17896
18065
|
@param {String} key The key to observer
|
17897
18066
|
@param {Object} target The target object to invoke
|
17898
18067
|
@param {String|Function} method The method to invoke.
|
17899
|
-
@return {Ember.Observable} receiver
|
17900
18068
|
*/
|
17901
18069
|
removeObserver: function(key, target, method) {
|
17902
18070
|
removeObserver(this, key, target, method);
|
@@ -18194,6 +18362,7 @@ define("ember-runtime/mixins/promise_proxy",
|
|
18194
18362
|
@method catch
|
18195
18363
|
@param {Function} callback
|
18196
18364
|
@return {RSVP.Promise}
|
18365
|
+
@since 1.3.0
|
18197
18366
|
*/
|
18198
18367
|
'catch': promiseAlias('catch'),
|
18199
18368
|
|
@@ -18205,6 +18374,7 @@ define("ember-runtime/mixins/promise_proxy",
|
|
18205
18374
|
@method finally
|
18206
18375
|
@param {Function} callback
|
18207
18376
|
@return {RSVP.Promise}
|
18377
|
+
@since 1.3.0
|
18208
18378
|
*/
|
18209
18379
|
'finally': promiseAlias('finally')
|
18210
18380
|
|
@@ -18352,12 +18522,12 @@ define("ember-runtime/mixins/sortable",
|
|
18352
18522
|
|
18353
18523
|
forEach(sortProperties, function(propertyName) {
|
18354
18524
|
if (result === 0) {
|
18355
|
-
result = sortFunction(get(item1, propertyName), get(item2, propertyName));
|
18525
|
+
result = sortFunction.call(this, get(item1, propertyName), get(item2, propertyName));
|
18356
18526
|
if ((result !== 0) && !sortAscending) {
|
18357
18527
|
result = (-1) * result;
|
18358
18528
|
}
|
18359
18529
|
}
|
18360
|
-
});
|
18530
|
+
}, this);
|
18361
18531
|
|
18362
18532
|
return result;
|
18363
18533
|
},
|
@@ -18423,12 +18593,20 @@ define("ember-runtime/mixins/sortable",
|
|
18423
18593
|
this._super();
|
18424
18594
|
}),
|
18425
18595
|
|
18596
|
+
sortPropertiesWillChange: beforeObserver('sortProperties', function() {
|
18597
|
+
this._lastSortAscending = undefined;
|
18598
|
+
}),
|
18599
|
+
|
18600
|
+
sortPropertiesDidChange: observer('sortProperties', function() {
|
18601
|
+
this._lastSortAscending = undefined;
|
18602
|
+
}),
|
18603
|
+
|
18426
18604
|
sortAscendingWillChange: beforeObserver('sortAscending', function() {
|
18427
18605
|
this._lastSortAscending = get(this, 'sortAscending');
|
18428
18606
|
}),
|
18429
18607
|
|
18430
18608
|
sortAscendingDidChange: observer('sortAscending', function() {
|
18431
|
-
if (get(this, 'sortAscending') !== this._lastSortAscending) {
|
18609
|
+
if (this._lastSortAscending !== undefined && get(this, 'sortAscending') !== this._lastSortAscending) {
|
18432
18610
|
var arrangedContent = get(this, 'arrangedContent');
|
18433
18611
|
arrangedContent.reverseObjects();
|
18434
18612
|
}
|
@@ -18613,7 +18791,7 @@ define("ember-runtime/mixins/target_action_support",
|
|
18613
18791
|
});
|
18614
18792
|
```
|
18615
18793
|
|
18616
|
-
The `actionContext` defaults to the object you mixing `TargetActionSupport` into.
|
18794
|
+
The `actionContext` defaults to the object you are mixing `TargetActionSupport` into.
|
18617
18795
|
But `target` and `action` must be specified either as properties or with the argument
|
18618
18796
|
to `triggerAction`, or a combination:
|
18619
18797
|
|
@@ -20202,7 +20380,7 @@ define("ember-runtime/system/namespace",
|
|
20202
20380
|
if (name) { return name; }
|
20203
20381
|
|
20204
20382
|
findNamespaces();
|
20205
|
-
return this[
|
20383
|
+
return this[NAME_KEY];
|
20206
20384
|
},
|
20207
20385
|
|
20208
20386
|
nameClasses: function() {
|
@@ -20278,32 +20456,30 @@ define("ember-runtime/system/namespace",
|
|
20278
20456
|
paths.length = idx; // cut out last item
|
20279
20457
|
}
|
20280
20458
|
|
20459
|
+
var STARTS_WITH_UPPERCASE = /^[A-Z]/;
|
20460
|
+
|
20281
20461
|
function findNamespaces() {
|
20282
20462
|
var lookup = Ember.lookup, obj, isNamespace;
|
20283
20463
|
|
20284
20464
|
if (Namespace.PROCESSED) { return; }
|
20285
20465
|
|
20286
20466
|
for (var prop in lookup) {
|
20287
|
-
//
|
20288
|
-
if (prop
|
20467
|
+
// Only process entities that start with uppercase A-Z
|
20468
|
+
if (!STARTS_WITH_UPPERCASE.test(prop)) { continue; }
|
20289
20469
|
|
20290
|
-
// get(window.globalStorage, 'isNamespace') would try to read the storage for domain isNamespace and cause exception in Firefox.
|
20291
|
-
// globalStorage is a storage obsoleted by the WhatWG storage specification. See https://developer.mozilla.org/en/DOM/Storage#globalStorage
|
20292
|
-
if (prop === "globalStorage" && lookup.StorageList && lookup.globalStorage instanceof lookup.StorageList) { continue; }
|
20293
20470
|
// Unfortunately, some versions of IE don't support window.hasOwnProperty
|
20294
20471
|
if (lookup.hasOwnProperty && !lookup.hasOwnProperty(prop)) { continue; }
|
20295
20472
|
|
20296
20473
|
// At times we are not allowed to access certain properties for security reasons.
|
20297
20474
|
// There are also times where even if we can access them, we are not allowed to access their properties.
|
20298
20475
|
try {
|
20299
|
-
obj =
|
20476
|
+
obj = lookup[prop];
|
20300
20477
|
isNamespace = obj && obj.isNamespace;
|
20301
20478
|
} catch (e) {
|
20302
20479
|
continue;
|
20303
20480
|
}
|
20304
20481
|
|
20305
20482
|
if (isNamespace) {
|
20306
|
-
Ember.deprecate("Namespaces should not begin with lowercase.", /^[A-Z]/.test(prop));
|
20307
20483
|
obj[NAME_KEY] = prop;
|
20308
20484
|
}
|
20309
20485
|
}
|
@@ -21740,7 +21916,7 @@ define("ember-runtime/system/tracked_array",
|
|
21740
21916
|
} else {
|
21741
21917
|
this._operations = [];
|
21742
21918
|
}
|
21743
|
-
}
|
21919
|
+
}
|
21744
21920
|
|
21745
21921
|
TrackedArray.RETAIN = RETAIN;
|
21746
21922
|
TrackedArray.INSERT = INSERT;
|
@@ -21838,8 +22014,8 @@ define("ember-runtime/system/tracked_array",
|
|
21838
22014
|
var items = [],
|
21839
22015
|
offset = 0;
|
21840
22016
|
|
21841
|
-
forEach(this._operations, function (arrayOperation) {
|
21842
|
-
callback(arrayOperation.items, offset, arrayOperation.type);
|
22017
|
+
forEach(this._operations, function (arrayOperation, operationIndex) {
|
22018
|
+
callback(arrayOperation.items, offset, arrayOperation.type, operationIndex);
|
21843
22019
|
|
21844
22020
|
if (arrayOperation.type !== DELETE) {
|
21845
22021
|
offset += arrayOperation.count;
|
@@ -22888,6 +23064,8 @@ define("container/container",
|
|
22888
23064
|
} else {
|
22889
23065
|
throw error;
|
22890
23066
|
}
|
23067
|
+
} else if (Ember.onerror) {
|
23068
|
+
Ember.onerror(error);
|
22891
23069
|
} else {
|
22892
23070
|
Logger.error(error.stack);
|
22893
23071
|
Ember.assert(error, false);
|