luca 0.6.6
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +5 -0
- data/Gemfile +17 -0
- data/Gemfile.lock +77 -0
- data/Guardfile +22 -0
- data/README.md +291 -0
- data/Rakefile +28 -0
- data/app.rb +46 -0
- data/assets/images/glyphicons-halflings-white.png +0 -0
- data/assets/images/glyphicons-halflings.png +0 -0
- data/assets/javascripts/dependencies/backbone-min.js +37 -0
- data/assets/javascripts/dependencies/backbone-query.min.js +1 -0
- data/assets/javascripts/dependencies/bootstrap.min.js +1 -0
- data/assets/javascripts/dependencies/jasmine-html.js +190 -0
- data/assets/javascripts/dependencies/jasmine.js +2476 -0
- data/assets/javascripts/dependencies/jquery.js +4 -0
- data/assets/javascripts/dependencies/modal.js +698 -0
- data/assets/javascripts/dependencies/modernizr.min.js +30 -0
- data/assets/javascripts/dependencies/prettify.js +28 -0
- data/assets/javascripts/dependencies/sinon.js +3469 -0
- data/assets/javascripts/dependencies/spin-min.js +2 -0
- data/assets/javascripts/dependencies/underscore-min.js +31 -0
- data/assets/javascripts/dependencies/underscore-string.min.js +14 -0
- data/assets/javascripts/dependencies.coffee +7 -0
- data/assets/javascripts/luca-ui-base.coffee +12 -0
- data/assets/javascripts/luca-ui-spec.coffee +2 -0
- data/assets/javascripts/luca-ui.coffee +3 -0
- data/assets/javascripts/sandbox/collections/sample.coffee +0 -0
- data/assets/javascripts/sandbox/config.coffee +7 -0
- data/assets/javascripts/sandbox/sandbox.coffee +16 -0
- data/assets/javascripts/sandbox/templates/features/collection_helpers.luca +33 -0
- data/assets/javascripts/sandbox/templates/features/form_demo_code.luca +48 -0
- data/assets/javascripts/sandbox/templates/features/grid_demo_code.luca +24 -0
- data/assets/javascripts/sandbox/templates/features/introduction.luca +11 -0
- data/assets/javascripts/sandbox/templates/features/view_helpers.luca +43 -0
- data/assets/javascripts/sandbox/templates/navigation.luca +8 -0
- data/assets/javascripts/sandbox/views/form_demo.coffee +47 -0
- data/assets/javascripts/sandbox/views/grid_demo.coffee +23 -0
- data/assets/javascripts/sandbox/views/pages/collection_events_sample.coffee +1 -0
- data/assets/javascripts/sandbox/views/pages/pages_controller.coffee +28 -0
- data/assets/javascripts/sandbox.coffee +4 -0
- data/assets/javascripts/spec-dependencies.coffee +4 -0
- data/assets/stylesheets/bootstrap-responsive.min.css +3 -0
- data/assets/stylesheets/bootstrap.min.css +610 -0
- data/assets/stylesheets/jasmine.css +166 -0
- data/assets/stylesheets/luca-ui-bootstrap.css +5 -0
- data/assets/stylesheets/luca-ui-spec.css +3 -0
- data/assets/stylesheets/luca-ui.css +3 -0
- data/assets/stylesheets/prettify.css +40 -0
- data/assets/stylesheets/sandbox/sandbox.scss +4 -0
- data/assets/stylesheets/sandbox.css +3 -0
- data/config.ru +11 -0
- data/lib/luca/command_line.rb +69 -0
- data/lib/luca/rails/engine.rb +12 -0
- data/lib/luca/rails/version.rb +6 -0
- data/lib/luca/rails.rb +9 -0
- data/lib/luca/template.rb +51 -0
- data/lib/luca/test_harness.rb +106 -0
- data/lib/luca.rb +1 -0
- data/lib/sprockets/luca_template.rb +49 -0
- data/lib/templates/spec_manifest_javascripts.erb +7 -0
- data/lib/templates/spec_manifest_stylesheets.erb +11 -0
- data/luca.gemspec +26 -0
- data/public/jasmine/index.html +26 -0
- data/public/sandbox/api.js +1 -0
- data/spec/components/application_spec.coffee +0 -0
- data/spec/components/collection_loader_view_spec.coffee +0 -0
- data/spec/components/controller_spec.coffee +0 -0
- data/spec/components/form_view_spec.coffee +13 -0
- data/spec/components/grid_view_spec.coffee +0 -0
- data/spec/components/record_manager_spec.coffee +0 -0
- data/spec/components/template_spec.coffee +0 -0
- data/spec/containers/card_view_spec.coffee +1 -0
- data/spec/containers/column_view_spec.coffee +0 -0
- data/spec/containers/modal_view_spec.coffee +0 -0
- data/spec/containers/panel_view_spec.coffee +0 -0
- data/spec/containers/split_view_spec.coffee +0 -0
- data/spec/containers/tab_view_spec.coffee +0 -0
- data/spec/containers/viewport_spec.coffee +0 -0
- data/spec/core/collection_spec.coffee +215 -0
- data/spec/core/container_spec.coffee +0 -0
- data/spec/core/field_spec.coffee +0 -0
- data/spec/core/observer_spec.coffee +0 -0
- data/spec/core/view_spec.coffee +87 -0
- data/spec/framework_spec.coffee +48 -0
- data/spec/helper.coffee +120 -0
- data/spec/managers/collection_manager_spec.coffee +95 -0
- data/spec/managers/socket_manager_spec.coffee +0 -0
- data/src/components/application.coffee +83 -0
- data/src/components/base_toolbar.coffee +16 -0
- data/src/components/collection_loader_view.coffee +37 -0
- data/src/components/controller.coffee +41 -0
- data/src/components/fields/button_field.coffee +40 -0
- data/src/components/fields/checkbox_field.coffee +41 -0
- data/src/components/fields/file_upload_field.coffee +15 -0
- data/src/components/fields/hidden_field.coffee +18 -0
- data/src/components/fields/select_field.coffee +100 -0
- data/src/components/fields/text_area_field.coffee +43 -0
- data/src/components/fields/text_field.coffee +42 -0
- data/src/components/fields/type_ahead_field.coffee +10 -0
- data/src/components/form_button_toolbar.coffee +26 -0
- data/src/components/form_view.coffee +205 -0
- data/src/components/grid_view.coffee +208 -0
- data/src/components/record_manager.coffee +215 -0
- data/src/components/router.coffee +34 -0
- data/src/components/template.coffee +19 -0
- data/src/containers/card_view.coffee +89 -0
- data/src/containers/column_view.coffee +48 -0
- data/src/containers/modal_view.coffee +85 -0
- data/src/containers/panel_view.coffee +24 -0
- data/src/containers/split_view.coffee +12 -0
- data/src/containers/tab_view.coffee +77 -0
- data/src/containers/viewport.coffee +16 -0
- data/src/core/collection.coffee +319 -0
- data/src/core/container.coffee +256 -0
- data/src/core/field.coffee +68 -0
- data/src/core/observer.coffee +17 -0
- data/src/core/view.coffee +190 -0
- data/src/framework.coffee +110 -0
- data/src/index.coffee +255 -0
- data/src/managers/collection_manager.coffee +168 -0
- data/src/managers/socket_manager.coffee +54 -0
- data/src/modules/deferrable.coffee +18 -0
- data/src/modules/local_storage.coffee +50 -0
- data/src/stylesheets/base.scss +78 -0
- data/src/stylesheets/components/form_view.scss +54 -0
- data/src/stylesheets/components/grid_view.scss +111 -0
- data/src/stylesheets/components/toolbar.scss +15 -0
- data/src/stylesheets/containers/container.scss +7 -0
- data/src/stylesheets/containers/modal_view.scss +0 -0
- data/src/stylesheets/containers/tab_view.scss +33 -0
- data/src/stylesheets/normalize.scss +430 -0
- data/src/templates/components/bootstrap_form_controls.luca +7 -0
- data/src/templates/components/collection_loader_view.luca +5 -0
- data/src/templates/components/form_view.luca +15 -0
- data/src/templates/components/grid_view.luca +9 -0
- data/src/templates/components/grid_view_empty_text.luca +3 -0
- data/src/templates/containers/basic.luca +1 -0
- data/src/templates/containers/tab_selector_container.luca +8 -0
- data/src/templates/containers/tab_view.luca +1 -0
- data/src/templates/containers/toolbar_wrapper.luca +1 -0
- data/src/templates/fields/button_field.luca +2 -0
- data/src/templates/fields/button_field_link.luca +5 -0
- data/src/templates/fields/checkbox_field.luca +9 -0
- data/src/templates/fields/file_upload_field.luca +8 -0
- data/src/templates/fields/hidden_field.luca +1 -0
- data/src/templates/fields/select_field.luca +7 -0
- data/src/templates/fields/text_area_field.luca +8 -0
- data/src/templates/fields/text_field.luca +13 -0
- data/src/templates/sample/contents.luca +1 -0
- data/src/templates/sample/welcome.luca +1 -0
- data/vendor/assets/images/glyphicons-halflings-white.png +0 -0
- data/vendor/assets/images/glyphicons-halflings.png +0 -0
- data/vendor/assets/javascripts/luca-spec-dependencies.js +6135 -0
- data/vendor/assets/javascripts/luca-ui-base.js +1527 -0
- data/vendor/assets/javascripts/luca-ui-spec.js +3654 -0
- data/vendor/assets/javascripts/luca-ui.js +2763 -0
- data/vendor/assets/luca-ui/base.css +85 -0
- data/vendor/assets/luca-ui/components/application.js +91 -0
- data/vendor/assets/luca-ui/components/base_toolbar.js +23 -0
- data/vendor/assets/luca-ui/components/controller.js +38 -0
- data/vendor/assets/luca-ui/components/fields/button_field.js +45 -0
- data/vendor/assets/luca-ui/components/fields/checkbox_field.js +43 -0
- data/vendor/assets/luca-ui/components/fields/file_upload_field.js +20 -0
- data/vendor/assets/luca-ui/components/fields/hidden_field.js +20 -0
- data/vendor/assets/luca-ui/components/fields/select_field.js +97 -0
- data/vendor/assets/luca-ui/components/fields/text_area_field.js +48 -0
- data/vendor/assets/luca-ui/components/fields/text_field.js +46 -0
- data/vendor/assets/luca-ui/components/fields/type_ahead_field.js +13 -0
- data/vendor/assets/luca-ui/components/form_button_toolbar.js +32 -0
- data/vendor/assets/luca-ui/components/form_view.css +32 -0
- data/vendor/assets/luca-ui/components/form_view.js +207 -0
- data/vendor/assets/luca-ui/components/grid_view.css +76 -0
- data/vendor/assets/luca-ui/components/grid_view.js +202 -0
- data/vendor/assets/luca-ui/components/record_manager.js +207 -0
- data/vendor/assets/luca-ui/components/router.js +36 -0
- data/vendor/assets/luca-ui/components/template.js +26 -0
- data/vendor/assets/luca-ui/components/toolbar.css +11 -0
- data/vendor/assets/luca-ui/containers/card_view.js +98 -0
- data/vendor/assets/luca-ui/containers/column_view.js +52 -0
- data/vendor/assets/luca-ui/containers/container.css +3 -0
- data/vendor/assets/luca-ui/containers/modal_view.css +0 -0
- data/vendor/assets/luca-ui/containers/modal_view.js +87 -0
- data/vendor/assets/luca-ui/containers/panel_view.js +34 -0
- data/vendor/assets/luca-ui/containers/split_view.js +13 -0
- data/vendor/assets/luca-ui/containers/tab_view.css +16 -0
- data/vendor/assets/luca-ui/containers/tab_view.js +80 -0
- data/vendor/assets/luca-ui/containers/viewport.js +18 -0
- data/vendor/assets/luca-ui/core/collection.js +221 -0
- data/vendor/assets/luca-ui/core/container.js +205 -0
- data/vendor/assets/luca-ui/core/field.js +59 -0
- data/vendor/assets/luca-ui/core/observer.js +42 -0
- data/vendor/assets/luca-ui/core/view.js +127 -0
- data/vendor/assets/luca-ui/framework.js +110 -0
- data/vendor/assets/luca-ui/index.js +5 -0
- data/vendor/assets/luca-ui/managers/collection_manager.js +98 -0
- data/vendor/assets/luca-ui/managers/socket_manager.js +52 -0
- data/vendor/assets/luca-ui/modules/deferrable.js +21 -0
- data/vendor/assets/luca-ui/modules/local_storage.js +81 -0
- data/vendor/assets/luca-ui/normalize.css +359 -0
- data/vendor/assets/luca-ui/stylesheets/base.css +85 -0
- data/vendor/assets/luca-ui/stylesheets/components/form_view.css +32 -0
- data/vendor/assets/luca-ui/stylesheets/components/grid_view.css +76 -0
- data/vendor/assets/luca-ui/stylesheets/components/toolbar.css +11 -0
- data/vendor/assets/luca-ui/stylesheets/containers/container.css +3 -0
- data/vendor/assets/luca-ui/stylesheets/containers/modal_view.css +0 -0
- data/vendor/assets/luca-ui/stylesheets/containers/tab_view.css +16 -0
- data/vendor/assets/luca-ui/stylesheets/normalize.css +359 -0
- data/vendor/assets/luca-ui/templates/components/bootstrap_form_controls.js +4 -0
- data/vendor/assets/luca-ui/templates/components/form_view.js +4 -0
- data/vendor/assets/luca-ui/templates/components/grid_view.js +4 -0
- data/vendor/assets/luca-ui/templates/components/grid_view_empty_text.js +4 -0
- data/vendor/assets/luca-ui/templates/containers/basic.js +4 -0
- data/vendor/assets/luca-ui/templates/containers/tab_selector_container.js +4 -0
- data/vendor/assets/luca-ui/templates/containers/tab_view.js +4 -0
- data/vendor/assets/luca-ui/templates/containers/toolbar_wrapper.js +4 -0
- data/vendor/assets/luca-ui/templates/fields/button_field.js +4 -0
- data/vendor/assets/luca-ui/templates/fields/button_field_link.js +4 -0
- data/vendor/assets/luca-ui/templates/fields/checkbox_field.js +4 -0
- data/vendor/assets/luca-ui/templates/fields/file_upload_field.js +4 -0
- data/vendor/assets/luca-ui/templates/fields/hidden_field.js +4 -0
- data/vendor/assets/luca-ui/templates/fields/select_field.js +4 -0
- data/vendor/assets/luca-ui/templates/fields/text_area_field.js +4 -0
- data/vendor/assets/luca-ui/templates/fields/text_field.js +4 -0
- data/vendor/assets/luca-ui/templates/sample/contents.js +4 -0
- data/vendor/assets/luca-ui/templates/sample/welcome.js +4 -0
- data/vendor/assets/stylesheets/luca-spec-dependencies.css +166 -0
- data/vendor/assets/stylesheets/luca-ui-bootstrap.css +1201 -0
- data/vendor/assets/stylesheets/luca-ui-spec.css +586 -0
- data/vendor/assets/stylesheets/luca-ui.css +586 -0
- data/views/index.erb +20 -0
- data/views/jasmine.erb +22 -0
- data/views/spec_harness.erb +29 -0
- metadata +361 -0
@@ -0,0 +1,83 @@
|
|
1
|
+
Luca.Application = Luca.containers.Viewport.extend
|
2
|
+
|
3
|
+
components:[
|
4
|
+
ctype: 'controller'
|
5
|
+
name: 'main_controller'
|
6
|
+
defaultCard: 'welcome'
|
7
|
+
components:[
|
8
|
+
ctype: 'template'
|
9
|
+
name: 'welcome'
|
10
|
+
template: 'sample/welcome'
|
11
|
+
templateContainer: "Luca.templates"
|
12
|
+
]
|
13
|
+
]
|
14
|
+
|
15
|
+
initialize: (@options={})->
|
16
|
+
Luca.containers.Viewport::initialize.apply @, arguments
|
17
|
+
|
18
|
+
@collectionManager = new Luca.CollectionManager()
|
19
|
+
|
20
|
+
@state = new Backbone.Model( @defaultState )
|
21
|
+
|
22
|
+
@bind "ready", ()=> @render()
|
23
|
+
|
24
|
+
activeView: ()->
|
25
|
+
if active = @activeSubSection()
|
26
|
+
@view( active )
|
27
|
+
else
|
28
|
+
@view( @activeSection() )
|
29
|
+
|
30
|
+
activeSubSection: ()->
|
31
|
+
@get("active_sub_section")
|
32
|
+
|
33
|
+
activeSection: ()->
|
34
|
+
@get("active_section")
|
35
|
+
|
36
|
+
afterComponents: ()->
|
37
|
+
Luca.containers.Viewport::afterComponents?.apply @, arguments
|
38
|
+
|
39
|
+
# any time the main controller card switches we should track
|
40
|
+
# the active card on the global state chart
|
41
|
+
@getMainController()?.bind "after:card:switch", (previous,current)=>
|
42
|
+
@state.set(active_section:current.name)
|
43
|
+
|
44
|
+
# any time the card switches on one of the sub controllers
|
45
|
+
# then we should track the active sub section on the global state chart
|
46
|
+
@getMainController()?.each (component)=>
|
47
|
+
if component.ctype.match(/controller$/)
|
48
|
+
component.bind "after:card:switch", (previous,current)=>
|
49
|
+
@state.set(active_sub_section:current.name)
|
50
|
+
|
51
|
+
beforeRender: ()->
|
52
|
+
Luca.containers.Viewport::beforeRender?.apply @, arguments
|
53
|
+
#Backbone.history.start()
|
54
|
+
|
55
|
+
# boot should trigger the ready event, which will call the initial call
|
56
|
+
# to render() your application, which will have a cascading effect on every
|
57
|
+
# subcomponent in the view, recursively rendering everything which is set
|
58
|
+
# to automatically render (i.e. any non-deferrable components ).
|
59
|
+
#
|
60
|
+
# you should use boot to fire up any dependent collections, manager, any
|
61
|
+
# sort of data processing, whatever your application requires to run outside
|
62
|
+
# of the views
|
63
|
+
boot: ()->
|
64
|
+
console.log "Sup?"
|
65
|
+
@trigger "ready"
|
66
|
+
|
67
|
+
|
68
|
+
# delegate to the collection manager's get or create function.
|
69
|
+
# use App.collection() to create or access existing collections
|
70
|
+
collection: ()->
|
71
|
+
@collectionManager.getOrCreate.apply(@collectionManager, arguments)
|
72
|
+
|
73
|
+
get: (attribute)->
|
74
|
+
@state.get(attribute)
|
75
|
+
|
76
|
+
getMainController: ()->
|
77
|
+
@view("main_controler")
|
78
|
+
|
79
|
+
set: (attributes)->
|
80
|
+
@state.set(attributes)
|
81
|
+
|
82
|
+
view: (name)-> Luca.cache(name)
|
83
|
+
|
@@ -0,0 +1,16 @@
|
|
1
|
+
Luca.components.Toolbar = Luca.core.Container.extend
|
2
|
+
className: 'luca-ui-toolbar'
|
3
|
+
|
4
|
+
position: 'bottom'
|
5
|
+
|
6
|
+
initialize: (@options={})->
|
7
|
+
Luca.core.Container::initialize.apply @, arguments
|
8
|
+
|
9
|
+
prepareComponents: ()->
|
10
|
+
_( @components ).each (component)=>
|
11
|
+
component.container = @el
|
12
|
+
|
13
|
+
render: ()->
|
14
|
+
$(@container).append(@el)
|
15
|
+
|
16
|
+
Luca.register "toolbar", "Luca.components.Toolbar"
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# Collection Loader View is a simple modal view
|
2
|
+
# You can provide your own template for the collection loader modal
|
3
|
+
# if you want to. Default implementation uses twitter bootstrap modal and
|
4
|
+
# progress bar (http://twitter.github.com/bootstrap/). You template
|
5
|
+
# should have contain `progress`, `bar` and `message` classes
|
6
|
+
Luca.components.CollectionLoaderView = Luca.components.Template.extend
|
7
|
+
className: 'luca-ui-collection-loader-view'
|
8
|
+
|
9
|
+
template: "components/collection_loader_view"
|
10
|
+
|
11
|
+
initialize: (@options={})->
|
12
|
+
Luca.components.Template::initialize.apply @,arguments
|
13
|
+
|
14
|
+
@container ||= $('body')
|
15
|
+
@manager ||= Luca.CollectionManager.get()
|
16
|
+
|
17
|
+
@setupBindings()
|
18
|
+
|
19
|
+
modalContainer: ()->
|
20
|
+
$("#progress-modal", @el)
|
21
|
+
|
22
|
+
setupBindings: ()->
|
23
|
+
@manager.bind "collection_loaded", (name)=>
|
24
|
+
loaded = @manager.loadedCollectionsCount()
|
25
|
+
total = @manager.totalCollectionsCount()
|
26
|
+
progress = parseInt((loaded / total) * 100)
|
27
|
+
|
28
|
+
@modalContainer().find('.progress .bar').attr("style", "width: #{progress}%;")
|
29
|
+
@modalContainer().find('.message').html("Loaded #{ _(name).chain().humanize().titleize().value() }...")
|
30
|
+
|
31
|
+
@manager.bind "all_collections_loaded", ()=>
|
32
|
+
@modalContainer().find('.message').html("All done!")
|
33
|
+
_.delay ()=>
|
34
|
+
@modalContainer().modal('hide')
|
35
|
+
, 400
|
36
|
+
|
37
|
+
Luca.register "collection_loader_view","Luca.components.CollectionLoaderView"
|
@@ -0,0 +1,41 @@
|
|
1
|
+
Luca.components.Controller = Luca.containers.CardView.extend
|
2
|
+
initialize: (@options)->
|
3
|
+
Luca.containers.CardView::initialize.apply @, arguments
|
4
|
+
|
5
|
+
@defaultCard ||= @components[0]?.name
|
6
|
+
|
7
|
+
throw "Controllers must specify a defaultCard property and/or the first component must have a name" unless @defaultCard
|
8
|
+
|
9
|
+
@state = new Backbone.Model
|
10
|
+
active_section: @defaultCard
|
11
|
+
|
12
|
+
|
13
|
+
each: (fn)->
|
14
|
+
_( @components ).each (component)=>
|
15
|
+
fn.apply @, [component]
|
16
|
+
|
17
|
+
default: (callback)->
|
18
|
+
@navigate_to(@defaultCard, callback)
|
19
|
+
|
20
|
+
# switch the active card of this controller
|
21
|
+
# optionally passing an onActivation callback
|
22
|
+
# will fire this callback in the context of
|
23
|
+
# the currently active card
|
24
|
+
navigate_to: (section, callback)->
|
25
|
+
section ||= @defaultCard
|
26
|
+
|
27
|
+
# activate is a method on Luca.containers.CardView which
|
28
|
+
# selects a component and makes it visible, hiding any
|
29
|
+
# other component which may be monopolizing the view at that time.
|
30
|
+
|
31
|
+
# after activation it triggers a after:card:switch event
|
32
|
+
# and if it is the first time that view is being activated,
|
33
|
+
# it triggers a first:activation event which gets relayed to all
|
34
|
+
# child components in that view
|
35
|
+
@activate section, false, (activator, previous,current)=>
|
36
|
+
@state.set(active_section: current.name )
|
37
|
+
if _.isFunction( callback )
|
38
|
+
callback.apply(current)
|
39
|
+
|
40
|
+
# return the section we are navigating to
|
41
|
+
@find(section)
|
@@ -0,0 +1,40 @@
|
|
1
|
+
Luca.fields.ButtonField = Luca.core.Field.extend
|
2
|
+
form_field: true
|
3
|
+
|
4
|
+
readOnly: true
|
5
|
+
|
6
|
+
events:
|
7
|
+
"click input" : "click_handler"
|
8
|
+
|
9
|
+
hooks:[
|
10
|
+
"button:click"
|
11
|
+
]
|
12
|
+
|
13
|
+
className: 'luca-ui-field luca-ui-button-field'
|
14
|
+
|
15
|
+
template: 'fields/button_field'
|
16
|
+
|
17
|
+
click_handler: (e)->
|
18
|
+
me = my = $( e.currentTarget )
|
19
|
+
@trigger "button:click"
|
20
|
+
|
21
|
+
initialize: (@options={})->
|
22
|
+
_.extend @options
|
23
|
+
_.bindAll @, "click_handler"
|
24
|
+
|
25
|
+
Luca.core.Field::initialize.apply @, arguments
|
26
|
+
|
27
|
+
@template = "fields/button_field_link" if @icon_class?.length
|
28
|
+
|
29
|
+
afterInitialize: ()->
|
30
|
+
@input_id ||= _.uniqueId('button')
|
31
|
+
@input_name ||= @name ||= @input_id
|
32
|
+
@input_value ||= @label ||= @text
|
33
|
+
@input_type ||= "button"
|
34
|
+
@input_class ||= @class
|
35
|
+
@icon_class ||= ""
|
36
|
+
@icon_class = "icon-#{ @icon_class }" if @icon_class.length and !@icon_class.match(/^icon-/)
|
37
|
+
|
38
|
+
setValue: ()-> true
|
39
|
+
|
40
|
+
Luca.register "button_field", "Luca.fields.ButtonField"
|
@@ -0,0 +1,41 @@
|
|
1
|
+
Luca.fields.CheckboxField = Luca.core.Field.extend
|
2
|
+
form_field: true
|
3
|
+
|
4
|
+
events:
|
5
|
+
"change input" : "change_handler"
|
6
|
+
|
7
|
+
change_handler: (e)->
|
8
|
+
me = my = $(e.currentTarget)
|
9
|
+
|
10
|
+
@trigger "on:change", @, e
|
11
|
+
|
12
|
+
if me.checked is true
|
13
|
+
@trigger "checked"
|
14
|
+
else
|
15
|
+
@trigger "unchecked"
|
16
|
+
|
17
|
+
className: 'luca-ui-checkbox-field luca-ui-field'
|
18
|
+
|
19
|
+
template: 'fields/checkbox_field'
|
20
|
+
|
21
|
+
hooks: ["checked","unchecked"]
|
22
|
+
|
23
|
+
initialize: (@options={})->
|
24
|
+
_.extend @, @options
|
25
|
+
_.bindAll @, "change_handler"
|
26
|
+
|
27
|
+
Luca.core.Field::initialize.apply @, arguments
|
28
|
+
|
29
|
+
afterInitialize: ()->
|
30
|
+
@input_id ||= _.uniqueId('field')
|
31
|
+
@input_name ||= @name
|
32
|
+
@input_value ||= 1
|
33
|
+
@label ||= @name
|
34
|
+
|
35
|
+
setValue: (checked)->
|
36
|
+
@input.attr('checked', checked)
|
37
|
+
|
38
|
+
getValue:()->
|
39
|
+
@input.attr('checked') is true
|
40
|
+
|
41
|
+
Luca.register "checkbox_field", "Luca.fields.CheckboxField"
|
@@ -0,0 +1,15 @@
|
|
1
|
+
Luca.fields.FileUploadField = Luca.core.Field.extend
|
2
|
+
form_field: true
|
3
|
+
|
4
|
+
template: 'fields/file_upload_field'
|
5
|
+
|
6
|
+
initialize: (@options={})->
|
7
|
+
Luca.core.Field::initialize.apply @, arguments
|
8
|
+
|
9
|
+
afterInitialize: ()->
|
10
|
+
@input_id ||= _.uniqueId('field')
|
11
|
+
@input_name ||= @name
|
12
|
+
@label ||= @name
|
13
|
+
@helperText ||= ""
|
14
|
+
|
15
|
+
Luca.register "file_upload_field", "Luca.fields.FileUploadField"
|
@@ -0,0 +1,18 @@
|
|
1
|
+
Luca.fields.HiddenField = Luca.core.Field.extend
|
2
|
+
form_field: true
|
3
|
+
|
4
|
+
template: 'fields/hidden_field'
|
5
|
+
|
6
|
+
initialize: (@options={})->
|
7
|
+
Luca.core.Field::initialize.apply @, arguments
|
8
|
+
|
9
|
+
afterInitialize: ()->
|
10
|
+
@input_id ||= _.uniqueId('field')
|
11
|
+
@input_name ||= @name
|
12
|
+
@input_value ||= @value
|
13
|
+
@label ||= @name
|
14
|
+
|
15
|
+
Luca.register "hidden_field", "Luca.fields.HiddenField"
|
16
|
+
|
17
|
+
|
18
|
+
|
@@ -0,0 +1,100 @@
|
|
1
|
+
Luca.fields.SelectField = Luca.core.Field.extend
|
2
|
+
form_field: true
|
3
|
+
|
4
|
+
events:
|
5
|
+
"change select" : "change_handler"
|
6
|
+
|
7
|
+
hooks:[
|
8
|
+
"after:select"
|
9
|
+
]
|
10
|
+
|
11
|
+
className: 'luca-ui-select-field luca-ui-field'
|
12
|
+
|
13
|
+
template: "fields/select_field"
|
14
|
+
|
15
|
+
includeBlank: true
|
16
|
+
|
17
|
+
blankValue: ''
|
18
|
+
|
19
|
+
blankText: 'Select One'
|
20
|
+
|
21
|
+
initialize: (@options={})->
|
22
|
+
_.extend @, @options
|
23
|
+
_.extend @, Luca.modules.Deferrable
|
24
|
+
_.bindAll @, "change_handler", "populateOptions", "beforeFetch"
|
25
|
+
|
26
|
+
Luca.core.Field::initialize.apply @, arguments
|
27
|
+
|
28
|
+
@input_id ||= _.uniqueId('field')
|
29
|
+
@input_name ||= @name
|
30
|
+
@label ||= @name
|
31
|
+
@retainValue = true if _.isUndefined @retainValue
|
32
|
+
|
33
|
+
afterInitialize: ()->
|
34
|
+
if @collection?.data
|
35
|
+
@valueField ||= "id"
|
36
|
+
@displayField ||= "name"
|
37
|
+
@parseData()
|
38
|
+
|
39
|
+
try
|
40
|
+
@configure_collection()
|
41
|
+
catch e
|
42
|
+
console.log "Error Configuring Collection", @, e.message
|
43
|
+
|
44
|
+
@collection.bind "before:fetch", @beforeFetch
|
45
|
+
@collection.bind "reset", @populateOptions
|
46
|
+
|
47
|
+
# if the select field is configured with a data property
|
48
|
+
# then parse that data into the proper format. either
|
49
|
+
# an array of objects with the valueField and displayField
|
50
|
+
# properties, or an array of arrays with [valueField, displayField]
|
51
|
+
parseData: ()->
|
52
|
+
@collection.data = _( @collection.data ).map (record)=>
|
53
|
+
return record if not _.isArray( record )
|
54
|
+
hash = {}
|
55
|
+
hash[ @valueField ] = record[0]
|
56
|
+
hash[ @displayField ] = record[1]
|
57
|
+
|
58
|
+
hash
|
59
|
+
|
60
|
+
|
61
|
+
afterRender: ()->
|
62
|
+
@input = $('select', @el)
|
63
|
+
|
64
|
+
if @collection?.models?.length > 0
|
65
|
+
@populateOptions()
|
66
|
+
else
|
67
|
+
@collection.trigger("reset")
|
68
|
+
|
69
|
+
setValue: (value)->
|
70
|
+
@currentValue = value
|
71
|
+
Luca.core.Field::setValue.apply @, arguments
|
72
|
+
|
73
|
+
beforeFetch: ()->
|
74
|
+
@resetOptions()
|
75
|
+
|
76
|
+
change_handler: (e)->
|
77
|
+
@trigger "on:change", @, e
|
78
|
+
|
79
|
+
resetOptions: ()->
|
80
|
+
@input.html('')
|
81
|
+
|
82
|
+
if @includeBlank
|
83
|
+
@input.append("<option value='#{ @blankValue }'>#{ @blankText }</option>")
|
84
|
+
|
85
|
+
|
86
|
+
populateOptions: ()->
|
87
|
+
@resetOptions()
|
88
|
+
|
89
|
+
if @collection?.each?
|
90
|
+
@collection.each (model) =>
|
91
|
+
value = model.get( @valueField )
|
92
|
+
display = model.get( @displayField )
|
93
|
+
selected = "selected" if @selected and value is @selected
|
94
|
+
option = "<option #{ selected } value='#{ value }'>#{ display }</option>"
|
95
|
+
@input.append( option )
|
96
|
+
|
97
|
+
@trigger "after:populate:options", @
|
98
|
+
@setValue( @currentValue )
|
99
|
+
|
100
|
+
Luca.register "select_field", "Luca.fields.SelectField"
|
@@ -0,0 +1,43 @@
|
|
1
|
+
Luca.fields.TextAreaField = Luca.core.Field.extend
|
2
|
+
form_field: true
|
3
|
+
|
4
|
+
events:
|
5
|
+
"keydown input" : "keydown_handler"
|
6
|
+
"blur input" : "blur_handler"
|
7
|
+
"focus input" : "focus_handler"
|
8
|
+
|
9
|
+
template: 'fields/text_area_field'
|
10
|
+
|
11
|
+
height: "200px"
|
12
|
+
width: "90%"
|
13
|
+
|
14
|
+
initialize: (@options={})->
|
15
|
+
_.bindAll @, "keydown_handler"
|
16
|
+
|
17
|
+
Luca.core.Field::initialize.apply @, arguments
|
18
|
+
|
19
|
+
@input_id ||= _.uniqueId('field')
|
20
|
+
@input_name ||= @name
|
21
|
+
@label ||= @name
|
22
|
+
@input_class ||= @class
|
23
|
+
@inputStyles ||= "height:#{ @height };width:#{ @width }"
|
24
|
+
|
25
|
+
setValue: (value)->
|
26
|
+
$( @field() ).val(value)
|
27
|
+
|
28
|
+
getValue: ()->
|
29
|
+
$( @field() ).val()
|
30
|
+
|
31
|
+
field: ()->
|
32
|
+
@input = $("textarea##{ @input_id }", @el)
|
33
|
+
|
34
|
+
keydown_handler: (e)->
|
35
|
+
me = my = $( e.currentTarget )
|
36
|
+
|
37
|
+
blur_handler: (e)->
|
38
|
+
me = my = $( e.currentTarget )
|
39
|
+
|
40
|
+
focus_handler: (e)->
|
41
|
+
me = my = $( e.currentTarget )
|
42
|
+
|
43
|
+
Luca.register "text_area_field", "Luca.fields.TextAreaField"
|
@@ -0,0 +1,42 @@
|
|
1
|
+
Luca.fields.TextField = Luca.core.Field.extend
|
2
|
+
form_field: true
|
3
|
+
|
4
|
+
events:
|
5
|
+
"keydown input" : "keydown_handler"
|
6
|
+
"blur input" : "blur_handler"
|
7
|
+
"focus input" : "focus_handler"
|
8
|
+
"change input" : "change_handler"
|
9
|
+
|
10
|
+
template: 'fields/text_field'
|
11
|
+
|
12
|
+
initialize: (@options={})->
|
13
|
+
_.bindAll @, "keydown_handler", "blur_handler", "focus_handler"
|
14
|
+
Luca.core.Field::initialize.apply @, arguments
|
15
|
+
|
16
|
+
@input_id ||= _.uniqueId('field')
|
17
|
+
@input_name ||= @name
|
18
|
+
@label ||= @name
|
19
|
+
|
20
|
+
if @prepend
|
21
|
+
@$el.addClass('input-prepend')
|
22
|
+
@addOn = @prepend
|
23
|
+
|
24
|
+
if @append
|
25
|
+
@$el.addClass('input-append')
|
26
|
+
@addOn = @append
|
27
|
+
|
28
|
+
keydown_handler: _.throttle ((e)-> @change_handler.apply @, arguments), 300
|
29
|
+
|
30
|
+
blur_handler: (e)->
|
31
|
+
me = my = $( e.currentTarget )
|
32
|
+
|
33
|
+
focus_handler: (e)->
|
34
|
+
me = my = $( e.currentTarget )
|
35
|
+
|
36
|
+
change_handler: (e)->
|
37
|
+
@trigger "on:change", @, e
|
38
|
+
|
39
|
+
|
40
|
+
Luca.register "text_field", "Luca.fields.TextField"
|
41
|
+
|
42
|
+
|
@@ -0,0 +1,26 @@
|
|
1
|
+
Luca.components.FormButtonToolbar = Luca.components.Toolbar.extend
|
2
|
+
className: 'luca-ui-form-toolbar form-actions'
|
3
|
+
|
4
|
+
position: 'bottom'
|
5
|
+
|
6
|
+
includeReset: false
|
7
|
+
|
8
|
+
render: ()->
|
9
|
+
$(@container).append(@el)
|
10
|
+
|
11
|
+
initialize: (@options={})->
|
12
|
+
Luca.components.Toolbar.prototype.initialize.apply @, arguments
|
13
|
+
|
14
|
+
@components = [
|
15
|
+
ctype: 'button_field'
|
16
|
+
label: 'Submit'
|
17
|
+
class: 'btn submit-button'
|
18
|
+
]
|
19
|
+
|
20
|
+
if @includeReset
|
21
|
+
@components.push
|
22
|
+
ctype: 'button_field'
|
23
|
+
label: 'Reset'
|
24
|
+
class: 'btn reset-button'
|
25
|
+
|
26
|
+
Luca.register "form_button_toolbar", "Luca.components.FormButtonToolbar"
|