ember-source 2.16.0.beta.1 → 2.16.0.beta.2
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-runtime.js +110 -77
- data/dist/ember-template-compiler.js +174 -132
- data/dist/ember-testing.js +1 -1
- data/dist/ember-tests.js +1329 -1251
- data/dist/ember-tests.prod.js +1279 -1249
- data/dist/ember.debug.js +631 -424
- data/dist/ember.min.js +204 -198
- data/dist/ember.prod.js +650 -436
- metadata +3 -3
data/dist/ember.debug.js
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
* Portions Copyright 2008-2011 Apple Inc. All rights reserved.
|
7
7
|
* @license Licensed under MIT license
|
8
8
|
* See https://raw.github.com/emberjs/ember.js/master/LICENSE
|
9
|
-
* @version 2.16.0-beta.
|
9
|
+
* @version 2.16.0-beta.2
|
10
10
|
*/
|
11
11
|
|
12
12
|
var enifed, requireModule, Ember;
|
@@ -9157,7 +9157,6 @@ enifed('backburner', ['exports', 'ember-babel'], function (exports, _emberBabel)
|
|
9157
9157
|
this.name = name;
|
9158
9158
|
this.options = options;
|
9159
9159
|
this.globalOptions = globalOptions;
|
9160
|
-
this.globalOptions.onError = getOnError(globalOptions);
|
9161
9160
|
}
|
9162
9161
|
|
9163
9162
|
Queue.prototype.push = function push(target, method, args, stack) {
|
@@ -9192,8 +9191,6 @@ enifed('backburner', ['exports', 'ember-babel'], function (exports, _emberBabel)
|
|
9192
9191
|
var method = void 0;
|
9193
9192
|
var args = void 0;
|
9194
9193
|
var errorRecordedForStack = void 0;
|
9195
|
-
var onError = this.globalOptions.onError;
|
9196
|
-
var invoke = onError ? this.invokeWithOnError : this.invoke;
|
9197
9194
|
this.targetQueues = Object.create(null);
|
9198
9195
|
var queueItems = void 0;
|
9199
9196
|
if (this._queueBeingFlushed.length > 0) {
|
@@ -9205,33 +9202,38 @@ enifed('backburner', ['exports', 'ember-babel'], function (exports, _emberBabel)
|
|
9205
9202
|
if (before) {
|
9206
9203
|
before();
|
9207
9204
|
}
|
9208
|
-
|
9209
|
-
|
9210
|
-
|
9211
|
-
|
9212
|
-
|
9213
|
-
|
9214
|
-
|
9215
|
-
|
9216
|
-
|
9217
|
-
|
9218
|
-
//
|
9219
|
-
|
9220
|
-
|
9221
|
-
|
9222
|
-
|
9223
|
-
|
9224
|
-
|
9225
|
-
|
9226
|
-
|
9227
|
-
|
9228
|
-
|
9229
|
-
|
9230
|
-
|
9231
|
-
|
9232
|
-
|
9233
|
-
|
9234
|
-
|
9205
|
+
var invoke = void 0;
|
9206
|
+
if (queueItems.length > 0) {
|
9207
|
+
var onError = getOnError(this.globalOptions);
|
9208
|
+
invoke = onError ? this.invokeWithOnError : this.invoke;
|
9209
|
+
for (var i = this.index; i < queueItems.length; i += 4) {
|
9210
|
+
this.index += 4;
|
9211
|
+
target = queueItems[i];
|
9212
|
+
method = queueItems[i + 1];
|
9213
|
+
args = queueItems[i + 2];
|
9214
|
+
errorRecordedForStack = queueItems[i + 3]; // Debugging assistance
|
9215
|
+
// method could have been nullified / canceled during flush
|
9216
|
+
if (method !== null) {
|
9217
|
+
//
|
9218
|
+
// ** Attention intrepid developer **
|
9219
|
+
//
|
9220
|
+
// To find out the stack of this task when it was scheduled onto
|
9221
|
+
// the run loop, add the following to your app.js:
|
9222
|
+
//
|
9223
|
+
// Ember.run.backburner.DEBUG = true; // NOTE: This slows your app, don't leave it on in production.
|
9224
|
+
//
|
9225
|
+
// Once that is in place, when you are at a breakpoint and navigate
|
9226
|
+
// here in the stack explorer, you can look at `errorRecordedForStack.stack`,
|
9227
|
+
// which will be the captured stack when this job was scheduled.
|
9228
|
+
//
|
9229
|
+
// One possible long-term solution is the following Chrome issue:
|
9230
|
+
// https://bugs.chromium.org/p/chromium/issues/detail?id=332624
|
9231
|
+
//
|
9232
|
+
invoke(target, method, args, onError, errorRecordedForStack);
|
9233
|
+
}
|
9234
|
+
if (this.index !== this._queueBeingFlushed.length && this.globalOptions.mustYield && this.globalOptions.mustYield()) {
|
9235
|
+
return 1 /* Pause */;
|
9236
|
+
}
|
9235
9237
|
}
|
9236
9238
|
}
|
9237
9239
|
if (after) {
|
@@ -9432,7 +9434,6 @@ enifed('backburner', ['exports', 'ember-babel'], function (exports, _emberBabel)
|
|
9432
9434
|
|
9433
9435
|
// accepts a function that when invoked will return an iterator
|
9434
9436
|
// iterator will drain until completion
|
9435
|
-
// accepts a function that when invoked will return an iterator
|
9436
9437
|
var iteratorDrain = function (fn) {
|
9437
9438
|
var iterator = fn();
|
9438
9439
|
var result = iterator.next();
|
@@ -9442,7 +9443,6 @@ enifed('backburner', ['exports', 'ember-babel'], function (exports, _emberBabel)
|
|
9442
9443
|
}
|
9443
9444
|
};
|
9444
9445
|
|
9445
|
-
var now = Date.now;
|
9446
9446
|
var noop = function () {};
|
9447
9447
|
|
9448
9448
|
var Backburner = function () {
|
@@ -9483,6 +9483,9 @@ enifed('backburner', ['exports', 'ember-babel'], function (exports, _emberBabel)
|
|
9483
9483
|
return platform.setTimeout(fn, 0);
|
9484
9484
|
};
|
9485
9485
|
platform.clearNext = _platform.clearNext || platform.clearTimeout;
|
9486
|
+
platform.now = _platform.now || function () {
|
9487
|
+
return Date.now();
|
9488
|
+
};
|
9486
9489
|
this._platform = platform;
|
9487
9490
|
this._boundRunExpiredTimers = function () {
|
9488
9491
|
_this._runExpiredTimers();
|
@@ -9768,7 +9771,7 @@ enifed('backburner', ['exports', 'ember-babel'], function (exports, _emberBabel)
|
|
9768
9771
|
}
|
9769
9772
|
}
|
9770
9773
|
var onError = getOnError(this.options);
|
9771
|
-
var executeAt = now() + wait;
|
9774
|
+
var executeAt = this._platform.now() + wait;
|
9772
9775
|
var fn = void 0;
|
9773
9776
|
if (onError) {
|
9774
9777
|
fn = function () {
|
@@ -9977,7 +9980,7 @@ enifed('backburner', ['exports', 'ember-babel'], function (exports, _emberBabel)
|
|
9977
9980
|
var l = timers.length;
|
9978
9981
|
var i = 0;
|
9979
9982
|
var defaultQueue = this.options.defaultQueue;
|
9980
|
-
var n = now();
|
9983
|
+
var n = this._platform.now();
|
9981
9984
|
for (; i < l; i += 2) {
|
9982
9985
|
var executeAt = timers[i];
|
9983
9986
|
if (executeAt <= n) {
|
@@ -10009,7 +10012,7 @@ enifed('backburner', ['exports', 'ember-babel'], function (exports, _emberBabel)
|
|
10009
10012
|
return;
|
10010
10013
|
}
|
10011
10014
|
var minExpiresAt = this._timers[0];
|
10012
|
-
var n = now();
|
10015
|
+
var n = this._platform.now();
|
10013
10016
|
var wait = Math.max(0, minExpiresAt - n);
|
10014
10017
|
this._timerTimeoutId = this._platform.setTimeout(this._boundRunExpiredTimers, wait);
|
10015
10018
|
};
|
@@ -10031,7 +10034,7 @@ enifed('backburner', ['exports', 'ember-babel'], function (exports, _emberBabel)
|
|
10031
10034
|
|
10032
10035
|
exports.default = Backburner;
|
10033
10036
|
});
|
10034
|
-
enifed('container', ['exports', 'ember-babel', 'ember-utils', 'ember-debug', 'ember/features'
|
10037
|
+
enifed('container', ['exports', 'ember-babel', 'ember-utils', 'ember-debug', 'ember/features'], function (exports, _emberBabel, _emberUtils, _emberDebug, _features) {
|
10035
10038
|
'use strict';
|
10036
10039
|
|
10037
10040
|
exports.Container = exports.privatize = exports.Registry = undefined;
|
@@ -10413,7 +10416,7 @@ enifed('container', ['exports', 'ember-babel', 'ember-utils', 'ember-debug', 'em
|
|
10413
10416
|
if (typeof this.class._initFactory === 'function') {
|
10414
10417
|
this.class._initFactory(this);
|
10415
10418
|
} else {
|
10416
|
-
// in the non-
|
10419
|
+
// in the non-EmberObject case we need to still setOwner
|
10417
10420
|
// this is required for supporting glimmer environment and
|
10418
10421
|
// template instantiation which rely heavily on
|
10419
10422
|
// `options[OWNER]` being passed into `create`
|
@@ -12351,7 +12354,7 @@ enifed('ember-application/system/engine-parent', ['exports', 'ember-utils'], fun
|
|
12351
12354
|
@param {EngineInstance} engine An engine instance.
|
12352
12355
|
@return {EngineInstance} The parent engine instance.
|
12353
12356
|
@for Ember
|
12354
|
-
@
|
12357
|
+
@private
|
12355
12358
|
*/
|
12356
12359
|
function getEngineParent(engine) {
|
12357
12360
|
return engine[ENGINE_PARENT];
|
@@ -12499,65 +12502,83 @@ enifed('ember-application/system/engine', ['exports', 'ember-babel', 'ember-util
|
|
12499
12502
|
* `name` allows you to specify under which name the initializer is registered.
|
12500
12503
|
This must be a unique name, as trying to register two initializers with the
|
12501
12504
|
same name will result in an error.
|
12502
|
-
```
|
12503
|
-
|
12504
|
-
|
12505
|
-
|
12506
|
-
|
12507
|
-
|
12508
|
-
|
12505
|
+
```app/initializer/named-initializer.js
|
12506
|
+
import { debug } from '@ember/debug';
|
12507
|
+
export function initialize() {
|
12508
|
+
debug('Running namedInitializer!');
|
12509
|
+
}
|
12510
|
+
export default {
|
12511
|
+
name: 'named-initializer',
|
12512
|
+
initialize
|
12513
|
+
};
|
12509
12514
|
```
|
12510
12515
|
* `before` and `after` are used to ensure that this initializer is ran prior
|
12511
12516
|
or after the one identified by the value. This value can be a single string
|
12512
12517
|
or an array of strings, referencing the `name` of other initializers.
|
12513
12518
|
An example of ordering initializers, we create an initializer named `first`:
|
12514
|
-
```
|
12515
|
-
|
12519
|
+
```app/initializer/first.js
|
12520
|
+
import { debug } from '@ember/debug';
|
12521
|
+
export function initialize() {
|
12522
|
+
debug('First initializer!');
|
12523
|
+
}
|
12524
|
+
export default {
|
12516
12525
|
name: 'first',
|
12517
|
-
|
12518
|
-
|
12519
|
-
|
12520
|
-
|
12521
|
-
|
12526
|
+
initialize
|
12527
|
+
};
|
12528
|
+
```
|
12529
|
+
```bash
|
12530
|
+
// DEBUG: First initializer!
|
12522
12531
|
```
|
12523
12532
|
We add another initializer named `second`, specifying that it should run
|
12524
12533
|
after the initializer named `first`:
|
12525
|
-
```
|
12526
|
-
|
12534
|
+
```app/initializer/second.js
|
12535
|
+
import { debug } from '@ember/debug';
|
12536
|
+
export function initialize() {
|
12537
|
+
debug('Second initializer!');
|
12538
|
+
}
|
12539
|
+
export default {
|
12527
12540
|
name: 'second',
|
12528
12541
|
after: 'first',
|
12529
|
-
|
12530
|
-
|
12531
|
-
|
12532
|
-
|
12533
|
-
|
12542
|
+
initialize
|
12543
|
+
};
|
12544
|
+
```
|
12545
|
+
```
|
12546
|
+
// DEBUG: First initializer!
|
12534
12547
|
// DEBUG: Second initializer!
|
12535
12548
|
```
|
12536
12549
|
Afterwards we add a further initializer named `pre`, this time specifying
|
12537
12550
|
that it should run before the initializer named `first`:
|
12538
|
-
```
|
12539
|
-
|
12551
|
+
```app/initializer/pre.js
|
12552
|
+
import { debug } from '@ember/debug';
|
12553
|
+
export function initialize() {
|
12554
|
+
debug('Pre initializer!');
|
12555
|
+
}
|
12556
|
+
export default {
|
12540
12557
|
name: 'pre',
|
12541
12558
|
before: 'first',
|
12542
|
-
|
12543
|
-
|
12544
|
-
|
12545
|
-
|
12546
|
-
|
12559
|
+
initialize
|
12560
|
+
};
|
12561
|
+
```
|
12562
|
+
```bash
|
12563
|
+
// DEBUG: Pre initializer!
|
12547
12564
|
// DEBUG: First initializer!
|
12548
12565
|
// DEBUG: Second initializer!
|
12549
12566
|
```
|
12550
12567
|
Finally we add an initializer named `post`, specifying it should run after
|
12551
12568
|
both the `first` and the `second` initializers:
|
12552
|
-
```
|
12553
|
-
|
12569
|
+
```app/initializer/post.js
|
12570
|
+
import { debug } from '@ember/debug';
|
12571
|
+
export function initialize() {
|
12572
|
+
debug('Post initializer!');
|
12573
|
+
}
|
12574
|
+
export default {
|
12554
12575
|
name: 'post',
|
12555
12576
|
after: ['first', 'second'],
|
12556
|
-
|
12557
|
-
|
12558
|
-
|
12559
|
-
|
12560
|
-
|
12577
|
+
initialize
|
12578
|
+
};
|
12579
|
+
```
|
12580
|
+
```bash
|
12581
|
+
// DEBUG: Pre initializer!
|
12561
12582
|
// DEBUG: First initializer!
|
12562
12583
|
// DEBUG: Second initializer!
|
12563
12584
|
// DEBUG: Post initializer!
|
@@ -12565,13 +12586,16 @@ enifed('ember-application/system/engine', ['exports', 'ember-babel', 'ember-util
|
|
12565
12586
|
* `initialize` is a callback function that receives one argument,
|
12566
12587
|
`application`, on which you can operate.
|
12567
12588
|
Example of using `application` to register an adapter:
|
12568
|
-
```
|
12569
|
-
|
12570
|
-
|
12571
|
-
|
12572
|
-
|
12573
|
-
|
12574
|
-
|
12589
|
+
```app/initializer/api-adapter.js
|
12590
|
+
import ApiAdapter from '../utils/api-adapter';
|
12591
|
+
export function initialize(application) {
|
12592
|
+
application.register('api-adapter:main', ApiAdapter);
|
12593
|
+
}
|
12594
|
+
export default {
|
12595
|
+
name: 'post',
|
12596
|
+
after: ['first', 'second'],
|
12597
|
+
initialize
|
12598
|
+
};
|
12575
12599
|
```
|
12576
12600
|
@method initializer
|
12577
12601
|
@param initializer {Object}
|
@@ -12591,13 +12615,15 @@ enifed('ember-application/system/engine', ['exports', 'ember-babel', 'ember-util
|
|
12591
12615
|
* `name` allows you to specify under which name the instanceInitializer is
|
12592
12616
|
registered. This must be a unique name, as trying to register two
|
12593
12617
|
instanceInitializer with the same name will result in an error.
|
12594
|
-
```
|
12595
|
-
|
12596
|
-
|
12597
|
-
|
12598
|
-
|
12599
|
-
|
12600
|
-
|
12618
|
+
```app/initializer/named-instance-initializer.js
|
12619
|
+
import { debug } from '@ember/debug';
|
12620
|
+
export function initialize() {
|
12621
|
+
debug('Running named-instance-initializer!');
|
12622
|
+
}
|
12623
|
+
export default {
|
12624
|
+
name: 'named-instance-initializer',
|
12625
|
+
initialize
|
12626
|
+
};
|
12601
12627
|
```
|
12602
12628
|
* `before` and `after` are used to ensure that this initializer is ran prior
|
12603
12629
|
or after the one identified by the value. This value can be a single string
|
@@ -12605,10 +12631,9 @@ enifed('ember-application/system/engine', ['exports', 'ember-babel', 'ember-util
|
|
12605
12631
|
* See Ember.Application.initializer for discussion on the usage of before
|
12606
12632
|
and after.
|
12607
12633
|
Example instanceInitializer to preload data into the store.
|
12608
|
-
```
|
12609
|
-
|
12610
|
-
|
12611
|
-
initialize: function(application) {
|
12634
|
+
```app/initializer/preload-data.js
|
12635
|
+
import $ from 'jquery';
|
12636
|
+
export function initialize(application) {
|
12612
12637
|
var userConfig, userConfigEncoded, store;
|
12613
12638
|
// We have a HTML escaped JSON representation of the user's basic
|
12614
12639
|
// configuration generated server side and stored in the DOM of the main
|
@@ -12617,17 +12642,19 @@ enifed('ember-application/system/engine', ['exports', 'ember-babel', 'ember-util
|
|
12617
12642
|
// needed for immediate rendering of the page. Keep in mind, this data,
|
12618
12643
|
// like all local models and data can be manipulated by the user, so it
|
12619
12644
|
// should not be relied upon for security or authorization.
|
12620
|
-
|
12621
|
-
|
12622
|
-
|
12623
|
-
// Unescape the text, then parse the resulting JSON into a real object
|
12645
|
+
// Grab the encoded data from the meta tag
|
12646
|
+
userConfigEncoded = $('head meta[name=app-user-config]').attr('content');
|
12647
|
+
// Unescape the text, then parse the resulting JSON into a real object
|
12624
12648
|
userConfig = JSON.parse(unescape(userConfigEncoded));
|
12625
|
-
|
12649
|
+
// Lookup the store
|
12626
12650
|
store = application.lookup('service:store');
|
12627
|
-
|
12651
|
+
// Push the encoded JSON into the store
|
12628
12652
|
store.pushPayload(userConfig);
|
12629
|
-
|
12630
|
-
|
12653
|
+
}
|
12654
|
+
export default {
|
12655
|
+
name: 'named-instance-initializer',
|
12656
|
+
initialize
|
12657
|
+
};
|
12631
12658
|
```
|
12632
12659
|
@method instanceInitializer
|
12633
12660
|
@param instanceInitializer
|
@@ -12655,7 +12682,7 @@ enifed('ember-application/system/engine', ['exports', 'ember-babel', 'ember-util
|
|
12655
12682
|
|
12656
12683
|
/**
|
12657
12684
|
Set this to provide an alternate class to `Ember.DefaultResolver`
|
12658
|
-
|
12685
|
+
@deprecated Use 'Resolver' instead
|
12659
12686
|
@property resolver
|
12660
12687
|
@public
|
12661
12688
|
*/
|
@@ -12808,12 +12835,16 @@ enifed('ember-application/system/resolver', ['exports', 'ember-utils', 'ember-me
|
|
12808
12835
|
in a subclass. For example, you could enhance how a template
|
12809
12836
|
is resolved like so:
|
12810
12837
|
|
12811
|
-
```
|
12812
|
-
|
12813
|
-
|
12814
|
-
|
12838
|
+
```app/app.js
|
12839
|
+
import Application from '@ember/application';
|
12840
|
+
import GlobalsResolver from '@ember/application/globals-resolver';
|
12841
|
+
|
12842
|
+
App = Application.create({
|
12843
|
+
Resolver: GlobalsResolver.extend({
|
12844
|
+
resolveTemplate(parsedName) {
|
12815
12845
|
let resolvedTemplate = this._super(parsedName);
|
12816
12846
|
if (resolvedTemplate) { return resolvedTemplate; }
|
12847
|
+
|
12817
12848
|
return Ember.TEMPLATES['not_found'];
|
12818
12849
|
}
|
12819
12850
|
})
|
@@ -13111,10 +13142,10 @@ enifed('ember-application/system/resolver', ['exports', 'ember-utils', 'ember-me
|
|
13111
13142
|
|
13112
13143
|
|
13113
13144
|
/**
|
13114
|
-
|
13115
|
-
|
13116
|
-
|
13117
|
-
|
13145
|
+
@method _logLookup
|
13146
|
+
@param {Boolean} found
|
13147
|
+
@param {Object} parsedName
|
13148
|
+
@private
|
13118
13149
|
*/
|
13119
13150
|
_logLookup: function (found, parsedName) {
|
13120
13151
|
var symbol = found ? '[✓]' : '[ ]';
|
@@ -13131,11 +13162,11 @@ enifed('ember-application/system/resolver', ['exports', 'ember-utils', 'ember-me
|
|
13131
13162
|
|
13132
13163
|
|
13133
13164
|
/**
|
13134
|
-
|
13135
|
-
|
13136
|
-
|
13137
|
-
|
13138
|
-
|
13165
|
+
Used to iterate all items of a given type.
|
13166
|
+
@method knownForType
|
13167
|
+
@param {String} type the type to search for
|
13168
|
+
@private
|
13169
|
+
*/
|
13139
13170
|
knownForType: function (type) {
|
13140
13171
|
var namespace = (0, _emberMetal.get)(this, 'namespace');
|
13141
13172
|
var suffix = _emberRuntime.String.classify(type);
|
@@ -13158,16 +13189,15 @@ enifed('ember-application/system/resolver', ['exports', 'ember-utils', 'ember-me
|
|
13158
13189
|
|
13159
13190
|
|
13160
13191
|
/**
|
13161
|
-
|
13162
|
-
|
13163
|
-
|
13164
|
-
|
13165
|
-
|
13166
|
-
|
13167
|
-
|
13168
|
-
|
13169
|
-
|
13170
|
-
|
13192
|
+
Converts provided name from the backing namespace into a container lookup name.
|
13193
|
+
Examples:
|
13194
|
+
* App.FooBarHelper -> helper:foo-bar
|
13195
|
+
* App.THelper -> helper:t
|
13196
|
+
@method translateToContainerFullname
|
13197
|
+
@param {String} type
|
13198
|
+
@param {String} name
|
13199
|
+
@private
|
13200
|
+
*/
|
13171
13201
|
translateToContainerFullname: function (type, name) {
|
13172
13202
|
var suffix = _emberRuntime.String.classify(type);
|
13173
13203
|
var namePrefix = name.slice(0, suffix.length * -1);
|
@@ -15964,9 +15994,9 @@ enifed('ember-glimmer/component', ['exports', 'ember-utils', 'ember-views', 'emb
|
|
15964
15994
|
`hello` for the `person-profile` component:
|
15965
15995
|
|
15966
15996
|
```app/components/person-profile.js
|
15967
|
-
import
|
15997
|
+
import Component from '@ember/component';
|
15968
15998
|
|
15969
|
-
export default
|
15999
|
+
export default Component.extend({
|
15970
16000
|
actions: {
|
15971
16001
|
hello(name) {
|
15972
16002
|
console.log("Hello", name);
|
@@ -15998,9 +16028,9 @@ enifed('ember-glimmer/component', ['exports', 'ember-utils', 'ember-views', 'emb
|
|
15998
16028
|
The following component class:
|
15999
16029
|
|
16000
16030
|
```app/components/emphasized-paragraph.js
|
16001
|
-
import
|
16031
|
+
import Component from '@ember/component';
|
16002
16032
|
|
16003
|
-
export default
|
16033
|
+
export default Component.extend({
|
16004
16034
|
tagName: 'em'
|
16005
16035
|
});
|
16006
16036
|
```
|
@@ -16018,9 +16048,9 @@ enifed('ember-glimmer/component', ['exports', 'ember-utils', 'ember-views', 'emb
|
|
16018
16048
|
`classNames` property that is set to an array of strings:
|
16019
16049
|
|
16020
16050
|
```app/components/my-widget.js
|
16021
|
-
import
|
16051
|
+
import Component from '@ember/component';
|
16022
16052
|
|
16023
|
-
export default
|
16053
|
+
export default Component.extend({
|
16024
16054
|
classNames: ['my-class', 'my-other-class']
|
16025
16055
|
});
|
16026
16056
|
```
|
@@ -16037,9 +16067,9 @@ enifed('ember-glimmer/component', ['exports', 'ember-utils', 'ember-views', 'emb
|
|
16037
16067
|
attribute. These properties can be computed properties:
|
16038
16068
|
|
16039
16069
|
```app/components/my-widget.js
|
16040
|
-
import
|
16070
|
+
import Component from '@ember/component';
|
16041
16071
|
|
16042
|
-
export default
|
16072
|
+
export default Component.extend({
|
16043
16073
|
classNameBindings: ['propertyA', 'propertyB'],
|
16044
16074
|
propertyA: 'from-a',
|
16045
16075
|
propertyB: Ember.computed(function() {
|
@@ -16059,9 +16089,9 @@ enifed('ember-glimmer/component', ['exports', 'ember-utils', 'ember-views', 'emb
|
|
16059
16089
|
The class name will not be added if the value is `false` or `undefined`.
|
16060
16090
|
|
16061
16091
|
```app/components/my-widget.js
|
16062
|
-
import
|
16092
|
+
import Component from '@ember/component';
|
16063
16093
|
|
16064
|
-
export default
|
16094
|
+
export default Component.extend({
|
16065
16095
|
classNameBindings: ['hovered'],
|
16066
16096
|
hovered: true
|
16067
16097
|
});
|
@@ -16078,9 +16108,9 @@ enifed('ember-glimmer/component', ['exports', 'ember-utils', 'ember-views', 'emb
|
|
16078
16108
|
preferred value after a ":" character when defining the binding:
|
16079
16109
|
|
16080
16110
|
```app/components/my-widget.js
|
16081
|
-
import
|
16111
|
+
import Component from '@ember/component';
|
16082
16112
|
|
16083
|
-
export default
|
16113
|
+
export default Component.extend({
|
16084
16114
|
classNameBindings: ['awesome:so-very-cool'],
|
16085
16115
|
awesome: true
|
16086
16116
|
});
|
@@ -16096,9 +16126,9 @@ enifed('ember-glimmer/component', ['exports', 'ember-utils', 'ember-views', 'emb
|
|
16096
16126
|
camelCase-style format will be converted to a dasherized format:
|
16097
16127
|
|
16098
16128
|
```app/components/my-widget.js
|
16099
|
-
import
|
16129
|
+
import Component from '@ember/component';
|
16100
16130
|
|
16101
|
-
export default
|
16131
|
+
export default Component.extend({
|
16102
16132
|
classNameBindings: ['isUrgent'],
|
16103
16133
|
isUrgent: true
|
16104
16134
|
});
|
@@ -16114,9 +16144,9 @@ enifed('ember-glimmer/component', ['exports', 'ember-utils', 'ember-views', 'emb
|
|
16114
16144
|
traversing a path relative to the component itself:
|
16115
16145
|
|
16116
16146
|
```app/components/my-widget.js
|
16117
|
-
import
|
16147
|
+
import Component from '@ember/component';
|
16118
16148
|
|
16119
|
-
export default
|
16149
|
+
export default Component.extend({
|
16120
16150
|
classNameBindings: ['messages.empty'],
|
16121
16151
|
messages: Ember.Object.create({
|
16122
16152
|
empty: true
|
@@ -16135,9 +16165,9 @@ enifed('ember-glimmer/component', ['exports', 'ember-utils', 'ember-views', 'emb
|
|
16135
16165
|
like this:
|
16136
16166
|
|
16137
16167
|
```app/components/my-widget.js
|
16138
|
-
import
|
16168
|
+
import Component from '@ember/component';
|
16139
16169
|
|
16140
|
-
export default
|
16170
|
+
export default Component.extend({
|
16141
16171
|
classNameBindings: ['isEnabled:enabled:disabled'],
|
16142
16172
|
isEnabled: true
|
16143
16173
|
});
|
@@ -16159,10 +16189,10 @@ enifed('ember-glimmer/component', ['exports', 'ember-utils', 'ember-views', 'emb
|
|
16159
16189
|
This syntax offers the convenience to add a class if a property is `false`:
|
16160
16190
|
|
16161
16191
|
```app/components/my-widget.js
|
16162
|
-
import
|
16192
|
+
import Component from '@ember/component';
|
16163
16193
|
|
16164
16194
|
// Applies no class when isEnabled is true and class 'disabled' when isEnabled is false
|
16165
|
-
export default
|
16195
|
+
export default Component.extend({
|
16166
16196
|
classNameBindings: ['isEnabled::disabled'],
|
16167
16197
|
isEnabled: true
|
16168
16198
|
});
|
@@ -16198,9 +16228,9 @@ enifed('ember-glimmer/component', ['exports', 'ember-utils', 'ember-views', 'emb
|
|
16198
16228
|
HTML associated attribute:
|
16199
16229
|
|
16200
16230
|
```app/components/my-anchor.js
|
16201
|
-
import
|
16231
|
+
import Component from '@ember/component';
|
16202
16232
|
|
16203
|
-
export default
|
16233
|
+
export default Component.extend({
|
16204
16234
|
tagName: 'a',
|
16205
16235
|
attributeBindings: ['href'],
|
16206
16236
|
href: 'http://google.com'
|
@@ -16217,9 +16247,9 @@ enifed('ember-glimmer/component', ['exports', 'ember-utils', 'ember-views', 'emb
|
|
16217
16247
|
the source property and the destination property:
|
16218
16248
|
|
16219
16249
|
```app/components/my-anchor.js
|
16220
|
-
import
|
16250
|
+
import Component from '@ember/component';
|
16221
16251
|
|
16222
|
-
export default
|
16252
|
+
export default Component.extend({
|
16223
16253
|
tagName: 'a',
|
16224
16254
|
attributeBindings: ['url:href'],
|
16225
16255
|
url: 'http://google.com'
|
@@ -16236,9 +16266,9 @@ enifed('ember-glimmer/component', ['exports', 'ember-utils', 'ember-views', 'emb
|
|
16236
16266
|
mapped, since `:` is not a valid character for properties in Javascript:
|
16237
16267
|
|
16238
16268
|
```app/components/my-use.js
|
16239
|
-
import
|
16269
|
+
import Component from '@ember/component';
|
16240
16270
|
|
16241
|
-
export default
|
16271
|
+
export default Component.extend({
|
16242
16272
|
tagName: 'use',
|
16243
16273
|
attributeBindings: ['xlinkHref:xlink:href'],
|
16244
16274
|
xlinkHref: '#triangle'
|
@@ -16255,9 +16285,9 @@ enifed('ember-glimmer/component', ['exports', 'ember-utils', 'ember-views', 'emb
|
|
16255
16285
|
the attribute will be present or absent depending on the value:
|
16256
16286
|
|
16257
16287
|
```app/components/my-text-input.js
|
16258
|
-
import
|
16288
|
+
import Component from '@ember/component';
|
16259
16289
|
|
16260
|
-
export default
|
16290
|
+
export default Component.extend({
|
16261
16291
|
tagName: 'input',
|
16262
16292
|
attributeBindings: ['disabled'],
|
16263
16293
|
disabled: false
|
@@ -16273,9 +16303,9 @@ enifed('ember-glimmer/component', ['exports', 'ember-utils', 'ember-views', 'emb
|
|
16273
16303
|
`attributeBindings` can refer to computed properties:
|
16274
16304
|
|
16275
16305
|
```app/components/my-text-input.js
|
16276
|
-
import
|
16306
|
+
import Component from '@ember/component';
|
16277
16307
|
|
16278
|
-
export default
|
16308
|
+
export default Component.extend({
|
16279
16309
|
tagName: 'input',
|
16280
16310
|
attributeBindings: ['disabled'],
|
16281
16311
|
disabled: Ember.computed(function() {
|
@@ -16292,9 +16322,9 @@ enifed('ember-glimmer/component', ['exports', 'ember-utils', 'ember-views', 'emb
|
|
16292
16322
|
return value of the `attributeBindings` monitored property:
|
16293
16323
|
|
16294
16324
|
```app/components/my-text-input.js
|
16295
|
-
import
|
16325
|
+
import Component from '@ember/component';
|
16296
16326
|
|
16297
|
-
export default
|
16327
|
+
export default Component.extend({
|
16298
16328
|
tagName: 'form',
|
16299
16329
|
attributeBindings: ['novalidate'],
|
16300
16330
|
novalidate: null
|
@@ -16322,10 +16352,10 @@ enifed('ember-glimmer/component', ['exports', 'ember-utils', 'ember-views', 'emb
|
|
16322
16352
|
```
|
16323
16353
|
|
16324
16354
|
```app/components/person-profile.js
|
16325
|
-
import
|
16355
|
+
import Component from '@ember/component';
|
16326
16356
|
import layout from '../templates/components/person-profile';
|
16327
16357
|
|
16328
|
-
export default
|
16358
|
+
export default Component.extend({
|
16329
16359
|
layout
|
16330
16360
|
});
|
16331
16361
|
```
|
@@ -16355,9 +16385,9 @@ enifed('ember-glimmer/component', ['exports', 'ember-utils', 'ember-views', 'emb
|
|
16355
16385
|
argument to this method.
|
16356
16386
|
|
16357
16387
|
```app/components/my-widget.js
|
16358
|
-
import
|
16388
|
+
import Component from '@ember/component';
|
16359
16389
|
|
16360
|
-
export default
|
16390
|
+
export default Component.extend({
|
16361
16391
|
click(event) {
|
16362
16392
|
// will be called when an instance's
|
16363
16393
|
// rendered element is clicked
|
@@ -17262,13 +17292,13 @@ enifed('ember-glimmer/components/link-to', ['exports', 'ember-console', 'ember-d
|
|
17262
17292
|
|
17263
17293
|
### Allowing Default Action
|
17264
17294
|
|
17265
|
-
|
17266
|
-
|
17267
|
-
|
17268
|
-
|
17295
|
+
By default the `{{link-to}}` component prevents the default browser action
|
17296
|
+
by calling `preventDefault()` as this sort of action bubbling is normally
|
17297
|
+
handled internally and we do not want to take the browser to a new URL (for
|
17298
|
+
example).
|
17269
17299
|
|
17270
|
-
|
17271
|
-
|
17300
|
+
If you need to override this behavior specify `preventDefault=false` in
|
17301
|
+
your template:
|
17272
17302
|
|
17273
17303
|
```handlebars
|
17274
17304
|
{{#link-to 'photoGallery' aPhotoId preventDefault=false}}
|
@@ -17402,7 +17432,8 @@ enifed('ember-glimmer/components/text_field', ['exports', 'ember-metal', 'ember-
|
|
17402
17432
|
layout: _empty.default,
|
17403
17433
|
classNames: ['ember-text-field'],
|
17404
17434
|
tagName: 'input',
|
17405
|
-
attributeBindings: ['accept', 'autocomplete', 'autosave', 'dir', 'formaction', 'formenctype', 'formmethod', 'formnovalidate', 'formtarget', 'height', 'inputmode', 'lang', 'list', '
|
17435
|
+
attributeBindings: ['accept', 'autocomplete', 'autosave', 'dir', 'formaction', 'formenctype', 'formmethod', 'formnovalidate', 'formtarget', 'height', 'inputmode', 'lang', 'list', 'type', // needs to be before min and max. See #15675
|
17436
|
+
'max', 'min', 'multiple', 'name', 'pattern', 'size', 'step', 'value', 'width'],
|
17406
17437
|
|
17407
17438
|
/**
|
17408
17439
|
The `value` attribute of the input element. As the user inputs text, this
|
@@ -17863,8 +17894,10 @@ enifed('ember-glimmer/helper', ['exports', 'ember-utils', 'ember-runtime', '@gli
|
|
17863
17894
|
|
17864
17895
|
Helpers defined using a class must provide a `compute` function. For example:
|
17865
17896
|
|
17866
|
-
```js
|
17867
|
-
|
17897
|
+
```app/helpers/format-currency.js
|
17898
|
+
import Helper from '@ember/component/helper';
|
17899
|
+
|
17900
|
+
export default Helper.extend({
|
17868
17901
|
compute(params, hash) {
|
17869
17902
|
let cents = params[0];
|
17870
17903
|
let currency = hash.currency;
|
@@ -17921,9 +17954,10 @@ enifed('ember-glimmer/helper', ['exports', 'ember-utils', 'ember-runtime', '@gli
|
|
17921
17954
|
The `helper` method create pure-function helpers without instances. For
|
17922
17955
|
example:
|
17923
17956
|
|
17924
|
-
```js
|
17925
|
-
|
17926
|
-
|
17957
|
+
```app/helpers/format-currency.js
|
17958
|
+
import { helper } from '@ember/component/helper';
|
17959
|
+
|
17960
|
+
export default helper(function(params, hash) {
|
17927
17961
|
let cents = params[0];
|
17928
17962
|
let currency = hash.currency;
|
17929
17963
|
return `${currency}${cents * 0.01}`;
|
@@ -18132,10 +18166,10 @@ enifed('ember-glimmer/helpers/action', ['exports', 'ember-utils', 'ember-metal',
|
|
18132
18166
|
|
18133
18167
|
Here is an example action handler on a component:
|
18134
18168
|
|
18135
|
-
```js
|
18136
|
-
import
|
18169
|
+
```app/components/my-component.js
|
18170
|
+
import Component from '@ember/component';
|
18137
18171
|
|
18138
|
-
export default
|
18172
|
+
export default Component.extend({
|
18139
18173
|
actions: {
|
18140
18174
|
save() {
|
18141
18175
|
this.get('model').save();
|
@@ -18164,8 +18198,10 @@ enifed('ember-glimmer/helpers/action', ['exports', 'ember-utils', 'ember-metal',
|
|
18164
18198
|
additional arguments are passed to the action function. This has interesting
|
18165
18199
|
properties combined with currying of arguments. For example:
|
18166
18200
|
|
18167
|
-
```js
|
18168
|
-
|
18201
|
+
```app/components/my-component.js
|
18202
|
+
import Component from '@ember/component';
|
18203
|
+
|
18204
|
+
export default Component.extend({
|
18169
18205
|
actions: {
|
18170
18206
|
// Usage {{input on-input=(action (action 'setName' model) value="target.value")}}
|
18171
18207
|
setName(model, name) {
|
@@ -18184,9 +18220,9 @@ enifed('ember-glimmer/helpers/action', ['exports', 'ember-utils', 'ember-metal',
|
|
18184
18220
|
with `on-input` above. For example:
|
18185
18221
|
|
18186
18222
|
```app/components/my-input.js
|
18187
|
-
import
|
18223
|
+
import Component from '@ember/component';
|
18188
18224
|
|
18189
|
-
export default
|
18225
|
+
export default Component.extend({
|
18190
18226
|
actions: {
|
18191
18227
|
setName(model, name) {
|
18192
18228
|
model.set('name', name);
|
@@ -18200,9 +18236,9 @@ enifed('ember-glimmer/helpers/action', ['exports', 'ember-utils', 'ember-metal',
|
|
18200
18236
|
```
|
18201
18237
|
|
18202
18238
|
```app/components/my-component.js
|
18203
|
-
import
|
18239
|
+
import Component from '@ember/component';
|
18204
18240
|
|
18205
|
-
export default
|
18241
|
+
export default Component.extend({
|
18206
18242
|
click() {
|
18207
18243
|
// Note that model is not passed, it was curried in the template
|
18208
18244
|
this.sendAction('submit', 'bob');
|
@@ -18258,7 +18294,7 @@ enifed('ember-glimmer/helpers/action', ['exports', 'ember-utils', 'ember-metal',
|
|
18258
18294
|
```
|
18259
18295
|
|
18260
18296
|
```app/helpers/disable-bubbling.js
|
18261
|
-
import
|
18297
|
+
import { helper } from '@ember/component/helper';
|
18262
18298
|
|
18263
18299
|
export function disableBubbling([action]) {
|
18264
18300
|
return function(event) {
|
@@ -18266,7 +18302,7 @@ enifed('ember-glimmer/helpers/action', ['exports', 'ember-utils', 'ember-metal',
|
|
18266
18302
|
return action(event);
|
18267
18303
|
};
|
18268
18304
|
}
|
18269
|
-
export default
|
18305
|
+
export default helper(disableBubbling);
|
18270
18306
|
```
|
18271
18307
|
|
18272
18308
|
If you need the default handler to trigger you should either register your
|
@@ -18323,10 +18359,11 @@ enifed('ember-glimmer/helpers/action', ['exports', 'ember-utils', 'ember-metal',
|
|
18323
18359
|
```
|
18324
18360
|
|
18325
18361
|
```app/controllers/application.js
|
18326
|
-
import
|
18362
|
+
import Controller from '@ember/controller';
|
18363
|
+
import { inject as service } from '@ember/service';
|
18327
18364
|
|
18328
|
-
export default
|
18329
|
-
someService:
|
18365
|
+
export default Controller.extend({
|
18366
|
+
someService: service()
|
18330
18367
|
});
|
18331
18368
|
```
|
18332
18369
|
|
@@ -18773,7 +18810,7 @@ enifed('ember-glimmer/helpers/get', ['exports', 'ember-babel', 'ember-metal', 'e
|
|
18773
18810
|
var path = this.lastPath = this.pathReference.value();
|
18774
18811
|
|
18775
18812
|
if (path !== lastPath) {
|
18776
|
-
if (path) {
|
18813
|
+
if (path !== undefined && path !== null) {
|
18777
18814
|
var pathType = typeof path;
|
18778
18815
|
|
18779
18816
|
if (pathType === 'string') {
|
@@ -20629,10 +20666,31 @@ enifed('ember-glimmer/syntax/mount', ['exports', 'ember-babel', 'ember-debug', '
|
|
20629
20666
|
{{mount "ember-chat"}}
|
20630
20667
|
```
|
20631
20668
|
|
20632
|
-
|
20633
|
-
|
20669
|
+
Additionally, you can also pass in a `model` argument that will be
|
20670
|
+
set as the engines model. This can be an existing object:
|
20671
|
+
|
20672
|
+
```
|
20673
|
+
<div>
|
20674
|
+
{{mount 'admin' model=userSettings}}
|
20675
|
+
</div>
|
20676
|
+
```
|
20677
|
+
|
20678
|
+
Or an inline `hash`, and you can even pass components:
|
20679
|
+
|
20680
|
+
```
|
20681
|
+
<div>
|
20682
|
+
<h1>Application template!</h1>
|
20683
|
+
{{mount 'admin' model=(hash
|
20684
|
+
title='Secret Admin'
|
20685
|
+
signInButton=(component 'sign-in-button')
|
20686
|
+
)}}
|
20687
|
+
</div>
|
20688
|
+
```
|
20634
20689
|
|
20635
20690
|
@method mount
|
20691
|
+
@param {String} name Name of the engine to mount.
|
20692
|
+
@param {Object} [model] Object that will be set as
|
20693
|
+
the model of the engine.
|
20636
20694
|
@for Ember.Templates.helpers
|
20637
20695
|
@category ember-application-engines
|
20638
20696
|
@public
|
@@ -20805,9 +20863,10 @@ enifed('ember-glimmer/syntax/outlet', ['exports', 'ember-babel', '@glimmer/refer
|
|
20805
20863
|
Your routes can then render into a specific one of these `outlet`s by specifying the `outlet`
|
20806
20864
|
attribute in your `renderTemplate` function:
|
20807
20865
|
|
20808
|
-
```
|
20809
|
-
|
20810
|
-
|
20866
|
+
```app/routes/menu.js
|
20867
|
+
import Route from '@ember/routing/route';
|
20868
|
+
|
20869
|
+
export default Route.extend({
|
20811
20870
|
renderTemplate() {
|
20812
20871
|
this.render({ outlet: 'menu' });
|
20813
20872
|
}
|
@@ -20891,8 +20950,10 @@ enifed('ember-glimmer/syntax/render', ['exports', '@glimmer/reference', 'ember-d
|
|
20891
20950
|
|
20892
20951
|
Example:
|
20893
20952
|
|
20894
|
-
```
|
20895
|
-
|
20953
|
+
```app/controllers/navigation.js
|
20954
|
+
import Controller from '@ember/controller';
|
20955
|
+
|
20956
|
+
export default Controller.extend({
|
20896
20957
|
who: "world"
|
20897
20958
|
});
|
20898
20959
|
```
|
@@ -22995,7 +23056,7 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
22995
23056
|
*/
|
22996
23057
|
function hasListeners(obj, eventName) {
|
22997
23058
|
var meta$$1 = exports.peekMeta(obj);
|
22998
|
-
if (
|
23059
|
+
if (meta$$1 === undefined) {
|
22999
23060
|
return false;
|
23000
23061
|
}
|
23001
23062
|
var matched = meta$$1.matchingListeners(eventName);
|
@@ -23058,6 +23119,14 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
23058
23119
|
|
23059
23120
|
var func = args.pop();
|
23060
23121
|
var events = args;
|
23122
|
+
|
23123
|
+
true && !(typeof func === 'function') && emberDebug.assert('Ember.on expects function as last argument', typeof func === 'function');
|
23124
|
+
true && !(events.length > 0 && events.every(function (p) {
|
23125
|
+
return typeof p === 'string' && p.length;
|
23126
|
+
})) && emberDebug.assert('Ember.on called without valid event names', events.length > 0 && events.every(function (p) {
|
23127
|
+
return typeof p === 'string' && p.length;
|
23128
|
+
}));
|
23129
|
+
|
23061
23130
|
func.__ember_listens__ = events;
|
23062
23131
|
return func;
|
23063
23132
|
}
|
@@ -23660,7 +23729,7 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
23660
23729
|
function DEFAULT_GETTER_FUNCTION(name) {
|
23661
23730
|
return function GETTER_FUNCTION() {
|
23662
23731
|
var meta$$1 = exports.peekMeta(this);
|
23663
|
-
if (meta$$1 !==
|
23732
|
+
if (meta$$1 !== undefined) {
|
23664
23733
|
return meta$$1.peekValues(name);
|
23665
23734
|
}
|
23666
23735
|
};
|
@@ -23670,7 +23739,7 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
23670
23739
|
function IGETTER_FUNCTION() {
|
23671
23740
|
var meta$$1 = exports.peekMeta(this);
|
23672
23741
|
var val = void 0;
|
23673
|
-
if (meta$$1 !==
|
23742
|
+
if (meta$$1 !== undefined) {
|
23674
23743
|
val = meta$$1.readInheritedValue('values', name);
|
23675
23744
|
}
|
23676
23745
|
|
@@ -23732,7 +23801,7 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
23732
23801
|
become the explicit value of this property.
|
23733
23802
|
*/
|
23734
23803
|
function defineProperty(obj, keyName, desc, data, meta$$1) {
|
23735
|
-
if (meta$$1 ===
|
23804
|
+
if (meta$$1 === undefined) {
|
23736
23805
|
meta$$1 = meta(obj);
|
23737
23806
|
}
|
23738
23807
|
|
@@ -23920,7 +23989,7 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
23920
23989
|
var meta$$1 = _meta || exports.peekMeta(obj);
|
23921
23990
|
|
23922
23991
|
// do nothing of this object has already been destroyed
|
23923
|
-
if (
|
23992
|
+
if (meta$$1 === undefined || meta$$1.isSourceDestroyed()) {
|
23924
23993
|
return;
|
23925
23994
|
}
|
23926
23995
|
|
@@ -24131,9 +24200,9 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
24131
24200
|
return;
|
24132
24201
|
}
|
24133
24202
|
|
24134
|
-
var meta$$1 = _meta
|
24203
|
+
var meta$$1 = _meta === undefined ? exports.peekMeta(obj) : _meta;
|
24135
24204
|
|
24136
|
-
if (
|
24205
|
+
if (meta$$1 === undefined || meta$$1.readableChainWatchers() === undefined) {
|
24137
24206
|
return;
|
24138
24207
|
}
|
24139
24208
|
|
@@ -25594,7 +25663,8 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
25594
25663
|
*/
|
25595
25664
|
function ComputedProperty(config, opts) {
|
25596
25665
|
this.isDescriptor = true;
|
25597
|
-
|
25666
|
+
var hasGetterOnly = typeof config === 'function';
|
25667
|
+
if (hasGetterOnly) {
|
25598
25668
|
this._getter = config;
|
25599
25669
|
} else {
|
25600
25670
|
true && !(typeof config === 'object' && !Array.isArray(config)) && emberDebug.assert('Ember.computed expects a function or an object as last argument.', typeof config === 'object' && !Array.isArray(config));
|
@@ -25612,8 +25682,9 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
25612
25682
|
this._suspended = undefined;
|
25613
25683
|
this._meta = undefined;
|
25614
25684
|
this._volatile = false;
|
25685
|
+
|
25615
25686
|
this._dependentKeys = opts && opts.dependentKeys;
|
25616
|
-
this._readOnly =
|
25687
|
+
this._readOnly = opts && hasGetterOnly && opts.readOnly === true;
|
25617
25688
|
}
|
25618
25689
|
|
25619
25690
|
ComputedProperty.prototype = new Descriptor();
|
@@ -25731,10 +25802,13 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
25731
25802
|
You can pass a hash of these values to a computed property like this:
|
25732
25803
|
|
25733
25804
|
```
|
25734
|
-
|
25805
|
+
import { computed } from '@ember/object';
|
25806
|
+
import Person from 'my-app/utils/person';
|
25807
|
+
|
25808
|
+
person: computed(function() {
|
25735
25809
|
let personId = this.get('personId');
|
25736
|
-
return
|
25737
|
-
}).meta({ type:
|
25810
|
+
return Person.create({ id: personId });
|
25811
|
+
}).meta({ type: Person })
|
25738
25812
|
```
|
25739
25813
|
|
25740
25814
|
The hash that you pass to the `meta()` function will be saved on the
|
@@ -25766,12 +25840,12 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
25766
25840
|
|
25767
25841
|
// don't create objects just to invalidate
|
25768
25842
|
var meta$$1 = exports.peekMeta(obj);
|
25769
|
-
if (
|
25843
|
+
if (meta$$1 === undefined || meta$$1.source !== obj) {
|
25770
25844
|
return;
|
25771
25845
|
}
|
25772
25846
|
|
25773
25847
|
var cache = meta$$1.readableCache();
|
25774
|
-
if (cache && cache[keyName] !== undefined) {
|
25848
|
+
if (cache !== undefined && cache[keyName] !== undefined) {
|
25775
25849
|
cache[keyName] = undefined;
|
25776
25850
|
removeDependentKeys(this, obj, keyName, meta$$1);
|
25777
25851
|
}
|
@@ -25793,14 +25867,10 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
25793
25867
|
}
|
25794
25868
|
|
25795
25869
|
var ret = this._getter.call(obj, keyName);
|
25796
|
-
|
25797
|
-
cache[keyName] = UNDEFINED;
|
25798
|
-
} else {
|
25799
|
-
cache[keyName] = ret;
|
25800
|
-
}
|
25870
|
+
cache[keyName] = ret === undefined ? UNDEFINED : ret;
|
25801
25871
|
|
25802
25872
|
var chainWatchers = meta$$1.readableChainWatchers();
|
25803
|
-
if (chainWatchers) {
|
25873
|
+
if (chainWatchers !== undefined) {
|
25804
25874
|
chainWatchers.revalidate(keyName);
|
25805
25875
|
}
|
25806
25876
|
addDependentKeys(this, obj, keyName, meta$$1);
|
@@ -25850,15 +25920,14 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
25850
25920
|
};
|
25851
25921
|
|
25852
25922
|
ComputedPropertyPrototype._set = function computedPropertySet(obj, keyName, value) {
|
25853
|
-
// cache requires own meta
|
25854
25923
|
var meta$$1 = meta(obj);
|
25855
|
-
// either there is a writable cache or we need one to update
|
25856
25924
|
var cache = meta$$1.writableCache();
|
25857
25925
|
var hadCachedValue = false;
|
25858
25926
|
var cachedValue = void 0;
|
25859
|
-
|
25860
|
-
|
25861
|
-
|
25927
|
+
var val = cache[keyName];
|
25928
|
+
if (val !== undefined) {
|
25929
|
+
if (val !== UNDEFINED) {
|
25930
|
+
cachedValue = val;
|
25862
25931
|
}
|
25863
25932
|
hadCachedValue = true;
|
25864
25933
|
}
|
@@ -26472,6 +26541,12 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
26472
26541
|
};
|
26473
26542
|
|
26474
26543
|
var onerror = void 0;
|
26544
|
+
var onErrorTarget = {
|
26545
|
+
get onerror() {
|
26546
|
+
return dispatchOverride || onerror;
|
26547
|
+
}
|
26548
|
+
};
|
26549
|
+
|
26475
26550
|
// Ember.onerror getter
|
26476
26551
|
function getOnerror() {
|
26477
26552
|
return onerror;
|
@@ -26563,7 +26638,7 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
26563
26638
|
}
|
26564
26639
|
|
26565
26640
|
var meta$$1 = exports.peekMeta(obj);
|
26566
|
-
if (meta$$1) {
|
26641
|
+
if (meta$$1 !== undefined) {
|
26567
26642
|
var map = meta$$1.readableWeak();
|
26568
26643
|
if (map !== undefined) {
|
26569
26644
|
var val = map[this._id];
|
@@ -26608,7 +26683,7 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
26608
26683
|
}
|
26609
26684
|
|
26610
26685
|
var meta$$1 = exports.peekMeta(obj);
|
26611
|
-
if (meta$$1) {
|
26686
|
+
if (meta$$1 !== undefined) {
|
26612
26687
|
var map = meta$$1.readableWeak();
|
26613
26688
|
if (map !== undefined) {
|
26614
26689
|
return map[this._id] !== undefined;
|
@@ -26800,15 +26875,6 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
26800
26875
|
run.currentRunLoop = next;
|
26801
26876
|
}
|
26802
26877
|
|
26803
|
-
var onErrorTarget = {
|
26804
|
-
get onerror() {
|
26805
|
-
return dispatchError;
|
26806
|
-
},
|
26807
|
-
set onerror(handler) {
|
26808
|
-
return setOnerror(handler);
|
26809
|
-
}
|
26810
|
-
};
|
26811
|
-
|
26812
26878
|
var backburner$1 = new Backburner(['sync', 'actions', 'destroy'], {
|
26813
26879
|
GUID_KEY: emberUtils.GUID_KEY,
|
26814
26880
|
sync: {
|
@@ -26916,16 +26982,26 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
26916
26982
|
We can use that setup option to do some additional setup for our component.
|
26917
26983
|
The component itself could look something like the following:
|
26918
26984
|
|
26919
|
-
```
|
26920
|
-
|
26985
|
+
```app/components/rich-text-editor.js
|
26986
|
+
import Component from '@ember/component';
|
26987
|
+
import { bind } from '@ember/runloop';
|
26988
|
+
|
26989
|
+
export default Component.extend({
|
26921
26990
|
initializeTinyMCE: Ember.on('didInsertElement', function() {
|
26922
26991
|
tinymce.init({
|
26923
26992
|
selector: '#' + this.$().prop('id'),
|
26924
26993
|
setup: Ember.run.bind(this, this.setupEditor)
|
26925
26994
|
});
|
26926
26995
|
}),
|
26996
|
+
|
26997
|
+
didInsertElement() {
|
26998
|
+
tinymce.init({
|
26999
|
+
selector: '#' + this.$().prop('id'),
|
27000
|
+
setup: Ember.run.bind(this, this.setupEditor)
|
27001
|
+
});
|
27002
|
+
}
|
26927
27003
|
|
26928
|
-
setupEditor
|
27004
|
+
setupEditor(editor) {
|
26929
27005
|
this.set('editor', editor);
|
26930
27006
|
|
26931
27007
|
editor.on('change', function() {
|
@@ -26936,7 +27012,7 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
26936
27012
|
```
|
26937
27013
|
|
26938
27014
|
In this example, we use Ember.run.bind to bind the setupEditor method to the
|
26939
|
-
context of the
|
27015
|
+
context of the RichTextEditor component and to have the invocation of that
|
26940
27016
|
method be safely handled and executed by the Ember run loop.
|
26941
27017
|
|
26942
27018
|
@method bind
|
@@ -27170,9 +27246,23 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
27170
27246
|
});
|
27171
27247
|
```
|
27172
27248
|
|
27173
|
-
Also note that
|
27174
|
-
|
27175
|
-
|
27249
|
+
Also note that for `run.scheduleOnce` to prevent additional calls, you need to
|
27250
|
+
pass the same function instance. The following case works as expected:
|
27251
|
+
|
27252
|
+
```javascript
|
27253
|
+
function log() {
|
27254
|
+
console.log('Logging only once');
|
27255
|
+
}
|
27256
|
+
|
27257
|
+
function scheduleIt() {
|
27258
|
+
run.scheduleOnce('actions', myContext, log);
|
27259
|
+
}
|
27260
|
+
|
27261
|
+
scheduleIt();
|
27262
|
+
scheduleIt();
|
27263
|
+
```
|
27264
|
+
|
27265
|
+
But this other case will schedule the function multiple times:
|
27176
27266
|
|
27177
27267
|
```javascript
|
27178
27268
|
function scheduleIt() {
|
@@ -27185,7 +27275,7 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
27185
27275
|
scheduleIt();
|
27186
27276
|
|
27187
27277
|
// "Closure" will print twice, even though we're using `run.scheduleOnce`,
|
27188
|
-
// because the function we pass to it
|
27278
|
+
// because the function we pass to it won't match the
|
27189
27279
|
// previously scheduled operation.
|
27190
27280
|
```
|
27191
27281
|
|
@@ -27233,8 +27323,10 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
27233
27323
|
|
27234
27324
|
Example:
|
27235
27325
|
|
27236
|
-
```
|
27237
|
-
|
27326
|
+
```app/components/my-component.js
|
27327
|
+
import Component from '@ember/component';
|
27328
|
+
|
27329
|
+
export Component.extend({
|
27238
27330
|
didInsertElement() {
|
27239
27331
|
this._super(...arguments);
|
27240
27332
|
run.scheduleOnce('afterRender', this, 'processChildElements');
|
@@ -28780,16 +28872,14 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
28780
28872
|
|
28781
28873
|
if (baseValue === null || baseValue === undefined) {
|
28782
28874
|
ret = emberUtils.makeArray(value);
|
28783
|
-
} else {
|
28784
|
-
if (
|
28785
|
-
|
28786
|
-
ret = baseValue;
|
28787
|
-
} else {
|
28788
|
-
ret = a_concat.call(baseValue, value);
|
28789
|
-
}
|
28875
|
+
} else if (isArray(baseValue)) {
|
28876
|
+
if (value === null || value === undefined) {
|
28877
|
+
ret = baseValue;
|
28790
28878
|
} else {
|
28791
|
-
ret = a_concat.call(
|
28879
|
+
ret = a_concat.call(baseValue, value);
|
28792
28880
|
}
|
28881
|
+
} else {
|
28882
|
+
ret = a_concat.call(emberUtils.makeArray(baseValue), value);
|
28793
28883
|
}
|
28794
28884
|
|
28795
28885
|
{
|
@@ -28860,7 +28950,7 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
28860
28950
|
} else {
|
28861
28951
|
if (concats && concats.indexOf(key) >= 0 || key === 'concatenatedProperties' || key === 'mergedProperties') {
|
28862
28952
|
value = applyConcatenatedProperties(base, key, value, values);
|
28863
|
-
} else if (mergings && mergings.indexOf(key)
|
28953
|
+
} else if (mergings && mergings.indexOf(key) > -1) {
|
28864
28954
|
value = applyMergedProperties(base, key, value, values);
|
28865
28955
|
} else if (isMethod(value)) {
|
28866
28956
|
value = giveMethodSuper(base, key, value, values, descs);
|
@@ -28972,9 +29062,7 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
28972
29062
|
return { desc: desc, value: value };
|
28973
29063
|
}
|
28974
29064
|
|
28975
|
-
function updateObserversAndListeners(obj, key,
|
28976
|
-
var paths = observerOrListener[pathsKey];
|
28977
|
-
|
29065
|
+
function updateObserversAndListeners(obj, key, paths, updateMethod) {
|
28978
29066
|
if (paths) {
|
28979
29067
|
for (var i = 0; i < paths.length; i++) {
|
28980
29068
|
updateMethod(obj, paths[i], null, key);
|
@@ -28985,16 +29073,16 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
28985
29073
|
function replaceObserversAndListeners(obj, key, observerOrListener) {
|
28986
29074
|
var prev = obj[key];
|
28987
29075
|
|
28988
|
-
if ('function'
|
28989
|
-
updateObserversAndListeners(obj, key, prev
|
28990
|
-
updateObserversAndListeners(obj, key, prev
|
28991
|
-
updateObserversAndListeners(obj, key, prev
|
29076
|
+
if (typeof prev === 'function') {
|
29077
|
+
updateObserversAndListeners(obj, key, prev.__ember_observesBefore__, _removeBeforeObserver);
|
29078
|
+
updateObserversAndListeners(obj, key, prev.__ember_observes__, removeObserver);
|
29079
|
+
updateObserversAndListeners(obj, key, prev.__ember_listens__, removeListener);
|
28992
29080
|
}
|
28993
29081
|
|
28994
|
-
if ('function'
|
28995
|
-
updateObserversAndListeners(obj, key, observerOrListener
|
28996
|
-
updateObserversAndListeners(obj, key, observerOrListener
|
28997
|
-
updateObserversAndListeners(obj, key, observerOrListener
|
29082
|
+
if (typeof observerOrListener === 'function') {
|
29083
|
+
updateObserversAndListeners(obj, key, observerOrListener.__ember_observesBefore__, _addBeforeObserver);
|
29084
|
+
updateObserversAndListeners(obj, key, observerOrListener.__ember_observes__, addObserver);
|
29085
|
+
updateObserversAndListeners(obj, key, observerOrListener.__ember_listens__, addListener);
|
28998
29086
|
}
|
28999
29087
|
}
|
29000
29088
|
|
@@ -29201,7 +29289,7 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
29201
29289
|
Mixin.mixins = function mixins(obj) {
|
29202
29290
|
var meta$$1 = exports.peekMeta(obj);
|
29203
29291
|
var ret = [];
|
29204
|
-
if (
|
29292
|
+
if (meta$$1 === undefined) {
|
29205
29293
|
return ret;
|
29206
29294
|
}
|
29207
29295
|
|
@@ -29318,7 +29406,7 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
29318
29406
|
return _detect(obj, this, {});
|
29319
29407
|
}
|
29320
29408
|
var meta$$1 = exports.peekMeta(obj);
|
29321
|
-
if (
|
29409
|
+
if (meta$$1 === undefined) {
|
29322
29410
|
return false;
|
29323
29411
|
}
|
29324
29412
|
return !!meta$$1.peekMixins(emberUtils.guidFor(this));
|
@@ -29393,15 +29481,21 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
29393
29481
|
/**
|
29394
29482
|
Makes a method available via an additional name.
|
29395
29483
|
|
29396
|
-
```
|
29397
|
-
|
29398
|
-
|
29484
|
+
```app/utils/person.js
|
29485
|
+
import EmberObject, {
|
29486
|
+
aliasMethod
|
29487
|
+
} from '@ember/object';
|
29488
|
+
|
29489
|
+
export default EmberObject.extend({
|
29490
|
+
name() {
|
29399
29491
|
return 'Tomhuda Katzdale';
|
29400
29492
|
},
|
29401
|
-
moniker:
|
29493
|
+
moniker: aliasMethod('name')
|
29402
29494
|
});
|
29495
|
+
```
|
29403
29496
|
|
29404
|
-
|
29497
|
+
```javascript
|
29498
|
+
let goodGuy = Person.create();
|
29405
29499
|
|
29406
29500
|
goodGuy.name(); // 'Tomhuda Katzdale'
|
29407
29501
|
goodGuy.moniker(); // 'Tomhuda Katzdale'
|
@@ -29640,7 +29734,7 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
29640
29734
|
function isProxy(value) {
|
29641
29735
|
if (typeof value === 'object' && value !== null) {
|
29642
29736
|
var meta$$1 = exports.peekMeta(value);
|
29643
|
-
return meta$$1
|
29737
|
+
return meta$$1 === undefined ? false : meta$$1.isProxy();
|
29644
29738
|
}
|
29645
29739
|
|
29646
29740
|
return false;
|
@@ -30451,14 +30545,14 @@ enifed('ember-routing/location/history_location', ['exports', 'ember-metal', 'em
|
|
30451
30545
|
|
30452
30546
|
Example:
|
30453
30547
|
|
30454
|
-
```
|
30455
|
-
|
30548
|
+
```app/router.js
|
30549
|
+
Router.map(function() {
|
30456
30550
|
this.route('posts', function() {
|
30457
30551
|
this.route('new');
|
30458
30552
|
});
|
30459
30553
|
});
|
30460
30554
|
|
30461
|
-
|
30555
|
+
Router.reopen({
|
30462
30556
|
location: 'history'
|
30463
30557
|
});
|
30464
30558
|
```
|
@@ -30947,9 +31041,91 @@ enifed('ember-routing/services/router', ['exports', 'ember-runtime', 'ember-rout
|
|
30947
31041
|
*/
|
30948
31042
|
|
30949
31043
|
var RouterService = _emberRuntime.Service.extend({
|
31044
|
+
|
31045
|
+
/**
|
31046
|
+
Name of the current route.
|
31047
|
+
This property represent the logical name of the route,
|
31048
|
+
which is comma separated.
|
31049
|
+
For the following router:
|
31050
|
+
```app/router.js
|
31051
|
+
Router.map(function() {
|
31052
|
+
this.route('about);
|
31053
|
+
this.route('blog', function () {
|
31054
|
+
this.route('post', { path: ':post_id' });
|
31055
|
+
});
|
31056
|
+
});
|
31057
|
+
```
|
31058
|
+
It will return:
|
31059
|
+
* `index` when you visit `/`
|
31060
|
+
* `about` when you visit `/about`
|
31061
|
+
* `blog.index` when you visit `/blog`
|
31062
|
+
* `blog.post` when you visit `/blog/some-post-id`
|
31063
|
+
@property currentRouteName
|
31064
|
+
@type String
|
31065
|
+
@public
|
31066
|
+
*/
|
30950
31067
|
currentRouteName: (0, _emberRuntime.readOnly)('_router.currentRouteName'),
|
31068
|
+
|
31069
|
+
/**
|
31070
|
+
Current URL for the application.
|
31071
|
+
This property represent the URL path for this route.
|
31072
|
+
For the following router:
|
31073
|
+
```app/router.js
|
31074
|
+
Router.map(function() {
|
31075
|
+
this.route('about);
|
31076
|
+
this.route('blog', function () {
|
31077
|
+
this.route('post', { path: ':post_id' });
|
31078
|
+
});
|
31079
|
+
});
|
31080
|
+
```
|
31081
|
+
It will return:
|
31082
|
+
* `/` when you visit `/`
|
31083
|
+
* `/about` when you visit `/about`
|
31084
|
+
* `/blog/index` when you visit `/blog`
|
31085
|
+
* `/blog/post` when you visit `/blog/some-post-id`
|
31086
|
+
@property currentURL
|
31087
|
+
@type String
|
31088
|
+
@public
|
31089
|
+
*/
|
30951
31090
|
currentURL: (0, _emberRuntime.readOnly)('_router.currentURL'),
|
31091
|
+
|
31092
|
+
/**
|
31093
|
+
The `location` property determines the type of URL's that your
|
31094
|
+
application will use.
|
31095
|
+
The following location types are currently available:
|
31096
|
+
* `auto`
|
31097
|
+
* `hash`
|
31098
|
+
* `history`
|
31099
|
+
* `none`
|
31100
|
+
@property location
|
31101
|
+
@default 'hash'
|
31102
|
+
@see {Ember.Location}
|
31103
|
+
@public
|
31104
|
+
*/
|
30952
31105
|
location: (0, _emberRuntime.readOnly)('_router.location'),
|
31106
|
+
|
31107
|
+
/**
|
31108
|
+
The `rootURL` property represents the URL of the root of
|
31109
|
+
the application, '/' by default.
|
31110
|
+
This prefix is assumed on all routes defined on this app.
|
31111
|
+
IF you change the `rootURL` in your environment configuration
|
31112
|
+
like so:
|
31113
|
+
```config/environment.js
|
31114
|
+
'use strict';
|
31115
|
+
module.exports = function(environment) {
|
31116
|
+
let ENV = {
|
31117
|
+
modulePrefix: 'router-service',
|
31118
|
+
environment,
|
31119
|
+
rootURL: '/my-root',
|
31120
|
+
…
|
31121
|
+
}
|
31122
|
+
]
|
31123
|
+
```
|
31124
|
+
This property will return `/my-root`.
|
31125
|
+
@property rootURL
|
31126
|
+
@default '/'
|
31127
|
+
@public
|
31128
|
+
*/
|
30953
31129
|
rootURL: (0, _emberRuntime.readOnly)('_router.rootURL'),
|
30954
31130
|
_router: null,
|
30955
31131
|
|
@@ -31777,10 +31953,10 @@ enifed('ember-routing/system/route', ['exports', 'ember-utils', 'ember-metal', '
|
|
31777
31953
|
A hook you can use to reset controller values either when the model
|
31778
31954
|
changes or the route is exiting.
|
31779
31955
|
```app/routes/articles.js
|
31780
|
-
import
|
31781
|
-
export default
|
31956
|
+
import Route from '@ember/routing/route';
|
31957
|
+
export default Route.extend({
|
31782
31958
|
resetController(controller, isExiting, transition) {
|
31783
|
-
if (isExiting) {
|
31959
|
+
if (isExiting && transition.targetName !== 'error') {
|
31784
31960
|
controller.set('page', 1);
|
31785
31961
|
}
|
31786
31962
|
}
|
@@ -31817,8 +31993,8 @@ enifed('ember-routing/system/route', ['exports', 'ember-utils', 'ember-metal', '
|
|
31817
31993
|
The name of the template to use by default when rendering this routes
|
31818
31994
|
template.
|
31819
31995
|
```app/routes/posts/list.js
|
31820
|
-
import
|
31821
|
-
export default
|
31996
|
+
import Route from '@ember/routing/route';
|
31997
|
+
export default Route.extend({
|
31822
31998
|
templateName: 'posts/list'
|
31823
31999
|
});
|
31824
32000
|
```
|
@@ -31864,8 +32040,8 @@ enifed('ember-routing/system/route', ['exports', 'ember-utils', 'ember-metal', '
|
|
31864
32040
|
A good example is preventing navigation when a form is
|
31865
32041
|
half-filled out:
|
31866
32042
|
```app/routes/contact-form.js
|
31867
|
-
import
|
31868
|
-
export default
|
32043
|
+
import Route from '@ember/routing/route';
|
32044
|
+
export default Route.extend({
|
31869
32045
|
actions: {
|
31870
32046
|
willTransition(transition) {
|
31871
32047
|
if (this.controller.get('userHasEnteredData')) {
|
@@ -31902,8 +32078,8 @@ enifed('ember-routing/system/route', ['exports', 'ember-utils', 'ember-metal', '
|
|
31902
32078
|
however, it can be useful for tracking page views or resetting
|
31903
32079
|
state on the controller.
|
31904
32080
|
```app/routes/login.js
|
31905
|
-
import
|
31906
|
-
export default
|
32081
|
+
import Route from '@ember/routing/route';
|
32082
|
+
export default Route.extend({
|
31907
32083
|
actions: {
|
31908
32084
|
didTransition() {
|
31909
32085
|
this.controller.get('errors.base').clear();
|
@@ -31923,7 +32099,8 @@ enifed('ember-routing/system/route', ['exports', 'ember-utils', 'ember-metal', '
|
|
31923
32099
|
`Transition` object is the first parameter and the route that
|
31924
32100
|
triggered the loading event is the second parameter.
|
31925
32101
|
```app/routes/application.js
|
31926
|
-
|
32102
|
+
import Route from '@ember/routing/route';
|
32103
|
+
export default Route.extend({
|
31927
32104
|
actions: {
|
31928
32105
|
loading(transition, route) {
|
31929
32106
|
let controller = this.controllerFor('foo');
|
@@ -31952,8 +32129,8 @@ enifed('ember-routing/system/route', ['exports', 'ember-utils', 'ember-metal', '
|
|
31952
32129
|
for rejected promises from the various hooks on the route,
|
31953
32130
|
as well as any unhandled errors from child routes:
|
31954
32131
|
```app/routes/admin.js
|
31955
|
-
import
|
31956
|
-
export default
|
32132
|
+
import Route from '@ember/routing/route';
|
32133
|
+
export default Route.extend({
|
31957
32134
|
beforeModel() {
|
31958
32135
|
return Ember.RSVP.reject('bad things!');
|
31959
32136
|
},
|
@@ -31977,8 +32154,8 @@ enifed('ember-routing/system/route', ['exports', 'ember-utils', 'ember-metal', '
|
|
31977
32154
|
specify your own global default error handler by overriding the
|
31978
32155
|
`error` handler on `ApplicationRoute`:
|
31979
32156
|
```app/routes/application.js
|
31980
|
-
import
|
31981
|
-
export default
|
32157
|
+
import Route from '@ember/routing/route';
|
32158
|
+
export default Route.extend({
|
31982
32159
|
actions: {
|
31983
32160
|
error(error, transition) {
|
31984
32161
|
this.controllerFor('banner').displayError(error.message);
|
@@ -31997,8 +32174,8 @@ enifed('ember-routing/system/route', ['exports', 'ember-utils', 'ember-metal', '
|
|
31997
32174
|
This event is triggered when the router enters the route. It is
|
31998
32175
|
not executed when the model for the route changes.
|
31999
32176
|
```app/routes/application.js
|
32000
|
-
import
|
32001
|
-
export default
|
32177
|
+
import Route from '@ember/routing/route';
|
32178
|
+
export default Route.extend({
|
32002
32179
|
collectAnalytics: Ember.on('activate', function(){
|
32003
32180
|
collectAnalytics();
|
32004
32181
|
})
|
@@ -32013,8 +32190,8 @@ enifed('ember-routing/system/route', ['exports', 'ember-utils', 'ember-metal', '
|
|
32013
32190
|
This event is triggered when the router completely exits this
|
32014
32191
|
route. It is not executed when the model for the route changes.
|
32015
32192
|
```app/routes/index.js
|
32016
|
-
import
|
32017
|
-
export default
|
32193
|
+
import Route from '@ember/routing/route';
|
32194
|
+
export default Route.extend({
|
32018
32195
|
trackPageLeaveAnalytics: Ember.on('deactivate', function(){
|
32019
32196
|
trackPageLeaveAnalytics();
|
32020
32197
|
})
|
@@ -32029,8 +32206,8 @@ enifed('ember-routing/system/route', ['exports', 'ember-utils', 'ember-metal', '
|
|
32029
32206
|
The controller associated with this route.
|
32030
32207
|
Example
|
32031
32208
|
```app/routes/form.js
|
32032
|
-
import
|
32033
|
-
export default
|
32209
|
+
import Route from '@ember/routing/route';
|
32210
|
+
export default Route.extend({
|
32034
32211
|
actions: {
|
32035
32212
|
willTransition(transition) {
|
32036
32213
|
if (this.controller.get('userHasEnteredData') &&
|
@@ -32317,8 +32494,8 @@ enifed('ember-routing/system/route', ['exports', 'ember-utils', 'ember-metal', '
|
|
32317
32494
|
logic that can only take place after the model has already
|
32318
32495
|
resolved.
|
32319
32496
|
```app/routes/posts.js
|
32320
|
-
import
|
32321
|
-
export default
|
32497
|
+
import Route from '@ember/routing/route';
|
32498
|
+
export default Route.extend({
|
32322
32499
|
afterModel(posts, transition) {
|
32323
32500
|
if (posts.get('length') === 1) {
|
32324
32501
|
this.transitionTo('post.show', posts.get('firstObject'));
|
@@ -32458,8 +32635,8 @@ enifed('ember-routing/system/route', ['exports', 'ember-utils', 'ember-metal', '
|
|
32458
32635
|
});
|
32459
32636
|
```
|
32460
32637
|
```app/routes/post.js
|
32461
|
-
import
|
32462
|
-
export default
|
32638
|
+
import Route from '@ember/routing/route';
|
32639
|
+
export default Route.extend({
|
32463
32640
|
model(params) {
|
32464
32641
|
// the server returns `{ id: 12 }`
|
32465
32642
|
return Ember.$.getJSON('/posts/' + params.post_id);
|
@@ -32875,7 +33052,7 @@ enifed('ember-routing/system/router', ['exports', 'ember-utils', 'ember-console'
|
|
32875
33052
|
* `hash` - use `#` to separate the server part of the URL from the Ember part: `/blog/#/posts/new`
|
32876
33053
|
* `none` - do not store the Ember URL in the actual browser URL (mainly used for testing)
|
32877
33054
|
* `auto` - use the best option based on browser capabilities: `history` if possible, then `hash` if possible, otherwise `none`
|
32878
|
-
|
33055
|
+
This value is defaulted to `auto` by the `locationType` setting of `/config/environment.js`
|
32879
33056
|
@property location
|
32880
33057
|
@default 'hash'
|
32881
33058
|
@see {Ember.Location}
|
@@ -33697,6 +33874,8 @@ enifed('ember-routing/system/router', ['exports', 'ember-utils', 'ember-console'
|
|
33697
33874
|
if (originRoute !== route) {
|
33698
33875
|
var errorRouteName = findRouteStateName(route, 'error');
|
33699
33876
|
if (errorRouteName) {
|
33877
|
+
var _errorId = (0, _emberUtils.guidFor)(error);
|
33878
|
+
router._markErrorAsHandled(_errorId);
|
33700
33879
|
router.intermediateTransitionTo(errorRouteName, error);
|
33701
33880
|
return false;
|
33702
33881
|
}
|
@@ -33705,6 +33884,8 @@ enifed('ember-routing/system/router', ['exports', 'ember-utils', 'ember-console'
|
|
33705
33884
|
// Check for an 'error' substate route
|
33706
33885
|
var errorSubstateName = findRouteSubstateName(route, 'error');
|
33707
33886
|
if (errorSubstateName) {
|
33887
|
+
var errorId = (0, _emberUtils.guidFor)(error);
|
33888
|
+
router._markErrorAsHandled(errorId);
|
33708
33889
|
router.intermediateTransitionTo(errorSubstateName, error);
|
33709
33890
|
return false;
|
33710
33891
|
}
|
@@ -35237,9 +35418,9 @@ enifed('ember-runtime/computed/reduce_computed_macros', ['exports', 'ember-utils
|
|
35237
35418
|
return initialValue;
|
35238
35419
|
}
|
35239
35420
|
return arr.reduce(callback, initialValue, this);
|
35240
|
-
}, { dependentKeys: [dependentKey + '.[]'] });
|
35421
|
+
}, { dependentKeys: [dependentKey + '.[]'], readOnly: true });
|
35241
35422
|
|
35242
|
-
return cp
|
35423
|
+
return cp;
|
35243
35424
|
}
|
35244
35425
|
|
35245
35426
|
function arrayMacro(dependentKey, callback) {
|
@@ -35259,9 +35440,9 @@ enifed('ember-runtime/computed/reduce_computed_macros', ['exports', 'ember-utils
|
|
35259
35440
|
} else {
|
35260
35441
|
return (0, _native_array.A)();
|
35261
35442
|
}
|
35262
|
-
}, { dependentKeys: [dependentKey] });
|
35443
|
+
}, { dependentKeys: [dependentKey], readOnly: true });
|
35263
35444
|
|
35264
|
-
return cp
|
35445
|
+
return cp;
|
35265
35446
|
}
|
35266
35447
|
|
35267
35448
|
function multiArrayMacro(_dependentKeys, callback) {
|
@@ -35271,9 +35452,9 @@ enifed('ember-runtime/computed/reduce_computed_macros', ['exports', 'ember-utils
|
|
35271
35452
|
|
35272
35453
|
var cp = new _emberMetal.ComputedProperty(function () {
|
35273
35454
|
return (0, _native_array.A)(callback.call(this, _dependentKeys));
|
35274
|
-
}, { dependentKeys: dependentKeys });
|
35455
|
+
}, { dependentKeys: dependentKeys, readOnly: true });
|
35275
35456
|
|
35276
|
-
return cp
|
35457
|
+
return cp;
|
35277
35458
|
}
|
35278
35459
|
|
35279
35460
|
/**
|
@@ -35659,7 +35840,7 @@ enifed('ember-runtime/computed/reduce_computed_macros', ['exports', 'ember-utils
|
|
35659
35840
|
@public
|
35660
35841
|
*/
|
35661
35842
|
function uniqBy(dependentKey, propertyKey) {
|
35662
|
-
|
35843
|
+
var cp = new _emberMetal.ComputedProperty(function () {
|
35663
35844
|
var uniq = (0, _native_array.A)();
|
35664
35845
|
var seen = Object.create(null);
|
35665
35846
|
var list = (0, _emberMetal.get)(this, dependentKey);
|
@@ -35673,7 +35854,9 @@ enifed('ember-runtime/computed/reduce_computed_macros', ['exports', 'ember-utils
|
|
35673
35854
|
});
|
35674
35855
|
}
|
35675
35856
|
return uniq;
|
35676
|
-
}
|
35857
|
+
}, { dependentKeys: [dependentKey + '.[]'], readOnly: true });
|
35858
|
+
|
35859
|
+
return cp;
|
35677
35860
|
}
|
35678
35861
|
|
35679
35862
|
/**
|
@@ -35810,7 +35993,7 @@ enifed('ember-runtime/computed/reduce_computed_macros', ['exports', 'ember-utils
|
|
35810
35993
|
(true && !(arguments.length === 2) && (0, _emberDebug.assert)('Ember.computed.setDiff requires exactly two dependent arrays.', arguments.length === 2));
|
35811
35994
|
|
35812
35995
|
|
35813
|
-
|
35996
|
+
var cp = new _emberMetal.ComputedProperty(function () {
|
35814
35997
|
var setA = this.get(setAProperty);
|
35815
35998
|
var setB = this.get(setBProperty);
|
35816
35999
|
|
@@ -35824,7 +36007,12 @@ enifed('ember-runtime/computed/reduce_computed_macros', ['exports', 'ember-utils
|
|
35824
36007
|
return setA.filter(function (x) {
|
35825
36008
|
return setB.indexOf(x) === -1;
|
35826
36009
|
});
|
35827
|
-
}
|
36010
|
+
}, {
|
36011
|
+
dependentKeys: [setAProperty + '.[]', setBProperty + '.[]'],
|
36012
|
+
readOnly: true
|
36013
|
+
});
|
36014
|
+
|
36015
|
+
return cp;
|
35828
36016
|
}
|
35829
36017
|
|
35830
36018
|
/**
|
@@ -36007,11 +36195,11 @@ enifed('ember-runtime/computed/reduce_computed_macros', ['exports', 'ember-utils
|
|
36007
36195
|
activeObserversMap.set(this, activeObservers);
|
36008
36196
|
|
36009
36197
|
return sortByNormalizedSortProperties(items, normalizedSortProperties);
|
36010
|
-
}, { dependentKeys: [sortPropertiesKey + '.[]'] });
|
36198
|
+
}, { dependentKeys: [sortPropertiesKey + '.[]'], readOnly: true });
|
36011
36199
|
|
36012
36200
|
cp._activeObserverMap = undefined;
|
36013
36201
|
|
36014
|
-
return cp
|
36202
|
+
return cp;
|
36015
36203
|
}
|
36016
36204
|
|
36017
36205
|
function normalizeSortProperties(sortProperties) {
|
@@ -36038,7 +36226,6 @@ enifed('ember-runtime/computed/reduce_computed_macros', ['exports', 'ember-utils
|
|
36038
36226
|
return direction === 'desc' ? -1 * result : result;
|
36039
36227
|
}
|
36040
36228
|
}
|
36041
|
-
|
36042
36229
|
return 0;
|
36043
36230
|
}));
|
36044
36231
|
}
|
@@ -36072,9 +36259,13 @@ enifed('ember-runtime/controllers/controller', ['exports', 'ember-debug', 'ember
|
|
36072
36259
|
|
36073
36260
|
Example:
|
36074
36261
|
|
36075
|
-
```
|
36076
|
-
|
36077
|
-
|
36262
|
+
```app/controllers/post.js
|
36263
|
+
import Controller, {
|
36264
|
+
inject as controller
|
36265
|
+
} from '@ember/controller';
|
36266
|
+
|
36267
|
+
export default Controller.extend({
|
36268
|
+
posts: controller()
|
36078
36269
|
});
|
36079
36270
|
```
|
36080
36271
|
|
@@ -36082,10 +36273,13 @@ enifed('ember-runtime/controllers/controller', ['exports', 'ember-debug', 'ember
|
|
36082
36273
|
looks up the `posts` controller in the container, making it easy to
|
36083
36274
|
reference other controllers. This is functionally equivalent to:
|
36084
36275
|
|
36085
|
-
```
|
36086
|
-
|
36276
|
+
```app/controllers/post.js
|
36277
|
+
import Controller from '@ember/controller';
|
36278
|
+
import { alias } from '@ember/object/computed';
|
36279
|
+
|
36280
|
+
export default Controller.extend({
|
36087
36281
|
needs: 'posts',
|
36088
|
-
posts:
|
36282
|
+
posts: alias('controllers.posts')
|
36089
36283
|
});
|
36090
36284
|
```
|
36091
36285
|
|
@@ -36213,15 +36407,18 @@ enifed('ember-runtime/ext/function', ['ember-environment', 'ember-metal', 'ember
|
|
36213
36407
|
when `EmberENV.EXTEND_PROTOTYPES` or `EmberENV.EXTEND_PROTOTYPES.Function` is
|
36214
36408
|
`true`, which is the default.
|
36215
36409
|
Computed properties allow you to treat a function like a property:
|
36216
|
-
```
|
36217
|
-
|
36410
|
+
```app/utils/president.js
|
36411
|
+
import EmberObject from '@ember/object';
|
36412
|
+
export default EmberObject.extend({
|
36218
36413
|
firstName: '',
|
36219
36414
|
lastName: '',
|
36220
36415
|
fullName: function() {
|
36221
36416
|
return this.get('firstName') + ' ' + this.get('lastName');
|
36222
36417
|
}.property() // Call this flag to mark the function as a property
|
36223
36418
|
});
|
36224
|
-
|
36419
|
+
```
|
36420
|
+
```javascript
|
36421
|
+
let president = President.create({
|
36225
36422
|
firstName: 'Barack',
|
36226
36423
|
lastName: 'Obama'
|
36227
36424
|
});
|
@@ -36233,8 +36430,9 @@ enifed('ember-runtime/ext/function', ['ember-environment', 'ember-metal', 'ember
|
|
36233
36430
|
example, in the above example, the `fullName` property depends on
|
36234
36431
|
`firstName` and `lastName` to determine its value. You can tell Ember
|
36235
36432
|
about these dependencies like this:
|
36236
|
-
```
|
36237
|
-
|
36433
|
+
```app/utils/president.js
|
36434
|
+
import EmberObject from '@ember/object';
|
36435
|
+
export default EmberObject.extend({
|
36238
36436
|
firstName: '',
|
36239
36437
|
lastName: '',
|
36240
36438
|
fullName: function() {
|
@@ -36266,7 +36464,8 @@ enifed('ember-runtime/ext/function', ['ember-environment', 'ember-metal', 'ember
|
|
36266
36464
|
call to the end of your method declarations in classes that you write.
|
36267
36465
|
For example:
|
36268
36466
|
```javascript
|
36269
|
-
|
36467
|
+
import EmberObject from '@ember/object';
|
36468
|
+
EmberObject.extend({
|
36270
36469
|
valueObserver: function() {
|
36271
36470
|
// Executes whenever the "value" property changes
|
36272
36471
|
}.observes('value')
|
@@ -36310,7 +36509,8 @@ enifed('ember-runtime/ext/function', ['ember-environment', 'ember-metal', 'ember
|
|
36310
36509
|
call to the end of your method declarations in classes that you write.
|
36311
36510
|
For example:
|
36312
36511
|
```javascript
|
36313
|
-
|
36512
|
+
import EmberObject from '@ember/object';
|
36513
|
+
EmberObject.extend({
|
36314
36514
|
valueObserver: function() {
|
36315
36515
|
// Executes immediately after the "value" property changes
|
36316
36516
|
}.observesImmediately('value')
|
@@ -36333,7 +36533,8 @@ enifed('ember-runtime/ext/function', ['ember-environment', 'ember-metal', 'ember
|
|
36333
36533
|
You can listen for events simply by adding the `on` call to the end of
|
36334
36534
|
your method declarations in classes or mixins that you write. For example:
|
36335
36535
|
```javascript
|
36336
|
-
|
36536
|
+
import Mixin from '@ember/mixin';
|
36537
|
+
Mixin.create({
|
36337
36538
|
doSomethingWithElement: function() {
|
36338
36539
|
// Executes whenever the "didInsertElement" event fires
|
36339
36540
|
}.on('didInsertElement')
|
@@ -37365,11 +37566,7 @@ enifed('ember-runtime/mixins/array', ['exports', 'ember-utils', 'ember-metal', '
|
|
37365
37566
|
}
|
37366
37567
|
|
37367
37568
|
function objectAt(content, idx) {
|
37368
|
-
|
37369
|
-
return content.objectAt(idx);
|
37370
|
-
}
|
37371
|
-
|
37372
|
-
return content[idx];
|
37569
|
+
return typeof content.objectAt === 'function' ? content.objectAt(idx) : content[idx];
|
37373
37570
|
}
|
37374
37571
|
|
37375
37572
|
function arrayContentWillChange(array, startIdx, removeAmt, addAmt) {
|
@@ -37448,7 +37645,7 @@ enifed('ember-runtime/mixins/array', ['exports', 'ember-utils', 'ember-metal', '
|
|
37448
37645
|
(0, _emberMetal.sendEvent)(array, '@array:change', [array, startIdx, removeAmt, addAmt]);
|
37449
37646
|
|
37450
37647
|
var meta = (0, _emberMetal.peekMeta)(array);
|
37451
|
-
var cache = meta
|
37648
|
+
var cache = meta !== undefined ? meta.readableCache() : undefined;
|
37452
37649
|
if (cache !== undefined) {
|
37453
37650
|
var length = (0, _emberMetal.get)(array, 'length');
|
37454
37651
|
var addedAmount = addAmt === -1 ? 0 : addAmt;
|
@@ -37478,7 +37675,7 @@ enifed('ember-runtime/mixins/array', ['exports', 'ember-utils', 'ember-metal', '
|
|
37478
37675
|
var EMBER_ARRAY = (0, _emberUtils.symbol)('EMBER_ARRAY');
|
37479
37676
|
|
37480
37677
|
function isEmberArray(obj) {
|
37481
|
-
return obj &&
|
37678
|
+
return obj && obj[EMBER_ARRAY];
|
37482
37679
|
}
|
37483
37680
|
|
37484
37681
|
// ..........................................................
|
@@ -37558,17 +37755,13 @@ enifed('ember-runtime/mixins/array', ['exports', 'ember-utils', 'ember-metal', '
|
|
37558
37755
|
|
37559
37756
|
if ((0, _emberMetal.isNone)(beginIndex)) {
|
37560
37757
|
beginIndex = 0;
|
37758
|
+
} else if (beginIndex < 0) {
|
37759
|
+
beginIndex = length + beginIndex;
|
37561
37760
|
}
|
37562
37761
|
|
37563
37762
|
if ((0, _emberMetal.isNone)(endIndex) || endIndex > length) {
|
37564
37763
|
endIndex = length;
|
37565
|
-
}
|
37566
|
-
|
37567
|
-
if (beginIndex < 0) {
|
37568
|
-
beginIndex = length + beginIndex;
|
37569
|
-
}
|
37570
|
-
|
37571
|
-
if (endIndex < 0) {
|
37764
|
+
} else if (endIndex < 0) {
|
37572
37765
|
endIndex = length + endIndex;
|
37573
37766
|
}
|
37574
37767
|
|
@@ -38550,22 +38743,22 @@ enifed('ember-runtime/mixins/evented', ['exports', 'ember-metal'], function (exp
|
|
38550
38743
|
exports.default = _emberMetal.Mixin.create({
|
38551
38744
|
|
38552
38745
|
/**
|
38553
|
-
|
38554
|
-
|
38555
|
-
|
38556
|
-
|
38557
|
-
|
38558
|
-
|
38559
|
-
|
38560
|
-
|
38561
|
-
|
38562
|
-
|
38563
|
-
|
38564
|
-
|
38565
|
-
|
38566
|
-
|
38567
|
-
|
38568
|
-
|
38746
|
+
Subscribes to a named event with given function.
|
38747
|
+
```javascript
|
38748
|
+
person.on('didLoad', function() {
|
38749
|
+
// fired once the person has loaded
|
38750
|
+
});
|
38751
|
+
```
|
38752
|
+
An optional target can be passed in as the 2nd argument that will
|
38753
|
+
be set as the "this" for the callback. This is a good way to give your
|
38754
|
+
function access to the object triggering the event. When the target
|
38755
|
+
parameter is used the callback becomes the third argument.
|
38756
|
+
@method on
|
38757
|
+
@param {String} name The name of the event
|
38758
|
+
@param {Object} [target] The "this" binding for the callback
|
38759
|
+
@param {Function} method The callback to execute
|
38760
|
+
@return this
|
38761
|
+
@public
|
38569
38762
|
*/
|
38570
38763
|
on: function (name, target, method) {
|
38571
38764
|
(0, _emberMetal.addListener)(this, name, target, method);
|
@@ -39417,8 +39610,9 @@ enifed('ember-runtime/mixins/observable', ['exports', 'ember-metal', 'ember-debu
|
|
39417
39610
|
observer should be prepared to handle that.
|
39418
39611
|
### Observer Methods
|
39419
39612
|
Observer methods have the following signature:
|
39420
|
-
```
|
39421
|
-
|
39613
|
+
```app/components/my-component.js
|
39614
|
+
import Component from '@ember/component';
|
39615
|
+
export default Component.extend({
|
39422
39616
|
init() {
|
39423
39617
|
this._super(...arguments);
|
39424
39618
|
this.addObserver('foo', this, 'fooDidChange');
|
@@ -39615,7 +39809,7 @@ enifed('ember-runtime/mixins/promise_proxy', ['exports', 'ember-metal', 'ember-d
|
|
39615
39809
|
let ObjectPromiseProxy = Ember.ObjectProxy.extend(Ember.PromiseProxyMixin);
|
39616
39810
|
|
39617
39811
|
let proxy = ObjectPromiseProxy.create({
|
39618
|
-
promise: Ember.RSVP.
|
39812
|
+
promise: Ember.RSVP.resolve($.getJSON('/some/remote/data.json'))
|
39619
39813
|
});
|
39620
39814
|
|
39621
39815
|
proxy.then(function(json){
|
@@ -39638,7 +39832,7 @@ enifed('ember-runtime/mixins/promise_proxy', ['exports', 'ember-metal', 'ember-d
|
|
39638
39832
|
When the $.getJSON completes, and the promise is fulfilled
|
39639
39833
|
with json, the life cycle attributes will update accordingly.
|
39640
39834
|
Note that $.getJSON doesn't return an ECMA specified promise,
|
39641
|
-
it is useful to wrap this with an `RSVP.
|
39835
|
+
it is useful to wrap this with an `RSVP.resolve` so that it behaves
|
39642
39836
|
as a spec compliant promise.
|
39643
39837
|
|
39644
39838
|
```javascript
|
@@ -41315,8 +41509,10 @@ enifed('ember-runtime/system/native_array', ['exports', 'ember-metal', 'ember-en
|
|
41315
41509
|
|
41316
41510
|
Example
|
41317
41511
|
|
41318
|
-
```js
|
41319
|
-
|
41512
|
+
```app/components/my-component.js
|
41513
|
+
import Component from '@ember/component';
|
41514
|
+
|
41515
|
+
export default Component.extend({
|
41320
41516
|
tagName: 'ul',
|
41321
41517
|
classNames: ['pagination'],
|
41322
41518
|
|
@@ -41449,9 +41645,12 @@ enifed('ember-runtime/system/service', ['exports', 'ember-runtime/system/object'
|
|
41449
41645
|
|
41450
41646
|
Example:
|
41451
41647
|
|
41452
|
-
```
|
41453
|
-
|
41454
|
-
|
41648
|
+
```app/routes/application.js
|
41649
|
+
import Route from '@ember/routing/route';
|
41650
|
+
import { inject as service } from '@ember/service';
|
41651
|
+
|
41652
|
+
export default Route.extend({
|
41653
|
+
authManager: service('auth'),
|
41455
41654
|
|
41456
41655
|
model() {
|
41457
41656
|
return this.get('authManager').findCurrentUser();
|
@@ -45179,17 +45378,20 @@ enifed('ember-utils', ['exports'], function (exports) {
|
|
45179
45378
|
`audioType` passed as an attribute:
|
45180
45379
|
|
45181
45380
|
```app/components/play-audio.js
|
45182
|
-
import
|
45183
|
-
|
45381
|
+
import Component from '@ember/component';
|
45382
|
+
import { computed } from '@ember/object';
|
45383
|
+
import { getOwner } from '@ember/application';
|
45384
|
+
|
45184
45385
|
// Usage:
|
45185
45386
|
//
|
45186
45387
|
// {{play-audio audioType=model.audioType audioFile=model.file}}
|
45187
45388
|
//
|
45188
|
-
export default
|
45189
|
-
audioService:
|
45190
|
-
let owner =
|
45389
|
+
export default Component.extend({
|
45390
|
+
audioService: computed('audioType', function() {
|
45391
|
+
let owner = getOwner(this);
|
45191
45392
|
return owner.lookup(`service:${this.get('audioType')}`);
|
45192
45393
|
}),
|
45394
|
+
|
45193
45395
|
click() {
|
45194
45396
|
let player = this.get('audioService');
|
45195
45397
|
player.play(this.get('audioFile'));
|
@@ -45486,7 +45688,7 @@ enifed('ember-utils', ['exports'], function (exports) {
|
|
45486
45688
|
*/
|
45487
45689
|
function tryInvoke(obj, methodName, args) {
|
45488
45690
|
if (canInvoke(obj, methodName)) {
|
45489
|
-
return
|
45691
|
+
return applyStr(obj, methodName, args);
|
45490
45692
|
}
|
45491
45693
|
}
|
45492
45694
|
|
@@ -45839,9 +46041,9 @@ enifed('ember-views/mixins/action_support', ['exports', 'ember-utils', 'ember-me
|
|
45839
46041
|
For example a component for playing or pausing music may translate click events
|
45840
46042
|
into action notifications of "play" or "stop" depending on some internal state
|
45841
46043
|
of the component:
|
45842
|
-
```
|
45843
|
-
|
45844
|
-
|
46044
|
+
```app/components/play-button.js
|
46045
|
+
import Component from '@ember/component';
|
46046
|
+
export default Component.extend({
|
45845
46047
|
click() {
|
45846
46048
|
if (this.get('isPlaying')) {
|
45847
46049
|
this.sendAction('play');
|
@@ -45859,9 +46061,9 @@ enifed('ember-views/mixins/action_support', ['exports', 'ember-utils', 'ember-me
|
|
45859
46061
|
When the component receives a browser `click` event it translate this
|
45860
46062
|
interaction into application-specific semantics ("play" or "stop") and
|
45861
46063
|
calls the specified action.
|
45862
|
-
```
|
45863
|
-
|
45864
|
-
|
46064
|
+
```app/controller/application.js
|
46065
|
+
import Controller from '@ember/controller';
|
46066
|
+
export default Controller.extend({
|
45865
46067
|
actions: {
|
45866
46068
|
musicStarted() {
|
45867
46069
|
// called when the play button is clicked
|
@@ -45876,9 +46078,9 @@ enifed('ember-views/mixins/action_support', ['exports', 'ember-utils', 'ember-me
|
|
45876
46078
|
```
|
45877
46079
|
If no action is passed to `sendAction` a default name of "action"
|
45878
46080
|
is assumed.
|
45879
|
-
```
|
45880
|
-
|
45881
|
-
|
46081
|
+
```app/components/next-button.js
|
46082
|
+
import Component from '@ember/component';
|
46083
|
+
export default Component.extend({
|
45882
46084
|
click() {
|
45883
46085
|
this.sendAction();
|
45884
46086
|
}
|
@@ -45888,9 +46090,9 @@ enifed('ember-views/mixins/action_support', ['exports', 'ember-utils', 'ember-me
|
|
45888
46090
|
{{! app/templates/application.hbs }}
|
45889
46091
|
{{next-button action=(action "playNextSongInAlbum")}}
|
45890
46092
|
```
|
45891
|
-
```
|
45892
|
-
|
45893
|
-
|
46093
|
+
```app/controllers/application.js
|
46094
|
+
import Controller from '@ember/controller';
|
46095
|
+
export default Controller.extend({
|
45894
46096
|
actions: {
|
45895
46097
|
playNextSongInAlbum() {
|
45896
46098
|
...
|
@@ -46430,8 +46632,9 @@ enifed('ember-views/mixins/view_support', ['exports', 'ember-utils', 'ember-meta
|
|
46430
46632
|
is a string value, the value of that string will be applied as the value
|
46431
46633
|
for an attribute of the property's name.
|
46432
46634
|
The following example creates a tag like `<div priority="high" />`.
|
46433
|
-
```
|
46434
|
-
|
46635
|
+
```app/components/my-component.js
|
46636
|
+
import Component from '@ember/component';
|
46637
|
+
export default Component.extend({
|
46435
46638
|
attributeBindings: ['priority'],
|
46436
46639
|
priority: 'high'
|
46437
46640
|
});
|
@@ -46440,8 +46643,9 @@ enifed('ember-views/mixins/view_support', ['exports', 'ember-utils', 'ember-meta
|
|
46440
46643
|
an HTML Boolean attribute. It will be present if the property is `true`
|
46441
46644
|
and omitted if the property is `false`.
|
46442
46645
|
The following example creates markup like `<div visible />`.
|
46443
|
-
```
|
46444
|
-
|
46646
|
+
```app/components/my-component.js
|
46647
|
+
import Component from '@ember/component';
|
46648
|
+
export default Component.extend({
|
46445
46649
|
attributeBindings: ['visible'],
|
46446
46650
|
visible: true
|
46447
46651
|
});
|
@@ -46449,8 +46653,9 @@ enifed('ember-views/mixins/view_support', ['exports', 'ember-utils', 'ember-meta
|
|
46449
46653
|
If you would prefer to use a custom value instead of the property name,
|
46450
46654
|
you can create the same markup as the last example with a binding like
|
46451
46655
|
this:
|
46452
|
-
```
|
46453
|
-
|
46656
|
+
```app/components/my-component.js
|
46657
|
+
import Component from '@ember/component';
|
46658
|
+
export default Component.extend({
|
46454
46659
|
attributeBindings: ['isVisible:visible'],
|
46455
46660
|
isVisible: true
|
46456
46661
|
});
|
@@ -47838,15 +48043,15 @@ enifed('ember/index', ['exports', 'require', 'ember-environment', 'node-module',
|
|
47838
48043
|
computed.collect = _emberRuntime.collect;
|
47839
48044
|
|
47840
48045
|
/**
|
47841
|
-
|
47842
|
-
|
47843
|
-
|
48046
|
+
Defines the hash of localized strings for the current language. Used by
|
48047
|
+
the `Ember.String.loc()` helper. To localize, add string values to this
|
48048
|
+
hash.
|
47844
48049
|
|
47845
|
-
|
47846
|
-
|
47847
|
-
|
47848
|
-
|
47849
|
-
|
48050
|
+
@property STRINGS
|
48051
|
+
@for Ember
|
48052
|
+
@type Object
|
48053
|
+
@private
|
48054
|
+
*/
|
47850
48055
|
Object.defineProperty(_emberMetal.default, 'STRINGS', {
|
47851
48056
|
configurable: false,
|
47852
48057
|
get: _emberRuntime.getStrings,
|
@@ -47854,19 +48059,19 @@ enifed('ember/index', ['exports', 'require', 'ember-environment', 'node-module',
|
|
47854
48059
|
});
|
47855
48060
|
|
47856
48061
|
/**
|
47857
|
-
|
48062
|
+
Whether searching on the global for new Namespace instances is enabled.
|
47858
48063
|
|
47859
|
-
|
47860
|
-
|
47861
|
-
|
48064
|
+
This is only exported here as to not break any addons. Given the new
|
48065
|
+
visit API, you will have issues if you treat this as a indicator of
|
48066
|
+
booted.
|
47862
48067
|
|
47863
|
-
|
48068
|
+
Internally this is only exposing a flag in Namespace.
|
47864
48069
|
|
47865
|
-
|
47866
|
-
|
47867
|
-
|
47868
|
-
|
47869
|
-
|
48070
|
+
@property BOOTED
|
48071
|
+
@for Ember
|
48072
|
+
@type Boolean
|
48073
|
+
@private
|
48074
|
+
*/
|
47870
48075
|
Object.defineProperty(_emberMetal.default, 'BOOTED', {
|
47871
48076
|
configurable: false,
|
47872
48077
|
enumerable: false,
|
@@ -47903,15 +48108,15 @@ enifed('ember/index', ['exports', 'require', 'ember-environment', 'node-module',
|
|
47903
48108
|
_emberRuntime.String.isHTMLSafe = _emberGlimmer.isHTMLSafe;
|
47904
48109
|
|
47905
48110
|
/**
|
47906
|
-
|
47907
|
-
|
47908
|
-
|
48111
|
+
Global hash of shared templates. This will automatically be populated
|
48112
|
+
by the build tools so that you can store your Handlebars templates in
|
48113
|
+
separate files that get loaded into JavaScript at buildtime.
|
47909
48114
|
|
47910
|
-
|
47911
|
-
|
47912
|
-
|
47913
|
-
|
47914
|
-
|
48115
|
+
@property TEMPLATES
|
48116
|
+
@for Ember
|
48117
|
+
@type Object
|
48118
|
+
@private
|
48119
|
+
*/
|
47915
48120
|
Object.defineProperty(_emberMetal.default, 'TEMPLATES', {
|
47916
48121
|
get: _emberGlimmer.getTemplates,
|
47917
48122
|
set: _emberGlimmer.setTemplates,
|
@@ -47923,11 +48128,12 @@ enifed('ember/index', ['exports', 'require', 'ember-environment', 'node-module',
|
|
47923
48128
|
|
47924
48129
|
|
47925
48130
|
/**
|
47926
|
-
|
47927
|
-
|
47928
|
-
|
47929
|
-
|
47930
|
-
|
48131
|
+
The semantic version
|
48132
|
+
|
48133
|
+
@property VERSION
|
48134
|
+
@type String
|
48135
|
+
@public
|
48136
|
+
*/
|
47931
48137
|
_emberMetal.default.VERSION = _version.default;
|
47932
48138
|
|
47933
48139
|
_emberMetal.libraries.registerCoreLibrary('Ember', _version.default);
|
@@ -47935,13 +48141,14 @@ enifed('ember/index', ['exports', 'require', 'ember-environment', 'node-module',
|
|
47935
48141
|
// require the main entry points for each of these packages
|
47936
48142
|
// this is so that the global exports occur properly
|
47937
48143
|
|
48144
|
+
|
47938
48145
|
/**
|
47939
|
-
|
48146
|
+
Alias for jQuery
|
47940
48147
|
|
47941
|
-
|
47942
|
-
|
47943
|
-
|
47944
|
-
|
48148
|
+
@method $
|
48149
|
+
@for Ember
|
48150
|
+
@public
|
48151
|
+
*/
|
47945
48152
|
_emberMetal.default.$ = _emberViews.jQuery;
|
47946
48153
|
|
47947
48154
|
_emberMetal.default.ViewTargetActionSupport = _emberViews.ViewTargetActionSupport;
|
@@ -48001,7 +48208,7 @@ enifed('ember/index', ['exports', 'require', 'ember-environment', 'node-module',
|
|
48001
48208
|
(0, _emberRuntime.runLoadHooks)('Ember');
|
48002
48209
|
|
48003
48210
|
/**
|
48004
|
-
|
48211
|
+
@module ember
|
48005
48212
|
*/
|
48006
48213
|
exports.default = _emberMetal.default;
|
48007
48214
|
|
@@ -48016,7 +48223,7 @@ enifed('ember/index', ['exports', 'require', 'ember-environment', 'node-module',
|
|
48016
48223
|
enifed("ember/version", ["exports"], function (exports) {
|
48017
48224
|
"use strict";
|
48018
48225
|
|
48019
|
-
exports.default = "2.16.0-beta.
|
48226
|
+
exports.default = "2.16.0-beta.2";
|
48020
48227
|
});
|
48021
48228
|
enifed("handlebars", ["exports"], function (exports) {
|
48022
48229
|
"use strict";
|