ende 0.3.5 → 0.3.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e5ab945e667fab4518f897b641e41c3a63a2ccad
4
- data.tar.gz: 5bf29f25cf19c73e0ae910b05efae3111b927658
3
+ metadata.gz: 508121894c529c825b8be23734809551052843b0
4
+ data.tar.gz: c1bb6a5676fcff34bb0c33b60f869bf96c8d4989
5
5
  SHA512:
6
- metadata.gz: 79b8f2332cb04cfb54dc58115022a507d83188aff1e5570f494e7e365858dbc2b0d4331c9c923424b5edf28bad80e58e2e9f42b103cb81e15a8292125183dd99
7
- data.tar.gz: fbcfe1d946d46ce49dec149c7dbc793a49f0f27040edd0f328d90c60a373a81a8b8dc3c28a386a62b9fc333ae86a28a3f63e805287604c22f27f334e808f6d1b
6
+ metadata.gz: e1ace745145b3787b7b74fbc1ea6d022137e26c98d4d3ac9e0bec815fca1d0144a808f00eb60ee5a057e2a4b2fcbb0d1eb20dd11624cec82886bd022058edb6a
7
+ data.tar.gz: a1e37960784210d21d53baef5aa9dc4a8065ec2d33ae6e6620ffe5a91643315b0e25fbbeb863d7cd12a50fbb3560f2a626cd290783dc8bcbe080e144529158a9
data/component.json CHANGED
@@ -1,12 +1,11 @@
1
1
  {
2
2
  "name": "ened",
3
3
  "repo": "indefinido/ened",
4
- "description": "Core web application functionality",
5
- "version": "0.0.1",
4
+ "description": "Core web application functionacility",
5
+ "version": "0.1.0",
6
6
  "keywords": [],
7
7
  "dependencies": {
8
- "mikeric/rivets": "*",
9
- "KapIT/observe-utils": "*",
8
+ "mikeric/rivets": "v0.5.12",
10
9
  "segmentio/extend": "*",
11
10
  "pluma/assimilate": "*",
12
11
  "paulmillr/es6-shim": "*",
@@ -32,4 +31,4 @@
32
31
  "vendor/assets/javascripts"
33
32
  ],
34
33
  "license": "MIT"
35
- }
34
+ }
@@ -2,15 +2,10 @@ define 'aura/extensions/loader', ->
2
2
 
3
3
  'use strict';
4
4
 
5
- try
6
- Spinner = require 'seminovos/vendor/assets/javascripts/spin/spin'
7
- catch e
8
- Spinner = require 'modacad/vendor/assets/javascripts/spin/spin'
9
-
5
+ Spinner = null
10
6
 
11
7
  (application) ->
12
- core = application.core
13
- mediator = core.mediator
8
+ {core} = application
14
9
 
15
10
  loader =
16
11
 
@@ -41,8 +36,17 @@ define 'aura/extensions/loader', ->
41
36
  new Spinner(core.util.extend {}, @options, options).spin target[0]
42
37
 
43
38
  name: 'loader'
39
+ version: '0.1.0'
44
40
  initialize: (application) ->
45
- core.ui ||= {}
46
- application.sandbox.ui = core.ui
47
- core.ui.loader = ->
48
- loader.create arguments...
41
+ {sandbox} = application
42
+
43
+ # TODO add a default spinner on ende, and add application load
44
+ # paths
45
+ try
46
+ Spinner = require 'seminovos/vendor/assets/javascripts/spin/spin'
47
+ catch e
48
+ Spinner = require 'modacad/vendor/assets/javascripts/spin/spin'
49
+
50
+ # Extend application
51
+ sandbox.ui = core.util.extend sandbox.ui, loader: -> loader.create arguments...
52
+ core.ui = core.util.extend core.ui , loader: -> loader.create arguments...
@@ -20,25 +20,25 @@ $.extend $.inputmask.defaults.aliases,
20
20
  digits : 2
21
21
  allowMinus : false
22
22
  allowPlus : false
23
-
23
+
24
24
  plate:
25
25
  mask : 'AAA-9999'
26
-
26
+
27
27
  meters:
28
28
  alias : 'integer'
29
29
  allowMinus : false
30
30
  allowPlus : false
31
31
  integerDigits : 6
32
-
32
+
33
33
  cpf:
34
34
  mask : '999.999.999-99'
35
-
35
+
36
36
  cnpj:
37
37
  mask : '99.999.999/9999-99'
38
-
38
+
39
39
  phone:
40
40
  mask : '(99) 9999[9]-9999'
41
-
41
+
42
42
 
43
43
 
44
44
  define 'aura/extensions/mask', (mask) ->
@@ -47,79 +47,15 @@ define 'aura/extensions/mask', (mask) ->
47
47
 
48
48
 
49
49
  (application) ->
50
-
51
-
50
+
51
+
52
52
  mask = (selector, mask, options) ->
53
53
  $(selector).inputmask mask, options
54
-
55
54
 
56
- # version: '0.1.0'
55
+
56
+ version: '0.1.0'
57
57
 
58
58
  initialize: (application) ->
59
- application.sandbox.ui.mask = mask
60
-
61
- afterAppStart: (application) ->
62
- #
63
-
64
-
65
-
66
-
67
-
68
-
69
- #
70
- #
71
- #
72
- #
73
- # # TODO Remove .call null
74
- # # TODO Remove .call null
75
- # loader.require.call null, 'modernizr'
76
- # loader.require.call null, 'ened/vendor/assets/javascripts/lennon/lennon.js'
77
- # query = loader.require.call null, 'querystring'
78
- # router = null
79
- #
80
- # # TODO rename to router stationg
81
- # (application) ->
82
- # core = application.core
83
- # mediator = core.mediator
84
- #
85
- # # TODO unify router api
86
- # router = new Lennon
87
- # # TODO implement logger api for lennon or change lennon library
88
- # # logger: application.logger
89
- # publishEvent: (name, params) ->
90
- #
91
- # current_route = window.location.href
92
- # if router.last_route != current_route
93
- # mediator.emit 'route.changed'
94
- # router.last_route = current_route
95
- #
96
- # # TODO method parsing (get, delete, put, post)
97
- # mediator.emit name, params
98
- #
99
- # router.location = (href, process = true) ->
100
- # if Modernizr.history
101
- # window.history.pushState null, null, href
102
- # else
103
- # # TODO parse href and extract path!
104
- # window.location.hash = href
105
- #
106
- # process and router.process()
107
- #
108
- #
109
- # application.core.router = router
110
- #
111
- # location = Object.create null,
112
- # # TODO cache query parsing
113
- # query:
114
- # get: -> query.parse window.location.search.substring(1)
115
- #
116
- # toString: -> window.location
117
- #
118
- # version: '0.2.1'
119
- #
120
- # initialize: (application) ->
121
- # application.sandbox.ui.mask = mask
122
- #
123
- # afterAppStart: (application) ->
124
- # router.process()
125
- #
59
+ {core, sandbox} = application
60
+
61
+ sandbox.ui = sandbox.util.extend sandbox.ui, mask: mask
@@ -61,7 +61,7 @@ define 'aura/extensions/models', <%= models_list.to_json %>, (models...) ->
61
61
  core.resource = core.model = sandbox.resource = sandbox.model = (name) ->
62
62
  # TODO use a Map internally in indemma
63
63
  model = indemma.model[name]
64
- throw new Error unless model?
64
+ throw new TypeError "resources: Resource was not defined: #{name}" unless model?
65
65
  model
66
66
 
67
67
  # TODO rename core.models and core.domain, to core.resources, completely
@@ -16,6 +16,7 @@ define 'aura/extensions/rivets', ['extensions/rivets/formatters'], (formatters)-
16
16
 
17
17
  rivets.configure observable_configuration
18
18
  rivets.configure
19
+ prefix: ''
19
20
  templateDelimiters: ['{{', '}}']
20
21
 
21
22
  # Custom rivets view because we don't want to prefix attributes
@@ -5,6 +5,7 @@ define 'aura/extensions/routes', (routes) ->
5
5
  # TODO Remove .call null
6
6
  # TODO Remove .call null
7
7
  loader.require.call null, 'modernizr'
8
+ # TODO rename from ened to ende
8
9
  loader.require.call null, 'ened/vendor/assets/javascripts/lennon/lennon.js'
9
10
  query = loader.require.call null, 'querystring'
10
11
  router = null
@@ -28,17 +29,21 @@ define 'aura/extensions/routes', (routes) ->
28
29
  # TODO method parsing (get, delete, put, post)
29
30
  mediator.emit name, params
30
31
 
31
- router.location = (href, process = true) ->
32
- if Modernizr.history
33
- window.history.pushState null, null, href
34
- else
35
- # TODO parse href and extract path!
36
- window.location.hash = href
32
+ lennon_extensions =
33
+ location: (href, process = true) ->
34
+ if Modernizr.history
35
+ window.history.pushState null, null, href
36
+ else
37
+ # TODO parse href and extract path!
38
+ window.location.hash = href
37
39
 
38
- process and router.process()
40
+ process and router.process()
39
41
 
42
+ define: ->
43
+ return false
40
44
 
41
- application.core.router = router
45
+
46
+ application.core.router = core.util.extend router, lennon_extensions
42
47
 
43
48
  location = Object.create null,
44
49
  # TODO cache query parsing
@@ -53,5 +58,5 @@ define 'aura/extensions/routes', (routes) ->
53
58
  application.sandbox.location = location
54
59
 
55
60
  afterAppStart: (application) ->
56
- router.process()
61
+ # router.process()
57
62
 
@@ -35,48 +35,53 @@ define 'aura/extensions/states', ['application/states'], (states) ->
35
35
  unormalized_widget_options = states[transition.to]
36
36
 
37
37
  # TODO cache rendered widgets!
38
-
39
38
  if unormalized_widget_options
40
- widgets = []
41
-
42
- for name, options of unormalized_widget_options
43
- widget_name = options.name || name
44
- options.resource ||= name unless name == widget_name
45
-
46
- # To allow user controlling the application change the
47
- # widget configuration at runtime, we check the transition
48
- # for widget options
49
- widgets.push
50
- name: widget_name
51
- options: core.util.extend transition[widget_name], options
52
-
53
- # TODO document why we delete this?
54
- delete options.name
39
+ widgets_options = @normalize_widget_options unormalized_widget_options, transition
55
40
 
56
41
  # TODO update aura and use native start method
57
- # {domain} = application
58
- # injection = core.inject(widgets).fail flow.failed
59
- core.inject(widgets).fail flow.failed
42
+ # TODO move this logic to a domain extension
43
+ {domain} = application
44
+
45
+ injection = core.inject(widgets_options).fail flow.failed
60
46
 
61
- #domain?[transition.to]?.ready = injection.done
47
+ domain?[transition.to]?.ready ||= injection.done
62
48
 
63
49
  # To prevent reinstation upon changing to this state for the
64
50
  # second time, delete stored configuration for this state
65
51
  delete states[transition.to]
66
52
 
53
+ normalize_widget_options: (unormalized_widget_options, transition_widgets_options) ->
54
+ widgets = []
55
+
56
+ for name, options of unormalized_widget_options
57
+ widget_name = options.name || name
58
+ options.resource ||= name unless name == widget_name
59
+
60
+ # To allow user controlling the application change the
61
+ # widget configuration at runtime, we check the transition
62
+ # for widget options
63
+ widgets.push
64
+ name: widget_name
65
+ options: core.util.extend transition_widgets_options[widget_name], options
66
+
67
+ # TODO document why we delete this?
68
+ delete options.name
69
+
70
+ widgets
67
71
 
68
72
  failed: (exception) ->
69
73
  logger.error "states.flow.failed: Failed autostarting widget! \n Message: #{exception.message}", exception
70
74
 
71
75
 
72
- version: '0.2.2'
76
+ version: '0.2.3'
73
77
 
74
78
  initialize: (application) ->
75
79
  mediator.on 'state.change' , state.change
76
80
  mediator.on 'state.changed', state.changed
77
81
 
78
82
  # TODO load widgets before state.changed, load on state.change
79
- mediator.on 'state.changed', flow.changed
83
+ # TODO use function hanlder
84
+ mediator.on 'state.changed', -> flow.changed arguments...
80
85
 
81
86
  # TODO better integration with router to remove initial states widgets
82
87
  mediator.on 'states.list', ->
@@ -1,7 +1,7 @@
1
- root = exports ? @
2
-
3
- # TODO figure out a better place to put the crsft token initialization
4
- # root.$.ajaxSetup
5
- # beforeSend: (xhr) ->
6
- # token = $('meta[name="csrf-token"]').attr('content')
7
- # xhr.setRequestHeader 'X-CSRF-Token', token
1
+ require ['jquery'], ($) ->
2
+ # TODO use prefilter instead of beforeSend
3
+ # $.ajaxPrefilter(function(options, originalOptions, xhr){ if ( !options.crossDomain ) { rails.CSRFProtection(xhr); }});
4
+ $.ajaxSetup
5
+ beforeSend: (xhr) ->
6
+ token = $('meta[name="csrf-token"]').attr('content')
7
+ token and xhr.setRequestHeader 'X-CSRF-Token', token
@@ -1,3 +1,4 @@
1
1
  requirejs.config({
2
2
  baseUrl: '/assets'
3
+ waitSeconds: 15
3
4
  });
@@ -1,6 +1,5 @@
1
1
  #= require require/require
2
2
  #= require build
3
- #= require ./jquery
4
3
  # TODO Move this file outside the initializers folder
5
4
 
6
5
  root = exports ? this
@@ -9,14 +8,18 @@ root = exports ? this
9
8
  # it and globalize it, because aurajs does not know we are using
10
9
  # component.io loader and thinks jquery must be shipped within it
11
10
  # TODO think in away to not use a global jquery
12
- try
13
- root.jQuery = root.$ = require 'component-jquery'
14
- catch e
11
+ # try
12
+ # root.jQuery = root.$ = require 'component-jquery'
13
+ # catch e
15
14
  # jQuery was not included in the component build, soo the application will fallback to the
16
15
  # jquery builded in aurajs
17
16
 
17
+ define 'jquery', [], -> require 'component-jquery'
18
+ root.jQuery = root.$ = require 'component-jquery'
19
+
18
20
  # This may be included in build, and loaded before aurajs requires for them
19
21
  # TODO also preload underscorejs
22
+ # define 'underscore', require 'lodash'
20
23
  # TODO also preload eventemitter2
21
24
  # TODO also preload require-jstext
22
25
 
@@ -1,3 +1,4 @@
1
1
  #= require ende_build
2
+ #= require config/load_components
2
3
  #= require_tree ./config/initializers
3
4
  # TODO think if require jquery and jquery inview in this place is actualy a good idead
@@ -7,15 +7,20 @@ define [
7
7
  '/assets/jquery/inview',
8
8
  'stampit/stampit'], (templates, presenter, inview, stampit) ->
9
9
 
10
- observable = require('indefinido-observable').mixin
10
+ observable = require('observable').mixin
11
+ advisable = require('advisable').mixin
11
12
 
12
13
  # TODO define componentjs required packages, as requirejs packages
13
14
  stampit ||= require 'stampit/stampit'
14
15
 
15
16
  scopable = (widget) ->
17
+ deferred = widget.sandbox.data.deferred()
18
+
16
19
  # TODO add widget plug-in as an extension for a widget
17
20
  require ['widgets/viewer/plugins/scopable'], (scopable) ->
18
- scopable widget
21
+ deferred.resolveWith scopable, [scopable widget]
22
+
23
+ deferred
19
24
 
20
25
  paginable = stampit
21
26
  flip_to: (page) ->
@@ -154,7 +159,7 @@ define [
154
159
 
155
160
  # We extend presentation.selected just to assign all values of the item model
156
161
  # TODO call presenter to do this job
157
- @sandbox.util.extend @presentation.selected , item.model
162
+ @sandbox.util.extend @presentation.selected , item.model.json?() || item.model
158
163
  @sandbox.emit "viewer.#{@identifier}.selected", item.model
159
164
 
160
165
  scope_to: (scope, child_scope) ->
@@ -167,6 +172,11 @@ define [
167
172
 
168
173
  @sandbox.emit "viewer.#{@identifier}.scope_changed", @scope
169
174
 
175
+ # TODO better scope data binding, and updating
176
+ if @view? and scope.scope?.data
177
+ @view.update
178
+ scope_data: observable scope.scope.data
179
+
170
180
  @repopulate()
171
181
 
172
182
  repopulate: ->
@@ -175,7 +185,7 @@ define [
175
185
  @load.stop()
176
186
  @load = null
177
187
  else
178
- @fetching?.abort()
188
+ @fetching?.abort?()
179
189
 
180
190
  # TODO store spinner instance, instead of creating a new one every time
181
191
  unless @load?
@@ -212,7 +222,7 @@ define [
212
222
  @$el.addClass 'empty'
213
223
  @$el.removeClass 'filled'
214
224
 
215
- @sandbox.emit "viewer.#{@identifier}.populated", records
225
+ @sandbox.emit "viewer.#{@identifier}.populated", records, @
216
226
 
217
227
  @fetching.always =>
218
228
  # TODO implement status for viewer widget
@@ -254,7 +264,7 @@ define [
254
264
 
255
265
  @load.stop()
256
266
 
257
- @presentation = @presenter records
267
+ @presentation = @presenter records, @scope
258
268
 
259
269
  @$el.html templates[@options.resource]
260
270
 
@@ -274,7 +284,7 @@ define [
274
284
 
275
285
  @handles 'click', 'back', '.back'
276
286
 
277
- @sandbox.emit "viewer.#{@identifier}.populated", records
287
+ @sandbox.emit "viewer.#{@identifier}.populated", records, @
278
288
 
279
289
 
280
290
  deferred.fail =>
@@ -283,10 +293,13 @@ define [
283
293
 
284
294
 
285
295
  plugins: (options) ->
296
+ deferreds = []
286
297
 
287
- paginable widget: @ if options.page
288
- scrollable widget: @ if options.scroll
289
- scopable @ if options.scope or options.scopable
298
+ deferreds.push paginable widget: @ if options.page
299
+ deferreds.push scrollable widget: @ if options.scroll
300
+ deferreds.push scopable @ if options.scope or options.scopable
301
+
302
+ @sandbox.data.when deferreds...
290
303
 
291
304
  # TODO move this method to an extension
292
305
  syncronize_children: ->
@@ -308,10 +321,11 @@ define [
308
321
  element.setAttribute 'aura-widget', current
309
322
 
310
323
  # TODO move this method to an extension
311
- # TODO listen for future parent presentation changes
312
324
  inherit_parent_presentation: ->
313
325
  return unless view = @sandbox?._parent?._view
326
+ advisable view unless view.after?
314
327
 
328
+ # TODO move this method to sandbox
315
329
  isDescendant = (parent, child) ->
316
330
  node = child.parentNode
317
331
 
@@ -321,24 +335,63 @@ define [
321
335
 
322
336
  false
323
337
 
324
- models = {}
338
+ inherited = []
325
339
  # Copy default models
326
340
  # TODO think if its a good idea to notify about model name conflicts
327
- for name, model of view.models
328
- @presentation[name] ||= model # By default do not child models with parent models
341
+ for name, model of view.models when not @presentation[name] # By default do not override child models with parent models
342
+ @presentation[name] = model
343
+ inherited.push name
344
+
345
+ # TODO store bindings instead of searching every time
346
+ for binding in view.bindings when binding.iterated
347
+ for subview in binding.iterated
348
+ if isDescendant subview.els[0], @$el.get(0)
349
+ for name, model of subview.models when not @presentation[name]
350
+ advisable subview
351
+ @presentation[name] = model
352
+ inherited.push name
353
+
354
+ break
329
355
 
330
- for binding in view.bindings
331
- # Copy each binding models
332
- if binding.iterated
333
- for view in binding.iterated
334
- if isDescendant view.els[0], @$el.get(0)
335
- for name, model of view.models
336
- @presentation[name] ||= model
356
+ # Schedule update of copied models
357
+ view.after 'update', (models) =>
358
+ @update_inherited_models view, models, inherited
337
359
 
338
- break
360
+ subview.after 'update', (models) =>
361
+ @update_inherited_models view, models, inherited
339
362
 
340
363
  true
341
364
 
365
+ update_inherited_models: (parent, models, inherited) ->
366
+ # Only update inherited models
367
+ models = @sandbox.util._.pick models, inherited
368
+
369
+ isDescendant = (parent, child) ->
370
+ node = child.parentNode
371
+
372
+ while (node != null)
373
+ return true if (node == parent)
374
+ node = node.parentNode
375
+
376
+ false
377
+
378
+ # Copy default models
379
+ # TODO think if its a good idea to notify about model name conflicts
380
+ for name, model of models
381
+ @presentation[name] = model
382
+
383
+ @view.update models
384
+
385
+ # TODO store bindings instead of searching every time
386
+ for binding in parent.bindings when binding.iterated
387
+ for subview in binding.iterated
388
+ if isDescendant subview.els[0], @$el.get(0)
389
+ models = @sandbox.util._.pick subview.models, inherited
390
+ @view.update models
391
+ @presentation[name] = model for model in models
392
+ break
393
+
394
+ true
342
395
 
343
396
  initialize: (options) ->
344
397
  # TODO import core extensions in another place
@@ -349,10 +402,14 @@ define [
349
402
  @sandbox.on "viewer.#{@identifier}.scope", @scope_to, @
350
403
 
351
404
  # Iniitalize plugins
352
- @plugins options
405
+ loading = @plugins options
353
406
 
354
407
  @$el.addClass "viewer widget #{cssify @identifier} idle clearfix"
355
408
 
409
+ loading.done =>
410
+ @require_custom options
411
+
412
+ require_custom: (options) ->
356
413
  # Fetch custom templates
357
414
  # TODO better custom templates structure and custom presenter
358
415
  # TODO better segregation of concerns on this code