luca 0.9.76 → 0.9.89

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (457) hide show
  1. data/CHANGELOG +65 -2
  2. data/Gemfile +4 -0
  3. data/Gemfile.lock +18 -2
  4. data/Guardfile +3 -25
  5. data/README.md +50 -58
  6. data/ROADMAP +15 -32
  7. data/Rakefile +18 -77
  8. data/app.rb +12 -46
  9. data/{assets → app/assets}/images/glyphicons-halflings-white.png +0 -0
  10. data/{assets → app/assets}/images/glyphicons-halflings.png +0 -0
  11. data/app/assets/javascripts/luca-ui.js +1 -0
  12. data/app/assets/javascripts/luca/basic.coffee +8 -0
  13. data/{src → app/assets/javascripts/luca}/components/application.coffee +233 -65
  14. data/{src → app/assets/javascripts/luca}/components/collection_loader_view.coffee +0 -0
  15. data/app/assets/javascripts/luca/components/collection_view.coffee +207 -0
  16. data/{src → app/assets/javascripts/luca}/components/controller.coffee +27 -13
  17. data/{src/core/field.coffee → app/assets/javascripts/luca/components/fields/base.coffee} +18 -10
  18. data/{src → app/assets/javascripts/luca}/components/fields/button_field.coffee +8 -9
  19. data/{src → app/assets/javascripts/luca}/components/fields/checkbox_array.coffee +0 -0
  20. data/{src → app/assets/javascripts/luca}/components/fields/checkbox_field.coffee +0 -0
  21. data/{src → app/assets/javascripts/luca}/components/fields/file_upload_field.coffee +0 -0
  22. data/{src → app/assets/javascripts/luca}/components/fields/hidden_field.coffee +0 -0
  23. data/{src → app/assets/javascripts/luca}/components/fields/label_field.coffee +0 -0
  24. data/app/assets/javascripts/luca/components/fields/select_field.coffee +159 -0
  25. data/app/assets/javascripts/luca/components/fields/text_area_field.coffee +57 -0
  26. data/{src → app/assets/javascripts/luca}/components/fields/text_field.coffee +9 -3
  27. data/{src → app/assets/javascripts/luca}/components/fields/type_ahead_field.coffee +0 -0
  28. data/app/assets/javascripts/luca/components/form_view.coffee +421 -0
  29. data/app/assets/javascripts/luca/components/grid_layout_view.coffee +43 -0
  30. data/app/assets/javascripts/luca/components/index.coffee +7 -0
  31. data/app/assets/javascripts/luca/components/load_mask.coffee +8 -0
  32. data/{src → app/assets/javascripts/luca}/components/multi_collection_view.coffee +34 -34
  33. data/app/assets/javascripts/luca/components/nav_bar.coffee +80 -0
  34. data/app/assets/javascripts/luca/components/page.coffee +69 -0
  35. data/app/assets/javascripts/luca/components/page_controller.coffee +3 -0
  36. data/{src → app/assets/javascripts/luca}/components/pagination_control.coffee +13 -13
  37. data/{src → app/assets/javascripts/luca}/components/record_manager.coffee +0 -0
  38. data/{src → app/assets/javascripts/luca}/components/router.coffee +4 -1
  39. data/app/assets/javascripts/luca/components/simple_collection_view.coffee +10 -0
  40. data/app/assets/javascripts/luca/components/table_view.coffee +93 -0
  41. data/app/assets/javascripts/luca/components/table_view_scrollable.coffee +23 -0
  42. data/{src → app/assets/javascripts/luca}/concerns/application_event_bindings.coffee +1 -1
  43. data/app/assets/javascripts/luca/concerns/collection_event_bindings.coffee +47 -0
  44. data/{src → app/assets/javascripts/luca}/concerns/deferrable.coffee +1 -2
  45. data/app/assets/javascripts/luca/concerns/development_tool_helpers.coffee +30 -0
  46. data/{src → app/assets/javascripts/luca}/concerns/dom_helpers.coffee +10 -7
  47. data/{src → app/assets/javascripts/luca}/concerns/enhanced_properties.coffee +0 -0
  48. data/{src → app/assets/javascripts/luca}/concerns/filterable.coffee +39 -20
  49. data/app/assets/javascripts/luca/concerns/form_model_bindings.coffee +20 -0
  50. data/{src → app/assets/javascripts/luca}/concerns/grid_layout.coffee +0 -0
  51. data/{src → app/assets/javascripts/luca}/concerns/loadmaskable.coffee +17 -11
  52. data/{src → app/assets/javascripts/luca}/concerns/local_storage.coffee +0 -0
  53. data/app/assets/javascripts/luca/concerns/modal_view.coffee +63 -0
  54. data/{src → app/assets/javascripts/luca}/concerns/model_presenter.coffee +0 -0
  55. data/{src → app/assets/javascripts/luca}/concerns/paginatable.coffee +6 -20
  56. data/{src → app/assets/javascripts/luca}/concerns/query_collection_bindings.coffee +16 -8
  57. data/app/assets/javascripts/luca/concerns/sortable.coffee +69 -0
  58. data/app/assets/javascripts/luca/concerns/state_model.coffee +58 -0
  59. data/{src → app/assets/javascripts/luca}/concerns/templating.coffee +6 -1
  60. data/app/assets/javascripts/luca/config.coffee +54 -0
  61. data/{src → app/assets/javascripts/luca}/containers/card_view.coffee +23 -8
  62. data/{src/core → app/assets/javascripts/luca/containers}/container.coffee +228 -77
  63. data/app/assets/javascripts/luca/containers/index.coffee +2 -0
  64. data/{src → app/assets/javascripts/luca}/containers/modal_view.coffee +1 -1
  65. data/{src → app/assets/javascripts/luca}/containers/panel_toolbar.coffee +5 -6
  66. data/{src → app/assets/javascripts/luca}/containers/tab_view.coffee +19 -10
  67. data/{src → app/assets/javascripts/luca}/containers/viewport.coffee +11 -12
  68. data/{src → app/assets/javascripts/luca}/core/collection.coffee +37 -23
  69. data/{src/components → app/assets/javascripts/luca/core}/collection_view.coffee +21 -38
  70. data/{src/plugins → app/assets/javascripts/luca/core}/events.coffee +38 -6
  71. data/app/assets/javascripts/luca/core/index.coffee +12 -0
  72. data/{src → app/assets/javascripts/luca}/core/model.coffee +1 -1
  73. data/{src → app/assets/javascripts/luca}/core/observer.coffee +0 -0
  74. data/app/assets/javascripts/luca/core/panel.coffee +124 -0
  75. data/{src/define.coffee → app/assets/javascripts/luca/core/registry/component_definition.coffee} +59 -8
  76. data/{src → app/assets/javascripts/luca/core/registry}/concerns.coffee +0 -0
  77. data/app/assets/javascripts/luca/core/registry/index.coffee +4 -0
  78. data/{src/core → app/assets/javascripts/luca/core/registry}/meta_data.coffee +6 -0
  79. data/{src/core → app/assets/javascripts/luca/core/registry}/registry.coffee +20 -14
  80. data/app/assets/javascripts/luca/core/templates.coffee +51 -0
  81. data/app/assets/javascripts/luca/core/view.coffee +364 -0
  82. data/app/assets/javascripts/luca/dependencies.coffee +9 -0
  83. data/{src/tools → app/assets/javascripts/luca/development}/code_mirror_field.coffee +2 -1
  84. data/app/assets/javascripts/luca/development/code_sync_manager.coffee +126 -0
  85. data/app/assets/javascripts/luca/development/component.coffee +76 -0
  86. data/app/assets/javascripts/luca/development/components.coffee +57 -0
  87. data/{src/tools → app/assets/javascripts/luca/development}/console.coffee +6 -5
  88. data/app/assets/javascripts/luca/development/index.coffee +5 -0
  89. data/{src → app/assets/javascripts/luca}/framework.coffee +16 -99
  90. data/app/assets/javascripts/luca/index.coffee +8 -0
  91. data/{src → app/assets/javascripts/luca}/managers/collection_manager.coffee +12 -8
  92. data/app/assets/javascripts/luca/managers/index.coffee +2 -0
  93. data/app/assets/javascripts/luca/managers/socket_manager.coffee +89 -0
  94. data/{src → app/assets/javascripts/luca}/templates/components/bootstrap_form_controls.jst.ejs +0 -0
  95. data/{src → app/assets/javascripts/luca}/templates/components/collection_loader_view.jst.ejs +0 -0
  96. data/{src → app/assets/javascripts/luca}/templates/components/form_alert.jst.ejs +0 -0
  97. data/{src → app/assets/javascripts/luca}/templates/components/grid_view.jst.ejs +0 -0
  98. data/{src → app/assets/javascripts/luca}/templates/components/grid_view_empty_text.jst.ejs +0 -0
  99. data/{src → app/assets/javascripts/luca}/templates/components/load_mask.jst.ejs +0 -0
  100. data/app/assets/javascripts/luca/templates/components/nav_bar.jst.ejs +19 -0
  101. data/{src → app/assets/javascripts/luca}/templates/components/pagination.jst.ejs +0 -0
  102. data/{src/templates → app/assets/javascripts/luca/templates/components}/table_view.jst.ejs +0 -0
  103. data/{src → app/assets/javascripts/luca}/templates/containers/basic.jst.ejs +0 -0
  104. data/{src → app/assets/javascripts/luca}/templates/containers/tab_selector_container.jst.ejs +0 -0
  105. data/app/assets/javascripts/luca/templates/containers/tab_view.jst.ejs +2 -0
  106. data/{src → app/assets/javascripts/luca}/templates/containers/toolbar_wrapper.jst.ejs +0 -0
  107. data/{src → app/assets/javascripts/luca}/templates/fields/button_field.jst.ejs +0 -0
  108. data/{src → app/assets/javascripts/luca}/templates/fields/button_field_link.jst.ejs +0 -0
  109. data/{src → app/assets/javascripts/luca}/templates/fields/checkbox_array.jst.ejs +0 -0
  110. data/{src → app/assets/javascripts/luca}/templates/fields/checkbox_array_item.jst.ejs +0 -0
  111. data/{src → app/assets/javascripts/luca}/templates/fields/checkbox_field.jst.ejs +0 -0
  112. data/{src → app/assets/javascripts/luca}/templates/fields/file_upload_field.jst.ejs +0 -0
  113. data/{src → app/assets/javascripts/luca}/templates/fields/hidden_field.jst.ejs +0 -0
  114. data/{src → app/assets/javascripts/luca}/templates/fields/select_field.jst.ejs +0 -0
  115. data/{src → app/assets/javascripts/luca}/templates/fields/text_area_field.jst.ejs +0 -0
  116. data/{src → app/assets/javascripts/luca}/templates/fields/text_field.jst.ejs +0 -0
  117. data/app/assets/javascripts/luca/util/deprecations.coffee +18 -0
  118. data/app/assets/javascripts/luca/util/index.coffee +4 -0
  119. data/app/assets/javascripts/luca/util/keybindings.coffee +24 -0
  120. data/app/assets/javascripts/luca/util/logging.coffee +30 -0
  121. data/{src/util.coffee → app/assets/javascripts/luca/util/luca.coffee} +27 -4
  122. data/{src/core → app/assets/javascripts/luca/util}/script_loader.coffee +0 -0
  123. data/{src/stylesheets → app/assets/stylesheets/luca}/components/checkbox_array.scss +0 -0
  124. data/app/assets/stylesheets/luca/components/form_view.scss +7 -0
  125. data/{src/stylesheets → app/assets/stylesheets/luca}/components/grid_view.scss +0 -0
  126. data/{src/stylesheets → app/assets/stylesheets/luca}/components/load_mask.scss +0 -0
  127. data/{vendor/assets/luca-ui/components/grid_view.css → app/assets/stylesheets/luca/components/table_view.scss} +60 -51
  128. data/{src/stylesheets → app/assets/stylesheets/luca}/components/viewport.scss +0 -0
  129. data/app/assets/stylesheets/luca/containers/container.scss +19 -0
  130. data/{src/stylesheets → app/assets/stylesheets/luca}/containers/modal_view.scss +0 -0
  131. data/{src/stylesheets → app/assets/stylesheets/luca}/containers/panels.scss +0 -0
  132. data/{src/stylesheets → app/assets/stylesheets/luca}/containers/tab_view.scss +0 -0
  133. data/{src/stylesheets/tools → app/assets/stylesheets/luca/development}/console.scss +0 -0
  134. data/app/assets/stylesheets/luca/development/index.css +3 -0
  135. data/app/assets/stylesheets/luca/index.css +4 -0
  136. data/{src/stylesheets → app/assets/stylesheets/luca}/normalize.scss +0 -0
  137. data/config.ru +1 -2
  138. data/docs/framework.json +1 -0
  139. data/docs/{application.md → old/application.md} +0 -0
  140. data/docs/{collection.md → old/collection.md} +0 -0
  141. data/docs/{collection_manager.md → old/collection_manager.md} +0 -0
  142. data/docs/{container_philosophy.md → old/container_philosophy.md} +0 -0
  143. data/docs/{event_binding_helpers.md → old/event_binding_helpers.md} +0 -0
  144. data/docs/{method_caching_and_computed_properties.md → old/method_caching_and_computed_properties.md} +0 -0
  145. data/docs/{view.md → old/view.md} +0 -0
  146. data/lib/generators/luca/application/application_generator.rb +12 -8
  147. data/lib/generators/luca/application/templates/controller.rb +0 -2
  148. data/lib/generators/luca/application/templates/index.html.erb +12 -0
  149. data/lib/generators/luca/application/templates/index.html.haml +1 -0
  150. data/lib/generators/luca/application/templates/javascripts/application.coffee +18 -0
  151. data/lib/generators/luca/application/templates/javascripts/collection_manager.coffee +2 -0
  152. data/lib/generators/luca/application/templates/javascripts/config.coffee +3 -0
  153. data/lib/generators/luca/application/templates/javascripts/dependencies.coffee +3 -0
  154. data/lib/generators/luca/application/templates/javascripts/home.jst.ejs +2 -0
  155. data/lib/generators/luca/application/templates/javascripts/index.coffee +15 -0
  156. data/lib/generators/luca/application/templates/javascripts/router.coffee +4 -0
  157. data/lib/guard/luca.rb +84 -0
  158. data/lib/luca.rb +18 -1
  159. data/lib/luca/asset_compiler.rb +117 -0
  160. data/lib/luca/collection.rb +64 -0
  161. data/lib/luca/collection/endpoint.rb +37 -0
  162. data/lib/luca/collection/file_backend.rb +121 -0
  163. data/lib/luca/collection/redis_backend.rb +153 -0
  164. data/lib/luca/compiled_asset.rb +61 -0
  165. data/lib/luca/component_definition.rb +338 -0
  166. data/lib/luca/luca_application.rb +247 -0
  167. data/lib/luca/project.rb +73 -0
  168. data/lib/luca/project_harness.rb +96 -0
  169. data/lib/luca/rails.rb +5 -3
  170. data/lib/luca/rails/engine.rb +12 -0
  171. data/lib/luca/rails/version.rb +1 -2
  172. data/lib/luca/stylesheet.rb +36 -0
  173. data/lib/luca/template.rb +2 -0
  174. data/lib/luca/template_asset.rb +64 -0
  175. data/lib/railties/luca/tasks.rake +38 -0
  176. data/spec/{components → javascripts/components}/application_spec.coffee +0 -0
  177. data/spec/{components → javascripts/components}/collection_loader_view_spec.coffee +0 -0
  178. data/spec/{components → javascripts/components}/collection_view_spec.coffee +0 -0
  179. data/spec/{components → javascripts/components}/controller_spec.coffee +4 -0
  180. data/spec/{components → javascripts/components}/fields/checkbox_array_spec.coffee +0 -0
  181. data/spec/javascripts/components/form_view_spec.coffee +162 -0
  182. data/spec/{components → javascripts/components}/grid_view_spec.coffee +0 -0
  183. data/spec/{components → javascripts/components}/multi_collection_view_spec.coffee +0 -0
  184. data/spec/{components → javascripts/components}/pagination_control_spec.coffee +0 -0
  185. data/spec/{components → javascripts/components}/record_manager_spec.coffee +0 -0
  186. data/spec/{components → javascripts/components}/table_view_spec.coffee +0 -0
  187. data/spec/{components → javascripts/components}/template_spec.coffee +0 -0
  188. data/spec/javascripts/concerns/collection_event_bindings_spec.coffee +15 -0
  189. data/spec/{concerns → javascripts/concerns}/dom_helpers_spec.coffee +2 -2
  190. data/spec/{concerns → javascripts/concerns}/filterable_spec.coffee +4 -4
  191. data/spec/{concerns → javascripts/concerns}/model_presenter_spec.coffee +0 -0
  192. data/spec/{concerns → javascripts/concerns}/paginatable_spec.coffee +0 -0
  193. data/spec/javascripts/concerns/state_model_spec.coffee +55 -0
  194. data/spec/{containers → javascripts/containers}/card_view_spec.coffee +5 -0
  195. data/spec/{containers → javascripts/containers}/modal_view_spec.coffee +0 -0
  196. data/spec/{containers → javascripts/containers}/panel_view_spec.coffee +0 -0
  197. data/spec/{containers → javascripts/containers}/tab_view_spec.coffee +0 -0
  198. data/spec/{containers → javascripts/containers}/viewport_spec.coffee +0 -0
  199. data/spec/{core → javascripts/core}/collection_spec.coffee +25 -0
  200. data/spec/{concerns_spec.coffee → javascripts/core/concerns_spec.coffee} +0 -0
  201. data/spec/{core → javascripts/core}/container_spec.coffee +8 -6
  202. data/spec/{define_spec.coffee → javascripts/core/define_spec.coffee} +0 -0
  203. data/spec/javascripts/core/events_spec.coffee +26 -0
  204. data/spec/{core → javascripts/core}/field_spec.coffee +0 -0
  205. data/spec/{framework_spec.coffee → javascripts/core/framework_spec.coffee} +1 -1
  206. data/spec/{core → javascripts/core}/model_spec.coffee +0 -0
  207. data/spec/{core → javascripts/core}/observer_spec.coffee +0 -0
  208. data/spec/{util_spec.coffee → javascripts/core/util_spec.coffee} +2 -2
  209. data/spec/{core → javascripts/core}/view_spec.coffee +114 -38
  210. data/spec/javascripts/dependencies/index.coffee +3 -0
  211. data/{assets → spec}/javascripts/dependencies/jasmine-html.js +0 -0
  212. data/{assets → spec}/javascripts/dependencies/jasmine.js +0 -0
  213. data/{assets → spec}/javascripts/dependencies/sinon.js +0 -0
  214. data/spec/{helper.coffee → javascripts/helper.coffee} +0 -0
  215. data/spec/{managers → javascripts/managers}/collection_manager_spec.coffee +0 -0
  216. data/spec/{managers → javascripts/managers}/socket_manager_spec.coffee +0 -0
  217. data/spec/lib/component_definition_spec.rb +63 -0
  218. data/spec/lib/input_compiler_spec.rb +9 -0
  219. data/spec/lib/luca_application_spec.rb +30 -0
  220. data/spec/support/fixtures/application.coffee +45 -0
  221. data/spec/support/fixtures/component.coffee +34 -0
  222. data/{assets/javascripts/sandbox/views/inspector/instance_list.coffee → tutorials/component-definitions.md} +0 -0
  223. data/{spec/concerns/state_model_spec.coffee → tutorials/component-definitions/01_intro.md} +0 -0
  224. data/tutorials/component-driven-design.md +140 -0
  225. data/tutorials/structure-of-a-project.md +63 -0
  226. data/vendor/assets/javascripts/backbone-ext.js +21 -0
  227. data/vendor/assets/javascripts/backbone-min.js +38 -0
  228. data/vendor/assets/javascripts/backbone-query.min.js +1 -0
  229. data/vendor/assets/javascripts/bootstrap.min.js +7 -0
  230. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/codemirror-coffeescript.js +0 -0
  231. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/codemirror-css.js +0 -0
  232. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/codemirror-html.js +0 -0
  233. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/codemirror-javascript.js +0 -0
  234. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/codemirror-less.js +0 -0
  235. data/vendor/assets/javascripts/codemirror-ui.js +503 -0
  236. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/codemirror-vim.js +0 -0
  237. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/codemirror.js +0 -0
  238. data/vendor/assets/javascripts/hogan.js +707 -0
  239. data/vendor/assets/javascripts/inflections.js +656 -0
  240. data/vendor/assets/javascripts/jasmine-html.js +190 -0
  241. data/vendor/assets/javascripts/jasmine.js +2476 -0
  242. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/jquery.js +0 -0
  243. data/vendor/assets/javascripts/keymaster.min.js +4 -0
  244. data/vendor/assets/javascripts/luca-dependencies.min.js +6 -0
  245. data/vendor/assets/javascripts/luca-development.min.js +1 -0
  246. data/vendor/assets/javascripts/luca-spec.js +11 -0
  247. data/vendor/assets/javascripts/luca-ui.js +3336 -2561
  248. data/vendor/assets/javascripts/luca-ui.min.js +5 -5
  249. data/vendor/assets/javascripts/luca.full.min.js +10 -0
  250. data/vendor/assets/javascripts/luca.min.js +5 -0
  251. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/modal.js +0 -0
  252. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/modernizr.min.js +0 -0
  253. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/prettify.js +0 -0
  254. data/vendor/assets/javascripts/sinon.js +3469 -0
  255. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/spin-min.js +0 -0
  256. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/underscore-min.js +0 -0
  257. data/vendor/assets/javascripts/underscore-string.min.js +1 -0
  258. data/vendor/assets/stylesheets/bootstrap-responsive.min.css +9 -0
  259. data/vendor/assets/stylesheets/bootstrap.min.css +9 -0
  260. data/{assets → vendor/assets}/stylesheets/codemirror-blackboard.css +0 -0
  261. data/{assets → vendor/assets}/stylesheets/codemirror-monokai.css +0 -0
  262. data/{assets → vendor/assets}/stylesheets/codemirror.css +0 -0
  263. data/{assets → vendor/assets}/stylesheets/jasmine.css +0 -0
  264. data/vendor/assets/stylesheets/luca-components.css +204 -0
  265. data/vendor/assets/stylesheets/luca-development.css +23 -0
  266. data/vendor/assets/stylesheets/luca-ui.css +58 -461
  267. data/views/jasmine.erb +2 -2
  268. metadata +280 -336
  269. data/assets/javascripts/dependencies.coffee +0 -5
  270. data/assets/javascripts/dependencies/backbone-min.js +0 -37
  271. data/assets/javascripts/dependencies/backbone-query.min.js +0 -1
  272. data/assets/javascripts/dependencies/bootstrap.min.js +0 -7
  273. data/assets/javascripts/dependencies/coffee-script.js +0 -12189
  274. data/assets/javascripts/dependencies/underscore-string.min.js +0 -14
  275. data/assets/javascripts/luca-templates.js +0 -1
  276. data/assets/javascripts/luca-ui-base.coffee +0 -1
  277. data/assets/javascripts/luca-ui-bootstrap.js +0 -1
  278. data/assets/javascripts/luca-ui-development-tools.coffee +0 -9
  279. data/assets/javascripts/luca-ui-full.js +0 -3
  280. data/assets/javascripts/luca-ui-spec.coffee +0 -2
  281. data/assets/javascripts/luca-ui.js +0 -3
  282. data/assets/javascripts/luca/index.coffee +0 -1
  283. data/assets/javascripts/sandbox.coffee +0 -7
  284. data/assets/javascripts/sandbox/application.coffee +0 -57
  285. data/assets/javascripts/sandbox/config.coffee +0 -7
  286. data/assets/javascripts/sandbox/router.coffee +0 -24
  287. data/assets/javascripts/sandbox/templates/builder.luca +0 -2
  288. data/assets/javascripts/sandbox/templates/builder/component_list.luca +0 -1
  289. data/assets/javascripts/sandbox/templates/main.luca +0 -53
  290. data/assets/javascripts/sandbox/templates/sandbox.luca +0 -1
  291. data/assets/javascripts/sandbox/templates/sandbox/docs_index.luca +0 -1
  292. data/assets/javascripts/sandbox/templates/sandbox/navigation.luca +0 -8
  293. data/assets/javascripts/sandbox/templates/sandbox/readme.luca +0 -30
  294. data/assets/javascripts/sandbox/views/builder.coffee +0 -133
  295. data/assets/javascripts/sandbox/views/builder/builder_canvas.coffee +0 -3
  296. data/assets/javascripts/sandbox/views/builder/builder_editor.coffee +0 -6
  297. data/assets/javascripts/sandbox/views/builder/component_list.coffee +0 -38
  298. data/assets/javascripts/sandbox/views/builder/project_browser.coffee +0 -14
  299. data/assets/javascripts/sandbox/views/docs_controller.coffee +0 -7
  300. data/assets/javascripts/sandbox/views/inspector.coffee +0 -11
  301. data/assets/javascripts/sandbox/views/inspector/instance_filter.coffee +0 -18
  302. data/assets/javascripts/sandbox/views/top_navigation.coffee +0 -4
  303. data/assets/javascripts/spec-dependencies.coffee +0 -4
  304. data/assets/stylesheets/bootstrap-responsive.min.css +0 -2
  305. data/assets/stylesheets/bootstrap.min.css +0 -727
  306. data/assets/stylesheets/luca-ui-bootstrap.css +0 -4
  307. data/assets/stylesheets/luca-ui-development-tools.css +0 -5
  308. data/assets/stylesheets/luca-ui-full.css +0 -3
  309. data/assets/stylesheets/luca-ui-spec.css +0 -3
  310. data/assets/stylesheets/luca-ui.css +0 -3
  311. data/assets/stylesheets/prettify.css +0 -40
  312. data/assets/stylesheets/sandbox.css +0 -3
  313. data/assets/stylesheets/sandbox/builder.scss +0 -79
  314. data/assets/stylesheets/sandbox/sandbox.scss +0 -18
  315. data/assets/stylesheets/themes/amelia-bootstrap.css +0 -826
  316. data/assets/stylesheets/themes/slate-bootstrap.css +0 -797
  317. data/assets/stylesheets/themes/superhero-bootstrap.css +0 -830
  318. data/lib/generators/luca/application/templates/javascripts/application.js +0 -28
  319. data/lib/generators/luca/application/templates/javascripts/application.js.coffee +0 -20
  320. data/lib/generators/luca/application/templates/javascripts/config.js +0 -15
  321. data/lib/generators/luca/application/templates/javascripts/config.js.coffee +0 -9
  322. data/lib/generators/luca/application/templates/javascripts/dependencies.js +0 -5
  323. data/lib/generators/luca/application/templates/javascripts/dependencies.js.coffee +0 -5
  324. data/lib/generators/luca/application/templates/javascripts/index.js +0 -9
  325. data/lib/generators/luca/application/templates/javascripts/index.js.coffee +0 -9
  326. data/lib/generators/luca/application/templates/javascripts/main.js +0 -8
  327. data/lib/generators/luca/application/templates/javascripts/main.js.coffee +0 -3
  328. data/lib/generators/luca/application/templates/javascripts/main.jst.ejs +0 -1
  329. data/lib/generators/luca/application/templates/javascripts/router.js +0 -12
  330. data/lib/generators/luca/application/templates/javascripts/router.js.coffee +0 -7
  331. data/lib/luca/code_browser.rb +0 -55
  332. data/lib/luca/command_line.rb +0 -69
  333. data/spec/components/form_view_spec.coffee +0 -84
  334. data/spec/containers/column_view_spec.coffee +0 -0
  335. data/spec/containers/split_view_spec.coffee +0 -0
  336. data/src/components/base_toolbar.coffee +0 -17
  337. data/src/components/fields/select_field.coffee +0 -96
  338. data/src/components/fields/text_area_field.coffee +0 -42
  339. data/src/components/form_button_toolbar.coffee +0 -28
  340. data/src/components/form_view.coffee +0 -282
  341. data/src/components/grid_view.coffee +0 -269
  342. data/src/components/index.coffee +0 -1
  343. data/src/components/load_mask.coffee +0 -3
  344. data/src/components/nav_bar.coffee +0 -22
  345. data/src/components/page_controller.coffee +0 -2
  346. data/src/components/table_view.coffee +0 -69
  347. data/src/components/template.coffee +0 -5
  348. data/src/components/toolbar_dialog.coffee +0 -25
  349. data/src/concerns/collection_event_bindings.coffee +0 -26
  350. data/src/concerns/modal_view.coffee +0 -38
  351. data/src/concerns/state_model.coffee +0 -16
  352. data/src/containers/column_view.coffee +0 -42
  353. data/src/containers/page_view.coffee +0 -2
  354. data/src/containers/panel_view.coffee +0 -23
  355. data/src/containers/split_view.coffee +0 -8
  356. data/src/core/core.coffee +0 -0
  357. data/src/core/panel.coffee +0 -118
  358. data/src/core/view.coffee +0 -172
  359. data/src/index.coffee +0 -25
  360. data/src/managers/socket_manager.coffee +0 -54
  361. data/src/plugins/development_tool_helpers.coffee +0 -21
  362. data/src/samples/definition.coffee +0 -49
  363. data/src/stylesheets/base.scss +0 -0
  364. data/src/stylesheets/components/form_view.scss +0 -59
  365. data/src/stylesheets/components/toolbar.scss +0 -0
  366. data/src/stylesheets/containers/container.scss +0 -11
  367. data/src/stylesheets/tools/class_browser.scss +0 -32
  368. data/src/stylesheets/tools/code_editor.scss +0 -24
  369. data/src/stylesheets/tools/component_tester.scss +0 -26
  370. data/src/templates/components/nav_bar.jst.ejs +0 -4
  371. data/src/templates/containers/tab_view.jst.ejs +0 -2
  372. data/src/tools/application_inspector.coffee +0 -2
  373. data/src/tools/code_editor.coffee +0 -258
  374. data/src/tools/coffee_script_editor.coffee +0 -82
  375. data/src/tools/collection_inspector.coffee +0 -4
  376. data/src/tools/collections/components.coffee +0 -59
  377. data/src/tools/collections/instances.coffee +0 -15
  378. data/src/tools/component_tester.coffee +0 -462
  379. data/src/tools/models/components.coffee +0 -25
  380. data/src/tools/models/instance.coffee +0 -2
  381. data/src/tools/templates/component_tester/help.luca +0 -14
  382. data/vendor/assets/javascripts/luca-ui-base.js +0 -5304
  383. data/vendor/assets/javascripts/luca-ui-bootstrap.js +0 -9
  384. data/vendor/assets/javascripts/luca-ui-development-tools.js +0 -18561
  385. data/vendor/assets/javascripts/luca-ui-development-tools.min.js +0 -15
  386. data/vendor/assets/javascripts/luca-ui-full.js +0 -6696
  387. data/vendor/assets/javascripts/luca-ui-full.min.js +0 -9
  388. data/vendor/assets/javascripts/luca-ui-spec.js +0 -6815
  389. data/vendor/assets/javascripts/luca-ui-templates.js +0 -92
  390. data/vendor/assets/luca-ui/base.css +0 -85
  391. data/vendor/assets/luca-ui/components/application.js +0 -91
  392. data/vendor/assets/luca-ui/components/base_toolbar.js +0 -23
  393. data/vendor/assets/luca-ui/components/controller.js +0 -38
  394. data/vendor/assets/luca-ui/components/fields/button_field.js +0 -45
  395. data/vendor/assets/luca-ui/components/fields/checkbox_field.js +0 -43
  396. data/vendor/assets/luca-ui/components/fields/file_upload_field.js +0 -20
  397. data/vendor/assets/luca-ui/components/fields/hidden_field.js +0 -20
  398. data/vendor/assets/luca-ui/components/fields/select_field.js +0 -97
  399. data/vendor/assets/luca-ui/components/fields/text_area_field.js +0 -48
  400. data/vendor/assets/luca-ui/components/fields/text_field.js +0 -46
  401. data/vendor/assets/luca-ui/components/fields/type_ahead_field.js +0 -13
  402. data/vendor/assets/luca-ui/components/form_button_toolbar.js +0 -32
  403. data/vendor/assets/luca-ui/components/form_view.css +0 -32
  404. data/vendor/assets/luca-ui/components/form_view.js +0 -207
  405. data/vendor/assets/luca-ui/components/grid_view.js +0 -202
  406. data/vendor/assets/luca-ui/components/record_manager.js +0 -207
  407. data/vendor/assets/luca-ui/components/router.js +0 -36
  408. data/vendor/assets/luca-ui/components/template.js +0 -26
  409. data/vendor/assets/luca-ui/components/toolbar.css +0 -11
  410. data/vendor/assets/luca-ui/containers/card_view.js +0 -98
  411. data/vendor/assets/luca-ui/containers/column_view.js +0 -52
  412. data/vendor/assets/luca-ui/containers/container.css +0 -3
  413. data/vendor/assets/luca-ui/containers/modal_view.css +0 -0
  414. data/vendor/assets/luca-ui/containers/modal_view.js +0 -87
  415. data/vendor/assets/luca-ui/containers/panel_view.js +0 -34
  416. data/vendor/assets/luca-ui/containers/split_view.js +0 -13
  417. data/vendor/assets/luca-ui/containers/tab_view.css +0 -16
  418. data/vendor/assets/luca-ui/containers/tab_view.js +0 -80
  419. data/vendor/assets/luca-ui/containers/viewport.js +0 -18
  420. data/vendor/assets/luca-ui/core/collection.js +0 -221
  421. data/vendor/assets/luca-ui/core/container.js +0 -205
  422. data/vendor/assets/luca-ui/core/field.js +0 -59
  423. data/vendor/assets/luca-ui/core/observer.js +0 -42
  424. data/vendor/assets/luca-ui/core/view.js +0 -127
  425. data/vendor/assets/luca-ui/framework.js +0 -110
  426. data/vendor/assets/luca-ui/index.js +0 -5
  427. data/vendor/assets/luca-ui/managers/collection_manager.js +0 -98
  428. data/vendor/assets/luca-ui/managers/socket_manager.js +0 -52
  429. data/vendor/assets/luca-ui/modules/deferrable.js +0 -21
  430. data/vendor/assets/luca-ui/modules/local_storage.js +0 -81
  431. data/vendor/assets/luca-ui/normalize.css +0 -359
  432. data/vendor/assets/luca-ui/stylesheets/base.css +0 -85
  433. data/vendor/assets/luca-ui/stylesheets/components/form_view.css +0 -32
  434. data/vendor/assets/luca-ui/stylesheets/components/grid_view.css +0 -76
  435. data/vendor/assets/luca-ui/stylesheets/components/toolbar.css +0 -11
  436. data/vendor/assets/luca-ui/stylesheets/containers/container.css +0 -3
  437. data/vendor/assets/luca-ui/stylesheets/containers/modal_view.css +0 -0
  438. data/vendor/assets/luca-ui/stylesheets/containers/tab_view.css +0 -16
  439. data/vendor/assets/luca-ui/stylesheets/normalize.css +0 -359
  440. data/vendor/assets/luca-ui/templates/components/bootstrap_form_controls.js +0 -4
  441. data/vendor/assets/luca-ui/templates/components/form_view.js +0 -4
  442. data/vendor/assets/luca-ui/templates/components/grid_view.js +0 -4
  443. data/vendor/assets/luca-ui/templates/components/grid_view_empty_text.js +0 -4
  444. data/vendor/assets/luca-ui/templates/containers/basic.js +0 -4
  445. data/vendor/assets/luca-ui/templates/containers/tab_selector_container.js +0 -4
  446. data/vendor/assets/luca-ui/templates/containers/tab_view.js +0 -4
  447. data/vendor/assets/luca-ui/templates/containers/toolbar_wrapper.js +0 -4
  448. data/vendor/assets/luca-ui/templates/fields/button_field.js +0 -4
  449. data/vendor/assets/luca-ui/templates/fields/button_field_link.js +0 -4
  450. data/vendor/assets/luca-ui/templates/fields/checkbox_field.js +0 -4
  451. data/vendor/assets/luca-ui/templates/fields/file_upload_field.js +0 -4
  452. data/vendor/assets/luca-ui/templates/fields/hidden_field.js +0 -4
  453. data/vendor/assets/luca-ui/templates/fields/select_field.js +0 -4
  454. data/vendor/assets/luca-ui/templates/fields/text_area_field.js +0 -4
  455. data/vendor/assets/luca-ui/templates/fields/text_field.js +0 -4
  456. data/vendor/assets/luca-ui/templates/sample/contents.js +0 -4
  457. data/vendor/assets/luca-ui/templates/sample/welcome.js +0 -4
@@ -0,0 +1,57 @@
1
+ textArea = Luca.register "Luca.fields.TextAreaField"
2
+ textArea.extends "Luca.core.Field"
3
+ textArea.defines
4
+ autoBindEventHandlers: true
5
+
6
+ events:
7
+ "blur textarea" : "blur_handler"
8
+ "focus textarea" : "focus_handler"
9
+
10
+ template: 'fields/text_area_field'
11
+
12
+ height: "200px"
13
+ width: "90%"
14
+ keyEventThrottle: 300
15
+
16
+ initialize: (@options={})->
17
+
18
+ @input_id ||= _.uniqueId('field')
19
+ @input_name ||= @name
20
+ @label ||= @name
21
+ @input_class ||= @class
22
+ @input_value ||= ""
23
+ @inputStyles ||= "height:#{ @height };width:#{ @width }"
24
+ @placeHolder ||= ""
25
+
26
+ Luca.core.Field::initialize.apply @, arguments
27
+
28
+ if @enableKeyEvents is true
29
+ @keyup_handler = _.debounce(@keyup_handler, @keyEventThrottle || 10)
30
+
31
+ console.log "Registering Key Events"
32
+ @registerEvent("keyup textarea","keyup_handler")
33
+ @registerEvent("keydown textarea","keyup_handler")
34
+
35
+ setValue: (value)->
36
+ $( @field() ).val(value)
37
+
38
+ getValue: ()->
39
+ $( @field() ).val()
40
+
41
+ field: ()->
42
+ @input = @$("textarea")
43
+
44
+ keyup_handler: (e)->
45
+ # TODO: Should ignore certain keyup events
46
+ # which would not indicate a change
47
+ @trigger "on:change", @, e
48
+ @trigger "on:keyup", @, e
49
+
50
+ blur_handler: (e)->
51
+ @trigger "on:blur", @, e
52
+
53
+ focus_handler: (e)->
54
+ @trigger "on:focus", @, e
55
+
56
+ change_handler: (e)->
57
+ @trigger "on:change", @, e
@@ -2,7 +2,7 @@ textField = Luca.register 'Luca.fields.TextField'
2
2
  textField.extends 'Luca.core.Field'
3
3
 
4
4
  textField.defines
5
- events:
5
+ _events:
6
6
  "blur input" : "blur_handler"
7
7
  "focus input" : "focus_handler"
8
8
  "change input" : "change_handler"
@@ -17,6 +17,9 @@ textField.defines
17
17
 
18
18
  initialize: (@options={})->
19
19
  if @enableKeyEvents
20
+ if @keyEventThrottle
21
+ @keyup_handler = _.debounce(@keyup_handler, @keyEventThrottle)
22
+
20
23
  @registerEvent("keyup input","keyup_handler")
21
24
 
22
25
  @input_id ||= _.uniqueId('field')
@@ -26,11 +29,11 @@ textField.defines
26
29
  @input_value ||= @value || ""
27
30
 
28
31
  if @prepend
29
- @$el.addClass('input-prepend')
32
+ @$el.addClass 'input-prepend'
30
33
  @addOn = @prepend
31
34
 
32
35
  if @append
33
- @$el.addClass('input-append')
36
+ @$el.addClass 'input-append'
34
37
  @addOn = @append
35
38
 
36
39
  @placeHolder ||= ""
@@ -38,6 +41,9 @@ textField.defines
38
41
  Luca.core.Field::initialize.apply @, arguments
39
42
 
40
43
  keyup_handler: (e)->
44
+ # TODO: Should ignore certain keyup events
45
+ # which would not indicate a change
46
+ @trigger "on:change", @, e
41
47
  @trigger "on:keyup", @, e
42
48
 
43
49
  blur_handler: (e)->
@@ -0,0 +1,421 @@
1
+ # The FormView component is a special container which provides functionality
2
+ # around the components inside which extend from the Luca.core.Field class.
3
+ #
4
+ # The FormView component integrates well with Luca.Models and can control
5
+ # the attributes on that model, respond to validations, and submit changes
6
+ # to an API.
7
+ formView = Luca.register "Luca.components.FormView"
8
+
9
+ formView.extends "Luca.Container"
10
+
11
+ formView.mixesIn "LoadMaskable",
12
+ "FormModelBindings"
13
+
14
+ formView.triggers "before:submit",
15
+ "before:reset",
16
+ "before:load",
17
+ "before:load:new",
18
+ "before:load:existing",
19
+ "after:submit",
20
+ "after:reset",
21
+ "after:load",
22
+ "after:load:new",
23
+ "after:load:existing",
24
+ "after:submit:success",
25
+ "after:submit:fatal_error",
26
+ "after:submit:error",
27
+ "state:change:dirty"
28
+
29
+
30
+
31
+ formView.publicConfiguration
32
+ # track dirty state will bind to change events
33
+ # on all of the underlying fields, and set a
34
+ # flag whenever one of them changes
35
+ trackDirtyState: false
36
+
37
+ # don't setup two way binding to the model
38
+ trackModelChanges: false
39
+
40
+ # should the label display above, or to the
41
+ # side of the fields
42
+ labelAlign: undefined
43
+
44
+ # specifying this class gives you the ability
45
+ # to layout the nested fields accordingly.
46
+ fieldLayoutClass: undefined
47
+
48
+ # should this form have a legend?
49
+ legend: ""
50
+
51
+ # available options are true, false, "top", "bottom", or "both"
52
+ # the component configuration for the toolbar can be controlled
53
+ # by specifying a name of a property that contains a valid
54
+ # component reference ( either hash w/ type reference )
55
+ toolbar: true
56
+
57
+ # the name of the property which contains the configuration
58
+ # for the buttons that will go in this toolbar. Specify
59
+ # a string so it can be lazily evaluated at initialization.
60
+ toolbarConfig: undefined
61
+
62
+ # the default toolbar definition that will be created if
63
+ # the form is configured to have a toolbar on it. this value
64
+ # will be resolved at initialization, so pass a string identifying
65
+ # an object in memory.
66
+ defaultToolbar: "Luca.components.FormView.defaultToolbar"
67
+
68
+ # if this form will be submitting values to a RESTful API and you
69
+ # want to show a loading indicator or progress bar, configure the
70
+ # @loadMask property.
71
+ loadMask: true
72
+
73
+ # Applies the twitter bootstrap well class to this form.
74
+ # @$el.addClass('well') if @well
75
+ well: false
76
+
77
+ # Applies the twitter bootstrap form-search class to this form.
78
+ # @$el.addClass('form-search') if @searchForm
79
+ searchForm: false
80
+
81
+ # Applies the twitter bootstrap horizontal form class to this form.
82
+ # @$el.addClass('form-horizontal') if @horizontalForm
83
+ horizontalForm: false
84
+
85
+ # Applies the twitter bootstrap inline form class to this form.
86
+ # @$el.addClass('form-inline') if @inlineForm
87
+ inlineForm: false
88
+
89
+ # if we should always include blank values
90
+ # regardless of how the field is configured
91
+ includeBlankValues: undefined
92
+
93
+ formView.privateConfiguration
94
+ tagName: 'form'
95
+
96
+ # These events will get registered on the component
97
+ # but still leave the @events property open to extend
98
+ # for any component which inherits from us.
99
+ _events:
100
+ "click .submit-button" : "submitHandler"
101
+ "click .reset-button" : "resetHandler"
102
+
103
+ bodyClassName: "form-view-body"
104
+
105
+ stateful:
106
+ dirty: false
107
+ currentModel: undefined
108
+
109
+ formView.privateMethods
110
+ initialize: (@options={})->
111
+ form = @
112
+
113
+ @loadMask = Luca.config.enableBoostrap unless @loadMask?
114
+
115
+ Luca.Container::initialize.apply @, arguments
116
+
117
+ @components ||= @fields
118
+
119
+ _.bindAll @, "submitHandler", "resetHandler", "renderToolbars"
120
+
121
+ # have our events be internal to the view, and not
122
+ # part of the normal @events chain, so they can be inherited
123
+ for eventId, handler of @_events
124
+ @registerEvent(eventId, handler)
125
+
126
+ if @trackDirtyState is true
127
+ @on "after:components", ()->
128
+ for field in @getFields()
129
+ field.on "on:change", @onFieldChange, form
130
+ , form
131
+
132
+ @setupHooks( @hooks )
133
+
134
+ @applyStyleClasses()
135
+
136
+ Luca.components.FormView.setupToolbar.call(@)
137
+
138
+ onFieldChange: (field, e)->
139
+ @trigger "field:change", field, e
140
+ @state.set('dirty', true)
141
+
142
+ getDefaultToolbar: ()->
143
+ config = @toolbarConfig || @defaultToolbar
144
+ Luca.util.resolve( Luca.util.read(config) )
145
+
146
+ applyStyleClasses: ()->
147
+ if Luca.config.enableBoostrap
148
+ @applyBootstrapStyleClasses()
149
+
150
+ @$el.addClass( "label-align-#{ @labelAlign }") if @labelAlign
151
+ @$el.addClass( @fieldLayoutClass ) if @fieldLayoutClass
152
+
153
+ applyBootstrapStyleClasses: ()->
154
+ @inlineForm = true if @labelAlign is "left"
155
+
156
+ @$el.addClass('well') if @well
157
+ @$el.addClass('form-search') if @searchForm
158
+ @$el.addClass('form-horizontal') if @horizontalForm
159
+ @$el.addClass('form-inline') if @inlineForm
160
+
161
+ resetHandler: (e)->
162
+ me = my = $( e?.target )
163
+ if @beforeReset?
164
+ result = @beforeReset()
165
+ return if result is false
166
+
167
+ @reset()
168
+ @trigger "after:reset", @
169
+
170
+ submitHandler: (e)->
171
+ if @beforeSubmit?
172
+ result = @beforeSubmit()
173
+ return if result is false
174
+ else
175
+ @trigger "before:submit", @
176
+
177
+ @trigger "enable:loadmask", @ if @loadMask is true
178
+ @submit() if @hasModel()
179
+
180
+ afterComponents: ()->
181
+ Luca.Container::afterComponents?.apply(@, arguments)
182
+
183
+ form = @
184
+ @eachField (field)->
185
+ field.getForm = ()=> form
186
+ field.getModel = ()=> form.currentModel()
187
+
188
+ eachField: (iterator)->
189
+ _( @getFields() ).map( iterator )
190
+
191
+ getField: (name)->
192
+ passOne = _( @getFields('name', name) ).first()
193
+ return passOne if passOne?
194
+
195
+ _( @getFields('input_name', name) ).first()
196
+
197
+ getFields: (attr,value)->
198
+ fields = @selectByAttribute("isField", true, true)
199
+
200
+ if attr? and value?
201
+ fields = _(fields).select (field)->
202
+ property = field[ attr ]
203
+ property = property.call(field) if _.isFunction(property)
204
+ property is value
205
+
206
+ fields
207
+
208
+ loadModel: (model)->
209
+ form = @
210
+ fields = @getFields()
211
+
212
+ @state.set('dirty', false)
213
+
214
+ @trigger "before:load", @, model
215
+
216
+ if model
217
+ model.beforeFormLoad?.apply(model, @)
218
+ event = "before:load:#{ (if model.isNew() then "new" else "existing")}"
219
+ @trigger event, @, model
220
+
221
+ @state.set('currentModel', model)
222
+
223
+ @setValues(model || {}, silent: true)
224
+
225
+ @trigger "after:load", @, model
226
+
227
+ if model
228
+ @trigger "after:load:#{ (if model.isNew() then "new" else "existing")}", @, model
229
+
230
+ reset: ()->
231
+ @loadModel( @state.get('currentModel') )
232
+
233
+ clear: ()->
234
+ @state.set('currentModel', @defaultModel?() )
235
+
236
+ _( @getFields() ).each (field)=>
237
+ try
238
+ field.setValue('')
239
+ catch e
240
+ console.log "Error Clearing", @, field
241
+
242
+ isDirty: ()->
243
+ !!@state.get('dirty')
244
+
245
+ # set the values on the form
246
+ # without syncing
247
+ setValues: (source, options={})->
248
+ source ||= @currentModel()
249
+ fields = @getFields()
250
+
251
+ _( fields ).each (field) =>
252
+ field_name = field.input_name || field.name
253
+
254
+ if source?[field_name]
255
+ value = Luca.util.read( source[field_name] )
256
+
257
+ if !value and Luca.isBackboneModel(source)
258
+ value = source.get(field_name)
259
+
260
+ field?.setValue( value ) unless field.readOnly is true
261
+
262
+ @applyFormValuesToModel() unless options.silent? is true
263
+
264
+ # Public: returns a hash of values for the form fields in this view.
265
+ #
266
+ # options - An options Hash to control the behavior of values returned (default: {}):
267
+ # reject_blank: don't include values which are blank (default: true)
268
+ # skip_buttons: don't include button fields (default: true)
269
+ # blanks: an inverse alias for reject_blank (default: false)
270
+ getValues: (options={})->
271
+ options.reject_blank = true unless options.reject_blank?
272
+ options.skip_buttons = true unless options.skip_buttons?
273
+ options.reject_blank = true if options.blanks is false
274
+
275
+ values = _( @getFields() ).inject (memo,field)=>
276
+ value = field.getValue()
277
+ key = field.input_name || field.name
278
+
279
+ valueIsBlank = !!(_.str.isBlank( value ) || _.isUndefined( value ))
280
+
281
+ allowBlankValues = not options.reject_blank and not field.send_blanks
282
+ allowBlankValues = true if field.includeBlank is true or @includeBlankValues is true
283
+
284
+
285
+ if options.debug
286
+ console.log "#{ key } Options", options, "Value", value, "Value Is Blank?", valueIsBlank, "Allow Blanks?", allowBlankValues
287
+
288
+ if options.skip_buttons and field.isButton
289
+ skip = true
290
+ else
291
+ if valueIsBlank and allowBlankValues is false
292
+ skip = true
293
+
294
+ if field.input_name is "id" and valueIsBlank is true
295
+ skip = true
296
+
297
+ if options.debug
298
+ console.log "Skip is true on #{ key }"
299
+
300
+ if skip isnt true
301
+ memo[ key ] = value
302
+
303
+ memo
304
+
305
+ , (options.defaults || {})
306
+
307
+ values
308
+
309
+ removeErrors: ()->
310
+ @$('.alert.alert-error').remove()
311
+ @$el.removeClass('error')
312
+
313
+ for field in @getFields()
314
+ field.clearErrors()
315
+
316
+ displayErrors: (errors)->
317
+ has_errors = false
318
+ for field in @getFields()
319
+ for field_name, field_errors of errors when field_name is field.input_name
320
+ field.displayErrors(field_errors)
321
+ has_errors = true
322
+
323
+ if has_errors
324
+ @$el.addClass('error')
325
+
326
+ displayValidationErrorsMessage: ()->
327
+ @errorMessage('Please fix the fields with errors')
328
+
329
+ submit_success_handler: (model, response, xhr)->
330
+ @trigger "after:submit", @, model, response
331
+ @trigger "disable:loadmask", @ if @loadMask is true
332
+
333
+ if response and response?.success is true
334
+ @trigger "after:submit:success", @, model, response
335
+ else
336
+ @trigger "after:submit:error", @, model, response
337
+
338
+ submit_fatal_error_handler: (model, response, xhr)->
339
+ @trigger "after:submit", @, model, response
340
+ @trigger "after:submit:fatal_error", @, model, response
341
+
342
+ try
343
+ json = $.parseJSON(response.responseText)
344
+ if !json.success && json.errors?
345
+ @displayValidationErrorsMessage()
346
+ @displayErrors(json.errors)
347
+
348
+ submit: (save=true, saveOptions={})->
349
+ _.bindAll @, "submit_success_handler", "submit_fatal_error_handler"
350
+
351
+ saveOptions.success ||= @submit_success_handler
352
+ saveOptions.error ||= @submit_fatal_error_handler
353
+
354
+ @removeErrors()
355
+ @applyFormValuesToModel()
356
+ return unless save
357
+ @currentModel()?.save( @currentModel().toJSON(), saveOptions )
358
+
359
+ hasModel: ()->
360
+ @currentModel()?
361
+
362
+ currentModel: (options={})->
363
+ if options is true or options?.refresh is true
364
+ @applyFormValuesToModel()
365
+
366
+ @state.get('currentModel')
367
+
368
+ applyFormValuesToModel: (options)->
369
+ @currentModel()?.set( @getValues(), options )
370
+
371
+ setLegend: (@legend)->
372
+ $('fieldset legend', @el).first().html(@legend)
373
+
374
+ flash: (message)->
375
+ if @$('.toolbar-container.top').length > 0
376
+ @$('.toolbar-container.top').after(message)
377
+ else
378
+ @$bodyEl().prepend(message)
379
+
380
+ successFlashDelay: 1500
381
+
382
+ successMessage: (message)->
383
+ @$('.alert.alert-success').remove()
384
+ @flash Luca.template("components/form_alert", className:"alert alert-success", message: message)
385
+ _.delay ()=>
386
+ @$('.alert.alert-success').fadeOut()
387
+ , @successFlashDelay || 0
388
+
389
+ errorMessage: (message)->
390
+ @$('.alert.alert-error').remove()
391
+ @flash Luca.template("components/form_alert", className:"alert alert-error", message: message)
392
+
393
+ formView.classInterface
394
+ setupToolbar: ()->
395
+ if @toolbar isnt false and (not @topToolbar and not @bottomToolbar)
396
+ if @toolbar is "both" or @toolbar is "top"
397
+ @topToolbar = _.clone( @getDefaultToolbar() )
398
+
399
+ unless @toolbar is "top"
400
+ @bottomToolbar = _.clone( @getDefaultToolbar() )
401
+
402
+ defaultToolbar:
403
+ buttons:[
404
+ icon:"remove-sign"
405
+ label: "Reset"
406
+ eventId: "click:reset"
407
+ className:"reset-button"
408
+ align: 'right'
409
+ ,
410
+ icon:"ok-sign"
411
+ white: true
412
+ label: "Save Changes"
413
+ eventId: "click:submit"
414
+ color: "success"
415
+ className: 'submit-button'
416
+ align: 'right'
417
+ ]
418
+
419
+ formView.defines
420
+ version: 2
421
+