rails-backbone 0.5.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
|
|
1
|
-
// Backbone.js 0.5.
|
1
|
+
// Backbone.js 0.5.1
|
2
2
|
// (c) 2010 Jeremy Ashkenas, DocumentCloud Inc.
|
3
3
|
// Backbone may be freely distributed under the MIT license.
|
4
4
|
// For all details and documentation:
|
@@ -25,7 +25,7 @@
|
|
25
25
|
}
|
26
26
|
|
27
27
|
// Current version of the library. Keep in sync with `package.json`.
|
28
|
-
Backbone.VERSION = '0.5.
|
28
|
+
Backbone.VERSION = '0.5.1';
|
29
29
|
|
30
30
|
// Require Underscore, if we're on the server, and it's not already present.
|
31
31
|
var _ = root._;
|
@@ -143,7 +143,7 @@
|
|
143
143
|
this._changed = false;
|
144
144
|
this._previousAttributes = _.clone(this.attributes);
|
145
145
|
if (options && options.collection) this.collection = options.collection;
|
146
|
-
this.initialize
|
146
|
+
this.initialize(attributes, options);
|
147
147
|
};
|
148
148
|
|
149
149
|
// Attach all inheritable methods to the Model prototype.
|
@@ -582,7 +582,7 @@
|
|
582
582
|
options || (options = {});
|
583
583
|
model = this._prepareModel(model, options);
|
584
584
|
if (!model) return false;
|
585
|
-
var already = this.getByCid(model)
|
585
|
+
var already = this.getByCid(model);
|
586
586
|
if (already) throw new Error(["Can't add the same model to a set twice", already.id]);
|
587
587
|
this._byId[model.id] = model;
|
588
588
|
this._byCid[model.cid] = model;
|
@@ -640,7 +640,7 @@
|
|
640
640
|
// Underscore methods that we want to implement on the Collection.
|
641
641
|
var methods = ['forEach', 'each', 'map', 'reduce', 'reduceRight', 'find', 'detect',
|
642
642
|
'filter', 'select', 'reject', 'every', 'all', 'some', 'any', 'include',
|
643
|
-
'invoke', 'max', 'min', 'sortBy', 'sortedIndex', 'toArray', 'size',
|
643
|
+
'contains', 'invoke', 'max', 'min', 'sortBy', 'sortedIndex', 'toArray', 'size',
|
644
644
|
'first', 'rest', 'last', 'without', 'indexOf', 'lastIndexOf', 'isEmpty'];
|
645
645
|
|
646
646
|
// Mix in each Underscore method as a proxy to `Collection#models`.
|
@@ -738,7 +738,7 @@
|
|
738
738
|
};
|
739
739
|
|
740
740
|
// Cached regex for cleaning hashes.
|
741
|
-
var hashStrip =
|
741
|
+
var hashStrip = /^#*/;
|
742
742
|
|
743
743
|
// Cached regex for detecting MSIE.
|
744
744
|
var isExplorer = /msie [\w.]+/;
|
@@ -801,16 +801,16 @@
|
|
801
801
|
// opened by a non-pushState browser.
|
802
802
|
this.fragment = fragment;
|
803
803
|
historyStarted = true;
|
804
|
-
var
|
805
|
-
var atRoot =
|
804
|
+
var loc = window.location;
|
805
|
+
var atRoot = loc.pathname == this.options.root;
|
806
806
|
if (this._wantsPushState && !this._hasPushState && !atRoot) {
|
807
807
|
this.fragment = this.getFragment(null, true);
|
808
|
-
window.location
|
809
|
-
} else if (this._wantsPushState && this._hasPushState && atRoot &&
|
810
|
-
this.
|
811
|
-
|
812
|
-
return started;
|
808
|
+
window.location.replace(this.options.root + '#' + this.fragment);
|
809
|
+
} else if (this._wantsPushState && this._hasPushState && atRoot && loc.hash) {
|
810
|
+
this.fragment = loc.hash.replace(hashStrip, '');
|
811
|
+
window.history.replaceState({}, document.title, loc.protocol + '//' + loc.host + this.options.root + this.fragment);
|
813
812
|
}
|
813
|
+
return this.loadUrl();
|
814
814
|
},
|
815
815
|
|
816
816
|
// Add a route to be tested when the fragment changes. Routes added later may
|
@@ -847,18 +847,18 @@
|
|
847
847
|
// URL-encoding the fragment in advance. This does not trigger
|
848
848
|
// a `hashchange` event.
|
849
849
|
navigate : function(fragment, triggerRoute) {
|
850
|
-
|
851
|
-
if (this.fragment ==
|
850
|
+
var frag = (fragment || '').replace(hashStrip, '');
|
851
|
+
if (this.fragment == frag || this.fragment == decodeURIComponent(frag)) return;
|
852
852
|
if (this._hasPushState) {
|
853
853
|
var loc = window.location;
|
854
|
-
if (
|
855
|
-
this.fragment =
|
856
|
-
window.history.pushState({}, document.title, loc.protocol + '//' + loc.host +
|
854
|
+
if (frag.indexOf(this.options.root) != 0) frag = this.options.root + frag;
|
855
|
+
this.fragment = frag;
|
856
|
+
window.history.pushState({}, document.title, loc.protocol + '//' + loc.host + frag);
|
857
857
|
} else {
|
858
|
-
window.location.hash = this.fragment =
|
859
|
-
if (this.iframe && (
|
858
|
+
window.location.hash = this.fragment = frag;
|
859
|
+
if (this.iframe && (frag != this.getFragment(this.iframe.location.hash))) {
|
860
860
|
this.iframe.document.open().close();
|
861
|
-
this.iframe.location.hash =
|
861
|
+
this.iframe.location.hash = frag;
|
862
862
|
}
|
863
863
|
}
|
864
864
|
if (triggerRoute) this.loadUrl(fragment);
|
@@ -1143,7 +1143,7 @@
|
|
1143
1143
|
|
1144
1144
|
// Helper function to escape a string for HTML rendering.
|
1145
1145
|
var escapeHTML = function(string) {
|
1146
|
-
return string.replace(/&(?!\w+;|#\d+;|#x[\da-f]+;)/gi, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/'/g, ''').replace(/\//g,'/');
|
1146
|
+
return string.replace(/&(?!\w+;|#\d+;|#x[\da-f]+;)/gi, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/'/g, ''').replace(/\//g,'/');
|
1147
1147
|
};
|
1148
1148
|
|
1149
1149
|
}).call(this);
|
@@ -55,7 +55,8 @@
|
|
55
55
|
module.exports = _;
|
56
56
|
_._ = _;
|
57
57
|
} else {
|
58
|
-
|
58
|
+
// Exported as a string, for Closure Compiler "advanced" mode.
|
59
|
+
root['_'] = _;
|
59
60
|
}
|
60
61
|
|
61
62
|
// Current version.
|
@@ -73,7 +74,7 @@
|
|
73
74
|
obj.forEach(iterator, context);
|
74
75
|
} else if (_.isNumber(obj.length)) {
|
75
76
|
for (var i = 0, l = obj.length; i < l; i++) {
|
76
|
-
if (iterator.call(context, obj[i], i, obj) === breaker) return;
|
77
|
+
if (i in obj && iterator.call(context, obj[i], i, obj) === breaker) return;
|
77
78
|
}
|
78
79
|
} else {
|
79
80
|
for (var key in obj) {
|
@@ -251,6 +252,16 @@
|
|
251
252
|
}), 'value');
|
252
253
|
};
|
253
254
|
|
255
|
+
// Groups the object's values by a criterion produced by an iterator
|
256
|
+
_.groupBy = function(obj, iterator) {
|
257
|
+
var result = {};
|
258
|
+
each(obj, function(value, index) {
|
259
|
+
var key = iterator(value, index);
|
260
|
+
(result[key] || (result[key] = [])).push(value);
|
261
|
+
});
|
262
|
+
return result;
|
263
|
+
};
|
264
|
+
|
254
265
|
// Use a comparator function to figure out at what index an object should
|
255
266
|
// be inserted so as to maintain order. Uses binary search.
|
256
267
|
_.sortedIndex = function(array, obj, iterator) {
|
@@ -267,7 +278,7 @@
|
|
267
278
|
_.toArray = function(iterable) {
|
268
279
|
if (!iterable) return [];
|
269
280
|
if (iterable.toArray) return iterable.toArray();
|
270
|
-
if (_.isArray(iterable)) return iterable;
|
281
|
+
if (_.isArray(iterable)) return slice.call(iterable);
|
271
282
|
if (_.isArguments(iterable)) return slice.call(iterable);
|
272
283
|
return _.values(iterable);
|
273
284
|
};
|
@@ -502,7 +513,7 @@
|
|
502
513
|
var funcs = slice.call(arguments);
|
503
514
|
return function() {
|
504
515
|
var args = slice.call(arguments);
|
505
|
-
for (var i=funcs.length-1; i >= 0; i--) {
|
516
|
+
for (var i = funcs.length - 1; i >= 0; i--) {
|
506
517
|
args = [funcs[i].apply(this, args)];
|
507
518
|
}
|
508
519
|
return args[0];
|
@@ -589,6 +600,7 @@
|
|
589
600
|
if (b._chain) b = b._wrapped;
|
590
601
|
// One of them implements an isEqual()?
|
591
602
|
if (a.isEqual) return a.isEqual(b);
|
603
|
+
if (b.isEqual) return b.isEqual(a);
|
592
604
|
// Check dates' integer values.
|
593
605
|
if (_.isDate(a) && _.isDate(b)) return a.getTime() === b.getTime();
|
594
606
|
// Both are NaN?
|
@@ -630,6 +642,11 @@
|
|
630
642
|
return toString.call(obj) === '[object Array]';
|
631
643
|
};
|
632
644
|
|
645
|
+
// Is a given variable an object?
|
646
|
+
_.isObject = function(obj) {
|
647
|
+
return obj === Object(obj);
|
648
|
+
};
|
649
|
+
|
633
650
|
// Is a given variable an arguments object?
|
634
651
|
_.isArguments = function(obj) {
|
635
652
|
return !!(obj && hasOwnProperty.call(obj, 'callee'));
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: rails-backbone
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.5.
|
5
|
+
version: 0.5.1
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Ryan Fitzgerald
|
@@ -11,7 +11,7 @@ autorequire:
|
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
13
|
|
14
|
-
date: 2011-07-
|
14
|
+
date: 2011-07-08 00:00:00 -04:00
|
15
15
|
default_executable:
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
@@ -21,7 +21,7 @@ dependencies:
|
|
21
21
|
requirements:
|
22
22
|
- - ~>
|
23
23
|
- !ruby/object:Gem::Version
|
24
|
-
version:
|
24
|
+
version: 3.1.0.rc4
|
25
25
|
type: :runtime
|
26
26
|
prerelease: false
|
27
27
|
version_requirements: *id001
|
@@ -32,7 +32,7 @@ dependencies:
|
|
32
32
|
requirements:
|
33
33
|
- - ~>
|
34
34
|
- !ruby/object:Gem::Version
|
35
|
-
version:
|
35
|
+
version: 2.2.0
|
36
36
|
type: :runtime
|
37
37
|
prerelease: false
|
38
38
|
version_requirements: *id002
|
@@ -103,7 +103,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
103
103
|
requirements:
|
104
104
|
- - ">="
|
105
105
|
- !ruby/object:Gem::Version
|
106
|
-
hash: -
|
106
|
+
hash: -4012719302354285017
|
107
107
|
segments:
|
108
108
|
- 0
|
109
109
|
version: "0"
|
@@ -112,7 +112,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
112
112
|
requirements:
|
113
113
|
- - ">="
|
114
114
|
- !ruby/object:Gem::Version
|
115
|
-
hash: -
|
115
|
+
hash: -4012719302354285017
|
116
116
|
segments:
|
117
117
|
- 0
|
118
118
|
version: "0"
|