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
data/chr.gemspec CHANGED
@@ -13,8 +13,8 @@ Gem::Specification.new do |s|
13
13
  s.summary = 'A simple and lightweight library for building data management web apps'
14
14
  s.description = <<-DESC
15
15
  Character is a library written in CoffeeScript with a help of jQuery that allows to
16
- build data management web applications like CMS, news reader, email client etc. in a
17
- very fast and flexible way. It's responsive by default and is data source independent.
16
+ build data management web applications in a fast and flexible way, e.g. CMS, news reader,
17
+ email client etc. It's responsive by default and designed to be data source independent.
18
18
  DESC
19
19
 
20
20
  s.rubyforge_project = 'chr'
data/lib/chr/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Chr
2
- VERSION = "0.1.4"
2
+ VERSION = "0.1.5"
3
3
  end
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "chr",
3
- "version": "0.1.4",
3
+ "version": "0.1.5",
4
4
  "devDependencies": {
5
5
  "grunt": "^0.4.5",
6
6
  "grunt-contrib-clean": "^0.6.0",
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander Kravets
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-12 00:00:00.000000000 Z
11
+ date: 2015-03-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bourbon
@@ -54,8 +54,8 @@ dependencies:
54
54
  version: '3.0'
55
55
  description: |
56
56
  Character is a library written in CoffeeScript with a help of jQuery that allows to
57
- build data management web applications like CMS, news reader, email client etc. in a
58
- very fast and flexible way. It's responsive by default and is data source independent.
57
+ build data management web applications in a fast and flexible way, e.g. CMS, news reader,
58
+ email client etc. It's responsive by default and designed to be data source independent.
59
59
  email: alex@slatestudio.com
60
60
  executables: []
61
61
  extensions: []
@@ -70,27 +70,28 @@ files:
70
70
  - Rakefile
71
71
  - app/assets/javascripts/chr-dist.js
72
72
  - app/assets/javascripts/chr.coffee
73
- - app/assets/javascripts/chr/core/_chr.coffee
74
- - app/assets/javascripts/chr/core/_item.coffee
75
- - app/assets/javascripts/chr/core/_list.coffee
76
- - app/assets/javascripts/chr/core/_listReorder.coffee
77
- - app/assets/javascripts/chr/core/_listScroll.coffee
78
- - app/assets/javascripts/chr/core/_listSearch.coffee
79
- - app/assets/javascripts/chr/core/_module.coffee
80
- - app/assets/javascripts/chr/core/_utils.coffee
81
- - app/assets/javascripts/chr/core/_view.coffee
82
- - app/assets/javascripts/chr/form/_form.coffee
83
- - app/assets/javascripts/chr/form/_inputCheckbox.coffee
84
- - app/assets/javascripts/chr/form/_inputColor.coffee
85
- - app/assets/javascripts/chr/form/_inputFile.coffee
86
- - app/assets/javascripts/chr/form/_inputHidden.coffee
87
- - app/assets/javascripts/chr/form/_inputList.coffee
88
- - app/assets/javascripts/chr/form/_inputSelect.coffee
89
- - app/assets/javascripts/chr/form/_inputString.coffee
90
- - app/assets/javascripts/chr/form/_inputText.coffee
91
- - app/assets/javascripts/chr/form/_nestedForm.coffee
92
- - app/assets/javascripts/chr/store/_store.coffee
93
- - app/assets/javascripts/chr/store/_storeRails.coffee
73
+ - app/assets/javascripts/chr/core/chr.coffee
74
+ - app/assets/javascripts/chr/core/item.coffee
75
+ - app/assets/javascripts/chr/core/list-reorder.coffee
76
+ - app/assets/javascripts/chr/core/list-scroll.coffee
77
+ - app/assets/javascripts/chr/core/list-search.coffee
78
+ - app/assets/javascripts/chr/core/list.coffee
79
+ - app/assets/javascripts/chr/core/module.coffee
80
+ - app/assets/javascripts/chr/core/utils.coffee
81
+ - app/assets/javascripts/chr/core/view.coffee
82
+ - app/assets/javascripts/chr/form/form.coffee
83
+ - app/assets/javascripts/chr/form/input-checkbox.coffee
84
+ - app/assets/javascripts/chr/form/input-color.coffee
85
+ - app/assets/javascripts/chr/form/input-file.coffee
86
+ - app/assets/javascripts/chr/form/input-hidden.coffee
87
+ - app/assets/javascripts/chr/form/input-list.coffee
88
+ - app/assets/javascripts/chr/form/input-select.coffee
89
+ - app/assets/javascripts/chr/form/input-string.coffee
90
+ - app/assets/javascripts/chr/form/input-text.coffee
91
+ - app/assets/javascripts/chr/form/nested-form.coffee
92
+ - app/assets/javascripts/chr/store/store-mongosteen.coffee
93
+ - app/assets/javascripts/chr/store/store-rest.coffee
94
+ - app/assets/javascripts/chr/store/store.coffee
94
95
  - app/assets/javascripts/chr/vendor/jquery.scrollparent.js
95
96
  - app/assets/javascripts/chr/vendor/jquery.textarea_autosize.js
96
97
  - app/assets/javascripts/chr/vendor/jquery.typeahead.js
@@ -1,104 +0,0 @@
1
- # -----------------------------------------------------------------------------
2
- # OBJECT STORE
3
- # -----------------------------------------------------------------------------
4
- class @ObjectStore
5
- constructor: (@config={}) ->
6
- @_initializeDatabase()
7
-
8
- _fetchData: ->
9
- @_data = @config.data
10
-
11
- _initializeDatabase: ->
12
- @_fetchData()
13
-
14
- get: ->
15
- @_data
16
-
17
- _updateDataObject: (value, callback) ->
18
- callback?($.extend(@_data, value))
19
-
20
- update: (id, value, callback) ->
21
- @_updateDataObject(value, callback)
22
-
23
-
24
- # -----------------------------------------------------------------------------
25
- # ARRAY STORE
26
- # -----------------------------------------------------------------------------
27
- class @ArrayStore
28
- _sortData: ->
29
- # http://stackoverflow.com/questions/9796764/how-do-i-sort-an-array-with-coffeescript
30
- if @sortBy
31
- fieldName = @sortBy
32
- direction = if @sortReverse then 1 else -1
33
-
34
- sortBy = (key, a, b, dir) ->
35
- if a[key] > b[key] then return -1*dir
36
- if a[key] < b[key] then return +1*dir
37
- return 0
38
-
39
- @_data = @_data.sort (a, b) -> sortBy(fieldName, a, b, direction)
40
-
41
- _mapData: ->
42
- ( @_map[o._id] = o for o in @_data )
43
-
44
- _addDataObject: (object, callback)->
45
- @_map[object._id] = object
46
- @_data.push(object)
47
- @_sortData()
48
- position = @_getDataObjectPosition(object._id)
49
- $(this).trigger('object_added', { object: object, position: position, callback: callback })
50
-
51
- _resetData: ->
52
- for id, o of @_map
53
- $(this).trigger('object_removed', { object_id: id })
54
- @_map = {}
55
- @_data = []
56
-
57
- _removeDataObject: (id) ->
58
- position = @_getDataObjectPosition(id)
59
- if position >= 0
60
- delete @_data[position]
61
- delete @_map[id]
62
- $(this).trigger('object_removed', { object_id: id })
63
-
64
- _updateDataObject: (id, value, callback) ->
65
- object = $.extend(@get(id), value)
66
- @_sortData()
67
- position = @_getDataObjectPosition(id)
68
- $(this).trigger('object_changed', { object: object, position: position, callback: callback })
69
-
70
- _getDataObjectPosition: (id) ->
71
- ids = []
72
- for o in @_data
73
- if o then ids.push(o._id)
74
- $.inArray id, ids
75
-
76
- constructor: (@config={}) ->
77
- @_map = {}
78
- @_data = []
79
- @_initializeDatabase()
80
-
81
- _initializeDatabase: ->
82
-
83
- off: (eventType) ->
84
- if eventType then $(this).off(eventType) else $(this).off()
85
-
86
- on: (eventType, callback) -> # event types: object_added, object_changed, object_removed
87
- $(this).on eventType, (e, data) -> callback(e, data)
88
- # NOTE: this called once when list subscribes to store updates
89
- if eventType == 'object_added' then @_fetchData()
90
-
91
- _fetchData: ->
92
- if @config.data
93
- @_addDataObject(o) for o in @config.data
94
-
95
- get: (id) -> @_map[id]
96
-
97
- update: (id, value, callback) ->
98
- @_updateDataObject(id, value, callback)
99
-
100
- push: (value, callback) ->
101
- @_addDataObject($.extend({ _id: Date.now() }, value), callback)
102
-
103
- remove: (id) ->
104
- @_removeDataObject(id)
@@ -1,167 +0,0 @@
1
- # -----------------------------------------------------------------------------
2
- # RAILS OBJECT STORE IMPLEMENTATION
3
- # -----------------------------------------------------------------------------
4
- class @RailsObjectStore extends ObjectStore
5
- # _initializeDatabase: ->
6
- # @database = new Firebase("https://#{ @config.dbName }.firebaseio.com/")
7
- # @dataRef = @database.child(@config.path)
8
- # @_fetchData()
9
-
10
- # _fetchData: ->
11
- # @dataRef.once 'value', (dataSnapshot) =>
12
- # @_data = dataSnapshot.val() ? {}
13
-
14
- # update: (id, value, callback) ->
15
- # @dataRef.set value, => @_updateDataObject(value, callback)
16
-
17
-
18
- # -----------------------------------------------------------------------------
19
- # RAILS ARRAY/COLLECTION STORE IMPLEMENTATION
20
- # -----------------------------------------------------------------------------
21
- class @RailsArrayStore extends ArrayStore
22
- _initializeDatabase: ->
23
- @resetData = false
24
- @searchable = @config.searchable ? false
25
- @pagination = @config.pagination ? true
26
- @reorderable = @config.reorderable ? false
27
- @dataFetchLock = false
28
- @pagesCounter = 0
29
- @searchQuery = ''
30
-
31
- # if reorderable we need to set proper config for sorting
32
- if @reorderable
33
- @sortBy = @reorderable.positionFieldName
34
- @sortReverse = @reorderable.sortReverse || false
35
-
36
- # bootstraped data provided
37
- if @config.data
38
- @pagesCounter = 1
39
-
40
- _addDataObjectToTheTop: (object, callback) ->
41
- @_map[object._id] = object
42
- @_data.unshift(object)
43
- position = 0
44
- $(this).trigger('object_added', { object: object, position: position, callback: callback })
45
-
46
- _wrapRailsObject: (object) ->
47
- # NOTE: generate form data object
48
- data = new FormData()
49
- for attr_name, attr_value of object
50
- # NOTE: special case for LIST inputs, values separated with comma
51
- if attr_name.indexOf('[__LIST__') > -1
52
- attr_name = attr_name.replace('__LIST__', '')
53
- values = attr_value.split(',')
54
- for value in values
55
- data.append("#{ @config.resource }#{ attr_name }[]", value)
56
- else
57
- # NOTE: special case for FILE inputs
58
- if attr_name.startsWith('__FILE__')
59
- attr_name = attr_name.replace('__FILE__', '')
60
-
61
- data.append("#{ @config.resource }#{ attr_name }", attr_value)
62
- return data
63
-
64
- _urlWithParams: (url) ->
65
- if @config.urlParams
66
- extraParamString = $.param(@config.urlParams)
67
- if url.indexOf('?') > 0
68
- url = "#{ url }&#{ extraParamString }"
69
- else
70
- url = "#{ url }?#{ extraParamString }"
71
- return url
72
-
73
- _delete: (id, success) ->
74
- @dataFetchLock = true
75
- $.ajax
76
- type: 'DELETE'
77
- url: @_urlWithParams("#{ @config.path }/#{ id }.json")
78
- success: (data, textStatus, jqXHR) =>
79
- @dataFetchLock = false
80
- success?(data)
81
-
82
- _post: (object, success, error) ->
83
- @dataFetchLock = true
84
- $.ajax
85
- type: 'POST'
86
- url: @_urlWithParams("#{ @config.path }.json")
87
- data: @_wrapRailsObject(object)
88
- processData: false
89
- contentType: false
90
- success: (data, textStatus, jqXHR) =>
91
- @dataFetchLock = false
92
- success?(data)
93
- error: (jqXHR, textStatus, errorThrown ) =>
94
- @dataFetchLock = false
95
- error?(jqXHR.responseJSON)
96
-
97
- _put: (id, object, success, error) ->
98
- @dataFetchLock = true
99
- $.ajax
100
- type: 'PUT'
101
- url: @_urlWithParams("#{ @config.path }/#{ id }.json")
102
- data: @_wrapRailsObject(object)
103
- processData: false
104
- contentType: false
105
- success: (data, textStatus, jqXHR) =>
106
- @dataFetchLock = false
107
- success?(data)
108
- error: (jqXHR, textStatus, errorThrown ) =>
109
- @dataFetchLock = false
110
- error?(jqXHR.responseJSON)
111
-
112
- _get: (params, success) ->
113
- @dataFetchLock = true
114
- $.get @_urlWithParams("#{ @config.path }.json"), params, (data) =>
115
- if data.length > 0
116
- @pagesCounter = @pagesCounter + 1
117
- for o in data
118
- @_addDataObject(o)
119
-
120
- @dataFetchLock = false
121
- success?()
122
- $(this).trigger('objects_added')
123
-
124
- #
125
- # PUBLIC
126
- #
127
-
128
- fetchNextPage: (callback) ->
129
- params = {}
130
- if @pagination
131
- params.page = @pagesCounter + 1
132
- params.perPage = _itemsPerPageRequest
133
- if @searchQuery.length > 0
134
- params.search = @searchQuery
135
- @_get(params)
136
-
137
- search: (@searchQuery, callback) ->
138
- @pagesCounter = 0
139
- @_resetData()
140
- @fetchNextPage(callback)
141
-
142
- reset: (callback) ->
143
- @searchQuery = ''
144
- @pagesCounter = 0
145
- @_resetData()
146
- @fetchNextPage(callback)
147
-
148
- update: (id, object, callbacks) ->
149
- @_put id, object, ((data) =>
150
- @_updateDataObject(id, data, callbacks.onSuccess)
151
- ), callbacks.onError
152
-
153
- push: (object, callbacks) ->
154
- @_post object, ((data) =>
155
- if @config.sortBy
156
- @_addDataObject(data, callbacks.onSuccess)
157
- else
158
- @_addDataObjectToTheTop(data, callbacks.onSuccess)
159
- ), callbacks.onError
160
-
161
- remove: (id) ->
162
- @_delete id, (data) =>
163
- @_removeDataObject(id)
164
-
165
-
166
-
167
-