ember-source 1.11.0.beta.5 → 1.11.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of ember-source might be problematic. Click here for more details.

@@ -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.11.0-beta.5.1501308c
8
+ * @version 1.11.0
9
9
  */
10
10
 
11
11
  (function() {
@@ -5460,6 +5460,13 @@ enifed('ember-debug/tests/main_test', ['ember-metal/core'], function (Ember) {
5460
5460
 
5461
5461
  QUnit.module('ember-debug');
5462
5462
 
5463
+ QUnit.test('Ember.deprecate throws deprecation with one argument', function() {
5464
+ expect(1);
5465
+
5466
+ throws(function() {
5467
+ });
5468
+ });
5469
+
5463
5470
  QUnit.test('Ember.deprecate throws deprecation if second argument is falsy', function() {
5464
5471
  expect(3);
5465
5472
 
@@ -7418,8 +7425,8 @@ enifed('ember-htmlbars/tests/attr_nodes/boolean_test', ['ember-views/views/view'
7418
7425
  run['default'](function() { view.appendTo('#qunit-fixture'); });
7419
7426
  }
7420
7427
 
7421
-
7422
7428
  // jscs:disable validateIndentation
7429
+
7423
7430
 
7424
7431
  QUnit.module("ember-htmlbars: boolean attribute", {
7425
7432
  teardown: function() {
@@ -7503,9 +7510,8 @@ enifed('ember-htmlbars/tests/attr_nodes/boolean_test', ['ember-views/views/view'
7503
7510
  'boolean property is set false');
7504
7511
  });
7505
7512
 
7506
-
7507
- // jscs:enable validateIndentation
7508
7513
 
7514
+ // jscs:enable validateIndentation
7509
7515
 
7510
7516
  });
7511
7517
  enifed('ember-htmlbars/tests/attr_nodes/boolean_test.jscs-test', function () {
@@ -7543,8 +7549,8 @@ enifed('ember-htmlbars/tests/attr_nodes/class_test', ['ember-views/views/view',
7543
7549
  isInlineIfEnabled = true;
7544
7550
 
7545
7551
 
7546
-
7547
7552
  // jscs:disable validateIndentation
7553
+
7548
7554
 
7549
7555
  QUnit.module("ember-htmlbars: class attribute", {
7550
7556
  teardown: function() {
@@ -7680,8 +7686,8 @@ enifed('ember-htmlbars/tests/attr_nodes/class_test', ['ember-views/views/view',
7680
7686
  ok(view.element.firstChild.className, 'r b a c', 'classes are in the right order');
7681
7687
  });
7682
7688
 
7683
- // jscs:enable validateIndentation
7684
7689
 
7690
+ // jscs:enable validateIndentation
7685
7691
 
7686
7692
  });
7687
7693
  enifed('ember-htmlbars/tests/attr_nodes/class_test.jscs-test', function () {
@@ -7993,8 +7999,8 @@ enifed('ember-htmlbars/tests/attr_nodes/href_test', ['ember-views/views/view', '
7993
7999
  run['default'](function() { view.appendTo('#qunit-fixture'); });
7994
8000
  }
7995
8001
 
7996
-
7997
8002
  // jscs:disable validateIndentation
8003
+
7998
8004
 
7999
8005
  QUnit.module("ember-htmlbars: href attribute", {
8000
8006
  teardown: function() {
@@ -8015,8 +8021,8 @@ enifed('ember-htmlbars/tests/attr_nodes/href_test', ['ember-views/views/view', '
8015
8021
  "attribute is output");
8016
8022
  });
8017
8023
 
8018
- // jscs:enable validateIndentation
8019
8024
 
8025
+ // jscs:enable validateIndentation
8020
8026
 
8021
8027
  });
8022
8028
  enifed('ember-htmlbars/tests/attr_nodes/href_test.jscs-test', function () {
@@ -8056,8 +8062,8 @@ enifed('ember-htmlbars/tests/attr_nodes/property_test', ['ember-views/views/view
8056
8062
  return input.maxLength === 0;
8057
8063
  }
8058
8064
 
8059
-
8060
8065
  // jscs:disable validateIndentation
8066
+
8061
8067
 
8062
8068
  QUnit.module("ember-htmlbars: property", {
8063
8069
  teardown: function() {
@@ -8110,8 +8116,8 @@ enifed('ember-htmlbars/tests/attr_nodes/property_test', ['ember-views/views/view
8110
8116
  ok(true, "no legacy assertion prohibited setting an array");
8111
8117
  });
8112
8118
 
8113
- // jscs:enable validateIndentation
8114
8119
 
8120
+ // jscs:enable validateIndentation
8115
8121
 
8116
8122
  });
8117
8123
  enifed('ember-htmlbars/tests/attr_nodes/property_test.jscs-test', function () {
@@ -8148,26 +8154,41 @@ enifed('ember-htmlbars/tests/attr_nodes/sanitized_test', ['ember-views/views/vie
8148
8154
  }
8149
8155
  });
8150
8156
 
8151
-
8152
8157
  // jscs:disable validateIndentation
8158
+ // jscs:disable disallowTrailingWhitespace
8159
+
8153
8160
 
8154
8161
  var badTags = [
8155
8162
  { tag: 'a', attr: 'href',
8156
8163
  unquotedTemplate: compile['default']("<a href={{url}}></a>"),
8157
8164
  quotedTemplate: compile['default']("<a href='{{url}}'></a>"),
8158
8165
  multipartTemplate: compile['default']("<a href='{{protocol}}{{path}}'></a>") },
8166
+
8167
+ { tag: 'base', attr: 'href',
8168
+ unquotedTemplate: compile['default']("<base href={{url}} />"),
8169
+ quotedTemplate: compile['default']("<base href='{{url}}'/>"),
8170
+ multipartTemplate: compile['default']("<base href='{{protocol}}{{path}}'/>") },
8171
+
8172
+ { tag: 'embed', attr: 'src',
8173
+ unquotedTemplate: compile['default']("<embed src={{url}} />"),
8174
+ quotedTemplate: compile['default']("<embed src='{{url}}'/>"),
8175
+ multipartTemplate: compile['default']("<embed src='{{protocol}}{{path}}'/>") },
8176
+
8159
8177
  { tag: 'body', attr: 'background',
8160
8178
  unquotedTemplate: compile['default']("<body background={{url}}></body>"),
8161
8179
  quotedTemplate: compile['default']("<body background='{{url}}'></body>"),
8162
8180
  multipartTemplate: compile['default']("<body background='{{protocol}}{{path}}'></body>") },
8181
+
8163
8182
  { tag: 'link', attr: 'href',
8164
8183
  unquotedTemplate: compile['default']("<link href={{url}}>"),
8165
8184
  quotedTemplate: compile['default']("<link href='{{url}}'>"),
8166
8185
  multipartTemplate: compile['default']("<link href='{{protocol}}{{path}}'>") },
8186
+
8167
8187
  { tag: 'img', attr: 'src',
8168
8188
  unquotedTemplate: compile['default']("<img src={{url}}>"),
8169
8189
  quotedTemplate: compile['default']("<img src='{{url}}'>"),
8170
8190
  multipartTemplate: compile['default']("<img src='{{protocol}}{{path}}'>") },
8191
+
8171
8192
  { tag: 'iframe', attr: 'src',
8172
8193
  // Setting an iframe with a bad protocol results in the browser
8173
8194
  // being redirected. in IE8. Skip the iframe tests on that platform.
@@ -8242,8 +8263,9 @@ enifed('ember-htmlbars/tests/attr_nodes/sanitized_test', ['ember-views/views/vie
8242
8263
  })(); //jshint ignore:line
8243
8264
  }
8244
8265
 
8245
- // jscs:enable validateIndentation
8246
8266
 
8267
+ // jscs:enable disallowTrailingWhitespace
8268
+ // jscs:enable validateIndentation
8247
8269
 
8248
8270
  });
8249
8271
  enifed('ember-htmlbars/tests/attr_nodes/sanitized_test.jscs-test', function () {
@@ -8265,6 +8287,104 @@ enifed('ember-htmlbars/tests/attr_nodes/sanitized_test.jshint', function () {
8265
8287
  ok(true, 'ember-htmlbars/tests/attr_nodes/sanitized_test.js should pass jshint.');
8266
8288
  });
8267
8289
 
8290
+ });
8291
+ enifed('ember-htmlbars/tests/attr_nodes/style_test', ['ember-metal/core', 'ember-views/views/view', 'ember-template-compiler/system/compile', 'ember-htmlbars/utils/string', 'ember-runtime/tests/utils', 'ember-views/attr_nodes/attr_node'], function (Ember, EmberView, compile, string, utils, attr_node) {
8292
+
8293
+ 'use strict';
8294
+
8295
+ /* globals EmberDev */
8296
+
8297
+ var view, originalWarn, warnings;
8298
+
8299
+ QUnit.module("ember-htmlbars: style attribute", {
8300
+ setup: function() {
8301
+ warnings = [];
8302
+ originalWarn = Ember['default'].warn;
8303
+ Ember['default'].warn = function(message, test) {
8304
+ if (!test) {
8305
+ warnings.push(message);
8306
+ }
8307
+ };
8308
+ },
8309
+
8310
+ teardown: function() {
8311
+ utils.runDestroy(view);
8312
+ Ember['default'].warn = originalWarn;
8313
+ }
8314
+ });
8315
+
8316
+ // jscs:disable validateIndentation
8317
+
8318
+
8319
+ if (!EmberDev.runningProdBuild) {
8320
+ QUnit.test('specifying `<div style={{userValue}}></div>` generates a warning', function() {
8321
+ view = EmberView['default'].create({
8322
+ userValue: 'width: 42px',
8323
+ template: compile['default']('<div style={{view.userValue}}></div>')
8324
+ });
8325
+
8326
+ utils.runAppend(view);
8327
+
8328
+ deepEqual(warnings, [attr_node.styleWarning]);
8329
+ });
8330
+
8331
+ QUnit.test('specifying `attributeBindings: ["style"]` generates a warning', function() {
8332
+ view = EmberView['default'].create({
8333
+ userValue: 'width: 42px',
8334
+ template: compile['default']('<div style={{view.userValue}}></div>')
8335
+ });
8336
+
8337
+ utils.runAppend(view);
8338
+
8339
+ deepEqual(warnings, [attr_node.styleWarning]);
8340
+ });
8341
+ }
8342
+
8343
+ QUnit.test('specifying `<div style={{{userValue}}}></div>` works properly without a warning', function() {
8344
+ view = EmberView['default'].create({
8345
+ userValue: 'width: 42px',
8346
+ template: compile['default']('<div style={{{view.userValue}}}></div>')
8347
+ });
8348
+
8349
+ utils.runAppend(view);
8350
+
8351
+ deepEqual(warnings, [ ]);
8352
+ });
8353
+
8354
+ QUnit.test('specifying `<div style={{userValue}}></div>` works properly with a SafeString', function() {
8355
+ view = EmberView['default'].create({
8356
+ userValue: new string.SafeString('width: 42px'),
8357
+ template: compile['default']('<div style={{view.userValue}}></div>')
8358
+ });
8359
+
8360
+ utils.runAppend(view);
8361
+
8362
+ deepEqual(warnings, [ ]);
8363
+ });
8364
+
8365
+
8366
+ // jscs:enable validateIndentation
8367
+
8368
+ });
8369
+ enifed('ember-htmlbars/tests/attr_nodes/style_test.jscs-test', function () {
8370
+
8371
+ 'use strict';
8372
+
8373
+ module('JSCS - ember-htmlbars/tests/attr_nodes');
8374
+ test('ember-htmlbars/tests/attr_nodes/style_test.js should pass jscs', function() {
8375
+ ok(true, 'ember-htmlbars/tests/attr_nodes/style_test.js should pass jscs.');
8376
+ });
8377
+
8378
+ });
8379
+ enifed('ember-htmlbars/tests/attr_nodes/style_test.jshint', function () {
8380
+
8381
+ 'use strict';
8382
+
8383
+ module('JSHint - ember-htmlbars/tests/attr_nodes');
8384
+ test('ember-htmlbars/tests/attr_nodes/style_test.js should pass jshint', function() {
8385
+ ok(true, 'ember-htmlbars/tests/attr_nodes/style_test.js should pass jshint.');
8386
+ });
8387
+
8268
8388
  });
8269
8389
  enifed('ember-htmlbars/tests/attr_nodes/svg_test', ['ember-views/views/view', 'ember-metal/run_loop', 'ember-template-compiler/system/compile', 'htmlbars-test-helpers'], function (EmberView, run, compile, htmlbars_test_helpers) {
8270
8390
 
@@ -8276,8 +8396,8 @@ enifed('ember-htmlbars/tests/attr_nodes/svg_test', ['ember-views/views/view', 'e
8276
8396
  run['default'](function() { view.appendTo('#qunit-fixture'); });
8277
8397
  }
8278
8398
 
8279
-
8280
8399
  // jscs:disable validateIndentation
8400
+
8281
8401
 
8282
8402
  QUnit.module("ember-htmlbars: svg attribute", {
8283
8403
  teardown: function() {
@@ -8342,8 +8462,8 @@ enifed('ember-htmlbars/tests/attr_nodes/svg_test', ['ember-views/views/view', 'e
8342
8462
  htmlbars_test_helpers.equalInnerHTML(view.element, '<svg class="red tall"></svg>', "attribute is output");
8343
8463
  });
8344
8464
 
8345
- // jscs:enable validateIndentation
8346
8465
 
8466
+ // jscs:enable validateIndentation
8347
8467
 
8348
8468
  });
8349
8469
  enifed('ember-htmlbars/tests/attr_nodes/svg_test.jscs-test', function () {
@@ -8376,8 +8496,8 @@ enifed('ember-htmlbars/tests/attr_nodes/value_test', ['ember-views/views/view',
8376
8496
  run['default'](function() { view.appendTo('#qunit-fixture'); });
8377
8497
  }
8378
8498
 
8379
-
8380
8499
  // jscs:disable validateIndentation
8500
+
8381
8501
 
8382
8502
  QUnit.module("ember-htmlbars: value attribute", {
8383
8503
  teardown: function() {
@@ -8423,8 +8543,8 @@ enifed('ember-htmlbars/tests/attr_nodes/value_test', ['ember-views/views/view',
8423
8543
  'property is set true');
8424
8544
  });
8425
8545
 
8426
- // jscs:enable validateIndentation
8427
8546
 
8547
+ // jscs:enable validateIndentation
8428
8548
 
8429
8549
  });
8430
8550
  enifed('ember-htmlbars/tests/attr_nodes/value_test.jscs-test', function () {
@@ -9568,15 +9688,17 @@ enifed('ember-htmlbars/tests/compat/precompile_test.jshint', function () {
9568
9688
  });
9569
9689
 
9570
9690
  });
9571
- enifed('ember-htmlbars/tests/helpers/bind_attr_test', ['ember-metal/core', 'ember-metal/run_loop', 'ember-runtime/system/namespace', 'ember-views/views/view', 'ember-views/views/metamorph_view', 'ember-runtime/system/object', 'ember-runtime/system/native_array', 'ember-metal/computed', 'ember-metal/observer', 'ember-runtime/system/container', 'ember-metal/property_set', 'ember-runtime/tests/utils', 'ember-htmlbars/helpers', 'ember-template-compiler/system/compile'], function (Ember, run, Namespace, EmberView, _MetamorphView, EmberObject, native_array, computed, observer, system__container, property_set, utils, helpers, compile) {
9691
+ enifed('ember-htmlbars/tests/helpers/bind_attr_test', ['ember-metal/core', 'ember-metal/run_loop', 'ember-runtime/system/namespace', 'ember-views/views/view', 'ember-views/views/metamorph_view', 'ember-runtime/system/object', 'ember-runtime/system/native_array', 'ember-metal/computed', 'ember-metal/observer', 'ember-runtime/system/container', 'ember-metal/property_set', 'ember-runtime/tests/utils', 'ember-views/attr_nodes/attr_node', 'ember-htmlbars/utils/string', 'ember-htmlbars/helpers', 'ember-template-compiler/system/compile'], function (Ember, run, Namespace, EmberView, _MetamorphView, EmberObject, native_array, computed, observer, system__container, property_set, utils, attr_node, string, helpers, compile) {
9572
9692
 
9573
9693
  'use strict';
9574
9694
 
9695
+ /*globals EmberDev */
9575
9696
  /*jshint newcap:false*/
9697
+
9576
9698
  var view;
9577
9699
 
9578
9700
  var originalLookup = Ember['default'].lookup;
9579
- var TemplateTests, registry, container, lookup;
9701
+ var TemplateTests, registry, container, lookup, warnings, originalWarn;
9580
9702
 
9581
9703
  /**
9582
9704
  This module specifically tests integration with Handlebars and Ember-specific
@@ -9594,6 +9716,14 @@ enifed('ember-htmlbars/tests/helpers/bind_attr_test', ['ember-metal/core', 'embe
9594
9716
  registry.optionsForType('template', { instantiate: false });
9595
9717
  registry.register('view:default', _MetamorphView['default']);
9596
9718
  registry.register('view:toplevel', EmberView['default'].extend());
9719
+
9720
+ warnings = [];
9721
+ originalWarn = Ember['default'].warn;
9722
+ Ember['default'].warn = function(message, test) {
9723
+ if (!test) {
9724
+ warnings.push(message);
9725
+ }
9726
+ };
9597
9727
  },
9598
9728
 
9599
9729
  teardown: function() {
@@ -9602,6 +9732,7 @@ enifed('ember-htmlbars/tests/helpers/bind_attr_test', ['ember-metal/core', 'embe
9602
9732
  registry = container = view = null;
9603
9733
 
9604
9734
  Ember['default'].lookup = lookup = originalLookup;
9735
+ Ember['default'].warn = originalWarn;
9605
9736
  TemplateTests = null;
9606
9737
  }
9607
9738
  });
@@ -10133,7 +10264,7 @@ enifed('ember-htmlbars/tests/helpers/bind_attr_test', ['ember-metal/core', 'embe
10133
10264
  }, /You cannot set `data-bar` manually and via `{{bind-attr}}` helper on the same element/);
10134
10265
  });
10135
10266
 
10136
- QUnit.test("src attribute bound to undefined is not present", function() {
10267
+ QUnit.test("src attribute bound to undefined is empty", function() {
10137
10268
  var template = compile['default']("<img {{bind-attr src=view.undefinedValue}}>");
10138
10269
 
10139
10270
  view = EmberView['default'].create({
@@ -10143,10 +10274,10 @@ enifed('ember-htmlbars/tests/helpers/bind_attr_test', ['ember-metal/core', 'embe
10143
10274
 
10144
10275
  utils.runAppend(view);
10145
10276
 
10146
- ok(!view.element.hasAttribute('src'), "src attribute not present");
10277
+ equal(view.element.firstChild.getAttribute('src'), '', "src attribute is empty");
10147
10278
  });
10148
10279
 
10149
- QUnit.test("src attribute bound to null is not present", function() {
10280
+ QUnit.test("src attribute bound to null is empty", function() {
10150
10281
  var template = compile['default']("<img {{bind-attr src=view.nullValue}}>");
10151
10282
 
10152
10283
  view = EmberView['default'].create({
@@ -10156,7 +10287,69 @@ enifed('ember-htmlbars/tests/helpers/bind_attr_test', ['ember-metal/core', 'embe
10156
10287
 
10157
10288
  utils.runAppend(view);
10158
10289
 
10159
- ok(!view.element.hasAttribute('src'), "src attribute not present");
10290
+ equal(view.element.firstChild.getAttribute('src'), '', "src attribute is empty");
10291
+ });
10292
+
10293
+ QUnit.test("src attribute will be cleared when the value is set to null or undefined", function() {
10294
+ var template = compile['default']("<img {{bind-attr src=view.value}}>");
10295
+
10296
+ view = EmberView['default'].create({
10297
+ template: template,
10298
+ value: 'one'
10299
+ });
10300
+
10301
+ utils.runAppend(view);
10302
+
10303
+ equal(view.element.firstChild.getAttribute('src'), 'one', "src attribute is present");
10304
+
10305
+ run['default'](function() {
10306
+ property_set.set(view, 'value', 'two');
10307
+ });
10308
+
10309
+ equal(view.element.firstChild.getAttribute('src'), 'two', "src attribute is present");
10310
+
10311
+ run['default'](function() {
10312
+ property_set.set(view, 'value', null);
10313
+ });
10314
+
10315
+ equal(view.element.firstChild.getAttribute('src'), '', "src attribute is empty");
10316
+
10317
+ run['default'](function() {
10318
+ property_set.set(view, 'value', 'three');
10319
+ });
10320
+
10321
+ equal(view.element.firstChild.getAttribute('src'), 'three', "src attribute is present");
10322
+
10323
+ run['default'](function() {
10324
+ property_set.set(view, 'value', undefined);
10325
+ });
10326
+
10327
+ equal(view.element.firstChild.getAttribute('src'), '', "src attribute is empty");
10328
+ });
10329
+
10330
+ if (!EmberDev.runningProdBuild) {
10331
+
10332
+ QUnit.test('specifying `<div {{bind-attr style=userValue}}></div>` triggers a warning', function() {
10333
+ view = EmberView['default'].create({
10334
+ userValue: '42',
10335
+ template: compile['default']('<div {{bind-attr style=view.userValue}}></div>')
10336
+ });
10337
+
10338
+ utils.runAppend(view);
10339
+
10340
+ deepEqual(warnings, [attr_node.styleWarning]);
10341
+ });
10342
+ }
10343
+
10344
+ QUnit.test('specifying `<div {{bind-attr style=userValue}}></div>` works properly with a SafeString', function() {
10345
+ view = EmberView['default'].create({
10346
+ userValue: new string.SafeString('42'),
10347
+ template: compile['default']('<div {{bind-attr style=view.userValue}}></div>')
10348
+ });
10349
+
10350
+ utils.runAppend(view);
10351
+
10352
+ deepEqual(warnings, [ ]);
10160
10353
  });
10161
10354
 
10162
10355
  });
@@ -10327,8 +10520,8 @@ enifed('ember-htmlbars/tests/helpers/collection_test', ['ember-views/views/colle
10327
10520
  var container = registry.container();
10328
10521
 
10329
10522
  var ACollectionView = CollectionView['default'].extend({
10330
- tagName: 'ul',
10331
- content: native_array.A(['foo', 'bar', 'baz'])
10523
+ tagName: 'ul',
10524
+ content: native_array.A(['foo', 'bar', 'baz'])
10332
10525
  });
10333
10526
 
10334
10527
  registry.register('view:collectionTest', ACollectionView);
@@ -10527,7 +10720,7 @@ enifed('ember-htmlbars/tests/helpers/collection_test', ['ember-views/views/colle
10527
10720
  equal(view.$('ul li.baz').length, 3, "adds class attribute");
10528
10721
  });
10529
10722
 
10530
- QUnit.test("should give its item views the classBinding specified by itemClassBinding", function() {
10723
+ QUnit.test("should give its item views the class specified by itemClass", function() {
10531
10724
  var ItemClassBindingTestCollectionView = CollectionView['default'].extend({
10532
10725
  tagName: 'ul',
10533
10726
  content: native_array.A([EmberObject['default'].create({ isBaz: false }), EmberObject['default'].create({ isBaz: true }), EmberObject['default'].create({ isBaz: true })])
@@ -10536,7 +10729,7 @@ enifed('ember-htmlbars/tests/helpers/collection_test', ['ember-views/views/colle
10536
10729
  view = EmberView['default'].create({
10537
10730
  itemClassBindingTestCollectionView: ItemClassBindingTestCollectionView,
10538
10731
  isBar: true,
10539
- template: compile['default']('{{#collection view.itemClassBindingTestCollectionView itemClassBinding="view.isBar"}}foo{{/collection}}')
10732
+ template: compile['default']('{{#collection view.itemClassBindingTestCollectionView itemClass=view.isBar}}foo{{/collection}}')
10540
10733
  });
10541
10734
 
10542
10735
  utils.runAppend(view);
@@ -10547,7 +10740,7 @@ enifed('ember-htmlbars/tests/helpers/collection_test', ['ember-views/views/colle
10547
10740
  // to introduce a new keyword that could be used from within `itemClassBinding`. For instance, `itemClassBinding="item.isBaz"`.
10548
10741
  });
10549
10742
 
10550
- QUnit.test("should give its item views the property specified by itemPropertyBinding", function() {
10743
+ QUnit.test("should give its item views the property specified by itemProperty", function() {
10551
10744
  var ItemPropertyBindingTestItemView = EmberView['default'].extend({
10552
10745
  tagName: 'li'
10553
10746
  });
@@ -10562,7 +10755,7 @@ enifed('ember-htmlbars/tests/helpers/collection_test', ['ember-views/views/colle
10562
10755
  return ItemPropertyBindingTestItemView;
10563
10756
  }
10564
10757
  },
10565
- template: compile['default']('{{#collection contentBinding="view.content" tagName="ul" itemViewClass="item-property-binding-test-item-view" itemPropertyBinding="view.baz" preserveContext=false}}{{view.property}}{{/collection}}')
10758
+ template: compile['default']('{{#collection content=view.content tagName="ul" itemViewClass="item-property-binding-test-item-view" itemProperty=view.baz preserveContext=false}}{{view.property}}{{/collection}}')
10566
10759
  });
10567
10760
 
10568
10761
  utils.runAppend(view);
@@ -10584,7 +10777,7 @@ enifed('ember-htmlbars/tests/helpers/collection_test', ['ember-views/views/colle
10584
10777
  view = EmberView['default'].create({
10585
10778
  baz: "baz",
10586
10779
  content: native_array.A([EmberObject['default'].create(), EmberObject['default'].create(), EmberObject['default'].create()]),
10587
- template: compile['default']('{{#collection contentBinding="view.content" itemPropertyBinding="view.baz"}}{{view.property}}{{/collection}}')
10780
+ template: compile['default']('{{#collection content=view.content itemProperty=view.baz}}{{view.property}}{{/collection}}')
10588
10781
  });
10589
10782
 
10590
10783
  utils.runAppend(view);
@@ -10845,7 +11038,7 @@ enifed('ember-htmlbars/tests/helpers/collection_test', ['ember-views/views/colle
10845
11038
  controller: {
10846
11039
  items: items
10847
11040
  },
10848
- template: compile['default']('{{collection contentBinding="items" itemViewClass="an-item"}}')
11041
+ template: compile['default']('{{collection content=items itemViewClass="an-item"}}')
10849
11042
  });
10850
11043
 
10851
11044
  utils.runAppend(view);
@@ -11213,7 +11406,7 @@ enifed('ember-htmlbars/tests/helpers/each_test', ['ember-metal/core', 'ember-run
11213
11406
  var originalLookup = Ember['default'].lookup;
11214
11407
  var lookup;
11215
11408
 
11216
- QUnit.module("the #each helper [DEPRECATED]", {
11409
+ QUnit.module("the scope changing #each helper [DEPRECATED]", {
11217
11410
  setup: function() {
11218
11411
  Ember['default'].lookup = lookup = { Ember: Ember['default'] };
11219
11412
 
@@ -11708,8 +11901,8 @@ enifed('ember-htmlbars/tests/helpers/each_test', ['ember-metal/core', 'ember-run
11708
11901
  QUnit.test("it supports {{itemViewClass=}} with tagName (DEPRECATED)", function() {
11709
11902
  utils.runDestroy(view);
11710
11903
  view = EmberView['default'].create({
11711
- template: templateFor('{{each view.people itemViewClass=MyView tagName="ul"}}'),
11712
- people: people
11904
+ template: templateFor('{{each view.people itemViewClass=MyView tagName="ul"}}'),
11905
+ people: people
11713
11906
  });
11714
11907
 
11715
11908
  expectDeprecation(/Supplying a tagName to Metamorph views is unreliable and is deprecated./);
@@ -12041,7 +12234,7 @@ enifed('ember-htmlbars/tests/helpers/each_test', ['ember-metal/core', 'ember-run
12041
12234
  view = EmberView['default'].create({
12042
12235
  container: container,
12043
12236
  controller: controller,
12044
- template: templateFor('{{#EACH|this|personController}}{{#view controllerBinding="personController"}}{{name}}{{/view}}{{/each}}', useBlockParams)
12237
+ template: templateFor('{{#EACH|this|personController}}{{#view controller=personController}}{{name}}{{/view}}{{/each}}', useBlockParams)
12045
12238
  });
12046
12239
 
12047
12240
  utils.runAppend(view);
@@ -13469,6 +13662,44 @@ enifed('ember-htmlbars/tests/helpers/input_test', ['ember-metal/run_loop', 'embe
13469
13662
  equal(view.$('input').prop('checked'), false, "the checkbox isn't checked yet");
13470
13663
  });
13471
13664
 
13665
+ QUnit.module("{{input type='text'}} - null/undefined values", {
13666
+ teardown: function() {
13667
+ utils.runDestroy(view);
13668
+ }
13669
+ });
13670
+
13671
+ QUnit.test("placeholder attribute bound to undefined is not present", function() {
13672
+ view = View['default'].extend({
13673
+ controller: {},
13674
+ template: compile['default']('{{input placeholder=someThingNotThere}}')
13675
+ }).create();
13676
+
13677
+ utils.runAppend(view);
13678
+
13679
+ ok(!view.element.childNodes[1].hasAttribute('placeholder'), "attribute not present");
13680
+
13681
+ run['default'](null, property_set.set, view, 'controller.someThingNotThere', 'foo');
13682
+
13683
+ equal(view.element.childNodes[1].placeholder, 'foo', "attribute is present");
13684
+ });
13685
+
13686
+ QUnit.test("placeholder attribute bound to null is not present", function() {
13687
+ view = View['default'].extend({
13688
+ controller: {
13689
+ someNullProperty: null
13690
+ },
13691
+ template: compile['default']('{{input placeholder=someNullProperty}}')
13692
+ }).create();
13693
+
13694
+ utils.runAppend(view);
13695
+
13696
+ ok(!view.element.childNodes[1].hasAttribute('placeholder'), "attribute not present");
13697
+
13698
+ run['default'](null, property_set.set, view, 'controller.someNullProperty', 'foo');
13699
+
13700
+ equal(view.element.childNodes[1].placeholder, 'foo', "attribute is present");
13701
+ });
13702
+
13472
13703
  });
13473
13704
  enifed('ember-htmlbars/tests/helpers/input_test.jscs-test', function () {
13474
13705
 
@@ -14482,7 +14713,7 @@ enifed('ember-htmlbars/tests/helpers/unbound_test.jshint', function () {
14482
14713
  });
14483
14714
 
14484
14715
  });
14485
- enifed('ember-htmlbars/tests/helpers/view_test', ['ember-views/views/view', 'container/registry', 'ember-metal/run_loop', 'ember-views/system/jquery', 'ember-views/views/text_field', 'ember-runtime/system/namespace', 'ember-runtime/system/object', 'ember-views/views/container_view', 'ember-views/views/metamorph_view', 'htmlbars-util/safe-string', 'ember-template-compiler/compat/precompile', 'ember-template-compiler/system/compile', 'ember-template-compiler/system/template', 'ember-metal/observer', 'ember-runtime/controllers/controller', 'ember-runtime/tests/utils', 'ember-metal/property_set', 'ember-metal/property_get', 'ember-metal/computed'], function (EmberView, Registry, run, jQuery, TextField, Namespace, EmberObject, ContainerView, _MetamorphView, SafeString, precompile, compile, template, observer, Controller, utils, property_set, property_get, computed) {
14716
+ enifed('ember-htmlbars/tests/helpers/view_test', ['ember-views/views/view', 'container/registry', 'ember-metal/run_loop', 'ember-views/system/jquery', 'ember-views/views/text_field', 'ember-runtime/system/namespace', 'ember-runtime/system/object', 'ember-views/views/container_view', 'ember-views/views/metamorph_view', 'htmlbars-util/safe-string', 'ember-template-compiler/compat/precompile', 'ember-template-compiler/system/compile', 'ember-template-compiler/system/template', 'ember-metal/observer', 'ember-runtime/controllers/controller', 'ember-htmlbars/system/make_bound_helper', 'ember-runtime/tests/utils', 'ember-metal/property_set', 'ember-metal/property_get', 'ember-metal/computed'], function (EmberView, Registry, run, jQuery, TextField, Namespace, EmberObject, ContainerView, _MetamorphView, SafeString, precompile, compile, system__template, observer, Controller, makeBoundHelper, utils, property_set, property_get, computed) {
14486
14717
 
14487
14718
  'use strict';
14488
14719
 
@@ -14514,6 +14745,7 @@ enifed('ember-htmlbars/tests/helpers/view_test', ['ember-views/views/view', 'con
14514
14745
  registry = new Registry['default']();
14515
14746
  container = registry.container();
14516
14747
  registry.optionsForType('template', { instantiate: false });
14748
+ registry.optionsForType('helper', { instantiate: false });
14517
14749
  registry.register('view:default', _MetamorphView['default']);
14518
14750
  registry.register('view:toplevel', EmberView['default'].extend());
14519
14751
  },
@@ -14735,15 +14967,17 @@ enifed('ember-htmlbars/tests/helpers/view_test', ['ember-views/views/view', 'con
14735
14967
  snork: "nerd"
14736
14968
  }).create();
14737
14969
 
14738
- utils.runAppend(view);
14970
+ expectDeprecation(function() {
14971
+ utils.runAppend(view);
14972
+ }, /You're attempting to render a view by passing borfBinding to a view helper without a quoted value, but this syntax is ambiguous. You should either surround borfBinding's value in quotes or remove `Binding` from borfBinding./);
14739
14973
 
14740
14974
  equal(jQuery['default']('#lol').text(), "nerd", "awkward mixed syntax treated like binding");
14741
14975
 
14742
14976
  Ember.warn = oldWarn;
14743
14977
  });
14744
14978
 
14745
- QUnit.test('"Binding"-suffixed bindings are runloop-synchronized', function() {
14746
- expect(5);
14979
+ QUnit.test('"Binding"-suffixed bindings are runloop-synchronized [DEPRECATED]', function() {
14980
+ expect(6);
14747
14981
 
14748
14982
  var subview;
14749
14983
 
@@ -14762,7 +14996,10 @@ enifed('ember-htmlbars/tests/helpers/view_test', ['ember-views/views/view', 'con
14762
14996
  });
14763
14997
 
14764
14998
  view = View.create();
14765
- utils.runAppend(view);
14999
+
15000
+ expectDeprecation(function() {
15001
+ utils.runAppend(view);
15002
+ }, /You're attempting to render a view by passing colorBinding to a view helper, but this syntax is deprecated. You should use `color=someValue` instead./);
14766
15003
 
14767
15004
  equal(view.$('h1 .color').text(), 'mauve', 'renders bound value');
14768
15005
 
@@ -14881,6 +15118,30 @@ enifed('ember-htmlbars/tests/helpers/view_test', ['ember-views/views/view', 'con
14881
15118
  ok(jQuery['default']('#foo').hasClass('foo'), "Always applies classbinding without condition");
14882
15119
  });
14883
15120
 
15121
+ QUnit.test("Should apply a class from a sub expression", function() {
15122
+ registry.register('helper:string-concat', makeBoundHelper['default'](function(params) {
15123
+ return params.join('');
15124
+ }));
15125
+
15126
+ view = EmberView['default'].create({
15127
+ container: container,
15128
+ controller: {
15129
+ type: 'btn',
15130
+ size: 'large'
15131
+ },
15132
+ template: compile['default']('{{#view id="foo" class=(string-concat type "-" size)}} Foo{{/view}}')
15133
+ });
15134
+
15135
+ utils.runAppend(view);
15136
+
15137
+ ok(jQuery['default']('#foo').hasClass('btn-large'), "applies classname from subexpression");
15138
+
15139
+ run['default'](view, view.set, 'controller.size', 'medium');
15140
+
15141
+ ok(!jQuery['default']('#foo').hasClass('btn-large'), "removes classname from subexpression update");
15142
+ ok(jQuery['default']('#foo').hasClass('btn-medium'), "adds classname from subexpression update");
15143
+ });
15144
+
14884
15145
  QUnit.test("Should not apply classes when bound property specified is false", function() {
14885
15146
  view = EmberView['default'].create({
14886
15147
  controller: {
@@ -15431,7 +15692,7 @@ enifed('ember-htmlbars/tests/helpers/view_test', ['ember-views/views/view', 'con
15431
15692
  view = EmberView['default'].create({
15432
15693
  name: 'myView',
15433
15694
  textField: TextField['default'],
15434
- template: compile['default']('{{view view.textField valueBinding="view.name"}}')
15695
+ template: compile['default']('{{view view.textField value=view.name}}')
15435
15696
  });
15436
15697
 
15437
15698
  utils.runAppend(view);
@@ -15503,7 +15764,7 @@ enifed('ember-htmlbars/tests/helpers/view_test', ['ember-views/views/view', 'con
15503
15764
  name: 'foo'
15504
15765
  }),
15505
15766
  Subview: Subview,
15506
- template: compile['default']('<h1>{{view view.Subview colorBinding="color" someControllerBinding="this"}}</h1>')
15767
+ template: compile['default']('<h1>{{view view.Subview color=color someController=this}}</h1>')
15507
15768
  });
15508
15769
 
15509
15770
  view = View.create();
@@ -15600,7 +15861,7 @@ enifed('ember-htmlbars/tests/helpers/view_test', ['ember-views/views/view', 'con
15600
15861
 
15601
15862
  QUnit.test('should work with precompiled templates', function() {
15602
15863
  var templateString = precompile['default']('{{view.value}}');
15603
- var compiledTemplate = template['default'](eval(templateString));
15864
+ var compiledTemplate = system__template['default'](eval(templateString));
15604
15865
 
15605
15866
  view = EmberView['default'].create({
15606
15867
  value: 'rendered',
@@ -15618,7 +15879,7 @@ enifed('ember-htmlbars/tests/helpers/view_test', ['ember-views/views/view', 'con
15618
15879
  equal(view.$().text(), 'updated', 'the precompiled template was updated');
15619
15880
  });
15620
15881
 
15621
- QUnit.test('bindings should be relative to the current context', function() {
15882
+ QUnit.test('bindings should be relative to the current context [DEPRECATED]', function() {
15622
15883
  view = EmberView['default'].create({
15623
15884
  museumOpen: true,
15624
15885
 
@@ -15634,12 +15895,14 @@ enifed('ember-htmlbars/tests/helpers/view_test', ['ember-views/views/view', 'con
15634
15895
  template: compile['default']('{{#if view.museumOpen}} {{view view.museumView nameBinding="view.museumDetails.name" dollarsBinding="view.museumDetails.price"}} {{/if}}')
15635
15896
  });
15636
15897
 
15637
- utils.runAppend(view);
15898
+ expectDeprecation(function() {
15899
+ utils.runAppend(view);
15900
+ }, /You're attempting to render a view by passing .+Binding to a view helper, but this syntax is deprecated/);
15638
15901
 
15639
15902
  equal(trim(view.$().text()), 'Name: SFMoMA Price: $20', 'should print baz twice');
15640
15903
  });
15641
15904
 
15642
- QUnit.test('bindings should respect keywords', function() {
15905
+ QUnit.test('bindings should respect keywords [DEPRECATED]', function() {
15643
15906
  view = EmberView['default'].create({
15644
15907
  museumOpen: true,
15645
15908
 
@@ -15658,6 +15921,32 @@ enifed('ember-htmlbars/tests/helpers/view_test', ['ember-views/views/view', 'con
15658
15921
  template: compile['default']('{{#if view.museumOpen}}{{view view.museumView nameBinding="controller.museumDetails.name" dollarsBinding="controller.museumDetails.price"}}{{/if}}')
15659
15922
  });
15660
15923
 
15924
+ expectDeprecation(function() {
15925
+ utils.runAppend(view);
15926
+ }, /You're attempting to render a view by passing .+Binding to a view helper, but this syntax is deprecated/);
15927
+
15928
+ equal(trim(view.$().text()), 'Name: SFMoMA Price: $20', 'should print baz twice');
15929
+ });
15930
+
15931
+ QUnit.test('should respect keywords', function() {
15932
+ view = EmberView['default'].create({
15933
+ museumOpen: true,
15934
+
15935
+ controller: {
15936
+ museumOpen: true,
15937
+ museumDetails: EmberObject['default'].create({
15938
+ name: 'SFMoMA',
15939
+ price: 20
15940
+ })
15941
+ },
15942
+
15943
+ museumView: EmberView['default'].extend({
15944
+ template: compile['default']('Name: {{view.name}} Price: ${{view.dollars}}')
15945
+ }),
15946
+
15947
+ template: compile['default']('{{#if view.museumOpen}}{{view view.museumView name=controller.museumDetails.name dollars=controller.museumDetails.price}}{{/if}}')
15948
+ });
15949
+
15661
15950
  utils.runAppend(view);
15662
15951
 
15663
15952
  equal(trim(view.$().text()), 'Name: SFMoMA Price: $20', 'should print baz twice');
@@ -15762,6 +16051,44 @@ enifed('ember-htmlbars/tests/helpers/view_test', ['ember-views/views/view', 'con
15762
16051
  }, /must be a subclass or an instance of Ember.View/);
15763
16052
  });
15764
16053
 
16054
+ QUnit.test('Specifying `id` to {{view}} is set on the view.', function() {
16055
+ registry.register('view:derp', EmberView['default'].extend({
16056
+ template: compile['default']('<div id="view-id">{{view.id}}</div><div id="view-elementId">{{view.elementId}}</div>')
16057
+ }));
16058
+
16059
+ view = EmberView['default'].create({
16060
+ container: container,
16061
+ foo: 'bar',
16062
+ template: compile['default']('{{view "derp" id=view.foo}}')
16063
+ });
16064
+
16065
+ utils.runAppend(view);
16066
+
16067
+ equal(view.$('#bar').length, 1, 'it uses the provided id for the views elementId');
16068
+ equal(view.$('#view-id').text(), 'bar', 'the views id property is set');
16069
+ equal(view.$('#view-elementId').text(), 'bar', 'the views elementId property is set');
16070
+ });
16071
+
16072
+ QUnit.test('Specifying `id` to {{view}} does not allow bound id changes.', function() {
16073
+ registry.register('view:derp', EmberView['default'].extend({
16074
+ template: compile['default']('<div id="view-id">{{view.id}}</div><div id="view-elementId">{{view.elementId}}</div>')
16075
+ }));
16076
+
16077
+ view = EmberView['default'].create({
16078
+ container: container,
16079
+ foo: 'bar',
16080
+ template: compile['default']('{{view "derp" id=view.foo}}')
16081
+ });
16082
+
16083
+ utils.runAppend(view);
16084
+
16085
+ equal(view.$('#view-id').text(), 'bar', 'the views id property is set');
16086
+
16087
+ run['default'](view, property_set.set, view, 'foo', 'baz');
16088
+
16089
+ equal(view.$('#view-id').text(), 'bar', 'the views id property is not changed');
16090
+ });
16091
+
15765
16092
  });
15766
16093
  enifed('ember-htmlbars/tests/helpers/view_test.jscs-test', function () {
15767
16094
 
@@ -16492,7 +16819,7 @@ enifed('ember-htmlbars/tests/helpers/yield_test', ['ember-metal/run_loop', 'embe
16492
16819
 
16493
16820
  view = EmberView['default'].create({
16494
16821
  controller: { boundText: "outer", component: component },
16495
- template: compile['default']('{{#with boundText as item}}{{#view component contentBinding="item"}}{{item}}{{/view}}{{/with}}')
16822
+ template: compile['default']('{{#with boundText as item}}{{#view component content=item}}{{item}}{{/view}}{{/with}}')
16496
16823
  });
16497
16824
 
16498
16825
  utils.runAppend(view);
@@ -17622,7 +17949,7 @@ enifed('ember-htmlbars/tests/integration/select_in_template_test', ['ember-runti
17622
17949
  }
17623
17950
  });
17624
17951
 
17625
- QUnit.test("works from a template with bindings", function() {
17952
+ QUnit.test("works from a template with bindings [DEPRECATED]", function() {
17626
17953
  var Person = EmberObject['default'].extend({
17627
17954
  id: null,
17628
17955
  firstName: null,
@@ -17663,6 +17990,70 @@ enifed('ember-htmlbars/tests/integration/select_in_template_test', ['ember-runti
17663
17990
  )
17664
17991
  });
17665
17992
 
17993
+ expectDeprecation(function() {
17994
+ utils.runAppend(view);
17995
+ }, /You're attempting to render a view by passing .+Binding to a view helper, but this syntax is deprecated/);
17996
+
17997
+ var select = view.get('select');
17998
+ ok(select.$().length, "Select was rendered");
17999
+ equal(select.$('option').length, 5, "Options were rendered");
18000
+ equal(select.$().text(), "Pick a person:Yehuda KatzTom DalePeter WagenetErik Bryn\n", "Option values were rendered");
18001
+ equal(select.get('selection'), null, "Nothing has been selected");
18002
+
18003
+ run['default'](function() {
18004
+ application.selectedPersonController.set('person', erik);
18005
+ });
18006
+
18007
+ equal(select.get('selection'), erik, "Selection was updated through binding");
18008
+ run['default'](function() {
18009
+ application.peopleController.pushObject(Person.create({ id: 5, firstName: "James", lastName: "Rosen" }));
18010
+ });
18011
+
18012
+ equal(select.$('option').length, 6, "New option was added");
18013
+ equal(select.get('selection'), erik, "Selection was maintained after new option was added");
18014
+ });
18015
+
18016
+ QUnit.test("works from a template", function() {
18017
+ var Person = EmberObject['default'].extend({
18018
+ id: null,
18019
+ firstName: null,
18020
+ lastName: null,
18021
+
18022
+ fullName: computed.computed(function() {
18023
+ return this.get('firstName') + " " + this.get('lastName');
18024
+ }).property('firstName', 'lastName')
18025
+ });
18026
+
18027
+ var erik = Person.create({ id: 4, firstName: 'Erik', lastName: 'Bryn' });
18028
+
18029
+ var application = Namespace['default'].create();
18030
+
18031
+ application.peopleController = ArrayController['default'].create({
18032
+ content: Ember.A([
18033
+ Person.create({ id: 1, firstName: 'Yehuda', lastName: 'Katz' }),
18034
+ Person.create({ id: 2, firstName: 'Tom', lastName: 'Dale' }),
18035
+ Person.create({ id: 3, firstName: 'Peter', lastName: 'Wagenet' }),
18036
+ erik
18037
+ ])
18038
+ });
18039
+
18040
+ application.selectedPersonController = EmberObject['default'].create({
18041
+ person: null
18042
+ });
18043
+
18044
+ view = EmberView['default'].create({
18045
+ app: application,
18046
+ selectView: SelectView['default'],
18047
+ template: compile['default'](
18048
+ '{{view view.selectView viewName="select"' +
18049
+ ' content=view.app.peopleController' +
18050
+ ' optionLabelPath="content.fullName"' +
18051
+ ' optionValuePath="content.id"' +
18052
+ ' prompt="Pick a person:"' +
18053
+ ' selection=view.app.selectedPersonController.person}}'
18054
+ )
18055
+ });
18056
+
17666
18057
  utils.runAppend(view);
17667
18058
 
17668
18059
  var select = view.get('select');
@@ -17693,8 +18084,8 @@ enifed('ember-htmlbars/tests/integration/select_in_template_test', ['ember-runti
17693
18084
  selectView: SelectView['default'],
17694
18085
  template: compile['default'](
17695
18086
  '{{view view.selectView viewName="select"' +
17696
- ' contentBinding="view.user.options"' +
17697
- ' selectionBinding="view.user.selectedOption"}}'
18087
+ ' content=view.user.options' +
18088
+ ' selection=view.user.selectedOption}}'
17698
18089
  )
17699
18090
  });
17700
18091
 
@@ -17728,8 +18119,8 @@ enifed('ember-htmlbars/tests/integration/select_in_template_test', ['ember-runti
17728
18119
  selectView: SelectView['default'],
17729
18120
  template: compile['default'](
17730
18121
  '{{view view.selectView viewName="select"' +
17731
- ' contentBinding="view.proxy"' +
17732
- ' selectionBinding="view.proxy.selectedOption"}}'
18122
+ ' content=view.proxy' +
18123
+ ' selection=view.proxy.selectedOption}}'
17733
18124
  )
17734
18125
  });
17735
18126
 
@@ -17774,7 +18165,9 @@ enifed('ember-htmlbars/tests/integration/select_in_template_test', ['ember-runti
17774
18165
  equal(selectEl.selectedIndex, 1, "The DOM is updated to reflect the new selection");
17775
18166
  }
17776
18167
 
17777
- QUnit.test("select element should correctly initialize and update selectedIndex and bound properties when using valueBinding (old xBinding='' syntax)", function() {
18168
+ QUnit.test("select element should correctly initialize and update selectedIndex and bound properties when using valueBinding [DEPRECATED]", function() {
18169
+ expectDeprecation(/You're attempting to render a view by passing .+Binding to a view helper, but this syntax is deprecated./);
18170
+
17778
18171
  testValueBinding(
17779
18172
  '{{view view.selectView viewName="select"' +
17780
18173
  ' contentBinding="view.collection"' +
@@ -17785,7 +18178,7 @@ enifed('ember-htmlbars/tests/integration/select_in_template_test', ['ember-runti
17785
18178
  );
17786
18179
  });
17787
18180
 
17788
- QUnit.test("select element should correctly initialize and update selectedIndex and bound properties when using valueBinding (new quoteless binding shorthand)", function() {
18181
+ QUnit.test("select element should correctly initialize and update selectedIndex and bound properties when using a bound value", function() {
17789
18182
  testValueBinding(
17790
18183
  '{{view view.selectView viewName="select"' +
17791
18184
  ' content=view.collection' +
@@ -17824,7 +18217,9 @@ enifed('ember-htmlbars/tests/integration/select_in_template_test', ['ember-runti
17824
18217
  equal(select.$('option:eq(1)').prop('selected'), true, "Selected property is set to proper option");
17825
18218
  }
17826
18219
 
17827
- QUnit.test("select element should correctly initialize and update selectedIndex and bound properties when using selectionBinding (old xBinding='' syntax)", function() {
18220
+ QUnit.test("select element should correctly initialize and update selectedIndex and bound properties when using selectionBinding [DEPRECATED]", function() {
18221
+ expectDeprecation(/You're attempting to render a view by passing .+Binding to a view helper, but this syntax is deprecated./);
18222
+
17828
18223
  testSelectionBinding(
17829
18224
  '{{view view.selectView viewName="select"' +
17830
18225
  ' contentBinding="view.collection"' +
@@ -17835,7 +18230,7 @@ enifed('ember-htmlbars/tests/integration/select_in_template_test', ['ember-runti
17835
18230
  );
17836
18231
  });
17837
18232
 
17838
- QUnit.test("select element should correctly initialize and update selectedIndex and bound properties when using selectionBinding (new quoteless binding shorthand)", function() {
18233
+ QUnit.test("select element should correctly initialize and update selectedIndex and bound properties when using a bound selection", function() {
17839
18234
  testSelectionBinding(
17840
18235
  '{{view view.selectView viewName="select"' +
17841
18236
  ' content=view.collection' +
@@ -18989,7 +19384,7 @@ enifed('ember-htmlbars/tests/system/render_view_test', ['ember-runtime/tests/uti
18989
19384
  view = EmberView['default'].create({
18990
19385
  template: {
18991
19386
  isHTMLBars: true,
18992
- revision: 'Ember@1.11.0-beta.5.1501308c',
19387
+ revision: 'Ember@1.11.0',
18993
19388
  render: function(view, env, contextualElement, blockArguments) {
18994
19389
  for (var i = 0, l = keyNames.length; i < l; i++) {
18995
19390
  var keyName = keyNames[i];
@@ -32826,6 +33221,26 @@ enifed('ember-routing-htmlbars/tests/helpers/render_test', ['ember-metal/core',
32826
33221
  }, "The second argument of {{render}} must be a path, e.g. {{render \"post\" post}}.");
32827
33222
  });
32828
33223
 
33224
+ QUnit.test("{{render}} helper should let view provide its own template", function() {
33225
+ var template = "{{render 'fish'}}";
33226
+ var controller = controllers__controller["default"].extend({ container: container });
33227
+ view = EmberView['default'].create({
33228
+ controller: controller.create(),
33229
+ template: compile['default'](template)
33230
+ });
33231
+
33232
+ container._registry.register('template:fish', compile['default']('Hello fish!'));
33233
+ container._registry.register('template:other', compile['default']('Hello other!'));
33234
+
33235
+ container._registry.register('view:fish', EmberView['default'].extend({
33236
+ templateName: 'other'
33237
+ }));
33238
+
33239
+ tests__utils.runAppend(view);
33240
+
33241
+ equal(view.$().text(), 'Hello other!');
33242
+ });
33243
+
32829
33244
  });
32830
33245
  enifed('ember-routing-htmlbars/tests/helpers/render_test.jscs-test', function () {
32831
33246
 
@@ -33759,14 +34174,14 @@ enifed('ember-routing/tests/location/hash_location_test', ['ember-metal/core', '
33759
34174
  var pathname = (tmp.pathname.match(/^\//)) ? tmp.pathname : '/' + tmp.pathname;
33760
34175
 
33761
34176
  return {
33762
- hash: tmp.hash,
33763
- host: tmp.host || 'localhost',
33764
- hostname: tmp.hostname || 'localhost',
33765
- href: tmp.href,
33766
- pathname: pathname,
33767
- port: tmp.port || '',
33768
- protocol: protocol,
33769
- search: tmp.search
34177
+ hash: tmp.hash,
34178
+ host: tmp.host || 'localhost',
34179
+ hostname: tmp.hostname || 'localhost',
34180
+ href: tmp.href,
34181
+ pathname: pathname,
34182
+ port: tmp.port || '',
34183
+ protocol: protocol,
34184
+ search: tmp.search
33770
34185
  };
33771
34186
  }
33772
34187
 
@@ -33965,14 +34380,14 @@ enifed('ember-routing/tests/location/history_location_test', ['ember-metal/prope
33965
34380
  var pathname = (tmp.pathname.match(/^\//)) ? tmp.pathname : '/' + tmp.pathname;
33966
34381
 
33967
34382
  return {
33968
- hash: tmp.hash,
33969
- host: tmp.host || 'localhost',
33970
- hostname: tmp.hostname || 'localhost',
33971
- href: tmp.href,
33972
- pathname: pathname,
33973
- port: tmp.port || '',
33974
- protocol: protocol,
33975
- search: tmp.search
34383
+ hash: tmp.hash,
34384
+ host: tmp.host || 'localhost',
34385
+ hostname: tmp.hostname || 'localhost',
34386
+ href: tmp.href,
34387
+ pathname: pathname,
34388
+ port: tmp.port || '',
34389
+ protocol: protocol,
34390
+ search: tmp.search
33976
34391
  };
33977
34392
  }
33978
34393
 
@@ -34415,8 +34830,8 @@ enifed('ember-routing/tests/system/dsl_test', ['ember-routing/system/router', 'e
34415
34830
  ok(router.router.recognizer.names['bleep.bloop.blork'], 'parent name was used as base of nested routes');
34416
34831
  });
34417
34832
 
34418
-
34419
34833
  // jscs:disable validateIndentation
34834
+
34420
34835
 
34421
34836
  QUnit.test("should add loading and error routes if _isRouterMapResult is true", function() {
34422
34837
  Router.map(function() {
@@ -34444,8 +34859,8 @@ enifed('ember-routing/tests/system/dsl_test', ['ember-routing/system/router', 'e
34444
34859
  ok(!router.router.recognizer.names['blork_error'], 'error route was not added');
34445
34860
  });
34446
34861
 
34447
- // jscs:enable validateIndentation
34448
34862
 
34863
+ // jscs:enable validateIndentation
34449
34864
 
34450
34865
  });
34451
34866
  enifed('ember-routing/tests/system/dsl_test.jscs-test', function () {
@@ -36571,18 +36986,18 @@ enifed('ember-runtime/tests/computed/reduce_computed_macros_test', ['ember-metal
36571
36986
  QUnit.test("it throws an error if given fewer or more than two dependent properties", function() {
36572
36987
  throws(function () {
36573
36988
  EmberObject['default'].createWithMixins({
36574
- array: Ember['default'].A([1,2,3,4,5,6,7]),
36575
- array2: Ember['default'].A([3,4,5]),
36576
- diff: reduce_computed_macros.setDiff('array')
36989
+ array: Ember['default'].A([1,2,3,4,5,6,7]),
36990
+ array2: Ember['default'].A([3,4,5]),
36991
+ diff: reduce_computed_macros.setDiff('array')
36577
36992
  });
36578
36993
  }, /requires exactly two dependent arrays/, "setDiff requires two dependent arrays");
36579
36994
 
36580
36995
  throws(function () {
36581
36996
  EmberObject['default'].createWithMixins({
36582
- array: Ember['default'].A([1,2,3,4,5,6,7]),
36583
- array2: Ember['default'].A([3,4,5]),
36584
- array3: Ember['default'].A([7]),
36585
- diff: reduce_computed_macros.setDiff('array', 'array2', 'array3')
36997
+ array: Ember['default'].A([1,2,3,4,5,6,7]),
36998
+ array2: Ember['default'].A([3,4,5]),
36999
+ array3: Ember['default'].A([7]),
37000
+ diff: reduce_computed_macros.setDiff('array', 'array2', 'array3')
36586
37001
  });
36587
37002
  }, /requires exactly two dependent arrays/, "setDiff requires two dependent arrays");
36588
37003
  });
@@ -37609,7 +38024,7 @@ enifed('ember-runtime/tests/computed/reduce_computed_test', ['ember-metal/core',
37609
38024
 
37610
38025
  QUnit.test("after the first retrieval, array computed properties observe additions to dependent arrays", function() {
37611
38026
  var numbers = property_get.get(obj, 'numbers');
37612
- // set up observers
38027
+ // set up observers
37613
38028
  var evenNumbers = property_get.get(obj, 'evenNumbers');
37614
38029
 
37615
38030
  run['default'](function() {
@@ -37621,7 +38036,7 @@ enifed('ember-runtime/tests/computed/reduce_computed_test', ['ember-metal/core',
37621
38036
 
37622
38037
  QUnit.test("after the first retrieval, array computed properties observe removals from dependent arrays", function() {
37623
38038
  var numbers = property_get.get(obj, 'numbers');
37624
- // set up observers
38039
+ // set up observers
37625
38040
  var evenNumbers = property_get.get(obj, 'evenNumbers');
37626
38041
 
37627
38042
  run['default'](function() {
@@ -38540,7 +38955,7 @@ enifed('ember-runtime/tests/computed/reduce_computed_test.jshint', function () {
38540
38955
  });
38541
38956
 
38542
38957
  });
38543
- enifed('ember-runtime/tests/controllers/array_controller_test', ['ember-metal/core', 'ember-runtime/tests/suites/mutable_array', 'ember-runtime/controllers/array_controller'], function (Ember, MutableArrayTests, ArrayController) {
38958
+ enifed('ember-runtime/tests/controllers/array_controller_test', ['ember-metal/core', 'ember-runtime/tests/suites/mutable_array', 'ember-runtime/controllers/array_controller', 'ember-metal/property_set', 'ember-metal/property_get'], function (Ember, MutableArrayTests, ArrayController, property_set, property_get) {
38544
38959
 
38545
38960
  'use strict';
38546
38961
 
@@ -38565,6 +38980,8 @@ enifed('ember-runtime/tests/controllers/array_controller_test', ['ember-metal/co
38565
38980
  }
38566
38981
  }).run();
38567
38982
 
38983
+ QUnit.module("ember-runtime: array_controller");
38984
+
38568
38985
  QUnit.test("defaults its `model` to an empty array", function () {
38569
38986
  var Controller = ArrayController['default'].extend();
38570
38987
  deepEqual(Controller.create().get("model"), [], "`ArrayController` defaults its model to an empty array");
@@ -38572,13 +38989,34 @@ enifed('ember-runtime/tests/controllers/array_controller_test', ['ember-metal/co
38572
38989
  equal(Controller.create().get('lastObject'), undefined, 'can fetch lastObject');
38573
38990
  });
38574
38991
 
38575
-
38576
38992
  QUnit.test("Ember.ArrayController length property works even if model was not set initially", function() {
38577
38993
  var controller = ArrayController['default'].create();
38578
38994
  controller.pushObject('item');
38579
38995
  equal(controller.get('length'), 1);
38580
38996
  });
38581
38997
 
38998
+ QUnit.test('works properly when model is set to an Ember.A()', function() {
38999
+ var controller = ArrayController['default'].create();
39000
+
39001
+ property_set.set(controller, 'model', Ember['default'].A(['red', 'green']));
39002
+
39003
+ deepEqual(property_get.get(controller, 'model'), ['red', 'green'], "can set model as an Ember.Array");
39004
+ });
39005
+
39006
+ QUnit.test('works properly when model is set to a plain array', function() {
39007
+ var controller = ArrayController['default'].create();
39008
+
39009
+ if (Ember['default'].EXTEND_PROTOTYPES) {
39010
+ property_set.set(controller, 'model', ['red', 'green']);
39011
+
39012
+ deepEqual(property_get.get(controller, 'model'), ['red', 'green'], "can set model as a plain array");
39013
+ } else {
39014
+ expectAssertion(function() {
39015
+ property_set.set(controller, 'model', ['red', 'green']);
39016
+ }, /ArrayController expects `model` to implement the Ember.Array mixin. This can often be fixed by wrapping your model with `Ember\.A\(\)`./);
39017
+ }
39018
+ });
39019
+
38582
39020
  });
38583
39021
  enifed('ember-runtime/tests/controllers/array_controller_test.jscs-test', function () {
38584
39022
 
@@ -38600,7 +39038,7 @@ enifed('ember-runtime/tests/controllers/array_controller_test.jshint', function
38600
39038
  });
38601
39039
 
38602
39040
  });
38603
- enifed('ember-runtime/tests/controllers/controller_test', ['ember-runtime/controllers/controller', 'ember-runtime/system/service', 'ember-runtime/controllers/object_controller', 'ember-metal/mixin', 'ember-runtime/system/object', 'ember-runtime/system/container', 'ember-runtime/inject', 'ember-metal/property_get'], function (Controller, Service, object_controller, Mixin, Object, system__container, inject, property_get) {
39041
+ enifed('ember-runtime/tests/controllers/controller_test', ['ember-runtime/controllers/controller', 'ember-runtime/system/service', 'ember-runtime/controllers/array_controller', 'ember-runtime/controllers/object_controller', 'ember-metal/mixin', 'ember-runtime/system/object', 'ember-runtime/system/container', 'ember-runtime/inject', 'ember-metal/property_get'], function (Controller, Service, ArrayController, object_controller, Mixin, Object, system__container, inject, property_get) {
38604
39042
 
38605
39043
  'use strict';
38606
39044
 
@@ -38816,6 +39254,42 @@ enifed('ember-runtime/tests/controllers/controller_test', ['ember-runtime/contro
38816
39254
  equal(postsController, postController.get('postsController'), "controller.posts is injected");
38817
39255
  });
38818
39256
 
39257
+ QUnit.test("controllers can be injected into ObjectControllers", function() {
39258
+ var registry = new system__container.Registry();
39259
+ var container = registry.container();
39260
+
39261
+ registry.register('controller:post', Controller['default'].extend({
39262
+ postsController: inject['default'].controller('posts')
39263
+ }));
39264
+
39265
+ registry.register('controller:posts', object_controller["default"].extend());
39266
+
39267
+ var postController = container.lookup('controller:post');
39268
+ var postsController;
39269
+ expectDeprecation(function() {
39270
+ postsController = container.lookup('controller:posts');
39271
+ }, object_controller.objectControllerDeprecation);
39272
+
39273
+ equal(postsController, postController.get('postsController'), "controller.posts is injected");
39274
+ });
39275
+
39276
+ QUnit.test("controllers can be injected into ArrayControllers", function() {
39277
+ var registry = new system__container.Registry();
39278
+ var container = registry.container();
39279
+
39280
+ registry.register('controller:post', Controller['default'].extend({
39281
+ postsController: inject['default'].controller('posts')
39282
+ }));
39283
+
39284
+ registry.register('controller:posts', ArrayController['default'].extend());
39285
+
39286
+ var postController = container.lookup('controller:post');
39287
+ var postsController = container.lookup('controller:posts');
39288
+
39289
+ equal(postsController, postController.get('postsController'), "controller.posts is injected");
39290
+ });
39291
+
39292
+
38819
39293
  QUnit.test("services can be injected into controllers", function() {
38820
39294
  var registry = new system__container.Registry();
38821
39295
  var container = registry.container();
@@ -41270,7 +41744,7 @@ enifed('ember-runtime/tests/legacy_1x/mixins/observable/propertyChanges_test', [
41270
41744
  equal(ObjectA.prop, "propValue");
41271
41745
  ObjectA.endPropertyChanges();
41272
41746
 
41273
- //end inner nest
41747
+ //end inner nest
41274
41748
  ObjectA.set('prop', 'changePropValue');
41275
41749
  equal(ObjectA.newFoo, "newFooValue");
41276
41750
 
@@ -41607,9 +42081,9 @@ enifed('ember-runtime/tests/legacy_1x/system/binding_test', ['ember-metal/core',
41607
42081
  });
41608
42082
 
41609
42083
  TestNamespace.toObject = EmberObject['default'].createWithMixins({
41610
- valueBinding: ember_metal__binding.Binding.from('TestNamespace.fromObject.value'),
41611
- localValue: "originalLocal",
41612
- relativeBinding: ember_metal__binding.Binding.from('localValue')
42084
+ valueBinding: ember_metal__binding.Binding.from('TestNamespace.fromObject.value'),
42085
+ localValue: "originalLocal",
42086
+ relativeBinding: ember_metal__binding.Binding.from('localValue')
41613
42087
  });
41614
42088
  });
41615
42089
  },
@@ -41915,7 +42389,7 @@ enifed('ember-runtime/tests/legacy_1x/system/object/bindings_test', ['ember-meta
41915
42389
  teardown: function() {
41916
42390
  Ember['default'].lookup = originalLookup;
41917
42391
  TestObject = fromObject = extraObject = null;
41918
- // delete TestNamespace;
42392
+ // delete TestNamespace;
41919
42393
  }
41920
42394
 
41921
42395
  };
@@ -42492,8 +42966,8 @@ enifed('ember-runtime/tests/legacy_1x/system/set_test', ['ember-metal/core', 'em
42492
42966
  });
42493
42967
 
42494
42968
  QUnit.module("Set.pop + Set.copy", {
42495
- // generate a set with every type of object, but none of the specific
42496
- // ones we add in the tests below...
42969
+ // generate a set with every type of object, but none of the specific
42970
+ // ones we add in the tests below...
42497
42971
  setup: function() {
42498
42972
  ignoreDeprecation(function() {
42499
42973
  set = new Set['default'](Ember['default'].A([
@@ -45125,8 +45599,7 @@ enifed('ember-runtime/tests/suites/array', ['exports', 'ember-runtime/tests/suit
45125
45599
  'use strict';
45126
45600
 
45127
45601
  var ObserverClass = enumerable.ObserverClass.extend({
45128
-
45129
- observeArray: function(obj) {
45602
+ observeArray: function(obj) {
45130
45603
  obj.addArrayObserver(this);
45131
45604
  return this;
45132
45605
  },
@@ -54061,7 +54534,7 @@ enifed('ember-template-compiler/tests/system/compile_test', ['ember-template-com
54061
54534
 
54062
54535
  var actual = compile['default'](templateString);
54063
54536
 
54064
- equal(actual.revision, 'Ember@1.11.0-beta.5.1501308c', 'revision is included in generated template');
54537
+ equal(actual.revision, 'Ember@1.11.0', 'revision is included in generated template');
54065
54538
  });
54066
54539
 
54067
54540
  QUnit.test('the template revision is different than the HTMLBars default revision', function() {
@@ -54297,7 +54770,7 @@ enifed('ember-testing/test.jshint', function () {
54297
54770
  });
54298
54771
 
54299
54772
  });
54300
- enifed('ember-testing/tests/acceptance_test', ['ember-metal/run_loop', 'ember-views/system/jquery', 'ember-testing/test', 'ember-testing/adapters/qunit', 'ember-views/views/view', 'ember-testing/initializers', 'ember-application/system/application', 'ember-routing/system/route', 'ember-template-compiler/system/compile', 'ember-routing'], function (run, jQuery, Test, QUnitAdapter, EmberView, __dep5__, EmberApplication, EmberRoute, compile) {
54773
+ enifed('ember-testing/tests/acceptance_test', ['ember-metal/run_loop', 'ember-views/system/jquery', 'ember-testing/test', 'ember-testing/adapters/qunit', 'ember-views/views/view', 'ember-testing/initializers', 'ember-application/system/application', 'ember-routing/system/route', 'ember-template-compiler/system/compile', 'ember-runtime/ext/rsvp', 'ember-routing'], function (run, jQuery, Test, QUnitAdapter, EmberView, __dep5__, EmberApplication, EmberRoute, compile, RSVP) {
54301
54774
 
54302
54775
  'use strict';
54303
54776
 
@@ -54360,7 +54833,7 @@ enifed('ember-testing/tests/acceptance_test', ['ember-metal/run_loop', 'ember-vi
54360
54833
  });
54361
54834
 
54362
54835
  Test['default'].registerAsyncHelper('slowHelper', function() {
54363
- return Test['default'].promise(function(resolve) {
54836
+ return new RSVP['default'].Promise(function(resolve) {
54364
54837
  setTimeout(resolve, 10);
54365
54838
  });
54366
54839
  });
@@ -56660,26 +57133,6 @@ enifed('ember-views/system/renderer.jshint', function () {
56660
57133
  ok(true, 'ember-views/system/renderer.js should pass jshint.');
56661
57134
  });
56662
57135
 
56663
- });
56664
- enifed('ember-views/system/sanitize_attribute_value.jscs-test', function () {
56665
-
56666
- 'use strict';
56667
-
56668
- module('JSCS - ember-views/system');
56669
- test('ember-views/system/sanitize_attribute_value.js should pass jscs', function() {
56670
- ok(true, 'ember-views/system/sanitize_attribute_value.js should pass jscs.');
56671
- });
56672
-
56673
- });
56674
- enifed('ember-views/system/sanitize_attribute_value.jshint', function () {
56675
-
56676
- 'use strict';
56677
-
56678
- module('JSHint - ember-views/system');
56679
- test('ember-views/system/sanitize_attribute_value.js should pass jshint', function() {
56680
- ok(true, 'ember-views/system/sanitize_attribute_value.js should pass jshint.');
56681
- });
56682
-
56683
57136
  });
56684
57137
  enifed('ember-views/system/utils.jscs-test', function () {
56685
57138
 
@@ -57810,84 +58263,6 @@ enifed('ember-views/tests/system/render_buffer_test.jshint', function () {
57810
58263
  ok(true, 'ember-views/tests/system/render_buffer_test.js should pass jshint.');
57811
58264
  });
57812
58265
 
57813
- });
57814
- enifed('ember-views/tests/system/sanitize_attribute_value_test', ['ember-views/system/sanitize_attribute_value', 'ember-htmlbars/utils/string', 'dom-helper'], function (sanitizeAttributeValue, string, DOMHelper) {
57815
-
57816
- 'use strict';
57817
-
57818
- QUnit.module('ember-views: sanitizeAttributeValue(null, "href")');
57819
-
57820
- var goodProtocols = ['https', 'http', 'ftp', 'tel', 'file'];
57821
- var dom = new DOMHelper['default']();
57822
-
57823
- for (var i = 0, l = goodProtocols.length; i < l; i++) {
57824
- buildProtocolTest(goodProtocols[i]);
57825
- }
57826
-
57827
- function buildProtocolTest(protocol) {
57828
- QUnit.test('allows ' + protocol + ' protocol when element is not provided', function() {
57829
- expect(1);
57830
-
57831
- var expected = protocol + '://foo.com';
57832
- var actual = sanitizeAttributeValue['default'](dom, null, 'href', expected);
57833
-
57834
- equal(actual, expected, 'protocol not escaped');
57835
- });
57836
- }
57837
-
57838
- QUnit.test('blocks javascript: protocol', function() {
57839
- /* jshint scripturl:true */
57840
-
57841
- expect(1);
57842
-
57843
- var expected = 'javascript:alert("foo")';
57844
- var actual = sanitizeAttributeValue['default'](dom, null, 'href', expected);
57845
-
57846
- equal(actual, 'unsafe:' + expected, 'protocol escaped');
57847
- });
57848
-
57849
- QUnit.test('blocks blacklisted protocols', function() {
57850
- /* jshint scripturl:true */
57851
-
57852
- expect(1);
57853
-
57854
- var expected = 'javascript:alert("foo")';
57855
- var actual = sanitizeAttributeValue['default'](dom, null, 'href', expected);
57856
-
57857
- equal(actual, 'unsafe:' + expected, 'protocol escaped');
57858
- });
57859
-
57860
- QUnit.test('does not block SafeStrings', function() {
57861
- /* jshint scripturl:true */
57862
-
57863
- expect(1);
57864
-
57865
- var expected = 'javascript:alert("foo")';
57866
- var actual = sanitizeAttributeValue['default'](dom, null, 'href', new string.SafeString(expected));
57867
-
57868
- equal(actual, expected, 'protocol unescaped');
57869
- });
57870
-
57871
- });
57872
- enifed('ember-views/tests/system/sanitize_attribute_value_test.jscs-test', function () {
57873
-
57874
- 'use strict';
57875
-
57876
- module('JSCS - ember-views/tests/system');
57877
- test('ember-views/tests/system/sanitize_attribute_value_test.js should pass jscs', function() {
57878
- ok(true, 'ember-views/tests/system/sanitize_attribute_value_test.js should pass jscs.');
57879
- });
57880
-
57881
- });
57882
- enifed('ember-views/tests/system/sanitize_attribute_value_test.jshint', function () {
57883
-
57884
- 'use strict';
57885
-
57886
- module('JSHint - ember-views/tests/system');
57887
- test('ember-views/tests/system/sanitize_attribute_value_test.js should pass jshint', function() {
57888
- ok(true, 'ember-views/tests/system/sanitize_attribute_value_test.js should pass jshint.');
57889
- });
57890
-
57891
58266
  });
57892
58267
  enifed('ember-views/tests/system/view_utils_test', ['ember-metal/run_loop', 'ember-views/views/view'], function (run, View) {
57893
58268
 
@@ -58742,10 +59117,10 @@ enifed('ember-views/tests/views/collection_test', ['ember-metal/core', 'ember-me
58742
59117
  Ember['default'].lookup = {
58743
59118
  App: {
58744
59119
  EmptyView: View['default'].extend({
58745
- tagName: 'kbd',
58746
- render: function(buf) {
58747
- buf.push("THIS IS AN EMPTY VIEW");
58748
- }
59120
+ tagName: 'kbd',
59121
+ render: function(buf) {
59122
+ buf.push("THIS IS AN EMPTY VIEW");
59123
+ }
58749
59124
  })
58750
59125
  }
58751
59126
  };
@@ -64081,7 +64456,7 @@ enifed('ember-views/tests/views/view/inject_test.jshint', function () {
64081
64456
  });
64082
64457
 
64083
64458
  });
64084
- enifed('ember-views/tests/views/view/is_visible_test', ['ember-metal/property_get', 'ember-metal/property_set', 'ember-metal/run_loop', 'ember-views/views/view', 'ember-views/views/container_view'], function (property_get, property_set, run, EmberView, ContainerView) {
64459
+ enifed('ember-views/tests/views/view/is_visible_test', ['ember-metal/property_get', 'ember-metal/property_set', 'ember-metal/run_loop', 'ember-views/views/view', 'ember-views/views/container_view', 'ember-template-compiler/system/compile'], function (property_get, property_set, run, EmberView, ContainerView, compile) {
64085
64460
 
64086
64461
  'use strict';
64087
64462
 
@@ -64207,8 +64582,28 @@ enifed('ember-views/tests/views/view/is_visible_test', ['ember-metal/property_ge
64207
64582
  });
64208
64583
 
64209
64584
  QUnit.test("view should be notified after isVisible is set to false and the element has been hidden", function() {
64210
- view = View.create({ isVisible: true });
64211
- var childView = view.get('childViews').objectAt(0);
64585
+ run['default'](function() {
64586
+ view = View.create({ isVisible: false });
64587
+ view.append();
64588
+ });
64589
+
64590
+ ok(view.$().is(':hidden'), "precond - view is hidden when appended");
64591
+
64592
+ run['default'](function() {
64593
+ view.set('isVisible', true);
64594
+ });
64595
+
64596
+ ok(view.$().is(':visible'), "precond - view is now visible");
64597
+ equal(parentBecameVisible, 1);
64598
+ equal(childBecameVisible, 1);
64599
+ equal(grandchildBecameVisible, 1);
64600
+ });
64601
+
64602
+ QUnit.test("view should change visibility with a virtual childView", function() {
64603
+ view = View.create({
64604
+ isVisible: true,
64605
+ template: compile['default']('<div {{bind-attr bing="tweep"}}></div>')
64606
+ });
64212
64607
 
64213
64608
  run['default'](function() {
64214
64609
  view.append();
@@ -64217,13 +64612,10 @@ enifed('ember-views/tests/views/view/is_visible_test', ['ember-metal/property_ge
64217
64612
  ok(view.$().is(':visible'), "precond - view is visible when appended");
64218
64613
 
64219
64614
  run['default'](function() {
64220
- childView.set('isVisible', false);
64615
+ view.set('isVisible', false);
64221
64616
  });
64222
64617
 
64223
- ok(childView.$().is(':hidden'), "precond - view is now hidden");
64224
-
64225
- equal(childBecameHidden, 1);
64226
- equal(grandchildBecameHidden, 1);
64618
+ ok(view.$().is(':hidden'), "precond - view is now hidden");
64227
64619
  });
64228
64620
 
64229
64621
  QUnit.test("view should be notified after isVisible is set to true and the element has been shown", function() {
@@ -67374,7 +67766,7 @@ enifed('ember/tests/helpers/helper_registration_test', ['ember', 'ember-htmlbars
67374
67766
  ok(!helpers['x-borf'], "Container-registered helper doesn't wind up on global helpers hash");
67375
67767
  });
67376
67768
 
67377
- // need to make `makeBoundHelper` for HTMLBars
67769
+ // need to make `makeBoundHelper` for HTMLBars
67378
67770
  QUnit.test("Bound helpers registered on the container can be late-invoked", function() {
67379
67771
  Ember.TEMPLATES.application = compile("<div id='wrapper'>{{x-reverse}} {{x-reverse foo}}</div>");
67380
67772
 
@@ -67389,8 +67781,8 @@ enifed('ember/tests/helpers/helper_registration_test', ['ember', 'ember-htmlbars
67389
67781
  ok(!helpers['x-reverse'], "Container-registered helper doesn't wind up on global helpers hash");
67390
67782
  });
67391
67783
 
67392
- // we have unit tests for this in ember-htmlbars/tests/system/lookup-helper
67393
- // and we are not going to recreate the handlebars helperMissing concept
67784
+ // we have unit tests for this in ember-htmlbars/tests/system/lookup-helper
67785
+ // and we are not going to recreate the handlebars helperMissing concept
67394
67786
  QUnit.test("Undashed helpers registered on the container can not (presently) be invoked", function() {
67395
67787
 
67396
67788
  // Note: the reason we're not allowing undashed helpers is to avoid
@@ -69081,7 +69473,7 @@ enifed('ember/tests/helpers/link_to_test', ['ember', 'ember-runtime/controllers/
69081
69473
  equal(router.get('location.path'), '/about');
69082
69474
  }
69083
69475
 
69084
- var aboutDefer;
69476
+ var aboutDefer, otherDefer;
69085
69477
 
69086
69478
  if (!Ember.FEATURES.isEnabled('ember-routing-transitioning-classes')) {
69087
69479
  QUnit.module("The {{link-to}} helper: eager URL updating", {
@@ -69219,12 +69611,20 @@ enifed('ember/tests/helpers/link_to_test', ['ember', 'ember-runtime/controllers/
69219
69611
  });
69220
69612
 
69221
69613
  App.AboutRoute = Ember.Route.extend({
69222
- model: function() {
69614
+ model: function () {
69223
69615
  aboutDefer = Ember.RSVP.defer();
69224
69616
  return aboutDefer.promise;
69225
69617
  }
69226
69618
  });
69227
69619
 
69620
+ App.OtherRoute = Ember.Route.extend({
69621
+ model: function () {
69622
+ otherDefer = Ember.RSVP.defer();
69623
+ return otherDefer.promise;
69624
+ }
69625
+ });
69626
+
69627
+
69228
69628
  Ember.TEMPLATES.application = compile("{{outlet}}{{link-to 'Index' 'index' id='index-link'}}{{link-to 'About' 'about' id='about-link'}}{{link-to 'Other' 'other' id='other-link'}}");
69229
69629
  });
69230
69630
  },
@@ -69265,6 +69665,85 @@ enifed('ember/tests/helpers/link_to_test', ['ember', 'ember-runtime/controllers/
69265
69665
  assertHasClass('ember-transitioning-in', $index, false, $about, false, $other, false);
69266
69666
  assertHasClass('ember-transitioning-out', $index, false, $about, false, $other, false);
69267
69667
  });
69668
+
69669
+ QUnit.test("while a transition is underway with nested link-to's", function() {
69670
+ expect(54);
69671
+
69672
+ Router.map(function() {
69673
+ this.route('parent-route', function() {
69674
+ this.route('about');
69675
+ this.route('other');
69676
+ });
69677
+ });
69678
+
69679
+ App.ParentRouteAboutRoute = Ember.Route.extend({
69680
+ model: function () {
69681
+ aboutDefer = Ember.RSVP.defer();
69682
+ return aboutDefer.promise;
69683
+ }
69684
+ });
69685
+
69686
+ App.ParentRouteOtherRoute = Ember.Route.extend({
69687
+ model: function () {
69688
+ otherDefer = Ember.RSVP.defer();
69689
+ return otherDefer.promise;
69690
+ }
69691
+ });
69692
+
69693
+ Ember.TEMPLATES.application = compile("{{outlet}} {{#link-to 'index' tagName='li'}} {{link-to 'Index' 'index' id='index-link'}} {{/link-to}} {{#link-to 'parent-route.about' tagName='li'}} {{link-to 'About' 'parent-route.about' id='about-link'}} {{/link-to}} {{#link-to 'parent-route.other' tagName='li'}} {{link-to 'Other' 'parent-route.other' id='other-link'}} {{/link-to}}");
69694
+
69695
+ bootApplication();
69696
+
69697
+ function assertHasClass(className) {
69698
+ var i = 1;
69699
+ while (i < arguments.length) {
69700
+ var $a = arguments[i];
69701
+ var shouldHaveClass = arguments[i+1];
69702
+ equal($a.hasClass(className), shouldHaveClass, $a.attr('id') + " should " + (shouldHaveClass ? '' : "not ") + "have class " + className);
69703
+ i +=2;
69704
+ }
69705
+ }
69706
+
69707
+ var $index = Ember.$('#index-link');
69708
+ var $about = Ember.$('#about-link');
69709
+ var $other = Ember.$('#other-link');
69710
+
69711
+ Ember.run($about, 'click');
69712
+
69713
+ assertHasClass('active', $index, true, $about, false, $other, false);
69714
+ assertHasClass('ember-transitioning-in', $index, false, $about, true, $other, false);
69715
+ assertHasClass('ember-transitioning-out', $index, true, $about, false, $other, false);
69716
+
69717
+ Ember.run(aboutDefer, 'resolve');
69718
+
69719
+ assertHasClass('active', $index, false, $about, true, $other, false);
69720
+ assertHasClass('ember-transitioning-in', $index, false, $about, false, $other, false);
69721
+ assertHasClass('ember-transitioning-out', $index, false, $about, false, $other, false);
69722
+
69723
+ Ember.run($other, 'click');
69724
+
69725
+ assertHasClass('active', $index, false, $about, true, $other, false);
69726
+ assertHasClass('ember-transitioning-in', $index, false, $about, false, $other, true);
69727
+ assertHasClass('ember-transitioning-out', $index, false, $about, true, $other, false);
69728
+
69729
+ Ember.run(otherDefer, 'resolve');
69730
+
69731
+ assertHasClass('active', $index, false, $about, false, $other, true);
69732
+ assertHasClass('ember-transitioning-in', $index, false, $about, false, $other, false);
69733
+ assertHasClass('ember-transitioning-out', $index, false, $about, false, $other, false);
69734
+
69735
+ Ember.run($about, 'click');
69736
+
69737
+ assertHasClass('active', $index, false, $about, false, $other, true);
69738
+ assertHasClass('ember-transitioning-in', $index, false, $about, true, $other, false);
69739
+ assertHasClass('ember-transitioning-out', $index, false, $about, false, $other, true);
69740
+
69741
+ Ember.run(aboutDefer, 'resolve');
69742
+
69743
+ assertHasClass('active', $index, false, $about, true, $other, false);
69744
+ assertHasClass('ember-transitioning-in', $index, false, $about, false, $other, false);
69745
+ assertHasClass('ember-transitioning-out', $index, false, $about, false, $other, false);
69746
+ });
69268
69747
 
69269
69748
 
69270
69749
  });
@@ -69394,6 +69873,8 @@ enifed('ember/tests/routing/basic_test', ['ember', 'ember-metal/enumerable_utils
69394
69873
 
69395
69874
  'use strict';
69396
69875
 
69876
+ var trim = Ember.$.trim;
69877
+
69397
69878
  var compile = EmberHandlebars['default'].compile;
69398
69879
 
69399
69880
  var Router, App, router, registry, container, originalLoggerError;
@@ -72996,6 +73477,247 @@ enifed('ember/tests/routing/basic_test', ['ember', 'ember-metal/enumerable_utils
72996
73477
  equal(Ember.$('#qunit-fixture').text(), "A-The index-B-Hello world-C", "second render");
72997
73478
  });
72998
73479
 
73480
+ QUnit.test("Can render routes with no 'main' outlet and their children", function() {
73481
+ Ember.TEMPLATES.application = compile('<div id="application">{{outlet "app"}}</div>');
73482
+ Ember.TEMPLATES.app = compile('<div id="app-common">{{outlet "common"}}</div><div id="app-sub">{{outlet "sub"}}</div>');
73483
+ Ember.TEMPLATES.common = compile('<div id="common"></div>');
73484
+ Ember.TEMPLATES.sub = compile('<div id="sub"></div>');
73485
+
73486
+ Router.map(function() {
73487
+ this.route('app', { path: "/app" }, function() {
73488
+ this.resource('sub', { path: "/sub" });
73489
+ });
73490
+ });
73491
+
73492
+ App.AppRoute = Ember.Route.extend({
73493
+ renderTemplate : function() {
73494
+ this.render('app', {
73495
+ outlet: 'app',
73496
+ into: 'application'
73497
+ });
73498
+ this.render('common', {
73499
+ outlet: 'common',
73500
+ into: 'app'
73501
+ });
73502
+ }
73503
+ });
73504
+
73505
+ App.SubRoute = Ember.Route.extend({
73506
+ renderTemplate : function() {
73507
+ this.render('sub', {
73508
+ outlet: 'sub',
73509
+ into: 'app'
73510
+ });
73511
+ }
73512
+ });
73513
+
73514
+ bootApplication();
73515
+ handleURL('/app');
73516
+ equal(Ember.$('#app-common #common').length, 1, "Finds common while viewing /app");
73517
+ handleURL('/app/sub');
73518
+ equal(Ember.$('#app-common #common').length, 1, "Finds common while viewing /app/sub");
73519
+ equal(Ember.$('#app-sub #sub').length, 1, "Finds sub while viewing /app/sub");
73520
+ });
73521
+
73522
+ QUnit.test("Tolerates stacked renders", function() {
73523
+ Ember.TEMPLATES.application = compile('{{outlet}}{{outlet "modal"}}');
73524
+ Ember.TEMPLATES.index = compile('hi');
73525
+ Ember.TEMPLATES.layer = compile('layer');
73526
+ App.ApplicationRoute = Ember.Route.extend({
73527
+ actions: {
73528
+ openLayer: function() {
73529
+ this.render('layer', {
73530
+ into: 'application',
73531
+ outlet: 'modal'
73532
+ });
73533
+ },
73534
+ close: function() {
73535
+ this.disconnectOutlet({
73536
+ outlet: 'modal',
73537
+ parentView: 'application'
73538
+ });
73539
+ }
73540
+ }
73541
+ });
73542
+ bootApplication();
73543
+ equal(trim(Ember.$('#qunit-fixture').text()), 'hi');
73544
+ Ember.run(router, 'send', 'openLayer');
73545
+ equal(trim(Ember.$('#qunit-fixture').text()), 'hilayer');
73546
+ Ember.run(router, 'send', 'openLayer');
73547
+ equal(trim(Ember.$('#qunit-fixture').text()), 'hilayer');
73548
+ Ember.run(router, 'send', 'close');
73549
+ equal(trim(Ember.$('#qunit-fixture').text()), 'hi');
73550
+ });
73551
+
73552
+ QUnit.test("Renders child into parent with non-default template name", function() {
73553
+ Ember.TEMPLATES.application = compile('<div class="a">{{outlet}}</div>');
73554
+ Ember.TEMPLATES['exports/root'] = compile('<div class="b">{{outlet}}</div>');
73555
+ Ember.TEMPLATES['exports/index'] = compile('<div class="c"></div>');
73556
+
73557
+ Router.map(function() {
73558
+ this.route('root', function() {
73559
+ });
73560
+ });
73561
+
73562
+ App.RootRoute = Ember.Route.extend({
73563
+ renderTemplate: function() {
73564
+ this.render('exports/root');
73565
+ }
73566
+ });
73567
+
73568
+ App.RootIndexRoute = Ember.Route.extend({
73569
+ renderTemplate: function() {
73570
+ this.render('exports/index');
73571
+ }
73572
+ });
73573
+
73574
+ bootApplication();
73575
+ handleURL('/root');
73576
+ equal(Ember.$('#qunit-fixture .a .b .c').length, 1);
73577
+ });
73578
+
73579
+ QUnit.test("Allows any route to disconnectOutlet another route's templates", function() {
73580
+ Ember.TEMPLATES.application = compile('{{outlet}}{{outlet "modal"}}');
73581
+ Ember.TEMPLATES.index = compile('hi');
73582
+ Ember.TEMPLATES.layer = compile('layer');
73583
+ App.ApplicationRoute = Ember.Route.extend({
73584
+ actions: {
73585
+ openLayer: function() {
73586
+ this.render('layer', {
73587
+ into: 'application',
73588
+ outlet: 'modal'
73589
+ });
73590
+ }
73591
+ }
73592
+ });
73593
+ App.IndexRoute = Ember.Route.extend({
73594
+ actions: {
73595
+ close: function() {
73596
+ this.disconnectOutlet({
73597
+ parentView: 'application',
73598
+ outlet: 'modal'
73599
+ });
73600
+ }
73601
+ }
73602
+ });
73603
+ bootApplication();
73604
+ equal(trim(Ember.$('#qunit-fixture').text()), 'hi');
73605
+ Ember.run(router, 'send', 'openLayer');
73606
+ equal(trim(Ember.$('#qunit-fixture').text()), 'hilayer');
73607
+ Ember.run(router, 'send', 'close');
73608
+ equal(trim(Ember.$('#qunit-fixture').text()), 'hi');
73609
+ });
73610
+
73611
+ QUnit.test("Can render({into:...}) the render helper", function() {
73612
+ Ember.TEMPLATES.application = compile('{{render "foo"}}');
73613
+ Ember.TEMPLATES.foo = compile('<div class="foo">{{outlet}}</div>');
73614
+ Ember.TEMPLATES.index = compile('other');
73615
+ Ember.TEMPLATES.bar = compile('bar');
73616
+
73617
+ App.IndexRoute = Ember.Route.extend({
73618
+ renderTemplate: function() {
73619
+ this.render({ into: 'foo' });
73620
+ },
73621
+ actions: {
73622
+ changeToBar: function() {
73623
+ this.disconnectOutlet({
73624
+ parentView: 'foo',
73625
+ outlet: 'main'
73626
+ });
73627
+ this.render('bar', { into: 'foo' });
73628
+ }
73629
+ }
73630
+ });
73631
+
73632
+ bootApplication();
73633
+ equal(Ember.$('#qunit-fixture .foo').text(), 'other');
73634
+ Ember.run(router, 'send', 'changeToBar');
73635
+ equal(Ember.$('#qunit-fixture .foo').text(), 'bar');
73636
+ });
73637
+
73638
+ QUnit.test("Can disconnect from the render helper", function() {
73639
+ Ember.TEMPLATES.application = compile('{{render "foo"}}');
73640
+ Ember.TEMPLATES.foo = compile('<div class="foo">{{outlet}}</div>');
73641
+ Ember.TEMPLATES.index = compile('other');
73642
+
73643
+ App.IndexRoute = Ember.Route.extend({
73644
+ renderTemplate: function() {
73645
+ this.render({ into: 'foo' });
73646
+ },
73647
+ actions: {
73648
+ disconnect: function() {
73649
+ this.disconnectOutlet({
73650
+ parentView: 'foo',
73651
+ outlet: 'main'
73652
+ });
73653
+ }
73654
+ }
73655
+ });
73656
+
73657
+ bootApplication();
73658
+ equal(Ember.$('#qunit-fixture .foo').text(), 'other');
73659
+ Ember.run(router, 'send', 'disconnect');
73660
+ equal(Ember.$('#qunit-fixture .foo').text(), '');
73661
+ });
73662
+
73663
+
73664
+ QUnit.test("Can render({into:...}) the render helper's children", function() {
73665
+ Ember.TEMPLATES.application = compile('{{render "foo"}}');
73666
+ Ember.TEMPLATES.foo = compile('<div class="foo">{{outlet}}</div>');
73667
+ Ember.TEMPLATES.index = compile('<div class="index">{{outlet}}</div>');
73668
+ Ember.TEMPLATES.other = compile('other');
73669
+ Ember.TEMPLATES.bar = compile('bar');
73670
+
73671
+ App.IndexRoute = Ember.Route.extend({
73672
+ renderTemplate: function() {
73673
+ this.render({ into: 'foo' });
73674
+ this.render('other', { into: 'index' });
73675
+ },
73676
+ actions: {
73677
+ changeToBar: function() {
73678
+ this.disconnectOutlet({
73679
+ parentView: 'index',
73680
+ outlet: 'main'
73681
+ });
73682
+ this.render('bar', { into: 'index' });
73683
+ }
73684
+ }
73685
+ });
73686
+
73687
+ bootApplication();
73688
+ equal(Ember.$('#qunit-fixture .foo .index').text(), 'other');
73689
+ Ember.run(router, 'send', 'changeToBar');
73690
+ equal(Ember.$('#qunit-fixture .foo .index').text(), 'bar');
73691
+
73692
+ });
73693
+
73694
+ QUnit.test("Can disconnect from the render helper's children", function() {
73695
+ Ember.TEMPLATES.application = compile('{{render "foo"}}');
73696
+ Ember.TEMPLATES.foo = compile('<div class="foo">{{outlet}}</div>');
73697
+ Ember.TEMPLATES.index = compile('<div class="index">{{outlet}}</div>');
73698
+ Ember.TEMPLATES.other = compile('other');
73699
+
73700
+ App.IndexRoute = Ember.Route.extend({
73701
+ renderTemplate: function() {
73702
+ this.render({ into: 'foo' });
73703
+ this.render('other', { into: 'index' });
73704
+ },
73705
+ actions: {
73706
+ disconnect: function() {
73707
+ this.disconnectOutlet({
73708
+ parentView: 'index',
73709
+ outlet: 'main'
73710
+ });
73711
+ }
73712
+ }
73713
+ });
73714
+
73715
+ bootApplication();
73716
+ equal(Ember.$('#qunit-fixture .foo .index').text(), 'other');
73717
+ Ember.run(router, 'send', 'disconnect');
73718
+ equal(Ember.$('#qunit-fixture .foo .index').text(), '');
73719
+ });
73720
+
72999
73721
  });
73000
73722
  enifed('ember/tests/routing/basic_test.jscs-test', function () {
73001
73723
 
@@ -73136,6 +73858,30 @@ enifed('ember/tests/routing/query_params_test', ['ember', 'ember-metal/computed'
73136
73858
  }
73137
73859
  });
73138
73860
 
73861
+ QUnit.test("Single query params can be set on ObjectController [DEPRECATED]", function() {
73862
+ expectDeprecation("Ember.ObjectController is deprecated, please use Ember.Controller and use `model.propertyName`.");
73863
+
73864
+ Router.map(function() {
73865
+ this.route("home", { path: '/' });
73866
+ });
73867
+
73868
+ App.HomeController = Ember.ObjectController.extend({
73869
+ queryParams: ['foo'],
73870
+ foo: "123"
73871
+ });
73872
+
73873
+ bootApplication();
73874
+
73875
+ var controller = container.lookup('controller:home');
73876
+
73877
+ setAndFlush(controller, 'foo', '456');
73878
+
73879
+ equal(router.get('location.path'), "/?foo=456");
73880
+
73881
+ setAndFlush(controller, 'foo', '987');
73882
+ equal(router.get('location.path'), "/?foo=987");
73883
+ });
73884
+
73139
73885
  QUnit.test("Single query params can be set", function() {
73140
73886
  Router.map(function() {
73141
73887
  this.route("home", { path: '/' });
@@ -75874,7 +76620,12 @@ enifed("morph-attr/sanitize-attribute-value",
75874
76620
  'BODY': true,
75875
76621
  'LINK': true,
75876
76622
  'IMG': true,
75877
- 'IFRAME': true
76623
+ 'IFRAME': true,
76624
+ 'BASE': true
76625
+ };
76626
+
76627
+ var badTagsForDataURI = {
76628
+ 'EMBED': true
75878
76629
  };
75879
76630
 
75880
76631
  var badAttributes = {
@@ -75883,13 +76634,17 @@ enifed("morph-attr/sanitize-attribute-value",
75883
76634
  'background': true
75884
76635
  };
75885
76636
  __exports__.badAttributes = badAttributes;
76637
+ var badAttributesForDataURI = {
76638
+ 'src': true
76639
+ };
76640
+
75886
76641
  function sanitizeAttributeValue(dom, element, attribute, value) {
75887
76642
  var tagName;
75888
76643
 
75889
76644
  if (!element) {
75890
76645
  tagName = null;
75891
76646
  } else {
75892
- tagName = element.tagName;
76647
+ tagName = element.tagName.toUpperCase();
75893
76648
  }
75894
76649
 
75895
76650
  if (value && value.toHTML) {
@@ -75903,6 +76658,10 @@ enifed("morph-attr/sanitize-attribute-value",
75903
76658
  }
75904
76659
  }
75905
76660
 
76661
+ if (badTagsForDataURI[tagName] && badAttributesForDataURI[attribute]) {
76662
+ return 'unsafe:' + value;
76663
+ }
76664
+
75906
76665
  return value;
75907
76666
  }
75908
76667
 
@@ -77220,7 +77979,17 @@ enifed("router/router",
77220
77979
 
77221
77980
  var pop = Array.prototype.pop;
77222
77981
 
77223
- function Router() {
77982
+ function Router(_options) {
77983
+ var options = _options || {};
77984
+ this.getHandler = options.getHandler || this.getHandler;
77985
+ this.updateURL = options.updateURL || this.updateURL;
77986
+ this.replaceURL = options.replaceURL || this.replaceURL;
77987
+ this.didTransition = options.didTransition || this.didTransition;
77988
+ this.willTransition = options.willTransition || this.willTransition;
77989
+ this.delegate = options.delegate || this.delegate;
77990
+ this.triggerEvent = options.triggerEvent || this.triggerEvent;
77991
+ this.log = options.log || this.log;
77992
+
77224
77993
  this.recognizer = new RouteRecognizer();
77225
77994
  this.reset();
77226
77995
  }
@@ -77244,7 +78013,7 @@ enifed("router/router",
77244
78013
  }
77245
78014
 
77246
78015
  // No-op. No need to create a new transition.
77247
- return new Transition(this);
78016
+ return this.activeTransition || new Transition(this);
77248
78017
  }
77249
78018
 
77250
78019
  if (isIntermediate) {
@@ -77304,6 +78073,8 @@ enifed("router/router",
77304
78073
  return this.recognizer.hasRoute(route);
77305
78074
  },
77306
78075
 
78076
+ getHandler: function() {},
78077
+
77307
78078
  queryParamsTransition: function(changelist, wasTransitioning, oldState, newState) {
77308
78079
  var router = this;
77309
78080
 
@@ -77565,16 +78336,7 @@ enifed("router/router",
77565
78336
 
77566
78337
  @param {String} message The message to log.
77567
78338
  */
77568
- log: null,
77569
-
77570
- _willChangeContextEvent: 'willChangeContext',
77571
- _triggerWillChangeContext: function(handlerInfos, newTransition) {
77572
- trigger(this, handlerInfos, true, [this._willChangeContextEvent, newTransition]);
77573
- },
77574
-
77575
- _triggerWillLeave: function(handlerInfos, newTransition, leavingChecker) {
77576
- trigger(this, handlerInfos, true, ['willLeave', newTransition, leavingChecker]);
77577
- }
78339
+ log: null
77578
78340
  };
77579
78341
 
77580
78342
  /**
@@ -78004,12 +78766,6 @@ enifed("router/router",
78004
78766
  }
78005
78767
  return false;
78006
78768
  };
78007
-
78008
- router._triggerWillLeave(leaving, newTransition, leavingChecker);
78009
- }
78010
-
78011
- if (changing.length > 0) {
78012
- router._triggerWillChangeContext(changing, newTransition);
78013
78769
  }
78014
78770
 
78015
78771
  trigger(router, oldHandlers, true, ['willTransition', newTransition]);
@@ -78243,8 +78999,8 @@ enifed("router/transition-intent/named-transition-intent",
78243
78999
  });
78244
79000
  });
78245
79001
  enifed("router/transition-intent/url-transition-intent",
78246
- ["../transition-intent","../transition-state","../handler-info/factory","../utils","exports"],
78247
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __exports__) {
79002
+ ["../transition-intent","../transition-state","../handler-info/factory","../utils","./../unrecognized-url-error","exports"],
79003
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __exports__) {
78248
79004
  "use strict";
78249
79005
  var TransitionIntent = __dependency1__["default"];
78250
79006
  var TransitionState = __dependency2__["default"];
@@ -78252,6 +79008,7 @@ enifed("router/transition-intent/url-transition-intent",
78252
79008
  var oCreate = __dependency4__.oCreate;
78253
79009
  var merge = __dependency4__.merge;
78254
79010
  var subclass = __dependency4__.subclass;
79011
+ var UnrecognizedURLError = __dependency5__["default"];
78255
79012
 
78256
79013
  __exports__["default"] = subclass(TransitionIntent, {
78257
79014
  url: null,
@@ -78302,15 +79059,6 @@ enifed("router/transition-intent/url-transition-intent",
78302
79059
  return newState;
78303
79060
  }
78304
79061
  });
78305
-
78306
- /**
78307
- Promise reject reasons passed to promise rejection
78308
- handlers for failed transitions.
78309
- */
78310
- function UnrecognizedURLError(message) {
78311
- this.message = (message || "UnrecognizedURLError");
78312
- this.name = "UnrecognizedURLError";
78313
- }
78314
79062
  });
78315
79063
  enifed("router/transition-state",
78316
79064
  ["./handler-info","./utils","rsvp/promise","exports"],
@@ -78740,6 +79488,26 @@ enifed("router/transition",
78740
79488
  __exports__.logAbort = logAbort;
78741
79489
  __exports__.TransitionAborted = TransitionAborted;
78742
79490
  });
79491
+ enifed("router/unrecognized-url-error",
79492
+ ["./utils","exports"],
79493
+ function(__dependency1__, __exports__) {
79494
+ "use strict";
79495
+ var oCreate = __dependency1__.oCreate;
79496
+
79497
+ /**
79498
+ Promise reject reasons passed to promise rejection
79499
+ handlers for failed transitions.
79500
+ */
79501
+ function UnrecognizedURLError(message) {
79502
+ this.message = (message || "UnrecognizedURLError");
79503
+ this.name = "UnrecognizedURLError";
79504
+ Error.call(this);
79505
+ }
79506
+
79507
+ UnrecognizedURLError.prototype = oCreate(Error.prototype);
79508
+
79509
+ __exports__["default"] = UnrecognizedURLError;
79510
+ });
78743
79511
  enifed("router/utils",
78744
79512
  ["exports"],
78745
79513
  function(__exports__) {