chr 0.1.4 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (32) hide show
  1. checksums.yaml +4 -4
  2. data/Gruntfile.coffee +22 -21
  3. data/app/assets/javascripts/chr-dist.js +307 -262
  4. data/app/assets/javascripts/chr.coffee +22 -21
  5. data/app/assets/javascripts/chr/core/{_chr.coffee → chr.coffee} +0 -0
  6. data/app/assets/javascripts/chr/core/{_item.coffee → item.coffee} +2 -2
  7. data/app/assets/javascripts/chr/core/{_listReorder.coffee → list-reorder.coffee} +1 -1
  8. data/app/assets/javascripts/chr/core/{_listScroll.coffee → list-scroll.coffee} +1 -1
  9. data/app/assets/javascripts/chr/core/{_listSearch.coffee → list-search.coffee} +0 -0
  10. data/app/assets/javascripts/chr/core/{_list.coffee → list.coffee} +2 -0
  11. data/app/assets/javascripts/chr/core/{_module.coffee → module.coffee} +0 -0
  12. data/app/assets/javascripts/chr/core/{_utils.coffee → utils.coffee} +0 -0
  13. data/app/assets/javascripts/chr/core/{_view.coffee → view.coffee} +2 -2
  14. data/app/assets/javascripts/chr/form/{_form.coffee → form.coffee} +0 -0
  15. data/app/assets/javascripts/chr/form/{_inputCheckbox.coffee → input-checkbox.coffee} +0 -0
  16. data/app/assets/javascripts/chr/form/{_inputColor.coffee → input-color.coffee} +0 -0
  17. data/app/assets/javascripts/chr/form/{_inputFile.coffee → input-file.coffee} +0 -0
  18. data/app/assets/javascripts/chr/form/{_inputHidden.coffee → input-hidden.coffee} +0 -0
  19. data/app/assets/javascripts/chr/form/{_inputList.coffee → input-list.coffee} +0 -0
  20. data/app/assets/javascripts/chr/form/{_inputSelect.coffee → input-select.coffee} +0 -0
  21. data/app/assets/javascripts/chr/form/{_inputString.coffee → input-string.coffee} +0 -0
  22. data/app/assets/javascripts/chr/form/{_inputText.coffee → input-text.coffee} +0 -0
  23. data/app/assets/javascripts/chr/form/{_nestedForm.coffee → nested-form.coffee} +0 -0
  24. data/app/assets/javascripts/chr/store/store-mongosteen.coffee +111 -0
  25. data/app/assets/javascripts/chr/store/store-rest.coffee +90 -0
  26. data/app/assets/javascripts/chr/store/store.coffee +274 -0
  27. data/chr.gemspec +2 -2
  28. data/lib/chr/version.rb +1 -1
  29. data/package.json +1 -1
  30. metadata +26 -25
  31. data/app/assets/javascripts/chr/store/_store.coffee +0 -104
  32. data/app/assets/javascripts/chr/store/_storeRails.coffee +0 -167
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8369b23972e8de41bce51eae720e0337ddf96789
4
- data.tar.gz: 1f5044b1a587359fad36ea87ec65603a2d26ba23
3
+ metadata.gz: 9e6bbd63bec5db5e3e4f86134f26d13086c88d15
4
+ data.tar.gz: 041a2c987d9253e3c579fe1f059c3d83a4960763
5
5
  SHA512:
6
- metadata.gz: 090000ec07de297887bf195a842a68ce0f42751c70319430d7f592d169933896d14efe98964e088640525d84be374f8ba4abc2e96886bb3261fc79ead16276cb
7
- data.tar.gz: de89cde6ccc7dd40011abf530f84000b5e3f1a83f7328a978eb9b1fe259d79d6567a45ac58c374911b41bf9171b1ba384a18e95f8cd4d22a92a51ebbcf9ac696
6
+ metadata.gz: 82ac289396d965e246640641926cb853c74622cb300b806bfb9ec5b852c63cb126693b2a042da804527353dd2d5c6cf18d20ca29adf352c07fd3a72cbc545982
7
+ data.tar.gz: edc30ec3c9bba84f3595a8167e44f909276336b3972f552166d63a01b7959f1284ac4e74697b246912f14b7de8bb284415a22c6c0c7e70d2fa9af5fee6a61303
data/Gruntfile.coffee CHANGED
@@ -9,30 +9,31 @@ module.exports = (grunt) ->
9
9
  files:
10
10
  'build/chr.js': [
11
11
  #
12
- 'app/assets/javascripts/chr/core/_item.coffee'
13
- 'app/assets/javascripts/chr/core/_list.coffee'
14
- 'app/assets/javascripts/chr/core/_listSearch.coffee'
15
- 'app/assets/javascripts/chr/core/_listScroll.coffee'
16
- 'app/assets/javascripts/chr/core/_listReorder.coffee'
17
- 'app/assets/javascripts/chr/core/_view.coffee'
18
- 'app/assets/javascripts/chr/core/_module.coffee'
12
+ 'app/assets/javascripts/chr/core/item.coffee'
13
+ 'app/assets/javascripts/chr/core/list.coffee'
14
+ 'app/assets/javascripts/chr/core/list-search.coffee'
15
+ 'app/assets/javascripts/chr/core/list-scroll.coffee'
16
+ 'app/assets/javascripts/chr/core/list-reorder.coffee'
17
+ 'app/assets/javascripts/chr/core/view.coffee'
18
+ 'app/assets/javascripts/chr/core/module.coffee'
19
19
  #
20
- 'app/assets/javascripts/chr/form/_form.coffee'
21
- 'app/assets/javascripts/chr/form/_inputString.coffee'
22
- 'app/assets/javascripts/chr/form/_inputCheckbox.coffee'
23
- 'app/assets/javascripts/chr/form/_inputColor.coffee'
24
- 'app/assets/javascripts/chr/form/_inputFile.coffee'
25
- 'app/assets/javascripts/chr/form/_inputHidden.coffee'
26
- 'app/assets/javascripts/chr/form/_inputList.coffee'
27
- 'app/assets/javascripts/chr/form/_inputSelect.coffee'
28
- 'app/assets/javascripts/chr/form/_inputText.coffee'
29
- 'app/assets/javascripts/chr/form/_nestedForm.coffee'
20
+ 'app/assets/javascripts/chr/form/form.coffee'
21
+ 'app/assets/javascripts/chr/form/input-string.coffee'
22
+ 'app/assets/javascripts/chr/form/input-checkbox.coffee'
23
+ 'app/assets/javascripts/chr/form/input-color.coffee'
24
+ 'app/assets/javascripts/chr/form/input-file.coffee'
25
+ 'app/assets/javascripts/chr/form/input-hidden.coffee'
26
+ 'app/assets/javascripts/chr/form/input-list.coffee'
27
+ 'app/assets/javascripts/chr/form/input-select.coffee'
28
+ 'app/assets/javascripts/chr/form/input-text.coffee'
29
+ 'app/assets/javascripts/chr/form/nested-form.coffee'
30
30
  #
31
- 'app/assets/javascripts/chr/store/_store.coffee'
32
- 'app/assets/javascripts/chr/store/_storeRails.coffee'
31
+ 'app/assets/javascripts/chr/store/store.coffee'
32
+ 'app/assets/javascripts/chr/store/store-rest.coffee'
33
+ 'app/assets/javascripts/chr/store/store-mongosteen.coffee'
33
34
  #
34
- 'app/assets/javascripts/chr/core/_utils.coffee'
35
- 'app/assets/javascripts/chr/core/_chr.coffee'
35
+ 'app/assets/javascripts/chr/core/utils.coffee'
36
+ 'app/assets/javascripts/chr/core/chr.coffee'
36
37
  ]
37
38
 
38
39
  concat:
@@ -2759,9 +2759,9 @@ this.Item = (function() {
2759
2759
  };
2760
2760
 
2761
2761
  Item.prototype.position = function() {
2762
- var fieldName;
2763
- fieldName = this.config.arrayStore.sortBy;
2764
- return this.object[fieldName];
2762
+ var positionFieldName;
2763
+ positionFieldName = this.config.arrayStore.sortBy;
2764
+ return parseFloat(this.object[positionFieldName]);
2765
2765
  };
2766
2766
 
2767
2767
  return Item;
@@ -2865,7 +2865,7 @@ this.List = (function() {
2865
2865
  };
2866
2866
 
2867
2867
  function List(module, name, config1, parentList) {
2868
- var ref;
2868
+ var base, ref;
2869
2869
  this.module = module;
2870
2870
  this.name = name;
2871
2871
  this.config = config1;
@@ -2917,6 +2917,9 @@ this.List = (function() {
2917
2917
  if (this.config.objectStore) {
2918
2918
  this._bindConfigObjectStore();
2919
2919
  }
2920
+ if (typeof (base = this.config).onListInit === "function") {
2921
+ base.onListInit(this);
2922
+ }
2920
2923
  }
2921
2924
 
2922
2925
  List.prototype.selectItem = function(href) {
@@ -3026,7 +3029,7 @@ this._listBindScroll = function(listEl) {
3026
3029
  viewHeight = $container.height();
3027
3030
  if (listHeight < (viewHeight + e.target.scrollTop + 100)) {
3028
3031
  return listEl._loading(function() {
3029
- return arrayStore.fetchNextPage();
3032
+ return arrayStore.load();
3030
3033
  });
3031
3034
  }
3032
3035
  }
@@ -3081,7 +3084,7 @@ this._listBindReorder = function(listEl) {
3081
3084
  objectPositionValue = _getObjectNewPosition(e.target);
3082
3085
  objectId = $(e.target).attr('data-id');
3083
3086
  value = {};
3084
- value["[" + arrayStore.sortBy] = objectPositionValue;
3087
+ value["[" + arrayStore.sortBy] = "" + objectPositionValue;
3085
3088
  arrayStore.update(objectId, value, {
3086
3089
  onSuccess: function(object) {},
3087
3090
  onError: function(errors) {}
@@ -3257,13 +3260,13 @@ this.View = (function() {
3257
3260
  };
3258
3261
 
3259
3262
  View.prototype.onSave = function(e) {
3260
- var serializedObj;
3263
+ var serializedFormObj;
3261
3264
  e.preventDefault();
3262
- serializedObj = this.form.serialize();
3265
+ serializedFormObj = this.form.serialize();
3263
3266
  if (this.object) {
3264
- return this._updateObject(serializedObj);
3267
+ return this._updateObject(serializedFormObj);
3265
3268
  } else {
3266
- return this._createObject(serializedObj);
3269
+ return this._createObject(serializedFormObj);
3267
3270
  }
3268
3271
  };
3269
3272
 
@@ -4610,27 +4613,27 @@ _chrFormInputs['form'] = NestedForm;
4610
4613
  this.ObjectStore = (function() {
4611
4614
  function ObjectStore(config) {
4612
4615
  this.config = config != null ? config : {};
4613
- this._initializeDatabase();
4616
+ this._initialize_database();
4614
4617
  }
4615
4618
 
4616
- ObjectStore.prototype._fetchData = function() {
4619
+ ObjectStore.prototype._update_data_object = function(value, callback) {
4620
+ return typeof callback === "function" ? callback($.extend(this._data, value)) : void 0;
4621
+ };
4622
+
4623
+ ObjectStore.prototype._fetch_data = function() {
4617
4624
  return this._data = this.config.data;
4618
4625
  };
4619
4626
 
4620
- ObjectStore.prototype._initializeDatabase = function() {
4621
- return this._fetchData();
4627
+ ObjectStore.prototype._initialize_database = function() {
4628
+ return this._fetch_data();
4622
4629
  };
4623
4630
 
4624
4631
  ObjectStore.prototype.get = function() {
4625
4632
  return this._data;
4626
4633
  };
4627
4634
 
4628
- ObjectStore.prototype._updateDataObject = function(value, callback) {
4629
- return typeof callback === "function" ? callback($.extend(this._data, value)) : void 0;
4630
- };
4631
-
4632
4635
  ObjectStore.prototype.update = function(id, value, callback) {
4633
- return this._updateDataObject(value, callback);
4636
+ return this._update_data_object(value, callback);
4634
4637
  };
4635
4638
 
4636
4639
  return ObjectStore;
@@ -4638,12 +4641,56 @@ this.ObjectStore = (function() {
4638
4641
  })();
4639
4642
 
4640
4643
  this.ArrayStore = (function() {
4641
- ArrayStore.prototype._sortData = function() {
4642
- var direction, fieldName, sortBy;
4644
+ function ArrayStore(config) {
4645
+ var ref, ref1, ref2, ref3, ref4;
4646
+ this.config = config != null ? config : {};
4647
+ this._map = {};
4648
+ this._data = [];
4649
+ this.sortBy = (ref = this.config.sortBy) != null ? ref : false;
4650
+ this.sortReverse = (ref1 = this.config.sortReverse) != null ? ref1 : false;
4651
+ this.reorderable = (ref2 = this.config.reorderable) != null ? ref2 : false;
4652
+ if (this.sortBy === false) {
4653
+ this.newItemOnTop = (ref3 = this.config.newItemOnTop) != null ? ref3 : true;
4654
+ } else {
4655
+ this.newItemOnTop = (ref4 = this.config.newItemOnTop) != null ? ref4 : false;
4656
+ }
4657
+ this._initialize_reorderable();
4658
+ this._initialize_database();
4659
+ }
4660
+
4661
+ ArrayStore.prototype._initialize_reorderable = function() {
4662
+ var ref;
4663
+ if (this.reorderable) {
4664
+ if (this.reorderable.positionFieldName) {
4665
+ this.sortBy = this.reorderable.positionFieldName;
4666
+ return this.sortReverse = (ref = this.reorderable.sortReverse) != null ? ref : false;
4667
+ } else {
4668
+ console.log('Wrong reordering configuration, missing positionFieldName parameter.');
4669
+ return this.reorderable = false;
4670
+ }
4671
+ }
4672
+ };
4673
+
4674
+ ArrayStore.prototype._initialize_database = function() {};
4675
+
4676
+ ArrayStore.prototype._fetch_data = function() {
4677
+ var i, len, o, ref;
4678
+ if (this.config.data) {
4679
+ ref = this.config.data;
4680
+ for (i = 0, len = ref.length; i < len; i++) {
4681
+ o = ref[i];
4682
+ this._add_data_object(o);
4683
+ }
4684
+ }
4685
+ return $(this).trigger('objects_added');
4686
+ };
4687
+
4688
+ ArrayStore.prototype._sort_data = function() {
4689
+ var direction, fieldName, sortByMethod;
4643
4690
  if (this.sortBy) {
4644
4691
  fieldName = this.sortBy;
4645
4692
  direction = this.sortReverse ? 1 : -1;
4646
- sortBy = function(key, a, b, dir) {
4693
+ sortByMethod = function(key, a, b, dir) {
4647
4694
  if (a[key] > b[key]) {
4648
4695
  return -1 * dir;
4649
4696
  }
@@ -4653,28 +4700,39 @@ this.ArrayStore = (function() {
4653
4700
  return 0;
4654
4701
  };
4655
4702
  return this._data = this._data.sort(function(a, b) {
4656
- return sortBy(fieldName, a, b, direction);
4703
+ return sortByMethod(fieldName, a, b, direction);
4657
4704
  });
4658
4705
  }
4659
4706
  };
4660
4707
 
4661
- ArrayStore.prototype._mapData = function() {
4662
- var i, len, o, ref, results;
4708
+ ArrayStore.prototype._get_data_object_position = function(id) {
4709
+ var i, ids, len, o, ref;
4710
+ ids = [];
4663
4711
  ref = this._data;
4664
- results = [];
4665
4712
  for (i = 0, len = ref.length; i < len; i++) {
4666
4713
  o = ref[i];
4667
- results.push(this._map[o._id] = o);
4714
+ if (o) {
4715
+ ids.push(o._id);
4716
+ }
4668
4717
  }
4669
- return results;
4718
+ return $.inArray(id, ids);
4670
4719
  };
4671
4720
 
4672
- ArrayStore.prototype._addDataObject = function(object, callback) {
4721
+ ArrayStore.prototype._normalize_object_id = function(object) {
4722
+ if (object.id) {
4723
+ object._id = object.id;
4724
+ delete object.id;
4725
+ }
4726
+ return object;
4727
+ };
4728
+
4729
+ ArrayStore.prototype._add_data_object = function(object, callback) {
4673
4730
  var position;
4731
+ object = this._normalize_object_id(object);
4674
4732
  this._map[object._id] = object;
4675
4733
  this._data.push(object);
4676
- this._sortData();
4677
- position = this._getDataObjectPosition(object._id);
4734
+ this._sort_data();
4735
+ position = this._get_data_object_position(object._id);
4678
4736
  return $(this).trigger('object_added', {
4679
4737
  object: object,
4680
4738
  position: position,
@@ -4682,36 +4740,24 @@ this.ArrayStore = (function() {
4682
4740
  });
4683
4741
  };
4684
4742
 
4685
- ArrayStore.prototype._resetData = function() {
4686
- var id, o, ref;
4687
- ref = this._map;
4688
- for (id in ref) {
4689
- o = ref[id];
4690
- $(this).trigger('object_removed', {
4691
- object_id: id
4692
- });
4693
- }
4694
- this._map = {};
4695
- return this._data = [];
4696
- };
4697
-
4698
- ArrayStore.prototype._removeDataObject = function(id) {
4743
+ ArrayStore.prototype._add_data_object_on_top = function(object, callback) {
4699
4744
  var position;
4700
- position = this._getDataObjectPosition(id);
4701
- if (position >= 0) {
4702
- delete this._data[position];
4703
- }
4704
- delete this._map[id];
4705
- return $(this).trigger('object_removed', {
4706
- object_id: id
4745
+ object = this._normalize_object_id(object);
4746
+ this._map[object._id] = object;
4747
+ this._data.unshift(object);
4748
+ position = 0;
4749
+ return $(this).trigger('object_added', {
4750
+ object: object,
4751
+ position: position,
4752
+ callback: callback
4707
4753
  });
4708
4754
  };
4709
4755
 
4710
- ArrayStore.prototype._updateDataObject = function(id, value, callback) {
4756
+ ArrayStore.prototype._update_data_object = function(id, value, callback) {
4711
4757
  var object, position;
4712
4758
  object = $.extend(this.get(id), value);
4713
- this._sortData();
4714
- position = this._getDataObjectPosition(id);
4759
+ this._sort_data();
4760
+ position = this._get_data_object_position(id);
4715
4761
  return $(this).trigger('object_changed', {
4716
4762
  object: object,
4717
4763
  position: position,
@@ -4719,27 +4765,41 @@ this.ArrayStore = (function() {
4719
4765
  });
4720
4766
  };
4721
4767
 
4722
- ArrayStore.prototype._getDataObjectPosition = function(id) {
4723
- var i, ids, len, o, ref;
4724
- ids = [];
4725
- ref = this._data;
4726
- for (i = 0, len = ref.length; i < len; i++) {
4727
- o = ref[i];
4728
- if (o) {
4729
- ids.push(o._id);
4730
- }
4768
+ ArrayStore.prototype._remove_data_object = function(id) {
4769
+ var position;
4770
+ position = this._get_data_object_position(id);
4771
+ if (position >= 0) {
4772
+ delete this._data[position];
4731
4773
  }
4732
- return $.inArray(id, ids);
4774
+ delete this._map[id];
4775
+ return $(this).trigger('object_removed', {
4776
+ object_id: id
4777
+ });
4733
4778
  };
4734
4779
 
4735
- function ArrayStore(config) {
4736
- this.config = config != null ? config : {};
4780
+ ArrayStore.prototype._reset_data = function() {
4781
+ var id, o, ref;
4782
+ ref = this._map;
4783
+ for (id in ref) {
4784
+ o = ref[id];
4785
+ $(this).trigger('object_removed', {
4786
+ object_id: id
4787
+ });
4788
+ }
4737
4789
  this._map = {};
4738
- this._data = [];
4739
- this._initializeDatabase();
4740
- }
4790
+ return this._data = [];
4791
+ };
4741
4792
 
4742
- ArrayStore.prototype._initializeDatabase = function() {};
4793
+ ArrayStore.prototype._parse_form_object = function(serializedFormObject) {
4794
+ var fieldName, key, object, value;
4795
+ object = {};
4796
+ for (key in serializedFormObject) {
4797
+ value = serializedFormObject[key];
4798
+ fieldName = key.replace('[', '').replace(']', '');
4799
+ object[fieldName] = value;
4800
+ }
4801
+ return object;
4802
+ };
4743
4803
 
4744
4804
  ArrayStore.prototype.off = function(eventType) {
4745
4805
  if (eventType) {
@@ -4754,20 +4814,7 @@ this.ArrayStore = (function() {
4754
4814
  return callback(e, data);
4755
4815
  });
4756
4816
  if (eventType === 'object_added') {
4757
- return this._fetchData();
4758
- }
4759
- };
4760
-
4761
- ArrayStore.prototype._fetchData = function() {
4762
- var i, len, o, ref, results;
4763
- if (this.config.data) {
4764
- ref = this.config.data;
4765
- results = [];
4766
- for (i = 0, len = ref.length; i < len; i++) {
4767
- o = ref[i];
4768
- results.push(this._addDataObject(o));
4769
- }
4770
- return results;
4817
+ return this._fetch_data();
4771
4818
  }
4772
4819
  };
4773
4820
 
@@ -4775,18 +4822,33 @@ this.ArrayStore = (function() {
4775
4822
  return this._map[id];
4776
4823
  };
4777
4824
 
4778
- ArrayStore.prototype.update = function(id, value, callback) {
4779
- return this._updateDataObject(id, value, callback);
4825
+ ArrayStore.prototype.push = function(serializedFormObject, callbacks) {
4826
+ var object;
4827
+ object = this._parse_form_object(serializedFormObject);
4828
+ if (!object._id) {
4829
+ object._id = Date.now();
4830
+ }
4831
+ if (this.newItemOnTop) {
4832
+ return this._add_data_object_on_top(object, callbacks.onSuccess);
4833
+ } else {
4834
+ return this._add_data_object(object, callbacks.onSuccess);
4835
+ }
4780
4836
  };
4781
4837
 
4782
- ArrayStore.prototype.push = function(value, callback) {
4783
- return this._addDataObject($.extend({
4784
- _id: Date.now()
4785
- }, value), callback);
4838
+ ArrayStore.prototype.update = function(id, serializedFormObject, callbacks) {
4839
+ var object;
4840
+ object = this._parse_form_object(serializedFormObject);
4841
+ return this._update_data_object(id, object, callbacks.onSuccess);
4786
4842
  };
4787
4843
 
4788
4844
  ArrayStore.prototype.remove = function(id) {
4789
- return this._removeDataObject(id);
4845
+ return this._remove_data_object(id);
4846
+ };
4847
+
4848
+ ArrayStore.prototype.reset = function(callback) {
4849
+ this._sort_data();
4850
+ $(this).trigger('objects_added');
4851
+ return typeof callback === "function" ? callback() : void 0;
4790
4852
  };
4791
4853
 
4792
4854
  return ArrayStore;
@@ -4796,111 +4858,30 @@ this.ArrayStore = (function() {
4796
4858
  var extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
4797
4859
  hasProp = {}.hasOwnProperty;
4798
4860
 
4799
- this.RailsObjectStore = (function(superClass) {
4800
- extend(RailsObjectStore, superClass);
4801
-
4802
- function RailsObjectStore() {
4803
- return RailsObjectStore.__super__.constructor.apply(this, arguments);
4804
- }
4805
-
4806
- return RailsObjectStore;
4807
-
4808
- })(ObjectStore);
4861
+ this.RestArrayStore = (function(superClass) {
4862
+ extend(RestArrayStore, superClass);
4809
4863
 
4810
- this.RailsArrayStore = (function(superClass) {
4811
- extend(RailsArrayStore, superClass);
4812
-
4813
- function RailsArrayStore() {
4814
- return RailsArrayStore.__super__.constructor.apply(this, arguments);
4864
+ function RestArrayStore() {
4865
+ return RestArrayStore.__super__.constructor.apply(this, arguments);
4815
4866
  }
4816
4867
 
4817
- RailsArrayStore.prototype._initializeDatabase = function() {
4818
- var ref, ref1, ref2;
4819
- this.resetData = false;
4820
- this.searchable = (ref = this.config.searchable) != null ? ref : false;
4821
- this.pagination = (ref1 = this.config.pagination) != null ? ref1 : true;
4822
- this.reorderable = (ref2 = this.config.reorderable) != null ? ref2 : false;
4868
+ RestArrayStore.prototype._initialize_database = function() {
4823
4869
  this.dataFetchLock = false;
4824
- this.pagesCounter = 0;
4825
- this.searchQuery = '';
4826
- if (this.reorderable) {
4827
- this.sortBy = this.reorderable.positionFieldName;
4828
- this.sortReverse = this.reorderable.sortReverse || false;
4829
- }
4830
- if (this.config.data) {
4831
- return this.pagesCounter = 1;
4832
- }
4833
- };
4834
-
4835
- RailsArrayStore.prototype._addDataObjectToTheTop = function(object, callback) {
4836
- var position;
4837
- this._map[object._id] = object;
4838
- this._data.unshift(object);
4839
- position = 0;
4840
- return $(this).trigger('object_added', {
4841
- object: object,
4842
- position: position,
4843
- callback: callback
4844
- });
4845
- };
4846
-
4847
- RailsArrayStore.prototype._wrapRailsObject = function(object) {
4848
- var attr_name, attr_value, data, i, len, value, values;
4849
- data = new FormData();
4850
- for (attr_name in object) {
4851
- attr_value = object[attr_name];
4852
- if (attr_name.indexOf('[__LIST__') > -1) {
4853
- attr_name = attr_name.replace('__LIST__', '');
4854
- values = attr_value.split(',');
4855
- for (i = 0, len = values.length; i < len; i++) {
4856
- value = values[i];
4857
- data.append("" + this.config.resource + attr_name + "[]", value);
4858
- }
4859
- } else {
4860
- if (attr_name.startsWith('__FILE__')) {
4861
- attr_name = attr_name.replace('__FILE__', '');
4862
- }
4863
- data.append("" + this.config.resource + attr_name, attr_value);
4864
- }
4865
- }
4866
- return data;
4870
+ return this.ajaxConfig = {};
4867
4871
  };
4868
4872
 
4869
- RailsArrayStore.prototype._urlWithParams = function(url) {
4870
- var extraParamString;
4871
- if (this.config.urlParams) {
4872
- extraParamString = $.param(this.config.urlParams);
4873
- if (url.indexOf('?') > 0) {
4874
- url = url + "&" + extraParamString;
4875
- } else {
4876
- url = url + "?" + extraParamString;
4877
- }
4878
- }
4879
- return url;
4880
- };
4881
-
4882
- RailsArrayStore.prototype._delete = function(id, success) {
4883
- this.dataFetchLock = true;
4884
- return $.ajax({
4885
- type: 'DELETE',
4886
- url: this._urlWithParams(this.config.path + "/" + id + ".json"),
4887
- success: (function(_this) {
4888
- return function(data, textStatus, jqXHR) {
4889
- _this.dataFetchLock = false;
4890
- return typeof success === "function" ? success(data) : void 0;
4891
- };
4892
- })(this)
4893
- });
4873
+ RestArrayStore.prototype._resource_url = function(type, id) {
4874
+ var objectPath;
4875
+ objectPath = id ? "/" + id : '';
4876
+ return "" + this.config.path + objectPath;
4894
4877
  };
4895
4878
 
4896
- RailsArrayStore.prototype._post = function(object, success, error) {
4897
- this.dataFetchLock = true;
4898
- return $.ajax({
4899
- type: 'POST',
4900
- url: this._urlWithParams(this.config.path + ".json"),
4901
- data: this._wrapRailsObject(object),
4902
- processData: false,
4903
- contentType: false,
4879
+ RestArrayStore.prototype._ajax = function(type, id, data, success, error) {
4880
+ var options;
4881
+ options = $.extend(this.ajaxConfig, {
4882
+ url: this._resource_url(type, id),
4883
+ type: type,
4884
+ data: data,
4904
4885
  success: (function(_this) {
4905
4886
  return function(data, textStatus, jqXHR) {
4906
4887
  _this.dataFetchLock = false;
@@ -4914,110 +4895,174 @@ this.RailsArrayStore = (function(superClass) {
4914
4895
  };
4915
4896
  })(this)
4916
4897
  });
4917
- };
4918
-
4919
- RailsArrayStore.prototype._put = function(id, object, success, error) {
4920
4898
  this.dataFetchLock = true;
4921
- return $.ajax({
4922
- type: 'PUT',
4923
- url: this._urlWithParams(this.config.path + "/" + id + ".json"),
4924
- data: this._wrapRailsObject(object),
4925
- processData: false,
4926
- contentType: false,
4927
- success: (function(_this) {
4928
- return function(data, textStatus, jqXHR) {
4929
- _this.dataFetchLock = false;
4930
- return typeof success === "function" ? success(data) : void 0;
4931
- };
4932
- })(this),
4933
- error: (function(_this) {
4934
- return function(jqXHR, textStatus, errorThrown) {
4935
- _this.dataFetchLock = false;
4936
- return typeof error === "function" ? error(jqXHR.responseJSON) : void 0;
4937
- };
4938
- })(this)
4939
- });
4899
+ return $.ajax(options);
4940
4900
  };
4941
4901
 
4942
- RailsArrayStore.prototype._get = function(params, success) {
4943
- this.dataFetchLock = true;
4944
- return $.get(this._urlWithParams(this.config.path + ".json"), params, (function(_this) {
4945
- return function(data) {
4902
+ RestArrayStore.prototype.load = function(success) {
4903
+ return this._ajax('GET', null, {}, ((function(_this) {
4904
+ return function(dataObject) {
4946
4905
  var i, len, o;
4947
- if (data.length > 0) {
4948
- _this.pagesCounter = _this.pagesCounter + 1;
4949
- for (i = 0, len = data.length; i < len; i++) {
4950
- o = data[i];
4951
- _this._addDataObject(o);
4906
+ if (dataObject.length > 0) {
4907
+ for (i = 0, len = dataObject.length; i < len; i++) {
4908
+ o = dataObject[i];
4909
+ _this._add_data_object(o);
4952
4910
  }
4953
4911
  }
4954
- _this.dataFetchLock = false;
4955
4912
  if (typeof success === "function") {
4956
4913
  success();
4957
4914
  }
4958
4915
  return $(_this).trigger('objects_added');
4959
4916
  };
4960
- })(this));
4917
+ })(this)));
4918
+ };
4919
+
4920
+ RestArrayStore.prototype.push = function(serializedFormObject, callbacks) {
4921
+ var obj;
4922
+ obj = this._parse_form_object(serializedFormObject);
4923
+ return this._ajax('POST', null, obj, ((function(_this) {
4924
+ return function(dataObject) {
4925
+ if (_this.newItemOnTop) {
4926
+ return _this._add_data_object_on_top(dataObject, callbacks.onSuccess);
4927
+ } else {
4928
+ return _this._add_data_object(dataObject, callbacks.onSuccess);
4929
+ }
4930
+ };
4931
+ })(this)), callbacks.onError);
4932
+ };
4933
+
4934
+ RestArrayStore.prototype.update = function(id, serializedFormObject, callbacks) {
4935
+ var obj;
4936
+ obj = this._parse_form_object(serializedFormObject);
4937
+ return this._ajax('PUT', id, obj, ((function(_this) {
4938
+ return function(dataObject) {
4939
+ return _this._update_data_object(id, dataObject, callbacks.onSuccess);
4940
+ };
4941
+ })(this)), callbacks.onError);
4942
+ };
4943
+
4944
+ RestArrayStore.prototype.remove = function(id) {
4945
+ return this._ajax('DELETE', id, {}, ((function(_this) {
4946
+ return function() {
4947
+ return _this._remove_data_object(id);
4948
+ };
4949
+ })(this)));
4950
+ };
4951
+
4952
+ RestArrayStore.prototype.reset = function(callback) {
4953
+ this._reset_data();
4954
+ return this.load(callback);
4955
+ };
4956
+
4957
+ return RestArrayStore;
4958
+
4959
+ })(ArrayStore);
4960
+
4961
+ var extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
4962
+ hasProp = {}.hasOwnProperty;
4963
+
4964
+ this.MongosteenArrayStore = (function(superClass) {
4965
+ extend(MongosteenArrayStore, superClass);
4966
+
4967
+ function MongosteenArrayStore() {
4968
+ return MongosteenArrayStore.__super__.constructor.apply(this, arguments);
4969
+ }
4970
+
4971
+ MongosteenArrayStore.prototype._initialize_database = function() {
4972
+ var ref, ref1;
4973
+ this.dataFetchLock = false;
4974
+ this.ajaxConfig = {
4975
+ processData: false,
4976
+ contentType: false
4977
+ };
4978
+ this.searchable = (ref = this.config.searchable) != null ? ref : false;
4979
+ this.searchQuery = '';
4980
+ this.pagination = (ref1 = this.config.pagination) != null ? ref1 : true;
4981
+ this.pagesCounter = 0;
4982
+ if (this.config.data) {
4983
+ return this.pagination = false;
4984
+ }
4985
+ };
4986
+
4987
+ MongosteenArrayStore.prototype._resource_url = function(type, id) {
4988
+ var extraParamsString, objectPath, url;
4989
+ objectPath = id ? "/" + id : '';
4990
+ url = "" + this.config.path + objectPath + ".json";
4991
+ if (this.config.urlParams) {
4992
+ extraParamsString = $.param(this.config.urlParams);
4993
+ url = url + "?" + extraParamsString;
4994
+ }
4995
+ return url;
4996
+ };
4997
+
4998
+ MongosteenArrayStore.prototype._parse_form_object = function(serializedFormObject) {
4999
+ var attr_name, attr_value, formDataObject, i, len, value, values;
5000
+ formDataObject = new FormData();
5001
+ for (attr_name in serializedFormObject) {
5002
+ attr_value = serializedFormObject[attr_name];
5003
+ if (attr_name.indexOf('[__LIST__') > -1) {
5004
+ attr_name = attr_name.replace('__LIST__', '');
5005
+ values = attr_value.split(',');
5006
+ for (i = 0, len = values.length; i < len; i++) {
5007
+ value = values[i];
5008
+ formDataObject.append("" + this.config.resource + attr_name + "[]", value);
5009
+ }
5010
+ } else {
5011
+ if (attr_name.startsWith('__FILE__')) {
5012
+ attr_name = attr_name.replace('__FILE__', '');
5013
+ }
5014
+ formDataObject.append("" + this.config.resource + attr_name, attr_value);
5015
+ }
5016
+ }
5017
+ return formDataObject;
4961
5018
  };
4962
5019
 
4963
- RailsArrayStore.prototype.fetchNextPage = function(callback) {
5020
+ MongosteenArrayStore.prototype.load = function(success) {
4964
5021
  var params;
4965
5022
  params = {};
4966
5023
  if (this.pagination) {
4967
5024
  params.page = this.pagesCounter + 1;
4968
- params.perPage = _itemsPerPageRequest;
5025
+ params.perPage = typeof _itemsPerPageRequest !== "undefined" && _itemsPerPageRequest !== null ? _itemsPerPageRequest : 20;
4969
5026
  }
4970
- if (this.searchQuery.length > 0) {
5027
+ if (this.searchable && this.searchQuery.length > 0) {
4971
5028
  params.search = this.searchQuery;
4972
5029
  }
4973
- return this._get(params);
5030
+ params = $.param(params);
5031
+ return this._ajax('GET', null, params, ((function(_this) {
5032
+ return function(dataObject) {
5033
+ var i, len, o;
5034
+ if (dataObject.length > 0) {
5035
+ _this.pagesCounter = _this.pagesCounter + 1;
5036
+ for (i = 0, len = dataObject.length; i < len; i++) {
5037
+ o = dataObject[i];
5038
+ _this._add_data_object(o);
5039
+ }
5040
+ }
5041
+ if (typeof success === "function") {
5042
+ success();
5043
+ }
5044
+ return $(_this).trigger('objects_added');
5045
+ };
5046
+ })(this)));
4974
5047
  };
4975
5048
 
4976
- RailsArrayStore.prototype.search = function(searchQuery, callback) {
5049
+ MongosteenArrayStore.prototype.search = function(searchQuery, callback) {
4977
5050
  this.searchQuery = searchQuery;
4978
5051
  this.pagesCounter = 0;
4979
- this._resetData();
4980
- return this.fetchNextPage(callback);
5052
+ this._reset_data();
5053
+ return this.load(callback);
4981
5054
  };
4982
5055
 
4983
- RailsArrayStore.prototype.reset = function(callback) {
5056
+ MongosteenArrayStore.prototype.reset = function(callback) {
4984
5057
  this.searchQuery = '';
4985
5058
  this.pagesCounter = 0;
4986
- this._resetData();
4987
- return this.fetchNextPage(callback);
5059
+ this._reset_data();
5060
+ return this.load(callback);
4988
5061
  };
4989
5062
 
4990
- RailsArrayStore.prototype.update = function(id, object, callbacks) {
4991
- return this._put(id, object, ((function(_this) {
4992
- return function(data) {
4993
- return _this._updateDataObject(id, data, callbacks.onSuccess);
4994
- };
4995
- })(this)), callbacks.onError);
4996
- };
5063
+ return MongosteenArrayStore;
4997
5064
 
4998
- RailsArrayStore.prototype.push = function(object, callbacks) {
4999
- return this._post(object, ((function(_this) {
5000
- return function(data) {
5001
- if (_this.config.sortBy) {
5002
- return _this._addDataObject(data, callbacks.onSuccess);
5003
- } else {
5004
- return _this._addDataObjectToTheTop(data, callbacks.onSuccess);
5005
- }
5006
- };
5007
- })(this)), callbacks.onError);
5008
- };
5009
-
5010
- RailsArrayStore.prototype.remove = function(id) {
5011
- return this._delete(id, (function(_this) {
5012
- return function(data) {
5013
- return _this._removeDataObject(id);
5014
- };
5015
- })(this));
5016
- };
5017
-
5018
- return RailsArrayStore;
5019
-
5020
- })(ArrayStore);
5065
+ })(RestArrayStore);
5021
5066
 
5022
5067
  this._last = function(array) {
5023
5068
  return array[array.length - 1];