ember-source 1.8.0.beta.2 → 1.8.0.beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/dist/ember-runtime.js +354 -190
- data/dist/ember-tests.js +507 -64
- data/dist/ember-tests.prod.js +507 -64
- data/dist/ember.js +853 -519
- data/dist/ember.min.js +12 -12
- data/dist/ember.prod.js +851 -519
- metadata +2 -2
data/dist/ember.js
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
* Portions Copyright 2008-2011 Apple Inc. All rights reserved.
|
6
6
|
* @license Licensed under MIT license
|
7
7
|
* See https://raw.github.com/emberjs/ember.js/master/LICENSE
|
8
|
-
* @version 1.8.0-beta.
|
8
|
+
* @version 1.8.0-beta.3
|
9
9
|
*/
|
10
10
|
|
11
11
|
(function() {
|
@@ -6336,7 +6336,7 @@ define("ember-handlebars/controls/text_area",
|
|
6336
6336
|
classNames: ['ember-text-area'],
|
6337
6337
|
|
6338
6338
|
tagName: "textarea",
|
6339
|
-
attributeBindings: ['rows', 'cols', 'name', 'selectionEnd', 'selectionStart', 'wrap'],
|
6339
|
+
attributeBindings: ['rows', 'cols', 'name', 'selectionEnd', 'selectionStart', 'wrap', 'lang', 'dir'],
|
6340
6340
|
rows: null,
|
6341
6341
|
cols: null,
|
6342
6342
|
|
@@ -6395,7 +6395,7 @@ define("ember-handlebars/controls/text_field",
|
|
6395
6395
|
attributeBindings: ['type', 'value', 'size', 'pattern', 'name', 'min', 'max',
|
6396
6396
|
'accept', 'autocomplete', 'autosave', 'formaction',
|
6397
6397
|
'formenctype', 'formmethod', 'formnovalidate', 'formtarget',
|
6398
|
-
'height', 'inputmode', 'list', 'multiple', 'step',
|
6398
|
+
'height', 'inputmode', 'list', 'multiple', 'step', 'lang', 'dir',
|
6399
6399
|
'width'],
|
6400
6400
|
|
6401
6401
|
/**
|
@@ -8513,8 +8513,6 @@ define("ember-handlebars/helpers/collection",
|
|
8513
8513
|
var viewOptions = ViewHelper.propertiesFromHTMLOptions({ data: data, hash: itemHash }, this);
|
8514
8514
|
hash.itemViewClass = itemViewClass.extend(viewOptions);
|
8515
8515
|
|
8516
|
-
options.helperName = options.helperName || 'collection';
|
8517
|
-
|
8518
8516
|
return helpers.view.call(this, collectionClass, options);
|
8519
8517
|
}
|
8520
8518
|
|
@@ -9413,7 +9411,7 @@ define("ember-handlebars/helpers/unbound",
|
|
9413
9411
|
}
|
9414
9412
|
});
|
9415
9413
|
define("ember-handlebars/helpers/view",
|
9416
|
-
["ember-metal/core","ember-runtime/system/object","ember-metal/property_get","ember-metal/property_set","ember-metal/mixin","ember-views/system/jquery","ember-views/views/view","ember-metal/binding","ember-metal/
|
9414
|
+
["ember-metal/core","ember-runtime/system/object","ember-metal/property_get","ember-metal/property_set","ember-metal/mixin","ember-views/system/jquery","ember-views/views/view","ember-metal/binding","ember-metal/keys","ember-handlebars/ext","ember-runtime/system/string","exports"],
|
9417
9415
|
function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __exports__) {
|
9418
9416
|
"use strict";
|
9419
9417
|
/*globals Handlebars */
|
@@ -9434,7 +9432,7 @@ define("ember-handlebars/helpers/view",
|
|
9434
9432
|
var jQuery = __dependency6__["default"];
|
9435
9433
|
var View = __dependency7__["default"];
|
9436
9434
|
var isGlobalPath = __dependency8__.isGlobalPath;
|
9437
|
-
var
|
9435
|
+
var keys = __dependency9__["default"];
|
9438
9436
|
var normalizePath = __dependency10__.normalizePath;
|
9439
9437
|
var handlebarsGet = __dependency10__.handlebarsGet;
|
9440
9438
|
var handlebarsGetView = __dependency10__.handlebarsGetView;
|
@@ -9474,92 +9472,90 @@ define("ember-handlebars/helpers/view",
|
|
9474
9472
|
}
|
9475
9473
|
|
9476
9474
|
var ViewHelper = EmberObject.create({
|
9477
|
-
|
9478
9475
|
propertiesFromHTMLOptions: function(options) {
|
9479
|
-
var hash = options.hash
|
9480
|
-
var
|
9476
|
+
var hash = options.hash;
|
9477
|
+
var data = options.data;
|
9478
|
+
var extensions = {
|
9479
|
+
classNameBindings: [],
|
9480
|
+
helperName: options.helperName || ''
|
9481
|
+
};
|
9481
9482
|
var classes = hash['class'];
|
9482
|
-
var dup = false;
|
9483
9483
|
|
9484
9484
|
if (hash.id) {
|
9485
9485
|
extensions.elementId = hash.id;
|
9486
|
-
dup = true;
|
9487
9486
|
}
|
9488
9487
|
|
9489
9488
|
if (hash.tag) {
|
9490
9489
|
extensions.tagName = hash.tag;
|
9491
|
-
dup = true;
|
9492
9490
|
}
|
9493
9491
|
|
9494
9492
|
if (classes) {
|
9495
9493
|
classes = classes.split(' ');
|
9496
9494
|
extensions.classNames = classes;
|
9497
|
-
dup = true;
|
9498
9495
|
}
|
9499
9496
|
|
9500
9497
|
if (hash.classBinding) {
|
9501
9498
|
extensions.classNameBindings = hash.classBinding.split(' ');
|
9502
|
-
dup = true;
|
9503
9499
|
}
|
9504
9500
|
|
9505
9501
|
if (hash.classNameBindings) {
|
9506
|
-
if (extensions.classNameBindings === undefined) extensions.classNameBindings = [];
|
9507
9502
|
extensions.classNameBindings = extensions.classNameBindings.concat(hash.classNameBindings.split(' '));
|
9508
|
-
dup = true;
|
9509
9503
|
}
|
9510
9504
|
|
9511
9505
|
if (hash.attributeBindings) {
|
9512
9506
|
Ember.assert("Setting 'attributeBindings' via Handlebars is not allowed. Please subclass Ember.View and set it there instead.");
|
9513
9507
|
extensions.attributeBindings = null;
|
9514
|
-
dup = true;
|
9515
|
-
}
|
9516
|
-
|
9517
|
-
if (dup) {
|
9518
|
-
hash = merge({}, hash);
|
9519
|
-
delete hash.id;
|
9520
|
-
delete hash.tag;
|
9521
|
-
delete hash['class'];
|
9522
|
-
delete hash.classBinding;
|
9523
9508
|
}
|
9524
9509
|
|
9525
9510
|
// Set the proper context for all bindings passed to the helper. This applies to regular attribute bindings
|
9526
9511
|
// as well as class name bindings. If the bindings are local, make them relative to the current context
|
9527
9512
|
// instead of the view.
|
9528
9513
|
var path;
|
9514
|
+
var hashKeys = keys(hash);
|
9529
9515
|
|
9530
|
-
|
9531
|
-
|
9532
|
-
|
9516
|
+
for (var i = 0, l = hashKeys.length; i < l; i++) {
|
9517
|
+
var prop = hashKeys[i];
|
9518
|
+
var isBinding = IS_BINDING.test(prop);
|
9519
|
+
|
9520
|
+
if (prop !== 'classNameBindings') {
|
9521
|
+
extensions[prop] = hash[prop];
|
9522
|
+
}
|
9533
9523
|
|
9534
9524
|
// Test if the property ends in "Binding"
|
9535
|
-
if (
|
9525
|
+
if (isBinding && typeof extensions[prop] === 'string') {
|
9536
9526
|
path = this.contextualizeBindingPath(hash[prop], data);
|
9537
|
-
if (path) {
|
9527
|
+
if (path) {
|
9528
|
+
extensions[prop] = path;
|
9529
|
+
}
|
9538
9530
|
}
|
9539
9531
|
}
|
9540
9532
|
|
9541
9533
|
// Evaluate the context of class name bindings:
|
9542
|
-
|
9543
|
-
|
9544
|
-
|
9545
|
-
|
9546
|
-
|
9547
|
-
|
9548
|
-
|
9549
|
-
|
9550
|
-
|
9551
|
-
|
9552
|
-
|
9553
|
-
|
9554
|
-
|
9555
|
-
|
9556
|
-
|
9534
|
+
var classNameBindingsKeys = keys(extensions.classNameBindings);
|
9535
|
+
|
9536
|
+
for (var j = 0, k = classNameBindingsKeys.length; j < k; j++) {
|
9537
|
+
var classKey = classNameBindingsKeys[j];
|
9538
|
+
var full = extensions.classNameBindings[classKey];
|
9539
|
+
|
9540
|
+
if (typeof full === 'string') {
|
9541
|
+
// Contextualize the path of classNameBinding so this:
|
9542
|
+
//
|
9543
|
+
// classNameBinding="isGreen:green"
|
9544
|
+
//
|
9545
|
+
// is converted to this:
|
9546
|
+
//
|
9547
|
+
// classNameBinding="_parentView.context.isGreen:green"
|
9548
|
+
var parsedPath = View._parsePropertyPath(full);
|
9549
|
+
if (parsedPath.path !== '') {
|
9550
|
+
path = this.contextualizeBindingPath(parsedPath.path, data);
|
9551
|
+
if (path) {
|
9552
|
+
extensions.classNameBindings[classKey] = path + parsedPath.classNames;
|
9557
9553
|
}
|
9558
9554
|
}
|
9559
9555
|
}
|
9560
9556
|
}
|
9561
9557
|
|
9562
|
-
return
|
9558
|
+
return extensions;
|
9563
9559
|
},
|
9564
9560
|
|
9565
9561
|
// Transform bindings from the current context to a context that can be evaluated within the view.
|
@@ -9581,7 +9577,7 @@ define("ember-handlebars/helpers/view",
|
|
9581
9577
|
|
9582
9578
|
helper: function(thisContext, path, options) {
|
9583
9579
|
var data = options.data;
|
9584
|
-
var fn
|
9580
|
+
var fn = options.fn;
|
9585
9581
|
var newView;
|
9586
9582
|
|
9587
9583
|
makeBindings(thisContext, options);
|
@@ -9605,17 +9601,12 @@ define("ember-handlebars/helpers/view",
|
|
9605
9601
|
viewOptions._context = thisContext;
|
9606
9602
|
}
|
9607
9603
|
|
9608
|
-
// for instrumentation
|
9609
|
-
if (options.helperName) {
|
9610
|
-
viewOptions.helperName = options.helperName;
|
9611
|
-
}
|
9612
|
-
|
9613
9604
|
currentView.appendChild(newView, viewOptions);
|
9614
9605
|
},
|
9615
9606
|
|
9616
9607
|
instanceHelper: function(thisContext, newView, options) {
|
9617
|
-
var data = options.data
|
9618
|
-
|
9608
|
+
var data = options.data;
|
9609
|
+
var fn = options.fn;
|
9619
9610
|
|
9620
9611
|
makeBindings(thisContext, options);
|
9621
9612
|
|
@@ -9639,11 +9630,6 @@ define("ember-handlebars/helpers/view",
|
|
9639
9630
|
viewOptions._context = thisContext;
|
9640
9631
|
}
|
9641
9632
|
|
9642
|
-
// for instrumentation
|
9643
|
-
if (options.helperName) {
|
9644
|
-
viewOptions.helperName = options.helperName;
|
9645
|
-
}
|
9646
|
-
|
9647
9633
|
currentView.appendChild(newView, viewOptions);
|
9648
9634
|
}
|
9649
9635
|
});
|
@@ -10559,9 +10545,10 @@ define("ember-metal-views/renderer",
|
|
10559
10545
|
|
10560
10546
|
var parentIndex = -1;
|
10561
10547
|
var parents = this._parents;
|
10562
|
-
var parent = null;
|
10548
|
+
var parent = _parentView || null;
|
10563
10549
|
var elements = this._elements;
|
10564
10550
|
var element = null;
|
10551
|
+
var contextualElement = null;
|
10565
10552
|
var level = 0;
|
10566
10553
|
|
10567
10554
|
var view = _view;
|
@@ -10580,7 +10567,18 @@ define("ember-metal-views/renderer",
|
|
10580
10567
|
}
|
10581
10568
|
|
10582
10569
|
this.willCreateElement(view);
|
10583
|
-
|
10570
|
+
|
10571
|
+
contextualElement = view._morph && view._morph.contextualElement;
|
10572
|
+
if (!contextualElement && parent && parent._childViewsMorph) {
|
10573
|
+
contextualElement = parent._childViewsMorph.contextualElement;
|
10574
|
+
}
|
10575
|
+
if (!contextualElement && view._didCreateElementWithoutMorph) {
|
10576
|
+
// This code path is only used by createElement and rerender when createElement
|
10577
|
+
// was previously called on a view.
|
10578
|
+
contextualElement = document.body;
|
10579
|
+
}
|
10580
|
+
Ember.assert("Required contextualElement for view "+_view+" is missing", contextualElement);
|
10581
|
+
element = this.createElement(view, contextualElement);
|
10584
10582
|
|
10585
10583
|
parents[level++] = parentIndex;
|
10586
10584
|
parentIndex = index;
|
@@ -10617,7 +10615,7 @@ define("ember-metal-views/renderer",
|
|
10617
10615
|
}
|
10618
10616
|
|
10619
10617
|
parentIndex = parents[level];
|
10620
|
-
parent = views[parentIndex];
|
10618
|
+
parent = parentIndex === -1 ? _parentView : views[parentIndex];
|
10621
10619
|
this.insertElement(view, parent, element, -1);
|
10622
10620
|
index = queue[--length];
|
10623
10621
|
view = views[index];
|
@@ -10650,8 +10648,9 @@ define("ember-metal-views/renderer",
|
|
10650
10648
|
Renderer.prototype.scheduleInsert =
|
10651
10649
|
function Renderer_scheduleInsert(view, morph) {
|
10652
10650
|
if (view._morph || view._elementCreated) {
|
10653
|
-
throw new Error("You
|
10651
|
+
throw new Error("You cannot insert a View that has already been rendered");
|
10654
10652
|
}
|
10653
|
+
Ember.assert("You cannot insert a View without a morph", morph);
|
10655
10654
|
view._morph = morph;
|
10656
10655
|
var viewId = this.uuid(view);
|
10657
10656
|
this._inserts[viewId] = this.scheduleRender(this, function() {
|
@@ -12234,12 +12233,26 @@ define("ember-metal/chains",
|
|
12234
12233
|
|
12235
12234
|
function finishChains(obj) {
|
12236
12235
|
// We only create meta if we really have to
|
12237
|
-
var m = obj['__ember_meta__'],
|
12238
|
-
|
12239
|
-
|
12236
|
+
var m = obj['__ember_meta__'],
|
12237
|
+
chains, chainWatchers, chainNodes;
|
12238
|
+
if (m) {
|
12239
|
+
// finish any current chains node watchers that reference obj
|
12240
|
+
chainWatchers = m.chainWatchers;
|
12241
|
+
if (chainWatchers) {
|
12242
|
+
for(var key in chainWatchers) {
|
12243
|
+
if (!chainWatchers.hasOwnProperty(key)) { continue; }
|
12244
|
+
chainNodes = chainWatchers[key];
|
12245
|
+
if (chainNodes) {
|
12246
|
+
for (var i=0,l=chainNodes.length;i<l;i++) {
|
12247
|
+
chainNodes[i].didChange(null);
|
12248
|
+
}
|
12249
|
+
}
|
12250
|
+
}
|
12251
|
+
}
|
12252
|
+
// copy chains from prototype
|
12253
|
+
chains = m.chains;
|
12254
|
+
if (chains && chains.value() !== obj) {
|
12240
12255
|
metaFor(obj).chains = chains = chains.copy(obj);
|
12241
|
-
} else {
|
12242
|
-
chains.didChange(null);
|
12243
12256
|
}
|
12244
12257
|
}
|
12245
12258
|
}
|
@@ -13589,7 +13602,7 @@ define("ember-metal/core",
|
|
13589
13602
|
|
13590
13603
|
@class Ember
|
13591
13604
|
@static
|
13592
|
-
@version 1.8.0-beta.
|
13605
|
+
@version 1.8.0-beta.3
|
13593
13606
|
*/
|
13594
13607
|
|
13595
13608
|
if ('undefined' === typeof Ember) {
|
@@ -13616,10 +13629,10 @@ define("ember-metal/core",
|
|
13616
13629
|
/**
|
13617
13630
|
@property VERSION
|
13618
13631
|
@type String
|
13619
|
-
@default '1.8.0-beta.
|
13632
|
+
@default '1.8.0-beta.3'
|
13620
13633
|
@static
|
13621
13634
|
*/
|
13622
|
-
Ember.VERSION = '1.8.0-beta.
|
13635
|
+
Ember.VERSION = '1.8.0-beta.3';
|
13623
13636
|
|
13624
13637
|
/**
|
13625
13638
|
Standard environmental variables. You can define these in a global `EmberENV`
|
@@ -15145,11 +15158,10 @@ define("ember-metal/is_present",
|
|
15145
15158
|
__exports__["default"] = isPresent;
|
15146
15159
|
});
|
15147
15160
|
define("ember-metal/keys",
|
15148
|
-
["ember-metal/
|
15149
|
-
function(__dependency1__,
|
15161
|
+
["ember-metal/platform","exports"],
|
15162
|
+
function(__dependency1__, __exports__) {
|
15150
15163
|
"use strict";
|
15151
|
-
var
|
15152
|
-
var canDefineNonEnumerableProperties = __dependency2__.canDefineNonEnumerableProperties;
|
15164
|
+
var canDefineNonEnumerableProperties = __dependency1__.canDefineNonEnumerableProperties;
|
15153
15165
|
|
15154
15166
|
/**
|
15155
15167
|
Returns all of the keys defined on an object or hash. This is useful
|
@@ -15164,54 +15176,47 @@ define("ember-metal/keys",
|
|
15164
15176
|
var keys = Object.keys;
|
15165
15177
|
|
15166
15178
|
if (!keys || !canDefineNonEnumerableProperties) {
|
15167
|
-
|
15168
|
-
|
15169
|
-
|
15170
|
-
|
15171
|
-
|
15172
|
-
|
15173
|
-
|
15174
|
-
|
15175
|
-
|
15176
|
-
|
15177
|
-
|
15178
|
-
|
15179
|
-
|
15180
|
-
|
15181
|
-
|
15182
|
-
|
15183
|
-
|
15184
|
-
|
15185
|
-
|
15186
|
-
|
15187
|
-
|
15188
|
-
|
15189
|
-
|
15190
|
-
|
15191
|
-
|
15192
|
-
|
15193
|
-
|
15194
|
-
|
15195
|
-
|
15196
|
-
|
15197
|
-
|
15198
|
-
keys = function keys(obj) {
|
15199
|
-
var ret = [];
|
15200
|
-
var key;
|
15201
|
-
|
15202
|
-
for (key in obj) {
|
15203
|
-
pushPropertyName(obj, ret, key);
|
15204
|
-
}
|
15205
|
-
|
15206
|
-
// IE8 doesn't enumerate property that named the same as prototype properties.
|
15207
|
-
for (var i = 0, l = prototypeProperties.length; i < l; i++) {
|
15208
|
-
key = prototypeProperties[i];
|
15209
|
-
|
15210
|
-
pushPropertyName(obj, ret, key);
|
15211
|
-
}
|
15179
|
+
// modified from
|
15180
|
+
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
|
15181
|
+
keys = (function () {
|
15182
|
+
var hasOwnProperty = Object.prototype.hasOwnProperty,
|
15183
|
+
hasDontEnumBug = !({toString: null}).propertyIsEnumerable('toString'),
|
15184
|
+
dontEnums = [
|
15185
|
+
'toString',
|
15186
|
+
'toLocaleString',
|
15187
|
+
'valueOf',
|
15188
|
+
'hasOwnProperty',
|
15189
|
+
'isPrototypeOf',
|
15190
|
+
'propertyIsEnumerable',
|
15191
|
+
'constructor'
|
15192
|
+
],
|
15193
|
+
dontEnumsLength = dontEnums.length;
|
15194
|
+
|
15195
|
+
return function keys(obj) {
|
15196
|
+
if (typeof obj !== 'object' && (typeof obj !== 'function' || obj === null)) {
|
15197
|
+
throw new TypeError('Object.keys called on non-object');
|
15198
|
+
}
|
15199
|
+
|
15200
|
+
var result = [], prop, i;
|
15201
|
+
|
15202
|
+
for (prop in obj) {
|
15203
|
+
if (prop !== '_super' &&
|
15204
|
+
prop.lastIndexOf('__',0) !== 0 &&
|
15205
|
+
hasOwnProperty.call(obj, prop)) {
|
15206
|
+
result.push(prop);
|
15207
|
+
}
|
15208
|
+
}
|
15212
15209
|
|
15213
|
-
|
15214
|
-
|
15210
|
+
if (hasDontEnumBug) {
|
15211
|
+
for (i = 0; i < dontEnumsLength; i++) {
|
15212
|
+
if (hasOwnProperty.call(obj, dontEnums[i])) {
|
15213
|
+
result.push(dontEnums[i]);
|
15214
|
+
}
|
15215
|
+
}
|
15216
|
+
}
|
15217
|
+
return result;
|
15218
|
+
};
|
15219
|
+
}());
|
15215
15220
|
}
|
15216
15221
|
|
15217
15222
|
__exports__["default"] = keys;
|
@@ -15413,8 +15418,8 @@ define("ember-metal/logger",
|
|
15413
15418
|
};
|
15414
15419
|
});
|
15415
15420
|
define("ember-metal/map",
|
15416
|
-
["ember-metal/
|
15417
|
-
function(__dependency1__, __dependency2__, __dependency3__,
|
15421
|
+
["ember-metal/utils","ember-metal/array","ember-metal/platform","exports"],
|
15422
|
+
function(__dependency1__, __dependency2__, __dependency3__, __exports__) {
|
15418
15423
|
"use strict";
|
15419
15424
|
/**
|
15420
15425
|
@module ember-metal
|
@@ -15440,13 +15445,20 @@ define("ember-metal/map",
|
|
15440
15445
|
`Ember.Map.create()` for symmetry with other Ember classes.
|
15441
15446
|
*/
|
15442
15447
|
|
15443
|
-
var
|
15444
|
-
var
|
15445
|
-
var
|
15446
|
-
var create = __dependency4__.create;
|
15448
|
+
var guidFor = __dependency1__.guidFor;
|
15449
|
+
var indexOf = __dependency2__.indexOf;
|
15450
|
+
var create = __dependency3__.create;
|
15447
15451
|
|
15448
|
-
function
|
15449
|
-
|
15452
|
+
function missingFunction(fn) {
|
15453
|
+
throw new TypeError('' + Object.prototype.toString.call(fn) + " is not a function");
|
15454
|
+
}
|
15455
|
+
|
15456
|
+
function missingNew(name) {
|
15457
|
+
throw new TypeError("Constructor " + name + "requires 'new'");
|
15458
|
+
}
|
15459
|
+
|
15460
|
+
function copyNull(obj) {
|
15461
|
+
var output = Object.create(null);
|
15450
15462
|
|
15451
15463
|
for (var prop in obj) {
|
15452
15464
|
// hasOwnPropery is not needed because obj is Object.create(null);
|
@@ -15458,11 +15470,11 @@ define("ember-metal/map",
|
|
15458
15470
|
|
15459
15471
|
function copyMap(original, newObject) {
|
15460
15472
|
var keys = original.keys.copy();
|
15461
|
-
var values =
|
15473
|
+
var values = copyNull(original.values);
|
15462
15474
|
|
15463
15475
|
newObject.keys = keys;
|
15464
15476
|
newObject.values = values;
|
15465
|
-
newObject.
|
15477
|
+
newObject.size = original.size;
|
15466
15478
|
|
15467
15479
|
return newObject;
|
15468
15480
|
}
|
@@ -15478,7 +15490,12 @@ define("ember-metal/map",
|
|
15478
15490
|
@private
|
15479
15491
|
*/
|
15480
15492
|
function OrderedSet() {
|
15481
|
-
|
15493
|
+
|
15494
|
+
if (this instanceof OrderedSet) {
|
15495
|
+
this.clear();
|
15496
|
+
} else {
|
15497
|
+
missingNew("OrderedSet");
|
15498
|
+
}
|
15482
15499
|
}
|
15483
15500
|
|
15484
15501
|
/**
|
@@ -15487,47 +15504,77 @@ define("ember-metal/map",
|
|
15487
15504
|
@return {Ember.OrderedSet}
|
15488
15505
|
*/
|
15489
15506
|
OrderedSet.create = function() {
|
15490
|
-
|
15507
|
+
var Constructor = this;
|
15508
|
+
|
15509
|
+
return new Constructor();
|
15491
15510
|
};
|
15492
15511
|
|
15493
15512
|
OrderedSet.prototype = {
|
15513
|
+
constructor: OrderedSet,
|
15494
15514
|
/**
|
15495
15515
|
@method clear
|
15496
15516
|
*/
|
15497
15517
|
clear: function() {
|
15498
15518
|
this.presenceSet = Object.create(null);
|
15499
15519
|
this.list = [];
|
15520
|
+
this.size = 0;
|
15500
15521
|
},
|
15501
15522
|
|
15502
15523
|
/**
|
15503
15524
|
@method add
|
15504
15525
|
@param obj
|
15526
|
+
@param guid (optional, and for internal use)
|
15527
|
+
@return {Ember.OrderedSet}
|
15505
15528
|
*/
|
15506
|
-
add: function(obj) {
|
15507
|
-
var guid = guidFor(obj);
|
15529
|
+
add: function(obj, _guid) {
|
15530
|
+
var guid = _guid || guidFor(obj);
|
15508
15531
|
var presenceSet = this.presenceSet;
|
15509
15532
|
var list = this.list;
|
15510
15533
|
|
15511
|
-
if (presenceSet[guid]) {
|
15534
|
+
if (presenceSet[guid]) {
|
15535
|
+
return;
|
15536
|
+
}
|
15512
15537
|
|
15513
15538
|
presenceSet[guid] = true;
|
15514
15539
|
list.push(obj);
|
15540
|
+
this.size++;
|
15541
|
+
|
15542
|
+
return this;
|
15515
15543
|
},
|
15516
15544
|
|
15517
15545
|
/**
|
15546
|
+
@deprecated
|
15547
|
+
|
15518
15548
|
@method remove
|
15519
15549
|
@param obj
|
15550
|
+
@param _guid (optional and for internal use only)
|
15551
|
+
@return {Boolean}
|
15520
15552
|
*/
|
15521
|
-
remove: function(obj) {
|
15522
|
-
|
15553
|
+
remove: function(obj, _guid) {
|
15554
|
+
return this['delete'](obj, _guid);
|
15555
|
+
},
|
15556
|
+
|
15557
|
+
/**
|
15558
|
+
@method delete
|
15559
|
+
@param obj
|
15560
|
+
@param _guid (optional and for internal use only)
|
15561
|
+
@return {Boolean}
|
15562
|
+
*/
|
15563
|
+
'delete': function(obj, _guid) {
|
15564
|
+
var guid = _guid || guidFor(obj);
|
15523
15565
|
var presenceSet = this.presenceSet;
|
15524
15566
|
var list = this.list;
|
15525
15567
|
|
15526
|
-
|
15527
|
-
|
15528
|
-
|
15529
|
-
|
15530
|
-
|
15568
|
+
if (presenceSet[guid] !== undefined) {
|
15569
|
+
delete presenceSet[guid];
|
15570
|
+
var index = indexOf.call(list, obj);
|
15571
|
+
if (index > -1) {
|
15572
|
+
list.splice(index, 1);
|
15573
|
+
}
|
15574
|
+
this.size--;
|
15575
|
+
return true;
|
15576
|
+
} else {
|
15577
|
+
return false;
|
15531
15578
|
}
|
15532
15579
|
},
|
15533
15580
|
|
@@ -15536,7 +15583,7 @@ define("ember-metal/map",
|
|
15536
15583
|
@return {Boolean}
|
15537
15584
|
*/
|
15538
15585
|
isEmpty: function() {
|
15539
|
-
return this.
|
15586
|
+
return this.size === 0;
|
15540
15587
|
},
|
15541
15588
|
|
15542
15589
|
/**
|
@@ -15548,7 +15595,7 @@ define("ember-metal/map",
|
|
15548
15595
|
var guid = guidFor(obj);
|
15549
15596
|
var presenceSet = this.presenceSet;
|
15550
15597
|
|
15551
|
-
return presenceSet[guid];
|
15598
|
+
return !!presenceSet[guid];
|
15552
15599
|
},
|
15553
15600
|
|
15554
15601
|
/**
|
@@ -15556,12 +15603,19 @@ define("ember-metal/map",
|
|
15556
15603
|
@param {Function} fn
|
15557
15604
|
@param self
|
15558
15605
|
*/
|
15559
|
-
forEach: function(fn,
|
15560
|
-
|
15561
|
-
var
|
15606
|
+
forEach: function(fn, thisArg) {
|
15607
|
+
var list = this.list;
|
15608
|
+
var length = arguments.length;
|
15609
|
+
var i;
|
15562
15610
|
|
15563
|
-
|
15564
|
-
|
15611
|
+
if (length === 2) {
|
15612
|
+
for (i = 0; i < list.length; i++) {
|
15613
|
+
fn.call(thisArg, list[i]);
|
15614
|
+
}
|
15615
|
+
} else {
|
15616
|
+
for (i = 0; i < list.length; i++) {
|
15617
|
+
fn(list[i]);
|
15618
|
+
}
|
15565
15619
|
}
|
15566
15620
|
},
|
15567
15621
|
|
@@ -15578,9 +15632,10 @@ define("ember-metal/map",
|
|
15578
15632
|
@return {Ember.OrderedSet}
|
15579
15633
|
*/
|
15580
15634
|
copy: function() {
|
15581
|
-
var
|
15635
|
+
var Constructor = this.constructor;
|
15636
|
+
var set = new Constructor();
|
15582
15637
|
|
15583
|
-
set.presenceSet =
|
15638
|
+
set.presenceSet = copyNull(this.presenceSet);
|
15584
15639
|
set.list = this.toArray();
|
15585
15640
|
|
15586
15641
|
return set;
|
@@ -15608,8 +15663,13 @@ define("ember-metal/map",
|
|
15608
15663
|
@constructor
|
15609
15664
|
*/
|
15610
15665
|
function Map() {
|
15611
|
-
this
|
15612
|
-
|
15666
|
+
if (this instanceof this.constructor) {
|
15667
|
+
this.keys = OrderedSet.create();
|
15668
|
+
this.values = Object.create(null);
|
15669
|
+
this.size = 0;
|
15670
|
+
} else {
|
15671
|
+
missingNew("OrderedSet");
|
15672
|
+
}
|
15613
15673
|
}
|
15614
15674
|
|
15615
15675
|
Ember.Map = Map;
|
@@ -15619,18 +15679,21 @@ define("ember-metal/map",
|
|
15619
15679
|
@static
|
15620
15680
|
*/
|
15621
15681
|
Map.create = function() {
|
15622
|
-
|
15682
|
+
var Constructor = this;
|
15683
|
+
return new Constructor();
|
15623
15684
|
};
|
15624
15685
|
|
15625
15686
|
Map.prototype = {
|
15687
|
+
constructor: Map,
|
15688
|
+
|
15626
15689
|
/**
|
15627
15690
|
This property will change as the number of objects in the map changes.
|
15628
15691
|
|
15629
|
-
@property
|
15692
|
+
@property size
|
15630
15693
|
@type number
|
15631
15694
|
@default 0
|
15632
15695
|
*/
|
15633
|
-
|
15696
|
+
size: 0,
|
15634
15697
|
|
15635
15698
|
/**
|
15636
15699
|
Retrieve the value associated with a given key.
|
@@ -15653,18 +15716,23 @@ define("ember-metal/map",
|
|
15653
15716
|
@method set
|
15654
15717
|
@param {*} key
|
15655
15718
|
@param {*} value
|
15719
|
+
@return {Ember.Map}
|
15656
15720
|
*/
|
15657
15721
|
set: function(key, value) {
|
15658
15722
|
var keys = this.keys;
|
15659
15723
|
var values = this.values;
|
15660
15724
|
var guid = guidFor(key);
|
15661
15725
|
|
15662
|
-
keys.add(key);
|
15726
|
+
keys.add(key, guid);
|
15663
15727
|
values[guid] = value;
|
15664
|
-
|
15728
|
+
|
15729
|
+
this.size = keys.size;
|
15730
|
+
|
15731
|
+
return this;
|
15665
15732
|
},
|
15666
15733
|
|
15667
15734
|
/**
|
15735
|
+
@deprecated see delete
|
15668
15736
|
Removes a value from the map for an associated key.
|
15669
15737
|
|
15670
15738
|
@method remove
|
@@ -15672,6 +15740,17 @@ define("ember-metal/map",
|
|
15672
15740
|
@return {Boolean} true if an item was removed, false otherwise
|
15673
15741
|
*/
|
15674
15742
|
remove: function(key) {
|
15743
|
+
return this['delete'](key);
|
15744
|
+
},
|
15745
|
+
|
15746
|
+
/**
|
15747
|
+
Removes a value from the map for an associated key.
|
15748
|
+
|
15749
|
+
@method delete
|
15750
|
+
@param {*} key
|
15751
|
+
@return {Boolean} true if an item was removed, false otherwise
|
15752
|
+
*/
|
15753
|
+
'delete': function(key) {
|
15675
15754
|
// don't use ES6 "delete" because it will be annoying
|
15676
15755
|
// to use in browsers that are not ES6 friendly;
|
15677
15756
|
var keys = this.keys;
|
@@ -15679,9 +15758,9 @@ define("ember-metal/map",
|
|
15679
15758
|
var guid = guidFor(key);
|
15680
15759
|
|
15681
15760
|
if (values[guid]) {
|
15682
|
-
keys.remove(key);
|
15761
|
+
keys.remove(key, guid);
|
15683
15762
|
delete values[guid];
|
15684
|
-
|
15763
|
+
this.size = keys.size;
|
15685
15764
|
return true;
|
15686
15765
|
} else {
|
15687
15766
|
return false;
|
@@ -15696,10 +15775,7 @@ define("ember-metal/map",
|
|
15696
15775
|
@return {Boolean} true if the item was present, false otherwise
|
15697
15776
|
*/
|
15698
15777
|
has: function(key) {
|
15699
|
-
|
15700
|
-
var guid = guidFor(key);
|
15701
|
-
|
15702
|
-
return !!values[guid];
|
15778
|
+
return this.keys.has(key);
|
15703
15779
|
},
|
15704
15780
|
|
15705
15781
|
/**
|
@@ -15713,14 +15789,26 @@ define("ember-metal/map",
|
|
15713
15789
|
@param {*} self if passed, the `this` value inside the
|
15714
15790
|
callback. By default, `this` is the map.
|
15715
15791
|
*/
|
15716
|
-
forEach: function(callback,
|
15717
|
-
|
15718
|
-
|
15792
|
+
forEach: function(callback, thisArg) {
|
15793
|
+
if (typeof callback !== 'function') {
|
15794
|
+
missingFunction(callback);
|
15795
|
+
}
|
15719
15796
|
|
15720
|
-
|
15721
|
-
|
15722
|
-
|
15723
|
-
|
15797
|
+
var length = arguments.length;
|
15798
|
+
var map = this;
|
15799
|
+
var cb;
|
15800
|
+
|
15801
|
+
if (length === 2) {
|
15802
|
+
cb = function(key) {
|
15803
|
+
callback.call(thisArg, map.get(key), key);
|
15804
|
+
};
|
15805
|
+
} else {
|
15806
|
+
cb = function(key) {
|
15807
|
+
callback(map.get(key), key);
|
15808
|
+
};
|
15809
|
+
}
|
15810
|
+
|
15811
|
+
this.keys.forEach(cb);
|
15724
15812
|
},
|
15725
15813
|
|
15726
15814
|
/**
|
@@ -15791,7 +15879,8 @@ define("ember-metal/map",
|
|
15791
15879
|
@return {Ember.MapWithDefault}
|
15792
15880
|
*/
|
15793
15881
|
MapWithDefault.prototype.copy = function() {
|
15794
|
-
|
15882
|
+
var Constructor = this.constructor;
|
15883
|
+
return copyMap(this, new Constructor({
|
15795
15884
|
defaultValue: this.defaultValue
|
15796
15885
|
}));
|
15797
15886
|
};
|
@@ -15801,9 +15890,11 @@ define("ember-metal/map",
|
|
15801
15890
|
__exports__.MapWithDefault = MapWithDefault;
|
15802
15891
|
});
|
15803
15892
|
define("ember-metal/merge",
|
15804
|
-
["exports"],
|
15805
|
-
function(__exports__) {
|
15893
|
+
["ember-metal/keys","exports"],
|
15894
|
+
function(__dependency1__, __exports__) {
|
15806
15895
|
"use strict";
|
15896
|
+
var keys = __dependency1__["default"];
|
15897
|
+
|
15807
15898
|
/**
|
15808
15899
|
Merge the contents of two objects together into the first object.
|
15809
15900
|
|
@@ -15820,10 +15911,19 @@ define("ember-metal/merge",
|
|
15820
15911
|
@return {Object}
|
15821
15912
|
*/
|
15822
15913
|
__exports__["default"] = function merge(original, updates) {
|
15823
|
-
|
15824
|
-
|
15914
|
+
if (!updates || typeof updates !== 'object') {
|
15915
|
+
return original;
|
15916
|
+
}
|
15917
|
+
|
15918
|
+
var props = keys(updates);
|
15919
|
+
var prop;
|
15920
|
+
var length = props.length;
|
15921
|
+
|
15922
|
+
for (var i = 0; i < length; i++) {
|
15923
|
+
prop = props[i];
|
15825
15924
|
original[prop] = updates[prop];
|
15826
15925
|
}
|
15926
|
+
|
15827
15927
|
return original;
|
15828
15928
|
}
|
15829
15929
|
});
|
@@ -29603,8 +29703,8 @@ define("ember-runtime/mixins/action_handler",
|
|
29603
29703
|
__exports__["default"] = ActionHandler;
|
29604
29704
|
});
|
29605
29705
|
define("ember-runtime/mixins/array",
|
29606
|
-
["ember-metal/core","ember-metal/property_get","ember-metal/
|
29607
|
-
function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__,
|
29706
|
+
["ember-metal/core","ember-metal/property_get","ember-metal/computed","ember-metal/is_none","ember-runtime/mixins/enumerable","ember-metal/enumerable_utils","ember-metal/mixin","ember-metal/property_events","ember-metal/events","ember-metal/watching","exports"],
|
29707
|
+
function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __exports__) {
|
29608
29708
|
"use strict";
|
29609
29709
|
/**
|
29610
29710
|
@module ember
|
@@ -29616,24 +29716,22 @@ define("ember-runtime/mixins/array",
|
|
29616
29716
|
//
|
29617
29717
|
var Ember = __dependency1__["default"];
|
29618
29718
|
// ES6TODO: Ember.A
|
29619
|
-
|
29620
29719
|
var get = __dependency2__.get;
|
29621
|
-
var
|
29622
|
-
var
|
29623
|
-
var
|
29624
|
-
var
|
29625
|
-
var
|
29626
|
-
var
|
29627
|
-
var
|
29628
|
-
var
|
29629
|
-
var
|
29630
|
-
var
|
29631
|
-
var
|
29632
|
-
var
|
29633
|
-
var
|
29634
|
-
var
|
29635
|
-
var
|
29636
|
-
var isWatching = __dependency11__.isWatching;
|
29720
|
+
var computed = __dependency3__.computed;
|
29721
|
+
var cacheFor = __dependency3__.cacheFor;
|
29722
|
+
var isNone = __dependency4__.isNone;
|
29723
|
+
var none = __dependency4__.none;
|
29724
|
+
var Enumerable = __dependency5__["default"];
|
29725
|
+
var map = __dependency6__.map;
|
29726
|
+
var Mixin = __dependency7__.Mixin;
|
29727
|
+
var required = __dependency7__.required;
|
29728
|
+
var propertyWillChange = __dependency8__.propertyWillChange;
|
29729
|
+
var propertyDidChange = __dependency8__.propertyDidChange;
|
29730
|
+
var addListener = __dependency9__.addListener;
|
29731
|
+
var removeListener = __dependency9__.removeListener;
|
29732
|
+
var sendEvent = __dependency9__.sendEvent;
|
29733
|
+
var hasListeners = __dependency9__.hasListeners;
|
29734
|
+
var isWatching = __dependency10__.isWatching;
|
29637
29735
|
|
29638
29736
|
function arrayObserversHelper(obj, target, opts, operation, notify) {
|
29639
29737
|
var willChange = (opts && opts.willChange) || 'arrayWillChange';
|
@@ -29650,6 +29748,7 @@ define("ember-runtime/mixins/array",
|
|
29650
29748
|
if (hasObservers === notify) {
|
29651
29749
|
propertyDidChange(obj, 'hasArrayObservers');
|
29652
29750
|
}
|
29751
|
+
|
29653
29752
|
return obj;
|
29654
29753
|
}
|
29655
29754
|
|
@@ -29713,8 +29812,9 @@ define("ember-runtime/mixins/array",
|
|
29713
29812
|
|
29714
29813
|
```javascript
|
29715
29814
|
var arr = ['a', 'b', 'c', 'd'];
|
29716
|
-
|
29717
|
-
arr.objectAt(
|
29815
|
+
|
29816
|
+
arr.objectAt(0); // 'a'
|
29817
|
+
arr.objectAt(3); // 'd'
|
29718
29818
|
arr.objectAt(-1); // undefined
|
29719
29819
|
arr.objectAt(4); // undefined
|
29720
29820
|
arr.objectAt(5); // undefined
|
@@ -29725,7 +29825,10 @@ define("ember-runtime/mixins/array",
|
|
29725
29825
|
@return {*} item at index or undefined
|
29726
29826
|
*/
|
29727
29827
|
objectAt: function(idx) {
|
29728
|
-
if (idx < 0 || idx >= get(this, 'length'))
|
29828
|
+
if (idx < 0 || idx >= get(this, 'length')) {
|
29829
|
+
return undefined;
|
29830
|
+
}
|
29831
|
+
|
29729
29832
|
return get(this, idx);
|
29730
29833
|
},
|
29731
29834
|
|
@@ -29734,8 +29837,9 @@ define("ember-runtime/mixins/array",
|
|
29734
29837
|
|
29735
29838
|
```javascript
|
29736
29839
|
var arr = ['a', 'b', 'c', 'd'];
|
29737
|
-
|
29738
|
-
arr.objectsAt([
|
29840
|
+
|
29841
|
+
arr.objectsAt([0, 1, 2]); // ['a', 'b', 'c']
|
29842
|
+
arr.objectsAt([2, 3, 4]); // ['c', 'd', undefined]
|
29739
29843
|
```
|
29740
29844
|
|
29741
29845
|
@method objectsAt
|
@@ -29744,7 +29848,10 @@ define("ember-runtime/mixins/array",
|
|
29744
29848
|
*/
|
29745
29849
|
objectsAt: function(indexes) {
|
29746
29850
|
var self = this;
|
29747
|
-
|
29851
|
+
|
29852
|
+
return map(indexes, function(idx) {
|
29853
|
+
return self.objectAt(idx);
|
29854
|
+
});
|
29748
29855
|
},
|
29749
29856
|
|
29750
29857
|
// overrides Ember.Enumerable version
|
@@ -29763,7 +29870,10 @@ define("ember-runtime/mixins/array",
|
|
29763
29870
|
@return this
|
29764
29871
|
*/
|
29765
29872
|
'[]': computed(function(key, value) {
|
29766
|
-
if (value !== undefined)
|
29873
|
+
if (value !== undefined) {
|
29874
|
+
this.replace(0, get(this, 'length'), value);
|
29875
|
+
}
|
29876
|
+
|
29767
29877
|
return this;
|
29768
29878
|
}),
|
29769
29879
|
|
@@ -29772,7 +29882,7 @@ define("ember-runtime/mixins/array",
|
|
29772
29882
|
}),
|
29773
29883
|
|
29774
29884
|
lastObject: computed(function() {
|
29775
|
-
return this.objectAt(get(this, 'length')-1);
|
29885
|
+
return this.objectAt(get(this, 'length') - 1);
|
29776
29886
|
}),
|
29777
29887
|
|
29778
29888
|
// optimized version from Enumerable
|
@@ -29788,6 +29898,7 @@ define("ember-runtime/mixins/array",
|
|
29788
29898
|
|
29789
29899
|
```javascript
|
29790
29900
|
var arr = ['red', 'green', 'blue'];
|
29901
|
+
|
29791
29902
|
arr.slice(0); // ['red', 'green', 'blue']
|
29792
29903
|
arr.slice(0, 2); // ['red', 'green']
|
29793
29904
|
arr.slice(1, 100); // ['green', 'blue']
|
@@ -29800,17 +29911,29 @@ define("ember-runtime/mixins/array",
|
|
29800
29911
|
*/
|
29801
29912
|
slice: function(beginIndex, endIndex) {
|
29802
29913
|
var ret = Ember.A();
|
29803
|
-
var length = get(this, 'length')
|
29804
|
-
|
29805
|
-
if (isNone(
|
29914
|
+
var length = get(this, 'length');
|
29915
|
+
|
29916
|
+
if (isNone(beginIndex)) {
|
29917
|
+
beginIndex = 0;
|
29918
|
+
}
|
29806
29919
|
|
29807
|
-
if (
|
29808
|
-
|
29920
|
+
if (isNone(endIndex) || (endIndex > length)) {
|
29921
|
+
endIndex = length;
|
29922
|
+
}
|
29809
29923
|
|
29810
|
-
|
29811
|
-
|
29924
|
+
if (beginIndex < 0) {
|
29925
|
+
beginIndex = length + beginIndex;
|
29812
29926
|
}
|
29813
|
-
|
29927
|
+
|
29928
|
+
if (endIndex < 0) {
|
29929
|
+
endIndex = length + endIndex;
|
29930
|
+
}
|
29931
|
+
|
29932
|
+
while (beginIndex < endIndex) {
|
29933
|
+
ret[ret.length] = this.objectAt(beginIndex++);
|
29934
|
+
}
|
29935
|
+
|
29936
|
+
return ret;
|
29814
29937
|
},
|
29815
29938
|
|
29816
29939
|
/**
|
@@ -29820,13 +29943,14 @@ define("ember-runtime/mixins/array",
|
|
29820
29943
|
the end of the array. Returns -1 if no match is found.
|
29821
29944
|
|
29822
29945
|
```javascript
|
29823
|
-
var arr = [
|
29824
|
-
|
29825
|
-
arr.indexOf(
|
29826
|
-
arr.indexOf(
|
29827
|
-
arr.indexOf(
|
29828
|
-
arr.indexOf(
|
29829
|
-
arr.indexOf(
|
29946
|
+
var arr = ['a', 'b', 'c', 'd', 'a'];
|
29947
|
+
|
29948
|
+
arr.indexOf('a'); // 0
|
29949
|
+
arr.indexOf('z'); // -1
|
29950
|
+
arr.indexOf('a', 2); // 4
|
29951
|
+
arr.indexOf('a', -1); // 4
|
29952
|
+
arr.indexOf('b', 3); // -1
|
29953
|
+
arr.indexOf('a', 100); // -1
|
29830
29954
|
```
|
29831
29955
|
|
29832
29956
|
@method indexOf
|
@@ -29835,14 +29959,23 @@ define("ember-runtime/mixins/array",
|
|
29835
29959
|
@return {Number} index or -1 if not found
|
29836
29960
|
*/
|
29837
29961
|
indexOf: function(object, startAt) {
|
29838
|
-
var
|
29962
|
+
var len = get(this, 'length');
|
29963
|
+
var idx;
|
29839
29964
|
|
29840
|
-
if (startAt === undefined)
|
29841
|
-
|
29965
|
+
if (startAt === undefined) {
|
29966
|
+
startAt = 0;
|
29967
|
+
}
|
29842
29968
|
|
29843
|
-
|
29844
|
-
|
29969
|
+
if (startAt < 0) {
|
29970
|
+
startAt += len;
|
29971
|
+
}
|
29972
|
+
|
29973
|
+
for (idx = startAt; idx < len; idx++) {
|
29974
|
+
if (this.objectAt(idx) === object) {
|
29975
|
+
return idx;
|
29976
|
+
}
|
29845
29977
|
}
|
29978
|
+
|
29846
29979
|
return -1;
|
29847
29980
|
},
|
29848
29981
|
|
@@ -29853,13 +29986,14 @@ define("ember-runtime/mixins/array",
|
|
29853
29986
|
from the end of the array. Returns -1 if no match is found.
|
29854
29987
|
|
29855
29988
|
```javascript
|
29856
|
-
var arr = [
|
29857
|
-
|
29858
|
-
arr.lastIndexOf(
|
29859
|
-
arr.lastIndexOf(
|
29860
|
-
arr.lastIndexOf(
|
29861
|
-
arr.lastIndexOf(
|
29862
|
-
arr.lastIndexOf(
|
29989
|
+
var arr = ['a', 'b', 'c', 'd', 'a'];
|
29990
|
+
|
29991
|
+
arr.lastIndexOf('a'); // 4
|
29992
|
+
arr.lastIndexOf('z'); // -1
|
29993
|
+
arr.lastIndexOf('a', 2); // 0
|
29994
|
+
arr.lastIndexOf('a', -1); // 4
|
29995
|
+
arr.lastIndexOf('b', 3); // 1
|
29996
|
+
arr.lastIndexOf('a', 100); // 4
|
29863
29997
|
```
|
29864
29998
|
|
29865
29999
|
@method lastIndexOf
|
@@ -29868,14 +30002,23 @@ define("ember-runtime/mixins/array",
|
|
29868
30002
|
@return {Number} index or -1 if not found
|
29869
30003
|
*/
|
29870
30004
|
lastIndexOf: function(object, startAt) {
|
29871
|
-
var
|
30005
|
+
var len = get(this, 'length');
|
30006
|
+
var idx;
|
30007
|
+
|
30008
|
+
if (startAt === undefined || startAt >= len) {
|
30009
|
+
startAt = len-1;
|
30010
|
+
}
|
29872
30011
|
|
29873
|
-
if (startAt
|
29874
|
-
|
30012
|
+
if (startAt < 0) {
|
30013
|
+
startAt += len;
|
30014
|
+
}
|
29875
30015
|
|
29876
|
-
for(idx = startAt; idx >= 0; idx--) {
|
29877
|
-
if (this.objectAt(idx) === object)
|
30016
|
+
for (idx = startAt; idx >= 0; idx--) {
|
30017
|
+
if (this.objectAt(idx) === object) {
|
30018
|
+
return idx;
|
30019
|
+
}
|
29878
30020
|
}
|
30021
|
+
|
29879
30022
|
return -1;
|
29880
30023
|
},
|
29881
30024
|
|
@@ -29952,26 +30095,36 @@ define("ember-runtime/mixins/array",
|
|
29952
30095
|
@return {Ember.Array} receiver
|
29953
30096
|
*/
|
29954
30097
|
arrayContentWillChange: function(startIdx, removeAmt, addAmt) {
|
30098
|
+
var removing, lim;
|
29955
30099
|
|
29956
30100
|
// if no args are passed assume everything changes
|
29957
|
-
if (startIdx===undefined) {
|
30101
|
+
if (startIdx === undefined) {
|
29958
30102
|
startIdx = 0;
|
29959
30103
|
removeAmt = addAmt = -1;
|
29960
30104
|
} else {
|
29961
|
-
if (removeAmt === undefined)
|
29962
|
-
|
30105
|
+
if (removeAmt === undefined) {
|
30106
|
+
removeAmt = -1;
|
30107
|
+
}
|
30108
|
+
|
30109
|
+
if (addAmt === undefined) {
|
30110
|
+
addAmt = -1;
|
30111
|
+
}
|
29963
30112
|
}
|
29964
30113
|
|
29965
30114
|
// Make sure the @each proxy is set up if anyone is observing @each
|
29966
|
-
if (isWatching(this, '@each')) {
|
30115
|
+
if (isWatching(this, '@each')) {
|
30116
|
+
get(this, '@each');
|
30117
|
+
}
|
29967
30118
|
|
29968
30119
|
sendEvent(this, '@array:before', [this, startIdx, removeAmt, addAmt]);
|
29969
30120
|
|
29970
|
-
|
29971
|
-
if (startIdx>=0 && removeAmt>=0 && get(this, 'hasEnumerableObservers')) {
|
30121
|
+
if (startIdx >= 0 && removeAmt >= 0 && get(this, 'hasEnumerableObservers')) {
|
29972
30122
|
removing = [];
|
29973
|
-
lim = startIdx+removeAmt;
|
29974
|
-
|
30123
|
+
lim = startIdx + removeAmt;
|
30124
|
+
|
30125
|
+
for (var idx = startIdx; idx < lim; idx++) {
|
30126
|
+
removing.push(this.objectAt(idx));
|
30127
|
+
}
|
29975
30128
|
} else {
|
29976
30129
|
removing = removeAmt;
|
29977
30130
|
}
|
@@ -29996,21 +30149,29 @@ define("ember-runtime/mixins/array",
|
|
29996
30149
|
@return {Ember.Array} receiver
|
29997
30150
|
*/
|
29998
30151
|
arrayContentDidChange: function(startIdx, removeAmt, addAmt) {
|
30152
|
+
var adding, lim;
|
29999
30153
|
|
30000
30154
|
// if no args are passed assume everything changes
|
30001
|
-
if (startIdx===undefined) {
|
30155
|
+
if (startIdx === undefined) {
|
30002
30156
|
startIdx = 0;
|
30003
30157
|
removeAmt = addAmt = -1;
|
30004
30158
|
} else {
|
30005
|
-
if (removeAmt === undefined)
|
30006
|
-
|
30159
|
+
if (removeAmt === undefined) {
|
30160
|
+
removeAmt = -1;
|
30161
|
+
}
|
30162
|
+
|
30163
|
+
if (addAmt === undefined) {
|
30164
|
+
addAmt = -1;
|
30165
|
+
}
|
30007
30166
|
}
|
30008
30167
|
|
30009
|
-
|
30010
|
-
if (startIdx>=0 && addAmt>=0 && get(this, 'hasEnumerableObservers')) {
|
30168
|
+
if (startIdx >= 0 && addAmt >= 0 && get(this, 'hasEnumerableObservers')) {
|
30011
30169
|
adding = [];
|
30012
|
-
lim = startIdx+addAmt;
|
30013
|
-
|
30170
|
+
lim = startIdx + addAmt;
|
30171
|
+
|
30172
|
+
for (var idx = startIdx; idx < lim; idx++) {
|
30173
|
+
adding.push(this.objectAt(idx));
|
30174
|
+
}
|
30014
30175
|
} else {
|
30015
30176
|
adding = addAmt;
|
30016
30177
|
}
|
@@ -30018,13 +30179,15 @@ define("ember-runtime/mixins/array",
|
|
30018
30179
|
this.enumerableContentDidChange(removeAmt, adding);
|
30019
30180
|
sendEvent(this, '@array:change', [this, startIdx, removeAmt, addAmt]);
|
30020
30181
|
|
30021
|
-
var length
|
30182
|
+
var length = get(this, 'length');
|
30022
30183
|
var cachedFirst = cacheFor(this, 'firstObject');
|
30023
|
-
var cachedLast
|
30184
|
+
var cachedLast = cacheFor(this, 'lastObject');
|
30185
|
+
|
30024
30186
|
if (this.objectAt(0) !== cachedFirst) {
|
30025
30187
|
propertyWillChange(this, 'firstObject');
|
30026
30188
|
propertyDidChange(this, 'firstObject');
|
30027
30189
|
}
|
30190
|
+
|
30028
30191
|
if (this.objectAt(length-1) !== cachedLast) {
|
30029
30192
|
propertyWillChange(this, 'lastObject');
|
30030
30193
|
propertyDidChange(this, 'lastObject');
|
@@ -37944,7 +38107,6 @@ define("ember-views",
|
|
37944
38107
|
// BEGIN IMPORTS
|
37945
38108
|
var Ember = __dependency1__["default"];
|
37946
38109
|
var jQuery = __dependency2__["default"];
|
37947
|
-
var setInnerHTML = __dependency3__.setInnerHTML;
|
37948
38110
|
var isSimpleClick = __dependency3__.isSimpleClick;
|
37949
38111
|
var RenderBuffer = __dependency4__["default"];
|
37950
38112
|
// for the side effect of extending Ember.run.queues
|
@@ -37975,7 +38137,6 @@ define("ember-views",
|
|
37975
38137
|
Ember.RenderBuffer = RenderBuffer;
|
37976
38138
|
|
37977
38139
|
var ViewUtils = Ember.ViewUtils = {};
|
37978
|
-
ViewUtils.setInnerHTML = setInnerHTML;
|
37979
38140
|
ViewUtils.isSimpleClick = isSimpleClick;
|
37980
38141
|
|
37981
38142
|
Ember.CoreView = CoreView;
|
@@ -38459,22 +38620,63 @@ define("ember-views/system/jquery",
|
|
38459
38620
|
__exports__["default"] = jQuery;
|
38460
38621
|
});
|
38461
38622
|
define("ember-views/system/render_buffer",
|
38462
|
-
["ember-
|
38463
|
-
function(__dependency1__, __dependency2__, __dependency3__,
|
38623
|
+
["ember-views/system/jquery","morph","ember-metal/core","exports"],
|
38624
|
+
function(__dependency1__, __dependency2__, __dependency3__, __exports__) {
|
38464
38625
|
"use strict";
|
38465
38626
|
/**
|
38466
38627
|
@module ember
|
38467
38628
|
@submodule ember-views
|
38468
38629
|
*/
|
38469
38630
|
|
38470
|
-
var
|
38471
|
-
|
38631
|
+
var jQuery = __dependency1__["default"];
|
38632
|
+
var DOMHelper = __dependency2__.DOMHelper;
|
38633
|
+
var Ember = __dependency3__["default"];
|
38472
38634
|
|
38473
|
-
|
38474
|
-
|
38475
|
-
|
38476
|
-
|
38477
|
-
|
38635
|
+
// The HTML spec allows for "omitted start tags". These tags are optional
|
38636
|
+
// when their intended child is the first thing in the parent tag. For
|
38637
|
+
// example, this is a tbody start tag:
|
38638
|
+
//
|
38639
|
+
// <table>
|
38640
|
+
// <tbody>
|
38641
|
+
// <tr>
|
38642
|
+
//
|
38643
|
+
// The tbody may be omitted, and the browser will accept and render:
|
38644
|
+
//
|
38645
|
+
// <table>
|
38646
|
+
// <tr>
|
38647
|
+
//
|
38648
|
+
// However, the omitted start tag will still be added to the DOM. Here
|
38649
|
+
// we test the string and context to see if the browser is about to
|
38650
|
+
// perform this cleanup, but with a special allowance for disregarding
|
38651
|
+
// <script tags. This disregarding of <script being the first child item
|
38652
|
+
// may bend the offical spec a bit, and is only needed for Handlebars
|
38653
|
+
// templates.
|
38654
|
+
//
|
38655
|
+
// http://www.whatwg.org/specs/web-apps/current-work/multipage/syntax.html#optional-tags
|
38656
|
+
// describes which tags are omittable. The spec for tbody and colgroup
|
38657
|
+
// explains this behavior:
|
38658
|
+
//
|
38659
|
+
// http://www.whatwg.org/specs/web-apps/current-work/multipage/tables.html#the-tbody-element
|
38660
|
+
// http://www.whatwg.org/specs/web-apps/current-work/multipage/tables.html#the-colgroup-element
|
38661
|
+
//
|
38662
|
+
var omittedStartTagChildren = {
|
38663
|
+
tr: document.createElement('tbody'),
|
38664
|
+
col: document.createElement('colgroup')
|
38665
|
+
};
|
38666
|
+
|
38667
|
+
var omittedStartTagChildTest = /(?:<script)*.*?<([\w:]+)/i;
|
38668
|
+
|
38669
|
+
function detectOmittedStartTag(string, contextualElement){
|
38670
|
+
// Omitted start tags are only inside table tags.
|
38671
|
+
if (contextualElement.tagName === 'TABLE') {
|
38672
|
+
var omittedStartTagChildMatch = omittedStartTagChildTest.exec(string);
|
38673
|
+
if (omittedStartTagChildMatch) {
|
38674
|
+
// It is already asserted that the contextual element is a table
|
38675
|
+
// and not the proper start tag. Just look up the start tag.
|
38676
|
+
return omittedStartTagChildren[omittedStartTagChildMatch[1].toLowerCase()];
|
38677
|
+
}
|
38678
|
+
}
|
38679
|
+
}
|
38478
38680
|
|
38479
38681
|
function ClassSet() {
|
38480
38682
|
this.seen = {};
|
@@ -38552,19 +38754,20 @@ define("ember-views/system/render_buffer",
|
|
38552
38754
|
to the DOM.
|
38553
38755
|
|
38554
38756
|
```javascript
|
38555
|
-
var buffer = Ember.renderBuffer('div');
|
38757
|
+
var buffer = Ember.renderBuffer('div', contextualElement);
|
38556
38758
|
```
|
38557
38759
|
|
38558
38760
|
@method renderBuffer
|
38559
38761
|
@namespace Ember
|
38560
38762
|
@param {String} tagName tag name (such as 'div' or 'p') used for the buffer
|
38561
38763
|
*/
|
38562
|
-
__exports__["default"] = function renderBuffer(tagName) {
|
38563
|
-
return new _RenderBuffer(tagName); // jshint ignore:line
|
38764
|
+
__exports__["default"] = function renderBuffer(tagName, contextualElement) {
|
38765
|
+
return new _RenderBuffer(tagName, contextualElement); // jshint ignore:line
|
38564
38766
|
}
|
38565
38767
|
|
38566
|
-
function _RenderBuffer(tagName) {
|
38768
|
+
function _RenderBuffer(tagName, contextualElement) {
|
38567
38769
|
this.tagName = tagName;
|
38770
|
+
this._contextualElement = contextualElement;
|
38568
38771
|
this.buffer = null;
|
38569
38772
|
this.childViews = [];
|
38570
38773
|
this.dom = new DOMHelper();
|
@@ -38572,10 +38775,11 @@ define("ember-views/system/render_buffer",
|
|
38572
38775
|
|
38573
38776
|
_RenderBuffer.prototype = {
|
38574
38777
|
|
38575
|
-
reset: function(tagName) {
|
38778
|
+
reset: function(tagName, contextualElement) {
|
38576
38779
|
this.tagName = tagName;
|
38577
38780
|
this.buffer = null;
|
38578
38781
|
this._element = null;
|
38782
|
+
this._contextualElement = contextualElement;
|
38579
38783
|
this.elementClasses = null;
|
38580
38784
|
this.elementId = null;
|
38581
38785
|
this.elementAttributes = null;
|
@@ -38588,6 +38792,9 @@ define("ember-views/system/render_buffer",
|
|
38588
38792
|
// The root view's element
|
38589
38793
|
_element: null,
|
38590
38794
|
|
38795
|
+
// The root view's contextualElement
|
38796
|
+
_contextualElement: null,
|
38797
|
+
|
38591
38798
|
/**
|
38592
38799
|
An internal set used to de-dupe class names when `addClass()` is
|
38593
38800
|
used. After each call to `addClass()`, the `classes` property
|
@@ -38661,7 +38868,7 @@ define("ember-views/system/render_buffer",
|
|
38661
38868
|
example, if you wanted to create a `p` tag, then you would call
|
38662
38869
|
|
38663
38870
|
```javascript
|
38664
|
-
Ember.RenderBuffer('p')
|
38871
|
+
Ember.RenderBuffer('p', contextualElement)
|
38665
38872
|
```
|
38666
38873
|
|
38667
38874
|
@property elementTag
|
@@ -38691,7 +38898,7 @@ define("ember-views/system/render_buffer",
|
|
38691
38898
|
this.push("<script id='morph-"+index+"' type='text/x-placeholder'>\x3C/script>");
|
38692
38899
|
},
|
38693
38900
|
|
38694
|
-
hydrateMorphs: function () {
|
38901
|
+
hydrateMorphs: function (contextualElement) {
|
38695
38902
|
var childViews = this.childViews;
|
38696
38903
|
var el = this._element;
|
38697
38904
|
for (var i=0,l=childViews.length; i<l; i++) {
|
@@ -38699,7 +38906,11 @@ define("ember-views/system/render_buffer",
|
|
38699
38906
|
var ref = el.querySelector('#morph-'+i);
|
38700
38907
|
var parent = ref.parentNode;
|
38701
38908
|
|
38702
|
-
childView._morph = this.dom.insertMorphBefore(
|
38909
|
+
childView._morph = this.dom.insertMorphBefore(
|
38910
|
+
parent,
|
38911
|
+
ref,
|
38912
|
+
parent.nodeType === 1 ? parent : contextualElement
|
38913
|
+
);
|
38703
38914
|
parent.removeChild(ref);
|
38704
38915
|
}
|
38705
38916
|
},
|
@@ -38861,7 +39072,7 @@ define("ember-views/system/render_buffer",
|
|
38861
39072
|
tagString = tagName;
|
38862
39073
|
}
|
38863
39074
|
|
38864
|
-
var element =
|
39075
|
+
var element = this.dom.createElement(tagString);
|
38865
39076
|
var $element = jQuery(element);
|
38866
39077
|
|
38867
39078
|
if (id) {
|
@@ -38915,21 +39126,31 @@ define("ember-views/system/render_buffer",
|
|
38915
39126
|
of this buffer
|
38916
39127
|
*/
|
38917
39128
|
element: function() {
|
39129
|
+
if (!this._contextualElement) {
|
39130
|
+
Ember.deprecate("buffer.element expects a contextualElement to exist. This ensures DOM that requires context is correctly generated (tr, SVG tags). Defaulting to document.body, but this will be removed in the future");
|
39131
|
+
this._contextualElement = document.body;
|
39132
|
+
}
|
38918
39133
|
var html = this.innerString();
|
38919
39134
|
|
39135
|
+
var nodes;
|
38920
39136
|
if (this._element) {
|
38921
39137
|
if (html) {
|
38922
|
-
|
38923
|
-
|
39138
|
+
nodes = this.dom.parseHTML(html, this._element);
|
39139
|
+
while (nodes[0]) {
|
39140
|
+
this._element.appendChild(nodes[0]);
|
39141
|
+
}
|
39142
|
+
this.hydrateMorphs(this._element);
|
38924
39143
|
}
|
38925
39144
|
} else {
|
38926
39145
|
if (html) {
|
39146
|
+
var omittedStartTag = detectOmittedStartTag(html, this._contextualElement);
|
39147
|
+
var contextualElement = omittedStartTag || this._contextualElement;
|
39148
|
+
nodes = this.dom.parseHTML(html, contextualElement);
|
38927
39149
|
var frag = this._element = document.createDocumentFragment();
|
38928
|
-
|
38929
|
-
|
38930
|
-
frag.appendChild(parsed[i]);
|
39150
|
+
while (nodes[0]) {
|
39151
|
+
frag.appendChild(nodes[0]);
|
38931
39152
|
}
|
38932
|
-
this.hydrateMorphs();
|
39153
|
+
this.hydrateMorphs(contextualElement);
|
38933
39154
|
} else if (html === '') {
|
38934
39155
|
this._element = html;
|
38935
39156
|
}
|
@@ -39026,7 +39247,7 @@ define("ember-views/system/renderer",
|
|
39026
39247
|
};
|
39027
39248
|
|
39028
39249
|
EmberRenderer.prototype.createElement =
|
39029
|
-
function EmberRenderer_createElement(view) {
|
39250
|
+
function EmberRenderer_createElement(view, contextualElement) {
|
39030
39251
|
// If this is the top-most view, start a new buffer. Otherwise,
|
39031
39252
|
// create a new buffer relative to the original using the
|
39032
39253
|
// provided buffer operation (for example, `insertAfter` will
|
@@ -39037,7 +39258,7 @@ define("ember-views/system/renderer",
|
|
39037
39258
|
}
|
39038
39259
|
|
39039
39260
|
var buffer = view.buffer = this.buffer;
|
39040
|
-
buffer.reset(tagName);
|
39261
|
+
buffer.reset(tagName, contextualElement);
|
39041
39262
|
|
39042
39263
|
if (view.beforeRender) {
|
39043
39264
|
view.beforeRender(buffer);
|
@@ -39129,162 +39350,15 @@ define("ember-views/system/renderer",
|
|
39129
39350
|
__exports__["default"] = EmberRenderer;
|
39130
39351
|
});
|
39131
39352
|
define("ember-views/system/utils",
|
39132
|
-
["
|
39133
|
-
function(
|
39353
|
+
["exports"],
|
39354
|
+
function(__exports__) {
|
39134
39355
|
"use strict";
|
39135
|
-
/* globals XMLSerializer */
|
39136
|
-
|
39137
|
-
var Ember = __dependency1__["default"];
|
39138
|
-
// Ember.assert
|
39139
|
-
var jQuery = __dependency2__["default"];
|
39140
|
-
|
39141
39356
|
/**
|
39142
39357
|
@module ember
|
39143
39358
|
@submodule ember-views
|
39144
39359
|
*/
|
39145
39360
|
|
39146
|
-
|
39147
|
-
|
39148
|
-
// Internet Explorer prior to 9 does not allow setting innerHTML if the first element
|
39149
|
-
// is a "zero-scope" element. This problem can be worked around by making
|
39150
|
-
// the first node an invisible text node. We, like Modernizr, use ­
|
39151
|
-
|
39152
|
-
var needsShy = typeof document !== 'undefined' && (function() {
|
39153
|
-
var testEl = document.createElement('div');
|
39154
|
-
testEl.innerHTML = "<div></div>";
|
39155
|
-
testEl.firstChild.innerHTML = "<script></script>";
|
39156
|
-
return testEl.firstChild.innerHTML === '';
|
39157
|
-
})();
|
39158
|
-
|
39159
|
-
// IE 8 (and likely earlier) likes to move whitespace preceeding
|
39160
|
-
// a script tag to appear after it. This means that we can
|
39161
|
-
// accidentally remove whitespace when updating a morph.
|
39162
|
-
var movesWhitespace = typeof document !== 'undefined' && (function() {
|
39163
|
-
var testEl = document.createElement('div');
|
39164
|
-
testEl.innerHTML = "Test: <script type='text/x-placeholder'></script>Value";
|
39165
|
-
return testEl.childNodes[0].nodeValue === 'Test:' &&
|
39166
|
-
testEl.childNodes[2].nodeValue === ' Value';
|
39167
|
-
})();
|
39168
|
-
|
39169
|
-
// Use this to find children by ID instead of using jQuery
|
39170
|
-
var findChildById = function(element, id) {
|
39171
|
-
if (element.getAttribute('id') === id) { return element; }
|
39172
|
-
|
39173
|
-
var len = element.childNodes.length;
|
39174
|
-
var idx, node, found;
|
39175
|
-
for (idx=0; idx<len; idx++) {
|
39176
|
-
node = element.childNodes[idx];
|
39177
|
-
found = node.nodeType === 1 && findChildById(node, id);
|
39178
|
-
if (found) { return found; }
|
39179
|
-
}
|
39180
|
-
};
|
39181
|
-
|
39182
|
-
var setInnerHTMLWithoutFix = function(element, html) {
|
39183
|
-
if (needsShy) {
|
39184
|
-
html = '­' + html;
|
39185
|
-
}
|
39186
|
-
|
39187
|
-
var matches = [];
|
39188
|
-
if (movesWhitespace) {
|
39189
|
-
// Right now we only check for script tags with ids with the
|
39190
|
-
// goal of targeting morphs.
|
39191
|
-
html = html.replace(/(\s+)(<script id='([^']+)')/g, function(match, spaces, tag, id) {
|
39192
|
-
matches.push([id, spaces]);
|
39193
|
-
return tag;
|
39194
|
-
});
|
39195
|
-
}
|
39196
|
-
|
39197
|
-
element.innerHTML = html;
|
39198
|
-
|
39199
|
-
// If we have to do any whitespace adjustments do them now
|
39200
|
-
if (matches.length > 0) {
|
39201
|
-
var len = matches.length;
|
39202
|
-
var idx;
|
39203
|
-
for (idx=0; idx<len; idx++) {
|
39204
|
-
var script = findChildById(element, matches[idx][0]);
|
39205
|
-
var node = document.createTextNode(matches[idx][1]);
|
39206
|
-
script.parentNode.insertBefore(node, script);
|
39207
|
-
}
|
39208
|
-
}
|
39209
|
-
|
39210
|
-
if (needsShy) {
|
39211
|
-
var shyElement = element.firstChild;
|
39212
|
-
while (shyElement.nodeType === 1 && !shyElement.nodeName) {
|
39213
|
-
shyElement = shyElement.firstChild;
|
39214
|
-
}
|
39215
|
-
if (shyElement.nodeType === 3 && shyElement.nodeValue.charAt(0) === "\u00AD") {
|
39216
|
-
shyElement.nodeValue = shyElement.nodeValue.slice(1);
|
39217
|
-
}
|
39218
|
-
}
|
39219
|
-
};
|
39220
|
-
|
39221
|
-
/* END METAMORPH HELPERS */
|
39222
|
-
|
39223
|
-
function setInnerHTMLTestFactory(tagName, childTagName, ChildConstructor) {
|
39224
|
-
return function() {
|
39225
|
-
var el = document.createElement(tagName);
|
39226
|
-
setInnerHTMLWithoutFix(el, '<' + childTagName + '>Content</' + childTagName + '>');
|
39227
|
-
return el.firstChild instanceof ChildConstructor;
|
39228
|
-
};
|
39229
|
-
}
|
39230
|
-
|
39231
|
-
|
39232
|
-
var innerHTMLTags = {
|
39233
|
-
// IE 8 and earlier don't allow us to do innerHTML on select
|
39234
|
-
select: function() {
|
39235
|
-
var el = document.createElement('select');
|
39236
|
-
setInnerHTMLWithoutFix(el, '<option value="test">Test</option>');
|
39237
|
-
return el.options.length === 1;
|
39238
|
-
},
|
39239
|
-
|
39240
|
-
// IE 9 and earlier don't allow us to set innerHTML on col, colgroup, frameset,
|
39241
|
-
// html, style, table, tbody, tfoot, thead, title, tr.
|
39242
|
-
col: setInnerHTMLTestFactory('col', 'span', window.HTMLSpanElement),
|
39243
|
-
colgroup: setInnerHTMLTestFactory('colgroup', 'col', window.HTMLTableColElement),
|
39244
|
-
frameset: setInnerHTMLTestFactory('frameset', 'frame', window.HTMLFrameElement),
|
39245
|
-
table: setInnerHTMLTestFactory('table', 'tbody', window.HTMLTableSectionElement),
|
39246
|
-
tbody: setInnerHTMLTestFactory('tbody', 'tr', window.HTMLTableRowElement),
|
39247
|
-
tfoot: setInnerHTMLTestFactory('tfoot', 'tr', window.HTMLTableRowElement),
|
39248
|
-
thead: setInnerHTMLTestFactory('thead', 'tr', window.HTMLTableRowElement),
|
39249
|
-
tr: setInnerHTMLTestFactory('tr', 'td', window.HTMLTableCellElement)
|
39250
|
-
};
|
39251
|
-
|
39252
|
-
var canSetInnerHTML = function(tagName) {
|
39253
|
-
tagName = tagName.toLowerCase();
|
39254
|
-
var canSet = innerHTMLTags[tagName];
|
39255
|
-
|
39256
|
-
if (typeof canSet === 'function') {
|
39257
|
-
canSet = innerHTMLTags[tagName] = canSet();
|
39258
|
-
}
|
39259
|
-
|
39260
|
-
return canSet === undefined ? true : canSet;
|
39261
|
-
};
|
39262
|
-
|
39263
|
-
function setInnerHTML(element, html) {
|
39264
|
-
var tagName = element.tagName;
|
39265
|
-
|
39266
|
-
if (canSetInnerHTML(tagName)) {
|
39267
|
-
setInnerHTMLWithoutFix(element, html);
|
39268
|
-
} else {
|
39269
|
-
// Firefox versions < 11 do not have support for element.outerHTML.
|
39270
|
-
var outerHTML = element.outerHTML || new XMLSerializer().serializeToString(element);
|
39271
|
-
Ember.assert("Can't set innerHTML on "+element.tagName+" in this browser", outerHTML);
|
39272
|
-
|
39273
|
-
var startTag = outerHTML.match(new RegExp("<"+tagName+"([^>]*)>", 'i'))[0];
|
39274
|
-
var endTag = '</'+tagName+'>';
|
39275
|
-
|
39276
|
-
var wrapper = document.createElement('div');
|
39277
|
-
jQuery(startTag + html + endTag).appendTo(wrapper);
|
39278
|
-
element = wrapper.firstChild;
|
39279
|
-
while (element.tagName !== tagName) {
|
39280
|
-
element = element.nextSibling;
|
39281
|
-
}
|
39282
|
-
}
|
39283
|
-
|
39284
|
-
return element;
|
39285
|
-
}
|
39286
|
-
|
39287
|
-
__exports__.setInnerHTML = setInnerHTML;function isSimpleClick(event) {
|
39361
|
+
function isSimpleClick(event) {
|
39288
39362
|
var modifier = event.shiftKey || event.metaKey || event.altKey || event.ctrlKey;
|
39289
39363
|
var secondaryClick = event.which > 1; // IE9 may return undefined
|
39290
39364
|
|
@@ -42353,6 +42427,7 @@ define("ember-views/views/view",
|
|
42353
42427
|
createElement: function() {
|
42354
42428
|
if (this.element) { return this; }
|
42355
42429
|
|
42430
|
+
this._didCreateElementWithoutMorph = true;
|
42356
42431
|
this.constructor.renderer.renderTree(this);
|
42357
42432
|
|
42358
42433
|
return this;
|
@@ -42370,6 +42445,9 @@ define("ember-views/views/view",
|
|
42370
42445
|
or after the view was re-rendered. Override this function to do any
|
42371
42446
|
set up that requires an element in the document body.
|
42372
42447
|
|
42448
|
+
When a view has children, didInsertElement will be called on the
|
42449
|
+
child view(s) first, bubbling upwards through the hierarchy.
|
42450
|
+
|
42373
42451
|
@event didInsertElement
|
42374
42452
|
*/
|
42375
42453
|
didInsertElement: Ember.K,
|
@@ -43122,12 +43200,11 @@ define("morph",
|
|
43122
43200
|
__exports__.DOMHelper = DOMHelper;
|
43123
43201
|
});
|
43124
43202
|
define("morph/dom-helper",
|
43125
|
-
["../morph/morph","exports"],
|
43126
|
-
function(__dependency1__, __exports__) {
|
43203
|
+
["../morph/morph","./dom-helper/build-html-dom","exports"],
|
43204
|
+
function(__dependency1__, __dependency2__, __exports__) {
|
43127
43205
|
"use strict";
|
43128
43206
|
var Morph = __dependency1__["default"];
|
43129
|
-
|
43130
|
-
var emptyString = '';
|
43207
|
+
var buildHTMLDOM = __dependency2__.buildHTMLDOM;
|
43131
43208
|
|
43132
43209
|
var deletesBlankTextNodes = (function(){
|
43133
43210
|
var element = document.createElement('div');
|
@@ -43144,7 +43221,7 @@ define("morph/dom-helper",
|
|
43144
43221
|
})();
|
43145
43222
|
|
43146
43223
|
var svgNamespace = 'http://www.w3.org/2000/svg',
|
43147
|
-
svgHTMLIntegrationPoints =
|
43224
|
+
svgHTMLIntegrationPoints = {foreignObject: 1, desc: 1, title: 1};
|
43148
43225
|
|
43149
43226
|
function isSVG(ns){
|
43150
43227
|
return ns === svgNamespace;
|
@@ -43156,7 +43233,7 @@ define("morph/dom-helper",
|
|
43156
43233
|
if (
|
43157
43234
|
element &&
|
43158
43235
|
element.namespaceURI === svgNamespace &&
|
43159
|
-
svgHTMLIntegrationPoints
|
43236
|
+
!svgHTMLIntegrationPoints[element.tagName]
|
43160
43237
|
) {
|
43161
43238
|
return svgNamespace;
|
43162
43239
|
} else {
|
@@ -43164,6 +43241,52 @@ define("morph/dom-helper",
|
|
43164
43241
|
}
|
43165
43242
|
}
|
43166
43243
|
|
43244
|
+
// The HTML spec allows for "omitted start tags". These tags are optional
|
43245
|
+
// when their intended child is the first thing in the parent tag. For
|
43246
|
+
// example, this is a tbody start tag:
|
43247
|
+
//
|
43248
|
+
// <table>
|
43249
|
+
// <tbody>
|
43250
|
+
// <tr>
|
43251
|
+
//
|
43252
|
+
// The tbody may be omitted, and the browser will accept and render:
|
43253
|
+
//
|
43254
|
+
// <table>
|
43255
|
+
// <tr>
|
43256
|
+
//
|
43257
|
+
// However, the omitted start tag will still be added to the DOM. Here
|
43258
|
+
// we test the string and context to see if the browser is about to
|
43259
|
+
// perform this cleanup.
|
43260
|
+
//
|
43261
|
+
// http://www.whatwg.org/specs/web-apps/current-work/multipage/syntax.html#optional-tags
|
43262
|
+
// describes which tags are omittable. The spec for tbody and colgroup
|
43263
|
+
// explains this behavior:
|
43264
|
+
//
|
43265
|
+
// http://www.whatwg.org/specs/web-apps/current-work/multipage/tables.html#the-tbody-element
|
43266
|
+
// http://www.whatwg.org/specs/web-apps/current-work/multipage/tables.html#the-colgroup-element
|
43267
|
+
//
|
43268
|
+
|
43269
|
+
var omittedStartTagChildTest = /<([\w:]+)/;
|
43270
|
+
function detectOmittedStartTag(string, contextualElement){
|
43271
|
+
// Omitted start tags are only inside table tags.
|
43272
|
+
if (contextualElement.tagName === 'TABLE') {
|
43273
|
+
var omittedStartTagChildMatch = omittedStartTagChildTest.exec(string);
|
43274
|
+
if (omittedStartTagChildMatch) {
|
43275
|
+
var omittedStartTagChild = omittedStartTagChildMatch[1];
|
43276
|
+
// It is already asserted that the contextual element is a table
|
43277
|
+
// and not the proper start tag. Just see if a tag was omitted.
|
43278
|
+
return omittedStartTagChild === 'tr' ||
|
43279
|
+
omittedStartTagChild === 'col';
|
43280
|
+
}
|
43281
|
+
}
|
43282
|
+
}
|
43283
|
+
|
43284
|
+
function buildSVGDOM(html, dom){
|
43285
|
+
var div = dom.document.createElement('div');
|
43286
|
+
div.innerHTML = '<svg>'+html+'</svg>';
|
43287
|
+
return div.firstChild.childNodes;
|
43288
|
+
}
|
43289
|
+
|
43167
43290
|
/*
|
43168
43291
|
* A class wrapping DOM functions to address environment compatibility,
|
43169
43292
|
* namespaces, contextual elements for morph un-escaped content
|
@@ -43205,13 +43328,19 @@ define("morph/dom-helper",
|
|
43205
43328
|
element.setAttribute(name, value);
|
43206
43329
|
};
|
43207
43330
|
|
43208
|
-
|
43209
|
-
|
43210
|
-
|
43211
|
-
|
43331
|
+
if (document.createElementNS) {
|
43332
|
+
prototype.createElement = function(tagName) {
|
43333
|
+
if (this.namespace) {
|
43334
|
+
return this.document.createElementNS(this.namespace, tagName);
|
43335
|
+
} else {
|
43336
|
+
return this.document.createElement(tagName);
|
43337
|
+
}
|
43338
|
+
};
|
43339
|
+
} else {
|
43340
|
+
prototype.createElement = function(tagName) {
|
43212
43341
|
return this.document.createElement(tagName);
|
43213
|
-
}
|
43214
|
-
}
|
43342
|
+
};
|
43343
|
+
}
|
43215
43344
|
|
43216
43345
|
prototype.setNamespace = function(ns) {
|
43217
43346
|
this.namespace = ns;
|
@@ -43232,7 +43361,7 @@ define("morph/dom-helper",
|
|
43232
43361
|
prototype.repairClonedNode = function(element, blankChildTextNodes, isChecked){
|
43233
43362
|
if (deletesBlankTextNodes && blankChildTextNodes.length > 0) {
|
43234
43363
|
for (var i=0, len=blankChildTextNodes.length;i<len;i++){
|
43235
|
-
var textNode = document.createTextNode(
|
43364
|
+
var textNode = this.document.createTextNode(''),
|
43236
43365
|
offset = blankChildTextNodes[i],
|
43237
43366
|
before = element.childNodes[offset];
|
43238
43367
|
if (before) {
|
@@ -43253,12 +43382,9 @@ define("morph/dom-helper",
|
|
43253
43382
|
};
|
43254
43383
|
|
43255
43384
|
prototype.createMorph = function(parent, start, end, contextualElement){
|
43256
|
-
if (!contextualElement && parent.nodeType ===
|
43385
|
+
if (!contextualElement && parent.nodeType === 1) {
|
43257
43386
|
contextualElement = parent;
|
43258
43387
|
}
|
43259
|
-
if (!contextualElement) {
|
43260
|
-
contextualElement = this.document.body;
|
43261
|
-
}
|
43262
43388
|
return new Morph(parent, start, end, this, contextualElement);
|
43263
43389
|
};
|
43264
43390
|
|
@@ -43272,39 +43398,243 @@ define("morph/dom-helper",
|
|
43272
43398
|
};
|
43273
43399
|
|
43274
43400
|
prototype.insertMorphBefore = function(element, referenceChild, contextualElement) {
|
43275
|
-
var start = document.createTextNode('');
|
43276
|
-
var end = document.createTextNode('');
|
43401
|
+
var start = this.document.createTextNode('');
|
43402
|
+
var end = this.document.createTextNode('');
|
43277
43403
|
element.insertBefore(start, referenceChild);
|
43278
43404
|
element.insertBefore(end, referenceChild);
|
43279
43405
|
return this.createMorph(element, start, end, contextualElement);
|
43280
43406
|
};
|
43281
43407
|
|
43282
43408
|
prototype.appendMorph = function(element, contextualElement) {
|
43283
|
-
var start = document.createTextNode('');
|
43284
|
-
var end = document.createTextNode('');
|
43409
|
+
var start = this.document.createTextNode('');
|
43410
|
+
var end = this.document.createTextNode('');
|
43285
43411
|
element.appendChild(start);
|
43286
43412
|
element.appendChild(end);
|
43287
43413
|
return this.createMorph(element, start, end, contextualElement);
|
43288
43414
|
};
|
43289
43415
|
|
43290
|
-
prototype.parseHTML = function(html, contextualElement){
|
43291
|
-
var
|
43292
|
-
|
43293
|
-
|
43294
|
-
|
43295
|
-
|
43296
|
-
|
43297
|
-
|
43298
|
-
element.innerHTML = html;
|
43299
|
-
if (isSVG(this.namespace)) {
|
43300
|
-
return element.firstChild.childNodes;
|
43416
|
+
prototype.parseHTML = function(html, contextualElement) {
|
43417
|
+
var isSVGContent = (
|
43418
|
+
isSVG(this.namespace) &&
|
43419
|
+
!svgHTMLIntegrationPoints[contextualElement.tagName]
|
43420
|
+
);
|
43421
|
+
|
43422
|
+
if (isSVGContent) {
|
43423
|
+
return buildSVGDOM(html, this);
|
43301
43424
|
} else {
|
43302
|
-
|
43425
|
+
var nodes = buildHTMLDOM(html, contextualElement, this);
|
43426
|
+
if (detectOmittedStartTag(html, contextualElement)) {
|
43427
|
+
var node = nodes[0];
|
43428
|
+
while (node && node.nodeType !== 1) {
|
43429
|
+
node = node.nextSibling;
|
43430
|
+
}
|
43431
|
+
return node.childNodes;
|
43432
|
+
} else {
|
43433
|
+
return nodes;
|
43434
|
+
}
|
43303
43435
|
}
|
43304
43436
|
};
|
43305
43437
|
|
43306
43438
|
__exports__["default"] = DOMHelper;
|
43307
43439
|
});
|
43440
|
+
define("morph/dom-helper/build-html-dom",
|
43441
|
+
["exports"],
|
43442
|
+
function(__exports__) {
|
43443
|
+
"use strict";
|
43444
|
+
// Internet Explorer prior to 9 does not allow setting innerHTML if the first element
|
43445
|
+
// is a "zero-scope" element. This problem can be worked around by making
|
43446
|
+
// the first node an invisible text node. We, like Modernizr, use ­
|
43447
|
+
var needsShy = (function() {
|
43448
|
+
var testEl = document.createElement('div');
|
43449
|
+
testEl.innerHTML = "<div></div>";
|
43450
|
+
testEl.firstChild.innerHTML = "<script><\/script>";
|
43451
|
+
return testEl.firstChild.innerHTML === '';
|
43452
|
+
})();
|
43453
|
+
|
43454
|
+
// IE 8 (and likely earlier) likes to move whitespace preceeding
|
43455
|
+
// a script tag to appear after it. This means that we can
|
43456
|
+
// accidentally remove whitespace when updating a morph.
|
43457
|
+
var movesWhitespace = document && (function() {
|
43458
|
+
var testEl = document.createElement('div');
|
43459
|
+
testEl.innerHTML = "Test: <script type='text/x-placeholder'><\/script>Value";
|
43460
|
+
return testEl.childNodes[0].nodeValue === 'Test:' &&
|
43461
|
+
testEl.childNodes[2].nodeValue === ' Value';
|
43462
|
+
})();
|
43463
|
+
|
43464
|
+
// IE 9 and earlier don't allow us to set innerHTML on col, colgroup, frameset,
|
43465
|
+
// html, style, table, tbody, tfoot, thead, title, tr. Detect this and add
|
43466
|
+
// them to an initial list of corrected tags.
|
43467
|
+
//
|
43468
|
+
// Here we are only dealing with the ones which can have child nodes.
|
43469
|
+
//
|
43470
|
+
var tagNamesRequiringInnerHTMLFix, tableNeedsInnerHTMLFix;
|
43471
|
+
var tableInnerHTMLTestElement = document.createElement('table');
|
43472
|
+
try {
|
43473
|
+
tableInnerHTMLTestElement.innerHTML = '<tbody></tbody>';
|
43474
|
+
} catch (e) {
|
43475
|
+
} finally {
|
43476
|
+
tableNeedsInnerHTMLFix = (tableInnerHTMLTestElement.childNodes.length === 0);
|
43477
|
+
}
|
43478
|
+
if (tableNeedsInnerHTMLFix) {
|
43479
|
+
tagNamesRequiringInnerHTMLFix = {
|
43480
|
+
colgroup: ['table'],
|
43481
|
+
table: [],
|
43482
|
+
tbody: ['table'],
|
43483
|
+
tfoot: ['table'],
|
43484
|
+
thead: ['table'],
|
43485
|
+
tr: ['table', 'tbody']
|
43486
|
+
};
|
43487
|
+
} else {
|
43488
|
+
tagNamesRequiringInnerHTMLFix = {};
|
43489
|
+
}
|
43490
|
+
|
43491
|
+
// IE 8 doesn't allow setting innerHTML on a select tag. Detect this and
|
43492
|
+
// add it to the list of corrected tags.
|
43493
|
+
//
|
43494
|
+
var selectInnerHTMLTestElement = document.createElement('select');
|
43495
|
+
selectInnerHTMLTestElement.innerHTML = '<option></option>';
|
43496
|
+
if (selectInnerHTMLTestElement) {
|
43497
|
+
tagNamesRequiringInnerHTMLFix.select = [];
|
43498
|
+
}
|
43499
|
+
|
43500
|
+
function scriptSafeInnerHTML(element, html) {
|
43501
|
+
// without a leading text node, IE will drop a leading script tag.
|
43502
|
+
html = '­'+html;
|
43503
|
+
|
43504
|
+
element.innerHTML = html;
|
43505
|
+
|
43506
|
+
var nodes = element.childNodes;
|
43507
|
+
|
43508
|
+
// Look for ­ to remove it.
|
43509
|
+
var shyElement = nodes[0];
|
43510
|
+
while (shyElement.nodeType === 1 && !shyElement.nodeName) {
|
43511
|
+
shyElement = shyElement.firstChild;
|
43512
|
+
}
|
43513
|
+
// At this point it's the actual unicode character.
|
43514
|
+
if (shyElement.nodeType === 3 && shyElement.nodeValue.charAt(0) === "\u00AD") {
|
43515
|
+
var newValue = shyElement.nodeValue.slice(1);
|
43516
|
+
if (newValue.length) {
|
43517
|
+
shyElement.nodeValue = shyElement.nodeValue.slice(1);
|
43518
|
+
} else {
|
43519
|
+
shyElement.parentNode.removeChild(shyElement);
|
43520
|
+
}
|
43521
|
+
}
|
43522
|
+
|
43523
|
+
return nodes;
|
43524
|
+
}
|
43525
|
+
|
43526
|
+
function buildDOMWithFix(html, contextualElement){
|
43527
|
+
var tagName = contextualElement.tagName;
|
43528
|
+
|
43529
|
+
// Firefox versions < 11 do not have support for element.outerHTML.
|
43530
|
+
var outerHTML = contextualElement.outerHTML || new XMLSerializer().serializeToString(contextualElement);
|
43531
|
+
if (!outerHTML) {
|
43532
|
+
throw "Can't set innerHTML on "+tagName+" in this browser";
|
43533
|
+
}
|
43534
|
+
|
43535
|
+
var wrappingTags = tagNamesRequiringInnerHTMLFix[tagName.toLowerCase()];
|
43536
|
+
var startTag = outerHTML.match(new RegExp("<"+tagName+"([^>]*)>", 'i'))[0];
|
43537
|
+
var endTag = '</'+tagName+'>';
|
43538
|
+
|
43539
|
+
var wrappedHTML = [startTag, html, endTag];
|
43540
|
+
|
43541
|
+
var i = wrappingTags.length;
|
43542
|
+
var wrappedDepth = 1 + i;
|
43543
|
+
while(i--) {
|
43544
|
+
wrappedHTML.unshift('<'+wrappingTags[i]+'>');
|
43545
|
+
wrappedHTML.push('</'+wrappingTags[i]+'>');
|
43546
|
+
}
|
43547
|
+
|
43548
|
+
var wrapper = document.createElement('div');
|
43549
|
+
scriptSafeInnerHTML(wrapper, wrappedHTML.join(''));
|
43550
|
+
var element = wrapper;
|
43551
|
+
while (wrappedDepth--) {
|
43552
|
+
element = element.firstChild;
|
43553
|
+
while (element && element.nodeType !== 1) {
|
43554
|
+
element = element.nextSibling;
|
43555
|
+
}
|
43556
|
+
}
|
43557
|
+
while (element && element.tagName !== tagName) {
|
43558
|
+
element = element.nextSibling;
|
43559
|
+
}
|
43560
|
+
return element ? element.childNodes : [];
|
43561
|
+
}
|
43562
|
+
|
43563
|
+
function buildDOM(html, contextualElement, dom){
|
43564
|
+
contextualElement = dom.cloneNode(contextualElement, false);
|
43565
|
+
scriptSafeInnerHTML(contextualElement, html);
|
43566
|
+
return contextualElement.childNodes;
|
43567
|
+
}
|
43568
|
+
|
43569
|
+
var buildHTMLDOM;
|
43570
|
+
// Really, this just means IE8 and IE9 get a slower buildHTMLDOM
|
43571
|
+
if (tagNamesRequiringInnerHTMLFix.length > 0 || needsShy || movesWhitespace) {
|
43572
|
+
buildHTMLDOM = function buildHTMLDOM(html, contextualElement, dom) {
|
43573
|
+
// Make a list of the leading text on script nodes. Include
|
43574
|
+
// script tags without any whitespace for easier processing later.
|
43575
|
+
var spacesBefore = [];
|
43576
|
+
var spacesAfter = [];
|
43577
|
+
html = html.replace(/(\s*)(<script)/g, function(match, spaces, tag) {
|
43578
|
+
spacesBefore.push(spaces);
|
43579
|
+
return tag;
|
43580
|
+
});
|
43581
|
+
|
43582
|
+
html = html.replace(/(<\/script>)(\s*)/g, function(match, tag, spaces) {
|
43583
|
+
spacesAfter.push(spaces);
|
43584
|
+
return tag;
|
43585
|
+
});
|
43586
|
+
|
43587
|
+
// Fetch nodes
|
43588
|
+
var nodes;
|
43589
|
+
if (tagNamesRequiringInnerHTMLFix[contextualElement.tagName.toLowerCase()]) {
|
43590
|
+
// buildDOMWithFix uses string wrappers for problematic innerHTML.
|
43591
|
+
nodes = buildDOMWithFix(html, contextualElement);
|
43592
|
+
} else {
|
43593
|
+
nodes = buildDOM(html, contextualElement, dom);
|
43594
|
+
}
|
43595
|
+
|
43596
|
+
// Build a list of script tags, the nodes themselves will be
|
43597
|
+
// mutated as we add test nodes.
|
43598
|
+
var i, j, node, nodeScriptNodes;
|
43599
|
+
var scriptNodes = [];
|
43600
|
+
for (i=0;node=nodes[i];i++) {
|
43601
|
+
if (node.nodeType !== 1) {
|
43602
|
+
continue;
|
43603
|
+
}
|
43604
|
+
if (node.tagName === 'SCRIPT') {
|
43605
|
+
scriptNodes.push(node);
|
43606
|
+
} else {
|
43607
|
+
nodeScriptNodes = node.getElementsByTagName('script');
|
43608
|
+
for (j=0;j<nodeScriptNodes.length;j++) {
|
43609
|
+
scriptNodes.push(nodeScriptNodes[j]);
|
43610
|
+
}
|
43611
|
+
}
|
43612
|
+
}
|
43613
|
+
|
43614
|
+
// Walk the script tags and put back their leading text nodes.
|
43615
|
+
var textNode, spaceBefore, spaceAfter;
|
43616
|
+
for (i=0;scriptNode=scriptNodes[i];i++) {
|
43617
|
+
spaceBefore = spacesBefore[i];
|
43618
|
+
if (spaceBefore && spaceBefore.length > 0) {
|
43619
|
+
textNode = dom.document.createTextNode(spaceBefore);
|
43620
|
+
scriptNode.parentNode.insertBefore(textNode, scriptNode);
|
43621
|
+
}
|
43622
|
+
|
43623
|
+
spaceAfter = spacesAfter[i];
|
43624
|
+
if (spaceAfter && spaceAfter.length > 0) {
|
43625
|
+
textNode = dom.document.createTextNode(spaceAfter);
|
43626
|
+
scriptNode.parentNode.insertBefore(textNode, scriptNode.nextSibling);
|
43627
|
+
}
|
43628
|
+
}
|
43629
|
+
|
43630
|
+
return nodes;
|
43631
|
+
};
|
43632
|
+
} else {
|
43633
|
+
buildHTMLDOM = buildDOM;
|
43634
|
+
}
|
43635
|
+
|
43636
|
+
__exports__.buildHTMLDOM = buildHTMLDOM;
|
43637
|
+
});
|
43308
43638
|
define("morph/morph",
|
43309
43639
|
["exports"],
|
43310
43640
|
function(__exports__) {
|
@@ -43318,7 +43648,7 @@ define("morph/morph",
|
|
43318
43648
|
}
|
43319
43649
|
|
43320
43650
|
function ensureContext(contextualElement) {
|
43321
|
-
if (!contextualElement || contextualElement.nodeType !==
|
43651
|
+
if (!contextualElement || contextualElement.nodeType !== 1) {
|
43322
43652
|
throw new Error('An element node must be provided for a contextualElement, you provided ' +
|
43323
43653
|
(contextualElement ? 'nodeType ' + contextualElement.nodeType : 'nothing'));
|
43324
43654
|
}
|
@@ -44589,6 +44919,58 @@ define("router/router",
|
|
44589
44919
|
this.reset();
|
44590
44920
|
}
|
44591
44921
|
|
44922
|
+
function getTransitionByIntent(intent, isIntermediate) {
|
44923
|
+
var wasTransitioning = !!this.activeTransition;
|
44924
|
+
var oldState = wasTransitioning ? this.activeTransition.state : this.state;
|
44925
|
+
var newTransition;
|
44926
|
+
|
44927
|
+
var newState = intent.applyToState(oldState, this.recognizer, this.getHandler, isIntermediate);
|
44928
|
+
var queryParamChangelist = getChangelist(oldState.queryParams, newState.queryParams);
|
44929
|
+
|
44930
|
+
if (handlerInfosEqual(newState.handlerInfos, oldState.handlerInfos)) {
|
44931
|
+
|
44932
|
+
// This is a no-op transition. See if query params changed.
|
44933
|
+
if (queryParamChangelist) {
|
44934
|
+
newTransition = this.queryParamsTransition(queryParamChangelist, wasTransitioning, oldState, newState);
|
44935
|
+
if (newTransition) {
|
44936
|
+
return newTransition;
|
44937
|
+
}
|
44938
|
+
}
|
44939
|
+
|
44940
|
+
// No-op. No need to create a new transition.
|
44941
|
+
return new Transition(this);
|
44942
|
+
}
|
44943
|
+
|
44944
|
+
if (isIntermediate) {
|
44945
|
+
setupContexts(this, newState);
|
44946
|
+
return;
|
44947
|
+
}
|
44948
|
+
|
44949
|
+
// Create a new transition to the destination route.
|
44950
|
+
newTransition = new Transition(this, intent, newState);
|
44951
|
+
|
44952
|
+
// Abort and usurp any previously active transition.
|
44953
|
+
if (this.activeTransition) {
|
44954
|
+
this.activeTransition.abort();
|
44955
|
+
}
|
44956
|
+
this.activeTransition = newTransition;
|
44957
|
+
|
44958
|
+
// Transition promises by default resolve with resolved state.
|
44959
|
+
// For our purposes, swap out the promise to resolve
|
44960
|
+
// after the transition has been finalized.
|
44961
|
+
newTransition.promise = newTransition.promise.then(function(result) {
|
44962
|
+
return finalizeTransition(newTransition, result.state);
|
44963
|
+
}, null, promiseLabel("Settle transition promise when transition is finalized"));
|
44964
|
+
|
44965
|
+
if (!wasTransitioning) {
|
44966
|
+
notifyExistingHandlers(this, newState, newTransition);
|
44967
|
+
}
|
44968
|
+
|
44969
|
+
fireQueryParamDidChange(this, newState, queryParamChangelist);
|
44970
|
+
|
44971
|
+
return newTransition;
|
44972
|
+
}
|
44973
|
+
|
44592
44974
|
Router.prototype = {
|
44593
44975
|
|
44594
44976
|
/**
|
@@ -44653,58 +45035,8 @@ define("router/router",
|
|
44653
45035
|
// it shall remain until our ES6 transpiler can
|
44654
45036
|
// handle cyclical deps.
|
44655
45037
|
transitionByIntent: function(intent, isIntermediate) {
|
44656
|
-
|
44657
|
-
var wasTransitioning = !!this.activeTransition;
|
44658
|
-
var oldState = wasTransitioning ? this.activeTransition.state : this.state;
|
44659
|
-
var newTransition;
|
44660
|
-
var router = this;
|
44661
|
-
|
44662
45038
|
try {
|
44663
|
-
|
44664
|
-
var queryParamChangelist = getChangelist(oldState.queryParams, newState.queryParams);
|
44665
|
-
|
44666
|
-
if (handlerInfosEqual(newState.handlerInfos, oldState.handlerInfos)) {
|
44667
|
-
|
44668
|
-
// This is a no-op transition. See if query params changed.
|
44669
|
-
if (queryParamChangelist) {
|
44670
|
-
newTransition = this.queryParamsTransition(queryParamChangelist, wasTransitioning, oldState, newState);
|
44671
|
-
if (newTransition) {
|
44672
|
-
return newTransition;
|
44673
|
-
}
|
44674
|
-
}
|
44675
|
-
|
44676
|
-
// No-op. No need to create a new transition.
|
44677
|
-
return new Transition(this);
|
44678
|
-
}
|
44679
|
-
|
44680
|
-
if (isIntermediate) {
|
44681
|
-
setupContexts(this, newState);
|
44682
|
-
return;
|
44683
|
-
}
|
44684
|
-
|
44685
|
-
// Create a new transition to the destination route.
|
44686
|
-
newTransition = new Transition(this, intent, newState);
|
44687
|
-
|
44688
|
-
// Abort and usurp any previously active transition.
|
44689
|
-
if (this.activeTransition) {
|
44690
|
-
this.activeTransition.abort();
|
44691
|
-
}
|
44692
|
-
this.activeTransition = newTransition;
|
44693
|
-
|
44694
|
-
// Transition promises by default resolve with resolved state.
|
44695
|
-
// For our purposes, swap out the promise to resolve
|
44696
|
-
// after the transition has been finalized.
|
44697
|
-
newTransition.promise = newTransition.promise.then(function(result) {
|
44698
|
-
return finalizeTransition(newTransition, result.state);
|
44699
|
-
}, null, promiseLabel("Settle transition promise when transition is finalized"));
|
44700
|
-
|
44701
|
-
if (!wasTransitioning) {
|
44702
|
-
notifyExistingHandlers(this, newState, newTransition);
|
44703
|
-
}
|
44704
|
-
|
44705
|
-
fireQueryParamDidChange(this, newState, queryParamChangelist);
|
44706
|
-
|
44707
|
-
return newTransition;
|
45039
|
+
return getTransitionByIntent.apply(this, arguments);
|
44708
45040
|
} catch(e) {
|
44709
45041
|
return new Transition(this, intent, null, e);
|
44710
45042
|
}
|
@@ -45046,7 +45378,9 @@ define("router/router",
|
|
45046
45378
|
var handler = handlerInfo.handler,
|
45047
45379
|
context = handlerInfo.context;
|
45048
45380
|
|
45049
|
-
|
45381
|
+
if (enter) {
|
45382
|
+
callHook(handler, 'enter', transition);
|
45383
|
+
}
|
45050
45384
|
if (transition && transition.isAborted) {
|
45051
45385
|
throw new TransitionAborted();
|
45052
45386
|
}
|