The presiding sentiment of client-side developers seems to be that dropping legacy IE support fixes cross-browser issues. While it does reduce a lot of rendering quirks, it doesn't mean you can stop browser testing altogether.
The reality is that there are four popular browsers with a wide range of versions. Using DailyJS's readership during August as an example, Chrome's versions break down like this: Chrome 28 has 53%, and Chrome 29 is at 13%. Firefox has 43% on version 22 and 41% on version 23. That means we see very few Firefox and Chrome readers on older versions, so they're doing an excellent job of keeping users up to date. Digging into the IE stats, I can see 50% using IE 10, and 0.33% on IE 6!
Even though IE 10 is far better than its predecessors, and Chrome and Firefox see fast upgrade rates due to their update mechanisms, you can't leave out proper cross-browser testing. It's hard work and dull, but unfortunately still important. I have a feeling the disparity in mobile browser technology will be the new IE 6, but that's another story...
Ditto (GitHub: bitpshr / ditto, License: WTFPL) by Paul Bouchon is a tool for resolving a project's Dojo dependencies. A project's zip file can be dropped onto the site, and it will analyse it and extract all of the required AMD modules. There's an options tab that has an option for the legacy dojo.require syntax, and paths can be ignored as well.
sudo.js (License: MIT, npm: sudoclass) by Rob Robbins (sent in by Yee Lee) is a library that features inheritance helpers, view and view controllers, and data binding support. The API is documented in the sudo.js wiki.
The author has included a test suite, compatibility polyfills for things like the console object and String.prototype.trim, and an optional build with a small templating library.
dry-observer (License: MIT) by Austin Bales is a small library for working with centralising binding and unbinding to events, while encouraging consistent handler naming. It requires a Backbone.js or at least a Backbone.Events-compatible object.
Here's a quick example by the author:
# Observe a Model by passing a hash…
'song:change' : @onSongChange
'volume:change' : @onVolumeChange
'focus' : @onFocus
# …or a String or Array.
# Observation will camelCase and prefix your events.
@observe model, 'song:change volume:change focus'
# Stop observing and dereference your model…
# …or stop observing /everything/
There's also a stunning amount of documentation, with examples, diagrams, and CSS styling details.
I really love the TodoMVC project by Addy Osmani. It showcases lots of client-side MVC frameworks. However, seeing as most people seem to misinterpret what MVC means, Peter Michaux has created Maria to set the record straight:
In Maria, models are event targets that can be observed by any other objects (including views, controllers, and other models). Views observe models and represent their current state. Controllers determine what happens when users interact with views.
The view files change elements based on models, but you won't see a fragment of HTML in them. In Maria, the concept of a view is distinct from a template. For example, TodoTemplate.js contains the list element HTML fragment.
Now, you're probably not going to replace your Backbone.js projects with Maria anytime soon, but it's definitely worth trying out Peter's project to see how it can better inform development with your MVC-style library of choice.
Although it's built with web technology, it includes a native desktop application to make working with local files easier. It seems like they'll be working to remove this dependency in the future, and there's always the possibility of using something like Filepicker.io for accessing files from services like Dropbox.