js_stack 0.5.7 → 0.6.0

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.
Files changed (23) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +12 -0
  3. data/README.md +7 -7
  4. data/lib/js_stack/version.rb +1 -1
  5. data/vendor/assets/javascripts/js_stack/base/marionette/{1.8.0.js → 1.8.3.js} +173 -8
  6. data/vendor/assets/javascripts/js_stack/base/marionette.js +1 -1
  7. data/vendor/assets/javascripts/js_stack/plugins/backbone/stickit/0.8.0.js +595 -0
  8. data/vendor/assets/javascripts/js_stack/plugins/backbone.stickit.js +1 -1
  9. metadata +4 -17
  10. data/vendor/assets/javascripts/js_stack/base/backbone/1.1.0.js +0 -1581
  11. data/vendor/assets/javascripts/js_stack/base/backbone/1.1.1.js +0 -1609
  12. data/vendor/assets/javascripts/js_stack/base/marionette/1.6.2.js +0 -2555
  13. data/vendor/assets/javascripts/js_stack/base/marionette/1.7.0.js +0 -2746
  14. data/vendor/assets/javascripts/js_stack/base/marionette/1.7.3.js +0 -2765
  15. data/vendor/assets/javascripts/js_stack/plugins/backbone/associations/0.5.1.js +0 -533
  16. data/vendor/assets/javascripts/js_stack/plugins/backbone/associations/0.5.4.js +0 -574
  17. data/vendor/assets/javascripts/js_stack/plugins/backbone/mutators/0.4.1.js +0 -207
  18. data/vendor/assets/javascripts/js_stack/plugins/backbone/pageable/1.4.5.js +0 -1318
  19. data/vendor/assets/javascripts/js_stack/plugins/backbone/virtualcollection/0.4.11.js +0 -345
  20. data/vendor/assets/javascripts/js_stack/plugins/backbone/virtualcollection/0.4.12.js +0 -351
  21. data/vendor/assets/javascripts/js_stack/plugins/backbone/virtualcollection/0.4.14.js +0 -398
  22. data/vendor/assets/javascripts/js_stack/plugins/backbone/virtualcollection/0.4.5.js +0 -293
  23. data/vendor/assets/javascripts/js_stack/plugins/backbone/virtualcollection/0.4.8.js +0 -340
@@ -1,340 +0,0 @@
1
- (function (global) {
2
- 'use strict';
3
-
4
- var _ = global._, Backbone = global.Backbone, vc, iterators, proxy;
5
-
6
- if ((!_ || !Backbone) && (typeof require !== 'undefined')) {
7
- _ = require('underscore');
8
- Backbone = require('backbone');
9
- }
10
-
11
- iterators = ['forEach', 'each', 'map', 'collect', 'reduce', 'foldl',
12
- 'inject', 'reduceRight', 'foldr', 'find', 'detect', 'filter', 'select',
13
- 'reject', 'every', 'all', 'some', 'any', 'include', 'contains', 'invoke',
14
- 'max', 'min', 'toArray', 'size', 'first', 'head', 'take', 'initial', 'rest',
15
- 'tail', 'drop', 'last', 'without', 'indexOf', 'shuffle', 'lastIndexOf',
16
- 'isEmpty', 'chain'];
17
-
18
- proxy = ['add', 'remove'];
19
-
20
- /**
21
- * Constructor for the virtual collection
22
- * @param {Collection} collection
23
- * @param {Function|Object} filter function, or hash of properties to match
24
- * @param {Object} options
25
- * @param {[Function|Object]} filter function, or hash of properties to match
26
- * @param {[Function|String]} comparator
27
- */
28
- function VirtualCollection(collection, options) {
29
- this.collection = collection;
30
- options = options || {};
31
- this.comparator = options.comparator;
32
-
33
- _.bindAll(this, 'each', 'map', 'get', 'at', 'indexOf', 'sort', 'closeWith',
34
- '_rebuildIndex', '_models', '_onAdd', '_onRemove', '_onChange', '_onReset',
35
- '_indexAdd', '_indexRemove');
36
-
37
- // set filter
38
- this.filterFunction = VirtualCollection.buildFilter(options.filter);
39
-
40
- // build index
41
- this._rebuildIndex();
42
-
43
- this.listenTo(this.collection, 'add', this._onAdd, this);
44
- this.listenTo(this.collection, 'remove', this._onRemove, this);
45
- this.listenTo(this.collection, 'change', this._onChange, this);
46
- this.listenTo(this.collection, 'reset', this._onReset, this);
47
-
48
- if (options.close_with) {
49
- this.closeWith(options.close_with);
50
- }
51
- }
52
-
53
- /**
54
- * [static] Returns a function that returns true for models that meet the specified conditions
55
- * @param {Object} hash of model attributes or {Function} filter
56
- * @return {Function} filtering function
57
- */
58
- VirtualCollection.buildFilter = function (filter) {
59
- if (!filter) {
60
- // If no filter is passed, all models should be added
61
- return function () { return true; };
62
- } else if (_.isFunction(filter)) {
63
- // If filter is passed a function, just return it
64
- return filter;
65
- } else if (filter.constructor === Object) {
66
- // If filter is a hash of attributes, return a function that checks each of them
67
- return function (model) {
68
- return !Boolean(_(Object.keys(filter)).detect(function (key) {
69
- return model.get(key) !== filter[key];
70
- }));
71
- };
72
- }
73
- };
74
-
75
- vc = VirtualCollection.prototype;
76
-
77
-
78
- // mix in Underscore method as proxies
79
- _.each(iterators, function (method) {
80
- vc[method] = function () {
81
- var args = Array.prototype.slice.call(arguments);
82
- args.unshift(this._models());
83
- return _[method].apply(_, args);
84
- };
85
- });
86
-
87
- // proxy functions to parent
88
- _.each(proxy, function (method) {
89
- vc[method] = function () {
90
- var args = Array.prototype.slice.call(arguments);
91
- return this.collection[method].apply(this.collection, args);
92
- };
93
- });
94
-
95
- /**
96
- * Returns a model if it belongs to the virtual collection
97
- * @param {String} id
98
- * @return {Model}
99
- */
100
- vc.get = function (id) {
101
- var model = this.collection.get(id);
102
- if (model && this.filterFunction(model)) {
103
- return model;
104
- }
105
- };
106
-
107
- /**
108
- * Returns the model at the position in the index
109
- * @param {Number} index
110
- * @return {Model}
111
- */
112
- vc.at = function (index) {
113
- return this.collection.get(this.index[index]);
114
- };
115
-
116
- vc.where = Backbone.Collection.prototype.where;
117
- vc.findWhere = Backbone.Collection.prototype.findWhere;
118
-
119
- /**
120
- * Returns the index of the model in the virtual collection
121
- * @param {Model} model
122
- * @return {Number} index
123
- */
124
- vc.indexOf = function (model) {
125
- return this.index.indexOf(model.cid);
126
- };
127
-
128
- /**
129
- * Returns a JSON representation of all the models in the index
130
- * @return {Array} JSON models
131
- */
132
- vc.toJSON = function() {
133
- return _.map(this._models(), function(model) {
134
- return model.toJSON();
135
- });
136
- };
137
-
138
- /**
139
- * Sorts the models in the virtual collection
140
- *
141
- * You only need to trigger this manually if you change the comparator
142
- * @param {Object} options
143
- * @return {VirtualCollection}
144
- */
145
- vc.sort = function (options) {
146
- var self = this;
147
- if (!this.comparator) throw new Error('Cannot sort a set without a comparator');
148
- options = options || {};
149
-
150
- // Run sort based on type of `comparator`.
151
- if (_.isString(this.comparator)) {
152
- this.index = _.sortBy(this.index, function (cid) {
153
- var model = this.collection.get(cid);
154
- return model.get(this.comparator);
155
- }, this);
156
- } else if (this.comparator.length === 1) {
157
- this.index = _.sortBy(this.index, function (cid) {
158
- var model = this.collection.get(cid);
159
- return this.comparator.call(self, model);
160
- }, this);
161
- } else {
162
- this.index.sort(function (cid1, cid2) {
163
- var model1 = self.collection.get(cid1),
164
- model2 = self.collection.get(cid2);
165
-
166
- return self.comparator.call(self, model1, model2);
167
- });
168
- }
169
-
170
- if (!options.silent) this.trigger('sort', this, options);
171
- return this;
172
- };
173
-
174
- /**
175
- * Change the filter and update collection
176
- *
177
- * @param {Object} hash of model attributes or {Function} filter
178
- * @return {VirtualCollection}
179
- */
180
-
181
- vc.updateFilter = function(filter){
182
- // Reset the filter
183
- this.filterFunction = VirtualCollection.buildFilter(filter);
184
-
185
- // Update the models
186
- this._rebuildIndex();
187
-
188
- // Trigger filter event
189
- this.trigger('filter', this, filter);
190
-
191
- return this;
192
- };
193
-
194
- /**
195
- * A utility function for unbiding listeners
196
- * @param {View} view (marionette view)
197
- */
198
- vc.closeWith = function (view) {
199
- view.on('close', function () {
200
- this.stopListening();
201
- }, this);
202
- };
203
-
204
- // private
205
-
206
- vc._rebuildIndex = function () {
207
- this.index = [];
208
- this.collection.each(function (model, index) {
209
- if (this.filterFunction(model, index)) {
210
- this.index.push(model.cid);
211
- }
212
- }, this);
213
- if (this.comparator) {
214
- this.sort({silent: true});
215
- }
216
- this.length = this.index.length;
217
- };
218
-
219
- /**
220
- * Returns an array of models in the virtual collection
221
- * @return {Array}
222
- */
223
- vc._models = function () {
224
- return _.map(this.index, function (cid) {
225
- return this.collection.get(cid);
226
- }, this);
227
- };
228
-
229
- /**
230
- * Handles the collection:add event
231
- * May update the virtual collection's index
232
- * @param {Model} model
233
- * @return {undefined}
234
- */
235
- vc._onAdd = function (model, collection, options) {
236
- if (this.filterFunction(model)) {
237
- this._indexAdd(model);
238
- this.trigger('add', model, this, options);
239
- }
240
- };
241
-
242
- /**
243
- * Handles the collection:remove event
244
- * May update the virtual collection's index
245
- * @param {Model} model
246
- * @return {undefined}
247
- */
248
- vc._onRemove = function (model, collection, options) {
249
- if (_(this.index).contains(model.cid)) {
250
- this._indexRemove(model);
251
- this.trigger('remove', model, this, options);
252
- }
253
- };
254
-
255
- /**
256
- * Handles the collection:change event
257
- * May update the virtual collection's index
258
- * @param {Model} model
259
- * @param {Object} object
260
- */
261
- vc._onChange = function (model, options) {
262
- var already_here = _.contains(this.index, model.cid);
263
- if (this.filterFunction(model)) {
264
- if (already_here) {
265
- this.trigger('change', model, this, options);
266
- } else {
267
- this._indexAdd(model);
268
- this.trigger('add', model, this, options);
269
- }
270
- } else {
271
- if (already_here) {
272
- this._indexRemove(model);
273
- this.trigger('remove', model, this, options);
274
- }
275
- }
276
- };
277
-
278
- /**
279
- * Handles the collection:reset event
280
- * @param {Collection} collection
281
- * @param {Object} object
282
- */
283
- vc._onReset = function (collection, options) {
284
- this._rebuildIndex();
285
- this.trigger('reset', this, options);
286
- };
287
-
288
- /**
289
- * Adds a model to the virtual collection index
290
- * Inserting it in the correct order
291
- * @param {Model} model
292
- * @return {undefined}
293
- */
294
- vc._indexAdd = function (model) {
295
- if (this.index.indexOf(model.cid) === -1) {
296
-
297
- if (!this.comparator) { // order inherit's from parent collection
298
- var i, orig_index = this.collection.indexOf(model);
299
- for (i = 0; i < this.length; i++) {
300
- if (this.collection.indexOf(this.collection.get(this.index[i])) > orig_index) {
301
- break;
302
- }
303
- }
304
- this.index.splice(i, 0, model.cid);
305
-
306
- } else { // the virtual collection has a custom order
307
- this.index.push(model.cid);
308
- this.sort({silent: true});
309
- }
310
- this.length = this.index.length;
311
- }
312
- };
313
-
314
- /**
315
- * Removes a model from the virtual collection index
316
- * @param {Model} model
317
- * @return {undefined}
318
- */
319
- vc._indexRemove = function (model) {
320
- var i = this.index.indexOf(model.cid);
321
- if (i !== -1) {
322
- this.index.splice(i, 1);
323
- this.length = this.index.length;
324
- }
325
- };
326
-
327
- if (!_ && (typeof require !== 'undefined')) {
328
- _ = require('underscore');
329
- }
330
- if (!Backbone && (typeof require !== 'undefined')) {
331
- Backbone = require('backbone');
332
- }
333
- if (typeof module !== 'undefined' && module.exports) {
334
- module.exports = VirtualCollection;
335
- }
336
- _.extend(vc, Backbone.Events);
337
-
338
- Backbone.VirtualCollection = VirtualCollection;
339
-
340
- }(this));