src/cm/media/js/lib/yui/yui_3.10.3/releasenotes/HISTORY.app.md
changeset 525 89ef5ed3c48b
equal deleted inserted replaced
524:322d0feea350 525:89ef5ed3c48b
       
     1 App Framework Change History
       
     2 ============================
       
     3 
       
     4 3.10.3
       
     5 ------
       
     6 
       
     7 * No changes.
       
     8 
       
     9 3.10.2
       
    10 ------
       
    11 
       
    12 ### Router
       
    13 
       
    14 * Router now properly dispatches when using hash-based URLs and calling
       
    15   `replace()` without arguments; before it would throw an error. [#739]
       
    16 
       
    17 
       
    18 3.10.1
       
    19 ------
       
    20 
       
    21 * No changes.
       
    22 
       
    23 
       
    24 3.10.0
       
    25 ------
       
    26 
       
    27 ### Model
       
    28 
       
    29 * Fixed: The `options` object passed to Model's `setAttrs()` method was being
       
    30   modified. Now a shallow copy of this object is now created so that the
       
    31   `_transaction` property is added to the copy and not the passed-in object.
       
    32   [#598]
       
    33 
       
    34 
       
    35 3.9.1
       
    36 -----
       
    37 
       
    38 ### LazyModelList
       
    39 
       
    40 * Fixed: Changing an attribute on a revived model did not update the
       
    41   corresponding property on the original object. [#528] [Ryan Grove]
       
    42 
       
    43 * Fixed: Revived models didn't have the same `clientId` as the original object.
       
    44   [#530] [Ryan Grove]
       
    45 
       
    46 ### Router
       
    47 
       
    48 * Added a more helpful error when a named route callback function doesn't exist.
       
    49   [#513] [Ryan Grove]
       
    50 
       
    51 
       
    52 3.9.0
       
    53 -----
       
    54 
       
    55 ### App
       
    56 
       
    57 * Applied the same changes from CSS Grids to App Transitions to support changes
       
    58   in how Chrome 25 renders `word-spacing`.
       
    59 
       
    60 
       
    61 3.8.1
       
    62 -----
       
    63 
       
    64 * No changes.
       
    65 
       
    66 
       
    67 3.8.0
       
    68 -----
       
    69 
       
    70 ### Router
       
    71 
       
    72 * Decode URL-encoded path matches for Router's `req.params`. [Ticket #2532941]
       
    73 
       
    74 
       
    75 3.7.3
       
    76 -----
       
    77 
       
    78 ### App
       
    79 
       
    80 * Add support for App Transitions in browsers which support native CSS3
       
    81   transitions without using vendor prefixes. This change means IE10 and Opera
       
    82   get view transitions.
       
    83 
       
    84 
       
    85 3.7.2
       
    86 -----
       
    87 
       
    88 * No changes.
       
    89 
       
    90 
       
    91 3.7.1
       
    92 -----
       
    93 
       
    94 * No changes.
       
    95 
       
    96 
       
    97 3.7.0
       
    98 -----
       
    99 
       
   100 ### App
       
   101 
       
   102 * Added App.Content, an App extension that provides pjax-style content fetching
       
   103   and handling, making it seamless to use a mixture of server and client
       
   104   rendered views.
       
   105 
       
   106 ### Model
       
   107 
       
   108 * Added custom response parsing to ModelSync.REST to make it easy for developers
       
   109   to gain access to the full `Y.io()` response object. Developers using
       
   110   ModelSync.REST can either assign the `parseIOResponse` property to `false` to
       
   111   gain access to the full `Y.io()` response object in their `parse()` method,
       
   112   or provide a custom implementation of the `parseIOResponse()` method.
       
   113 
       
   114 * ModelSync.REST's `serialize()` method now receives the `action` which the
       
   115   `sync()` method was invoked with. [Ticket #2532625]
       
   116 
       
   117 ### ModelList
       
   118 
       
   119 * You may now add models to a ModelList at instantiation time by providing an
       
   120   Object, array of Objects, Model instance, array of Model instances, or another
       
   121   ModelList instance in the `items` property of the config object passed to
       
   122   ModelList's constructor. This change also applies to LazyModelList.
       
   123 
       
   124 ### Router
       
   125 
       
   126 * Added support for route-based middleware to Router. The `route()` method now
       
   127   accepts an arbitrary number of callbacks enabling more reuse of routing code.
       
   128   For people familiar with Express.js' route middleware, this behaves the same.
       
   129   [Ticket #2532620]
       
   130 
       
   131 ### View
       
   132 
       
   133 * Log a warning when a handler function is not present when a view's `events`
       
   134   are being attached. [Ticket #2532326] [Jay Shirley, Jeff Pihach]
       
   135 
       
   136 
       
   137 3.6.0
       
   138 -----
       
   139 
       
   140 ### App
       
   141 
       
   142 * Added static property: `Y.App.serverRouting`, which serves as the default
       
   143   value for the `serverRouting` attribute of all apps. [Ticket #2532319]
       
   144 
       
   145 * Fixed issue with non-collapsing white space between views while transitioning.
       
   146   White space is now fully collapsed and prevents views from jumping after a
       
   147   cross-fade transition. [Ticket #2532298]
       
   148 
       
   149 * Organized all CSS classes `Y.App` uses under a static `CLASS_NAMES` property.
       
   150 
       
   151 * Moved `transitioning` CSS classname under `Y.App.CLASS_NAMES`.
       
   152 
       
   153 ### Model
       
   154 
       
   155 * Added ModelSync.REST, an extension which provides a RESTful XHR `sync()`
       
   156   implementation that can be mixed into a Model or ModelList subclass.
       
   157 
       
   158 ### ModelList
       
   159 
       
   160 * Added LazyModelList, a subclass of ModelList that manages a list of plain
       
   161   objects rather than a list of Model instances. This can be more efficient when
       
   162   working with large numbers of items. [Ryan Grove]
       
   163 
       
   164 * The `add()` method now accepts an `index` option, which can be used to insert
       
   165   the specified model(s) at a specific index in the list. [Greg Hinch]
       
   166 
       
   167 * The `each()` and `some()` methods now iterate over a copy of the list, so it's
       
   168   safe to remove a model during iteration. [Ticket #2531910]
       
   169 
       
   170 * The `remove()` method now optionally accepts the index of a model to remove
       
   171   (or an array of indices). You no longer need to specify the actual model
       
   172   instance(s), although that's still supported as well.
       
   173 
       
   174 * The `filter()` method now returns an instance of the subclass rather than
       
   175   ModelList itself when called with `options.asList` set to `true` on a subclass
       
   176   of ModelList. [Ryan Grove]
       
   177 
       
   178 * Fixed an issue where a list that received bubbled events from a model would
       
   179   assume the model was in the list if its `id` changed, even if the model
       
   180   actually wasn't in the list and was merely bubbling events to the list.
       
   181   [Ticket #2532240]
       
   182 
       
   183 ### Router
       
   184 
       
   185 * [!] Changed how hash-based paths interact with the URL's real path. The
       
   186   path-like hash fragments are now treated as a continuation of the URL's path
       
   187   when the router has been configured with a `root`. [Ticket #2532318]
       
   188 
       
   189 * Fixed issue when multiple routers are on the page and one router is destroyed
       
   190   the remaining routers would stop dispatching. [Ticket #2532317]
       
   191 
       
   192 * Fixed a multi-router issue where creating a router instance after a previous
       
   193   router's `save()`/`replace()` method was called would cause in infinite
       
   194   History replace loop. [Ticket #2532340]
       
   195 
       
   196 * The `req` object passed to routes now has a `pendingRoutes` property that
       
   197   indicates the number of matching routes after the current route in the
       
   198   dispatch chain. [Steven Olmsted]
       
   199 
       
   200 * Added a static `Y.Router.dispatch()` method which provides a mechanism to
       
   201   cause all active router instances to dispatch to their route handlers without
       
   202   needing to change the URL or fire the `history:change` or `hashchange` event.
       
   203 
       
   204 
       
   205 3.5.1
       
   206 -----
       
   207 
       
   208 ### App
       
   209 
       
   210 * Added `render` and `update` options to the `showView()` method.
       
   211   [PR #100 Pat Cavit]
       
   212 
       
   213 ### Router
       
   214 
       
   215 * Added a `removeQuery()` function that accepts a URL and returns it without a
       
   216   query string (if it had one). [Pat Cavit]
       
   217 
       
   218 * Fixed `hasRoute()` failing to match routes with query params. [Pat Cavit]
       
   219 
       
   220 * Fixed bad route regex generation if a placeholder was the last thing in the
       
   221   route. [Pat Cavit]
       
   222 
       
   223 * Fixed generated route regexes matching hash/query params when they shouldn't
       
   224   have. [Pat Cavit]
       
   225 
       
   226 
       
   227 3.5.0
       
   228 -----
       
   229 
       
   230 ### App
       
   231 
       
   232 * Initial release.
       
   233 
       
   234 ### Model
       
   235 
       
   236 * [!] The `validate()` method is now asynchronous, and is expected to call a
       
   237   callback function on success or failure. Old-style synchronous `validate()`
       
   238   methods will still work, but are deprecated. [Ticket #2531218]
       
   239 
       
   240 * Model now supports ad-hoc attributes, which means it's no longer necessary to
       
   241   subclass `Y.Model` and declare attributes ahead of time. The following is now
       
   242   perfectly valid, and will result in a model instance with "foo" and "bar"
       
   243   attributes:
       
   244 
       
   245           var model = new Y.Model({foo: 'foo', bar: 'bar'});
       
   246 
       
   247 * `load()` now fires a `load` event after the operation completes successfully,
       
   248   or an `error` event on failure. The `load()` callback (if provided) will still
       
   249   be called in both cases. [Ticket #2531207]
       
   250 
       
   251 * `save()` now fires a `save` event after the operation completes successfully,
       
   252   or an `error` event on failure. The `save()` callback (if provided) will still
       
   253   be called in both cases. [Ticket #2531207]
       
   254 
       
   255 * Options passed to `set()` and `setAttrs()` are now correctly merged into the
       
   256   event facade of the `change` event. [Ticket #2531492]
       
   257 
       
   258 * Model's `destroy` event is now fully preventable (previously it was possible
       
   259   for the model to be deleted even if the `destroy` event was prevented by a
       
   260   subscriber in the `on` phase).
       
   261 
       
   262 ### ModelList
       
   263 
       
   264 * ModelList's `model` property is now set to `Y.Model` by default. Since
       
   265   `Y.Model` now supports ad-hoc attributes, this makes it much easier to create
       
   266   and populate a ModelList without doing any subclassing:
       
   267 
       
   268           var list = new Y.ModelList();
       
   269 
       
   270           list.add([
       
   271               {foo: 'bar'},
       
   272               {baz: 'quux'}
       
   273           ]);
       
   274 
       
   275 * Added a `filter()` method that returns a filtered array of models or,
       
   276   optionally, a new ModelList containing the filtered models. [Ticket #2531250]
       
   277 
       
   278 * Added a `create` event that fires when a model is created/updated via the
       
   279   `create()` method, but before that model has actually been saved and added to
       
   280   the list (and before the `add` method has fired). [Ticket #2531400]
       
   281 
       
   282 * Added a `load` event that fires when models are loaded. [Ticket #2531399]
       
   283 
       
   284 * Models' `id` attributes (if set) are now used to enforce uniqueness. If you
       
   285   attempt to add a model to the list that has the same id as another model in
       
   286   the list, an `error` event will be fired and the model will not be added.
       
   287   [Ticket #2531409]
       
   288 
       
   289 * The `add()`, `remove()` and `reset()` methods now accept other ModelList
       
   290   instances in addition to models and arrays of models. For example, passing a
       
   291   ModelList to `add()` will add all the models in that list to this list as
       
   292   well. [Ticket #2531408]
       
   293 
       
   294 * ModelList now allows you to add models to the list even if they were
       
   295   instantiated in another window or another YUI sandbox. [Ticket #2531543]
       
   296 
       
   297 * ModelList subclasses can now override the protected `_compare()` method to
       
   298   customize the low-level comparison logic used for sorting. This makes it easy
       
   299   to do things like descending sort, multi-field sorting, etc. See the API docs
       
   300   for details.
       
   301 
       
   302 * The `reset()` method now allows the caller-provided options object to override
       
   303   the `src` property that's passed on the event facade of the `reset` event.
       
   304   [Ticket #2531888]
       
   305 
       
   306 ### Router (formerly Controller)
       
   307 
       
   308 * [!] The `Controller` class and `controller` module have been renamed to
       
   309   `Router` and `router` respectively. The old names are deprecated, but have
       
   310   been retained as aliases for backwards compatibility. They will be removed
       
   311   in a future version of YUI.
       
   312 
       
   313 * [!] The `html5`, `root`, and `routes` properties are now attributes, and
       
   314   `routes` may be set both during and after init. Code that refers to the old
       
   315   properties, like `myController.root` and `myController.root = '/foo'`, must be
       
   316   updated to use the attribute syntax instead: `myRouter.get('root')` and
       
   317   `myRouter.set('root', '/foo')`.
       
   318 
       
   319 * [!] The signature for route handlers has changed. Route handlers now receive
       
   320   three arguments: `req`, `res`, and `next`. To preserve backcompat, `res` is a
       
   321   function that, when executed, calls `next()`. This behavior is deprecated and
       
   322   will be removed in a future version of YUI, so please update your route
       
   323   handlers to expect `next` as the third param.
       
   324 
       
   325 * `"*"` can now be used to create a wildcard route that will match any path
       
   326   (previously it was necessary to use a regex to do this). Additionally, paths
       
   327   which contain a `"*"` (e.g., `"/users/*"`) act as a wildcard matching
       
   328   everything after it.
       
   329 
       
   330 * The `hasRoute()` method now accepts full URLs as well as paths.
       
   331 
       
   332 * The hashes used when `html5` is `false` are now root-less; the router's `root`
       
   333   is removed from the hash before it is set on the URL.
       
   334 
       
   335 * When multiple Router instances exist on a page, calling `save()` in one will
       
   336   now cause matching routes to be dispatched in all routers, rather than only
       
   337   the router that was the source of the change.
       
   338 
       
   339 * Added `url` and `src` properties to the request object that's passed to route
       
   340   handlers.
       
   341 
       
   342 * Made the `html5` config attribute writable. This allows you to force a router
       
   343   to use (`true`) or not use (`false`) HTML5 history. Please don't set it to
       
   344   `false` unless you understand the consequences.
       
   345 
       
   346 * Added a workaround for a nasty iOS 5 bug that destroys stored references to
       
   347   `window.location` when the page is restored from the page cache. We already
       
   348   had a workaround in place since this issue is present in desktop Safari as
       
   349   well, but the old workaround no longer does the trick in iOS 5.
       
   350   [Ticket #2531608]
       
   351 
       
   352 ### View
       
   353 
       
   354 * [!] The `container`, `model`, and `modelList` properties are now attributes.
       
   355   Code that refers to the old properties, like `myView.model` and
       
   356   `myView.model = model`, must be updated to use the attribute syntax instead:
       
   357   `myView.get('model')` and `myView.set('model', model)`.
       
   358 
       
   359 * [!] The `container` attribute now treats string values as CSS selectors.
       
   360   Previously, it assumed string values represented raw HTML. To get the same
       
   361   functionality as the old behavior, pass your HTML string through
       
   362   `Y.Node.create()` before passing it to `container`.
       
   363 
       
   364 * [!] Destroying a view no longer also destroys the view's container node by
       
   365   default. To destroy a view's container node when destroying the view, pass
       
   366   `{remove: true}` to the view's `destroy()` method. [Ticket #2531689]
       
   367 
       
   368 * View now supports ad-hoc attributes, which means it's no longer necessary to
       
   369   subclass `Y.View` and declare attributes ahead of time. The following is now
       
   370   perfectly valid, and will result in a view instance with "foo" and "bar"
       
   371   attributes:
       
   372 
       
   373           var view = new Y.View({foo: 'foo', bar: 'bar'});
       
   374 
       
   375 * Added a `containerTemplate` property that contains an HTML template used to
       
   376   create a container node when one isn't specified. Defaults to "<div/>".
       
   377 
       
   378 * When no `container` node is specified at instantiation time, the container
       
   379   won't be created until it's needed. `create()` is now only used to create a
       
   380   default container; it's never called when a custom container node is
       
   381   specified.
       
   382 
       
   383 * Added a View extension, `Y.View.NodeMap`, that can be mixed into a `View`
       
   384   subclass to provide a static `getByNode()` method that returns the nearest
       
   385   View instance associated with a given Node (similar to `Widget.getByNode()`).
       
   386 
       
   387 
       
   388 3.4.1
       
   389 -----
       
   390 
       
   391 ### Controller
       
   392 
       
   393 * Added a workaround for an iOS 4 bug that causes the previous URL to be
       
   394   displayed in the location bar after calling `save()` or `replace()` with a
       
   395   new URL.
       
   396 
       
   397 * Fixed a bug that caused the controller to get stuck in a "dispatching" state
       
   398   if `save()` was called with no routes defined.
       
   399 
       
   400 ### Model
       
   401 
       
   402 * The `validate()` method is now only called when `save()` is called, rather
       
   403   than on every attribute change. If validation fails, the save operation will
       
   404   be aborted.
       
   405 
       
   406 
       
   407 3.4.0
       
   408 -----
       
   409 
       
   410 * Initial release.