ember-source 1.11.0.beta.5 → 1.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

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__) {