Commit 6d3e6498 authored by Pascal Hartig's avatar Pascal Hartig

Backbone: upgrade to 1.1

parent 9addb398
...@@ -2,9 +2,9 @@ ...@@ -2,9 +2,9 @@
"name": "todomvc-backbone", "name": "todomvc-backbone",
"version": "0.0.0", "version": "0.0.0",
"dependencies": { "dependencies": {
"backbone": "~1.0.0", "backbone": "~1.1.0",
"underscore": "~1.4.4", "underscore": "~1.5.0",
"jquery": "~1.9.1", "jquery": "~2.0.0",
"todomvc-common": "~0.1.4", "todomvc-common": "~0.1.4",
"backbone.localStorage": "~1.1.0" "backbone.localStorage": "~1.1.0"
} }
......
/** /**
* Backbone localStorage Adapter * Backbone localStorage Adapter
* Version 1.1.0 * Version 1.1.7
* *
* https://github.com/jeromegn/Backbone.localStorage * https://github.com/jeromegn/Backbone.localStorage
*/ */
(function (root, factory) { (function (root, factory) {
if (typeof define === "function" && define.amd) { if (typeof exports === 'object' && typeof require === 'function') {
module.exports = factory(require("underscore"), require("backbone"));
} else if (typeof define === "function" && define.amd) {
// AMD. Register as an anonymous module. // AMD. Register as an anonymous module.
define(["underscore","backbone"], function(_, Backbone) { define(["underscore","backbone"], function(_, Backbone) {
// Use global variables if the locals is undefined. // Use global variables if the locals are undefined.
return factory(_ || root._, Backbone || root.Backbone); return factory(_ || root._, Backbone || root.Backbone);
}); });
} else { } else {
// RequireJS isn't being used. Assume underscore and backbone is loaded in <script> tags // RequireJS isn't being used. Assume underscore and backbone are loaded in <script> tags
factory(_, Backbone); factory(_, Backbone);
} }
}(this, function(_, Backbone) { }(this, function(_, Backbone) {
...@@ -37,6 +39,9 @@ function guid() { ...@@ -37,6 +39,9 @@ function guid() {
// with a meaningful name, like the name you'd give a table. // with a meaningful name, like the name you'd give a table.
// window.Store is deprectated, use Backbone.LocalStorage instead // window.Store is deprectated, use Backbone.LocalStorage instead
Backbone.LocalStorage = window.Store = function(name) { Backbone.LocalStorage = window.Store = function(name) {
if( !this.localStorage ) {
throw "Backbone.localStorage: Environment does not support localStorage."
}
this.name = name; this.name = name;
var store = this.localStorage().getItem(this.name); var store = this.localStorage().getItem(this.name);
this.records = (store && store.split(",")) || []; this.records = (store && store.split(",")) || [];
...@@ -77,7 +82,8 @@ _.extend(Backbone.LocalStorage.prototype, { ...@@ -77,7 +82,8 @@ _.extend(Backbone.LocalStorage.prototype, {
// Return the array of all models currently in storage. // Return the array of all models currently in storage.
findAll: function() { findAll: function() {
return _(this.records).chain() // Lodash removed _#chain in v1.0.0-rc.1
return (_.chain || _)(this.records)
.map(function(id){ .map(function(id){
return this.jsonData(this.localStorage().getItem(this.name+"-"+id)); return this.jsonData(this.localStorage().getItem(this.name+"-"+id));
}, this) }, this)
...@@ -104,17 +110,39 @@ _.extend(Backbone.LocalStorage.prototype, { ...@@ -104,17 +110,39 @@ _.extend(Backbone.LocalStorage.prototype, {
// fix for "illegal access" error on Android when JSON.parse is passed null // fix for "illegal access" error on Android when JSON.parse is passed null
jsonData: function (data) { jsonData: function (data) {
return data && JSON.parse(data); return data && JSON.parse(data);
},
// Clear localStorage for specific collection.
_clear: function() {
var local = this.localStorage(),
itemRe = new RegExp("^" + this.name + "-");
// Remove id-tracking item (e.g., "foo").
local.removeItem(this.name);
// Lodash removed _#chain in v1.0.0-rc.1
// Match all data items (e.g., "foo-ID") and remove.
(_.chain || _)(local).keys()
.filter(function (k) { return itemRe.test(k); })
.each(function (k) { local.removeItem(k); });
this.records.length = 0;
},
// Size of localStorage.
_storageSize: function() {
return this.localStorage().length;
} }
}); });
// localSync delegate to the model or collection's // localSync delegate to the model or collection's
// *localStorage* property, which should be an instance of `Store`. // *localStorage* property, which should be an instance of `Store`.
// window.Store.sync and Backbone.localSync is deprectated, use Backbone.LocalStorage.sync instead // window.Store.sync and Backbone.localSync is deprecated, use Backbone.LocalStorage.sync instead
Backbone.LocalStorage.sync = window.Store.sync = Backbone.localSync = function(method, model, options) { Backbone.LocalStorage.sync = window.Store.sync = Backbone.localSync = function(method, model, options) {
var store = model.localStorage || model.collection.localStorage; var store = model.localStorage || model.collection.localStorage;
var resp, errorMessage, syncDfd = $.Deferred && $.Deferred(); //If $ is having Deferred - use it. var resp, errorMessage, syncDfd = Backbone.$.Deferred && Backbone.$.Deferred(); //If $ is having Deferred - use it.
try { try {
...@@ -134,21 +162,23 @@ Backbone.LocalStorage.sync = window.Store.sync = Backbone.localSync = function(m ...@@ -134,21 +162,23 @@ Backbone.LocalStorage.sync = window.Store.sync = Backbone.localSync = function(m
} }
} catch(error) { } catch(error) {
if (error.code === DOMException.QUOTA_EXCEEDED_ERR && window.localStorage.length === 0) if (error.code === 22 && store._storageSize() === 0)
errorMessage = "Private browsing is unsupported"; errorMessage = "Private browsing is unsupported";
else else
errorMessage = error.message; errorMessage = error.message;
} }
if (resp) { if (resp) {
if (options && options.success) if (options && options.success) {
if (Backbone.VERSION === "0.9.10") { if (Backbone.VERSION === "0.9.10") {
options.success(model, resp, options); options.success(model, resp, options);
} else { } else {
options.success(resp); options.success(resp);
} }
if (syncDfd) }
if (syncDfd) {
syncDfd.resolve(resp); syncDfd.resolve(resp);
}
} else { } else {
errorMessage = errorMessage ? errorMessage errorMessage = errorMessage ? errorMessage
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment