ember-source 1.8.0.beta.2 → 1.8.0.beta.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
}
|