Minor Release (but it changes major node versions)
$setImmediateperformance on node
- Remove the "bind to an object full of keys pointing to keypaths" functionality from
StyleBindingdue to complexity and underuse.
Hash.meta.toArrayaccessors and enumerability
RestStoragerespect URLs passed to it in options, say, from
SetComplementfor getting a set of items in one set but not another. This complements SetIntersect and SetUnion quite nicely if you ask me.
Setuse a user land quality test for membership checks. This means two objects which aren't
isEqualto return true and only one will end up in a
- Ensure records can save successfully after failing validation once before.
Batman.Request::canceland the extra
setImmediaterequired for its implementation.
data-removeifbindings which downright remove nodes from the DOM instead of CSS'ing them away.
- Make the automatic application of resource URLs on the server to Models no longer automatic and instead an option on the association macro
- Add special behaviour for
params['#']in controller actions to scroll to an element with that ID if it exists
- Make Controller after filters run truely after the action's operations have completed. This is to say after render and DOM insertion.
URImutable and add a
toStringto get back the URI string.
- Allow view classes to declare they aren't cacheable.
- Add a regexp validator accessible with
@validates 'foo', pattern: /foo/
fullMessageaccessor which does the i18n stuff.
- Add the
- Prevent unloaded but autoloading associations from autoloading during encoding.
- Fix dirtyKey tracking when the value is set to
undefinedafter having an initial value.
- Properly propagate changes into JS land when text is pasted into inputs when supported by browsers.
currentParamsavailable during beforeFilters.
- Fix the generators to a) work and b) generate more modern code.
- Fix a bug in the
HasManyAssociationdecoder which could result in duplicate entries being added to the identity map when nested associations were decoded.
- Refactor StateMachine class to be its own class with transitions, callbacks, and predicates
- Reimplement the Model lifecycle as a StateMachine residing at .get('lifecycle')
- Implement load pipelining to multiplex multiple
loadcalls to the same outgoing request if a second call is issued while a first is pending
- Add the
@optionclass macro to Views to allow the declaration of
data-view-myargument="keypath"argument passing to custom views
- Make the Model
@encodemacro use the default unit function for the absent options if only an
decodeoption is passed.
@urlNestsUnderallow multiple levels of nesting
- Add a
RenderCacheclas which will cache major views rendered by
Controlleruse previously rendered views from the
RenderCacheinstead of rendering new ones
- Remove the ability for views to be "container nodes". Views now have one root node always.
- Make View insertion and removal indempotent, including with regards to yields. This means that if a view is removed from the DOM, it will retract nodes yielded elsewhere, and when reinserted, it will reinsert those yields into contentfors.
View::inInDOM()to ask a view if it is currently in the DOM or not, which indicates if it is safe to destroy.
- Add behaviour to
SelectBindingto update the JS land value with the first selected option if no JS land value was present.
SetIndex#forEachfor looping over sets corresponding to particular values.
Controller#executeActionfor executing other actions within a parent action
Enumerable#inGroupsOffor getting an enumerable partitioned into groups of a particular length
Batman.helpers.pluralizeact more like the Rails version and not include the count when called in JS land.
RestStorageAdapter's environment allowing access to the meta information surrounding a request.
Paginatorinto an extra so people not using don't pay the filesize penalty
- Remove unimplemented ability to have multiple storage adapters on Models.
RestStoragefor doing "non-standard" requests while still using the nice request adapter pipeline
Model.requestfor sending nonstandard requests instead of having to use raw
- Add ability for
NamedRouteQueryto accept arguments which aren't full objects and are the value of the params. "data-route='routes.customers' instead of "data-route='routes.customers[customer]'"
- Add the
$extendhelper, which is a lightweight
$mixinwhich doesn't use
- Add ability to not include the count in the
- Add minification saftey warnings and the requirement for
resourceNameto be defined on Model subclasses and
routingKeyto be defined on Controller subclasses
- Add the
isNewaccessor to Models
- Add a Batman.URI class
- Add node v0.7 compatibility and remove v0.4 compatibility
- Unified params serialization to use
- Let the implicit
@rendercall in controller actions be configurable via
observeOncefor observing a property change and then immediately removing the observer after the first time it fires.
- Update QUnit to
- Updated to CoffeeScript
- Updated Alfred example to the TodoMVC version
- Break out classes into seperate files compiled by snockets.
- Fix serialization of null to end up as null in JSON or absent in post bodies (#364, #365)
- Fix filter argument parsing to support string literals and object literals in more cases (#373)
- Make select bindings more cautious about updating the JS land property on first bind (#377, #378)
- Fix click event propagation around
NamedRouteQuerynot loudly error with undefined params.
Model.get('all')to always load even if other
loads have occurred already (#401)
- Stop Model operations from adding erroneous sources to enclosing accessors. (#406)
- Fix Request sending in IE8 when the
Fileobject doesn't exist.
- Fix a bug where filter args could be carried over between executions (#438)
- Fix file uploads using jQuery
- Ensure filters receive undefined for absent arguments
Really Major Release
- Add node v0.6.x support
- Add documentation.
- Benchmarking suite added
Batman.SessionStoragestorage adapter for using the
<select>bindings populate JS land values if an option has the selected attribute.
data-viewbindings for instantiating custom
- Add support for closure compiler
- Add AMD loader support
- Add JS implementation of ActiveSupport::Inflector for pluralization and ordinalization
- Pass the RenderContext to event handlers called by data-event bindings.
- Add support for string data in batman.solo and batman.node
view.set('node')work like one might expect (deffering rendering until the node is present)
Model.clearfor busting the identity map.
Batman.Property.withoutTrackinghelper for swallowing dependencies in accessor bodies
withArgumentsfilter for currying arguments to event handlers
- Add decoding of ISO-8601 dates to
RailsStorage, optionally with timezones
- Swtich data-route bindings into real bindings and add a named route query syntax (routes)
- Ensure bindings with filters become simple one way JS -> DOM bindings, since we can't always unfilter
Enumerable.mapToPropertyfor fetching a single property of a bunch of items in a collection
- Formalize data-formfor bindings to have handy functionality like adding error classes to inputs bound to invalid fields and adding a list of errors to the form if an element with a .errors class exists
- Major routing system refactor to support nested resources declarations and the named routes syntax
Set.find(f)which returns the first item in the set for which
- Add binding content escaping, and thus the
- Refactor the
RenderContextstack into a proper tree with one root node to limit memory usage
- Add ability to give false as the value of encode or decode when adding encoders to omit that half of the process
- Add polymorphic belongsTo and hasMany associations
- Add @promiseAccessor for easy wrapping of asynchronous operations into eventually defined accessors
beforeDisapperwhich will fire as views enter and exit the dom
- Reimplement Hash storage mechanism for greater speed and less memory usage
- Reimplement Set storage mechanism for greater speed and less memory usage. Note: this changes set iteration order.
- Reimplement event storage mechanism for similar speed and less memory usage
- Add wrapAccessor macro for redefinining accessors in terms of their old implementations
Modelfor easy definiton of nested backend routes
EventEmitter::oncefor attaching handlers which autoremove themselves
Batman.getPathfor doing recursive gets on properties without encoding the key seperator
- Process bindings in a consistent order (#204)
- Ensure attribute bindings bind undefined as the empty string (#245)
- Ensure RestStorage passes the proper Content-type on POST and PUT operations.
data-targetbind immediately and populate the JS land value at that time
- Fix bugs surrounding replacing classes with spaces (#305, #361)
- Ensure encoding and decoding respect custom primary keys
- Fix a slew of bugs surrounding associations to custom primary keys
- Fix textarea bindings to set the value across all browsers
- Add proper bindings for HTML5 inputs like type=search, type=tel, and so on
- Ensure event handlers on yielded content are not destroyed during yielding
- Ensure showif bindings work regardless of the node's initial CSS (#261)
- Support controllers named AppController (#326)
- Ensure model classes don't inherit parent class state (#340)
SetSortproperly propagates length property (#355)
- Ensure non-existent models don't get added to the identity map (#366)
- Ensure data-route bindings stop event propagation (#369)
Batman.StateHistoryfor pushState navigation support
- View source html can be prefetched via
- Major refactoring of view bindings into class based hierarchy
data-defineviewto allow view sources to be declared inline
- Add Association support to Model via
- Add smart AssociationProxy objects which support reloading
- Add support for loading associations with inline JSON
- Add support for
!in property names and keypaths
- Store the current
ParamsPusheras smart objects which when set, update the global params, pushState or replaceState, and redirect.
Batman.containsfor membership testing and accompanying
- Add support for JSONP requests in
finalproperty support to optimize observing properties which will never change
- Add support for customizable render targets in
Hash::clearnow fires observers for cleared keys
- Properties are no longer retained if they aren't being observed to reduce memory usage
IteratorBindingcan have its sibling node changed without erroring
- Filter arguments can be keypaths which start on or descend through POJOs
data-contextnow correctly only takes effect for its child nodes
data-event-*has a catchall to attach event listeners for any event
Batman.datawork in IE7
Batman.Modelproperly inherit storage adapters
data-bind-stylebindings camelize keys
- Fixed major memory leaks around Bindings never being garbage collected via Batman.data
Renderer::stopwork if called before the renderer started
- Stop mixing
windowto error earlier when accidental sets and gets are done on
- Fix memory leaks around View instances never being garbage collected
- Fix memory leaks around IteratorBinding instances growing with time
- Fix memory leaks around SetIndex observing all items forever
- Fix sets on POJOs from keypaths
batman.soloto properly encode GET params
Model::fromJSONto)deal with falsey values like any other
- Remove ability for
Viewinstances to have either
contexts, and unify on
- Fix error thrown if the
mainyield didn't exist
- Made the extras files requirable in node
- Fix an invalid data bug when receiving large responses using
- Fix JSON de-serialization when receiving collection responses using
- Fix support for non numeric model IDs
data-yieldto stop introducing superfluous divs.
Major Maintenance Release
- pagination through
- nested resources routes
- unknown params passed to
urlForwill be appended to the query string
App.layoutaccepts a class name which will automatically instantiate that class upon load
intooption, which lets you render into a yield other than
yield/contentFor/replaceare now animatable through
- pleasant reminders if you seem to have forgotten some encoders
- removing nodes will destroy all their bindings
Batman.setImmediatefor fast stack popping
App.readyis now a oneShot event
App.controller/model/vieware now only available in development
data-foreach(through Iterator) is now entirely deferred
- better support for
- sets within gets don't register sources
- fixes several memory leaks
- better view html caching
Major Maintenance Release
- added extras folder
- start of i18n features
- overhauled event system, which properties are now clients of (requires code changes)
Property::exposewill prevent a property from firing dependent observers
data-contentForwill now append its content to its
data-replacewill replace the content of its
- descending SetSorts
loadedevent when all dependencies are loaded
Batman.App.currentRouteproperty for observing
- use persistent tree structure for RenderContext
- keep track of bindings and listeners with Batman.data
- correctly free bindings and listeners
- coerce string IDs into integers when possible in models
- accessors are memoized
- suppress developer warnings in tests
- don't match non
- added support for multi-select boxes
- added batman.rails.coffee, a new adapter for use within Rails
- added developer namespace for easy debugging (it gets stripped out in building)
- one way bindings have been changed to
data-targetto avoid ambiguity
newroute instead of
Model.findwill always return the shared record instance. you can then bind to this and when the data comes in from the storage adapter, your instance will be updated
- allow storage adapters to specific their namespace with
- storage adapter filter callbacks take errors
App.readyevent that fires once the layout is ready in the DOM
- hashes now have meta objects to non-obtrusively bind metadata like
propertykeyword is no longer reserved
- hash history uses
- routes such as
data-route="Model/new"will route correctly
Batman.DOM.removeEventListenerso it doesn't depend on document
renderedevent after all children have been rendered
- model methods can be used as event handlers
- animation methods called with node as context
data-eventworks within the binding system
- simpler model identity mapper
SortableSet::clearinvalidates sort indices
- IE: doesn't have Function.prototype.name (move things into $functionName)
- IE: doesn't support
- IE: doesn't support
- IE: fix $typeOf for undefined objects
- IE: event dispatching fixes
- IE: include json2.js in the tests
Major Maintenance Release
Batman.Accessible, a simple object wrapper around an accessor
Batman.SetSortfor getting a sorted version of a set which automatically watches the source set and propagates changes
Batman.SetIndexfor getting a filtered version of a set which automatically watches the source set and propagates changes
- added after filters to
Batman.Modelattributes into an attributes hash to avoid namespace collisions with model state.
Batman.datafor safely attaching JS objects to DOM nodes
- added support for many
style gets in filters
- added asymmetric bindings (
- ensured Batman objects are instantiated using
- added support for radio button
Batman.Encodersto store built in encoders, and added
Batman.Request, normalizing XHR object's
- added proper parameter serialization to the
batman serveroptions (
batman -b serverworks as expected)
- fixed binding to
submitevents on forms (#6)
- fixed Renderer's ready events to fire when all child renderers have returned (#13)
- fixed textarea value bindings to work as expected (#20)
- made bindings to undefined populate their nodes with an empty string instead of "undefined" (#21)
data-mixinall work as expected when the collection/object being bound changes (#22)
LocalStorage's primaryKey generation (#27)
Requestsend the proper content type (#35)
made the current application always appear on the context stack (#46, #48)
@render falseprevent render on a controller action (#50)
data-foreachwork with cleared sets and many additions/removals (#52, #56, #67)
- made empty bindings work (#54)
Sets not leak attributes when given items to add in the constructor (#66)
@redirectfrom entering a redirect loop when using
hideifbindings play nice with inline elements (#71)
- made jQuery record serialization work with
Model.get('all')implicitly load (#85)
- fixed binding to
stateon models (#95)
Hashaccept keys containing "." (#98)
batman serveris now
batman serve(or still
- Configure the hostname for the server with -h
- CI support with Travis
- RestStorage uses correct HTTP methods and contentType
- Some improvements for
batman new, more coming in 0.5.2
- DOM manipulation performance improvement
- Apps generated with
batman neware somewhat broken
- Generators allow too many non-alphanumeric characters
- Inflector support is naive
- Code is too big
- Performance hasn't been investigated
- Filters don't support async results
- Model error handling is callback based
- Model assosciations
- Model scopes
- Model pagination
- Push server