joosy 0.1.0.RC3 → 0.1.0.alpha

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 (115) hide show
  1. data/.gitignore +0 -2
  2. data/Gemfile +2 -13
  3. data/Gemfile.lock +62 -80
  4. data/Guardfile +15 -21
  5. data/MIT-LICENSE +2 -2
  6. data/README.rdoc +3 -0
  7. data/app/helpers/joosy/sprockets_helper.rb +11 -23
  8. data/joosy.gemspec +3 -3
  9. data/lib/joosy/forms.rb +12 -2
  10. data/lib/joosy/rails/engine.rb +1 -9
  11. data/lib/joosy/rails/version.rb +2 -2
  12. data/lib/joosy-rails.rb +5 -0
  13. data/lib/rails/generators/joosy/application_generator.rb +3 -13
  14. data/lib/rails/generators/joosy/joosy_base.rb +2 -2
  15. data/lib/rails/generators/joosy/layout_generator.rb +1 -8
  16. data/lib/rails/generators/joosy/page_generator.rb +6 -21
  17. data/lib/rails/generators/joosy/preloader_generator.rb +7 -14
  18. data/lib/rails/generators/joosy/templates/app/layouts/application.js.coffee +0 -1
  19. data/lib/rails/generators/joosy/templates/app/layouts/template.js.coffee +1 -1
  20. data/lib/rails/generators/joosy/templates/app/pages/application.js.coffee +1 -1
  21. data/lib/rails/generators/joosy/templates/app/pages/template.js.coffee +3 -3
  22. data/lib/rails/generators/joosy/templates/app/routes.js.coffee +1 -7
  23. data/lib/rails/generators/joosy/templates/app/widgets/template.js.coffee +2 -2
  24. data/lib/rails/generators/joosy/templates/app.js.coffee +0 -3
  25. data/lib/rails/generators/joosy/templates/app_preloader.js.coffee.erb +12 -9
  26. data/lib/rails/generators/joosy/templates/preload.html.erb +6 -5
  27. data/lib/rails/generators/joosy/templates/preload.html.haml +5 -3
  28. data/lib/rails/generators/joosy/templates/preload.html.slim +21 -0
  29. data/lib/rails/generators/joosy/widget_generator.rb +1 -8
  30. data/spec/javascripts/helpers/spec_helper.js.coffee +0 -20
  31. data/spec/javascripts/joosy/core/modules/container_spec.js.coffee +27 -24
  32. data/spec/javascripts/joosy/core/modules/events_spec.js.coffee +18 -42
  33. data/spec/javascripts/joosy/core/modules/filters_spec.js.coffee +27 -27
  34. data/spec/javascripts/joosy/core/modules/log_spec.js.coffee +3 -3
  35. data/spec/javascripts/joosy/core/modules/module_spec.js.coffee +15 -6
  36. data/spec/javascripts/joosy/core/modules/time_manager_spec.js.coffee +7 -12
  37. data/spec/javascripts/joosy/core/modules/widget_manager_spec.js.coffee +17 -31
  38. data/tmp/javascripts/.gitignore +1 -0
  39. data/tmp/spec/javascripts/helpers/.gitignore +1 -0
  40. data/vendor/assets/javascripts/base64.js +135 -0
  41. data/vendor/assets/javascripts/joosy/core/application.js.coffee +26 -0
  42. data/vendor/assets/javascripts/joosy/core/form.js.coffee +87 -0
  43. data/vendor/assets/javascripts/joosy/core/joosy.js.coffee +62 -0
  44. data/vendor/assets/javascripts/joosy/core/layout.js.coffee +38 -0
  45. data/vendor/assets/javascripts/joosy/core/modules/container.js.coffee +51 -0
  46. data/vendor/assets/javascripts/joosy/core/modules/events.js.coffee +17 -0
  47. data/vendor/assets/javascripts/joosy/core/modules/filters.js.coffee +39 -0
  48. data/vendor/assets/javascripts/joosy/core/modules/log.js.coffee +12 -0
  49. data/vendor/assets/javascripts/joosy/core/modules/module.js.coffee +28 -0
  50. data/vendor/assets/javascripts/joosy/core/modules/time_manager.js.coffee +23 -0
  51. data/vendor/assets/javascripts/joosy/core/modules/widgets_manager.js.coffee +45 -0
  52. data/vendor/assets/javascripts/joosy/core/page.js.coffee +136 -0
  53. data/vendor/assets/javascripts/joosy/core/resource/rest.js.coffee +69 -0
  54. data/vendor/assets/javascripts/joosy/core/resource/rest_collection.js.coffee +42 -0
  55. data/vendor/assets/javascripts/joosy/core/router.js.coffee +75 -0
  56. data/vendor/assets/javascripts/joosy/core/widget.js.coffee +35 -0
  57. data/vendor/assets/javascripts/joosy/preloader/development.js.coffee +27 -0
  58. data/vendor/assets/javascripts/joosy/preloader/production.js.coffee +84 -0
  59. data/{app → vendor}/assets/javascripts/joosy.js.coffee +0 -0
  60. data/vendor/assets/javascripts/jquery.form.js +963 -978
  61. data/vendor/assets/javascripts/sugar.js +1 -1
  62. metadata +48 -77
  63. data/.codoopts +0 -5
  64. data/README.md +0 -95
  65. data/app/assets/javascripts/joosy/core/application.js.coffee +0 -50
  66. data/app/assets/javascripts/joosy/core/form.js.coffee +0 -304
  67. data/app/assets/javascripts/joosy/core/helpers/view.js.coffee +0 -30
  68. data/app/assets/javascripts/joosy/core/joosy.js.coffee +0 -129
  69. data/app/assets/javascripts/joosy/core/layout.js.coffee +0 -162
  70. data/app/assets/javascripts/joosy/core/modules/container.js.coffee +0 -104
  71. data/app/assets/javascripts/joosy/core/modules/events.js.coffee +0 -123
  72. data/app/assets/javascripts/joosy/core/modules/filters.js.coffee +0 -67
  73. data/app/assets/javascripts/joosy/core/modules/log.js.coffee +0 -36
  74. data/app/assets/javascripts/joosy/core/modules/module.js.coffee +0 -105
  75. data/app/assets/javascripts/joosy/core/modules/renderer.js.coffee +0 -195
  76. data/app/assets/javascripts/joosy/core/modules/time_manager.js.coffee +0 -46
  77. data/app/assets/javascripts/joosy/core/modules/widgets_manager.js.coffee +0 -84
  78. data/app/assets/javascripts/joosy/core/page.js.coffee +0 -375
  79. data/app/assets/javascripts/joosy/core/preloader.js.coffee +0 -13
  80. data/app/assets/javascripts/joosy/core/resource/collection.js.coffee +0 -174
  81. data/app/assets/javascripts/joosy/core/resource/generic.js.coffee +0 -254
  82. data/app/assets/javascripts/joosy/core/resource/rest.js.coffee +0 -197
  83. data/app/assets/javascripts/joosy/core/resource/rest_collection.js.coffee +0 -125
  84. data/app/assets/javascripts/joosy/core/router.js.coffee +0 -163
  85. data/app/assets/javascripts/joosy/core/templaters/rails_jst.js.coffee +0 -36
  86. data/app/assets/javascripts/joosy/core/widget.js.coffee +0 -80
  87. data/app/assets/javascripts/joosy/preloaders/caching.js.coffee +0 -169
  88. data/app/assets/javascripts/joosy/preloaders/inline.js.coffee +0 -56
  89. data/lib/joosy.rb +0 -9
  90. data/lib/rails/generators/joosy/resource_generator.rb +0 -29
  91. data/lib/rails/generators/joosy/templates/app/helpers/application.js.coffee +0 -4
  92. data/lib/rails/generators/joosy/templates/app/pages/welcome/index.js.coffee +0 -22
  93. data/lib/rails/generators/joosy/templates/app/resources/template.js.coffee +0 -2
  94. data/lib/rails/generators/joosy/templates/app/templates/layouts/application.jst.hamlc +0 -2
  95. data/lib/rails/generators/joosy/templates/app/templates/pages/welcome/index.jst.hamlc +0 -7
  96. data/spec/javascripts/joosy/core/application_spec.js.coffee +0 -40
  97. data/spec/javascripts/joosy/core/form_spec.js.coffee +0 -184
  98. data/spec/javascripts/joosy/core/joosy_spec.js.coffee +0 -72
  99. data/spec/javascripts/joosy/core/layout_spec.js.coffee +0 -50
  100. data/spec/javascripts/joosy/core/modules/renderer_spec.js.coffee +0 -185
  101. data/spec/javascripts/joosy/core/page_spec.js.coffee +0 -178
  102. data/spec/javascripts/joosy/core/resource/collection_spec.js.coffee +0 -84
  103. data/spec/javascripts/joosy/core/resource/generic_spec.js.coffee +0 -118
  104. data/spec/javascripts/joosy/core/resource/rest_collection_spec.js.coffee +0 -58
  105. data/spec/javascripts/joosy/core/resource/rest_spec.js.coffee +0 -129
  106. data/spec/javascripts/joosy/core/router_spec.js.coffee +0 -123
  107. data/spec/javascripts/joosy/core/templaters/rails_jst_spec.js.coffee +0 -25
  108. data/spec/javascripts/joosy/core/widget_spec.js.coffee +0 -40
  109. data/spec/javascripts/joosy/preloaders/caching_spec.js.coffee +0 -36
  110. data/spec/javascripts/joosy/preloaders/inline_spec.js.coffee +0 -16
  111. data/spec/javascripts/support/assets/coolface.jpg +0 -0
  112. data/spec/javascripts/support/assets/okay.jpg +0 -0
  113. data/spec/javascripts/support/assets/test.js +0 -1
  114. data/spec/javascripts/support/sinon-ie-1.3.1.js +0 -82
  115. data/vendor/assets/javascripts/metamorph.js +0 -409
@@ -1,304 +0,0 @@
1
- #= require joosy/core/joosy
2
- #= require joosy/core/modules/module
3
- #= require joosy/core/modules/log
4
- #= require joosy/core/modules/events
5
- #= require joosy/core/modules/container
6
-
7
- #
8
- # AJAXifies form including file uploads and stuff. Built on top of jQuery.Form.
9
- #
10
- # Joosy.Form automatically cares of form validation hihglights. It can
11
- # read common server error responses and add .field_with_errors class to proper
12
- # field.
13
- #
14
- # If you don't have resource associated with form (#fill), it will try to find fields
15
- # by exact keywords from response. Otherwise it will search for resource_name[field].
16
- #
17
- # @example Joosy.Form usage
18
- # form = new Joosy.Form, -> (response)
19
- # console.log "Saved and got some: #{response}"
20
- #
21
- # form.progress = (percent) -> console.log "Uploaded by #{percent}%"
22
- # form.fill @resource
23
- #
24
- class Joosy.Form extends Joosy.Module
25
- @include Joosy.Modules.Log
26
- @include Joosy.Modules.Events
27
- @include Joosy.Modules.Container
28
-
29
- #
30
- # Marks the CSS class to use to mark invalidated fields
31
- #
32
- invalidationClass: 'field_with_errors'
33
-
34
- #
35
- # List of mappings for fields of invalidated data which comes from server
36
- #
37
- # If you have something like {foo: 'bar', bar: 'baz'} coming from server
38
- # substitutions = {foo: 'foo_id'} will change it to {foo_id: 'bar', bar: 'baz'}
39
- #
40
- substitutions: {}
41
-
42
- #
43
- # List of elements for internal usage
44
- #
45
- elements:
46
- 'fields': 'input,select,textarea'
47
-
48
- #
49
- # Makes one AJAX request with form data without binding
50
- #
51
- # @see #constructor
52
- #
53
- # @param [Element] form Instance of HTML form element
54
- # @param [Hash] opts Options
55
- #
56
- @submit: (form, opts={}) ->
57
- form = new @(form, opts)
58
- form.container.submit()
59
- form.unbind()
60
- null
61
-
62
- #
63
- # During initialization replaces your basic form submit with AJAX request
64
- #
65
- # @note If method of form differs from POST or GET it will simulate it
66
- # by adding hidden _method input. In this cases the method itself will be
67
- # set to POST.
68
- #
69
- # @note For browsers having no support of HTML5 Forms it may do an iframe requests
70
- # to handle file uploading.
71
- #
72
- # @param [jQuery] form Form element instance
73
- # @param [Hash] opts Options
74
- #
75
- # @option opts [Function] before `(XHR) -> Bollean` to trigger right before submit.
76
- # By default will run form invalidation cleanup. This behavior can be canceled
77
- # by returning false from your own before callback. Both of callbacks will run if
78
- # you return true.
79
- #
80
- # @option opts [Function] success `(Object) -> null` triggers on 200 HTTP code from server.
81
- # Pases in the parsed JSON.
82
- #
83
- # @option opts [Function] progress `(Float) -> null` runs periodically while form is uploading
84
- #
85
- # @option opts [Function] error `(Object) -> Boolean` triggers if server responded with anything but 200.
86
- # By default will run form invalidation routine. This behavior can be canceled
87
- # by returning false from your own error callback. Both of callbacks will run if
88
- # you return true.
89
- #
90
- constructor: (form, opts={}) ->
91
- if Object.isFunction opts
92
- @success = opts
93
- else
94
- Object.each opts, (key, value) =>
95
- @[key] = value
96
-
97
- @container = $(form)
98
- @refreshElements()
99
- @__delegateEvents()
100
-
101
- method = @container.get(0).getAttribute('method')?.toLowerCase()
102
- if method && !['get', 'post'].has method
103
- @__markMethod method
104
- @container.attr 'method', 'POST'
105
-
106
- @container.ajaxForm
107
- dataType: 'json'
108
- beforeSend: =>
109
- @__before arguments...
110
- success: =>
111
- @__success arguments...
112
- error: =>
113
- @__error arguments...
114
- xhr: =>
115
- xhr = $.ajaxSettings.xhr()
116
- if xhr.upload? && @progress
117
- xhr.upload.onprogress = (event) =>
118
- if event.lengthComputable
119
- @progress (event.position / event.total * 100).round 2
120
- xhr
121
-
122
- #
123
- # Resets form submit behavior to default
124
- #
125
- unbind: ->
126
- @container.unbind('submit').find('input:submit,input:image,button:submit').unbind('click');
127
-
128
- #
129
- # Links current form with given resource and sets values of form inputs from with it.
130
- # Form will use give resource while doing invalidation routine.
131
- #
132
- # @param [Resource] resource Resource to fill fields with
133
- # @param [Function] decorator Decoration callback
134
- #
135
- fill: (resource, decorator) ->
136
- @__resource = resource
137
-
138
- if decorator?
139
- e = decorator resource.e
140
- else
141
- e = resource.e
142
- Object.each e, (key, val) =>
143
- key = resource.__entityName + "[#{key}]"
144
- input = @fields.filter("[name='#{key.underscore()}']:not(:file),[name='#{key.camelize(false)}']:not(:file)")
145
- unless input.is ':checkbox'
146
- input.val val
147
- else
148
- if val
149
- input.attr 'checked', 'checked'
150
- else
151
- input.removeAttr 'checked'
152
-
153
- @container.attr 'action', resource.constructor.__buildSource(extension: resource.id)
154
- @__markMethod() if resource.id
155
- @container.attr 'method', 'POST'
156
-
157
- #
158
- # Submit the HTML Form
159
- #
160
- submit: ->
161
- @container.submit()
162
-
163
- #
164
- # Serializes form into query string.
165
- #
166
- # @param [Boolean] skipMethod Determines if we should skip magical _method field
167
- #
168
- # @return [String]
169
- #
170
- serialize: (skipMethod=true) ->
171
- data = @container.serialize()
172
- data = data.replace /\&?\_method\=put/i, '' if skipMethod
173
-
174
- data
175
-
176
- #
177
- # Inner success callback.
178
- #
179
- __success: (response, status, xhr) ->
180
- if xhr
181
- @success? response
182
- else if response.status == 200
183
- @success response.json
184
- else
185
- @__error response.json
186
-
187
- #
188
- # Inner before callback.
189
- # By default will clean invalidation.
190
- #
191
- __before: (xhr, settings) ->
192
- if !@before? || @before(arguments...) is true
193
- @fields.removeClass @invalidationClass
194
-
195
- #
196
- # Inner error callback.
197
- # By default will trigger basic invalidation.
198
- #
199
- __error: (data) ->
200
- errors = if data.responseText
201
- try
202
- data = jQuery.parseJSON(data.responseText)
203
- catch error
204
- {}
205
- else
206
- data
207
-
208
- if !@error? || @error(errors) is true
209
- errors = @__stringifyErrors(errors)
210
-
211
- Object.each errors, (field, notifications) =>
212
- input = @__findField(field).addClass @invalidationClass
213
- @notification? input, notifications
214
-
215
- #
216
- # Finds field by field name.
217
- # This is not inlined since we want to override
218
- # or monkeypatch it from time to time
219
- #
220
- # @param [String] field Name of field to find
221
- #
222
- __findField: (field) ->
223
- @fields.filter("[name='#{field}']")
224
-
225
- #
226
- # Simulates REST methods by adding hidden _method input with real method
227
- # while setting POST as the transport method
228
- #
229
- # @param [String] method Real method to simulate
230
- #
231
- __markMethod: (method='PUT') ->
232
- method = $('<input/>',
233
- type: 'hidden'
234
- name: '_method'
235
- value: method
236
- )
237
- @container.append method
238
-
239
- #
240
- # Prepares server response for default error handler
241
- # Turns all possible response notations into form notation (foo[bar])
242
- # Every direct field of incoming data will be decorated by @substitutions
243
- #
244
- # @example Flat validation result
245
- # { field1: ['error'] } # input
246
- # { field1: ['error'] } # if form was not associated with Resource by {#fill}
247
- # { "fluffy[field1]": ['error']} # if form was associated with Resource (named fluffy)
248
- #
249
- # @example Complex validation result
250
- # { foo: { bar: { baz: ['error'] } } } # input
251
- # { "foo[bar][bar]": ['error'] } # output
252
- #
253
- # @param [Object] errors Data to prepare
254
- #
255
- # @return [Hash<String, Array>] Flat hash with field names in keys and arrays
256
- # of errors in values
257
- #
258
- __stringifyErrors: (errors) ->
259
- result = {}
260
-
261
- Object.each errors, (field, notifications) =>
262
- if @substitutions[field]?
263
- field = @substitutions[field]
264
-
265
- if Object.isObject notifications
266
- Object.each @__foldInlineEntities(notifications), (key, value) ->
267
- result[field+key] = value
268
- else
269
- if field.indexOf(".") != -1
270
- splited = field.split '.'
271
- field = splited.shift()
272
- field = @__resource.__entityName + "[#{field}]" if @__resource
273
- field += "[#{f}]" for f in splited
274
-
275
- else if @__resource
276
- field = @__resource.__entityName + "[#{field}]"
277
-
278
- result[field] = notifications
279
-
280
- result
281
-
282
- #
283
- # Flattens complex inline structures into form notation
284
- #
285
- # @example Basic flattening
286
- # data = foo: { bar: { baz: [] } }
287
- # inner = @__foldInlineEntities(data.foo, 'foo')
288
- #
289
- # inner # { "foo[bar][baz]": [] }
290
- #
291
- # @param [Object] hash Structure to fold
292
- # @param [String] scope Prefix for resulting scopes
293
- # @param [Object] result Context of result for recursion
294
- #
295
- # @return [Hash]
296
- #
297
- __foldInlineEntities: (hash, scope="", result={}) ->
298
- Object.each hash, (key, value) =>
299
- if Object.isObject(value)
300
- @__foldInlineEntities(value, "#{scope}[#{key}]", result)
301
- else
302
- result["#{scope}[#{key}]"] = value
303
-
304
- result
@@ -1,30 +0,0 @@
1
- #= require joosy/core/joosy
2
-
3
- #
4
- # Rendering and string representation helpers
5
- #
6
- Joosy.helpers 'Application', ->
7
-
8
- #
9
- # Converts \n into <br/> in your text
10
- #
11
- # @param [String] text Text to convert
12
- #
13
- @nl2br = (text) ->
14
- text.toString().replace /\n/g, '<br/>'
15
-
16
- #
17
- # Wraps the inline block into given template
18
- # Request template will receive the inline block as @yield parameter
19
- #
20
- # Example
21
- # -# foo/baz template
22
- # != @renderWrapped 'foo/bar', ->
23
- # %b This string will be passed to 'foo/bar'
24
- #
25
- # -# foo/bar template
26
- # %h1 I'm the wrapper here!
27
- # != @yield
28
- #
29
- @renderWrapped = (template, lambda) ->
30
- @render template, Joosy.Module.merge(this, yield: lambda())
@@ -1,129 +0,0 @@
1
- #
2
- # All the tiny core stuff
3
- #
4
- # @module
5
- #
6
- @Joosy =
7
- #
8
- # Core modules container
9
- #
10
- Modules: {}
11
-
12
- #
13
- # Resources container
14
- #
15
- Resource: {}
16
-
17
- #
18
- # Templaters container
19
- #
20
- Templaters: {}
21
-
22
- #
23
- # If enabled Joosy will log to console a lot of 'in progress' stuff
24
- #
25
- debug: false
26
-
27
- #
28
- # Registeres anything inside specified namespace (objects chain starting from `window`)
29
- #
30
- # @example Basic usage
31
- # Joosy.namespace 'foobar', ->
32
- # class @RealThing
33
- #
34
- # foo = new foobar.RealThing
35
- #
36
- # @param [String] name Namespace keyword
37
- # @param [Boolean] generator Namespace content
38
- #
39
- namespace: (name, generator=false) ->
40
- name = name.split '.'
41
- space = window
42
- for part in name
43
- space = space[part] ?= {}
44
-
45
- if generator
46
- generator = generator.apply space
47
- for key, klass of space
48
- if space.hasOwnProperty(key) &&
49
- Joosy.Module.hasAncestor klass, Joosy.Module
50
- klass.__namespace__ = name
51
-
52
- #
53
- # Registeres given methods as a helpers inside a given set
54
- #
55
- # @param [String] name Helpers set keyword
56
- # @param [Boolean] generator Helpers content
57
- #
58
- helpers: (name, generator) ->
59
- Joosy.namespace "Joosy.Helpers.#{name}", generator
60
-
61
- #
62
- # Scary `hello world`
63
- #
64
- test: ->
65
- text = "Hi :). I'm Joosy. And everything is just fine!"
66
-
67
- if console
68
- console.log text
69
- else
70
- alert text
71
-
72
- #
73
- # Generates UUID
74
- #
75
- uuid: ->
76
- 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace /[xy]/g, (c) ->
77
- r = Math.random() * 16 | 0
78
- v = if c is 'x' then r else r & 3 | 8
79
- v.toString 16
80
- .toUpperCase()
81
-
82
- #
83
- # Preloads sets of images then runs callback
84
- #
85
- # @param [Array<String>] images Images paths
86
- # @param [Function] callback Action to run when every picture was loaded (or triggered an error)
87
- #
88
- preloadImages: (images, callback) ->
89
- unless Object.isArray(images)
90
- images = [images]
91
- if images.length == 0
92
- callback()
93
-
94
- ticks = images.length
95
- result = []
96
- checker = ->
97
- if (ticks -= 1) == 0
98
- callback?()
99
-
100
- for p in images
101
- result.push $('<img/>').load(checker).error(checker).attr('src', p)
102
-
103
- result
104
-
105
- #
106
- # Basic URI builder. Joins base path with params hash
107
- #
108
- # @param [String] url Base url
109
- # @param [Hash] params Parameters to join
110
- #
111
- # @example Basic usage
112
- # Joosy.buildUrl 'http://joosy.ws/#!/test', {foo: 'bar'} # http://joosy.ws/?foo=bar#!/test
113
- #
114
- buildUrl: (url, params) ->
115
- paramsString = []
116
-
117
- Object.each params, (key, value) ->
118
- paramsString.push "#{key}=#{value}"
119
-
120
- hash = url.match(/(\#.*)?$/)[0]
121
- url = url.replace /\#.*$/, ''
122
- if !paramsString.isEmpty() && !url.has(/\?/)
123
- url = url + "?"
124
-
125
- paramsString = paramsString.join '&'
126
- if !paramsString.isBlank() && url.last() != '?'
127
- paramsString = '&' + paramsString
128
-
129
- url + paramsString + hash
@@ -1,162 +0,0 @@
1
- #= require joosy/core/joosy
2
- #= require joosy/core/modules/module
3
- #= require joosy/core/modules/log
4
- #= require joosy/core/modules/events
5
- #= require joosy/core/modules/container
6
- #= require joosy/core/modules/renderer
7
- #= require joosy/core/modules/time_manager
8
- #= require joosy/core/modules/widgets_manager
9
- #= require joosy/core/modules/filters
10
-
11
- #
12
- # Base class for all of your Joosy Layouts.
13
- # @see http://guides.joosy.ws/guides/layouts-pages-and-routing.html
14
- #
15
- # @example Sample application layout
16
- # class @ApplicationLayout extends Joosy.Layout
17
- # @view 'application'
18
- #
19
- class Joosy.Layout extends Joosy.Module
20
- @include Joosy.Modules.Log
21
- @include Joosy.Modules.Events
22
- @include Joosy.Modules.Container
23
- @include Joosy.Modules.Renderer
24
- @include Joosy.Modules.TimeManager
25
- @include Joosy.Modules.WidgetsManager
26
- @include Joosy.Modules.Filters
27
-
28
- @view 'default'
29
-
30
- #
31
- # Sets the method which will controll the painting preparation proccess.
32
- #
33
- # This method will be called right ater previous layout {Joosy.Layout.erase} and in parallel with
34
- # layout data fetching so you can use it to initiate preloader.
35
- #
36
- # @note Given method will be called with `complete` function as parameter. As soon as your
37
- # preparations are done you should call that function.
38
- #
39
- # @example Sample before painter
40
- # @beforePaint (complete) ->
41
- # if !@data # checks if parallel fetching finished
42
- # $('preloader').slideDown -> complete()
43
- #
44
- #
45
- @beforePaint: (callback) ->
46
- @::__beforePaint = callback
47
-
48
- #
49
- # Sets the method which will controll the painting proccess.
50
- #
51
- # This method will be called after fetching, erasing and beforePaint is complete.
52
- # It should be used to setup appearance effects of layout.
53
- #
54
- # @note Given method will be called with `complete` function as parameter. As soon as your
55
- # preparations are done you should call that function.
56
- #
57
- # @example Sample painter
58
- # @paint (complete) ->
59
- # @container.fadeIn -> complete()
60
- #
61
- @paint: (callback) ->
62
- @::__paint = callback
63
-
64
- #
65
- # Sets the method which will controll the erasing proccess.
66
- #
67
- # Use this method to setup hiding effect.
68
- #
69
- # @note Given method will be called with `complete` function as parameter. As soon as your
70
- # preparations are done you should call that function.
71
- #
72
- # @note This method will be caled _before_ unload routines so in theory you can
73
- # access layout data from that. Think twice if you are doing it right though.
74
- #
75
- # @example Sample eraser
76
- # @erase (complete) ->
77
- # @container.fadeOut -> complete()
78
- #
79
- @erase: (callback) ->
80
- @::__erase = callback
81
-
82
- #
83
- # Sets the method which will controll the data fetching proccess.
84
- #
85
- # @note Given method will be called with `complete` function as parameter. As soon as your
86
- # preparations are done you should call that function.
87
- #
88
- # @note You are strongly encouraged to NOT fetch anything with Layout!
89
- # Use {Joosy.Page.fetch}
90
- #
91
- # @example Basic usage
92
- # @fetch (complete) ->
93
- # $.get '/rumbas', (@data) => complete()
94
- #
95
- @fetch: (callback) ->
96
- @::__fetch = callback
97
-
98
- #
99
- # Defaults to `false` to ease beforePaint state check.
100
- #
101
- data: false
102
-
103
- #
104
- # @param [Hash] params List of route params
105
- #
106
- constructor: (@params) ->
107
-
108
- #
109
- # @see Joosy.Router#navigate
110
- #
111
- navigate: (args...) ->
112
- Joosy.Router.navigate(args...)
113
-
114
- #
115
- # This is required by {Joosy.Modules.Renderer}
116
- # Sets the base template dir to app_name/templates/layouts
117
- #
118
- __renderSection: ->
119
- 'layouts'
120
-
121
- #
122
- # Layout bootstrap proccess.
123
- #
124
- # * {Joosy.Modules.Container#refreshElements}
125
- # * {Joosy.Modules.Container#__delegateEvents}
126
- # * {Joosy.Modules.WidgetsManager#__setupWidgets}
127
- # * {Joosy.Modules.Filters#__runAfterLoads}
128
- #
129
- __load: (@container) ->
130
- @refreshElements()
131
- @__delegateEvents()
132
- @__setupWidgets()
133
- @__runAfterLoads()
134
-
135
- #
136
- # Layout destruction proccess.
137
- #
138
- # * {Joosy.Modules.TimeManager#__clearTime}
139
- # * {Joosy.Modules.WidgetsManager#__unloadWidgets}
140
- # * {Joosy.Modules.Renderer#__removeMetamorphs}
141
- # * {Joosy.Modules.Filters#__runAfterUnloads}
142
- #
143
- __unload: ->
144
- @__clearTime()
145
- @__unloadWidgets()
146
- @__removeMetamorphs()
147
- @__runAfterUnloads()
148
-
149
- #
150
- # @todo Rename this shit already. We are not going to release having function that marks
151
- # element with UUID called `yield`.
152
- #
153
- yield: ->
154
- @uuid = Joosy.uuid()
155
-
156
- #
157
- # Gets layout element.
158
- #
159
- # @return [jQuery]
160
- #
161
- content: ->
162
- $("##{@uuid}")