kolo 0.4.2 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/assets/javascripts/data-access.js.coffee +80 -53
- data/lib/kolo/version.rb +1 -1
- metadata +4 -4
@@ -5,7 +5,7 @@ class ViewModel
|
|
5
5
|
@flashMessage.subscribe (newValue)=>
|
6
6
|
if (newValue? && newValue != '')
|
7
7
|
setTimeout =>
|
8
|
-
@flashMessage
|
8
|
+
@flashMessage ''
|
9
9
|
, 10000
|
10
10
|
return true
|
11
11
|
|
@@ -13,7 +13,7 @@ class ViewModel
|
|
13
13
|
@errorMessage.subscribe (newValue)=>
|
14
14
|
if (newValue? && newValue != '')
|
15
15
|
setTimeout =>
|
16
|
-
@errorMessage
|
16
|
+
@errorMessage ''
|
17
17
|
, 10000
|
18
18
|
return true
|
19
19
|
|
@@ -21,10 +21,6 @@ class ViewModel
|
|
21
21
|
$('body').attr("data-#{name}", value)
|
22
22
|
@loading(/ing$/.test(value))
|
23
23
|
|
24
|
-
class ClientViewModel extends ViewModel
|
25
|
-
|
26
|
-
class AdminViewModel extends ViewModel
|
27
|
-
|
28
24
|
# Construct passing in a name (which is used in notifications) and a URL (eg /api/v1/people.json) that is used to load items (GET) and create them (POST)
|
29
25
|
# Plus an optional pushStateURI; if supplied (for example as /path/to/object) then the pushState is updated to selected().name() with the URI set to /path/to/object/#{selected().id}
|
30
26
|
#
|
@@ -42,24 +38,21 @@ class AdminViewModel extends ViewModel
|
|
42
38
|
#
|
43
39
|
# After instantiation you can also set the following hooks:
|
44
40
|
# db.sortFunction = function(a, b) { ... }
|
45
|
-
# db.onBeforeLoad = function() { ... }
|
46
|
-
# db.onAfterLoad = function() { ... }
|
47
41
|
|
48
42
|
class Db
|
49
|
-
constructor: (@name, url, @pushStateUri)->
|
43
|
+
constructor: (@viewModel, @name, url, @pushStateUri)->
|
50
44
|
@url = ko.observable url
|
45
|
+
@createUrl = ko.observable url
|
51
46
|
@items = ko.observableArray []
|
52
47
|
@selected = ko.observable null
|
53
48
|
@plural = "#{@name}s"
|
54
49
|
@sortFunction = null
|
55
|
-
@onBeforeLoad = null
|
56
|
-
@onAfterLoad = null
|
57
|
-
@onAfterPost = null
|
58
|
-
@onAfterDelete = null
|
59
50
|
@autoLoading = false
|
51
|
+
|
60
52
|
@url.subscribe (newValue)=>
|
61
53
|
if newValue?
|
62
54
|
@load(false)
|
55
|
+
|
63
56
|
if @pushStateUri? && history.pushState?
|
64
57
|
@selected.subscribe (newValue)=>
|
65
58
|
if newValue? and newValue.id?
|
@@ -86,51 +79,47 @@ class Db
|
|
86
79
|
load: (autoReload = false, afterLoad = null)=>
|
87
80
|
return unless @canLoad()
|
88
81
|
if !@selected()
|
89
|
-
viewModel.systemNotification @plural, 'loading'
|
90
|
-
viewModel.loading true
|
91
|
-
@onBeforeLoad() if @onBeforeLoad?
|
82
|
+
@viewModel.systemNotification @plural, 'loading'
|
83
|
+
@viewModel.loading true
|
92
84
|
$.get @url(), (data)=>
|
93
85
|
@doLoad(data)
|
94
|
-
|
95
|
-
|
96
|
-
viewModel.
|
97
|
-
viewModel.systemNotification @plural, 'loaded'
|
86
|
+
afterLoad(data) if afterLoad?
|
87
|
+
@viewModel.loading false
|
88
|
+
@viewModel.systemNotification @plural, 'loaded'
|
98
89
|
if autoReload
|
99
90
|
@autoLoading = true
|
100
91
|
setTimeout =>
|
101
|
-
@load(true)
|
92
|
+
@load(true, afterLoad)
|
102
93
|
, 30000
|
103
94
|
return false
|
104
95
|
|
105
|
-
postTo: (url, data,
|
106
|
-
viewModel.systemNotification @name, 'saving'
|
107
|
-
viewModel.loading true
|
96
|
+
postTo: (url, data, afterPost)->
|
97
|
+
@viewModel.systemNotification @name, 'saving'
|
98
|
+
@viewModel.loading true
|
108
99
|
$.ajax
|
109
100
|
url: url
|
110
101
|
dataType: 'json'
|
111
102
|
type: 'POST'
|
112
103
|
data: data
|
113
104
|
success: (data)=>
|
114
|
-
|
115
|
-
viewModel.loading false
|
116
|
-
|
117
|
-
@onAfterPost(data) if @onAfterPost?
|
105
|
+
afterPost(data) if afterPost?
|
106
|
+
@viewModel.loading false
|
107
|
+
@viewModel.systemNotification @name, 'saved'
|
118
108
|
@load(false)
|
119
|
-
|
120
109
|
return true
|
121
110
|
|
122
111
|
add: =>
|
123
112
|
itemToAdd = @newItem(null)
|
124
113
|
@selected(itemToAdd)
|
125
|
-
viewModel.systemNotification @name, 'new'
|
114
|
+
@viewModel.systemNotification @name, 'new'
|
126
115
|
return itemToAdd
|
127
116
|
|
128
|
-
save: (item)=>
|
129
|
-
|
117
|
+
save: (item, afterSave, onError)=>
|
118
|
+
onError() if !item.valid() && onError?
|
130
119
|
if item.id?
|
131
|
-
@doUpdate item
|
120
|
+
@doUpdate item, afterSave
|
132
121
|
else
|
133
|
-
@doCreate item
|
122
|
+
@doCreate item, afterSave
|
134
123
|
|
135
124
|
doLoad: (data)=>
|
136
125
|
for itemData in @itemDataFrom(data)
|
@@ -139,24 +128,25 @@ class Db
|
|
139
128
|
if @sortFunction?
|
140
129
|
@items.sort @sortFunction
|
141
130
|
|
142
|
-
doCreate: (item)=>
|
143
|
-
viewModel.systemNotification @name, 'saving'
|
144
|
-
viewModel.loading true
|
131
|
+
doCreate: (item, afterSave)=>
|
132
|
+
@viewModel.systemNotification @name, 'saving'
|
133
|
+
@viewModel.loading true
|
145
134
|
$.ajax
|
146
|
-
url: @
|
135
|
+
url: @createUrl()
|
147
136
|
dataType: 'json'
|
148
137
|
type: 'POST'
|
149
138
|
data: @toJS(item)
|
150
139
|
success: (data)=>
|
151
140
|
@selected null
|
152
|
-
|
153
|
-
viewModel.
|
141
|
+
afterSave(item) if afterSave?
|
142
|
+
@viewModel.systemNotification @name, 'saved'
|
143
|
+
@viewModel.loading false
|
154
144
|
@load()
|
155
145
|
return false
|
156
146
|
|
157
|
-
doUpdate: (item)=>
|
158
|
-
viewModel.systemNotification @name, 'saving'
|
159
|
-
viewModel.loading true
|
147
|
+
doUpdate: (item, afterSave)=>
|
148
|
+
@viewModel.systemNotification @name, 'saving'
|
149
|
+
@viewModel.loading true
|
160
150
|
$.ajax
|
161
151
|
url: @urlFor(item)
|
162
152
|
dataType: 'json'
|
@@ -164,24 +154,25 @@ class Db
|
|
164
154
|
data: @toJS(item)
|
165
155
|
success: (data)=>
|
166
156
|
@selected null
|
167
|
-
|
168
|
-
viewModel.
|
157
|
+
afterSave(item) if afterSave?
|
158
|
+
@viewModel.systemNotification @name, 'saved'
|
159
|
+
@viewModel.loading false
|
169
160
|
@load()
|
170
161
|
return false
|
171
162
|
|
172
|
-
doDestroy: (item)=>
|
173
|
-
viewModel.systemNotification @name, 'deleting'
|
174
|
-
viewModel.loading true
|
163
|
+
doDestroy: (item, afterDelete)=>
|
164
|
+
@viewModel.systemNotification @name, 'deleting'
|
165
|
+
@viewModel.loading true
|
175
166
|
$.ajax
|
176
167
|
url: @urlFor(item)
|
177
168
|
dataType: 'json'
|
178
169
|
type: 'DELETE'
|
179
170
|
success: (data)=>
|
180
|
-
viewModel.systemNotification @name, 'deleted'
|
181
171
|
@selected null
|
182
172
|
@items.remove(item)
|
183
|
-
|
184
|
-
@
|
173
|
+
afterDelete() if afterDelete?
|
174
|
+
@viewModel.systemNotification @name, 'deleted'
|
175
|
+
@viewModel.loading false
|
185
176
|
@load()
|
186
177
|
return false
|
187
178
|
|
@@ -200,10 +191,46 @@ class Db
|
|
200
191
|
doDelete: (client)=>
|
201
192
|
null
|
202
193
|
|
194
|
+
flashMessage: (message)=>
|
195
|
+
@viewModel.flashMessage message
|
196
|
+
|
197
|
+
errorMessage: (message)=>
|
198
|
+
@viewModel.errorMessage message
|
199
|
+
|
200
|
+
class Model
|
201
|
+
constructor: (@id, @db)->
|
202
|
+
@editing = ko.observable false
|
203
|
+
@deleting = ko.observable false
|
204
|
+
|
205
|
+
updateAttributes: (data)->
|
206
|
+
null
|
207
|
+
|
208
|
+
valid: ->
|
209
|
+
true
|
210
|
+
|
211
|
+
select: ->
|
212
|
+
@db.selected this
|
213
|
+
|
214
|
+
deselect: ->
|
215
|
+
@deleting false
|
216
|
+
@editing false
|
217
|
+
@db.selected null
|
218
|
+
|
219
|
+
edit: ->
|
220
|
+
@select()
|
221
|
+
@editing true
|
222
|
+
|
223
|
+
save: ->
|
224
|
+
return unless @valid()
|
225
|
+
@deselect()
|
226
|
+
@db.save this
|
227
|
+
|
228
|
+
doDestroy: ->
|
229
|
+
@deselect()
|
230
|
+
@db.doDestroy this
|
203
231
|
|
204
232
|
window.ViewModel = ViewModel
|
205
|
-
window.ClientViewModel = ClientViewModel
|
206
|
-
window.AdminViewModel = AdminViewModel
|
207
233
|
window.Db = Db
|
234
|
+
window.Model = Model
|
208
235
|
|
209
236
|
window.viewModel = new ViewModel # this will probably be overridden by other pages later on
|
data/lib/kolo/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kolo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-06-
|
12
|
+
date: 2013-06-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -93,7 +93,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
93
93
|
version: '0'
|
94
94
|
segments:
|
95
95
|
- 0
|
96
|
-
hash:
|
96
|
+
hash: 100456755
|
97
97
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
98
98
|
none: false
|
99
99
|
requirements:
|
@@ -102,7 +102,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
102
102
|
version: '0'
|
103
103
|
segments:
|
104
104
|
- 0
|
105
|
-
hash:
|
105
|
+
hash: 100456755
|
106
106
|
requirements: []
|
107
107
|
rubyforge_project:
|
108
108
|
rubygems_version: 1.8.24
|