ende 0.1.4 → 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/component.json +4 -2
- data/ende.gemspec +1 -0
- data/lib/assets/javascripts/aura/extensions/devise.js.coffee +94 -15
- data/lib/assets/javascripts/aura/extensions/routes.js.coffee +21 -0
- data/lib/assets/javascripts/aura/extensions/states.js.coffee +3 -1
- data/lib/assets/javascripts/aura/extensions/widget/eventable.js.coffee +19 -21
- data/lib/assets/javascripts/aura/extensions/widget/lifecycleable.js.coffee +17 -1
- data/lib/assets/javascripts/config/initializers/jquery.js.coffee +4 -3
- data/lib/assets/javascripts/config/initializers/load_components.js.coffee +19 -0
- data/lib/assets/javascripts/ende.js.coffee +3 -1
- data/lib/assets/javascripts/widgets/authenticator/main.js.coffee +3 -3
- data/lib/assets/javascripts/widgets/viewer/main.js.coffee +189 -120
- data/lib/ende/users_controller_extensions.rb +14 -0
- data/lib/ende/version.rb +1 -1
- data/lib/ende.rb +5 -0
- data/vendor/assets/components/KapIT-observe-utils/component.json +16 -0
- data/vendor/assets/components/KapIT-observe-utils/lib/observe-utils.js +780 -0
- data/vendor/assets/components/chaijs-assertion-error/component.json +18 -0
- data/vendor/assets/components/chaijs-assertion-error/index.js +110 -0
- data/vendor/assets/components/chaijs-chai/component.json +47 -0
- data/vendor/assets/components/chaijs-chai/index.js +1 -0
- data/vendor/assets/components/chaijs-chai/lib/chai/assertion.js +130 -0
- data/vendor/assets/components/chaijs-chai/lib/chai/core/assertions.js +1270 -0
- data/vendor/assets/components/chaijs-chai/lib/chai/interface/assert.js +1080 -0
- data/vendor/assets/components/chaijs-chai/lib/chai/interface/expect.js +12 -0
- data/vendor/assets/components/chaijs-chai/lib/chai/interface/should.js +76 -0
- data/vendor/assets/components/chaijs-chai/lib/chai/utils/addChainableMethod.js +94 -0
- data/vendor/assets/components/chaijs-chai/lib/chai/utils/addMethod.js +37 -0
- data/vendor/assets/components/chaijs-chai/lib/chai/utils/addProperty.js +40 -0
- data/vendor/assets/components/chaijs-chai/lib/chai/utils/flag.js +32 -0
- data/vendor/assets/components/chaijs-chai/lib/chai/utils/getActual.js +19 -0
- data/vendor/assets/components/chaijs-chai/lib/chai/utils/getEnumerableProperties.js +25 -0
- data/vendor/assets/components/chaijs-chai/lib/chai/utils/getMessage.js +49 -0
- data/vendor/assets/components/chaijs-chai/lib/chai/utils/getName.js +20 -0
- data/vendor/assets/components/chaijs-chai/lib/chai/utils/getPathValue.js +102 -0
- data/vendor/assets/components/chaijs-chai/lib/chai/utils/getProperties.js +35 -0
- data/vendor/assets/components/chaijs-chai/lib/chai/utils/index.js +108 -0
- data/vendor/assets/components/chaijs-chai/lib/chai/utils/inspect.js +320 -0
- data/vendor/assets/components/chaijs-chai/lib/chai/utils/objDisplay.js +48 -0
- data/vendor/assets/components/chaijs-chai/lib/chai/utils/overwriteMethod.js +51 -0
- data/vendor/assets/components/chaijs-chai/lib/chai/utils/overwriteProperty.js +54 -0
- data/vendor/assets/components/chaijs-chai/lib/chai/utils/test.js +26 -0
- data/vendor/assets/components/chaijs-chai/lib/chai/utils/transferFlags.js +44 -0
- data/vendor/assets/components/chaijs-chai/lib/chai/utils/type.js +45 -0
- data/vendor/assets/components/chaijs-chai/lib/chai.js +80 -0
- data/vendor/assets/components/chaijs-deep-eql/component.json +18 -0
- data/vendor/assets/components/chaijs-deep-eql/lib/eql.js +257 -0
- data/vendor/assets/components/chaijs-type-detect/component.json +16 -0
- data/vendor/assets/components/chaijs-type-detect/lib/type.js +142 -0
- data/vendor/assets/components/component-bind/component.json +14 -0
- data/vendor/assets/components/component-bind/index.js +24 -0
- data/vendor/assets/components/component-delegate/component.json +19 -0
- data/vendor/assets/components/component-delegate/index.js +42 -0
- data/vendor/assets/components/component-event/component.json +13 -0
- data/vendor/assets/components/component-event/index.js +40 -0
- data/vendor/assets/components/component-jquery/component.json +14 -0
- data/vendor/assets/components/component-jquery/index.js +9601 -0
- data/vendor/assets/components/component-link-delegate/component.json +23 -0
- data/vendor/assets/components/component-link-delegate/index.js +60 -0
- data/vendor/assets/components/component-matches-selector/component.json +20 -0
- data/vendor/assets/components/component-matches-selector/index.js +45 -0
- data/vendor/assets/components/component-query/component.json +21 -0
- data/vendor/assets/components/component-query/index.js +21 -0
- data/vendor/assets/components/component-type/component.json +18 -0
- data/vendor/assets/components/component-type/index.js +32 -0
- data/vendor/assets/components/component-url/component.json +17 -0
- data/vendor/assets/components/component-url/index.js +63 -0
- data/vendor/assets/components/discore-closest/component.json +14 -0
- data/vendor/assets/components/discore-closest/index.js +18 -0
- data/vendor/assets/components/indefinido-advisable/component.json +21 -0
- data/vendor/assets/components/indefinido-advisable/index.js +1 -0
- data/vendor/assets/components/indefinido-advisable/lib/advisable.js +60 -0
- data/vendor/assets/components/indefinido-indemma/component.json +40 -0
- data/vendor/assets/components/indefinido-indemma/index.js +1 -0
- data/vendor/assets/components/indefinido-indemma/lib/extensions/rivets.js +23 -0
- data/vendor/assets/components/indefinido-indemma/lib/record/associable.js +217 -0
- data/vendor/assets/components/indefinido-indemma/lib/record/maid.js +24 -0
- data/vendor/assets/components/indefinido-indemma/lib/record/resource.js +104 -0
- data/vendor/assets/components/indefinido-indemma/lib/record/rest.js +36 -0
- data/vendor/assets/components/indefinido-indemma/lib/record/restfulable.js +326 -0
- data/vendor/assets/components/indefinido-indemma/lib/record/scopable.js +279 -0
- data/vendor/assets/components/indefinido-indemma/lib/record/translationable.js +19 -0
- data/vendor/assets/components/indefinido-indemma/lib/record/validatable.js +216 -0
- data/vendor/assets/components/indefinido-indemma/lib/record/validations/associated.js +30 -0
- data/vendor/assets/components/indefinido-indemma/lib/record/validations/confirmation.js +19 -0
- data/vendor/assets/components/indefinido-indemma/lib/record/validations/cpf.js +60 -0
- data/vendor/assets/components/indefinido-indemma/lib/record/validations/presence.js +19 -0
- data/vendor/assets/components/indefinido-indemma/lib/record/validations/remote.js +71 -0
- data/vendor/assets/components/indefinido-indemma/lib/record.js +167 -0
- data/vendor/assets/components/indefinido-indemma/vendor/sinon.js +4290 -0
- data/vendor/assets/components/indefinido-indemma/vendor/stampit.js +392 -0
- data/vendor/assets/components/indefinido-observable/component.json +25 -0
- data/vendor/assets/components/indefinido-observable/components/cjohansen-sinon/sinon.js +4290 -0
- data/vendor/assets/components/indefinido-observable/index.js +1 -0
- data/vendor/assets/components/indefinido-observable/lib/adapters/rivets.js +26 -0
- data/vendor/assets/components/indefinido-observable/lib/observable.js +320 -0
- data/vendor/assets/components/indefinido-observable/vendor/shims/accessors-legacy.js +92 -0
- data/vendor/assets/components/indefinido-observable/vendor/shims/accessors.js +173 -0
- data/vendor/assets/components/indefinido-observable/vendor/shims/array.indexOf.js +8 -0
- data/vendor/assets/components/indefinido-observable/vendor/shims/object.create.js +77 -0
- data/vendor/assets/components/mikeric-rivets/component.json +15 -0
- data/vendor/assets/components/mikeric-rivets/dist/rivets.js +1020 -0
- data/vendor/assets/components/paulmillr-es6-shim/component.json +17 -0
- data/vendor/assets/components/paulmillr-es6-shim/es6-shim.js +985 -0
- data/vendor/assets/components/pluma-assimilate/component.json +25 -0
- data/vendor/assets/components/pluma-assimilate/dist/assimilate.js +87 -0
- data/vendor/assets/components/segmentio-extend/component.json +13 -0
- data/vendor/assets/components/segmentio-extend/index.js +15 -0
- data/vendor/assets/javascripts/ende/build.js +30346 -0
- data/vendor/assets/javascripts/jquery/inview.js +125 -0
- data/vendor/assets/javascripts/lennon/lennon.js +184 -0
- metadata +114 -3
- data/lib/tasks/sprite.thor +0 -62
@@ -1,139 +1,208 @@
|
|
1
|
-
|
1
|
+
'use strict';
|
2
2
|
|
3
|
-
|
3
|
+
define ['./states/index', './presenters/default', '/assets/jquery/inview.js'], (templates, presenter) ->
|
4
4
|
|
5
|
-
|
6
|
-
sandbox = null
|
5
|
+
observable = require('indefinido-observable').mixin
|
7
6
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
7
|
+
boo =
|
8
|
+
cache: {}
|
9
|
+
initialize: (container) ->
|
10
|
+
container.children('.item')
|
11
|
+
.each(@identify)
|
12
|
+
.on('inview', @viewed)
|
12
13
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
14
|
+
identify: (index, element) ->
|
15
|
+
element = $ element
|
16
|
+
identity = _.uniqueId()
|
17
|
+
element.data('boo', identity)
|
18
|
+
boo.cache[identity] = element
|
18
19
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
35
|
-
|
36
|
-
|
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
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
presentation = null
|
40
|
+
pride: (element) ->
|
41
|
+
element = $ element
|
42
|
+
identity = element.data 'boo'
|
43
|
+
ghost = boo.cache[identity]
|
47
44
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
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
|
-
|
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
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
|
+
}
|