luca 0.9.6 → 0.9.7
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +37 -14
- data/lib/luca/rails/version.rb +1 -1
- data/spec/components/collection_view_spec.coffee +24 -2
- data/spec/components/pagination_control_spec.coffee +0 -0
- data/spec/concerns/dom_helpers_spec.coffee +16 -0
- data/spec/concerns/filterable_spec.coffee +25 -0
- data/spec/concerns/model_presenter_spec.coffee +31 -0
- data/spec/concerns/paginatable_spec.coffee +0 -0
- data/spec/concerns/state_model_spec.coffee +0 -0
- data/spec/concerns_spec.coffee +88 -0
- data/spec/core/container_spec.coffee +74 -12
- data/spec/core/model_spec.coffee +6 -1
- data/spec/define_spec.coffee +0 -6
- data/spec/util_spec.coffee +24 -0
- data/src/components/application.coffee +32 -30
- data/src/components/base_toolbar.coffee +6 -4
- data/src/components/collection_loader_view.coffee +3 -1
- data/src/components/collection_view.coffee +42 -21
- data/src/components/controller.coffee +3 -1
- data/src/components/fields/button_field.coffee +19 -12
- data/src/components/fields/checkbox_array.coffee +8 -2
- data/src/components/fields/checkbox_field.coffee +18 -9
- data/src/components/fields/file_upload_field.coffee +5 -1
- data/src/components/fields/hidden_field.coffee +3 -1
- data/src/components/fields/label_field.coffee +4 -3
- data/src/components/fields/select_field.coffee +7 -8
- data/src/components/fields/text_field.coffee +3 -1
- data/src/components/fields/type_ahead_field.coffee +4 -2
- data/src/components/form_button_toolbar.coffee +4 -1
- data/src/components/form_view.coffee +49 -44
- data/src/components/grid_view.coffee +1 -1
- data/src/components/multi_collection_view.coffee +49 -22
- data/src/components/pagination_control.coffee +17 -13
- data/src/{modules → concerns}/application_event_bindings.coffee +1 -1
- data/src/{modules → concerns}/collection_event_bindings.coffee +1 -1
- data/src/{modules → concerns}/deferrable.coffee +1 -1
- data/src/{modules → concerns}/dom_helpers.coffee +11 -2
- data/src/{modules → concerns}/enhanced_properties.coffee +1 -1
- data/src/concerns/filterable.coffee +82 -0
- data/src/{modules → concerns}/grid_layout.coffee +1 -1
- data/src/{modules → concerns}/loadmaskable.coffee +1 -1
- data/src/{modules → concerns}/local_storage.coffee +0 -0
- data/src/{modules → concerns}/modal_view.coffee +1 -1
- data/src/concerns/model_presenter.coffee +23 -0
- data/src/concerns/paginatable.coffee +87 -0
- data/src/{modules → concerns}/state_model.coffee +1 -1
- data/src/{modules → concerns}/templating.coffee +1 -1
- data/src/concerns.coffee +70 -0
- data/src/containers/tab_view.coffee +7 -10
- data/src/core/collection.coffee +17 -1
- data/src/core/container.coffee +56 -31
- data/src/core/field.coffee +39 -38
- data/src/core/meta_data.coffee +37 -0
- data/src/core/model.coffee +18 -1
- data/src/core/view.coffee +25 -29
- data/src/define.coffee +54 -66
- data/src/framework.coffee +23 -18
- data/src/index.coffee +3 -1
- data/src/stylesheets/components/checkbox_array.scss +1 -1
- data/src/stylesheets/components/form_view.scss +5 -5
- data/src/stylesheets/components/viewport.scss +2 -1
- data/src/stylesheets/containers/container.scss +0 -5
- data/src/stylesheets/containers/tab_view.scss +5 -5
- data/src/tools/console.coffee +5 -5
- data/src/util.coffee +47 -0
- data/vendor/assets/javascripts/luca-ui-development-tools.js +5 -5
- data/vendor/assets/javascripts/luca-ui-development-tools.min.js +1 -1
- data/vendor/assets/javascripts/luca-ui-full.js +905 -416
- data/vendor/assets/javascripts/luca-ui-full.min.js +5 -5
- data/vendor/assets/javascripts/luca-ui.js +905 -416
- data/vendor/assets/javascripts/luca-ui.min.js +5 -4
- data/vendor/assets/stylesheets/luca-ui.css +15 -15
- metadata +27 -17
- data/spec/mixin_spec.coffee +0 -49
- data/src/modules/filterable.coffee +0 -60
- data/src/modules/paginatable.coffee +0 -79
@@ -1,9 +1,12 @@
|
|
1
|
-
|
1
|
+
application = Luca.register "Luca.Application"
|
2
|
+
application.extends "Luca.containers.Viewport"
|
3
|
+
|
4
|
+
# Luca.Application
|
2
5
|
#
|
3
6
|
# The Application class is the global state tracking mechanism
|
4
7
|
# for your single page application, as well as the entry point.
|
5
8
|
#
|
6
|
-
# By default it contains a main controller which is a Luca.components.Controller instance.
|
9
|
+
# By default it contains a main controller which is a Luca.components.Controller instance.
|
7
10
|
#
|
8
11
|
# In a typical Luca application, the router will use the applications @navigate_to() method to switch
|
9
12
|
# from page to page on the main controller, or any other controllers nested inside of it.
|
@@ -12,11 +15,8 @@
|
|
12
15
|
#
|
13
16
|
# Decoupling application control flow from the URL Fragment from Backbone.History and preventing
|
14
17
|
# your components from directly caring about the URL Fragment, allows you to build applications as
|
15
|
-
# isolated components which can run separately or nested inside of other applications.
|
16
|
-
|
17
|
-
startHistory = ()-> Backbone.history.start()
|
18
|
-
|
19
|
-
_.def('Luca.Application').extends('Luca.containers.Viewport').with
|
18
|
+
# isolated components which can run separately or nested inside of other applications.
|
19
|
+
application.defines
|
20
20
|
name: "MyApp"
|
21
21
|
|
22
22
|
# The Application uses a Backbone.Model as a state machine, which
|
@@ -26,18 +26,18 @@ _.def('Luca.Application').extends('Luca.containers.Viewport').with
|
|
26
26
|
# the @defaultState property will be the default attributes
|
27
27
|
defaultState: {}
|
28
28
|
|
29
|
-
# if autoBoot is set to true, the application will
|
29
|
+
# if autoBoot is set to true, the application will
|
30
30
|
# attempt to boot on document ready.
|
31
31
|
autoBoot: false
|
32
32
|
|
33
|
-
# automatically starts the @router if it exists,
|
34
|
-
# once the components for the application have
|
33
|
+
# automatically starts the @router if it exists,
|
34
|
+
# once the components for the application have
|
35
35
|
# been created. Pass the event name you want to
|
36
36
|
# listen for on this component before you start history
|
37
37
|
autoStartHistory: "before:render"
|
38
38
|
|
39
39
|
# we will create a collection manager singleton
|
40
|
-
# by default unless otherwise specified.
|
40
|
+
# by default unless otherwise specified.
|
41
41
|
useCollectionManager: true
|
42
42
|
|
43
43
|
# to pass options to the collection manager, set the @collectionManager
|
@@ -46,7 +46,7 @@ _.def('Luca.Application').extends('Luca.containers.Viewport').with
|
|
46
46
|
|
47
47
|
# by default we will use the standard collection manager which ships with
|
48
48
|
# Luca. If you would like to use your own extension of the collection manager
|
49
|
-
# just pass a reference to the class you would like to use.
|
49
|
+
# just pass a reference to the class you would like to use.
|
50
50
|
collectionManagerClass: "Luca.CollectionManager"
|
51
51
|
|
52
52
|
# Luca plugin apps are apps which mount onto existing
|
@@ -61,7 +61,7 @@ _.def('Luca.Application').extends('Luca.containers.Viewport').with
|
|
61
61
|
useController: true
|
62
62
|
|
63
63
|
# Key Handler
|
64
|
-
#
|
64
|
+
#
|
65
65
|
# One responsibility of the application, since it is a viewport which monopolizes the entire screen
|
66
66
|
# is to relay keypress events from the document, to whatever views are interested in responding to them.
|
67
67
|
#
|
@@ -70,7 +70,7 @@ _.def('Luca.Application').extends('Luca.containers.Viewport').with
|
|
70
70
|
|
71
71
|
# You can configure key events by specifying them by their name, as it exists in Luca.keyMap. For example:
|
72
72
|
#
|
73
|
-
keyEvents: {}
|
73
|
+
keyEvents: {}
|
74
74
|
|
75
75
|
# keyEvents
|
76
76
|
# keyup: keyUpHandler
|
@@ -103,7 +103,7 @@ _.def('Luca.Application').extends('Luca.containers.Viewport').with
|
|
103
103
|
|
104
104
|
Luca.Application.instances ||= {}
|
105
105
|
Luca.Application.instances[ appName ] = app
|
106
|
-
|
106
|
+
|
107
107
|
Luca.containers.Viewport::initialize.apply @, arguments
|
108
108
|
|
109
109
|
@state = new Luca.Model( @defaultState )
|
@@ -115,7 +115,7 @@ _.def('Luca.Application').extends('Luca.containers.Viewport').with
|
|
115
115
|
# with the state machine of the application
|
116
116
|
@setupMainController() if @useController is true
|
117
117
|
|
118
|
-
# The Collection Manager is responsible
|
118
|
+
# The Collection Manager is responsible
|
119
119
|
@setupCollectionManager()
|
120
120
|
|
121
121
|
# we will render when all of the various components
|
@@ -137,23 +137,23 @@ _.def('Luca.Application').extends('Luca.containers.Viewport').with
|
|
137
137
|
# forwardslash: "altSlashHandler"
|
138
138
|
if @useKeyRouter is true
|
139
139
|
console.log "The useKeyRouter property is being deprecated. switch to useKeyHandler instead"
|
140
|
-
|
140
|
+
|
141
141
|
@setupKeyHandler() if (@useKeyHandler is true or @useKeyRouter is true) and @keyEvents?
|
142
142
|
|
143
143
|
# if the application is a plugin designed to modify the behavior
|
144
144
|
# of another app, then don't claim ownership. otherwise the most common
|
145
145
|
# use-case is that there will be one application instance
|
146
146
|
unless @plugin is true or alreadyRunning
|
147
|
-
Luca.getApplication = (name)=>
|
147
|
+
Luca.getApplication = (name)=>
|
148
148
|
return app unless name?
|
149
|
-
Luca.Application.instances[ name ]
|
149
|
+
Luca.Application.instances[ name ]
|
150
150
|
|
151
151
|
if @autoBoot
|
152
152
|
if Luca.util.resolve(@name)
|
153
153
|
throw "Attempting to override window.#{ @name } when it already exists"
|
154
154
|
|
155
155
|
$ ->
|
156
|
-
window[ appName ] = app
|
156
|
+
window[ appName ] = app
|
157
157
|
app.boot()
|
158
158
|
|
159
159
|
# @activeView() returns a reference to the instance of the view
|
@@ -161,14 +161,14 @@ _.def('Luca.Application').extends('Luca.containers.Viewport').with
|
|
161
161
|
#
|
162
162
|
# this will be whicever component is active on the controllers
|
163
163
|
# nested within the main controller, if there are any, or the view
|
164
|
-
# itself which is active on the main controller.
|
164
|
+
# itself which is active on the main controller.
|
165
165
|
activeView: ()->
|
166
166
|
if active = @activeSubSection()
|
167
167
|
@view( active )
|
168
168
|
else
|
169
169
|
@view( @activeSection() )
|
170
170
|
|
171
|
-
# Returns the name of the active component on the main controller
|
171
|
+
# Returns the name of the active component on the main controller
|
172
172
|
activeSection: ()->
|
173
173
|
@get("active_section")
|
174
174
|
|
@@ -216,7 +216,7 @@ _.def('Luca.Application').extends('Luca.containers.Viewport').with
|
|
216
216
|
return @components[0] if @useController is true
|
217
217
|
Luca.cache('main_controller')
|
218
218
|
|
219
|
-
#
|
219
|
+
#
|
220
220
|
keyHandler: (e)->
|
221
221
|
return unless e and @keyEvents
|
222
222
|
|
@@ -256,7 +256,7 @@ _.def('Luca.Application').extends('Luca.containers.Viewport').with
|
|
256
256
|
type = component.type || component.type
|
257
257
|
if type.match(/controller$/)
|
258
258
|
component.bind "after:card:switch", (previous,current)=>
|
259
|
-
@state.set(active_sub_section:current.name)
|
259
|
+
@state.set(active_sub_section:current.name)
|
260
260
|
app.trigger "sub:page:change"
|
261
261
|
|
262
262
|
setupMainController: ()->
|
@@ -275,9 +275,9 @@ _.def('Luca.Application').extends('Luca.containers.Viewport').with
|
|
275
275
|
return unless @useCollectionManager is true
|
276
276
|
|
277
277
|
return if @collectionManager? and @collectionManager?.get?
|
278
|
-
|
278
|
+
|
279
279
|
if _.isString( @collectionManagerClass )
|
280
|
-
@collectionManagerClass = Luca.util.resolve( @collectionManagerClass )
|
280
|
+
@collectionManagerClass = Luca.util.resolve( @collectionManagerClass )
|
281
281
|
|
282
282
|
collectionManagerOptions = @collectionManagerOptions || {}
|
283
283
|
|
@@ -291,9 +291,9 @@ _.def('Luca.Application').extends('Luca.containers.Viewport').with
|
|
291
291
|
|
292
292
|
# if the collection manager property is a string, then it is a
|
293
293
|
# reference to a name of a collection manager to use. so let's
|
294
|
-
# stash it
|
294
|
+
# stash it
|
295
295
|
if _.isString(@collectionManager)
|
296
|
-
collectionManagerOptions =
|
296
|
+
collectionManagerOptions =
|
297
297
|
name: @collectionManager
|
298
298
|
|
299
299
|
# let's try and get the collection manager by name if we can
|
@@ -301,7 +301,7 @@ _.def('Luca.Application').extends('Luca.containers.Viewport').with
|
|
301
301
|
|
302
302
|
# if we can't, then we will have to create one ourselves
|
303
303
|
unless _.isFunction(@collectionManager?.get)
|
304
|
-
@collectionManager = new @collectionManagerClass( collectionManagerOptions )
|
304
|
+
@collectionManager = new @collectionManagerClass( collectionManagerOptions )
|
305
305
|
|
306
306
|
setupRouter: ()->
|
307
307
|
app = @
|
@@ -315,7 +315,7 @@ _.def('Luca.Application').extends('Luca.containers.Viewport').with
|
|
315
315
|
# you can control which by setting the @startHistoryOn property
|
316
316
|
if @router and @autoStartHistory
|
317
317
|
@autoStartHistory = "before:render" if @autoStartHistory is true
|
318
|
-
@defer(startHistory, false).until(@, @autoStartHistory)
|
318
|
+
@defer( Luca.util.startHistory, false).until(@, @autoStartHistory)
|
319
319
|
|
320
320
|
setupKeyHandler: ()->
|
321
321
|
return unless @keyEvents
|
@@ -330,3 +330,5 @@ _.def('Luca.Application').extends('Luca.containers.Viewport').with
|
|
330
330
|
for keyEvent in (@keypressEvents || ["keydown"])
|
331
331
|
$( document ).on( keyEvent, handler )
|
332
332
|
|
333
|
+
Luca.util.startHistory = ()->
|
334
|
+
Backbone.history.start()
|
@@ -1,15 +1,17 @@
|
|
1
1
|
_.def('Luca.components.Toolbar').extends('Luca.core.Container').with
|
2
2
|
|
3
|
+
toolbar = Luca.register "Luca.components.Toolbar"
|
4
|
+
toolbar.extends "Luca.core.Container"
|
5
|
+
|
6
|
+
toolbar.defines
|
3
7
|
className: 'luca-ui-toolbar toolbar'
|
4
8
|
|
5
9
|
position: 'bottom'
|
6
10
|
|
7
|
-
initialize: (@options={})->
|
8
|
-
Luca.core.Container::initialize.apply @, arguments
|
9
|
-
|
10
11
|
prepareComponents: ()->
|
11
12
|
_( @components ).each (component)=>
|
12
13
|
component.container = @$el
|
13
14
|
|
14
15
|
render: ()->
|
15
|
-
$(@container).append(@el)
|
16
|
+
$(@container).append(@el)
|
17
|
+
@
|
@@ -3,8 +3,10 @@
|
|
3
3
|
# if you want to. Default implementation uses twitter bootstrap modal and
|
4
4
|
# progress bar (http://twitter.github.com/bootstrap/). You template
|
5
5
|
# should contain `progress`, `bar` and `message` classes
|
6
|
-
|
6
|
+
loaderView = Luca.register "Luca.components.CollectionLoaderView"
|
7
|
+
loaderView.extends "Luca.View"
|
7
8
|
|
9
|
+
loaderView.defines
|
8
10
|
className: 'luca-ui-collection-loader-view'
|
9
11
|
|
10
12
|
template: "components/collection_loader_view"
|
@@ -1,4 +1,4 @@
|
|
1
|
-
collectionView = Luca.
|
1
|
+
collectionView = Luca.register "Luca.components.CollectionView"
|
2
2
|
# The CollectionView facilitates the rendering of a Collection
|
3
3
|
# of models into a group of many rendered templates
|
4
4
|
#
|
@@ -16,17 +16,16 @@ collectionView = Luca.define "Luca.components.CollectionView"
|
|
16
16
|
#
|
17
17
|
collectionView.extends "Luca.components.Panel"
|
18
18
|
|
19
|
-
collectionView.
|
20
|
-
|
21
|
-
|
19
|
+
collectionView.mixesIn "LoadMaskable",
|
20
|
+
"Filterable",
|
21
|
+
"Paginatable"
|
22
22
|
|
23
|
-
collectionView.triggers
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
collectionView.defaults
|
23
|
+
collectionView.triggers "before:refresh",
|
24
|
+
"after:refresh",
|
25
|
+
"refresh",
|
26
|
+
"empty:results"
|
29
27
|
|
28
|
+
collectionView.defines
|
30
29
|
tagName: "ol"
|
31
30
|
|
32
31
|
className: "luca-ui-collection-view"
|
@@ -43,11 +42,13 @@ collectionView.defaults
|
|
43
42
|
|
44
43
|
itemClassName: 'collection-item'
|
45
44
|
|
45
|
+
|
46
46
|
initialize: (@options={})->
|
47
47
|
_.extend(@, @options)
|
48
48
|
|
49
49
|
_.bindAll @, "refresh"
|
50
50
|
|
51
|
+
|
51
52
|
unless @collection? or @options.collection
|
52
53
|
console.log "Error on initialize of collection view", @
|
53
54
|
throw "Collection Views must specify a collection"
|
@@ -55,12 +56,14 @@ collectionView.defaults
|
|
55
56
|
unless @itemTemplate? || @itemRenderer? || @itemProperty?
|
56
57
|
throw "Collection Views must specify an item template or item renderer function"
|
57
58
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
59
|
+
if _.isString(@collection)
|
60
|
+
if Luca.CollectionManager.get()
|
61
|
+
@collection = Luca.CollectionManager.get().getOrCreate(@collection)
|
62
|
+
else
|
63
|
+
console.log "String Collection but no collection manager"
|
62
64
|
|
63
65
|
unless Luca.isBackboneCollection(@collection)
|
66
|
+
console.log "Missing Collection on #{ @name || @cid }", @, @collection
|
64
67
|
throw "Collection Views must have a valid backbone collection"
|
65
68
|
|
66
69
|
@collection.on "before:fetch", ()=>
|
@@ -79,12 +82,14 @@ collectionView.defaults
|
|
79
82
|
if @observeChanges is true
|
80
83
|
@collection.on "change", @refreshModel, @
|
81
84
|
|
85
|
+
Luca.components.Panel::initialize.apply(@, arguments)
|
86
|
+
|
82
87
|
unless @autoRefreshOnModelsPresent is false
|
83
88
|
@defer ()=>
|
84
89
|
@refresh() if @collection.length > 0
|
85
90
|
.until("after:render")
|
86
91
|
|
87
|
-
@on "
|
92
|
+
@on "refresh", @refresh, @
|
88
93
|
|
89
94
|
attributesForItem: (item, model)->
|
90
95
|
_.extend {}, class: @itemClassName, "data-index": item.index, "data-model-id": item.model.get('id')
|
@@ -116,15 +121,32 @@ collectionView.defaults
|
|
116
121
|
getCollection: ()->
|
117
122
|
@collection
|
118
123
|
|
124
|
+
loadModels: (models=[], options={})->
|
125
|
+
@getCollection()?.reset(models, options)
|
126
|
+
|
127
|
+
applyQuery: (query={},queryOptions={})->
|
128
|
+
@query = query
|
129
|
+
@queryOptions = queryOptions
|
130
|
+
@refresh()
|
131
|
+
@
|
132
|
+
|
119
133
|
# Private: returns the query that is applied to the underlying collection.
|
120
134
|
# accepts the same options as Luca.Collection.query's initial query option.
|
121
135
|
getQuery: ()->
|
122
|
-
@query ||= {}
|
136
|
+
query = @query ||= {}
|
137
|
+
for querySource in _( @querySources || [] ).compact()
|
138
|
+
query = _.extend(query, (querySource()||{}) )
|
139
|
+
query
|
123
140
|
|
124
141
|
# Private: returns the query that is applied to the underlying collection.
|
125
142
|
# accepts the same options as Luca.Collection.query's initial query option.
|
126
143
|
getQueryOptions: ()->
|
127
|
-
@queryOptions ||= {}
|
144
|
+
options = @queryOptions ||= {}
|
145
|
+
|
146
|
+
for optionSource in _( @optionsSources || [] ).compact()
|
147
|
+
options = _.extend(options, (optionSource()||{}) )
|
148
|
+
|
149
|
+
options
|
128
150
|
|
129
151
|
# Private: returns the models to be rendered. If the underlying collection
|
130
152
|
# responds to @query() then it will use that interface.
|
@@ -145,12 +167,12 @@ collectionView.defaults
|
|
145
167
|
@locateItemElement(model.get('id')).empty().append( @contentForItem({model,index}, model) )
|
146
168
|
@trigger("model:refreshed", index, model)
|
147
169
|
|
148
|
-
refresh: (query,options)->
|
149
|
-
query
|
170
|
+
refresh: (query,options,models)->
|
171
|
+
query ||= @getQuery()
|
150
172
|
options ||= @getQueryOptions()
|
173
|
+
models ||= @getModels(query, options)
|
151
174
|
|
152
175
|
@$bodyEl().empty()
|
153
|
-
models = @getModels(query, options)
|
154
176
|
|
155
177
|
@trigger("before:refresh", models, query, options)
|
156
178
|
|
@@ -158,7 +180,6 @@ collectionView.defaults
|
|
158
180
|
@trigger("empty:results")
|
159
181
|
|
160
182
|
index = 0
|
161
|
-
|
162
183
|
for model in models
|
163
184
|
@$append @makeItem(model, index++)
|
164
185
|
|
@@ -1,5 +1,7 @@
|
|
1
|
-
|
1
|
+
controller = Luca.register "Luca.components.Controller"
|
2
|
+
controller.extends "Luca.containers.CardView"
|
2
3
|
|
4
|
+
controller.defines
|
3
5
|
additionalClassNames:['luca-ui-controller']
|
4
6
|
|
5
7
|
activeAttribute: "active-section"
|
@@ -1,18 +1,23 @@
|
|
1
|
-
|
1
|
+
buttonField = Luca.register "Luca.fields.ButtonField"
|
2
2
|
|
3
|
-
|
3
|
+
buttonField.extends "Luca.core.Field"
|
4
4
|
|
5
|
-
|
6
|
-
"click input" : "click_handler"
|
7
|
-
|
8
|
-
hooks:[
|
9
|
-
"button:click"
|
10
|
-
]
|
5
|
+
buttonField.triggers "button:click"
|
11
6
|
|
12
|
-
|
7
|
+
buttonField.publicConfiguration
|
8
|
+
readOnly: true
|
9
|
+
input_value: undefined
|
10
|
+
input_type: "button"
|
11
|
+
icon_class: undefined
|
12
|
+
input_name: undefined
|
13
|
+
white: undefined
|
13
14
|
|
14
|
-
|
15
|
+
buttonField.privateConfiguration
|
16
|
+
template: "fields/button_field"
|
17
|
+
events:
|
18
|
+
"click input" : "click_handler"
|
15
19
|
|
20
|
+
buttonField.privateInterface
|
16
21
|
click_handler: (e)->
|
17
22
|
me = my = $( e.currentTarget )
|
18
23
|
@trigger "button:click"
|
@@ -29,10 +34,12 @@ _.def('Luca.fields.ButtonField').extends('Luca.core.Field').with
|
|
29
34
|
@input_id ||= _.uniqueId('button')
|
30
35
|
@input_name ||= @name ||= @input_id
|
31
36
|
@input_value ||= @label ||= @text
|
32
|
-
@input_type ||= "button"
|
33
37
|
@input_class ||= @class
|
34
38
|
@icon_class ||= ""
|
35
39
|
@icon_class = "icon-#{ @icon_class }" if @icon_class.length and !@icon_class.match(/^icon-/)
|
36
40
|
@icon_class += " icon-white" if @white
|
37
41
|
|
38
|
-
setValue: ()-> true
|
42
|
+
setValue: ()-> true
|
43
|
+
|
44
|
+
buttonField.defines
|
45
|
+
version: 1
|
@@ -1,6 +1,9 @@
|
|
1
1
|
make = Luca.View::make
|
2
2
|
|
3
|
-
|
3
|
+
checkboxArray = Luca.register "Luca.fields.CheckboxArray"
|
4
|
+
checkboxArray.extends "Luca.core.Field"
|
5
|
+
|
6
|
+
checkboxArray.defines
|
4
7
|
version: 2
|
5
8
|
|
6
9
|
template: "fields/checkbox_array"
|
@@ -14,7 +17,7 @@ _.def('Luca.fields.CheckboxArray').extends('Luca.core.Field').with
|
|
14
17
|
|
15
18
|
initialize: (@options={})->
|
16
19
|
_.extend @, @options
|
17
|
-
_.extend @, Luca.
|
20
|
+
_.extend @, Luca.concerns.Deferrable
|
18
21
|
_.bindAll @, "renderCheckboxes", "clickHandler", "checkSelected"
|
19
22
|
|
20
23
|
Luca.core.Field::initialize.apply @, arguments
|
@@ -33,6 +36,9 @@ _.def('Luca.fields.CheckboxArray').extends('Luca.core.Field').with
|
|
33
36
|
|
34
37
|
cbArray = @
|
35
38
|
|
39
|
+
unless Luca.isBackboneCollection(@collection)
|
40
|
+
throw "Checkbox Array Fields must specify a @collection property"
|
41
|
+
|
36
42
|
if @collection.length > 0
|
37
43
|
@renderCheckboxes()
|
38
44
|
else
|
@@ -1,13 +1,20 @@
|
|
1
|
-
|
1
|
+
checkboxField = Luca.register "Luca.fields.CheckboxField"
|
2
2
|
|
3
|
-
|
4
|
-
"change input" : "change_handler"
|
3
|
+
checkboxField.extends "Luca.core.Field"
|
5
4
|
|
6
|
-
|
7
|
-
|
8
|
-
|
5
|
+
checkboxField.triggers "checked",
|
6
|
+
"unchecked"
|
7
|
+
|
8
|
+
checkboxField.publicConfiguration
|
9
9
|
send_blanks: true
|
10
|
+
input_value: 1
|
10
11
|
|
12
|
+
checkboxField.privateConfiguration
|
13
|
+
template: 'fields/checkbox_field'
|
14
|
+
events:
|
15
|
+
"change input" : "change_handler"
|
16
|
+
|
17
|
+
checkboxField.privateInterface
|
11
18
|
change_handler: (e)->
|
12
19
|
me = my = $(e.target)
|
13
20
|
|
@@ -24,14 +31,16 @@ _.def('Luca.fields.CheckboxField').extends('Luca.core.Field').with
|
|
24
31
|
|
25
32
|
Luca.core.Field::initialize.apply @, arguments
|
26
33
|
|
27
|
-
afterInitialize: ()->
|
28
34
|
@input_id ||= _.uniqueId('field')
|
29
35
|
@input_name ||= @name
|
30
|
-
@input_value ||= 1
|
31
36
|
@label ||= @name
|
32
37
|
|
38
|
+
checkboxField.publicInterface
|
33
39
|
setValue: (checked)->
|
34
40
|
@getInputElement().attr('checked', checked)
|
35
41
|
|
36
42
|
getValue:()->
|
37
|
-
@getInputElement().is(":checked")
|
43
|
+
@getInputElement().is(":checked")
|
44
|
+
|
45
|
+
checkboxField.defines
|
46
|
+
version: 1
|
@@ -1,6 +1,7 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
labelField = Luca.register "Luca.components.LabelField"
|
2
|
+
labelField.extends "Luca.core.Field"
|
3
|
+
|
4
|
+
labelField.defines
|
4
5
|
formatter: (value)->
|
5
6
|
value ||= @getValue()
|
6
7
|
_.str.titleize( value )
|
@@ -1,13 +1,12 @@
|
|
1
|
-
|
1
|
+
selectField = Luca.register "Luca.fields.SelectField"
|
2
2
|
|
3
|
-
|
4
|
-
"change select" : "change_handler"
|
3
|
+
selectField.extends "Luca.core.Field"
|
5
4
|
|
6
|
-
|
7
|
-
"after:select"
|
8
|
-
]
|
5
|
+
selectField.triggers "after:select"
|
9
6
|
|
10
|
-
|
7
|
+
selectField.defines
|
8
|
+
events:
|
9
|
+
"change select" : "change_handler"
|
11
10
|
|
12
11
|
template: "fields/select_field"
|
13
12
|
|
@@ -19,7 +18,7 @@ _.def('Luca.fields.SelectField').extends('Luca.core.Field').with
|
|
19
18
|
|
20
19
|
initialize: (@options={})->
|
21
20
|
_.extend @, @options
|
22
|
-
_.extend @, Luca.
|
21
|
+
_.extend @, Luca.concerns.Deferrable
|
23
22
|
_.bindAll @, "change_handler", "populateOptions", "beforeFetch"
|
24
23
|
|
25
24
|
Luca.core.Field::initialize.apply @, arguments
|
@@ -1,6 +1,8 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
typeAheadField = Luca.register "Luca.fields.TypeAheadField"
|
2
|
+
typeAheadField.extends "Luca.fields.TextField"
|
3
3
|
|
4
|
+
|
5
|
+
typeAheadField.defines
|
4
6
|
getSource: ()->
|
5
7
|
Luca.util.read(@source) || []
|
6
8
|
|
@@ -1,5 +1,7 @@
|
|
1
|
-
|
1
|
+
toolbar = Luca.register "Luca.components.FormButtonToolbar"
|
2
|
+
toolbar.extends "Luca.components.Toolbar"
|
2
3
|
|
4
|
+
toolbar.defines
|
3
5
|
className: 'luca-ui-form-toolbar form-actions'
|
4
6
|
|
5
7
|
position: 'bottom'
|
@@ -8,6 +10,7 @@ _.def('Luca.components.FormButtonToolbar').extends('Luca.components.Toolbar').wi
|
|
8
10
|
|
9
11
|
render: ()->
|
10
12
|
$(@container).append(@el)
|
13
|
+
@
|
11
14
|
|
12
15
|
initialize: (@options={})->
|
13
16
|
Luca.components.Toolbar.prototype.initialize.apply @, arguments
|