ende 0.3.5 → 0.3.6

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.
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