luca 0.9.9 → 0.9.42

Sign up to get free protection for your applications and to get access to all the features.
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")