joosy 1.0.0.RC4 → 1.0.0.RC5

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 (46) hide show
  1. data/Gemfile +1 -1
  2. data/Gemfile.lock +99 -82
  3. data/README.md +1 -1
  4. data/app/assets/javascripts/joosy/core/application.js.coffee +2 -2
  5. data/app/assets/javascripts/joosy/core/form.js.coffee +35 -22
  6. data/app/assets/javascripts/joosy/core/helpers/form.js.coffee +38 -9
  7. data/app/assets/javascripts/joosy/core/helpers/view.js.coffee +10 -4
  8. data/app/assets/javascripts/joosy/core/helpers/widgets.js.coffee +6 -1
  9. data/app/assets/javascripts/joosy/core/joosy.js.coffee +5 -3
  10. data/app/assets/javascripts/joosy/core/layout.js.coffee +5 -5
  11. data/app/assets/javascripts/joosy/core/modules/events.js.coffee +28 -10
  12. data/app/assets/javascripts/joosy/core/modules/log.js.coffee +1 -1
  13. data/app/assets/javascripts/joosy/core/modules/module.js.coffee +2 -2
  14. data/app/assets/javascripts/joosy/core/modules/time_manager.js.coffee +1 -1
  15. data/app/assets/javascripts/joosy/core/page.js.coffee +1 -1
  16. data/app/assets/javascripts/joosy/core/resource/collection.js.coffee +18 -18
  17. data/app/assets/javascripts/joosy/core/resource/generic.js.coffee +21 -19
  18. data/app/assets/javascripts/joosy/core/resource/rest.js.coffee +26 -14
  19. data/app/assets/javascripts/joosy/core/resource/rest_collection.js.coffee +2 -2
  20. data/app/assets/javascripts/joosy/core/router.js.coffee +2 -2
  21. data/app/assets/javascripts/joosy/core/widget.js.coffee +3 -0
  22. data/app/assets/javascripts/joosy/preloaders/caching.js.coffee +7 -7
  23. data/app/assets/javascripts/joosy/preloaders/inline.js.coffee +5 -5
  24. data/lib/joosy/rails/version.rb +1 -1
  25. data/lib/rails/generators/joosy/templates/app/helpers/application.js.coffee +2 -2
  26. data/lib/rails/generators/joosy/templates/app/pages/welcome/index.js.coffee +5 -5
  27. data/lib/rails/generators/joosy/templates/app/routes.js.coffee +2 -2
  28. data/lib/rails/generators/joosy/templates/preload.html.slim +19 -0
  29. data/lib/rails/resources_with_joosy.rb +2 -2
  30. data/spec/javascripts/helpers/spec_helper.js.coffee +19 -0
  31. data/spec/javascripts/joosy/core/form_spec.js.coffee +36 -16
  32. data/spec/javascripts/joosy/core/helpers/forms_spec.js.coffee +28 -23
  33. data/spec/javascripts/joosy/core/helpers/widgets_spec.js.coffee +17 -0
  34. data/spec/javascripts/joosy/core/joosy_spec.js.coffee +2 -0
  35. data/spec/javascripts/joosy/core/modules/events_spec.js.coffee +35 -1
  36. data/spec/javascripts/joosy/core/modules/renderer_spec.js.coffee +29 -29
  37. data/spec/javascripts/joosy/core/page_spec.js.coffee +2 -2
  38. data/spec/javascripts/joosy/core/resource/collection_spec.js.coffee +14 -9
  39. data/spec/javascripts/joosy/core/resource/generic_spec.js.coffee +19 -19
  40. data/spec/javascripts/joosy/core/resource/rest_collection_spec.js.coffee +0 -1
  41. data/spec/javascripts/joosy/core/resource/rest_spec.js.coffee +9 -3
  42. data/spec/javascripts/joosy/preloaders/caching_spec.js.coffee +7 -7
  43. data/spec/javascripts/joosy/preloaders/inline_spec.js.coffee +5 -5
  44. data/spec/javascripts/support/sinon-1.3.1.js +6 -6
  45. data/spec/javascripts/support/sinon-ie-1.3.1.js +5 -5
  46. metadata +22 -20
@@ -48,11 +48,11 @@ class Joosy.Layout extends Joosy.Module
48
48
  # @beforePaint (complete) ->
49
49
  # if !@data # checks if parallel fetching finished
50
50
  # $('preloader').slideDown -> complete()
51
- #
51
+ #
52
52
  #
53
53
  @beforePaint: (callback) ->
54
54
  @::__beforePaint = callback
55
-
55
+
56
56
  #
57
57
  # Sets the method which will controll the painting proccess.
58
58
  #
@@ -86,7 +86,7 @@ class Joosy.Layout extends Joosy.Module
86
86
  #
87
87
  @erase: (callback) ->
88
88
  @::__erase = callback
89
-
89
+
90
90
  #
91
91
  # Sets the method which will controll the data fetching proccess.
92
92
  #
@@ -101,7 +101,7 @@ class Joosy.Layout extends Joosy.Module
101
101
  # $.get '/rumbas', (@data) => complete()
102
102
  #
103
103
  @fetch: (callback) ->
104
- @::__fetch = (complete) ->
104
+ @::__fetch = (complete) ->
105
105
  @data = {}
106
106
  callback.call this, =>
107
107
  @dataFetched = true
@@ -112,7 +112,7 @@ class Joosy.Layout extends Joosy.Module
112
112
  #
113
113
  data: false
114
114
  dataFetched: false
115
-
115
+
116
116
  #
117
117
  # @param [Hash] params List of route params
118
118
  #
@@ -12,7 +12,8 @@ Joosy.Modules.Events =
12
12
  # @param [Function] callback Action to run when all events were triggered at least once
13
13
  #
14
14
  wait: (events, callback) ->
15
- events = events.split /\s+/ if Object.isString events
15
+ events = @__splitEvents events
16
+ @__validateEvents events
16
17
 
17
18
  @__oneShotEvents ||= []
18
19
  @__oneShotEvents.push [events, callback]
@@ -24,7 +25,8 @@ Joosy.Modules.Events =
24
25
  # @param [Function] callback Action to run on trigger
25
26
  #
26
27
  bind: (events, callback) ->
27
- events = events.split /\s+/
28
+ events = @__splitEvents events
29
+ @__validateEvents events
28
30
 
29
31
  @__boundEvents ||= []
30
32
  @__boundEvents.push [events, callback]
@@ -61,7 +63,7 @@ Joosy.Modules.Events =
61
63
  for [events, callback] in @__boundEvents
62
64
  if events.has event
63
65
  callback data...
64
-
66
+
65
67
  #
66
68
  # Runs set of callbacks finializing with result callback
67
69
  #
@@ -77,13 +79,29 @@ Joosy.Modules.Events =
77
79
  synchronize: (block) ->
78
80
  context = new Joosy.Modules.Events.SynchronizationContext(this)
79
81
  block.call(this, context)
80
-
81
- @wait context.expectations, => context.after.call(this)
82
82
 
83
- context.actions.each (data) =>
84
- data[0].call this, =>
85
- @trigger data[1]
86
-
83
+ if context.expectations.length == 0
84
+ context.after.call(this)
85
+ else
86
+ @wait context.expectations, => context.after.call(this)
87
+ context.actions.each (data) =>
88
+ data[0].call this, =>
89
+ @trigger data[1]
90
+
91
+ __splitEvents: (events) ->
92
+ if Object.isString events
93
+ if events.isBlank()
94
+ []
95
+ else
96
+ events.trim().split /\s+/
97
+ else
98
+ events
99
+
100
+ __validateEvents: (events) ->
101
+ unless Object.isArray(events) && events.length > 0
102
+ throw new Error "#{Joosy.Module.__className @}> bind invalid events: #{events}"
103
+
104
+
87
105
  #
88
106
  # Internal representation of {Joosy.Modules.Events.synchronize} context
89
107
  #
@@ -114,7 +132,7 @@ class Joosy.Modules.Events.SynchronizationContext
114
132
  @actions.push [action, event]
115
133
 
116
134
  #
117
- # Registers finalizer: the action that will be called when all do-functions
135
+ # Registers finalizer: the action that will be called when all do-functions
118
136
  # marked themselves as complete.
119
137
  #
120
138
  # @param [Function] after Function to call.
@@ -4,7 +4,7 @@
4
4
  # @mixin
5
5
  #
6
6
  Joosy.Modules.Log =
7
-
7
+
8
8
  #
9
9
  # Checks if console is available and proxies given arguments directly to `console.log`
10
10
  #
@@ -1,7 +1,7 @@
1
1
  moduleKeywords = ['included', 'extended']
2
2
 
3
3
  #
4
- # Base Joosy class extending Coffee class with module-like injections
4
+ # Base Joosy class extending Coffee class with module-like injections
5
5
  # and other tiny stuff.
6
6
  #
7
7
  class Joosy.Module
@@ -65,7 +65,7 @@ class Joosy.Module
65
65
 
66
66
  @[chained] = @[method]
67
67
  @[method] = action
68
-
68
+
69
69
  #
70
70
  # Simple and fast shallow merge implementation.
71
71
  #
@@ -4,7 +4,7 @@
4
4
  # @mixin
5
5
  #
6
6
  Joosy.Modules.TimeManager =
7
-
7
+
8
8
  #
9
9
  # Registeres timeout for current object
10
10
  #
@@ -132,7 +132,7 @@ class Joosy.Page extends Joosy.Module
132
132
  # $.get '/rumbas', (@data) => complete()
133
133
  #
134
134
  @fetch: (callback) ->
135
- @::__fetch = (complete) ->
135
+ @::__fetch = (complete) ->
136
136
  @data = {}
137
137
  callback.call this, =>
138
138
  @dataFetched = true
@@ -3,15 +3,15 @@
3
3
  # Turns JSON array into array of Resources and manages them.
4
4
  #
5
5
  # @note You should not use Collection directly. It will be
6
- # automatically created by things like {Joosy.Resource.Generic.map}
6
+ # automatically created by things like {Joosy.Resource.Generic.map}
7
7
  # or {Joosy.Resource.REST.find}.
8
8
  #
9
9
  # @example Basic sample
10
10
  # class R extends Joosy.Resource.Generic
11
11
  # @entity 'r'
12
- #
12
+ #
13
13
  # collection = new Joosy.Resource.Collection(R)
14
- #
14
+ #
15
15
  # collection.load [{foo: 'bar'}, {foo: 'baz'}]
16
16
  # collection.each (resource) ->
17
17
  # resource('foo')
@@ -20,7 +20,7 @@
20
20
  #
21
21
  class Joosy.Resource.Collection extends Joosy.Module
22
22
  @include Joosy.Modules.Events
23
-
23
+
24
24
  #
25
25
  # Allows to modify data before it gets stored
26
26
  #
@@ -29,7 +29,7 @@ class Joosy.Resource.Collection extends Joosy.Module
29
29
  # @param [Function] action `(Object) -> Object` to call
30
30
  #
31
31
  @beforeLoad: (action) -> @::__beforeLoad = action
32
-
32
+
33
33
  #
34
34
  # Sets the default model for collection
35
35
  #
@@ -38,24 +38,24 @@ class Joosy.Resource.Collection extends Joosy.Module
38
38
  # @param [Class] model Model class
39
39
  #
40
40
  @model: (model) -> @::model = model
41
-
41
+
42
42
  #
43
43
  # If model param was empty it will fallback to `@model`
44
44
  # If both param and `@model` were empty it will throw an exception.
45
45
  #
46
46
  # @param [Class] model Resource class which this collection will handle
47
47
  #
48
- constructor: (model=false) ->
48
+ constructor: (model=false, @findOptions) ->
49
49
  @model = model if model
50
50
 
51
51
  #
52
52
  # Modelized data storage
53
53
  #
54
54
  @data = []
55
-
55
+
56
56
  if !@model
57
57
  throw new Error "#{Joosy.Module.__className @}> model can't be empty"
58
-
58
+
59
59
  #
60
60
  # Clears the storage and attempts to import given array
61
61
  #
@@ -70,10 +70,10 @@ class Joosy.Resource.Collection extends Joosy.Module
70
70
  entities = @__beforeLoad entities
71
71
 
72
72
  @data = @modelize entities
73
-
73
+
74
74
  @trigger 'changed' if notify
75
75
  this
76
-
76
+
77
77
  #
78
78
  # Turns Objects array into array of Resources
79
79
  #
@@ -86,11 +86,11 @@ class Joosy.Resource.Collection extends Joosy.Module
86
86
  collection = collection?[root.camelize(false)]
87
87
 
88
88
  if collection not instanceof Array
89
- throw new Error "Can not read incoming JSON"
89
+ throw new Error "Can not read incoming JSON"
90
90
 
91
91
  collection.map (x) =>
92
92
  @model.build x
93
-
93
+
94
94
  #
95
95
  # Calls callback for each Resource inside Collection
96
96
  #
@@ -117,7 +117,7 @@ class Joosy.Resource.Collection extends Joosy.Module
117
117
 
118
118
  sortBy: (params...) ->
119
119
  @data.sortBy params...
120
-
120
+
121
121
  #
122
122
  # Gets resource by id
123
123
  #
@@ -127,7 +127,7 @@ class Joosy.Resource.Collection extends Joosy.Module
127
127
  #
128
128
  findById: (id) ->
129
129
  @data.find (x) -> x.id().toString() == id.toString()
130
-
130
+
131
131
  #
132
132
  # Gets resource by its index inside collection
133
133
  #
@@ -168,11 +168,11 @@ class Joosy.Resource.Collection extends Joosy.Module
168
168
  # @return [Joosy.Resource.Generic] Added element
169
169
  #
170
170
  add: (element, index=false, notify=true) ->
171
- if index
171
+ if typeof index is 'number'
172
172
  @data.splice index, 0, element
173
173
  else
174
174
  @data.push element
175
-
175
+
176
176
  if notify
177
177
  @trigger 'changed'
178
- element
178
+ element
@@ -4,12 +4,12 @@
4
4
  # @example Basic usage
5
5
  # class R extends Joosy.Resource.Generic
6
6
  # @entity 'r'
7
- #
7
+ #
8
8
  # @beforeLoad (data) ->
9
9
  # data.real = true
10
- #
10
+ #
11
11
  # r = R.build {r: {foo: {bar: 'baz'}}}
12
- #
12
+ #
13
13
  # r('foo') # {baz: 'baz'}
14
14
  # r('real') # true
15
15
  # r('foo.bar') # baz
@@ -30,7 +30,7 @@ class Joosy.Resource.Generic extends Joosy.Module
30
30
  __source: false
31
31
 
32
32
  #
33
- # Clears the identity map cache. Recomended to be called during layout switch to
33
+ # Clears the identity map cache. Recomended to be called during layout switch to
34
34
  # ensure correct garbage collection.
35
35
  #
36
36
  @resetIdentity: ->
@@ -72,7 +72,7 @@ class Joosy.Resource.Generic extends Joosy.Module
72
72
  class clone extends this
73
73
 
74
74
  if entity instanceof Joosy.Resource.Generic
75
- clone.__source = entity.memberPath()
75
+ clone.__source = entity.memberPath()
76
76
  clone.__source += '/' + @::__entityName.pluralize() if @::__entityName
77
77
  else
78
78
  clone.__source = entity
@@ -86,7 +86,7 @@ class Joosy.Resource.Generic extends Joosy.Module
86
86
  # @param [String] name Singular name of resource
87
87
  #
88
88
  @entity: (name) -> @::__entityName = name
89
-
89
+
90
90
  #
91
91
  # Sets the collection to use
92
92
  #
@@ -96,7 +96,7 @@ class Joosy.Resource.Generic extends Joosy.Module
96
96
  # @param [Class] klass Class to assign as collection
97
97
  #
98
98
  @collection: (klass) -> @::__collection = -> klass
99
-
99
+
100
100
  #
101
101
  # Implements {Joosy.Resource.Generic.collection} default behavior.
102
102
  #
@@ -116,9 +116,9 @@ class Joosy.Resource.Generic extends Joosy.Module
116
116
  # class Puppy extends Joosy.Resource.Generic
117
117
  # @entity 'puppy'
118
118
  # @map 'zombies'
119
- #
119
+ #
120
120
  # p = Puppy.build {zombies: [{foo: 'bar'}]}
121
- #
121
+ #
122
122
  # p('zombies') # Direct access: [{foo: 'bar'}]
123
123
  # p.zombies # Wrapped Collection of Zombie instances
124
124
  # p.zombies.at(0)('foo') # bar
@@ -129,11 +129,13 @@ class Joosy.Resource.Generic extends Joosy.Module
129
129
  @map: (name, klass=false) ->
130
130
  unless klass
131
131
  klass = window[name.singularize().camelize()]
132
-
132
+
133
133
  if !klass
134
134
  throw new Error "#{Joosy.Module.__className @}> class can not be detected for '#{name}' mapping"
135
135
 
136
136
  @beforeLoad (data) ->
137
+ klass = klass() unless Joosy.Module.hasAncestor(klass, Joosy.Resource.Generic)
138
+
137
139
  @__map(data, name, klass)
138
140
 
139
141
  #
@@ -156,14 +158,14 @@ class Joosy.Resource.Generic extends Joosy.Module
156
158
  else
157
159
  for key, value of @prototype
158
160
  shim[key] = value
159
-
161
+
160
162
  shim.constructor = @
161
163
 
162
164
  if Object.isNumber(data) || Object.isString(data)
163
165
  id = data
164
166
  data = {}
165
167
  data[shim.__primaryKey] = id
166
-
168
+
167
169
  if Joosy.Application.identity
168
170
  id = data[shim.__primaryKey]
169
171
 
@@ -203,7 +205,7 @@ class Joosy.Resource.Generic extends Joosy.Module
203
205
  load: (data) ->
204
206
  @__fillData data
205
207
  return this
206
-
208
+
207
209
  #
208
210
  # Getter for wrapped data
209
211
  #
@@ -231,7 +233,7 @@ class Joosy.Resource.Generic extends Joosy.Module
231
233
  target[0](target[1], value)
232
234
  else
233
235
  target[0][target[1]] = value
234
-
236
+
235
237
  @trigger 'changed'
236
238
  null
237
239
 
@@ -246,7 +248,7 @@ class Joosy.Resource.Generic extends Joosy.Module
246
248
  path = path.split '.'
247
249
  keyword = path.pop()
248
250
  target = @data
249
-
251
+
250
252
  for part in path
251
253
  target[part] ||= {}
252
254
  if target instanceof Joosy.Resource.Generic
@@ -277,7 +279,7 @@ class Joosy.Resource.Generic extends Joosy.Module
277
279
  @data = {} unless @hasOwnProperty 'data'
278
280
 
279
281
  Joosy.Module.merge @data, @__prepareData(data)
280
-
282
+
281
283
  @trigger 'changed' if notify
282
284
 
283
285
  null
@@ -288,14 +290,14 @@ class Joosy.Resource.Generic extends Joosy.Module
288
290
  # @param [Hash] data Raw data to prepare
289
291
  # @return [Hash]
290
292
  #
291
- __prepareData: (data) ->
293
+ __prepareData: (data) ->
292
294
  if Object.isObject(data) && Object.keys(data).length == 1 && @__entityName
293
295
  name = @__entityName.camelize(false)
294
296
  data = data[name] if data[name]
295
297
 
296
298
  if @__beforeLoads?
297
299
  data = bl.call(this, data) for bl in @__beforeLoads
298
-
300
+
299
301
  data
300
302
 
301
303
  __map: (data, name, klass) ->
@@ -305,4 +307,4 @@ class Joosy.Resource.Generic extends Joosy.Module
305
307
  data[name] = entry
306
308
  else if Object.isObject data[name]
307
309
  data[name] = klass.build data[name]
308
- data
310
+ data
@@ -11,6 +11,22 @@ class Joosy.Resource.REST extends Joosy.Resource.Generic
11
11
  named = @__entityName.camelize().pluralize() + 'Collection'
12
12
  if window[named] then window[named] else Joosy.Resource.RESTCollection
13
13
 
14
+ #
15
+ # Builds parents part of member path based on parents array
16
+ #
17
+ # @param [Array] parents Array of parents
18
+ #
19
+ # @example Basic usage
20
+ # Resource.__parentsPath([otherResource, '/bars/1']) # /other_resources/1/bars/1
21
+ #
22
+ @__parentsPath: (parents) ->
23
+ parents.reduce (path, parent) ->
24
+ path += if Joosy.Module.hasAncestor parent.constructor, Joosy.Resource.REST
25
+ parent.memberPath()
26
+ else
27
+ parent
28
+ , ''
29
+
14
30
  #
15
31
  # Builds member path based on the given id.
16
32
  #
@@ -25,10 +41,8 @@ class Joosy.Resource.REST extends Joosy.Resource.Generic
25
41
  path = @__source if @__source? && !options.parent?
26
42
  path += "/#{id}"
27
43
 
28
- if options.parent instanceof Joosy.Resource.Generic
29
- path = options.parent.memberPath() + path
30
- else if options.parent?
31
- path = options.parent + path
44
+ if options.parent?
45
+ path = @__parentsPath(if Object.isArray(options.parent) then options.parent else [options.parent]) + path
32
46
 
33
47
  path += "/#{options.from}" if options.from?
34
48
  path
@@ -56,10 +70,8 @@ class Joosy.Resource.REST extends Joosy.Resource.Generic
56
70
  path = ("/" + @::__entityName.pluralize())
57
71
  path = @__source if @__source? && !options.parent?
58
72
 
59
- if options.parent instanceof Joosy.Resource.Generic
60
- path = options.parent.memberPath() + path
61
- else if options.parent?
62
- path = options.parent + path
73
+ if options.parent?
74
+ path = @__parentsPath(if Object.isArray(options.parent) then options.parent else [options.parent]) + path
63
75
 
64
76
  path += "/#{options.from}" if options.from?
65
77
  path
@@ -181,10 +193,10 @@ class Joosy.Resource.REST extends Joosy.Resource.Generic
181
193
  #
182
194
  # @param [String] where Possible values: 'all', id.
183
195
  # 'all' will query for collection from collectionPath.
184
- # Everything else will be considered as an id string and will make resource
196
+ # Everything else will be considered as an id string and will make resource
185
197
  # query for single instance from memberPath.
186
198
  # @param [Hash] options Path modification options
187
- # @param [Function] callback Resulting callback
199
+ # @param [Function] callback Resulting callback
188
200
  # (will receive retrieved Collection/Resource)
189
201
  #
190
202
  # @option options [Joosy.Resource.REST] parent Sets the given resource as a base path
@@ -205,12 +217,12 @@ class Joosy.Resource.REST extends Joosy.Resource.Generic
205
217
 
206
218
  @__query @collectionPath(options), 'GET', options.params, (data) =>
207
219
  result.load data
208
- callback?(result)
220
+ callback?(result, data)
209
221
  else
210
222
  result = @build where
211
223
  @__query @memberPath(where, options), 'GET', options.params, (data) =>
212
224
  result.load data
213
- callback?(result)
225
+ callback?(result, data)
214
226
 
215
227
  result
216
228
 
@@ -232,7 +244,7 @@ class Joosy.Resource.REST extends Joosy.Resource.Generic
232
244
  # Refetches the data from backend and triggers `changed`
233
245
  #
234
246
  # @param [Hash] options See {Joosy.Resource.REST.find} for possible options
235
- # @param [Function] callback Resulting callback
247
+ # @param [Function] callback Resulting callback
236
248
  #
237
249
  reload: (options={}, callback=false) ->
238
250
  if Object.isFunction(options)
@@ -241,4 +253,4 @@ class Joosy.Resource.REST extends Joosy.Resource.Generic
241
253
 
242
254
  @constructor.__query @memberPath(options), 'GET', options.params, (data) =>
243
255
  @load data
244
- callback? this
256
+ callback? this
@@ -12,7 +12,7 @@ class Joosy.Resource.RESTCollection extends Joosy.Resource.Collection
12
12
  # Refetches the data from backend and triggers `changed`
13
13
  #
14
14
  # @param [Hash] options See {Joosy.Resource.REST.find} for possible options
15
- # @param [Function] callback Resulting callback
15
+ # @param [Function] callback Resulting callback
16
16
  #
17
17
  reload: (options={}, callback=false) ->
18
18
  if Object.isFunction(options)
@@ -21,4 +21,4 @@ class Joosy.Resource.RESTCollection extends Joosy.Resource.Collection
21
21
 
22
22
  @model.__query @model.collectionPath(options), 'GET', options.params, (data) =>
23
23
  @load data
24
- callback?(data)
24
+ callback?(data)
@@ -87,7 +87,7 @@ Joosy.Router =
87
87
  __setupRoutes: ->
88
88
  $(window).hashchange =>
89
89
  unless @__ignoreRequest && location.hash.match(@__ignoreRequest)
90
- @__respondRoute location.hash
90
+ @__respondRoute location.hash
91
91
 
92
92
  @__prepareRoutes @rawRoutes
93
93
  @__respondRoute location.hash
@@ -200,4 +200,4 @@ Joosy.Router =
200
200
 
201
201
  params
202
202
 
203
- Joosy.Module.merge Joosy.Router, Joosy.Modules.Events
203
+ Joosy.Module.merge Joosy.Router, Joosy.Modules.Events
@@ -29,6 +29,7 @@ class Joosy.Widget extends Joosy.Module
29
29
  @include Joosy.Modules.Renderer
30
30
  @include Joosy.Modules.Filters
31
31
  @include Joosy.Modules.TimeManager
32
+ @include Joosy.Modules.WidgetsManager
32
33
 
33
34
  #
34
35
  # By default widget will not render on load
@@ -69,6 +70,7 @@ class Joosy.Widget extends Joosy.Module
69
70
  @swapContainer @container, @__renderer(@data || {})
70
71
  @refreshElements()
71
72
  @__delegateEvents()
73
+ @__setupWidgets()
72
74
  @__runAfterLoads()
73
75
 
74
76
  this
@@ -81,5 +83,6 @@ class Joosy.Widget extends Joosy.Module
81
83
  #
82
84
  __unload: ->
83
85
  @__clearTime()
86
+ @__unloadWidgets()
84
87
  @__removeMetamorphs()
85
88
  @__runAfterUnloads()
@@ -1,12 +1,12 @@
1
1
  #
2
2
  # Preloader for libraries with localStorage cache
3
3
  #
4
- # @note The `start` callback will only be called if loading required.
4
+ # @note The `start` callback will only be called if loading required.
5
5
  # While working with cache, `complete` is the only callback that will be triggered.
6
6
  #
7
7
  # @example Basic usage
8
8
  # libraries = [['/test1.js', 100], ['/test2.js', 500]] #100, 500 - size in bytes
9
- #
9
+ #
10
10
  # CachingPreloader.load libraries,
11
11
  # start: -> console.log 'preloading started'
12
12
  # progress: (percent) -> console.log "#{percent}% loaded"
@@ -19,17 +19,17 @@
19
19
  # If set to true, localStorage cache will be avoided
20
20
  #
21
21
  force: false
22
-
22
+
23
23
  #
24
24
  # Prefix for localStorage keys
25
25
  #
26
26
  prefix: "cache:"
27
-
27
+
28
28
  #
29
29
  # Number of libraries have been loaded (increases after lib was loaded)
30
30
  #
31
31
  counter: 0
32
-
32
+
33
33
  #
34
34
  # Loads (or takes from cache) set of libraries using xhr and caches them in localStorage
35
35
  # See class description for example of usage
@@ -142,7 +142,7 @@
142
142
  #
143
143
  clean: ->
144
144
  i = 0
145
-
145
+
146
146
  find = (arr, obj) ->
147
147
  (return i if obj == x) for x in arr
148
148
  return -1
@@ -166,4 +166,4 @@ window.evalGlobaly = (src) ->
166
166
  else
167
167
  window.eval src
168
168
 
169
- @Preloader = @CachingPreloader
169
+ @Preloader = @CachingPreloader
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # @example Basic usage
5
5
  # libraries = [['/test1.js'], ['/test2.js']]
6
- #
6
+ #
7
7
  # InlinePreloader.load libraries,
8
8
  # start: -> console.log 'preloading started'
9
9
  # complete: -> console.log 'preloading finished'
@@ -12,15 +12,15 @@
12
12
  #
13
13
  @InlinePreloader =
14
14
  #
15
- # Loads set of libraries by adding `script src` to DOM head
15
+ # Loads set of libraries by adding `script src` to DOM head
16
16
  # See class description for example of usage
17
17
  #
18
18
  # @param [Array] 2-levels array of libraries URLs i.e. [['/test1.js'],['/test2.js']]
19
19
  # @param [Hash] Available options:
20
- # * start: `() -> null` to call before load starts:
20
+ # * start: `() -> null` to call before load starts:
21
21
  # * complete: `() -> null` to call after load completes
22
22
  #
23
- load: (libraries, options) ->
23
+ load: (libraries, options) ->
24
24
  @[key] = val for key, val of options
25
25
  @start?()
26
26
 
@@ -53,4 +53,4 @@
53
53
  head.appendChild script
54
54
  return undefined
55
55
 
56
- @Preloader = @InlinePreloader
56
+ @Preloader = @InlinePreloader
@@ -1,5 +1,5 @@
1
1
  module Joosy
2
2
  module Rails
3
- VERSION = "1.0.0.RC4"
3
+ VERSION = "1.0.0.RC5"
4
4
  end
5
5
  end
@@ -1,4 +1,4 @@
1
1
  Joosy.helpers 'Application', ->
2
-
2
+
3
3
  # @helloWorld = (name) ->
4
- # "Hello World, #{name}"
4
+ # "Hello World, #{name}"