luca 0.9.9 → 0.9.42

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 (604) hide show
  1. data/CHANGELOG +9 -153
  2. data/Gemfile +1 -10
  3. data/Gemfile.lock +40 -113
  4. data/Guardfile +25 -3
  5. data/README.md +57 -54
  6. data/ROADMAP +32 -15
  7. data/Rakefile +75 -24
  8. data/app.rb +46 -12
  9. data/{app/assets → assets}/images/glyphicons-halflings-white.png +0 -0
  10. data/{app/assets → assets}/images/glyphicons-halflings.png +0 -0
  11. data/assets/javascripts/dependencies/backbone-min.js +37 -0
  12. data/assets/javascripts/dependencies/backbone-query.min.js +1 -0
  13. data/assets/javascripts/dependencies/bootstrap.min.js +7 -0
  14. data/{vendor/assets/javascripts → assets/javascripts/dependencies}/codemirror-coffeescript.js +0 -0
  15. data/{vendor/assets/javascripts → assets/javascripts/dependencies}/codemirror-css.js +0 -0
  16. data/{vendor/assets/javascripts → assets/javascripts/dependencies}/codemirror-html.js +0 -0
  17. data/{vendor/assets/javascripts → assets/javascripts/dependencies}/codemirror-javascript.js +0 -0
  18. data/{vendor/assets/javascripts → assets/javascripts/dependencies}/codemirror-less.js +0 -0
  19. data/{vendor/assets/javascripts → assets/javascripts/dependencies}/codemirror-vim.js +0 -0
  20. data/{vendor/assets/javascripts → assets/javascripts/dependencies}/codemirror.js +0 -0
  21. data/assets/javascripts/dependencies/coffee-script.js +12189 -0
  22. data/{spec → assets}/javascripts/dependencies/jasmine-html.js +0 -0
  23. data/{spec → assets}/javascripts/dependencies/jasmine.js +0 -0
  24. data/assets/javascripts/dependencies/jquery.js +4 -0
  25. data/{vendor/assets/javascripts → assets/javascripts/dependencies}/modal.js +0 -0
  26. data/{vendor/assets/javascripts → assets/javascripts/dependencies}/modernizr.min.js +0 -0
  27. data/{vendor/assets/javascripts → assets/javascripts/dependencies}/prettify.js +0 -0
  28. data/{spec → assets}/javascripts/dependencies/sinon.js +0 -0
  29. data/{vendor/assets/javascripts → assets/javascripts/dependencies}/spin-min.js +0 -0
  30. data/assets/javascripts/dependencies/underscore-min.js +31 -0
  31. data/assets/javascripts/dependencies/underscore-string.min.js +14 -0
  32. data/assets/javascripts/dependencies.coffee +5 -0
  33. data/assets/javascripts/luca/index.coffee +1 -0
  34. data/assets/javascripts/luca-templates.js +1 -0
  35. data/assets/javascripts/luca-ui-base.coffee +1 -0
  36. data/assets/javascripts/luca-ui-bootstrap.js +1 -0
  37. data/assets/javascripts/luca-ui-development-tools.coffee +9 -0
  38. data/assets/javascripts/luca-ui-full.js +3 -0
  39. data/assets/javascripts/luca-ui-spec.coffee +2 -0
  40. data/assets/javascripts/luca-ui.js +3 -0
  41. data/assets/javascripts/sandbox/application.coffee +57 -0
  42. data/assets/javascripts/sandbox/config.coffee +7 -0
  43. data/assets/javascripts/sandbox/router.coffee +24 -0
  44. data/assets/javascripts/sandbox/templates/builder/component_list.luca +1 -0
  45. data/assets/javascripts/sandbox/templates/builder.luca +2 -0
  46. data/assets/javascripts/sandbox/templates/main.luca +53 -0
  47. data/assets/javascripts/sandbox/templates/sandbox/docs_index.luca +1 -0
  48. data/assets/javascripts/sandbox/templates/sandbox/navigation.luca +8 -0
  49. data/assets/javascripts/sandbox/templates/sandbox/readme.luca +30 -0
  50. data/assets/javascripts/sandbox/templates/sandbox.luca +1 -0
  51. data/assets/javascripts/sandbox/views/builder/builder_canvas.coffee +3 -0
  52. data/assets/javascripts/sandbox/views/builder/builder_editor.coffee +6 -0
  53. data/assets/javascripts/sandbox/views/builder/component_list.coffee +38 -0
  54. data/assets/javascripts/sandbox/views/builder/project_browser.coffee +14 -0
  55. data/assets/javascripts/sandbox/views/builder.coffee +133 -0
  56. data/assets/javascripts/sandbox/views/docs_controller.coffee +7 -0
  57. data/assets/javascripts/sandbox/views/inspector/instance_filter.coffee +18 -0
  58. data/{app/assets/stylesheets/luca/containers/modal_view.scss → assets/javascripts/sandbox/views/inspector/instance_list.coffee} +0 -0
  59. data/assets/javascripts/sandbox/views/inspector.coffee +11 -0
  60. data/assets/javascripts/sandbox/views/top_navigation.coffee +4 -0
  61. data/assets/javascripts/sandbox.coffee +7 -0
  62. data/assets/javascripts/spec-dependencies.coffee +4 -0
  63. data/assets/stylesheets/bootstrap-responsive.min.css +2 -0
  64. data/assets/stylesheets/bootstrap.min.css +727 -0
  65. data/{vendor/assets → assets}/stylesheets/codemirror-blackboard.css +0 -0
  66. data/{vendor/assets → assets}/stylesheets/codemirror-monokai.css +0 -0
  67. data/{vendor/assets → assets}/stylesheets/codemirror.css +0 -0
  68. data/{vendor/assets → assets}/stylesheets/jasmine.css +0 -0
  69. data/assets/stylesheets/luca-ui-bootstrap.css +4 -0
  70. data/assets/stylesheets/luca-ui-development-tools.css +5 -0
  71. data/assets/stylesheets/luca-ui-full.css +3 -0
  72. data/assets/stylesheets/luca-ui-spec.css +3 -0
  73. data/assets/stylesheets/luca-ui.css +3 -0
  74. data/assets/stylesheets/prettify.css +40 -0
  75. data/assets/stylesheets/sandbox/builder.scss +79 -0
  76. data/assets/stylesheets/sandbox/sandbox.scss +18 -0
  77. data/assets/stylesheets/sandbox.css +3 -0
  78. data/assets/stylesheets/themes/amelia-bootstrap.css +826 -0
  79. data/assets/stylesheets/themes/slate-bootstrap.css +797 -0
  80. data/assets/stylesheets/themes/superhero-bootstrap.css +830 -0
  81. data/config.ru +2 -1
  82. data/docs/{old/application.md → application.md} +0 -0
  83. data/docs/{old/collection.md → collection.md} +0 -0
  84. data/docs/{old/collection_manager.md → collection_manager.md} +0 -0
  85. data/docs/{old/container_philosophy.md → container_philosophy.md} +0 -0
  86. data/docs/{old/event_binding_helpers.md → event_binding_helpers.md} +0 -0
  87. data/docs/{old/method_caching_and_computed_properties.md → method_caching_and_computed_properties.md} +0 -0
  88. data/docs/{old/view.md → view.md} +0 -0
  89. data/lib/luca/code_browser.rb +55 -0
  90. data/lib/luca/command_line.rb +69 -0
  91. data/lib/luca/rails/engine.rb +0 -12
  92. data/lib/luca/rails/version.rb +2 -1
  93. data/lib/luca/rails.rb +3 -5
  94. data/lib/luca/template.rb +0 -2
  95. data/lib/luca.rb +1 -25
  96. data/luca.gemspec +7 -16
  97. data/site/assets/bootstrap.min.js +7 -0
  98. data/site/assets/dependencies.js +94 -0
  99. data/site/assets/glyphicons-halflings-white.png +0 -0
  100. data/site/assets/glyphicons-halflings.png +0 -0
  101. data/site/assets/luca-ui-bootstrap.css +1331 -0
  102. data/site/assets/luca-ui-bootstrap.js +9 -0
  103. data/site/assets/luca-ui-development-tools.css +234 -0
  104. data/site/assets/luca-ui-development-tools.js +18561 -0
  105. data/site/assets/luca-ui-development-tools.min.js +15 -0
  106. data/site/assets/luca-ui-full.min.js +8 -0
  107. data/site/assets/luca-ui.min.js +4 -0
  108. data/site/assets/sandbox.css +62 -0
  109. data/site/assets/sandbox.js +469 -0
  110. data/site/docs/application.html +41 -0
  111. data/site/docs/caching.html +43 -0
  112. data/site/docs/collection.html +75 -0
  113. data/site/docs/collection_manager.html +71 -0
  114. data/site/docs/containers.html +118 -0
  115. data/site/docs/events.html +153 -0
  116. data/site/docs/view.html +128 -0
  117. data/site/img/glyphicons-halflings-white.png +0 -0
  118. data/site/img/glyphicons-halflings.png +0 -0
  119. data/site/index.html +20 -0
  120. data/site/source-map.js +1 -0
  121. data/spec/{javascripts/components → components}/application_spec.coffee +0 -0
  122. data/spec/{javascripts/components → components}/collection_loader_view_spec.coffee +0 -0
  123. data/{site/source/app/assets/javascripts/docs/lib/util.coffee → spec/components/controller_spec.coffee} +0 -0
  124. data/spec/{javascripts/components → components}/fields/checkbox_array_spec.coffee +0 -0
  125. data/spec/components/form_view_spec.coffee +80 -0
  126. data/spec/{javascripts/components → components}/grid_view_spec.coffee +0 -0
  127. data/spec/{javascripts/components → components}/record_manager_spec.coffee +0 -0
  128. data/spec/{javascripts/components → components}/template_spec.coffee +0 -0
  129. data/spec/containers/card_view_spec.coffee +50 -0
  130. data/{site/source/app/assets/javascripts/docs/views/components/code_editor/index.coffee → spec/containers/column_view_spec.coffee} +0 -0
  131. data/spec/{javascripts/containers → containers}/modal_view_spec.coffee +0 -0
  132. data/spec/{javascripts/containers → containers}/panel_view_spec.coffee +0 -0
  133. data/spec/{javascripts/components/pagination_control_spec.coffee → containers/split_view_spec.coffee} +0 -0
  134. data/spec/{javascripts/containers → containers}/tab_view_spec.coffee +0 -0
  135. data/spec/{javascripts/containers → containers}/viewport_spec.coffee +0 -0
  136. data/spec/{javascripts/core → core}/collection_spec.coffee +1 -26
  137. data/spec/core/container_spec.coffee +66 -0
  138. data/spec/{javascripts/concerns/paginatable_spec.coffee → core/field_spec.coffee} +0 -0
  139. data/spec/{javascripts/core → core}/model_spec.coffee +3 -26
  140. data/spec/{javascripts/core → core}/observer_spec.coffee +0 -0
  141. data/spec/{javascripts/core → core}/view_spec.coffee +38 -114
  142. data/spec/{javascripts/core/framework_spec.coffee → framework_spec.coffee} +2 -31
  143. data/spec/{javascripts/helper.coffee → helper.coffee} +0 -0
  144. data/spec/{javascripts/managers → managers}/collection_manager_spec.coffee +0 -0
  145. data/spec/{javascripts/managers → managers}/socket_manager_spec.coffee +0 -0
  146. data/src/components/application.coffee +318 -0
  147. data/src/components/base_toolbar.coffee +15 -0
  148. data/{app/assets/javascripts/luca → src}/components/collection_loader_view.coffee +1 -3
  149. data/src/components/collection_view.coffee +131 -0
  150. data/src/components/controller.coffee +63 -0
  151. data/src/components/fields/button_field.coffee +38 -0
  152. data/{app/assets/javascripts/luca → src}/components/fields/checkbox_array.coffee +7 -18
  153. data/{app/assets/javascripts/luca → src}/components/fields/checkbox_field.coffee +10 -19
  154. data/{app/assets/javascripts/luca → src}/components/fields/file_upload_field.coffee +4 -5
  155. data/src/components/fields/hidden_field.coffee +12 -0
  156. data/src/components/fields/label_field.coffee +14 -0
  157. data/src/components/fields/select_field.coffee +97 -0
  158. data/src/components/fields/text_area_field.coffee +40 -0
  159. data/{app/assets/javascripts/luca → src}/components/fields/text_field.coffee +5 -16
  160. data/src/components/fields/type_ahead_field.coffee +22 -0
  161. data/src/components/form_button_toolbar.coffee +25 -0
  162. data/src/components/form_view.coffee +275 -0
  163. data/src/components/grid_view.coffee +269 -0
  164. data/src/components/index.coffee +1 -0
  165. data/src/components/load_mask.coffee +3 -0
  166. data/src/components/nav_bar.coffee +22 -0
  167. data/src/components/page_controller.coffee +2 -0
  168. data/{app/assets/javascripts/luca → src}/components/record_manager.coffee +0 -0
  169. data/{app/assets/javascripts/luca → src}/components/router.coffee +1 -6
  170. data/src/components/table_view.coffee +53 -0
  171. data/src/components/template.coffee +5 -0
  172. data/src/components/toolbar_dialog.coffee +25 -0
  173. data/src/containers/card_view.coffee +93 -0
  174. data/src/containers/column_view.coffee +42 -0
  175. data/{app/assets/javascripts/luca → src}/containers/modal_view.coffee +9 -9
  176. data/src/containers/page_view.coffee +2 -0
  177. data/{app/assets/javascripts/luca → src}/containers/panel_toolbar.coffee +84 -89
  178. data/src/containers/panel_view.coffee +23 -0
  179. data/src/containers/split_view.coffee +8 -0
  180. data/{app/assets/javascripts/luca → src}/containers/tab_view.coffee +21 -27
  181. data/{app/assets/javascripts/luca → src}/containers/viewport.coffee +18 -14
  182. data/{app/assets/javascripts/luca → src}/core/collection.coffee +51 -97
  183. data/src/core/container.coffee +374 -0
  184. data/{tutorials/component-definitions.md → src/core/core.coffee} +0 -0
  185. data/src/core/field.coffee +79 -0
  186. data/src/core/model.coffee +43 -0
  187. data/{app/assets/javascripts/luca → src}/core/observer.coffee +0 -0
  188. data/src/core/panel.coffee +118 -0
  189. data/{app/assets/javascripts/luca/core/registry → src/core}/registry.coffee +43 -63
  190. data/{app/assets/javascripts/luca/util → src/core}/script_loader.coffee +0 -0
  191. data/src/core/view.coffee +264 -0
  192. data/src/define.coffee +110 -0
  193. data/{app/assets/javascripts/luca → src}/framework.coffee +103 -98
  194. data/src/index.coffee +23 -0
  195. data/{app/assets/javascripts/luca → src}/managers/collection_manager.coffee +13 -37
  196. data/src/managers/socket_manager.coffee +54 -0
  197. data/{app/assets/javascripts/luca/concerns → src/modules}/deferrable.coffee +4 -5
  198. data/src/modules/grid_layout.coffee +3 -0
  199. data/{app/assets/javascripts/luca/concerns/loadmaskable.coffee → src/modules/load_mask.coffee} +11 -23
  200. data/{app/assets/javascripts/luca/concerns → src/modules}/local_storage.coffee +0 -0
  201. data/src/plugins/development_tool_helpers.coffee +21 -0
  202. data/src/plugins/events.coffee +54 -0
  203. data/src/samples/definition.coffee +49 -0
  204. data/{tutorials/component-definitions/01_intro.md → src/stylesheets/base.scss} +0 -0
  205. data/{app/assets/stylesheets/luca → src/stylesheets}/components/checkbox_array.scss +1 -1
  206. data/src/stylesheets/components/form_view.scss +59 -0
  207. data/{app/assets/stylesheets/luca → src/stylesheets}/components/grid_view.scss +0 -0
  208. data/{app/assets/stylesheets/luca → src/stylesheets}/components/load_mask.scss +0 -0
  209. data/src/stylesheets/components/toolbar.scss +0 -0
  210. data/{app/assets/stylesheets/luca → src/stylesheets}/components/viewport.scss +4 -1
  211. data/src/stylesheets/containers/container.scss +16 -0
  212. data/src/stylesheets/containers/modal_view.scss +0 -0
  213. data/{app/assets/stylesheets/luca → src/stylesheets}/containers/panels.scss +0 -0
  214. data/{app/assets/stylesheets/luca → src/stylesheets}/containers/tab_view.scss +5 -5
  215. data/{app/assets/stylesheets/luca → src/stylesheets}/normalize.scss +0 -0
  216. data/src/stylesheets/tools/class_browser.scss +32 -0
  217. data/src/stylesheets/tools/code_editor.scss +24 -0
  218. data/src/stylesheets/tools/component_tester.scss +26 -0
  219. data/{app/assets/stylesheets/luca/development → src/stylesheets/tools}/console.scss +0 -0
  220. data/src/templates/components/bootstrap_form_controls.luca +7 -0
  221. data/src/templates/components/collection_loader_view.luca +5 -0
  222. data/src/templates/components/form_alert +0 -0
  223. data/src/templates/components/form_alert.luca +3 -0
  224. data/src/templates/components/grid_view.luca +7 -0
  225. data/src/templates/components/grid_view_empty_text.luca +3 -0
  226. data/src/templates/components/load_mask.luca +3 -0
  227. data/src/templates/components/nav_bar.luca +2 -0
  228. data/src/templates/containers/basic.luca +1 -0
  229. data/src/templates/containers/tab_selector_container.luca +8 -0
  230. data/src/templates/containers/tab_view.luca +2 -0
  231. data/src/templates/containers/toolbar_wrapper.luca +1 -0
  232. data/src/templates/fields/button_field.luca +2 -0
  233. data/src/templates/fields/button_field_link.luca +5 -0
  234. data/src/templates/fields/checkbox_array.luca +4 -0
  235. data/src/templates/fields/checkbox_array_item.luca +4 -0
  236. data/src/templates/fields/checkbox_field.luca +9 -0
  237. data/src/templates/fields/file_upload_field.luca +8 -0
  238. data/src/templates/fields/hidden_field.luca +1 -0
  239. data/src/templates/fields/select_field.luca +8 -0
  240. data/src/templates/fields/text_area_field.luca +8 -0
  241. data/src/templates/fields/text_field.luca +17 -0
  242. data/src/templates/sample/contents.luca +1 -0
  243. data/src/templates/sample/welcome.luca +1 -0
  244. data/src/templates/table_view.luca +4 -0
  245. data/src/tools/application_inspector.coffee +2 -0
  246. data/src/tools/code_editor.coffee +258 -0
  247. data/{app/assets/javascripts/luca/development → src/tools}/code_mirror_field.coffee +1 -2
  248. data/src/tools/coffee_script_editor.coffee +82 -0
  249. data/src/tools/collection_inspector.coffee +4 -0
  250. data/src/tools/collections/components.coffee +59 -0
  251. data/src/tools/collections/instances.coffee +15 -0
  252. data/src/tools/component_tester.coffee +462 -0
  253. data/{app/assets/javascripts/luca/development → src/tools}/console.coffee +24 -55
  254. data/src/tools/models/components.coffee +25 -0
  255. data/src/tools/models/instance.coffee +2 -0
  256. data/src/tools/templates/component_tester/help.luca +14 -0
  257. data/{app/assets/javascripts/luca/util/luca.coffee → src/util.coffee} +6 -90
  258. data/vendor/assets/javascripts/luca-ui-development-tools.js +18533 -0
  259. data/vendor/assets/javascripts/luca-ui-development-tools.min.js +15 -0
  260. data/vendor/assets/javascripts/luca-ui-full.js +4806 -0
  261. data/vendor/assets/javascripts/luca-ui-full.min.js +8 -0
  262. data/vendor/assets/javascripts/luca-ui-templates.js +24 -0
  263. data/vendor/assets/javascripts/luca-ui.js +1703 -4394
  264. data/vendor/assets/javascripts/luca-ui.min.js +4 -5
  265. data/vendor/assets/luca-ui/base.css +85 -0
  266. data/vendor/assets/luca-ui/components/application.js +91 -0
  267. data/vendor/assets/luca-ui/components/base_toolbar.js +23 -0
  268. data/vendor/assets/luca-ui/components/controller.js +38 -0
  269. data/vendor/assets/luca-ui/components/fields/button_field.js +45 -0
  270. data/vendor/assets/luca-ui/components/fields/checkbox_field.js +43 -0
  271. data/vendor/assets/luca-ui/components/fields/file_upload_field.js +20 -0
  272. data/vendor/assets/luca-ui/components/fields/hidden_field.js +20 -0
  273. data/vendor/assets/luca-ui/components/fields/select_field.js +97 -0
  274. data/vendor/assets/luca-ui/components/fields/text_area_field.js +48 -0
  275. data/vendor/assets/luca-ui/components/fields/text_field.js +46 -0
  276. data/vendor/assets/luca-ui/components/fields/type_ahead_field.js +13 -0
  277. data/vendor/assets/luca-ui/components/form_button_toolbar.js +32 -0
  278. data/vendor/assets/luca-ui/components/form_view.css +32 -0
  279. data/vendor/assets/luca-ui/components/form_view.js +207 -0
  280. data/{app/assets/stylesheets/luca/components/table_view.scss → vendor/assets/luca-ui/components/grid_view.css} +51 -60
  281. data/vendor/assets/luca-ui/components/grid_view.js +202 -0
  282. data/vendor/assets/luca-ui/components/record_manager.js +207 -0
  283. data/vendor/assets/luca-ui/components/router.js +36 -0
  284. data/vendor/assets/luca-ui/components/template.js +26 -0
  285. data/vendor/assets/luca-ui/components/toolbar.css +11 -0
  286. data/vendor/assets/luca-ui/containers/card_view.js +98 -0
  287. data/vendor/assets/luca-ui/containers/column_view.js +52 -0
  288. data/vendor/assets/luca-ui/containers/container.css +3 -0
  289. data/vendor/assets/luca-ui/containers/modal_view.css +0 -0
  290. data/vendor/assets/luca-ui/containers/modal_view.js +87 -0
  291. data/vendor/assets/luca-ui/containers/panel_view.js +34 -0
  292. data/vendor/assets/luca-ui/containers/split_view.js +13 -0
  293. data/vendor/assets/luca-ui/containers/tab_view.css +16 -0
  294. data/vendor/assets/luca-ui/containers/tab_view.js +80 -0
  295. data/vendor/assets/luca-ui/containers/viewport.js +18 -0
  296. data/vendor/assets/luca-ui/core/collection.js +221 -0
  297. data/vendor/assets/luca-ui/core/container.js +205 -0
  298. data/vendor/assets/luca-ui/core/field.js +59 -0
  299. data/vendor/assets/luca-ui/core/observer.js +42 -0
  300. data/vendor/assets/luca-ui/core/view.js +127 -0
  301. data/vendor/assets/luca-ui/framework.js +110 -0
  302. data/vendor/assets/luca-ui/index.js +5 -0
  303. data/vendor/assets/luca-ui/managers/collection_manager.js +98 -0
  304. data/vendor/assets/luca-ui/managers/socket_manager.js +52 -0
  305. data/vendor/assets/luca-ui/modules/deferrable.js +21 -0
  306. data/vendor/assets/luca-ui/modules/local_storage.js +81 -0
  307. data/vendor/assets/luca-ui/normalize.css +359 -0
  308. data/vendor/assets/luca-ui/stylesheets/base.css +85 -0
  309. data/vendor/assets/luca-ui/stylesheets/components/form_view.css +32 -0
  310. data/vendor/assets/luca-ui/stylesheets/components/grid_view.css +76 -0
  311. data/vendor/assets/luca-ui/stylesheets/components/toolbar.css +11 -0
  312. data/vendor/assets/luca-ui/stylesheets/containers/container.css +3 -0
  313. data/vendor/assets/luca-ui/stylesheets/containers/modal_view.css +0 -0
  314. data/vendor/assets/luca-ui/stylesheets/containers/tab_view.css +16 -0
  315. data/vendor/assets/luca-ui/stylesheets/normalize.css +359 -0
  316. data/vendor/assets/luca-ui/templates/components/bootstrap_form_controls.js +4 -0
  317. data/vendor/assets/luca-ui/templates/components/form_view.js +4 -0
  318. data/vendor/assets/luca-ui/templates/components/grid_view.js +4 -0
  319. data/vendor/assets/luca-ui/templates/components/grid_view_empty_text.js +4 -0
  320. data/vendor/assets/luca-ui/templates/containers/basic.js +4 -0
  321. data/vendor/assets/luca-ui/templates/containers/tab_selector_container.js +4 -0
  322. data/vendor/assets/luca-ui/templates/containers/tab_view.js +4 -0
  323. data/vendor/assets/luca-ui/templates/containers/toolbar_wrapper.js +4 -0
  324. data/vendor/assets/luca-ui/templates/fields/button_field.js +4 -0
  325. data/vendor/assets/luca-ui/templates/fields/button_field_link.js +4 -0
  326. data/vendor/assets/luca-ui/templates/fields/checkbox_field.js +4 -0
  327. data/vendor/assets/luca-ui/templates/fields/file_upload_field.js +4 -0
  328. data/vendor/assets/luca-ui/templates/fields/hidden_field.js +4 -0
  329. data/vendor/assets/luca-ui/templates/fields/select_field.js +4 -0
  330. data/vendor/assets/luca-ui/templates/fields/text_area_field.js +4 -0
  331. data/vendor/assets/luca-ui/templates/fields/text_field.js +4 -0
  332. data/vendor/assets/luca-ui/templates/sample/contents.js +4 -0
  333. data/vendor/assets/luca-ui/templates/sample/welcome.js +4 -0
  334. data/vendor/assets/stylesheets/luca-ui.css +471 -68
  335. data/views/jasmine.erb +2 -2
  336. metadata +328 -496
  337. data/app/assets/javascripts/luca/basic.coffee +0 -8
  338. data/app/assets/javascripts/luca/components/application.coffee +0 -530
  339. data/app/assets/javascripts/luca/components/collection_view.coffee +0 -211
  340. data/app/assets/javascripts/luca/components/controller.coffee +0 -176
  341. data/app/assets/javascripts/luca/components/fields/base.coffee +0 -144
  342. data/app/assets/javascripts/luca/components/fields/button_field.coffee +0 -91
  343. data/app/assets/javascripts/luca/components/fields/hidden_field.coffee +0 -11
  344. data/app/assets/javascripts/luca/components/fields/label_field.coffee +0 -12
  345. data/app/assets/javascripts/luca/components/fields/select_field.coffee +0 -159
  346. data/app/assets/javascripts/luca/components/fields/text_area_field.coffee +0 -57
  347. data/app/assets/javascripts/luca/components/fields/type_ahead_field.coffee +0 -20
  348. data/app/assets/javascripts/luca/components/form_view.coffee +0 -421
  349. data/app/assets/javascripts/luca/components/grid_layout_view.coffee +0 -42
  350. data/app/assets/javascripts/luca/components/index.coffee +0 -7
  351. data/app/assets/javascripts/luca/components/load_mask.coffee +0 -8
  352. data/app/assets/javascripts/luca/components/multi_collection_view.coffee +0 -92
  353. data/app/assets/javascripts/luca/components/nav_bar.coffee +0 -80
  354. data/app/assets/javascripts/luca/components/page.coffee +0 -70
  355. data/app/assets/javascripts/luca/components/pagination_control.coffee +0 -104
  356. data/app/assets/javascripts/luca/components/simple_collection_view.coffee +0 -10
  357. data/app/assets/javascripts/luca/components/table_view.coffee +0 -93
  358. data/app/assets/javascripts/luca/components/table_view_scrollable.coffee +0 -23
  359. data/app/assets/javascripts/luca/concerns/application_event_bindings.coffee +0 -19
  360. data/app/assets/javascripts/luca/concerns/collection_event_bindings.coffee +0 -47
  361. data/app/assets/javascripts/luca/concerns/development_tool_helpers.coffee +0 -30
  362. data/app/assets/javascripts/luca/concerns/dom_helpers.coffee +0 -61
  363. data/app/assets/javascripts/luca/concerns/enhanced_properties.coffee +0 -23
  364. data/app/assets/javascripts/luca/concerns/filterable.coffee +0 -101
  365. data/app/assets/javascripts/luca/concerns/form_model_bindings.coffee +0 -20
  366. data/app/assets/javascripts/luca/concerns/grid_layout.coffee +0 -15
  367. data/app/assets/javascripts/luca/concerns/modal_view.coffee +0 -63
  368. data/app/assets/javascripts/luca/concerns/model_presenter.coffee +0 -23
  369. data/app/assets/javascripts/luca/concerns/paginatable.coffee +0 -79
  370. data/app/assets/javascripts/luca/concerns/query_collection_bindings.coffee +0 -52
  371. data/app/assets/javascripts/luca/concerns/sortable.coffee +0 -69
  372. data/app/assets/javascripts/luca/concerns/state_model.coffee +0 -58
  373. data/app/assets/javascripts/luca/concerns/templating.coffee +0 -13
  374. data/app/assets/javascripts/luca/config.coffee +0 -54
  375. data/app/assets/javascripts/luca/containers/card_view.coffee +0 -178
  376. data/app/assets/javascripts/luca/containers/container.coffee +0 -711
  377. data/app/assets/javascripts/luca/containers/index.coffee +0 -2
  378. data/app/assets/javascripts/luca/containers/page_controller.coffee +0 -25
  379. data/app/assets/javascripts/luca/core/events.coffee +0 -114
  380. data/app/assets/javascripts/luca/core/index.coffee +0 -12
  381. data/app/assets/javascripts/luca/core/model.coffee +0 -56
  382. data/app/assets/javascripts/luca/core/panel.coffee +0 -124
  383. data/app/assets/javascripts/luca/core/registry/component_definition.coffee +0 -319
  384. data/app/assets/javascripts/luca/core/registry/concerns.coffee +0 -70
  385. data/app/assets/javascripts/luca/core/registry/index.coffee +0 -4
  386. data/app/assets/javascripts/luca/core/registry/meta_data.coffee +0 -99
  387. data/app/assets/javascripts/luca/core/templates.coffee +0 -51
  388. data/app/assets/javascripts/luca/core/view.coffee +0 -383
  389. data/app/assets/javascripts/luca/dependencies.coffee +0 -9
  390. data/app/assets/javascripts/luca/development/code_sync_manager.coffee +0 -173
  391. data/app/assets/javascripts/luca/development/component.coffee +0 -76
  392. data/app/assets/javascripts/luca/development/components.coffee +0 -57
  393. data/app/assets/javascripts/luca/development/index.coffee +0 -5
  394. data/app/assets/javascripts/luca/index.coffee +0 -9
  395. data/app/assets/javascripts/luca/managers/index.coffee +0 -2
  396. data/app/assets/javascripts/luca/managers/socket_manager.coffee +0 -89
  397. data/app/assets/javascripts/luca/templates/components/bootstrap_form_controls.jst.ejs +0 -10
  398. data/app/assets/javascripts/luca/templates/components/collection_loader_view.jst.ejs +0 -6
  399. data/app/assets/javascripts/luca/templates/components/form_alert.jst.ejs +0 -4
  400. data/app/assets/javascripts/luca/templates/components/grid_view.jst.ejs +0 -11
  401. data/app/assets/javascripts/luca/templates/components/grid_view_empty_text.jst.ejs +0 -3
  402. data/app/assets/javascripts/luca/templates/components/load_mask.jst.ejs +0 -5
  403. data/app/assets/javascripts/luca/templates/components/nav_bar.jst.ejs +0 -19
  404. data/app/assets/javascripts/luca/templates/components/pagination.jst.ejs +0 -10
  405. data/app/assets/javascripts/luca/templates/components/table_view.jst.ejs +0 -4
  406. data/app/assets/javascripts/luca/templates/containers/basic.jst.ejs +0 -1
  407. data/app/assets/javascripts/luca/templates/containers/tab_selector_container.jst.ejs +0 -12
  408. data/app/assets/javascripts/luca/templates/containers/tab_view.jst.ejs +0 -2
  409. data/app/assets/javascripts/luca/templates/containers/toolbar_wrapper.jst.ejs +0 -1
  410. data/app/assets/javascripts/luca/templates/fields/button_field.jst.ejs +0 -2
  411. data/app/assets/javascripts/luca/templates/fields/button_field_link.jst.ejs +0 -6
  412. data/app/assets/javascripts/luca/templates/fields/checkbox_array.jst.ejs +0 -4
  413. data/app/assets/javascripts/luca/templates/fields/checkbox_array_item.jst.ejs +0 -3
  414. data/app/assets/javascripts/luca/templates/fields/checkbox_field.jst.ejs +0 -10
  415. data/app/assets/javascripts/luca/templates/fields/file_upload_field.jst.ejs +0 -10
  416. data/app/assets/javascripts/luca/templates/fields/hidden_field.jst.ejs +0 -1
  417. data/app/assets/javascripts/luca/templates/fields/select_field.jst.ejs +0 -11
  418. data/app/assets/javascripts/luca/templates/fields/text_area_field.jst.ejs +0 -11
  419. data/app/assets/javascripts/luca/templates/fields/text_field.jst.ejs +0 -16
  420. data/app/assets/javascripts/luca/util/deprecations.coffee +0 -18
  421. data/app/assets/javascripts/luca/util/index.coffee +0 -4
  422. data/app/assets/javascripts/luca/util/keybindings.coffee +0 -24
  423. data/app/assets/javascripts/luca/util/logging.coffee +0 -30
  424. data/app/assets/javascripts/luca-ui.js +0 -1
  425. data/app/assets/stylesheets/luca/components/form_view.scss +0 -7
  426. data/app/assets/stylesheets/luca/containers/container.scss +0 -19
  427. data/app/assets/stylesheets/luca/development/index.css +0 -3
  428. data/app/assets/stylesheets/luca/index.css +0 -4
  429. data/bin/luca +0 -14
  430. data/docs/framework.json +0 -1
  431. data/docs/luca-framework-documentation.js +0 -1
  432. data/lib/generators/luca/application/application_generator.rb +0 -75
  433. data/lib/generators/luca/application/templates/controller.rb +0 -4
  434. data/lib/generators/luca/application/templates/index.html.erb +0 -19
  435. data/lib/generators/luca/application/templates/index.html.haml +0 -7
  436. data/lib/generators/luca/application/templates/javascripts/application.coffee +0 -18
  437. data/lib/generators/luca/application/templates/javascripts/collection_manager.coffee +0 -2
  438. data/lib/generators/luca/application/templates/javascripts/config.coffee +0 -3
  439. data/lib/generators/luca/application/templates/javascripts/dependencies.coffee +0 -3
  440. data/lib/generators/luca/application/templates/javascripts/home.jst.ejs +0 -2
  441. data/lib/generators/luca/application/templates/javascripts/index.coffee +0 -15
  442. data/lib/generators/luca/application/templates/javascripts/router.coffee +0 -4
  443. data/lib/guard/luca.rb +0 -84
  444. data/lib/luca/asset_compiler.rb +0 -117
  445. data/lib/luca/cli/generate.rb +0 -37
  446. data/lib/luca/cli/server.rb +0 -20
  447. data/lib/luca/cli/sync.rb +0 -40
  448. data/lib/luca/cli/watch.rb +0 -16
  449. data/lib/luca/cli.rb +0 -68
  450. data/lib/luca/collection/endpoint.rb +0 -38
  451. data/lib/luca/collection/file_backend.rb +0 -121
  452. data/lib/luca/collection/redis_backend.rb +0 -153
  453. data/lib/luca/collection.rb +0 -64
  454. data/lib/luca/compiled_asset.rb +0 -61
  455. data/lib/luca/component_definition.rb +0 -356
  456. data/lib/luca/luca_application.rb +0 -258
  457. data/lib/luca/project.rb +0 -73
  458. data/lib/luca/project_harness.rb +0 -96
  459. data/lib/luca/server.rb +0 -7
  460. data/lib/luca/stylesheet.rb +0 -35
  461. data/lib/luca/template_asset.rb +0 -64
  462. data/lib/luca/version.rb +0 -3
  463. data/lib/luca/watcher.rb +0 -72
  464. data/lib/railties/luca/tasks.rake +0 -38
  465. data/site/.bundle/config +0 -2
  466. data/site/.gitignore +0 -5
  467. data/site/.rvmrc +0 -1
  468. data/site/CHANGELOG.md +0 -41
  469. data/site/DOCS.md +0 -41
  470. data/site/Gemfile +0 -8
  471. data/site/Gemfile.lock +0 -134
  472. data/site/LICENSE.md +0 -19
  473. data/site/config.rb +0 -84
  474. data/site/helpers/site_helpers.rb +0 -20
  475. data/site/html5bp-docs/README.md +0 -38
  476. data/site/html5bp-docs/contribute.md +0 -104
  477. data/site/html5bp-docs/crossdomain.md +0 -21
  478. data/site/html5bp-docs/css.md +0 -135
  479. data/site/html5bp-docs/extend.md +0 -507
  480. data/site/html5bp-docs/faq.md +0 -77
  481. data/site/html5bp-docs/htaccess.md +0 -323
  482. data/site/html5bp-docs/html.md +0 -170
  483. data/site/html5bp-docs/js.md +0 -31
  484. data/site/html5bp-docs/misc.md +0 -25
  485. data/site/html5bp-docs/usage.md +0 -109
  486. data/site/readme.md +0 -47
  487. data/site/source/.htaccess +0 -540
  488. data/site/source/404.html +0 -157
  489. data/site/source/app/assets/javascripts/dependencies.js.coffee +0 -6
  490. data/site/source/app/assets/javascripts/docs/application.coffee +0 -64
  491. data/site/source/app/assets/javascripts/docs/collections/docs_documentation.coffee +0 -17
  492. data/site/source/app/assets/javascripts/docs/collections/github_repositories.coffee +0 -7
  493. data/site/source/app/assets/javascripts/docs/collections/index.coffee +0 -1
  494. data/site/source/app/assets/javascripts/docs/collections/luca_documentation.coffee +0 -17
  495. data/site/source/app/assets/javascripts/docs/collections/public_gists.coffee +0 -4
  496. data/site/source/app/assets/javascripts/docs/config.coffee +0 -5
  497. data/site/source/app/assets/javascripts/docs/index.coffee +0 -12
  498. data/site/source/app/assets/javascripts/docs/lib/router.coffee +0 -3
  499. data/site/source/app/assets/javascripts/docs/models/component.coffee +0 -99
  500. data/site/source/app/assets/javascripts/docs/models/github_repository.coffee +0 -3
  501. data/site/source/app/assets/javascripts/docs/models/index.coffee +0 -1
  502. data/site/source/app/assets/javascripts/docs/templates/component_documentation.jst.ejs +0 -55
  503. data/site/source/app/assets/javascripts/docs/templates/examples_browser/overview.jst.ejs +0 -4
  504. data/site/source/app/assets/javascripts/docs/templates/examples_browser/selector.jst.ejs +0 -11
  505. data/site/source/app/assets/javascripts/docs/templates/github_repository.jst.ejs +0 -4
  506. data/site/source/app/assets/javascripts/docs/templates/layouts/main.jst.ejs +0 -4
  507. data/site/source/app/assets/javascripts/docs/templates/left_navigation.jst.ejs +0 -5
  508. data/site/source/app/assets/javascripts/docs/templates/pages/getting_started.jst.ejs +0 -78
  509. data/site/source/app/assets/javascripts/docs/templates/pages/home.jst.ejs +0 -57
  510. data/site/source/app/assets/javascripts/docs/views/components/code_editor.coffee +0 -45
  511. data/site/source/app/assets/javascripts/docs/views/components/component_documentation.coffee +0 -72
  512. data/site/source/app/assets/javascripts/docs/views/index.coffee +0 -3
  513. data/site/source/app/assets/javascripts/docs/views/pages/browse_source/details.coffee +0 -37
  514. data/site/source/app/assets/javascripts/docs/views/pages/browse_source/list.coffee +0 -31
  515. data/site/source/app/assets/javascripts/docs/views/pages/browse_source.coffee +0 -46
  516. data/site/source/app/assets/javascripts/docs/views/pages/component_editor.coffee +0 -10
  517. data/site/source/app/assets/javascripts/docs/views/pages/examples_browser/docs.coffee +0 -12
  518. data/site/source/app/assets/javascripts/docs/views/pages/examples_browser/source.coffee +0 -13
  519. data/site/source/app/assets/javascripts/docs/views/pages/examples_browser.coffee +0 -102
  520. data/site/source/app/assets/javascripts/docs/views/pages/home.coffee +0 -10
  521. data/site/source/app/assets/javascripts/docs/views/views/api_browser/index.coffee +0 -43
  522. data/site/source/app/assets/javascripts/docs/views/views/collection_view_examples/grid_layout_view_example.coffee +0 -14
  523. data/site/source/app/assets/javascripts/docs/views/views/collection_view_examples/table_view_example.coffee +0 -39
  524. data/site/source/app/assets/javascripts/docs/views/views/form_view_examples/basic_example.coffee +0 -38
  525. data/site/source/app/assets/javascripts/docs/views/views/form_view_examples/complex_layout.coffee +0 -110
  526. data/site/source/app/assets/javascripts/docs/views/views/top_navigation.coffee +0 -6
  527. data/site/source/app/assets/javascripts/docs-docs.js +0 -1
  528. data/site/source/app/assets/javascripts/luca-docs.js +0 -1
  529. data/site/source/app/assets/javascripts/luca-framework-documentation.js +0 -1
  530. data/site/source/app/assets/javascripts/site.js.coffee +0 -4
  531. data/site/source/app/assets/javascripts/vendor/codemirror.js +0 -4786
  532. data/site/source/app/assets/javascripts/vendor/coffeescript.js +0 -346
  533. data/site/source/app/assets/javascripts/vendor/css.js +0 -465
  534. data/site/source/app/assets/javascripts/vendor/htmlmixed.js +0 -84
  535. data/site/source/app/assets/javascripts/vendor/javascript.js +0 -422
  536. data/site/source/app/assets/javascripts/vendor/js-beautify.js +0 -1353
  537. data/site/source/app/assets/javascripts/vendor/modernizr-2.6.1.min.js +0 -4
  538. data/site/source/app/assets/javascripts/vendor/vim.js +0 -2511
  539. data/site/source/app/assets/stylesheets/docs/api-browser.css.scss +0 -5
  540. data/site/source/app/assets/stylesheets/docs/application.css.scss +0 -35
  541. data/site/source/app/assets/stylesheets/docs/browse-source.css.scss +0 -5
  542. data/site/source/app/assets/stylesheets/docs/scrollable-table.css.scss +0 -5
  543. data/site/source/app/assets/stylesheets/site.css.scss +0 -2
  544. data/site/source/app/assets/stylesheets/vendor/codemirror.css +0 -240
  545. data/site/source/app/assets/stylesheets/vendor/prettify-tomorrow-night-bright.css +0 -160
  546. data/site/source/app/assets/stylesheets/vendor/twilight.css +0 -26
  547. data/site/source/crossdomain.xml +0 -15
  548. data/site/source/documentation.html.haml +0 -1
  549. data/site/source/favicon_base.png +0 -0
  550. data/site/source/humans.txt +0 -15
  551. data/site/source/images/background.png +0 -0
  552. data/site/source/images/middleman.png +0 -0
  553. data/site/source/index.html.haml +0 -1
  554. data/site/source/layouts/layout.haml +0 -55
  555. data/site/source/readme.md +0 -63
  556. data/site/source/robots.txt +0 -3
  557. data/spec/javascripts/components/collection_view_spec.coffee +0 -59
  558. data/spec/javascripts/components/controller_spec.coffee +0 -62
  559. data/spec/javascripts/components/form_view_spec.coffee +0 -162
  560. data/spec/javascripts/components/multi_collection_view_spec.coffee +0 -5
  561. data/spec/javascripts/components/table_view_spec.coffee +0 -17
  562. data/spec/javascripts/concerns/collection_event_bindings_spec.coffee +0 -15
  563. data/spec/javascripts/concerns/dom_helpers_spec.coffee +0 -16
  564. data/spec/javascripts/concerns/filterable_spec.coffee +0 -25
  565. data/spec/javascripts/concerns/model_presenter_spec.coffee +0 -31
  566. data/spec/javascripts/concerns/state_model_spec.coffee +0 -55
  567. data/spec/javascripts/containers/card_view_spec.coffee +0 -108
  568. data/spec/javascripts/core/concerns_spec.coffee +0 -88
  569. data/spec/javascripts/core/container_spec.coffee +0 -287
  570. data/spec/javascripts/core/define_spec.coffee +0 -116
  571. data/spec/javascripts/core/events_spec.coffee +0 -26
  572. data/spec/javascripts/core/field_spec.coffee +0 -4
  573. data/spec/javascripts/core/util_spec.coffee +0 -24
  574. data/spec/javascripts/dependencies/index.coffee +0 -3
  575. data/spec/lib/component_definition_spec.rb +0 -63
  576. data/spec/lib/input_compiler_spec.rb +0 -9
  577. data/spec/lib/luca_application_spec.rb +0 -30
  578. data/spec/support/fixtures/application.coffee +0 -45
  579. data/spec/support/fixtures/component.coffee +0 -34
  580. data/tutorials/component-driven-design.md +0 -140
  581. data/tutorials/structure-of-a-project.md +0 -63
  582. data/vendor/assets/javascripts/backbone-ext.js +0 -21
  583. data/vendor/assets/javascripts/backbone-min.js +0 -42
  584. data/vendor/assets/javascripts/backbone-query.min.js +0 -1
  585. data/vendor/assets/javascripts/bootstrap.min.js +0 -7
  586. data/vendor/assets/javascripts/codemirror-ui.js +0 -503
  587. data/vendor/assets/javascripts/hogan.js +0 -707
  588. data/vendor/assets/javascripts/inflections.js +0 -656
  589. data/vendor/assets/javascripts/jasmine-html.js +0 -190
  590. data/vendor/assets/javascripts/jasmine.js +0 -2476
  591. data/vendor/assets/javascripts/jquery.js +0 -5
  592. data/vendor/assets/javascripts/keymaster.min.js +0 -4
  593. data/vendor/assets/javascripts/luca-dependencies.min.js +0 -8
  594. data/vendor/assets/javascripts/luca-development.min.js +0 -1
  595. data/vendor/assets/javascripts/luca-spec.js +0 -11
  596. data/vendor/assets/javascripts/luca.full.min.js +0 -12
  597. data/vendor/assets/javascripts/luca.min.js +0 -5
  598. data/vendor/assets/javascripts/sinon.js +0 -3469
  599. data/vendor/assets/javascripts/underscore-min.js +0 -1
  600. data/vendor/assets/javascripts/underscore-string.min.js +0 -1
  601. data/vendor/assets/stylesheets/bootstrap-responsive.min.css +0 -9
  602. data/vendor/assets/stylesheets/bootstrap.min.css +0 -9
  603. data/vendor/assets/stylesheets/luca-components.css +0 -202
  604. data/vendor/assets/stylesheets/luca-development.css +0 -23
@@ -0,0 +1,318 @@
1
+ # Luca.Application
2
+ #
3
+ # The Application class is the global state tracking mechanism
4
+ # for your single page application, as well as the entry point.
5
+ #
6
+ # By default it contains a main controller which is a Luca.components.Controller instance.
7
+ #
8
+ # In a typical Luca application, the router will use the applications @navigate_to() method to switch
9
+ # from page to page on the main controller, or any other controllers nested inside of it.
10
+ #
11
+ # You would control flow when the controller fires activation events on the nested view components inside of it.
12
+ #
13
+ # Decoupling application control flow from the URL Fragment from Backbone.History and preventing
14
+ # your components from directly caring about the URL Fragment, allows you to build applications as
15
+ # isolated components which can run separately or nested inside of other applications.
16
+
17
+ startHistory = ()-> Backbone.history.start()
18
+
19
+ _.def('Luca.Application').extends('Luca.containers.Viewport').with
20
+ name: "MyApp"
21
+
22
+ # The Application uses a Backbone.Model as a state machine, which
23
+ # allows you to get / set attributes, persist them somewhere, and
24
+ # most importantly to bind to change events of certain attributes.
25
+ #
26
+ # the @defaultState property will be the default attributes
27
+ defaultState: {}
28
+
29
+ # if autoBoot is set to true, the application will
30
+ # attempt to boot on document ready.
31
+ autoBoot: false
32
+
33
+ # automatically starts the @router if it exists,
34
+ # once the components for the application have
35
+ # been created. Pass the event name you want to
36
+ # listen for on this component before you start history
37
+ autoStartHistory: "before:render"
38
+
39
+ # we will create a collection manager singleton
40
+ # by default unless otherwise specified.
41
+ useCollectionManager: true
42
+
43
+ # to pass options to the collection manager, set the @collectionManager
44
+ # hash which will get passed once the collection manager is created
45
+ collectionManager: {}
46
+
47
+ # by default we will use the standard collection manager which ships with
48
+ # Luca. If you would like to use your own extension of the collection manager
49
+ # just pass a reference to the class you would like to use.
50
+ collectionManagerClass: "Luca.CollectionManager"
51
+
52
+ # Luca plugin apps are apps which mount onto existing
53
+ # luca apps, and will not have the behavior of a main
54
+ # app which acts as a singleton
55
+ plugin: false
56
+
57
+ # by default, the application will use a controller
58
+ # component, which is a card view container which shows
59
+ # one view at a time. this is useful for having an application
60
+ # with several 'pages' so to speak
61
+ useController: true
62
+
63
+ # Key Handler
64
+ #
65
+ # One responsibility of the application, since it is a viewport which monopolizes the entire screen
66
+ # is to relay keypress events from the document, to whatever views are interested in responding to them.
67
+ #
68
+ # This functionality is disabled by default.
69
+ useKeyHandler: false
70
+
71
+ # You can configure key events by specifying them by their name, as it exists in Luca.keyMap. For example:
72
+ #
73
+ keyEvents: {}
74
+
75
+ # keyEvents
76
+ # keyup: keyUpHandler
77
+ # enter: enterHandler
78
+ # meta:
79
+ # up: metaUpHandler
80
+ # control:
81
+ # forwardslash: controlSlashHandler
82
+ # keyup: controlUpHandler
83
+ # control_meta:
84
+ # keydown: metaControlKeyDownHandler
85
+ #
86
+ #
87
+
88
+ # applications have one component, the controller.
89
+ # any components defined on the application class directly
90
+ # will get wrapped by the main controller unless you
91
+ # set useController = false
92
+ components:[
93
+ ctype: 'template'
94
+ name: 'welcome'
95
+ template: 'sample/welcome'
96
+ templateContainer: "Luca.templates"
97
+ ]
98
+
99
+ initialize: (@options={})->
100
+ app = @
101
+ appName = @name
102
+ alreadyRunning = Luca.getApplication?()
103
+
104
+ Luca.Application.instances ||= {}
105
+ Luca.Application.instances[ appName ] = app
106
+
107
+ Luca.containers.Viewport::initialize.apply @, arguments
108
+
109
+ @state = new Luca.Model( @defaultState )
110
+
111
+ # The Controller is the piece of the application that handles showing
112
+ # and hiding 'pages' of the app. The Application has a navigate_to
113
+ # method which delegates to the controller, and allows you to navigate
114
+ # to a given page, or component, by its name. The controller integrates
115
+ # with the state machine of the application
116
+ @setupMainController()
117
+
118
+ # The Collection Manager is responsible
119
+ @setupCollectionManager()
120
+
121
+ # we will render when all of the various components
122
+ # which handle our data dependencies determine that
123
+ # we are ready
124
+ @defer(()-> app.render()).until(@, "ready")
125
+
126
+ # Set up the Backbone Router
127
+ @setupRouter()
128
+
129
+ # the keyHandler allows us to specify
130
+ # keyEvents on our application with an API very similar
131
+ # to the DOM events API for Backbone.View
132
+ #
133
+ # Example:
134
+ #
135
+ # keyEvents:
136
+ # meta:
137
+ # forwardslash: "altSlashHandler"
138
+ if @useKeyRouter is true
139
+ console.log "The useKeyRouter property is being deprecated. switch to useKeyHandler instead"
140
+
141
+ @setupKeyHandler() if (@useKeyHandler is true or @useKeyRouter is true) and @keyEvents?
142
+
143
+ # if the application is a plugin designed to modify the behavior
144
+ # of another app, then don't claim ownership. otherwise the most common
145
+ # use-case is that there will be one application instance
146
+ unless @plugin is true or alreadyRunning
147
+ Luca.getApplication = (name)=>
148
+ return app unless name?
149
+ Luca.Application.instances[ name ]
150
+
151
+ if @autoBoot
152
+ if Luca.util.resolve(@name)
153
+ throw "Attempting to override window.#{ @name } when it already exists"
154
+
155
+ $ ->
156
+ window[ appName ] = app
157
+ app.boot()
158
+
159
+ # @activeView() returns a reference to the instance of the view
160
+ # which is currently monopolizing the viewport.
161
+ #
162
+ # this will be whicever component is active on the controllers
163
+ # nested within the main controller, if there are any, or the view
164
+ # itself which is active on the main controller.
165
+ activeView: ()->
166
+ if active = @activeSubSection()
167
+ @view( active )
168
+ else
169
+ @view( @activeSection() )
170
+
171
+ # Returns the name of the active component on the main controller
172
+ activeSection: ()->
173
+ @get("active_section")
174
+
175
+ # Returns the name of the active component on the nested controllers
176
+ # on the main controller, if there is one. These get set on the
177
+ # state machine in response to card switch events on the controller component
178
+ activeSubSection: ()->
179
+ @get("active_sub_section")
180
+
181
+ activePages: ()->
182
+ @$('.luca-ui-controller').map (index,element)=> $(element).data('active-section')
183
+
184
+ # boot should trigger the ready event, which will call the initial call
185
+ # to render() your application, which will have a cascading effect on every
186
+ # subcomponent in the view, recursively rendering everything which is set
187
+ # to automatically render (i.e. any non-deferrable components ).
188
+ #
189
+ # you should use boot to fire up any dependent collections, manager, any
190
+ # sort of data processing, whatever your application requires to run outside
191
+ # of the views
192
+ boot: ()->
193
+ @trigger "ready"
194
+
195
+ # delegate to the collection manager's get or create function.
196
+ # use App.collection() to create or access existing collections
197
+ collection: ()->
198
+ @collectionManager.getOrCreate.apply(@collectionManager, arguments)
199
+
200
+ get: (attribute)->
201
+ @state.get(attribute)
202
+
203
+ set: (attribute, value, options)->
204
+ @state.set.apply(@state, arguments)
205
+
206
+ view: (name)->
207
+ Luca.cache(name)
208
+
209
+ #### Navigation Hooks
210
+ #
211
+ # delegate to the main controller so that we can switch the active section
212
+ navigate_to: (component_name, callback)->
213
+ @getMainController().navigate_to(component_name, callback)
214
+
215
+ getMainController: ()->
216
+ return @components[0] if @useController is true
217
+ Luca.cache('main_controller')
218
+
219
+ #
220
+ keyHandler: (e)->
221
+ return unless e and @keyEvents
222
+
223
+ isInputEvent = $(e.target).is('input') || $(e.target).is('textarea')
224
+
225
+ return if isInputEvent
226
+
227
+ keyname = Luca.keyMap[ e.keyCode ]
228
+
229
+ return unless keyname
230
+
231
+ meta = e?.metaKey is true
232
+ control = e?.ctrlKey is true
233
+
234
+ source = @keyEvents
235
+ source = if meta then @keyEvents.meta else source
236
+ source = if control then @keyEvents.control else source
237
+ source = if meta and control then @keyEvents.meta_control else source
238
+
239
+ if keyEvent = source?[keyname]
240
+ if @[keyEvent]? and _.isFunction(@[keyEvent])
241
+ @[keyEvent]?.call(@)
242
+ else
243
+ @trigger(keyEvent, e, keyname)
244
+
245
+ setupControllerBindings: ()->
246
+ app = @
247
+ # any time the main controller card switches we should track
248
+ # the active card on the global state chart
249
+ @getMainController()?.bind "after:card:switch", (previous,current)=>
250
+ @state.set(active_section:current.name)
251
+ app.trigger "page:change"
252
+
253
+ # any time the card switches on one of the sub controllers
254
+ # then we should track the active sub section on the global state chart
255
+ @getMainController()?.each (component)=>
256
+ if component.ctype.match(/controller$/)
257
+ component.bind "after:card:switch", (previous,current)=>
258
+ @state.set(active_sub_section:current.name)
259
+ app.trigger "sub:page:change"
260
+
261
+ setupMainController: ()->
262
+ if @useController is true
263
+ definedComponents = @components || []
264
+
265
+ @components = [
266
+ ctype: 'controller'
267
+ name: "main_controller"
268
+ components: definedComponents
269
+ ]
270
+
271
+ @defer( @setupControllerBindings, false ).until("after:components")
272
+
273
+ setupCollectionManager: ()->
274
+ if @useCollectionManager is true
275
+ @collectionManagerClass = Luca.util.resolve( @collectionManagerClass ) if _.isString( @collectionManagerClass )
276
+
277
+ collectionManagerOptions = @collectionManagerOptions
278
+
279
+ if _.isObject(@collectionManager) and not _.isFunction( @collectionManager?.get )
280
+ collectionManagerOptions = @collectionManager
281
+ @collectionManager = undefined
282
+
283
+ if _.isString(@collectionManager)
284
+ collectionManagerOptions =
285
+ name: @collectionManager
286
+
287
+ @collectionManager = Luca.CollectionManager.get?( collectionManagerOptions.name )
288
+
289
+ unless _.isFunction(@collectionManager?.get)
290
+ @collectionManager = new @collectionManagerClass( collectionManagerOptions )
291
+
292
+ setupRouter: ()->
293
+ app = @
294
+
295
+ if _.isString( @router )
296
+ routerClass = Luca.util.resolve(@router)
297
+ @router = new routerClass({app})
298
+
299
+ # if this application has a router associated with it
300
+ # then we need to start backbone history on a certain event.
301
+ # you can control which by setting the @startHistoryOn property
302
+ if @router and @autoStartHistory
303
+ @autoStartHistory = "before:render" if @autoStartHistory is true
304
+ @defer(startHistory, false).until(@, @autoStartHistory)
305
+
306
+ setupKeyHandler: ()->
307
+ return unless @keyEvents
308
+
309
+ @keyEvents.control_meta ||= {}
310
+
311
+ # allow for both meta_control, control_meta for the combo
312
+ _.extend(@keyEvents.control_meta, @keyEvents.meta_control) if @keyEvents.meta_control
313
+
314
+ handler = _.bind(@keyHandler, @)
315
+
316
+ for keyEvent in (@keypressEvents || ["keydown"])
317
+ $( document ).on( keyEvent, handler )
318
+
@@ -0,0 +1,15 @@
1
+ _.def('Luca.components.Toolbar').extends('Luca.core.Container').with
2
+
3
+ className: 'luca-ui-toolbar toolbar'
4
+
5
+ position: 'bottom'
6
+
7
+ initialize: (@options={})->
8
+ Luca.core.Container::initialize.apply @, arguments
9
+
10
+ prepareComponents: ()->
11
+ _( @components ).each (component)=>
12
+ component.container = @$el
13
+
14
+ render: ()->
15
+ $(@container).append(@el)
@@ -3,10 +3,8 @@
3
3
  # if you want to. Default implementation uses twitter bootstrap modal and
4
4
  # progress bar (http://twitter.github.com/bootstrap/). You template
5
5
  # should contain `progress`, `bar` and `message` classes
6
- loaderView = Luca.register "Luca.components.CollectionLoaderView"
7
- loaderView.extends "Luca.View"
6
+ _.def('Luca.components.CollectionLoaderView').extends('Luca.components.Template').with
8
7
 
9
- loaderView.defines
10
8
  className: 'luca-ui-collection-loader-view'
11
9
 
12
10
  template: "components/collection_loader_view"
@@ -0,0 +1,131 @@
1
+ # Public: The CollectionView renders a collection of models into a list of items.
2
+ #
3
+ # Examples
4
+ #
5
+ # _.def('App.ListView').extends('Luca.components.CollectionView').with
6
+ # collection: new App.SampleCollection()
7
+ # itemTemplate: "list_view_item"
8
+ # loadMask: true
9
+ #
10
+
11
+ _.def("Luca.components.CollectionView").extends("Luca.components.Panel").with
12
+ tagName: "div"
13
+
14
+ className: "luca-ui-collection-view"
15
+
16
+ bodyClassName: "collection-ui-panel"
17
+
18
+ # A collection view can pass a model through to a template
19
+ itemTemplate: undefined
20
+
21
+ # A collection view can pass a model through a function which should return a string
22
+ itemRenderer: undefined
23
+
24
+ itemTagName: 'li'
25
+
26
+ itemClassName: 'collection-item'
27
+
28
+ hooks:[
29
+ "empty:results"
30
+ ]
31
+
32
+ initialize: (@options={})->
33
+ _.extend(@, @options)
34
+
35
+ _.bindAll @, "refresh"
36
+
37
+ unless @collection? or @options.collection
38
+ throw "Collection Views must specify a collection"
39
+
40
+ unless @itemTemplate? || @itemRenderer? || @itemProperty?
41
+ throw "Collection Views must specify an item template or item renderer function"
42
+
43
+ Luca.components.Panel::initialize.apply(@, arguments)
44
+
45
+ if _.isString(@collection) and Luca.CollectionManager.get()
46
+ @collection = Luca.CollectionManager.get().getOrCreate(@collection)
47
+
48
+ if Luca.isBackboneCollection(@collection)
49
+ @collection.on "before:fetch", ()=>
50
+ @trigger "enable:loadmask" if @loadMask is true
51
+
52
+ @collection.bind "reset", ()=>
53
+ @trigger "disable:loadmask" if @loadMask is true
54
+ @refresh()
55
+
56
+ @collection.bind "add", @refresh
57
+ @collection.bind "remove", @refresh
58
+
59
+ if @observeChanges is true
60
+ setupChangeObserver.call(@)
61
+
62
+ else
63
+ throw "Collection Views must have a valid backbone collection"
64
+
65
+ if @collection.length > 0
66
+ @refresh()
67
+
68
+ attributesForItem: (item, model)->
69
+ _.extend {}, class: @itemClassName, "data-index": item.index, "data-model-id": item.model.get('id')
70
+
71
+ contentForItem: (item={})->
72
+ if @itemTemplate? and templateFn = Luca.template(@itemTemplate)
73
+ # this is the model
74
+ content = templateFn.call(@, item)
75
+
76
+ if @itemRenderer? and _.isFunction( @itemRenderer )
77
+ content = @itemRenderer.call(@, item, item.model, item.index)
78
+
79
+ if @itemProperty
80
+ content = item.model.get(@itemProperty) || item.model[ @itemProperty ]
81
+ content = content() if _.isFunction(content)
82
+
83
+ content
84
+
85
+ makeItem: (model, index)->
86
+ item = if @prepareItem? then @prepareItem.call(@, model, index) else (model:model, index: index)
87
+ make(@itemTagName, @attributesForItem(item, model), @contentForItem(item))
88
+
89
+ getModels: ()->
90
+ if @collection?.query and (@filter || @filterOptions)
91
+ @collection.query(@filter, @filterOptions)
92
+ else
93
+ @collection.models
94
+
95
+
96
+ locateItemElement: (id)->
97
+ @$(".#{ @itemClassName }[data-model-id='#{ id }']")
98
+
99
+ refreshModel: (model)->
100
+ index = @collection.indexOf( model )
101
+ @locateItemElement(model.get('id')).empty().append( @contentForItem({model,index}, model) )
102
+
103
+ refresh: ()->
104
+ @$bodyEl().empty()
105
+
106
+ if @getModels().length is 0
107
+ @trigger("empty:results")
108
+
109
+ _( @getModels() ).each (model, index)=>
110
+ @$append( @makeItem(model, index) )
111
+
112
+ registerEvent: (domEvent, selector, handler)->
113
+ if !handler? and _.isFunction(selector)
114
+ handler = selector
115
+ selector = undefined
116
+
117
+ eventTrigger = _([domEvent,"#{ @itemTagName }.#{ @itemClassName }", selector]).compact().join(" ")
118
+ Luca.View::registerEvent(eventTrigger,handler)
119
+
120
+ render: ()->
121
+ @refresh()
122
+ @$attach() if @$el.parent().length > 0 and @container?
123
+ @
124
+
125
+ # Private Helpers
126
+
127
+ make = Luca.View::make
128
+
129
+ setupChangeObserver = ()->
130
+ @collection.on "change", (model)=>
131
+ @refreshModel(model)
@@ -0,0 +1,63 @@
1
+ _.def('Luca.components.Controller').extends('Luca.containers.CardView').with
2
+
3
+ additionalClassNames:['luca-ui-controller']
4
+
5
+ activeAttribute: "active-section"
6
+
7
+ initialize: (@options)->
8
+ Luca.containers.CardView::initialize.apply @, arguments
9
+
10
+ @defaultCard ||= @components[0]?.name
11
+
12
+ throw "Controllers must specify a defaultCard property and/or the first component must have a name" unless @defaultCard
13
+
14
+ @state = new Backbone.Model
15
+ active_section: @defaultCard
16
+
17
+ each: (fn)->
18
+ _( @components ).each (component)=>
19
+ fn.apply @, [component]
20
+
21
+ activeSection: ()->
22
+ @get("activeSection")
23
+
24
+ controllers:(deep=false)->
25
+ @select 'ctype', 'controller', deep
26
+
27
+ availableSections: ()->
28
+ base = {}
29
+ base[ @name ] = @sectionNames()
30
+
31
+ _( @controllers() ).reduce (memo,controller)=>
32
+ memo[ controller.name ] = controller.sectionNames()
33
+ memo
34
+ , base
35
+
36
+ sectionNames: (deep=false)->
37
+ @pluck('name')
38
+
39
+ default: (callback)->
40
+ @navigate_to(@defaultCard, callback)
41
+
42
+ # switch the active card of this controller
43
+ # optionally passing an onActivation callback
44
+ # will fire this callback in the context of
45
+ # the currently active card
46
+ navigate_to: (section, callback)->
47
+ section ||= @defaultCard
48
+
49
+ # activate is a method on Luca.containers.CardView which
50
+ # selects a component and makes it visible, hiding any
51
+ # other component which may be monopolizing the view at that time.
52
+
53
+ # after activation it triggers a after:card:switch event
54
+ # and if it is the first time that view is being activated,
55
+ # it triggers a first:activation event which gets relayed to all
56
+ # child components in that view
57
+ @activate section, false, (activator, previous,current)=>
58
+ @state.set(active_section: current.name )
59
+ if _.isFunction( callback )
60
+ callback.apply(current)
61
+
62
+ # return the section we are navigating to
63
+ @find(section)
@@ -0,0 +1,38 @@
1
+ _.def('Luca.fields.ButtonField').extends('Luca.core.Field').with
2
+
3
+ readOnly: true
4
+
5
+ events:
6
+ "click input" : "click_handler"
7
+
8
+ hooks:[
9
+ "button:click"
10
+ ]
11
+
12
+ className: 'luca-ui-field luca-ui-button-field'
13
+
14
+ template: 'fields/button_field'
15
+
16
+ click_handler: (e)->
17
+ me = my = $( e.currentTarget )
18
+ @trigger "button:click"
19
+
20
+ initialize: (@options={})->
21
+ _.extend @options
22
+ _.bindAll @, "click_handler"
23
+
24
+ Luca.core.Field::initialize.apply @, arguments
25
+
26
+ @template = "fields/button_field_link" if @icon_class?.length
27
+
28
+ afterInitialize: ()->
29
+ @input_id ||= _.uniqueId('button')
30
+ @input_name ||= @name ||= @input_id
31
+ @input_value ||= @label ||= @text
32
+ @input_type ||= "button"
33
+ @input_class ||= @class
34
+ @icon_class ||= ""
35
+ @icon_class = "icon-#{ @icon_class }" if @icon_class.length and !@icon_class.match(/^icon-/)
36
+ @icon_class += " icon-white" if @white
37
+
38
+ setValue: ()-> true
@@ -1,10 +1,8 @@
1
- # The `Luca.fields.CheckboxArray` renders an array of values
2
- # into checkbox controls. This is for fields which can have
3
- # a list of values associated with them.
4
- checkboxArray = Luca.register "Luca.fields.CheckboxArray"
5
- checkboxArray.extends "Luca.core.Field"
1
+ make = Luca.View::make
2
+
3
+ _.def('Luca.fields.CheckboxArray').extends('Luca.core.Field').with
4
+ version: 2
6
5
 
7
- checkboxArray.privateConfiguration
8
6
  template: "fields/checkbox_array"
9
7
 
10
8
  className: "luca-ui-checkbox-array"
@@ -14,10 +12,9 @@ checkboxArray.privateConfiguration
14
12
 
15
13
  selectedItems: []
16
14
 
17
- checkboxArray.privateMethods
18
15
  initialize: (@options={})->
19
16
  _.extend @, @options
20
- _.extend @, Luca.concerns.Deferrable
17
+ _.extend @, Luca.modules.Deferrable
21
18
  _.bindAll @, "renderCheckboxes", "clickHandler", "checkSelected"
22
19
 
23
20
  Luca.core.Field::initialize.apply @, arguments
@@ -36,9 +33,6 @@ checkboxArray.privateMethods
36
33
 
37
34
  cbArray = @
38
35
 
39
- unless Luca.isBackboneCollection(@collection)
40
- throw "Checkbox Array Fields must specify a @collection property"
41
-
42
36
  if @collection.length > 0
43
37
  @renderCheckboxes()
44
38
  else
@@ -65,8 +59,8 @@ checkboxArray.privateMethods
65
59
  label = model.get(@displayField)
66
60
  input_id = _.uniqueId("#{ @cid }_checkbox")
67
61
 
68
- inputElement = @make("input",type:"checkbox",class:"array-checkbox",name:@input_name,value:value,id: input_id)
69
- element = @make("label", {for:input_id}, inputElement)
62
+ inputElement = make("input",type:"checkbox",class:"array-checkbox",name:@input_name,value:value,id: input_id)
63
+ element = make("label", {for:input_id}, inputElement)
70
64
 
71
65
  $( element ).append(" #{ label }")
72
66
  @controls().append( element )
@@ -80,9 +74,6 @@ checkboxArray.privateMethods
80
74
  allFields: ()->
81
75
  @controls().find("input[type='checkbox']")
82
76
 
83
- checkboxArray.publicMethods
84
- # Check the selected items. Expects an array of values
85
- # for boxes you would like to see checked.
86
77
  checkSelected: (items)->
87
78
  @selectedItems = items if items?
88
79
 
@@ -94,8 +85,6 @@ checkboxArray.publicMethods
94
85
 
95
86
  @selectedItems
96
87
 
97
- # Gets an array of values for the checkboxes in this array
98
- # which are checked.
99
88
  getValue: ()->
100
89
  @$(field).val() for field in @allFields() when @$(field).prop('checked')
101
90
 
@@ -1,20 +1,13 @@
1
- checkboxField = Luca.register "Luca.fields.CheckboxField"
1
+ _.def('Luca.fields.CheckboxField').extends('Luca.core.Field').with
2
2
 
3
- checkboxField.extends "Luca.core.Field"
4
-
5
- checkboxField.triggers "checked",
6
- "unchecked"
7
-
8
- checkboxField.publicConfiguration
9
- send_blanks: true
10
- input_value: 1
11
-
12
- checkboxField.privateConfiguration
13
- template: 'fields/checkbox_field'
14
3
  events:
15
4
  "change input" : "change_handler"
16
5
 
17
- checkboxField.privateInterface
6
+ className: 'luca-ui-checkbox-field luca-ui-field'
7
+ template: 'fields/checkbox_field'
8
+ hooks: ["checked","unchecked"]
9
+ send_blanks: true
10
+
18
11
  change_handler: (e)->
19
12
  me = my = $(e.target)
20
13
 
@@ -31,16 +24,14 @@ checkboxField.privateInterface
31
24
 
32
25
  Luca.core.Field::initialize.apply @, arguments
33
26
 
27
+ afterInitialize: ()->
34
28
  @input_id ||= _.uniqueId('field')
35
29
  @input_name ||= @name
30
+ @input_value ||= 1
36
31
  @label ||= @name
37
32
 
38
- checkboxField.publicInterface
39
33
  setValue: (checked)->
40
- @getInputElement().attr('checked', checked)
34
+ @input.attr('checked', checked)
41
35
 
42
36
  getValue:()->
43
- @getInputElement().is(":checked")
44
-
45
- checkboxField.defines
46
- version: 1
37
+ @input.is(":checked")