ember-source 1.13.7 → 1.13.8

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

Potentially problematic release.


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

@@ -5,7 +5,7 @@
5
5
  * Portions Copyright 2008-2011 Apple Inc. All rights reserved.
6
6
  * @license Licensed under MIT license
7
7
  * See https://raw.github.com/emberjs/ember.js/master/LICENSE
8
- * @version 1.13.7
8
+ * @version 1.13.8
9
9
  */
10
10
 
11
11
  (function() {
@@ -3774,7 +3774,9 @@ enifed("ember-application/system/application-instance", ["exports", "ember-metal
3774
3774
  */
3775
3775
  setupEventDispatcher: function () {
3776
3776
  var dispatcher = this.container.lookup('event_dispatcher:main');
3777
- dispatcher.setup(this.customEvents, this.rootElement);
3777
+ var applicationCustomEvents = _emberMetalProperty_get.get(this.application, 'customEvents');
3778
+
3779
+ dispatcher.setup(applicationCustomEvents, this.rootElement);
3778
3780
 
3779
3781
  return dispatcher;
3780
3782
  },
@@ -4061,7 +4063,7 @@ enifed('ember-application/system/application', ['exports', 'dag-map', 'container
4061
4063
  */
4062
4064
  buildInstance: function () {
4063
4065
  return _emberApplicationSystemApplicationInstance["default"].create({
4064
- customEvents: _emberMetalProperty_get.get(this, 'customEvents'),
4066
+ application: this,
4065
4067
  rootElement: _emberMetalProperty_get.get(this, 'rootElement'),
4066
4068
  applicationRegistry: this.registry
4067
4069
  });
@@ -4496,7 +4498,13 @@ enifed('ember-application/system/application', ['exports', 'dag-map', 'container
4496
4498
  instanceInitializers: _emberMetalPlatformCreate["default"](null),
4497
4499
 
4498
4500
  /**
4499
- Initializer receives an object which has the following attributes:
4501
+ The goal of initializers should be to register dependencies and injections.
4502
+ This phase runs once. Because these initializers may load code, they are
4503
+ allowed to defer application readiness and advance it. If you need to access
4504
+ the container or store you should use an InstanceInitializer that will be run
4505
+ after all initializers and therefore after all code is loaded and the app is
4506
+ ready.
4507
+ Initializer receives an object which has the following attributes:
4500
4508
  `name`, `before`, `after`, `initialize`. The only required attribute is
4501
4509
  `initialize`, all others are optional.
4502
4510
  * `name` allows you to specify under which name the initializer is registered.
@@ -4571,6 +4579,7 @@ enifed('ember-application/system/application', ['exports', 'dag-map', 'container
4571
4579
  ```javascript
4572
4580
  Ember.Application.initializer({
4573
4581
  name: 'preload-data',
4582
+ after: 'ember-data', // ember-data must be loaded before we can access store
4574
4583
  initialize: function(container, application) {
4575
4584
  var store = container.lookup('store:main');
4576
4585
  store.pushPayload(preloadedData);
@@ -4589,7 +4598,62 @@ enifed('ember-application/system/application', ['exports', 'dag-map', 'container
4589
4598
  @method initializer
4590
4599
  @param initializer {Object}
4591
4600
  @public
4592
- */
4601
+ */
4602
+
4603
+ /**
4604
+ InstanceInitializers run after all initializers have run. Because
4605
+ instanceInitializers run after the app is fully set up. We have access
4606
+ to the store, container, and other items. However, these initializers run
4607
+ after code has loaded and are not allowed to defer readiness.
4608
+ InstanceInitializer receives an object which has the following attributes:
4609
+ `name`, `before`, `after`, `initialize`. The only required attribute is
4610
+ `initialize`, all others are optional.
4611
+ * `name` allows you to specify under which name the instanceInitializer is
4612
+ registered. This must be a unique name, as trying to register two
4613
+ instanceInitializer with the same name will result in an error.
4614
+ ```javascript
4615
+ Ember.Application.instanceInitializer({
4616
+ name: 'namedinstanceInitializer',
4617
+ initialize: function(application) {
4618
+ Ember.debug('Running namedInitializer!');
4619
+ }
4620
+ });
4621
+ ```
4622
+ * `before` and `after` are used to ensure that this initializer is ran prior
4623
+ or after the one identified by the value. This value can be a single string
4624
+ or an array of strings, referencing the `name` of other initializers.
4625
+ * See Ember.Application.initializer for discussion on the usage of before
4626
+ and after.
4627
+ Example instanceInitializer to preload data into the store.
4628
+ ```javascript
4629
+ Ember.Application.initializer({
4630
+ name: 'preload-data',
4631
+ initialize: function(application) {
4632
+ var userConfig, userConfigEncoded, store;
4633
+ // We have a HTML escaped JSON representation of the user's basic
4634
+ // configuration generated server side and stored in the DOM of the main
4635
+ // index.html file. This allows the app to have access to a set of data
4636
+ // without making any additional remote calls. Good for basic data that is
4637
+ // needed for immediate rendering of the page. Keep in mind, this data,
4638
+ // like all local models and data can be manipulated by the user, so it
4639
+ // should not be relied upon for security or authorization.
4640
+ //
4641
+ // Grab the encoded data from the meta tag
4642
+ userConfigEncoded = Ember.$('head meta[name=app-user-config]').attr('content');
4643
+ // Unescape the text, then parse the resulting JSON into a real object
4644
+ userConfig = JSON.parse(unescape(userConfigEncoded));
4645
+ // Lookup the store
4646
+ store = application.container.lookup('service:store');
4647
+ // Push the encoded JSON into the store
4648
+ store.pushPayload(userConfig);
4649
+ }
4650
+ });
4651
+ ```
4652
+ @method instanceInitializer
4653
+ @param instanceInitializer
4654
+ @public
4655
+ */
4656
+
4593
4657
  initializer: buildInitializerMethod('initializers', 'initializer'),
4594
4658
 
4595
4659
  /**
@@ -8337,6 +8401,8 @@ enifed("ember-htmlbars/hooks/link-render-node", ["exports", "ember-htmlbars/util
8337
8401
  params[0] = shouldDisplay(params[0]);break;
8338
8402
  case 'each':
8339
8403
  params[0] = eachParam(params[0]);break;
8404
+ case '@content-helper':
8405
+ break;
8340
8406
  default:
8341
8407
  helper = _emberHtmlbarsSystemLookupHelper.findHelper(path, env.view, env);
8342
8408
 
@@ -8614,11 +8680,135 @@ enifed("ember-htmlbars/keywords", ["exports", "htmlbars-runtime", "ember-metal/p
8614
8680
  enifed("ember-htmlbars/keywords/collection", ["exports", "ember-views/streams/utils", "ember-views/views/collection_view", "ember-htmlbars/node-managers/view-node-manager", "ember-metal/keys", "ember-metal/merge"], function (exports, _emberViewsStreamsUtils, _emberViewsViewsCollection_view, _emberHtmlbarsNodeManagersViewNodeManager, _emberMetalKeys, _emberMetalMerge) {
8615
8681
  /**
8616
8682
  @module ember
8617
- @submodule ember-htmlbars
8683
+ @submodule ember-templates
8618
8684
  */
8619
8685
 
8620
8686
  "use strict";
8621
8687
 
8688
+ /**
8689
+ `{{collection}}` is a template helper for adding instances of
8690
+ `Ember.CollectionView` to a template. See [Ember.CollectionView](/api/classes/Ember.CollectionView.html)
8691
+ for additional information on how a `CollectionView` functions.
8692
+
8693
+ `{{collection}}`'s primary use is as a block helper with a `contentBinding`
8694
+ option pointing towards an `Ember.Array`-compatible object. An `Ember.View`
8695
+ instance will be created for each item in its `content` property. Each view
8696
+ will have its own `content` property set to the appropriate item in the
8697
+ collection.
8698
+
8699
+ The provided block will be applied as the template for each item's view.
8700
+
8701
+ Given an empty `<body>` the following template:
8702
+
8703
+ ```handlebars
8704
+ {{! application.hbs }}
8705
+ {{#collection content=model}}
8706
+ Hi {{view.content.name}}
8707
+ {{/collection}}
8708
+ ```
8709
+
8710
+ And the following application code
8711
+
8712
+ ```javascript
8713
+ App = Ember.Application.create();
8714
+ App.ApplicationRoute = Ember.Route.extend({
8715
+ model: function() {
8716
+ return [{name: 'Yehuda'},{name: 'Tom'},{name: 'Peter'}];
8717
+ }
8718
+ });
8719
+ ```
8720
+
8721
+ The following HTML will result:
8722
+
8723
+ ```html
8724
+ <div class="ember-view">
8725
+ <div class="ember-view">Hi Yehuda</div>
8726
+ <div class="ember-view">Hi Tom</div>
8727
+ <div class="ember-view">Hi Peter</div>
8728
+ </div>
8729
+ ```
8730
+
8731
+ ### Non-block version of collection
8732
+
8733
+ If you provide an `itemViewClass` option that has its own `template` you may
8734
+ omit the block.
8735
+
8736
+ The following template:
8737
+
8738
+ ```handlebars
8739
+ {{! application.hbs }}
8740
+ {{collection content=model itemViewClass="an-item"}}
8741
+ ```
8742
+
8743
+ And application code
8744
+
8745
+ ```javascript
8746
+ App = Ember.Application.create();
8747
+ App.ApplicationRoute = Ember.Route.extend({
8748
+ model: function() {
8749
+ return [{name: 'Yehuda'},{name: 'Tom'},{name: 'Peter'}];
8750
+ }
8751
+ });
8752
+
8753
+ App.AnItemView = Ember.View.extend({
8754
+ template: Ember.Handlebars.compile("Greetings {{view.content.name}}")
8755
+ });
8756
+ ```
8757
+
8758
+ Will result in the HTML structure below
8759
+
8760
+ ```html
8761
+ <div class="ember-view">
8762
+ <div class="ember-view">Greetings Yehuda</div>
8763
+ <div class="ember-view">Greetings Tom</div>
8764
+ <div class="ember-view">Greetings Peter</div>
8765
+ </div>
8766
+ ```
8767
+
8768
+ ### Specifying a CollectionView subclass
8769
+
8770
+ By default the `{{collection}}` helper will create an instance of
8771
+ `Ember.CollectionView`. You can supply a `Ember.CollectionView` subclass to
8772
+ the helper by passing it as the first argument:
8773
+
8774
+ ```handlebars
8775
+ {{#collection "my-custom-collection" content=model}}
8776
+ Hi {{view.content.name}}
8777
+ {{/collection}}
8778
+ ```
8779
+
8780
+ This example would look for the class `App.MyCustomCollection`.
8781
+
8782
+ ### Forwarded `item.*`-named Options
8783
+
8784
+ As with the `{{view}}`, helper options passed to the `{{collection}}` will be
8785
+ set on the resulting `Ember.CollectionView` as properties. Additionally,
8786
+ options prefixed with `item` will be applied to the views rendered for each
8787
+ item (note the camelcasing):
8788
+
8789
+ ```handlebars
8790
+ {{#collection content=model
8791
+ itemTagName="p"
8792
+ itemClassNames="greeting"}}
8793
+ Howdy {{view.content.name}}
8794
+ {{/collection}}
8795
+ ```
8796
+
8797
+ Will result in the following HTML structure:
8798
+
8799
+ ```html
8800
+ <div class="ember-view">
8801
+ <p class="ember-view greeting">Howdy Yehuda</p>
8802
+ <p class="ember-view greeting">Howdy Tom</p>
8803
+ <p class="ember-view greeting">Howdy Peter</p>
8804
+ </div>
8805
+ ```
8806
+
8807
+ @method collection
8808
+ @for Ember.Templates.helpers
8809
+ @deprecated Use `{{each}}` helper instead.
8810
+ @public
8811
+ */
8622
8812
  exports["default"] = {
8623
8813
  setupState: function (state, env, scope, params, hash) {
8624
8814
  var read = env.hooks.getValue;
@@ -8899,8 +9089,159 @@ enifed('ember-htmlbars/keywords/each', ['exports', 'ember-runtime/controllers/ar
8899
9089
  }
8900
9090
  });
8901
9091
  enifed("ember-htmlbars/keywords/input", ["exports", "ember-metal/core", "ember-metal/merge"], function (exports, _emberMetalCore, _emberMetalMerge) {
9092
+ /**
9093
+ @module ember
9094
+ @submodule ember-templates
9095
+ */
9096
+
8902
9097
  "use strict";
8903
9098
 
9099
+ /**
9100
+ The `{{input}}` helper lets you create an HTML `<input />` component.
9101
+ It causes an `Ember.TextField` component to be rendered. For more info,
9102
+ see the [Ember.TextField](/api/classes/Ember.TextField.html) docs and
9103
+ the [templates guide](http://emberjs.com/guides/templates/input-helpers/).
9104
+
9105
+ ```handlebars
9106
+ {{input value="987"}}
9107
+ ```
9108
+
9109
+ renders as:
9110
+
9111
+ ```HTML
9112
+ <input type="text" value="987" />
9113
+ ```
9114
+
9115
+ ### Text field
9116
+
9117
+ If no `type` option is specified, a default of type 'text' is used.
9118
+
9119
+ Many of the standard HTML attributes may be passed to this helper.
9120
+
9121
+ <table>
9122
+ <tr><td>`readonly`</td><td>`required`</td><td>`autofocus`</td></tr>
9123
+ <tr><td>`value`</td><td>`placeholder`</td><td>`disabled`</td></tr>
9124
+ <tr><td>`size`</td><td>`tabindex`</td><td>`maxlength`</td></tr>
9125
+ <tr><td>`name`</td><td>`min`</td><td>`max`</td></tr>
9126
+ <tr><td>`pattern`</td><td>`accept`</td><td>`autocomplete`</td></tr>
9127
+ <tr><td>`autosave`</td><td>`formaction`</td><td>`formenctype`</td></tr>
9128
+ <tr><td>`formmethod`</td><td>`formnovalidate`</td><td>`formtarget`</td></tr>
9129
+ <tr><td>`height`</td><td>`inputmode`</td><td>`multiple`</td></tr>
9130
+ <tr><td>`step`</td><td>`width`</td><td>`form`</td></tr>
9131
+ <tr><td>`selectionDirection`</td><td>`spellcheck`</td><td>&nbsp;</td></tr>
9132
+ </table>
9133
+
9134
+
9135
+ When set to a quoted string, these values will be directly applied to the HTML
9136
+ element. When left unquoted, these values will be bound to a property on the
9137
+ template's current rendering context (most typically a controller instance).
9138
+
9139
+
9140
+ A very common use of this helper is to bind the `value` of an input to an Object's attribute:
9141
+
9142
+ ```handlebars
9143
+ Search:
9144
+ {{input value=searchWord}}
9145
+ ```
9146
+
9147
+ In this example, the inital value in the `<input />` will be set to the value of `searchWord`.
9148
+ If the user changes the text, the value of `searchWord` will also be updated.
9149
+
9150
+ ### Actions
9151
+ The helper can send multiple actions based on user events.
9152
+ The action property defines the action which is sent when
9153
+ the user presses the return key.
9154
+
9155
+ ```handlebars
9156
+ {{input action="submit"}}
9157
+ ```
9158
+
9159
+ The helper allows some user events to send actions.
9160
+
9161
+ * `enter`
9162
+ * `insert-newline`
9163
+ * `escape-press`
9164
+ * `focus-in`
9165
+ * `focus-out`
9166
+ * `key-press`
9167
+ * `key-up`
9168
+
9169
+
9170
+ For example, if you desire an action to be sent when the input is blurred,
9171
+ you only need to setup the action name to the event name property.
9172
+
9173
+ ```handlebars
9174
+ {{input focus-in="alertMessage"}}
9175
+ ```
9176
+
9177
+ See more about [Text Support Actions](/api/classes/Ember.TextField.html)
9178
+
9179
+
9180
+ ### Extending `Ember.TextField`
9181
+
9182
+ Internally, `{{input type="text"}}` creates an instance of `Ember.TextField`, passing
9183
+ arguments from the helper to `Ember.TextField`'s `create` method. You can extend the
9184
+ capabilities of text inputs in your applications by reopening this class. For example,
9185
+ if you are building a Bootstrap project where `data-*` attributes are used, you
9186
+ can add one to the `TextField`'s `attributeBindings` property:
9187
+
9188
+
9189
+ ```javascript
9190
+ Ember.TextField.reopen({
9191
+ attributeBindings: ['data-error']
9192
+ });
9193
+ ```
9194
+
9195
+ Keep in mind when writing `Ember.TextField` subclasses that `Ember.TextField`
9196
+ itself extends `Ember.Component`. Expect isolated component semantics, not
9197
+ legacy 1.x view semantics (like `controller` being present).
9198
+
9199
+ See more about [Ember components](/api/classes/Ember.Component.html)
9200
+
9201
+
9202
+ ### Checkbox
9203
+
9204
+ Checkboxes are special forms of the `{{input}}` helper. To create a `<checkbox />`:
9205
+
9206
+ ```handlebars
9207
+ Emberize Everything:
9208
+ {{input type="checkbox" name="isEmberized" checked=isEmberized}}
9209
+ ```
9210
+
9211
+ This will bind checked state of this checkbox to the value of `isEmberized` -- if either one changes,
9212
+ it will be reflected in the other.
9213
+
9214
+
9215
+ The following HTML attributes can be set via the helper:
9216
+
9217
+ * `checked`
9218
+ * `disabled`
9219
+ * `tabindex`
9220
+ * `indeterminate`
9221
+ * `name`
9222
+ * `autofocus`
9223
+ * `form`
9224
+
9225
+
9226
+ ### Extending `Ember.Checkbox`
9227
+
9228
+ Internally, `{{input type="checkbox"}}` creates an instance of `Ember.Checkbox`, passing
9229
+ arguments from the helper to `Ember.Checkbox`'s `create` method. You can extend the
9230
+ capablilties of checkbox inputs in your applications by reopening this class. For example,
9231
+ if you wanted to add a css class to all checkboxes in your application:
9232
+
9233
+ ```javascript
9234
+ Ember.Checkbox.reopen({
9235
+ classNames: ['my-app-checkbox']
9236
+ });
9237
+ ```
9238
+
9239
+
9240
+ @method input
9241
+ @for Ember.Templates.helpers
9242
+ @param {Hash} options
9243
+ @public
9244
+ */
8904
9245
  exports["default"] = {
8905
9246
  setupState: function (lastState, env, scope, params, hash) {
8906
9247
  var type = env.hooks.getValue(hash.type);
@@ -8971,7 +9312,7 @@ enifed("ember-htmlbars/keywords/mut", ["exports", "ember-metal/core", "ember-met
8971
9312
  exports.MUTABLE_REFERENCE = MUTABLE_REFERENCE;
8972
9313
  /**
8973
9314
  The `mut` helper lets you __clearly specify__ that a child `Component` can update the
8974
- (mutable) value passed to it, which will __change the value of the parent compnent__.
9315
+ (mutable) value passed to it, which will __change the value of the parent component__.
8975
9316
 
8976
9317
  This is very helpful for passing mutable values to a `Component` of any size, but
8977
9318
  critical to understanding the logic of a large/complex `Component`.
@@ -9152,11 +9493,52 @@ enifed('ember-htmlbars/keywords/outlet', ['exports', 'htmlbars-runtime/hooks'],
9152
9493
  enifed("ember-htmlbars/keywords/partial", ["exports", "ember-views/system/lookup_partial", "htmlbars-runtime"], function (exports, _emberViewsSystemLookup_partial, _htmlbarsRuntime) {
9153
9494
  /**
9154
9495
  @module ember
9155
- @submodule ember-htmlbars
9496
+ @submodule ember-templates
9156
9497
  */
9157
9498
 
9158
9499
  "use strict";
9159
9500
 
9501
+ /**
9502
+ The `partial` helper renders another template without
9503
+ changing the template context:
9504
+
9505
+ ```handlebars
9506
+ {{foo}}
9507
+ {{partial "nav"}}
9508
+ ```
9509
+
9510
+ The above example template will render a template named
9511
+ "_nav", which has the same context as the parent template
9512
+ it's rendered into, so if the "_nav" template also referenced
9513
+ `{{foo}}`, it would print the same thing as the `{{foo}}`
9514
+ in the above example.
9515
+
9516
+ If a "_nav" template isn't found, the `partial` helper will
9517
+ fall back to a template named "nav".
9518
+
9519
+ ### Bound template names
9520
+
9521
+ The parameter supplied to `partial` can also be a path
9522
+ to a property containing a template name, e.g.:
9523
+
9524
+ ```handlebars
9525
+ {{partial someTemplateName}}
9526
+ ```
9527
+
9528
+ The above example will look up the value of `someTemplateName`
9529
+ on the template context (e.g. a controller) and use that
9530
+ value as the name of the template to render. If the resolved
9531
+ value is falsy, nothing will be rendered. If `someTemplateName`
9532
+ changes, the partial will be re-rendered using the new template
9533
+ name.
9534
+
9535
+
9536
+ @method partial
9537
+ @for Ember.Templates.helpers
9538
+ @param {String} partialName the name of the template to render minus the leading underscore
9539
+ @public
9540
+ */
9541
+
9160
9542
  exports["default"] = {
9161
9543
  setupState: function (state, env, scope, params, hash) {
9162
9544
  return { partialName: env.hooks.getValue(params[0]) };
@@ -9178,8 +9560,13 @@ enifed("ember-htmlbars/keywords/partial", ["exports", "ember-views/system/lookup
9178
9560
  }
9179
9561
  };
9180
9562
  });
9181
- enifed("ember-htmlbars/keywords/readonly", ["exports", "ember-htmlbars/keywords/mut"], function (exports, _emberHtmlbarsKeywordsMut) {
9182
- "use strict";
9563
+ enifed('ember-htmlbars/keywords/readonly', ['exports', 'ember-htmlbars/keywords/mut'], function (exports, _emberHtmlbarsKeywordsMut) {
9564
+ /**
9565
+ @module ember
9566
+ @submodule ember-templates
9567
+ */
9568
+
9569
+ 'use strict';
9183
9570
 
9184
9571
  exports["default"] = readonly;
9185
9572
 
@@ -9204,7 +9591,7 @@ enifed("ember-htmlbars/keywords/real_outlet", ["exports", "ember-metal/property_
9204
9591
 
9205
9592
  "use strict";
9206
9593
 
9207
- _emberHtmlbarsTemplatesTopLevelView["default"].meta.revision = 'Ember@1.13.7';
9594
+ _emberHtmlbarsTemplatesTopLevelView["default"].meta.revision = 'Ember@1.13.8';
9208
9595
 
9209
9596
  exports["default"] = {
9210
9597
  willRender: function (renderNode, env) {
@@ -9329,9 +9716,195 @@ enifed("ember-htmlbars/keywords/template", ["exports", "ember-metal/core"], func
9329
9716
  enifed('ember-htmlbars/keywords/textarea', ['exports'], function (exports) {
9330
9717
  /**
9331
9718
  @module ember
9332
- @submodule ember-htmlbars
9719
+ @submodule ember-templates
9333
9720
  */
9334
9721
 
9722
+ /**
9723
+ `{{textarea}}` inserts a new instance of `<textarea>` tag into the template.
9724
+ The attributes of `{{textarea}}` match those of the native HTML tags as
9725
+ closely as possible.
9726
+
9727
+ The following HTML attributes can be set:
9728
+
9729
+ * `value`
9730
+ * `name`
9731
+ * `rows`
9732
+ * `cols`
9733
+ * `placeholder`
9734
+ * `disabled`
9735
+ * `maxlength`
9736
+ * `tabindex`
9737
+ * `selectionEnd`
9738
+ * `selectionStart`
9739
+ * `selectionDirection`
9740
+ * `wrap`
9741
+ * `readonly`
9742
+ * `autofocus`
9743
+ * `form`
9744
+ * `spellcheck`
9745
+ * `required`
9746
+
9747
+ When set to a quoted string, these value will be directly applied to the HTML
9748
+ element. When left unquoted, these values will be bound to a property on the
9749
+ template's current rendering context (most typically a controller instance).
9750
+
9751
+ Unbound:
9752
+
9753
+ ```handlebars
9754
+ {{textarea value="Lots of static text that ISN'T bound"}}
9755
+ ```
9756
+
9757
+ Would result in the following HTML:
9758
+
9759
+ ```html
9760
+ <textarea class="ember-text-area">
9761
+ Lots of static text that ISN'T bound
9762
+ </textarea>
9763
+ ```
9764
+
9765
+ Bound:
9766
+
9767
+ In the following example, the `writtenWords` property on `App.ApplicationController`
9768
+ will be updated live as the user types 'Lots of text that IS bound' into
9769
+ the text area of their browser's window.
9770
+
9771
+ ```javascript
9772
+ App.ApplicationController = Ember.Controller.extend({
9773
+ writtenWords: "Lots of text that IS bound"
9774
+ });
9775
+ ```
9776
+
9777
+ ```handlebars
9778
+ {{textarea value=writtenWords}}
9779
+ ```
9780
+
9781
+ Would result in the following HTML:
9782
+
9783
+ ```html
9784
+ <textarea class="ember-text-area">
9785
+ Lots of text that IS bound
9786
+ </textarea>
9787
+ ```
9788
+
9789
+ If you wanted a one way binding between the text area and a div tag
9790
+ somewhere else on your screen, you could use `Ember.computed.oneWay`:
9791
+
9792
+ ```javascript
9793
+ App.ApplicationController = Ember.Controller.extend({
9794
+ writtenWords: "Lots of text that IS bound",
9795
+ outputWrittenWords: Ember.computed.oneWay("writtenWords")
9796
+ });
9797
+ ```
9798
+
9799
+ ```handlebars
9800
+ {{textarea value=writtenWords}}
9801
+
9802
+ <div>
9803
+ {{outputWrittenWords}}
9804
+ </div>
9805
+ ```
9806
+
9807
+ Would result in the following HTML:
9808
+
9809
+ ```html
9810
+ <textarea class="ember-text-area">
9811
+ Lots of text that IS bound
9812
+ </textarea>
9813
+
9814
+ <-- the following div will be updated in real time as you type -->
9815
+
9816
+ <div>
9817
+ Lots of text that IS bound
9818
+ </div>
9819
+ ```
9820
+
9821
+ Finally, this example really shows the power and ease of Ember when two
9822
+ properties are bound to eachother via `Ember.computed.alias`. Type into
9823
+ either text area box and they'll both stay in sync. Note that
9824
+ `Ember.computed.alias` costs more in terms of performance, so only use it when
9825
+ your really binding in both directions:
9826
+
9827
+ ```javascript
9828
+ App.ApplicationController = Ember.Controller.extend({
9829
+ writtenWords: "Lots of text that IS bound",
9830
+ twoWayWrittenWords: Ember.computed.alias("writtenWords")
9831
+ });
9832
+ ```
9833
+
9834
+ ```handlebars
9835
+ {{textarea value=writtenWords}}
9836
+ {{textarea value=twoWayWrittenWords}}
9837
+ ```
9838
+
9839
+ ```html
9840
+ <textarea id="ember1" class="ember-text-area">
9841
+ Lots of text that IS bound
9842
+ </textarea>
9843
+
9844
+ <-- both updated in real time -->
9845
+
9846
+ <textarea id="ember2" class="ember-text-area">
9847
+ Lots of text that IS bound
9848
+ </textarea>
9849
+ ```
9850
+
9851
+ ### Actions
9852
+
9853
+ The helper can send multiple actions based on user events.
9854
+
9855
+ The action property defines the action which is send when
9856
+ the user presses the return key.
9857
+
9858
+ ```handlebars
9859
+ {{input action="submit"}}
9860
+ ```
9861
+
9862
+ The helper allows some user events to send actions.
9863
+
9864
+ * `enter`
9865
+ * `insert-newline`
9866
+ * `escape-press`
9867
+ * `focus-in`
9868
+ * `focus-out`
9869
+ * `key-press`
9870
+
9871
+ For example, if you desire an action to be sent when the input is blurred,
9872
+ you only need to setup the action name to the event name property.
9873
+
9874
+ ```handlebars
9875
+ {{textarea focus-in="alertMessage"}}
9876
+ ```
9877
+
9878
+ See more about [Text Support Actions](/api/classes/Ember.TextArea.html)
9879
+
9880
+ ### Extension
9881
+
9882
+ Internally, `{{textarea}}` creates an instance of `Ember.TextArea`, passing
9883
+ arguments from the helper to `Ember.TextArea`'s `create` method. You can
9884
+ extend the capabilities of text areas in your application by reopening this
9885
+ class. For example, if you are building a Bootstrap project where `data-*`
9886
+ attributes are used, you can globally add support for a `data-*` attribute
9887
+ on all `{{textarea}}`s' in your app by reopening `Ember.TextArea` or
9888
+ `Ember.TextSupport` and adding it to the `attributeBindings` concatenated
9889
+ property:
9890
+
9891
+ ```javascript
9892
+ Ember.TextArea.reopen({
9893
+ attributeBindings: ['data-error']
9894
+ });
9895
+ ```
9896
+
9897
+ Keep in mind when writing `Ember.TextArea` subclasses that `Ember.TextArea`
9898
+ itself extends `Ember.Component`. Expect isolated component semantics, not
9899
+ legacy 1.x view semantics (like `controller` being present).
9900
+
9901
+ See more about [Ember components](/api/classes/Ember.Component.html)
9902
+
9903
+ @method textarea
9904
+ @for Ember.Templates.helpers
9905
+ @param {Hash} options
9906
+ @public
9907
+ */
9335
9908
  'use strict';
9336
9909
 
9337
9910
  exports["default"] = textarea;
@@ -9427,11 +10000,189 @@ enifed("ember-htmlbars/keywords/unbound", ["exports", "ember-metal/merge", "embe
9427
10000
  enifed("ember-htmlbars/keywords/view", ["exports", "ember-views/streams/utils", "ember-views/views/view", "ember-htmlbars/node-managers/view-node-manager", "ember-metal/keys"], function (exports, _emberViewsStreamsUtils, _emberViewsViewsView, _emberHtmlbarsNodeManagersViewNodeManager, _emberMetalKeys) {
9428
10001
  /**
9429
10002
  @module ember
9430
- @submodule ember-htmlbars
10003
+ @submodule ember-templates
9431
10004
  */
9432
10005
 
9433
10006
  "use strict";
9434
10007
 
10008
+ /**
10009
+ `{{view}}` inserts a new instance of an `Ember.View` into a template passing its
10010
+ options to the `Ember.View`'s `create` method and using the supplied block as
10011
+ the view's own template.
10012
+
10013
+ An empty `<body>` and the following template:
10014
+
10015
+ ```handlebars
10016
+ A span:
10017
+ {{#view tagName="span"}}
10018
+ hello.
10019
+ {{/view}}
10020
+ ```
10021
+
10022
+ Will result in HTML structure:
10023
+
10024
+ ```html
10025
+ <body>
10026
+ <!-- Note: the handlebars template script
10027
+ also results in a rendered Ember.View
10028
+ which is the outer <div> here -->
10029
+
10030
+ <div class="ember-view">
10031
+ A span:
10032
+ <span id="ember1" class="ember-view">
10033
+ Hello.
10034
+ </span>
10035
+ </div>
10036
+ </body>
10037
+ ```
10038
+
10039
+ ### `parentView` setting
10040
+
10041
+ The `parentView` property of the new `Ember.View` instance created through
10042
+ `{{view}}` will be set to the `Ember.View` instance of the template where
10043
+ `{{view}}` was called.
10044
+
10045
+ ```javascript
10046
+ aView = Ember.View.create({
10047
+ template: Ember.Handlebars.compile("{{#view}} my parent: {{parentView.elementId}} {{/view}}")
10048
+ });
10049
+
10050
+ aView.appendTo('body');
10051
+ ```
10052
+
10053
+ Will result in HTML structure:
10054
+
10055
+ ```html
10056
+ <div id="ember1" class="ember-view">
10057
+ <div id="ember2" class="ember-view">
10058
+ my parent: ember1
10059
+ </div>
10060
+ </div>
10061
+ ```
10062
+
10063
+ ### Setting CSS id and class attributes
10064
+
10065
+ The HTML `id` attribute can be set on the `{{view}}`'s resulting element with
10066
+ the `id` option. This option will _not_ be passed to `Ember.View.create`.
10067
+
10068
+ ```handlebars
10069
+ {{#view tagName="span" id="a-custom-id"}}
10070
+ hello.
10071
+ {{/view}}
10072
+ ```
10073
+
10074
+ Results in the following HTML structure:
10075
+
10076
+ ```html
10077
+ <div class="ember-view">
10078
+ <span id="a-custom-id" class="ember-view">
10079
+ hello.
10080
+ </span>
10081
+ </div>
10082
+ ```
10083
+
10084
+ The HTML `class` attribute can be set on the `{{view}}`'s resulting element
10085
+ with the `class` or `classNameBindings` options. The `class` option will
10086
+ directly set the CSS `class` attribute and will not be passed to
10087
+ `Ember.View.create`. `classNameBindings` will be passed to `create` and use
10088
+ `Ember.View`'s class name binding functionality:
10089
+
10090
+ ```handlebars
10091
+ {{#view tagName="span" class="a-custom-class"}}
10092
+ hello.
10093
+ {{/view}}
10094
+ ```
10095
+
10096
+ Results in the following HTML structure:
10097
+
10098
+ ```html
10099
+ <div class="ember-view">
10100
+ <span id="ember2" class="ember-view a-custom-class">
10101
+ hello.
10102
+ </span>
10103
+ </div>
10104
+ ```
10105
+
10106
+ ### Supplying a different view class
10107
+
10108
+ `{{view}}` can take an optional first argument before its supplied options to
10109
+ specify a path to a custom view class.
10110
+
10111
+ ```handlebars
10112
+ {{#view "custom"}}{{! will look up App.CustomView }}
10113
+ hello.
10114
+ {{/view}}
10115
+ ```
10116
+
10117
+ The first argument can also be a relative path accessible from the current
10118
+ context.
10119
+
10120
+ ```javascript
10121
+ MyApp = Ember.Application.create({});
10122
+ MyApp.OuterView = Ember.View.extend({
10123
+ innerViewClass: Ember.View.extend({
10124
+ classNames: ['a-custom-view-class-as-property']
10125
+ }),
10126
+ template: Ember.Handlebars.compile('{{#view view.innerViewClass}} hi {{/view}}')
10127
+ });
10128
+
10129
+ MyApp.OuterView.create().appendTo('body');
10130
+ ```
10131
+
10132
+ Will result in the following HTML:
10133
+
10134
+ ```html
10135
+ <div id="ember1" class="ember-view">
10136
+ <div id="ember2" class="ember-view a-custom-view-class-as-property">
10137
+ hi
10138
+ </div>
10139
+ </div>
10140
+ ```
10141
+
10142
+ ### Blockless use
10143
+
10144
+ If you supply a custom `Ember.View` subclass that specifies its own template
10145
+ or provide a `templateName` option to `{{view}}` it can be used without
10146
+ supplying a block. Attempts to use both a `templateName` option and supply a
10147
+ block will throw an error.
10148
+
10149
+ ```javascript
10150
+ var App = Ember.Application.create();
10151
+ App.WithTemplateDefinedView = Ember.View.extend({
10152
+ templateName: 'defined-template'
10153
+ });
10154
+ ```
10155
+
10156
+ ```handlebars
10157
+ {{! application.hbs }}
10158
+ {{view 'with-template-defined'}}
10159
+ ```
10160
+
10161
+ ```handlebars
10162
+ {{! defined-template.hbs }}
10163
+ Some content for the defined template view.
10164
+ ```
10165
+
10166
+ ### `viewName` property
10167
+
10168
+ You can supply a `viewName` option to `{{view}}`. The `Ember.View` instance
10169
+ will be referenced as a property of its parent view by this name.
10170
+
10171
+ ```javascript
10172
+ aView = Ember.View.create({
10173
+ template: Ember.Handlebars.compile('{{#view viewName="aChildByName"}} hi {{/view}}')
10174
+ });
10175
+
10176
+ aView.appendTo('body');
10177
+ aView.get('aChildByName') // the instance of Ember.View created by {{view}} helper
10178
+ ```
10179
+
10180
+ @method view
10181
+ @for Ember.Templates.helpers
10182
+ @public
10183
+ @deprecated
10184
+ */
10185
+
9435
10186
  exports["default"] = {
9436
10187
  setupState: function (state, env, scope, params, hash) {
9437
10188
  var read = env.hooks.getValue;
@@ -9536,6 +10287,11 @@ enifed("ember-htmlbars/keywords/view", ["exports", "ember-views/streams/utils",
9536
10287
  }
9537
10288
  });
9538
10289
  enifed('ember-htmlbars/keywords/with', ['exports', 'ember-metal/core', 'ember-metal/property_get', 'htmlbars-runtime', 'ember-metal/streams/utils'], function (exports, _emberMetalCore, _emberMetalProperty_get, _htmlbarsRuntime, _emberMetalStreamsUtils) {
10290
+ /**
10291
+ @module ember
10292
+ @submodule ember-templates
10293
+ */
10294
+
9539
10295
  'use strict';
9540
10296
 
9541
10297
  exports["default"] = {
@@ -15156,7 +15912,7 @@ enifed('ember-metal/core', ['exports'], function (exports) {
15156
15912
 
15157
15913
  @class Ember
15158
15914
  @static
15159
- @version 1.13.7
15915
+ @version 1.13.8
15160
15916
  @public
15161
15917
  */
15162
15918
 
@@ -15190,11 +15946,11 @@ enifed('ember-metal/core', ['exports'], function (exports) {
15190
15946
 
15191
15947
  @property VERSION
15192
15948
  @type String
15193
- @default '1.13.7'
15949
+ @default '1.13.8'
15194
15950
  @static
15195
15951
  @public
15196
15952
  */
15197
- Ember.VERSION = '1.13.7';
15953
+ Ember.VERSION = '1.13.8';
15198
15954
 
15199
15955
  /**
15200
15956
  The hash of environment variables used to control various configuration
@@ -22103,6 +22859,9 @@ enifed("ember-metal/utils", ["exports", "ember-metal/core", "ember-metal/platfor
22103
22859
  */
22104
22860
 
22105
22861
  function guidFor(obj) {
22862
+ if (obj && obj[GUID_KEY]) {
22863
+ return obj[GUID_KEY];
22864
+ }
22106
22865
 
22107
22866
  // special cases where we don't want to add a key to object
22108
22867
  if (obj === undefined) {
@@ -22140,10 +22899,6 @@ enifed("ember-metal/utils", ["exports", "ember-metal/core", "ember-metal/platfor
22140
22899
  return obj ? '(true)' : '(false)';
22141
22900
 
22142
22901
  default:
22143
- if (obj[GUID_KEY]) {
22144
- return obj[GUID_KEY];
22145
- }
22146
-
22147
22902
  if (obj === Object) {
22148
22903
  return '(Object)';
22149
22904
  }
@@ -23764,6 +24519,35 @@ enifed('ember-routing-htmlbars/keywords/link-to', ['exports', 'ember-metal/strea
23764
24519
  To override this option for your entire application, see
23765
24520
  "Overriding Application-wide Defaults".
23766
24521
 
24522
+ ### Keeping a link active for other routes
24523
+
24524
+ If you need a link to be 'active' even when it doesn't match
24525
+ the current route, you can use the the `current-when`
24526
+ argument.
24527
+
24528
+ ```handlebars
24529
+ {{#link-to 'photoGallery' current-when='photos'}}
24530
+ Photo Gallery
24531
+ {{/link-to}}
24532
+ ```
24533
+
24534
+ This may be helpful for keeping links active for:
24535
+
24536
+ * non-nested routes that are logically related
24537
+ * some secondary menu approaches
24538
+ * 'top navigation' with 'sub navigation' scenarios
24539
+
24540
+ A link will be active if `current-when` is `true` or the current
24541
+ route is the route this link would transition to.
24542
+
24543
+ To match multiple routes 'space-separate' the routes:
24544
+
24545
+ ```handlebars
24546
+ {{#link-to 'gallery' current-when='photos drawings paintings'}}
24547
+ Art Gallery
24548
+ {{/link-to}}
24549
+ ```
24550
+
23767
24551
  ### Supplying a model
23768
24552
  An optional model argument can be used for routes whose
23769
24553
  paths contain dynamic segments. This argument will become
@@ -24186,7 +24970,7 @@ enifed("ember-routing-views/views/link", ["exports", "ember-metal/core", "ember-
24186
24970
 
24187
24971
  "use strict";
24188
24972
 
24189
- _emberHtmlbarsTemplatesLinkTo["default"].meta.revision = 'Ember@1.13.7';
24973
+ _emberHtmlbarsTemplatesLinkTo["default"].meta.revision = 'Ember@1.13.8';
24190
24974
 
24191
24975
  var linkComponentClassNameBindings = ['active', 'loading', 'disabled'];
24192
24976
 
@@ -24483,7 +25267,13 @@ enifed("ember-routing-views/views/link", ["exports", "ember-metal/core", "ember-
24483
25267
  return false;
24484
25268
  }
24485
25269
 
24486
- _emberMetalProperty_get.get(this, '_routing').transitionTo(_emberMetalProperty_get.get(this, 'targetRouteName'), _emberMetalProperty_get.get(this, 'models'), _emberMetalProperty_get.get(this, 'queryParams.values'), _emberMetalProperty_get.get(this, 'attrs.replace'));
25270
+ var routing = _emberMetalProperty_get.get(this, '_routing');
25271
+ var targetRouteName = this._handleOnlyQueryParamsSupplied(_emberMetalProperty_get.get(this, 'targetRouteName'));
25272
+ var models = _emberMetalProperty_get.get(this, 'models');
25273
+ var queryParamValues = _emberMetalProperty_get.get(this, 'queryParams.values');
25274
+ var shouldReplace = _emberMetalProperty_get.get(this, 'attrs.replace');
25275
+
25276
+ routing.transitionTo(targetRouteName, models, queryParamValues, shouldReplace);
24487
25277
  },
24488
25278
 
24489
25279
  queryParams: null,
@@ -24719,7 +25509,7 @@ enifed("ember-routing-views/views/outlet", ["exports", "ember-views/views/view",
24719
25509
 
24720
25510
  "use strict";
24721
25511
 
24722
- _emberHtmlbarsTemplatesTopLevelView["default"].meta.revision = 'Ember@1.13.7';
25512
+ _emberHtmlbarsTemplatesTopLevelView["default"].meta.revision = 'Ember@1.13.8';
24723
25513
 
24724
25514
  var CoreOutletView = _emberViewsViewsView["default"].extend({
24725
25515
  defaultTemplate: _emberHtmlbarsTemplatesTopLevelView["default"],
@@ -24932,11 +25722,13 @@ enifed("ember-routing/ext/controller", ["exports", "ember-metal/core", "ember-me
24932
25722
  var part = parts[i];
24933
25723
  var cacheValuePrefix = _calculateCacheValuePrefix(prefix, part);
24934
25724
  var value;
24935
- if (cacheValuePrefix && cacheValuePrefix in values) {
24936
- var partRemovedPrefix = part.indexOf(cacheValuePrefix) === 0 ? part.substr(cacheValuePrefix.length + 1) : part;
24937
- value = _emberMetalProperty_get.get(values[cacheValuePrefix], partRemovedPrefix);
24938
- } else {
24939
- value = _emberMetalProperty_get.get(values, part);
25725
+ if (values) {
25726
+ if (cacheValuePrefix && cacheValuePrefix in values) {
25727
+ var partRemovedPrefix = part.indexOf(cacheValuePrefix) === 0 ? part.substr(cacheValuePrefix.length + 1) : part;
25728
+ value = _emberMetalProperty_get.get(values[cacheValuePrefix], partRemovedPrefix);
25729
+ } else {
25730
+ value = _emberMetalProperty_get.get(values, part);
25731
+ }
24940
25732
  }
24941
25733
  suffixes += '::' + part + ':' + value;
24942
25734
  }
@@ -27195,7 +27987,7 @@ enifed("ember-routing/system/route", ["exports", "ember-metal/core", "ember-meta
27195
27987
  @property controller
27196
27988
  @type Ember.Controller
27197
27989
  @since 1.6.0
27198
- @private
27990
+ @public
27199
27991
  */
27200
27992
 
27201
27993
  _actions: {
@@ -41715,7 +42507,7 @@ enifed("ember-template-compiler/system/compile_options", ["exports", "ember-meta
41715
42507
 
41716
42508
  options.buildMeta = function buildMeta(program) {
41717
42509
  return {
41718
- revision: 'Ember@1.13.7',
42510
+ revision: 'Ember@1.13.8',
41719
42511
  loc: program.loc,
41720
42512
  moduleName: options.moduleName
41721
42513
  };
@@ -43120,13 +43912,16 @@ enifed('ember-views/compat/attrs-proxy', ['exports', 'ember-metal/mixin', 'ember
43120
43912
 
43121
43913
  _propagateAttrsToThis: function () {
43122
43914
  var attrs = this.attrs;
43123
- var values = {};
43915
+
43124
43916
  for (var prop in attrs) {
43125
- if (prop !== 'attrs') {
43126
- values[prop] = this.getAttr(prop);
43917
+ if (prop !== 'attrs' &&
43918
+ // These list of properties are concatenated and merged properties of
43919
+ // Ember.View / Ember.Component. Setting them here results in them being
43920
+ // completely stomped and not handled properly, BAIL OUT!
43921
+ prop !== 'actions' && prop !== 'classNames' && prop !== 'classNameBindings' && prop !== 'attributeBindings') {
43922
+ this.set(prop, this.getAttr(prop));
43127
43923
  }
43128
43924
  }
43129
- this.setProperties(values);
43130
43925
  },
43131
43926
 
43132
43927
  initializeShape: _emberMetalEvents.on('init', function () {
@@ -43150,7 +43945,8 @@ enifed('ember-views/compat/attrs-proxy', ['exports', 'ember-metal/mixin', 'ember
43150
43945
  if (attrs && key in attrs) {
43151
43946
  // do not deprecate accessing `this[key]` at this time.
43152
43947
  // add this back when we have a proper migration path
43153
- var possibleCell = attrs.key;
43948
+ // Ember.deprecate(deprecation(key), { id: 'ember-views.', until: '3.0.0' });
43949
+ var possibleCell = attrs[key];
43154
43950
 
43155
43951
  if (possibleCell && possibleCell[MUTABLE_CELL]) {
43156
43952
  return possibleCell.value;
@@ -46938,7 +47734,7 @@ enifed("ember-views/views/component", ["exports", "ember-metal/core", "ember-vie
46938
47734
  enifed("ember-views/views/container_view", ["exports", "ember-metal/core", "ember-runtime/mixins/mutable_array", "ember-views/views/view", "ember-metal/property_get", "ember-metal/property_set", "ember-metal/enumerable_utils", "ember-metal/mixin", "ember-metal/events", "ember-htmlbars/templates/container-view"], function (exports, _emberMetalCore, _emberRuntimeMixinsMutable_array, _emberViewsViewsView, _emberMetalProperty_get, _emberMetalProperty_set, _emberMetalEnumerable_utils, _emberMetalMixin, _emberMetalEvents, _emberHtmlbarsTemplatesContainerView) {
46939
47735
  "use strict";
46940
47736
 
46941
- _emberHtmlbarsTemplatesContainerView["default"].meta.revision = 'Ember@1.13.7';
47737
+ _emberHtmlbarsTemplatesContainerView["default"].meta.revision = 'Ember@1.13.8';
46942
47738
 
46943
47739
  /**
46944
47740
  @module ember