luca 0.6.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (233) hide show
  1. data/.gitignore +5 -0
  2. data/Gemfile +17 -0
  3. data/Gemfile.lock +77 -0
  4. data/Guardfile +22 -0
  5. data/README.md +291 -0
  6. data/Rakefile +28 -0
  7. data/app.rb +46 -0
  8. data/assets/images/glyphicons-halflings-white.png +0 -0
  9. data/assets/images/glyphicons-halflings.png +0 -0
  10. data/assets/javascripts/dependencies/backbone-min.js +37 -0
  11. data/assets/javascripts/dependencies/backbone-query.min.js +1 -0
  12. data/assets/javascripts/dependencies/bootstrap.min.js +1 -0
  13. data/assets/javascripts/dependencies/jasmine-html.js +190 -0
  14. data/assets/javascripts/dependencies/jasmine.js +2476 -0
  15. data/assets/javascripts/dependencies/jquery.js +4 -0
  16. data/assets/javascripts/dependencies/modal.js +698 -0
  17. data/assets/javascripts/dependencies/modernizr.min.js +30 -0
  18. data/assets/javascripts/dependencies/prettify.js +28 -0
  19. data/assets/javascripts/dependencies/sinon.js +3469 -0
  20. data/assets/javascripts/dependencies/spin-min.js +2 -0
  21. data/assets/javascripts/dependencies/underscore-min.js +31 -0
  22. data/assets/javascripts/dependencies/underscore-string.min.js +14 -0
  23. data/assets/javascripts/dependencies.coffee +7 -0
  24. data/assets/javascripts/luca-ui-base.coffee +12 -0
  25. data/assets/javascripts/luca-ui-spec.coffee +2 -0
  26. data/assets/javascripts/luca-ui.coffee +3 -0
  27. data/assets/javascripts/sandbox/collections/sample.coffee +0 -0
  28. data/assets/javascripts/sandbox/config.coffee +7 -0
  29. data/assets/javascripts/sandbox/sandbox.coffee +16 -0
  30. data/assets/javascripts/sandbox/templates/features/collection_helpers.luca +33 -0
  31. data/assets/javascripts/sandbox/templates/features/form_demo_code.luca +48 -0
  32. data/assets/javascripts/sandbox/templates/features/grid_demo_code.luca +24 -0
  33. data/assets/javascripts/sandbox/templates/features/introduction.luca +11 -0
  34. data/assets/javascripts/sandbox/templates/features/view_helpers.luca +43 -0
  35. data/assets/javascripts/sandbox/templates/navigation.luca +8 -0
  36. data/assets/javascripts/sandbox/views/form_demo.coffee +47 -0
  37. data/assets/javascripts/sandbox/views/grid_demo.coffee +23 -0
  38. data/assets/javascripts/sandbox/views/pages/collection_events_sample.coffee +1 -0
  39. data/assets/javascripts/sandbox/views/pages/pages_controller.coffee +28 -0
  40. data/assets/javascripts/sandbox.coffee +4 -0
  41. data/assets/javascripts/spec-dependencies.coffee +4 -0
  42. data/assets/stylesheets/bootstrap-responsive.min.css +3 -0
  43. data/assets/stylesheets/bootstrap.min.css +610 -0
  44. data/assets/stylesheets/jasmine.css +166 -0
  45. data/assets/stylesheets/luca-ui-bootstrap.css +5 -0
  46. data/assets/stylesheets/luca-ui-spec.css +3 -0
  47. data/assets/stylesheets/luca-ui.css +3 -0
  48. data/assets/stylesheets/prettify.css +40 -0
  49. data/assets/stylesheets/sandbox/sandbox.scss +4 -0
  50. data/assets/stylesheets/sandbox.css +3 -0
  51. data/config.ru +11 -0
  52. data/lib/luca/command_line.rb +69 -0
  53. data/lib/luca/rails/engine.rb +12 -0
  54. data/lib/luca/rails/version.rb +6 -0
  55. data/lib/luca/rails.rb +9 -0
  56. data/lib/luca/template.rb +51 -0
  57. data/lib/luca/test_harness.rb +106 -0
  58. data/lib/luca.rb +1 -0
  59. data/lib/sprockets/luca_template.rb +49 -0
  60. data/lib/templates/spec_manifest_javascripts.erb +7 -0
  61. data/lib/templates/spec_manifest_stylesheets.erb +11 -0
  62. data/luca.gemspec +26 -0
  63. data/public/jasmine/index.html +26 -0
  64. data/public/sandbox/api.js +1 -0
  65. data/spec/components/application_spec.coffee +0 -0
  66. data/spec/components/collection_loader_view_spec.coffee +0 -0
  67. data/spec/components/controller_spec.coffee +0 -0
  68. data/spec/components/form_view_spec.coffee +13 -0
  69. data/spec/components/grid_view_spec.coffee +0 -0
  70. data/spec/components/record_manager_spec.coffee +0 -0
  71. data/spec/components/template_spec.coffee +0 -0
  72. data/spec/containers/card_view_spec.coffee +1 -0
  73. data/spec/containers/column_view_spec.coffee +0 -0
  74. data/spec/containers/modal_view_spec.coffee +0 -0
  75. data/spec/containers/panel_view_spec.coffee +0 -0
  76. data/spec/containers/split_view_spec.coffee +0 -0
  77. data/spec/containers/tab_view_spec.coffee +0 -0
  78. data/spec/containers/viewport_spec.coffee +0 -0
  79. data/spec/core/collection_spec.coffee +215 -0
  80. data/spec/core/container_spec.coffee +0 -0
  81. data/spec/core/field_spec.coffee +0 -0
  82. data/spec/core/observer_spec.coffee +0 -0
  83. data/spec/core/view_spec.coffee +87 -0
  84. data/spec/framework_spec.coffee +48 -0
  85. data/spec/helper.coffee +120 -0
  86. data/spec/managers/collection_manager_spec.coffee +95 -0
  87. data/spec/managers/socket_manager_spec.coffee +0 -0
  88. data/src/components/application.coffee +83 -0
  89. data/src/components/base_toolbar.coffee +16 -0
  90. data/src/components/collection_loader_view.coffee +37 -0
  91. data/src/components/controller.coffee +41 -0
  92. data/src/components/fields/button_field.coffee +40 -0
  93. data/src/components/fields/checkbox_field.coffee +41 -0
  94. data/src/components/fields/file_upload_field.coffee +15 -0
  95. data/src/components/fields/hidden_field.coffee +18 -0
  96. data/src/components/fields/select_field.coffee +100 -0
  97. data/src/components/fields/text_area_field.coffee +43 -0
  98. data/src/components/fields/text_field.coffee +42 -0
  99. data/src/components/fields/type_ahead_field.coffee +10 -0
  100. data/src/components/form_button_toolbar.coffee +26 -0
  101. data/src/components/form_view.coffee +205 -0
  102. data/src/components/grid_view.coffee +208 -0
  103. data/src/components/record_manager.coffee +215 -0
  104. data/src/components/router.coffee +34 -0
  105. data/src/components/template.coffee +19 -0
  106. data/src/containers/card_view.coffee +89 -0
  107. data/src/containers/column_view.coffee +48 -0
  108. data/src/containers/modal_view.coffee +85 -0
  109. data/src/containers/panel_view.coffee +24 -0
  110. data/src/containers/split_view.coffee +12 -0
  111. data/src/containers/tab_view.coffee +77 -0
  112. data/src/containers/viewport.coffee +16 -0
  113. data/src/core/collection.coffee +319 -0
  114. data/src/core/container.coffee +256 -0
  115. data/src/core/field.coffee +68 -0
  116. data/src/core/observer.coffee +17 -0
  117. data/src/core/view.coffee +190 -0
  118. data/src/framework.coffee +110 -0
  119. data/src/index.coffee +255 -0
  120. data/src/managers/collection_manager.coffee +168 -0
  121. data/src/managers/socket_manager.coffee +54 -0
  122. data/src/modules/deferrable.coffee +18 -0
  123. data/src/modules/local_storage.coffee +50 -0
  124. data/src/stylesheets/base.scss +78 -0
  125. data/src/stylesheets/components/form_view.scss +54 -0
  126. data/src/stylesheets/components/grid_view.scss +111 -0
  127. data/src/stylesheets/components/toolbar.scss +15 -0
  128. data/src/stylesheets/containers/container.scss +7 -0
  129. data/src/stylesheets/containers/modal_view.scss +0 -0
  130. data/src/stylesheets/containers/tab_view.scss +33 -0
  131. data/src/stylesheets/normalize.scss +430 -0
  132. data/src/templates/components/bootstrap_form_controls.luca +7 -0
  133. data/src/templates/components/collection_loader_view.luca +5 -0
  134. data/src/templates/components/form_view.luca +15 -0
  135. data/src/templates/components/grid_view.luca +9 -0
  136. data/src/templates/components/grid_view_empty_text.luca +3 -0
  137. data/src/templates/containers/basic.luca +1 -0
  138. data/src/templates/containers/tab_selector_container.luca +8 -0
  139. data/src/templates/containers/tab_view.luca +1 -0
  140. data/src/templates/containers/toolbar_wrapper.luca +1 -0
  141. data/src/templates/fields/button_field.luca +2 -0
  142. data/src/templates/fields/button_field_link.luca +5 -0
  143. data/src/templates/fields/checkbox_field.luca +9 -0
  144. data/src/templates/fields/file_upload_field.luca +8 -0
  145. data/src/templates/fields/hidden_field.luca +1 -0
  146. data/src/templates/fields/select_field.luca +7 -0
  147. data/src/templates/fields/text_area_field.luca +8 -0
  148. data/src/templates/fields/text_field.luca +13 -0
  149. data/src/templates/sample/contents.luca +1 -0
  150. data/src/templates/sample/welcome.luca +1 -0
  151. data/vendor/assets/images/glyphicons-halflings-white.png +0 -0
  152. data/vendor/assets/images/glyphicons-halflings.png +0 -0
  153. data/vendor/assets/javascripts/luca-spec-dependencies.js +6135 -0
  154. data/vendor/assets/javascripts/luca-ui-base.js +1527 -0
  155. data/vendor/assets/javascripts/luca-ui-spec.js +3654 -0
  156. data/vendor/assets/javascripts/luca-ui.js +2763 -0
  157. data/vendor/assets/luca-ui/base.css +85 -0
  158. data/vendor/assets/luca-ui/components/application.js +91 -0
  159. data/vendor/assets/luca-ui/components/base_toolbar.js +23 -0
  160. data/vendor/assets/luca-ui/components/controller.js +38 -0
  161. data/vendor/assets/luca-ui/components/fields/button_field.js +45 -0
  162. data/vendor/assets/luca-ui/components/fields/checkbox_field.js +43 -0
  163. data/vendor/assets/luca-ui/components/fields/file_upload_field.js +20 -0
  164. data/vendor/assets/luca-ui/components/fields/hidden_field.js +20 -0
  165. data/vendor/assets/luca-ui/components/fields/select_field.js +97 -0
  166. data/vendor/assets/luca-ui/components/fields/text_area_field.js +48 -0
  167. data/vendor/assets/luca-ui/components/fields/text_field.js +46 -0
  168. data/vendor/assets/luca-ui/components/fields/type_ahead_field.js +13 -0
  169. data/vendor/assets/luca-ui/components/form_button_toolbar.js +32 -0
  170. data/vendor/assets/luca-ui/components/form_view.css +32 -0
  171. data/vendor/assets/luca-ui/components/form_view.js +207 -0
  172. data/vendor/assets/luca-ui/components/grid_view.css +76 -0
  173. data/vendor/assets/luca-ui/components/grid_view.js +202 -0
  174. data/vendor/assets/luca-ui/components/record_manager.js +207 -0
  175. data/vendor/assets/luca-ui/components/router.js +36 -0
  176. data/vendor/assets/luca-ui/components/template.js +26 -0
  177. data/vendor/assets/luca-ui/components/toolbar.css +11 -0
  178. data/vendor/assets/luca-ui/containers/card_view.js +98 -0
  179. data/vendor/assets/luca-ui/containers/column_view.js +52 -0
  180. data/vendor/assets/luca-ui/containers/container.css +3 -0
  181. data/vendor/assets/luca-ui/containers/modal_view.css +0 -0
  182. data/vendor/assets/luca-ui/containers/modal_view.js +87 -0
  183. data/vendor/assets/luca-ui/containers/panel_view.js +34 -0
  184. data/vendor/assets/luca-ui/containers/split_view.js +13 -0
  185. data/vendor/assets/luca-ui/containers/tab_view.css +16 -0
  186. data/vendor/assets/luca-ui/containers/tab_view.js +80 -0
  187. data/vendor/assets/luca-ui/containers/viewport.js +18 -0
  188. data/vendor/assets/luca-ui/core/collection.js +221 -0
  189. data/vendor/assets/luca-ui/core/container.js +205 -0
  190. data/vendor/assets/luca-ui/core/field.js +59 -0
  191. data/vendor/assets/luca-ui/core/observer.js +42 -0
  192. data/vendor/assets/luca-ui/core/view.js +127 -0
  193. data/vendor/assets/luca-ui/framework.js +110 -0
  194. data/vendor/assets/luca-ui/index.js +5 -0
  195. data/vendor/assets/luca-ui/managers/collection_manager.js +98 -0
  196. data/vendor/assets/luca-ui/managers/socket_manager.js +52 -0
  197. data/vendor/assets/luca-ui/modules/deferrable.js +21 -0
  198. data/vendor/assets/luca-ui/modules/local_storage.js +81 -0
  199. data/vendor/assets/luca-ui/normalize.css +359 -0
  200. data/vendor/assets/luca-ui/stylesheets/base.css +85 -0
  201. data/vendor/assets/luca-ui/stylesheets/components/form_view.css +32 -0
  202. data/vendor/assets/luca-ui/stylesheets/components/grid_view.css +76 -0
  203. data/vendor/assets/luca-ui/stylesheets/components/toolbar.css +11 -0
  204. data/vendor/assets/luca-ui/stylesheets/containers/container.css +3 -0
  205. data/vendor/assets/luca-ui/stylesheets/containers/modal_view.css +0 -0
  206. data/vendor/assets/luca-ui/stylesheets/containers/tab_view.css +16 -0
  207. data/vendor/assets/luca-ui/stylesheets/normalize.css +359 -0
  208. data/vendor/assets/luca-ui/templates/components/bootstrap_form_controls.js +4 -0
  209. data/vendor/assets/luca-ui/templates/components/form_view.js +4 -0
  210. data/vendor/assets/luca-ui/templates/components/grid_view.js +4 -0
  211. data/vendor/assets/luca-ui/templates/components/grid_view_empty_text.js +4 -0
  212. data/vendor/assets/luca-ui/templates/containers/basic.js +4 -0
  213. data/vendor/assets/luca-ui/templates/containers/tab_selector_container.js +4 -0
  214. data/vendor/assets/luca-ui/templates/containers/tab_view.js +4 -0
  215. data/vendor/assets/luca-ui/templates/containers/toolbar_wrapper.js +4 -0
  216. data/vendor/assets/luca-ui/templates/fields/button_field.js +4 -0
  217. data/vendor/assets/luca-ui/templates/fields/button_field_link.js +4 -0
  218. data/vendor/assets/luca-ui/templates/fields/checkbox_field.js +4 -0
  219. data/vendor/assets/luca-ui/templates/fields/file_upload_field.js +4 -0
  220. data/vendor/assets/luca-ui/templates/fields/hidden_field.js +4 -0
  221. data/vendor/assets/luca-ui/templates/fields/select_field.js +4 -0
  222. data/vendor/assets/luca-ui/templates/fields/text_area_field.js +4 -0
  223. data/vendor/assets/luca-ui/templates/fields/text_field.js +4 -0
  224. data/vendor/assets/luca-ui/templates/sample/contents.js +4 -0
  225. data/vendor/assets/luca-ui/templates/sample/welcome.js +4 -0
  226. data/vendor/assets/stylesheets/luca-spec-dependencies.css +166 -0
  227. data/vendor/assets/stylesheets/luca-ui-bootstrap.css +1201 -0
  228. data/vendor/assets/stylesheets/luca-ui-spec.css +586 -0
  229. data/vendor/assets/stylesheets/luca-ui.css +586 -0
  230. data/views/index.erb +20 -0
  231. data/views/jasmine.erb +22 -0
  232. data/views/spec_harness.erb +29 -0
  233. 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,10 @@
1
+ Luca.fields.TypeAheadField = Luca.fields.TextField.extend
2
+ form_field: true
3
+
4
+ className: 'luca-ui-field'
5
+
6
+ afterInitialize: ()->
7
+ @input_id ||= _.uniqueId('field')
8
+ @input_name ||= @name
9
+ @label ||= @name
10
+
@@ -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"