ende 0.1.4 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (114) hide show
  1. checksums.yaml +4 -4
  2. data/component.json +4 -2
  3. data/ende.gemspec +1 -0
  4. data/lib/assets/javascripts/aura/extensions/devise.js.coffee +94 -15
  5. data/lib/assets/javascripts/aura/extensions/routes.js.coffee +21 -0
  6. data/lib/assets/javascripts/aura/extensions/states.js.coffee +3 -1
  7. data/lib/assets/javascripts/aura/extensions/widget/eventable.js.coffee +19 -21
  8. data/lib/assets/javascripts/aura/extensions/widget/lifecycleable.js.coffee +17 -1
  9. data/lib/assets/javascripts/config/initializers/jquery.js.coffee +4 -3
  10. data/lib/assets/javascripts/config/initializers/load_components.js.coffee +19 -0
  11. data/lib/assets/javascripts/ende.js.coffee +3 -1
  12. data/lib/assets/javascripts/widgets/authenticator/main.js.coffee +3 -3
  13. data/lib/assets/javascripts/widgets/viewer/main.js.coffee +189 -120
  14. data/lib/ende/users_controller_extensions.rb +14 -0
  15. data/lib/ende/version.rb +1 -1
  16. data/lib/ende.rb +5 -0
  17. data/vendor/assets/components/KapIT-observe-utils/component.json +16 -0
  18. data/vendor/assets/components/KapIT-observe-utils/lib/observe-utils.js +780 -0
  19. data/vendor/assets/components/chaijs-assertion-error/component.json +18 -0
  20. data/vendor/assets/components/chaijs-assertion-error/index.js +110 -0
  21. data/vendor/assets/components/chaijs-chai/component.json +47 -0
  22. data/vendor/assets/components/chaijs-chai/index.js +1 -0
  23. data/vendor/assets/components/chaijs-chai/lib/chai/assertion.js +130 -0
  24. data/vendor/assets/components/chaijs-chai/lib/chai/core/assertions.js +1270 -0
  25. data/vendor/assets/components/chaijs-chai/lib/chai/interface/assert.js +1080 -0
  26. data/vendor/assets/components/chaijs-chai/lib/chai/interface/expect.js +12 -0
  27. data/vendor/assets/components/chaijs-chai/lib/chai/interface/should.js +76 -0
  28. data/vendor/assets/components/chaijs-chai/lib/chai/utils/addChainableMethod.js +94 -0
  29. data/vendor/assets/components/chaijs-chai/lib/chai/utils/addMethod.js +37 -0
  30. data/vendor/assets/components/chaijs-chai/lib/chai/utils/addProperty.js +40 -0
  31. data/vendor/assets/components/chaijs-chai/lib/chai/utils/flag.js +32 -0
  32. data/vendor/assets/components/chaijs-chai/lib/chai/utils/getActual.js +19 -0
  33. data/vendor/assets/components/chaijs-chai/lib/chai/utils/getEnumerableProperties.js +25 -0
  34. data/vendor/assets/components/chaijs-chai/lib/chai/utils/getMessage.js +49 -0
  35. data/vendor/assets/components/chaijs-chai/lib/chai/utils/getName.js +20 -0
  36. data/vendor/assets/components/chaijs-chai/lib/chai/utils/getPathValue.js +102 -0
  37. data/vendor/assets/components/chaijs-chai/lib/chai/utils/getProperties.js +35 -0
  38. data/vendor/assets/components/chaijs-chai/lib/chai/utils/index.js +108 -0
  39. data/vendor/assets/components/chaijs-chai/lib/chai/utils/inspect.js +320 -0
  40. data/vendor/assets/components/chaijs-chai/lib/chai/utils/objDisplay.js +48 -0
  41. data/vendor/assets/components/chaijs-chai/lib/chai/utils/overwriteMethod.js +51 -0
  42. data/vendor/assets/components/chaijs-chai/lib/chai/utils/overwriteProperty.js +54 -0
  43. data/vendor/assets/components/chaijs-chai/lib/chai/utils/test.js +26 -0
  44. data/vendor/assets/components/chaijs-chai/lib/chai/utils/transferFlags.js +44 -0
  45. data/vendor/assets/components/chaijs-chai/lib/chai/utils/type.js +45 -0
  46. data/vendor/assets/components/chaijs-chai/lib/chai.js +80 -0
  47. data/vendor/assets/components/chaijs-deep-eql/component.json +18 -0
  48. data/vendor/assets/components/chaijs-deep-eql/lib/eql.js +257 -0
  49. data/vendor/assets/components/chaijs-type-detect/component.json +16 -0
  50. data/vendor/assets/components/chaijs-type-detect/lib/type.js +142 -0
  51. data/vendor/assets/components/component-bind/component.json +14 -0
  52. data/vendor/assets/components/component-bind/index.js +24 -0
  53. data/vendor/assets/components/component-delegate/component.json +19 -0
  54. data/vendor/assets/components/component-delegate/index.js +42 -0
  55. data/vendor/assets/components/component-event/component.json +13 -0
  56. data/vendor/assets/components/component-event/index.js +40 -0
  57. data/vendor/assets/components/component-jquery/component.json +14 -0
  58. data/vendor/assets/components/component-jquery/index.js +9601 -0
  59. data/vendor/assets/components/component-link-delegate/component.json +23 -0
  60. data/vendor/assets/components/component-link-delegate/index.js +60 -0
  61. data/vendor/assets/components/component-matches-selector/component.json +20 -0
  62. data/vendor/assets/components/component-matches-selector/index.js +45 -0
  63. data/vendor/assets/components/component-query/component.json +21 -0
  64. data/vendor/assets/components/component-query/index.js +21 -0
  65. data/vendor/assets/components/component-type/component.json +18 -0
  66. data/vendor/assets/components/component-type/index.js +32 -0
  67. data/vendor/assets/components/component-url/component.json +17 -0
  68. data/vendor/assets/components/component-url/index.js +63 -0
  69. data/vendor/assets/components/discore-closest/component.json +14 -0
  70. data/vendor/assets/components/discore-closest/index.js +18 -0
  71. data/vendor/assets/components/indefinido-advisable/component.json +21 -0
  72. data/vendor/assets/components/indefinido-advisable/index.js +1 -0
  73. data/vendor/assets/components/indefinido-advisable/lib/advisable.js +60 -0
  74. data/vendor/assets/components/indefinido-indemma/component.json +40 -0
  75. data/vendor/assets/components/indefinido-indemma/index.js +1 -0
  76. data/vendor/assets/components/indefinido-indemma/lib/extensions/rivets.js +23 -0
  77. data/vendor/assets/components/indefinido-indemma/lib/record/associable.js +217 -0
  78. data/vendor/assets/components/indefinido-indemma/lib/record/maid.js +24 -0
  79. data/vendor/assets/components/indefinido-indemma/lib/record/resource.js +104 -0
  80. data/vendor/assets/components/indefinido-indemma/lib/record/rest.js +36 -0
  81. data/vendor/assets/components/indefinido-indemma/lib/record/restfulable.js +326 -0
  82. data/vendor/assets/components/indefinido-indemma/lib/record/scopable.js +279 -0
  83. data/vendor/assets/components/indefinido-indemma/lib/record/translationable.js +19 -0
  84. data/vendor/assets/components/indefinido-indemma/lib/record/validatable.js +216 -0
  85. data/vendor/assets/components/indefinido-indemma/lib/record/validations/associated.js +30 -0
  86. data/vendor/assets/components/indefinido-indemma/lib/record/validations/confirmation.js +19 -0
  87. data/vendor/assets/components/indefinido-indemma/lib/record/validations/cpf.js +60 -0
  88. data/vendor/assets/components/indefinido-indemma/lib/record/validations/presence.js +19 -0
  89. data/vendor/assets/components/indefinido-indemma/lib/record/validations/remote.js +71 -0
  90. data/vendor/assets/components/indefinido-indemma/lib/record.js +167 -0
  91. data/vendor/assets/components/indefinido-indemma/vendor/sinon.js +4290 -0
  92. data/vendor/assets/components/indefinido-indemma/vendor/stampit.js +392 -0
  93. data/vendor/assets/components/indefinido-observable/component.json +25 -0
  94. data/vendor/assets/components/indefinido-observable/components/cjohansen-sinon/sinon.js +4290 -0
  95. data/vendor/assets/components/indefinido-observable/index.js +1 -0
  96. data/vendor/assets/components/indefinido-observable/lib/adapters/rivets.js +26 -0
  97. data/vendor/assets/components/indefinido-observable/lib/observable.js +320 -0
  98. data/vendor/assets/components/indefinido-observable/vendor/shims/accessors-legacy.js +92 -0
  99. data/vendor/assets/components/indefinido-observable/vendor/shims/accessors.js +173 -0
  100. data/vendor/assets/components/indefinido-observable/vendor/shims/array.indexOf.js +8 -0
  101. data/vendor/assets/components/indefinido-observable/vendor/shims/object.create.js +77 -0
  102. data/vendor/assets/components/mikeric-rivets/component.json +15 -0
  103. data/vendor/assets/components/mikeric-rivets/dist/rivets.js +1020 -0
  104. data/vendor/assets/components/paulmillr-es6-shim/component.json +17 -0
  105. data/vendor/assets/components/paulmillr-es6-shim/es6-shim.js +985 -0
  106. data/vendor/assets/components/pluma-assimilate/component.json +25 -0
  107. data/vendor/assets/components/pluma-assimilate/dist/assimilate.js +87 -0
  108. data/vendor/assets/components/segmentio-extend/component.json +13 -0
  109. data/vendor/assets/components/segmentio-extend/index.js +15 -0
  110. data/vendor/assets/javascripts/ende/build.js +30346 -0
  111. data/vendor/assets/javascripts/jquery/inview.js +125 -0
  112. data/vendor/assets/javascripts/lennon/lennon.js +184 -0
  113. metadata +114 -3
  114. data/lib/tasks/sprite.thor +0 -62
@@ -1,139 +1,208 @@
1
- define ['./states/index', './presenter'], (templates, presenter) ->
1
+ 'use strict';
2
2
 
3
- observable = require('observable').mixin
3
+ define ['./states/index', './presenters/default', '/assets/jquery/inview.js'], (templates, presenter) ->
4
4
 
5
- presentation = null
6
- sandbox = null
5
+ observable = require('indefinido-observable').mixin
7
6
 
8
- handlers =
9
- item:
10
- clicked: (event, models) ->
11
- models.item.selected = true
7
+ boo =
8
+ cache: {}
9
+ initialize: (container) ->
10
+ container.children('.item')
11
+ .each(@identify)
12
+ .on('inview', @viewed)
12
13
 
13
- list:
14
- stabilized: (selected) =>
15
- viewer = presentation.viewer
16
- viewer.items = []
17
- presented_ids = []
14
+ identify: (index, element) ->
15
+ element = $ element
16
+ identity = _.uniqueId()
17
+ element.data('boo', identity)
18
+ boo.cache[identity] = element
18
19
 
19
- # TODO generalise this filtering option
20
- presented = for item in selected
21
- item.models.all (records) =>
22
- for record in records
23
- viewer.items.push record if presented_ids.indexOf(record._id) == -1
20
+ shame: (element) ->
21
+ element = $ element
22
+ identity = element.data 'boo'
23
+ child = element.children()
24
24
 
25
- presented_ids = _.union presented_ids, _.pluck(records, '_id')
25
+ # We must store the current element state, we do so by storing a
26
+ # custom tailored object in our object cache
27
+ ghost =
28
+ child: child
29
+ shamed: true
26
30
 
27
- $.when(presented...).then -> presented_ids = []
31
+ boo.cache[identity] = ghost
28
32
 
29
- # If some extension provides you can use the type defined in there
30
- # to extend your widget. Defaults to Base constructor.
31
- #
32
- # type: 'Base'
33
33
 
34
- # Default values for the options passed to this widget
35
- #
36
- # Note: the options are passed thorught the html element data
37
- # attributes for this widget: <div data-aura-widget="viewer" data-aura-amount="3"></div>
38
- #
39
- # options: {}
34
+ element.css
35
+ width: element.width()
36
+ height: element.height()
40
37
 
38
+ child.detach()
41
39
 
42
- # Widget initialization method, will be called upon loading, options
43
- # are already filled with defaults
44
- initialize: (options) ->
45
- model = @sandbox.models[options.model]
46
- presentation = null
40
+ pride: (element) ->
41
+ element = $ element
42
+ identity = element.data 'boo'
43
+ ghost = boo.cache[identity]
47
44
 
48
- # Extend presentation
49
- presenter._ = _ = @sandbox.util._
50
- presenter.handlers = handlers
51
- presenter.drawing = @sandbox.modacad.drawing
45
+ if ghost and ghost.shamed
46
+ ghost.shamed = false
47
+ # In order to remove staticaly set width and height we pass
48
+ # empty strings to css jquery method
49
+ element.css(width: '', height: '').append ghost.child
52
50
 
53
- @sandbox.logger.log "initialized!"
54
51
 
52
+ viewed: (event, in_view, horizontal, vertical) ->
53
+ boo[if in_view then 'pride' else 'shame'] event.target
54
+
55
+ version: '0.1.0'
56
+
57
+ # TODO better separation of concerns
58
+ # TODO Current remote page that is beign displayed
59
+ options:
60
+ resource: 'default'
61
+ # page:
62
+ # current: 1
63
+ # per : 5
64
+
65
+ type: 'Base'
66
+
67
+ presenter: presenter
68
+
69
+ select: (item) ->
70
+ @selected_item?.selected = false
71
+ @selected_item = item
72
+ item.selected = true
73
+
74
+ # We extend presentation.selected just to assign all values of the item model
75
+ # TODO call presenter to do this job
76
+ @sandbox.util.extend @presentation.selected, item.model
77
+ @sandbox.emit "viewer.#{@identifier}.selected", item.model
78
+
79
+ scope_to: (scope, child_scope) ->
80
+ throw new TypeError "Invalid scope sent to viewer@#{@identifier} sent: #{scope.resource}, expected: #{@scope.resource}" if scope.resource != @scope.resource
81
+ @scope = scope
82
+
83
+ # TODO better hierachical event distribution
84
+ for { _widget: widget } in @sandbox._children
85
+ widget.scope_to? child_scope
86
+
87
+ populate: (handlers) ->
55
88
  # Initialize dependencies
56
89
  list = ''
57
- if options.listModel
58
- list = "<div data-aura-widget=\"list\" data-model=\"#{options.listModel}\"></div>"
90
+ if @options.listModel
91
+ list = "<div data-aura-widget=\"list\" data-model=\"#{@options.listModel}\"></div>"
59
92
  @sandbox.on 'list.stabilized' , handlers.list.stabilized
93
+ @sandbox.on 'list.selection.incremented' , handlers.list.changed
94
+ @sandbox.on 'list.selection.decremented' , handlers.list.changed
95
+
96
+ @scope.all (records) =>
97
+ @load.stop()
98
+
99
+ @presentation = @presenter records
100
+
101
+ @html list + templates[@options.resource]
102
+ boo.initialize @$el.find '.results .items'
103
+
104
+ sandbox = @sandbox
105
+
106
+ # TODO move binders to application
107
+ @bind @presentation,
108
+ binders:
109
+ unfolding: (element) ->
110
+ drawing = sandbox.modacad.drawing $(element), @model[@keypath]
111
+ setTimeout ->
112
+ drawing.redisplay
113
+ doll:
114
+ front: 'hide'
115
+ back : 'hide'
116
+ unfolding:
117
+ back : 'hide'
118
+
119
+ drawing.style (i, node) ->
120
+ value = node.getAttribute 'style'
121
+ value = value.replace /fill:(.*?);/, 'fill: black;'
122
+ value = value.replace /stroke:(.*?);/, 'stroke: white;'
123
+ node.setAttribute 'style', value
124
+ , 100
125
+
126
+ @handles 'click', 'back', '.back'
127
+
128
+ initialize: (options) ->
129
+ # TODO rename all options model to options.resource
130
+ options.model ||= options.resource
131
+ options.listModel ||= options.listResource
132
+
133
+ # TODO import core extensions in another place
134
+ @scope = model = @sandbox.models[options.model]
135
+ cssify = @sandbox.util.inflector.cssify
136
+ loader = @sandbox.ui.loader
137
+ @sandbox.on "viewer.#{@identifier}.scope", @scope_to, @
138
+
139
+ # Extend presentation
140
+ # TODO execute only one time
141
+ presenter.drawing = @sandbox.modacad.drawing
142
+
143
+ # TODO Initialize pagination settings
144
+ # @page = options.page
145
+
146
+ # Fetch custom templates
147
+ # TODO better custom templates structure and custom presenter
148
+ # TODO better segregation of concerns on this code
149
+ require [
150
+ "text!./widgets/viewer/templates/default/#{options.resource}.html"
151
+ "./widgets/viewer/presenters/#{options.resource}"
152
+ ], (custom_default_template, custom_presenter) =>
153
+
154
+ # TODO Better way to preserve widgets handlers
155
+ handlers =
156
+ item:
157
+ clicked: (event, models) =>
158
+ @select models.item
159
+
160
+ list:
161
+ changed: (change, selection) =>
162
+ # TODO store spinner instance, instead of creating a new one every time
163
+ @load = loader @$el.find '.results .items' unless @load?
164
+
165
+ stabilized: (selected) =>
166
+ if @load
167
+ @load.stop()
168
+ @load = null
169
+
170
+ viewer = @presentation.viewer
171
+ viewer.items = []
172
+ presented_ids = []
60
173
 
174
+ # TODO generalise this filtering option
175
+ presented = for item in selected
176
+ if @scope?.scope.data.by_type_id
177
+ querier = item.models.by_type_id.apply item.models, @scope.scope.data.by_type_id
178
+ else
179
+ querier = item.models
180
+
181
+ querier.all (records) =>
182
+ for record in records
183
+ viewer.items.push record if presented_ids.indexOf(record._id) == -1
184
+
185
+ presented_ids = _.union presented_ids, _.pluck(records, '_id')
186
+
187
+ $.when(presented...).then =>
188
+ boo.initialize @$el.find '.results .items'
189
+ presented_ids = []
190
+
191
+ presenter.handlers = handlers
192
+
193
+ custom_default_template and templates[options.model] = custom_default_template
194
+ @presenter = @sandbox.util.extend custom_presenter, presenter if custom_presenter
195
+
196
+ # Will also initialize sandbox!
197
+ @$el.addClass "viewer widget #{cssify(options.resource)}"
198
+ @$results = @$el.find '.results .items'
199
+
200
+ # Fetch default data
201
+ @load = loader @results
202
+ # TODO better scoping support by viewer
203
+
204
+ @populate handlers
205
+
206
+ @sandbox.logger.log "initialized!"
61
207
 
62
- # Will also initialize sandbox!
63
- @$el.addClass 'viewer widget'
64
- @html list + templates.default
65
-
66
- # Fetch default data
67
- model.all (records) =>
68
- presentation = presenter records
69
- @bind presentation
70
-
71
-
72
-
73
- true
74
-
75
- # You can now update the presentation to update the widget
76
- # presentation.title = 'Hello World!'
77
-
78
- # Remember to access functionality and to provide your
79
- # events throught the sandbox!
80
- #
81
- # Built-in properties of sandbox
82
- #
83
- # emit '{entity.name}.{event.name}.{entity.id}', handler_parameters...
84
- # off name, listener
85
- # on name, listener, context
86
- # stopListening() # Remove all event handlers for this widget
87
- #
88
- # start ['calendar', 'payments'] # widgets_list
89
- # stop() # Stop this widget and destroy its sandbox
90
- #
91
- # data.deferred() # Create a new deferred object
92
- # data.when promises..., callback # Execute callback upon deferred resolution
93
- # dom.data selector, [attribute] # Return object for selected element
94
- # dom.find selector, context # Return framework maped dom element for
95
- # # the selector (usually jQuery Object)
96
- # events.bindAll context, functions... # Bind all functions to the same context
97
- # events.listen context, events, selector, callback # Listen to dom events, all parameters are string, except callback
98
- # template.parse
99
- # util._ # UnderscoreJS like object
100
- # util.decamelize camelCase, delimiter
101
- # util.each object, callback, arguments
102
- # util.extend objects...
103
- # util.uniq array, isSorted, iterator, context
104
- #
105
- #
106
- # e.g.: @sandbox.events.listen 'click', '.menu', (e) -> alert 'selected'
107
- #
108
- #
109
- # Extensions properties of sandbox
110
- #
111
- # view.bind element, models # Bind DOM element to models (rivets extension)
112
- #
113
- #
114
- # The sandbox should contain all extensions features, if the extension
115
- # feature does not suite you and it's only needed by this widget,
116
- # require it as dependency on the define call:
117
- #
118
- # define [ 'three' ], (three) ->
119
-
120
-
121
- # Models access if needed, is also provided through the sandbox
122
- # person = @sandbox.domain.person
123
- #
124
- # arthur = person({
125
- # name: "Arthur Philip Dent",
126
- # species : "Humam"
127
- # });
128
- #
129
-
130
- # For the 'Base' type widget you can access some useful
131
- # properties:
132
- #
133
- # @$el # Widgets HTML DOM Element
134
- # @options # All options passed to this widget thorugh dom and merged defaults
135
- # @html markup # Helper function to update widget template
136
- #
137
- # Also some extensions extend the Base widget:
138
- #
139
- # @bind models # Equivalent to @sandbox.view.bind @$el, models
208
+ true
@@ -0,0 +1,14 @@
1
+ # TODO move to DeviseSessions controller and figure out how to set
2
+ # headers after a redirect. Or even, if this is the right approach
3
+ module UsersControllerExtensions
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ before_filter :add_new_csrf_token, only: :show
8
+
9
+ private
10
+ def add_new_csrf_token
11
+ response.headers['X-CSRF-Token'] = form_authenticity_token
12
+ end
13
+ end
14
+ end
data/lib/ende/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Ende
2
- VERSION = "0.1.4"
2
+ VERSION = "0.1.5"
3
3
  end
data/lib/ende.rb CHANGED
@@ -12,6 +12,11 @@ module Ende
12
12
  # assets.paths << current_dir.join('vendor', 'assets', 'stylesheets').to_s uncomment if you use
13
13
  end
14
14
 
15
+ # Check if devise exists and extend devise controllers to send
16
+ # authenticity (csrf) token
17
+ # config.initializer :blah do
18
+ # UsersController.send :include, UsersControllerExtensions if devise
19
+ # end
15
20
  end
16
21
 
17
22
  def Ende.assets
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "observe-utils",
3
+ "version": "0.2.0",
4
+ "description": "An Object.observe harmony proposal shim",
5
+ "main": "lib/observe-utils.js",
6
+ "repo": "KapIT/observe-utils",
7
+ "scripts": [
8
+ "lib/observe-utils.js"
9
+ ],
10
+ "keywords": [
11
+ "observe",
12
+ "observe-utils",
13
+ "data binding"
14
+ ],
15
+ "license": "Apache"
16
+ }