joosy 1.2.0.beta.4 → 1.2.0.rc.1

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 (52) hide show
  1. checksums.yaml +4 -4
  2. data/.codoopts +1 -1
  3. data/Gruntfile.coffee +3 -3
  4. data/README.md +4 -0
  5. data/bower.json +1 -1
  6. data/build/joosy.js +2 -2
  7. data/build/joosy/form.js +1 -1
  8. data/build/joosy/resources.js +1 -1
  9. data/package.json +2 -2
  10. data/source/joosy/application.coffee +2 -2
  11. data/source/joosy/form.coffee +4 -4
  12. data/source/joosy/helpers/form.coffee +12 -3
  13. data/source/joosy/helpers/index.coffee +0 -1
  14. data/source/joosy/helpers/view.coffee +16 -3
  15. data/source/joosy/layout.coffee +0 -4
  16. data/source/joosy/module.coffee +16 -1
  17. data/source/joosy/modules/dom.coffee +106 -101
  18. data/source/joosy/modules/events.coffee +44 -10
  19. data/source/joosy/modules/filters.coffee +64 -60
  20. data/source/joosy/modules/page.coffee +3 -0
  21. data/source/joosy/modules/page/scrolling.coffee +46 -29
  22. data/source/joosy/modules/page/title.coffee +14 -0
  23. data/source/joosy/modules/renderer.coffee +219 -190
  24. data/source/joosy/modules/resources.coffee +3 -0
  25. data/source/joosy/modules/resources/cacher.coffee +81 -10
  26. data/source/joosy/modules/resources/function.coffee +26 -29
  27. data/source/joosy/modules/resources/identity_map.coffee +64 -42
  28. data/source/joosy/modules/resources/model.coffee +127 -73
  29. data/source/joosy/modules/time_manager.coffee +2 -0
  30. data/source/joosy/page.coffee +3 -6
  31. data/source/joosy/resources/array.coffee +87 -2
  32. data/source/joosy/resources/hash.coffee +53 -1
  33. data/source/joosy/resources/rest.coffee +59 -3
  34. data/source/joosy/resources/scalar.coffee +47 -1
  35. data/source/joosy/router.coffee +63 -21
  36. data/source/joosy/templaters/jst.coffee +3 -0
  37. data/source/joosy/widget.coffee +17 -11
  38. data/spec/joosy/core/helpers/view_spec.coffee +14 -0
  39. data/spec/joosy/core/modules/dom_spec.coffee +1 -1
  40. data/spec/joosy/core/modules/filters_spec.coffee +2 -2
  41. data/spec/joosy/core/modules/module_spec.coffee +1 -1
  42. data/spec/joosy/core/modules/renderer_spec.coffee +19 -1
  43. data/spec/joosy/core/router_spec.coffee +80 -45
  44. data/spec/joosy/core/widget_spec.coffee +9 -0
  45. data/spec/joosy/resources/modules/cacher_spec.coffee +3 -3
  46. data/spec/joosy/resources/modules/function_spec.coffee +2 -2
  47. data/spec/joosy/resources/modules/identity_map_spec.coffee +2 -2
  48. data/spec/joosy/resources/modules/model_spec.coffee +1 -1
  49. metadata +2 -5
  50. data/source/joosy/helpers/routes.coffee +0 -17
  51. data/source/joosy/modules/widgets_manager.coffee +0 -90
  52. data/spec/joosy/core/helpers/routes_spec.coffee +0 -15
@@ -56,6 +56,8 @@ Joosy.Modules.TimeManager =
56
56
  #
57
57
  # Drops all registered timeouts and intervals for this object
58
58
  #
59
+ # @private
60
+ #
59
61
  __clearTime: ->
60
62
  if @__intervals
61
63
  for entry in @__intervals
@@ -23,7 +23,7 @@ class Joosy.Page extends Joosy.Widget
23
23
  @layout: (layoutClass) ->
24
24
  @::__layoutClass = layoutClass
25
25
 
26
- @include Joosy.Modules.Page.Scrolling
26
+ @concern Joosy.Modules.Page.Scrolling
27
27
  @extend Joosy.Modules.Page.Title
28
28
 
29
29
  #
@@ -44,12 +44,9 @@ class Joosy.Page extends Joosy.Widget
44
44
  # we should declare ourselves as a relpacement to the layout, not the page
45
45
  @previous = @previous.layout if @layoutShouldChange && !@layout
46
46
 
47
- ######
48
- ###### Widget extensions
49
- ######
50
-
51
47
  #
52
- # This is required by {Joosy.Modules.Renderer}
48
+ # This is required by {Joosy.Modules.Renderer}.
49
+ #
53
50
  # Sets the base template dir to app_name/templates/pages
54
51
  #
55
52
  __renderSection: ->
@@ -1,54 +1,139 @@
1
+ #
2
+ # The array structure with the support of dynamic rendering
3
+ #
4
+ # @include Joosy.Modules.Events
5
+ # @extend Joosy.Modules.Filters
6
+ #
7
+ # @example
8
+ # data = Joosy.Resources.Array.build 1, 2, 3
9
+ # data.get(0) # 1
10
+ # data.set(0, 5) # triggers 'changed'
11
+ # data.push(4) # triggers 'changed'
12
+ # data.load(7, 8, 9) # triggers 'changed'
13
+ #
1
14
  class Joosy.Resources.Array extends Array
2
-
3
15
  Joosy.Module.merge @, Joosy.Module
4
16
 
5
17
  @include Joosy.Modules.Events
6
- @include Joosy.Modules.Filters
18
+ @extend Joosy.Modules.Filters
7
19
 
8
20
  @registerPlainFilters 'beforeLoad'
9
21
 
22
+ #
23
+ # Instantiates a new array
24
+ #
10
25
  @build: ->
11
26
  new @ arguments...
12
27
 
28
+ #
29
+ # Accepts numerous parameters (corresponding to array members)
30
+ #
13
31
  constructor: ->
14
32
  @__fillData arguments, false
15
33
 
34
+ #
35
+ # Replaces all the values with given
36
+ #
37
+ # @example
38
+ # data = Joosy.Resources.Array.build 1, 2, 3
39
+ # data.load 1, 2, 3
40
+ #
16
41
  load: ->
17
42
  @__fillData arguments
18
43
 
44
+ #
45
+ # Gets element by its index
46
+ #
47
+ # @example
48
+ # data = Joosy.Resources.Array.build 1, 2, 3
49
+ # data.get(0) # 1
50
+ #
19
51
  get: (index) ->
20
52
  @[index]
21
53
 
54
+ #
55
+ # Sets element by its index
56
+ #
57
+ # @example
58
+ # data = Joosy.Resources.Array.build 1, 2, 3
59
+ # data.set(0, 2) # 2
60
+ # data # [2, 2, 3]
61
+ #
22
62
  set: (index, value) ->
23
63
  @[index] = value
24
64
  @trigger 'changed'
25
65
  value
26
66
 
67
+ #
68
+ # Pushes element to the end of array
69
+ #
70
+ # @example
71
+ # data = Joosy.Resources.Array.build 1, 2, 3
72
+ # data.push(4) # 4
73
+ # data # [1, 2, 3, 4]
74
+ #
27
75
  push: ->
28
76
  result = super
29
77
  @trigger 'changed'
30
78
  result
31
79
 
80
+ #
81
+ # Pops element of the end of array
82
+ #
83
+ # @example
84
+ # data = Joosy.Resources.Array.build 1, 2, 3
85
+ # data.pop() # 3
86
+ # data # [1, 2]
87
+ #
32
88
  pop: ->
33
89
  result = super
34
90
  @trigger 'changed'
35
91
  result
36
92
 
93
+ #
94
+ # Shits element of the beginning of array
95
+ #
96
+ # @example
97
+ # data = Joosy.Resources.Array.build 1, 2, 3
98
+ # data.shift() # 1
99
+ # data # [2, 3]
100
+ #
37
101
  shift: ->
38
102
  result = super
39
103
  @trigger 'changed'
40
104
  result
41
105
 
106
+ #
107
+ # Adds element of the beginning of array
108
+ #
109
+ # @example
110
+ # data = Joosy.Resources.Array.build 1, 2, 3
111
+ # data.unshift(0) # 4
112
+ # data # [0, 1, 2, 3]
113
+ #
42
114
  unshift: ->
43
115
  result = super
44
116
  @trigger 'changed'
45
117
  result
46
118
 
119
+ #
120
+ # Changes the content of an array, adding new elements while removing old elements.
121
+ #
122
+ # @example
123
+ # data = Joosy.Resources.Array.build 1, 2, 3
124
+ # data.splice(0, 2, 6) # 2
125
+ # data # [6, 3]
126
+ #
47
127
  splice: ->
48
128
  result = super
49
129
  @trigger 'changed'
50
130
  result
51
131
 
132
+ #
133
+ # Prepares data for internal storage
134
+ #
135
+ # @private
136
+ #
52
137
  __fillData: (data, notify=true) ->
53
138
  data = @slice.call(data, 0)
54
139
 
@@ -1,26 +1,64 @@
1
+ #
2
+ # The hash structure with the support of dynamic rendering
3
+ #
4
+ # @include Joosy.Modules.Events
5
+ # @extend Joosy.Modules.Filters
6
+ #
7
+ # @example
8
+ # data = Joosy.Resources.Hash.build field1: 'test', field2: 'test'
9
+ # data.get('field1') # 'test'
10
+ # data.set('field2', 'test2') # triggers 'changed'
11
+ #
1
12
  class Joosy.Resources.Hash extends Joosy.Module
2
13
 
3
14
  @include Joosy.Modules.Events
4
- @include Joosy.Modules.Filters
15
+ @extend Joosy.Modules.Filters
5
16
 
6
17
  @registerPlainFilters 'beforeLoad'
7
18
 
19
+ #
20
+ # Instantiates a new hash
21
+ #
8
22
  @build: ->
9
23
  new @ arguments...
10
24
 
25
+ #
26
+ # Internal helper for {Joosy.Modules.Resources.Function}
27
+ #
11
28
  __call: (path, value) ->
12
29
  if arguments.length > 1
13
30
  @set path, value
14
31
  else
15
32
  @get path
16
33
 
34
+ #
35
+ # Accepts hash of fields that have to be defined
36
+ #
17
37
  constructor: (data={}) ->
18
38
  @__fillData data, false
19
39
 
40
+ #
41
+ # Replaces all the values with given
42
+ #
43
+ # @example
44
+ # data = Joosy.Resources.Hash.build foo: 'bar'
45
+ # data.load bar: 'baz'
46
+ # data # { bar: 'baz' }
47
+ #
20
48
  load: (data) ->
21
49
  @__fillData data
22
50
  @
23
51
 
52
+ #
53
+ # Gets value by field name.
54
+ #
55
+ # @param [String] path The path to the field that should be resolved
56
+ # @note Can resolve nested fields
57
+ #
58
+ # @example
59
+ # data.get('field') # { subfield: 'value' }
60
+ # data.get('field.subfield') # 'value'
61
+ #
24
62
  get: (path) ->
25
63
  [instance, property] = @__callTarget path, true
26
64
 
@@ -31,6 +69,17 @@ class Joosy.Resources.Hash extends Joosy.Module
31
69
  else
32
70
  instance[property]
33
71
 
72
+ #
73
+ # Sets value by field name.
74
+ #
75
+ # @param [String] path The path to the field that should be resolved
76
+ # @param [Mixed] value The value to set
77
+ # @note Can resolve nested fields
78
+ #
79
+ # @example
80
+ # data.set('field', {subfield: 'value'})
81
+ # data.set('field.subfield', 'value2')
82
+ #
34
83
  set: (path, value) ->
35
84
  [instance, property] = @__callTarget path
36
85
 
@@ -79,6 +128,9 @@ class Joosy.Resources.Hash extends Joosy.Module
79
128
  @trigger 'changed' if notify
80
129
  null
81
130
 
131
+ #
132
+ # @nodoc
133
+ #
82
134
  toString: ->
83
135
  "Hash: #{JSON.stringify(@data)}"
84
136
 
@@ -4,9 +4,11 @@
4
4
  #
5
5
  # Resource with REST/JSON backend
6
6
  #
7
+ # @concern Joosy.Modules.Resources.Model
8
+ #
7
9
  class Joosy.Resources.REST extends Joosy.Resources.Hash
8
10
 
9
- @include Joosy.Modules.Resources.Model
11
+ @concern Joosy.Modules.Resources.Model
10
12
 
11
13
  @registerPlainFilters 'beforeSave'
12
14
 
@@ -17,7 +19,24 @@ class Joosy.Resources.REST extends Joosy.Resources.Hash
17
19
 
18
20
  data
19
21
 
20
-
22
+ #
23
+ # Registeres default options for all HTTP queries
24
+ #
25
+ # @param [Hash] options Options as a hash
26
+ # @param [Function<Hash>] options Function that overrides options in given hash
27
+ #
28
+ # @example
29
+ # class Test extends Joosy.Resources.REST
30
+ # @requestOptions
31
+ # headers:
32
+ # 'access-token': 'test'
33
+ #
34
+ # @example
35
+ # class Test extends Joosy.Resources.REST
36
+ # @requestOptions (options) ->
37
+ # options.url = Config.baseUrl + options.url
38
+ #
39
+ #
21
40
  @requestOptions: (options) ->
22
41
  @::__requestOptions = options
23
42
 
@@ -60,6 +79,7 @@ class Joosy.Resources.REST extends Joosy.Resources.Hash
60
79
  #
61
80
  @at: ->
62
81
  @__atWrapper (callback) =>
82
+ # @nodoc
63
83
  class Clone extends @
64
84
  callback(@)
65
85
  , arguments...
@@ -289,16 +309,48 @@ class Joosy.Resources.REST extends Joosy.Resources.Hash
289
309
 
290
310
  result
291
311
 
312
+ #
313
+ # Updates the instance on the server with PUT query
314
+ #
315
+ # @param [Function<Mixed, REST>] callback
316
+ #
317
+ # @example
318
+ # class Test extends Joosy.Resources.REST
319
+ # test = Test.build id: 1, field1: 'test'
320
+ #
321
+ # test.update (error, test) ->
322
+ # unless error
323
+ # # ...
324
+ #
292
325
  update: (callback) ->
293
326
  @send 'put', {params: @__applyBeforeSaves(@data)}, (error, data) =>
294
327
  @load data unless error
295
328
  callback? error, @
296
329
 
330
+ #
331
+ # Updates new entry on the server with local state with POST query
332
+ #
333
+ # @param [Function<Mixed, REST>] callback
334
+ #
335
+ # @example
336
+ # class Test extends Joosy.Resources.REST
337
+ # test = Test.build field1: 'test'
338
+ #
339
+ # test.create (error, test) ->
340
+ # unless error
341
+ # # ...
342
+ #
297
343
  create: (callback) ->
298
344
  @constructor.send 'post', {params: @__applyBeforeSaves(@data)}, (error, data) =>
299
345
  @load data unless error
300
346
  callback? error, @
301
347
 
348
+ #
349
+ # Saves current state of instance (automatically choosing between updation and creation)
350
+ #
351
+ # @see Joosy.Resources.REST.create
352
+ # @see Joosy.Resources.REST.update
353
+ #
302
354
  save: (callback) ->
303
355
  if @id()
304
356
  @update callback
@@ -308,6 +360,8 @@ class Joosy.Resources.REST extends Joosy.Resources.Hash
308
360
  #
309
361
  # Wrapper for AJAX request
310
362
  #
363
+ # @private
364
+ #
311
365
  @__query: (path, method, params, callback) ->
312
366
  options =
313
367
  url: path
@@ -330,7 +384,9 @@ class Joosy.Resources.REST extends Joosy.Resources.Hash
330
384
  $.ajax options
331
385
 
332
386
  #
333
- # utility function for better API support for unrequired first options parameter
387
+ # Utility function for better API support for unrequired first options parameter
388
+ #
389
+ # @private
334
390
  #
335
391
  __extractOptionsAndCallback: (options, callback) ->
336
392
  if typeof(options) == 'function'
@@ -1,36 +1,82 @@
1
+ #
2
+ # The scalar value with the support of dynamic rendering
3
+ #
4
+ # @include Joosy.Modules.Events
5
+ # @extend Joosy.Modules.Filters
6
+ #
7
+ # @example
8
+ # data = Joosy.Resources.Scalar.build 1
9
+ # data.get() # 1
10
+ # data.set(2) # triggers 'changed'
11
+ #
1
12
  class Joosy.Resources.Scalar extends Joosy.Module
2
13
 
3
14
  @include Joosy.Modules.Events
4
- @include Joosy.Modules.Filters
15
+ @extend Joosy.Modules.Filters
5
16
 
6
17
  @registerPlainFilters 'beforeLoad'
7
18
 
19
+ #
20
+ # Instantiates a new instance
21
+ #
8
22
  @build: ->
9
23
  new @ arguments...
10
24
 
25
+ #
26
+ # Internal helper for {Joosy.Modules.Resources.Function}
27
+ #
11
28
  __call: ->
12
29
  if arguments.length > 0
13
30
  @set arguments[0]
14
31
  else
15
32
  @get()
16
33
 
34
+ #
35
+ # Accepts a value to encapsulate
36
+ #
17
37
  constructor: (value) ->
18
38
  @load value
19
39
 
40
+ #
41
+ # Replaces the value with given
42
+ #
43
+ # @example
44
+ # data = Joosy.Resources.Scalar.build 1
45
+ # data.load 2
46
+ # data # 2
47
+ #
20
48
  load: (value) ->
21
49
  @value = @__applyBeforeLoads(value)
22
50
  @trigger 'changed'
23
51
  @value
24
52
 
53
+ #
54
+ # Gets current value
55
+ #
25
56
  get: ->
26
57
  @value
27
58
 
59
+ #
60
+ # Replaces the value with given
61
+ #
62
+ # @see Joosy.Resources.Scalar.load
63
+ #
28
64
  set: (@value) ->
29
65
  @trigger 'changed'
30
66
 
67
+ #
68
+ # JS helper converting object to its internal value during basic operations
69
+ #
70
+ # @nodoc
71
+ #
31
72
  valueOf: ->
32
73
  @value.valueOf()
33
74
 
75
+ #
76
+ # String representation
77
+ #
78
+ # @nodoc
79
+ #
34
80
  toString: ->
35
81
  @value.toString()
36
82