ende 0.4.16 → 0.4.17
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -1
- data/lib/assets/javascripts/aura/extensions/domain.js.coffee +53 -0
- data/lib/assets/javascripts/aura/extensions/models.js.coffee.erb +12 -4
- data/lib/assets/javascripts/aura/extensions/platform.js.coffee +8 -2
- data/lib/assets/javascripts/aura/extensions/states.js.coffee +2 -1
- data/lib/assets/javascripts/aura/extensions/widget/composable.js.coffee +136 -0
- data/lib/assets/javascripts/aura/extensions/widget/eventable.js.coffee +26 -27
- data/lib/assets/javascripts/aura/extensions/widget/flowable.js.coffee +65 -0
- data/lib/assets/javascripts/aura/extensions/widget/lifecycleable.js.coffee +28 -21
- data/lib/assets/javascripts/aura/extensions/widget/napable.js.coffee +9 -12
- data/lib/assets/javascripts/config/load_components.js.coffee +5 -5
- data/lib/assets/javascripts/widgets/attachable/main.js.coffee +77 -0
- data/lib/assets/javascripts/widgets/tray/main.js.coffee +22 -16
- data/lib/assets/javascripts/widgets/viewer/main.js.coffee +3 -3
- data/lib/assets/javascripts/widgets/viewer/plugins/scopable.js.coffee +1 -7
- data/lib/ende/version.rb +1 -1
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 57911b65c0263d7e7a35c38e102979e48fea85d3
|
4
|
+
data.tar.gz: 0502ed60282bcd93ca5dd4498a8dbd2563a104f8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b20043f29efda05c3004d87d5a19407349143879f7fedb8ae3fbf6e58c1ae569819df163560a98886098246730210aef4607f40454a3849d1531263643f45f70
|
7
|
+
data.tar.gz: f69f2597087fa67c2f250ef3a9c492a1c748aa561b79a3cbedc7dc0ff48be50f7d460a13107d67dc371edf7af2edef5bedc3156ec00324800d2592c839399a5c
|
data/README.md
CHANGED
@@ -35,6 +35,7 @@ Components List
|
|
35
35
|
|
36
36
|
_Detailed documentation is comming!_
|
37
37
|
|
38
|
+
- Attachable
|
38
39
|
- Authenticator
|
39
40
|
- Content
|
40
41
|
- Dialog
|
@@ -59,7 +60,7 @@ Extensions List
|
|
59
60
|
- Devise
|
60
61
|
- Rivets
|
61
62
|
- Widget
|
62
|
-
- Napable
|
63
|
+
- Napable
|
63
64
|
- Lifecycleable
|
64
65
|
- Eventable
|
65
66
|
- Models
|
@@ -0,0 +1,53 @@
|
|
1
|
+
'use strict'
|
2
|
+
|
3
|
+
define 'aura/extensions/domain', ->
|
4
|
+
|
5
|
+
# The purpose of this extension is have a business domain practice
|
6
|
+
# integrated with the core application functionality
|
7
|
+
|
8
|
+
version: '0.1.0'
|
9
|
+
|
10
|
+
initialize: (application) ->
|
11
|
+
{core: {mediator}} = application
|
12
|
+
stampit = require 'stampit/stampit'
|
13
|
+
|
14
|
+
eventable = stampit
|
15
|
+
on : mediator.on
|
16
|
+
off : mediator.off
|
17
|
+
once : mediator.once
|
18
|
+
many : mediator.many
|
19
|
+
emit : mediator.emit
|
20
|
+
unlisten: mediator.removeAllListeners
|
21
|
+
|
22
|
+
domainable = stampit()
|
23
|
+
|
24
|
+
# application.use('extensions/models').use 'extensions/widget/flows'
|
25
|
+
# TODO detect if flows extension and models extension have already been loaded
|
26
|
+
|
27
|
+
# TODO require domain commands
|
28
|
+
application.domain ||= eventable()
|
29
|
+
|
30
|
+
afterAppStart: (application) ->
|
31
|
+
{core: {resourceable: {every: resourceables}, Widgets: {Flow}}} = application
|
32
|
+
|
33
|
+
extensions = {}
|
34
|
+
for resourceable in resourceables
|
35
|
+
resource = resourceable.resource.toString()
|
36
|
+
|
37
|
+
namespaces = resource.split '/'
|
38
|
+
method = namespaces.pop() + 'able'
|
39
|
+
|
40
|
+
# Create namespaces
|
41
|
+
node = extensions
|
42
|
+
for namespace in namespaces
|
43
|
+
node[namespace] ||= {}
|
44
|
+
node = node[namespace]
|
45
|
+
|
46
|
+
node[method] = resourceable
|
47
|
+
|
48
|
+
Flow.composition.methods extensions
|
49
|
+
|
50
|
+
|
51
|
+
|
52
|
+
|
53
|
+
|
@@ -25,7 +25,7 @@ end
|
|
25
25
|
|
26
26
|
root = exports ? this
|
27
27
|
|
28
|
-
define 'aura/extensions/models', <%= models_list.to_json %>, (
|
28
|
+
define 'aura/extensions/models', <%= models_list.to_json %>, (resources...) ->
|
29
29
|
|
30
30
|
# TODO better require api for indemma
|
31
31
|
indemma = require 'indemma'
|
@@ -45,10 +45,14 @@ define 'aura/extensions/models', <%= models_list.to_json %>, (models...) ->
|
|
45
45
|
# inflector outside it
|
46
46
|
require 'indefinido-indemma/vendor/owl/pluralize'
|
47
47
|
|
48
|
+
name: 'resources'
|
49
|
+
|
50
|
+
version: '0.1.2'
|
51
|
+
|
48
52
|
# Extension definition
|
49
53
|
initialize: (application) ->
|
50
|
-
core
|
51
|
-
|
54
|
+
{core, sandbox} = application
|
55
|
+
|
52
56
|
core.util.inflector =
|
53
57
|
cssify: (sentence) -> sentence.replace /\//, '-'
|
54
58
|
pluralize: indemma.model.pluralize
|
@@ -73,7 +77,11 @@ define 'aura/extensions/models', <%= models_list.to_json %>, (models...) ->
|
|
73
77
|
|
74
78
|
# TODO allow user to create custom definitions before resources
|
75
79
|
# (models) get defined
|
80
|
+
# new Aura(inflections: {measures: measures})
|
76
81
|
core.util.inflector.define 'measures', 'measures'
|
77
82
|
|
78
83
|
# Build all model definitions
|
79
|
-
|
84
|
+
indemma.model.every = [] # TODO implement this on indemma
|
85
|
+
core.util._.map resources, (definition) ->
|
86
|
+
resource = indemma.model.call definition
|
87
|
+
indemma.model.every.push resource
|
@@ -1,4 +1,4 @@
|
|
1
|
-
'use strict'
|
1
|
+
'use strict'
|
2
2
|
|
3
3
|
define 'aura/extensions/platform', ->
|
4
4
|
|
@@ -14,4 +14,10 @@ define 'aura/extensions/platform', ->
|
|
14
14
|
application.core = Object.create application.core, descriptors
|
15
15
|
application.sandbox = Object.create application.sandbox, descriptors
|
16
16
|
|
17
|
-
# TODO copy other properties to the main application
|
17
|
+
# TODO copy other properties to the main application
|
18
|
+
|
19
|
+
|
20
|
+
# TODO detect aura version and warn for updates
|
21
|
+
application.components = {}
|
22
|
+
application.components.config = application.config
|
23
|
+
application.components.addSource = application.registerWidgetsSource
|
@@ -149,9 +149,10 @@ define 'aura/extensions/states', ['states'], (states) ->
|
|
149
149
|
#
|
150
150
|
# TODO initialize the first flow in flows extension
|
151
151
|
current_state = application.state if application.state != 'initialization'
|
152
|
+
application.startOptions.widgets = arguments[0]
|
152
153
|
application.state = "default"
|
153
154
|
|
154
|
-
startup = application.core.start
|
155
|
+
startup = application.core.start arguments...
|
155
156
|
|
156
157
|
# TODO move to domain extension
|
157
158
|
# TODO let this code more legible
|
@@ -0,0 +1,136 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
define 'aura/extensions/widget/composable', ->
|
4
|
+
stampit = extend = null
|
5
|
+
|
6
|
+
advisorable = (advisor) ->
|
7
|
+
# TODO merge advices in the composition chain
|
8
|
+
advice_names = ['before', 'after', 'around']
|
9
|
+
|
10
|
+
extract_advices = (object) ->
|
11
|
+
found = []
|
12
|
+
for key of object when key.indexOf('_') isnt -1
|
13
|
+
[name, adviced] = key.split '_'
|
14
|
+
|
15
|
+
if advice_names.indexOf(name) != -1
|
16
|
+
callbacks = if object[key].length then object[key] else [object[key]]
|
17
|
+
|
18
|
+
delete object[key]
|
19
|
+
|
20
|
+
found.push
|
21
|
+
key: key
|
22
|
+
name: name
|
23
|
+
adviced: adviced
|
24
|
+
callbacks: callbacks
|
25
|
+
|
26
|
+
found
|
27
|
+
|
28
|
+
advisor.advice = (widget) ->
|
29
|
+
|
30
|
+
advices = extract_advices widget
|
31
|
+
|
32
|
+
for advice in advices
|
33
|
+
|
34
|
+
# in order to preserve declaration order, we must reverse the callbacks order
|
35
|
+
advice.callbacks.reverse() if advice.name == 'before'
|
36
|
+
|
37
|
+
# Advice with all callbacks
|
38
|
+
widget[advice.name] advice.adviced, callback for callback in advice.callbacks
|
39
|
+
|
40
|
+
widget
|
41
|
+
|
42
|
+
advisor.advisable = (factory) ->
|
43
|
+
original = factory.compose
|
44
|
+
|
45
|
+
stampit.mixIn factory,
|
46
|
+
compose: (stamps...) ->
|
47
|
+
{fixed: {methods: composition_methods}} = @composition
|
48
|
+
advices = extract_advices composition_methods
|
49
|
+
|
50
|
+
for stamp in stamps
|
51
|
+
{fixed: {methods: stamp_methods}} = stamp
|
52
|
+
advices = advices.concat extract_advices stamp_methods
|
53
|
+
|
54
|
+
adviced_stamp = {}
|
55
|
+
for advice in advices
|
56
|
+
adviced_stamp[advice.key] ||= []
|
57
|
+
adviced_stamp[advice.key] = adviced_stamp[advice.key].concat advice.callbacks
|
58
|
+
|
59
|
+
# Create a ultimate stamp with all advices arrays or functions merged
|
60
|
+
# TODO do not store advices definitions in the prototype chain
|
61
|
+
stamps.push stampit adviced_stamp
|
62
|
+
|
63
|
+
original.apply factory, stamps
|
64
|
+
|
65
|
+
advice: advisor.advice
|
66
|
+
|
67
|
+
advisor
|
68
|
+
|
69
|
+
composerable = (compositor) ->
|
70
|
+
compositor.composable = (methods, state, enclose) ->
|
71
|
+
factory = (options) ->
|
72
|
+
|
73
|
+
# Inherit defaults from widget
|
74
|
+
options = _.defaults options, factory.composition.fixed.methods.options
|
75
|
+
|
76
|
+
# Composition only will compose methods and state!
|
77
|
+
instance = factory.composition options: options
|
78
|
+
enclose.call instance, options
|
79
|
+
|
80
|
+
# TODO check if it is needed to inherit compositions
|
81
|
+
# if methods.composition
|
82
|
+
# composition = methods.composition
|
83
|
+
# delete methods.composition
|
84
|
+
# composition = stampit.compose composition, stampit methods, state
|
85
|
+
# else
|
86
|
+
# composition = stampit methods, state
|
87
|
+
|
88
|
+
stampit.mixIn factory,
|
89
|
+
composition: stampit methods, state
|
90
|
+
# Suport an extension with multiple compositions
|
91
|
+
compose: -> @composition = stampit.compose @composition, arguments...
|
92
|
+
|
93
|
+
extend: ->
|
94
|
+
`var methods, state`
|
95
|
+
{fixed} = @composition
|
96
|
+
initializers = [enclose]
|
97
|
+
methods = {}
|
98
|
+
state = {}
|
99
|
+
|
100
|
+
for definition in arguments
|
101
|
+
{methods: definition_methods, state: definition_state} = definition
|
102
|
+
|
103
|
+
methods = extend methods, fixed.methods, definition_methods or definition
|
104
|
+
state = extend state , fixed.state , definition_state
|
105
|
+
|
106
|
+
initializers.push fixed.enclose if fixed.enclose
|
107
|
+
initializers.push definition.enclose if definition.enclose
|
108
|
+
|
109
|
+
enclosed = (properties) ->
|
110
|
+
initializers.forEach (initializer) => initializer.call @, properties
|
111
|
+
@
|
112
|
+
|
113
|
+
compositor.composable methods, state, enclosed or enclose
|
114
|
+
|
115
|
+
compositor
|
116
|
+
|
117
|
+
version: '0.1.1'
|
118
|
+
|
119
|
+
initialize: (application) ->
|
120
|
+
stampit = require 'stampit/stampit'
|
121
|
+
advisable = require 'advisable'
|
122
|
+
|
123
|
+
{core: {Widgets, util: {extend}}} = application
|
124
|
+
|
125
|
+
Widgets = composerable advisorable Widgets
|
126
|
+
|
127
|
+
# THINK how to at the same time respect aura ways of instantiating
|
128
|
+
# widgets and preserve widget logic composability
|
129
|
+
Widgets.Default = Widgets.Base
|
130
|
+
delete Widgets.Default.extend
|
131
|
+
|
132
|
+
Widgets.Base = Widgets.advisable Widgets.composable advisable(Widgets.Default.prototype), null, (options) ->
|
133
|
+
Object.defineProperty @, 'constructor', value: Widgets.Default, enumerable: false, configurable: false, writable: false
|
134
|
+
Widgets.Default.call Widgets.advice(@), options
|
135
|
+
|
136
|
+
|
@@ -24,44 +24,43 @@ define 'aura/extensions/widget/eventable', ['es6-map-shim'], ->
|
|
24
24
|
event.preventDefault()
|
25
25
|
false
|
26
26
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
constructor: (options) ->
|
31
|
-
matches = extractor.exec options._ref
|
32
|
-
@name = matches[1]
|
33
|
-
@identifier = options.identifier or options.resource or matches[2]
|
27
|
+
# TODO pass this extensions to the identifiable extension
|
28
|
+
with_component = 'stampit/stampit'
|
29
|
+
stampit = require with_component
|
34
30
|
|
35
|
-
|
31
|
+
eventable = stampit
|
32
|
+
# TODO implement rivets compatibility, instead of generic
|
33
|
+
# binding events, alter html
|
34
|
+
handles: (event_name, widget_event_name = event_name, selector = @$el) ->
|
35
|
+
unless @name
|
36
|
+
message = "Widget name must be provided in order to use handlers, but this.name is '#{@name}' \n"
|
37
|
+
message += "Also you may have forgotten to set the type of your widget to 'Base'"
|
38
|
+
throw new TypeError message
|
36
39
|
|
37
|
-
|
40
|
+
context = @$el unless selector == @$el
|
38
41
|
|
39
|
-
|
42
|
+
event_name = translations.get(event_name) ? event_name
|
40
43
|
|
44
|
+
@sandbox.dom.find(selector, context).on event_name, create_handler(@, widget_event_name || event_name)
|
45
|
+
|
46
|
+
before_initialize: ->
|
47
|
+
matches = extractor.exec @options._ref
|
48
|
+
@name = matches[1]
|
49
|
+
@identifier = @options.identifier or @options.resource or matches[2]
|
50
|
+
@sandbox.identifier = @identifier
|
41
51
|
|
42
52
|
version: '0.1.0'
|
43
53
|
|
44
54
|
initialize: (application) ->
|
45
|
-
|
46
|
-
extend = require with_component
|
55
|
+
application.core.Widgets.Base.compose eventable
|
47
56
|
|
48
|
-
|
57
|
+
{core: {mediator}} = application
|
58
|
+
application.sandbox.startListening = ->
|
59
|
+
# TODO @listening = true
|
60
|
+
mediator.on event.name, event.callback for event in @_events
|
49
61
|
|
50
|
-
|
51
|
-
# TODO implement rivets compatibility, instead of generic
|
52
|
-
# binding events, alter html
|
53
|
-
handles: (event_name, widget_event_name = event_name, selector = @$el) ->
|
54
|
-
unless @name
|
55
|
-
message = "Widget name must be provided in order to use handlers, but this.name is '#{@name}' \n"
|
56
|
-
message = "Also you may have forgotten to set the type of your widget to 'Base'"
|
57
|
-
throw message
|
62
|
+
true
|
58
63
|
|
59
|
-
context = @$el unless selector == @$el
|
60
64
|
|
61
|
-
event_name = translations.get(event_name) ? event_name
|
62
65
|
|
63
|
-
@sandbox.dom.find(selector, context).on event_name, create_handler(@, widget_event_name || event_name)
|
64
66
|
|
65
|
-
# TODO replace Base.extend inheritance to stampit composition
|
66
|
-
Widgets.Base = Widgets.Base.extend eventable
|
67
|
-
eventable.super = Widgets.Base.__super__
|
@@ -0,0 +1,65 @@
|
|
1
|
+
'use strict'
|
2
|
+
|
3
|
+
define 'aura/extensions/widget/flowable', ->
|
4
|
+
|
5
|
+
# The purpose of this extension is have a formalized widget type to
|
6
|
+
# put domain comunication logic between other widgets
|
7
|
+
(application) ->
|
8
|
+
|
9
|
+
instantiation =
|
10
|
+
composite_with: ->
|
11
|
+
|
12
|
+
stampit = require 'stampit/stampit'
|
13
|
+
|
14
|
+
# TODO Move each composable to its file
|
15
|
+
eventable = stampit().enclose ->
|
16
|
+
@on = @sandbox.on
|
17
|
+
@off = @sandbox.off
|
18
|
+
@once = @sandbox.once
|
19
|
+
@many = @sandbox.many
|
20
|
+
@emit = @sandbox.emit
|
21
|
+
@unlisten = @sandbox.removeAllListeners
|
22
|
+
|
23
|
+
@
|
24
|
+
|
25
|
+
filterable = stampit()
|
26
|
+
|
27
|
+
routeable = stampit()
|
28
|
+
|
29
|
+
stateable = stampit(transit: (state) -> application.state = state).enclose ->
|
30
|
+
Object.defineProperty @, 'state',
|
31
|
+
set: @transit
|
32
|
+
get: -> application.state
|
33
|
+
configurable: false
|
34
|
+
|
35
|
+
@stateless()
|
36
|
+
|
37
|
+
elementless = stampit ->
|
38
|
+
marker = " #{@name}.#{@identifier} flow "
|
39
|
+
node = document.createComment marker
|
40
|
+
@$el.replaceWith node
|
41
|
+
@$el = $ node
|
42
|
+
|
43
|
+
stampit.compose filterable, routeable, eventable, stateable, elementless
|
44
|
+
|
45
|
+
create_widget_type: (flowable, application) ->
|
46
|
+
{core: {Widgets}} = application
|
47
|
+
|
48
|
+
Widgets.Flow = Widgets.composable Widgets.Default.prototype, null, (options) -> Widgets.Default.call @, options
|
49
|
+
Widgets.Flow.compose flowable
|
50
|
+
|
51
|
+
version: '0.1.0'
|
52
|
+
|
53
|
+
initialize: (application) ->
|
54
|
+
flowable = instantiation.composite_with application
|
55
|
+
instantiation.create_widget_type flowable, application
|
56
|
+
|
57
|
+
afterAppStart: (application) ->
|
58
|
+
application.components.addSource 'flow', 'flows'
|
59
|
+
|
60
|
+
|
61
|
+
|
62
|
+
|
63
|
+
|
64
|
+
|
65
|
+
|
@@ -6,8 +6,12 @@ define 'aura/extensions/widget/lifecycleable', ->
|
|
6
6
|
with_component = 'jquery'
|
7
7
|
jQuery = require with_component
|
8
8
|
|
9
|
+
with_component = 'stampit/stampit'
|
10
|
+
stampit = require with_component
|
11
|
+
|
9
12
|
core = null
|
10
13
|
|
14
|
+
# TODO transform into a composable
|
11
15
|
lifecycleable =
|
12
16
|
injection: (definition) ->
|
13
17
|
options = definition.options
|
@@ -50,7 +54,7 @@ define 'aura/extensions/widget/lifecycleable', ->
|
|
50
54
|
options.require.packages.push name: options.ref, location: widgetsPath + "/" + widgetName
|
51
55
|
options.name = widgetName
|
52
56
|
|
53
|
-
unless options.el
|
57
|
+
unless options.el?
|
54
58
|
options.el = jQuery '<div class="widget"></div>'
|
55
59
|
@root.append options.el
|
56
60
|
|
@@ -58,22 +62,21 @@ define 'aura/extensions/widget/lifecycleable', ->
|
|
58
62
|
|
59
63
|
definition
|
60
64
|
|
61
|
-
recyclable =
|
62
|
-
|
65
|
+
recyclable = stampit(
|
66
|
+
inject: (name, options) ->
|
67
|
+
core.inject name, options
|
68
|
+
|
69
|
+
injection: -> lifecycleable.injection arguments...
|
63
70
|
|
71
|
+
before_initialize: ->
|
64
72
|
# TODO only listen to this specific sandbox stop
|
65
|
-
@sandbox.on 'aura.sandbox.stop', (sandbox)
|
73
|
+
@sandbox.on 'aura.sandbox.stop', (sandbox) ->
|
66
74
|
@stopped() if @sandbox.ref == sandbox.ref
|
75
|
+
, @
|
67
76
|
|
68
|
-
@sandbox.on 'aura.sandbox.start', (sandbox)
|
77
|
+
@sandbox.on 'aura.sandbox.start', (sandbox) ->
|
69
78
|
@started() if @sandbox.ref == sandbox.ref
|
70
|
-
|
71
|
-
recyclable.super.constructor.call @, options
|
72
|
-
|
73
|
-
@initialized()
|
74
|
-
|
75
|
-
inject: (name, options) ->
|
76
|
-
core.inject name, options
|
79
|
+
, @
|
77
80
|
|
78
81
|
initialized: ->
|
79
82
|
# TODO think how to access parent widget in children ones
|
@@ -88,6 +91,7 @@ define 'aura/extensions/widget/lifecycleable', ->
|
|
88
91
|
stopped: ->
|
89
92
|
@$el.remove()
|
90
93
|
|
94
|
+
).enclose -> @initialized()
|
91
95
|
|
92
96
|
(application) ->
|
93
97
|
|
@@ -104,12 +108,18 @@ define 'aura/extensions/widget/lifecycleable', ->
|
|
104
108
|
lifecycleable.sources = application.config.widgets.sources
|
105
109
|
lifecycleable.find = core.dom.find
|
106
110
|
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
+
Object.defineProperty lifecycleable, 'root',
|
112
|
+
get: ->
|
113
|
+
root = core.dom.find app.startOptions.widgets
|
114
|
+
throw new TypeError "No root node found for selector '#{app.startOptions.widgets}'." unless root.length != 0
|
115
|
+
|
116
|
+
# Cache and override root when found
|
117
|
+
Object.defineProperty lifecycleable, 'root', value: root
|
118
|
+
|
119
|
+
root
|
120
|
+
|
121
|
+
configurable: true
|
111
122
|
|
112
|
-
throw new TypeError "No root node found for selector '#{app.startOptions.widgets}'." unless lifecycleable.root.length != 0
|
113
123
|
|
114
124
|
lifecycleable.decamelize = core.util.decamelize
|
115
125
|
lifecycleable.capitalize = core.util.capitalize
|
@@ -145,7 +155,4 @@ define 'aura/extensions/widget/lifecycleable', ->
|
|
145
155
|
params[2] = @ if params.length < 3
|
146
156
|
core.inject params...
|
147
157
|
|
148
|
-
|
149
|
-
# TODO replace Base.extend inheritance to stampit composition
|
150
|
-
core.Widgets.Base = core.Widgets.Base.extend recyclable
|
151
|
-
recyclable.super = core.Widgets.Base.__super__
|
158
|
+
core.Widgets.Base.compose recyclable
|
@@ -2,7 +2,8 @@ define 'aura/extensions/widget/napable', ->
|
|
2
2
|
|
3
3
|
'use strict'
|
4
4
|
|
5
|
-
|
5
|
+
# TODO think about adding rivets bindings to the element
|
6
|
+
napable = stampit
|
6
7
|
bind: ->
|
7
8
|
@sandbox.on "#{@name}.#{@identifier}.sleep", napable.sleep, @
|
8
9
|
@sandbox.on "#{@name}.#{@identifier}.wake" , napable.wake , @
|
@@ -12,22 +13,18 @@ define 'aura/extensions/widget/napable', ->
|
|
12
13
|
wake: ->
|
13
14
|
@$el.addClass 'awake'
|
14
15
|
@$el.removeClass 'asleep'
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
16
|
+
,
|
17
|
+
naping: false
|
18
|
+
, ->
|
19
|
+
napable_extensions["super"].constructor.apply @, arguments
|
20
|
+
napable.bind.call @
|
20
21
|
|
21
22
|
# The purpose of this extension is allow parent widget to save
|
22
23
|
# memory by sending a sleep command to the child widgets
|
23
24
|
(application) ->
|
24
25
|
|
25
|
-
version: '0.1.
|
26
|
+
version: '0.1.1'
|
26
27
|
|
27
28
|
initialize: (application) ->
|
28
29
|
{core} = application
|
29
|
-
|
30
|
-
# Add support for element removal after stoping widget
|
31
|
-
# TODO replace Base.extend inheritance to stampit composition
|
32
|
-
core.Widgets.Base = core.Widgets.Base.extend napable_extensions
|
33
|
-
napable_extensions.super = core.Widgets.Base.__super__
|
30
|
+
core.Widgets.Base.compose napable
|
@@ -121,8 +121,8 @@ define 'config/load_components', ['application_components'], ->
|
|
121
121
|
using = loader.discover params...
|
122
122
|
|
123
123
|
try
|
124
|
-
|
125
|
-
|
124
|
+
# TODO rename mod to module
|
125
|
+
mod = loader.loaders.discovered.apply @, params
|
126
126
|
|
127
127
|
catch e
|
128
128
|
if e.require
|
@@ -132,15 +132,15 @@ define 'config/load_components', ['application_components'], ->
|
|
132
132
|
|
133
133
|
# Since it failed to load with component, try to load with requirejs
|
134
134
|
loader.activate 'requirejs'
|
135
|
-
unless
|
136
|
-
|
135
|
+
unless mod
|
136
|
+
mod = loader.loaders.discovered.apply @, params
|
137
137
|
else
|
138
138
|
throw e
|
139
139
|
|
140
140
|
# Always let requirejs active by default
|
141
141
|
loader.activate 'requirejs'
|
142
142
|
|
143
|
-
|
143
|
+
mod
|
144
144
|
|
145
145
|
loader.shim()
|
146
146
|
loader.initialize()
|
@@ -0,0 +1,77 @@
|
|
1
|
+
define ->
|
2
|
+
|
3
|
+
# TODO create diferent type for non-ui composable widgets
|
4
|
+
# TODO think about how to make this widget dependent on eventable extension
|
5
|
+
# TODO move this widtet to an extension when element is stored in the sandbox
|
6
|
+
type: 'Base'
|
7
|
+
|
8
|
+
version: '0.1.0'
|
9
|
+
|
10
|
+
# TODO options: {state: 'reset' # Will preserve initial widget state }
|
11
|
+
|
12
|
+
initialize: (options) ->
|
13
|
+
|
14
|
+
@sandbox._attachments = []
|
15
|
+
|
16
|
+
@$el.addClass "widget #{@name} composing"
|
17
|
+
|
18
|
+
# TODO think how to extend widgets as a way of knowing all children have started
|
19
|
+
@compose_when_parent()
|
20
|
+
|
21
|
+
# TODO think how to extend widgets as a way of knowing all children have started
|
22
|
+
compose_when_parent: ->
|
23
|
+
@interval = setInterval =>
|
24
|
+
if @sandbox._parent?
|
25
|
+
@compose @sandbox._parent._widget
|
26
|
+
clearInterval @interval
|
27
|
+
, 800
|
28
|
+
|
29
|
+
# Create a widget type to replace @$el for a html comment
|
30
|
+
compose: (parent) ->
|
31
|
+
@parent = parent
|
32
|
+
parent_namespace = parent.name + '.' + parent.identifier
|
33
|
+
|
34
|
+
# TODO move to elementless widgets
|
35
|
+
@transform_into_elementless()
|
36
|
+
|
37
|
+
@sandbox.on "#{parent_namespace}.reattach", @reattach, @
|
38
|
+
@sandbox.on "#{parent_namespace}.detach" , @detach , @
|
39
|
+
@sandbox.on "#{parent_namespace}.attach" , @attach , @
|
40
|
+
|
41
|
+
transform_into_elementless: ->
|
42
|
+
serializable_options = _.omit @options, '$el', 'el', 'ref', '_ref', 'require', 'baseUrl'
|
43
|
+
|
44
|
+
marker = " #{@name}.#{@identifier} for #{@parent.name}.#{parent.identifier}"
|
45
|
+
marker += " with #{JSON.stringify serializable_options} "
|
46
|
+
node = document.createComment marker
|
47
|
+
@$el.replaceWith node
|
48
|
+
|
49
|
+
@$el = $ node
|
50
|
+
|
51
|
+
reattach: (selector) ->
|
52
|
+
@detach()
|
53
|
+
@attach selector
|
54
|
+
|
55
|
+
detach: ->
|
56
|
+
@sandbox.stopListening()
|
57
|
+
# TODO Support multiple deatachments events storage
|
58
|
+
current_events = @sandbox._events
|
59
|
+
@sandbox._events = @sandbox._attachments.shift() || []
|
60
|
+
@sandbox._attachments.push current_events
|
61
|
+
|
62
|
+
# TODO unbind and store jquery handlers
|
63
|
+
# TODO store element position in the attachment
|
64
|
+
@parent.$el.detach()
|
65
|
+
|
66
|
+
attach: (selector) ->
|
67
|
+
element = @sandbox.dom.find selector
|
68
|
+
@sandbox.logger.error "attach: No element found for #{selector} for attachment" unless element.length
|
69
|
+
|
70
|
+
# TODO Support multiple deatachments events storage
|
71
|
+
@sandbox._attachments.push @sandbox._events
|
72
|
+
@sandbox._events = @sandbox._attachments.shift() || []
|
73
|
+
@sandbox.startListening()
|
74
|
+
|
75
|
+
# TODO rebind jquery handlers
|
76
|
+
# TODO restore element position of the attachment
|
77
|
+
element.append @parent.$el
|
@@ -1,24 +1,22 @@
|
|
1
|
-
|
1
|
+
'use strict'
|
2
2
|
|
3
|
-
|
3
|
+
define
|
4
4
|
|
5
5
|
type: 'Base'
|
6
6
|
|
7
7
|
version: '0.1.2'
|
8
8
|
|
9
9
|
initialize: (options) ->
|
10
|
-
names = []
|
11
10
|
{identifier} = options
|
11
|
+
@names = []
|
12
12
|
|
13
|
-
# TODO access omit method throuhgh
|
13
|
+
# TODO access omit method throuhgh sandbox
|
14
14
|
widget_options = _.omit options, 'el', 'ref', '_ref', 'name', 'require', 'baseUrl', 'resource'
|
15
15
|
|
16
16
|
# TODO remove jquery dependency
|
17
|
-
|
18
|
-
names.push suboptions.name || name
|
19
|
-
@add suboptions.name || name, suboptions
|
17
|
+
injections = @prepare_injections widget_options
|
20
18
|
|
21
|
-
@$el.addClass ['tray', 'widget'].concat(names).join(' ')
|
19
|
+
@$el.addClass ['tray', 'widget'].concat(@names).join(' ')
|
22
20
|
|
23
21
|
@identifier ||= identifier
|
24
22
|
|
@@ -27,13 +25,21 @@ define ->
|
|
27
25
|
@identifier = identifier
|
28
26
|
@$el.attr 'id', identifier
|
29
27
|
|
30
|
-
|
28
|
+
# TODO get defer through sandbox
|
29
|
+
_.defer =>
|
30
|
+
@sandbox.start injections
|
31
|
+
|
32
|
+
prepare_injections: (widget_options) ->
|
33
|
+
# TODO remove jquery dependency, and use type detection through sandbox
|
34
|
+
for name, suboptions of widget_options when $.type(suboptions) is "object"
|
35
|
+
@names.push suboptions.name || name
|
36
|
+
|
37
|
+
# TODO do not allow elements outside of the tray
|
38
|
+
# TODO remove jquery dependency, and use documentFragment to build widgets
|
39
|
+
# TODO allow widgets without elements
|
40
|
+
@$el.append suboptions.el = jQuery '<div class="widget"></div>'
|
31
41
|
|
32
|
-
|
42
|
+
@injection
|
43
|
+
name: suboptions.name || name
|
44
|
+
options: suboptions
|
33
45
|
|
34
|
-
# TODO add widgets as childrens of the tray widget sandbox
|
35
|
-
# TODO remove jquery dependency, and use documentFragment to build widgets
|
36
|
-
element = jQuery '<div class="widget"></div>'
|
37
|
-
options.el = element
|
38
|
-
@$el.append element
|
39
|
-
@inject name, options
|
@@ -1,13 +1,13 @@
|
|
1
1
|
'use strict';
|
2
2
|
|
3
|
-
|
3
|
+
lazy_require = 'advisable'
|
4
4
|
define [
|
5
5
|
'./states/index',
|
6
6
|
'./presenters/default',
|
7
7
|
'jquery.inview',
|
8
8
|
'stampit/stampit',
|
9
|
-
|
10
|
-
|
9
|
+
'observable',
|
10
|
+
lazy_require], (templates, presenter, inview, stampit, observable, advisable) ->
|
11
11
|
|
12
12
|
scopable = (widget) ->
|
13
13
|
deferred = widget.sandbox.data.deferred()
|
@@ -1,11 +1,6 @@
|
|
1
1
|
'use strict';
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
# TODO define componentjs required packages, as requirejs packages
|
6
|
-
observable = require('indefinido-observable').mixin
|
7
|
-
|
8
|
-
define ['stampit/stampit'], (stampit) ->
|
3
|
+
define ['stampit/stampit', 'observable'], (stampit, observable) ->
|
9
4
|
|
10
5
|
scopingable = stampit
|
11
6
|
start: ->
|
@@ -42,7 +37,6 @@ define ['stampit/stampit'], (stampit) ->
|
|
42
37
|
@
|
43
38
|
|
44
39
|
|
45
|
-
|
46
40
|
scopable = stampit
|
47
41
|
forward_scope_data: (scope_name, data) ->
|
48
42
|
switch @scope['$' + scope_name].constructor
|
data/lib/ende/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ende
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.17
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Heitor Salazar
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-04-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -71,6 +71,7 @@ files:
|
|
71
71
|
- ende.gemspec
|
72
72
|
- lib/assets/.gitkeep
|
73
73
|
- lib/assets/javascripts/aura/extensions/devise.js.coffee
|
74
|
+
- lib/assets/javascripts/aura/extensions/domain.js.coffee
|
74
75
|
- lib/assets/javascripts/aura/extensions/loader.js.coffee
|
75
76
|
- lib/assets/javascripts/aura/extensions/mask.js.coffee
|
76
77
|
- lib/assets/javascripts/aura/extensions/mediator.js
|
@@ -82,7 +83,9 @@ files:
|
|
82
83
|
- lib/assets/javascripts/aura/extensions/routes.js.coffee
|
83
84
|
- lib/assets/javascripts/aura/extensions/screening.js.coffee
|
84
85
|
- lib/assets/javascripts/aura/extensions/states.js.coffee
|
86
|
+
- lib/assets/javascripts/aura/extensions/widget/composable.js.coffee
|
85
87
|
- lib/assets/javascripts/aura/extensions/widget/eventable.js.coffee
|
88
|
+
- lib/assets/javascripts/aura/extensions/widget/flowable.js.coffee
|
86
89
|
- lib/assets/javascripts/aura/extensions/widget/lifecycleable.js.coffee
|
87
90
|
- lib/assets/javascripts/aura/extensions/widget/napable.js.coffee
|
88
91
|
- lib/assets/javascripts/aura/extensions/widget/presentable.js.coffee
|
@@ -93,6 +96,7 @@ files:
|
|
93
96
|
- lib/assets/javascripts/config/load_components.js.coffee
|
94
97
|
- lib/assets/javascripts/ende.js.coffee
|
95
98
|
- lib/assets/javascripts/value_objects/phone.js.coffee
|
99
|
+
- lib/assets/javascripts/widgets/attachable/main.js.coffee
|
96
100
|
- lib/assets/javascripts/widgets/authenticator/main.js.coffee
|
97
101
|
- lib/assets/javascripts/widgets/authenticator/presenter.js.coffee
|
98
102
|
- lib/assets/javascripts/widgets/authenticator/states/default.html
|