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
@@ -1,8 +0,0 @@
1
- #= require_tree ./templates
2
- #= require_self
3
- #= require ./config
4
- #= require ./util
5
- #= require ./managers
6
- #= require ./core
7
- #= require ./containers/container
8
- #= require ./framework
@@ -1,530 +0,0 @@
1
- # The `Luca.Application` is the main entry point into your Application.
2
- # It acts as a global state machine, page controller, and router, in addition
3
- # to providing access to other singletons such as the CollectionManager, and SocketManager.
4
- #
5
- # The structure of a common `Luca.Application` is that it contains one or many `Pages` which
6
- # themselves are made up of the components of your application. One `Page` is visible at a time
7
- # and which page is displayed is managed by an instance of the `Luca.components.Controller` class.
8
- #
9
- # ### Example Configuration
10
- # application = Luca.register "App.Application"
11
- # application.extends "Luca.Application"
12
- #
13
- # application.defines
14
- # name: "MyApplication"
15
- # routes:
16
- # "" : "home"
17
- # "standard/backbone/style/:route" : "name_of_page#name_of_method"
18
- #
19
- # components:[
20
- # name: "home"
21
- # ,
22
- # type: "your_view"
23
- # name: "name_of_page"
24
- # name_of_method: (routeParam)->
25
- # @doSomethignToSetupYourPageWithThePassed(routeParam)
26
- # ]
27
- #
28
- # App.onReady ()->
29
- # window.MyApp = new App.Application();
30
- # window.MyApp.boot()
31
- #
32
- # #### @routes and pages
33
- #
34
- # In the above example, our application contains two pages, one with the name 'home'
35
- # and one with the name 'name_of_page'. It also specifies a `@routes` property which
36
- # is identical to the configuration you would see in a standard `Backbone.Router`.
37
- #
38
- # Whenever the route matches 'standard/backbone/style/route' the `App.Application` instance
39
- # will send an instruction to the `Luca.components.Controller` to `activate` the page whose name
40
- # is passed in the `@routes` config.
41
- #
42
- # If that page defines a method called `@routeHandler` it will be called with the parameters
43
- # from the route. In the `@routes` config you can specify your own route handler method
44
- # by using the rails style `page_name#action` and it will call the `@action` method instead
45
- # on the view named `page_name`.
46
- #
47
- # The `App.Application` instance, also accessible by `window.MyApp`, or through the helper `App()`
48
- # or `Luca.getApplication()` maintains the state of which page is active. You can access this
49
- # in your code by calling `App().activePage()`.
50
- #
51
- # #### Controllers
52
- #
53
- # The `Luca.components.Controller` is a special type of component which contains
54
- # other views, or `Pages` which only one will be visible at any given time. It expects
55
- # that each page will have its own unique `@name` property. A `Luca.components.Controller` can
56
- # contain other controllers, providing you with a way of structuring your application layout
57
- # in an organized, hierarchal fashion.
58
- #
59
- # By default, any `Luca.Application` will have one `Luca.components.Controller` automatically
60
- # created named 'main_controller' which is accessible by `MyApp.getMainController()`. Any
61
- # components you define on the `Luca.Application` instance will be wrapped by the main controller
62
- # automatically unless you specify `@useController = false` in your Application component definition.
63
- application = Luca.register "Luca.Application"
64
- application.extends "Luca.containers.Viewport"
65
-
66
- application.triggers "controller:change",
67
- "action:change"
68
-
69
- application.publicConfiguration
70
- name: "MyApp"
71
-
72
- # The Application uses a Backbone.Model as a state machine, which
73
- # allows you to get / set attributes, persist them somewhere, and
74
- # most importantly to bind to change events of certain attributes.
75
- #
76
- # the @defaultState property will be the default attributes
77
- stateful: {}
78
-
79
- # if autoBoot is set to true, the application will
80
- # attempt to boot on document ready.
81
- autoBoot: false
82
-
83
- # automatically starts the @router if it exists,
84
- # once the components for the application have
85
- # been created. Pass the event name you want to
86
- # listen for on this component before you start history
87
- autoStartHistory: "before:render"
88
-
89
- # use Backbone.history push state?
90
- pushState: false
91
-
92
- # If the server renders the entire page
93
- # first, then we should start history silently.
94
- startHistorySilently: false
95
-
96
- # In cases where we use pushState, we need to tell
97
- # the application what the actual root url of our app
98
- # is, since everything after would otherwise be a hashbang
99
- rootUrl: undefined
100
-
101
- # we will create a collection manager singleton
102
- # by default unless otherwise specified.
103
- useCollectionManager: true
104
-
105
- # to pass options to the collection manager, set the @collectionManager
106
- # hash which will get passed once the collection manager is created
107
- collectionManager: {}
108
-
109
- # by default we will use the standard collection manager which ships with
110
- # Luca. If you would like to use your own extension of the collection manager
111
- # just pass a reference to the class you would like to use.
112
- collectionManagerClass: "Luca.CollectionManager"
113
-
114
- # Luca plugin apps are apps which mount onto existing
115
- # luca apps, and will not have the behavior of a main
116
- # app which acts as a singleton
117
- plugin: false
118
-
119
- # by default, the application will use a controller
120
- # component, which is a card view container which shows
121
- # one view at a time. this is useful for having an application
122
- # with several 'pages' so to speak
123
- useController: true
124
-
125
- # If your Application does not behave as a Viewport that monopolizes
126
- # its entire element, but instead you wish to render the application
127
- # controller to a specific element, you can specify the css selector of that element.
128
- mainControllerContainer: undefined
129
-
130
- # keyEvents understands the following modifiers:
131
- # - `⇧`, `shift`, `option`, `⌥`, `alt`, `ctrl`, `control`, `command`, and `⌘`.
132
- # The following special keys can be used for shortcuts:
133
- # `backspace`, `tab`, `clear`, `enter`, `return`, `esc`, `escape`, `space`,
134
- # `up`, `down`, `left`, `right`, `home`, `end`, `pageup`, `pagedown`, `del`, `delete`
135
- # and `f1` through `f19`.
136
- #
137
- # **Note**: This requires the keymaster.js library to be loaded. This library is included
138
- # with the bundled dependencies that ship with Luca.
139
- #
140
- # Example:
141
- # application.configuration
142
- # keyEvents:
143
- # '⌘+r, ctrl+r': "keyHandlerFunction"
144
- # keyHandlerFunction: -> alert 'something + r was pressed'
145
- keyEvents: {}
146
-
147
- # create getter methods for the various roles in the application's components on the application itself.
148
- createRoleBasedGetters: false
149
-
150
- # create an instance of Luca.SocketManager which is a Backbone.Events style abstraction that
151
- # sits on top of services like faye, or socket.io
152
- useSocketManager: false
153
- socketManagerOptions: {}
154
-
155
- application.publicMethods
156
- # Creating your Application and all of its components and pages is
157
- # generally as simple as creating an instance of your Application class:
158
- # Luca.onReady ()->
159
- # window.MyApp = new Luca.Application()
160
- # window.MyApp.boot()
161
- initialize: (@options={})->
162
- app = @
163
- appName = @name
164
- alreadyRunning = Luca.getApplication?()
165
-
166
- Luca.Application.registerInstance(@)
167
-
168
- Luca.concerns.StateModel.__initializer.call(@)
169
-
170
- # The Collection Manager is responsible for managing instances
171
- # of collections, usually to guarantee only a single collection is
172
- # instantiated for a given resource, to maintain 'authoritative'
173
- # representations of models.
174
- @setupCollectionManager()
175
-
176
- # Socket Manager provides a bridge between remote pub/sub providers and
177
- # the backbone.events interface on various components in the system.
178
- @setupSocketManager()
179
-
180
- Luca.containers.Viewport::initialize.apply @, arguments
181
-
182
- # The Controller is the piece of the application that handles showing
183
- # and hiding 'pages' of the app. The Application has a navigate_to
184
- # method which delegates to the controller, and allows you to navigate
185
- # to a given page, or component, by its name. The controller integrates
186
- # with the state machine of the application
187
- @setupMainController() if @useController is true
188
-
189
- # we will render when all of the various components
190
- # which handle our data dependencies determine that
191
- # we are ready
192
- @defer(()-> app.render()).until(@, "ready")
193
-
194
- # Set up the Backbone Router
195
- @setupRouter()
196
-
197
- # the keyHandler allows us to specify
198
- # keyEvents on our application with an API very similar
199
- # to the DOM events API for Backbone.View
200
- #
201
- # Example:
202
- #
203
- # keyEvents:
204
- # meta:
205
- # forwardslash: "altSlashHandler"
206
- if (@useKeyHandler is true or @useKeyRouter is true) and @keyEvents?
207
- @setupKeyHandler()
208
-
209
- # if the application is a plugin designed to modify the behavior
210
- # of another app, then don't claim ownership. otherwise the most common
211
- # use-case is that there will be one application instance
212
- unless @plugin is true or alreadyRunning
213
- Luca.getApplication = (name)=>
214
- return app unless name?
215
- Luca.Application.instances[ name ]
216
-
217
- if @autoBoot
218
- if Luca.util.resolve(@name)
219
- throw "Attempting to override window.#{ @name } when it already exists"
220
-
221
- $ ->
222
- window[ appName ] = app
223
- app.boot()
224
-
225
- Luca.trigger "application:available", @
226
-
227
- # @activeView() returns a reference to the instance of the view
228
- # which is currently monopolizing the viewport. In an application
229
- # which uses a controller hierarchy, it will be the last controller
230
- # has activated one of its pages.
231
- activeView: ()->
232
- if active = @activeSubSection()
233
- @view( active )
234
- else
235
- @view( @activeSection() )
236
-
237
- # Returns the name of the active component on the main controller
238
- activeSection: ()->
239
- @get("active_section")
240
-
241
- # Returns the name of the active component on the nested controllers
242
- # on the main controller, if there is one. These get set on the
243
- # state machine in response to card switch events on the controller component
244
- activeSubSection: ()->
245
- @get("active_sub_section")
246
-
247
- activePages: ()->
248
- console.log "This method will be getting removed in Luca 1.0"
249
- @$('.luca-controller').map (index,element)=> $(element).data('active-section')
250
-
251
- # boot should trigger the ready event, which will call the initial call
252
- # to render() your application, which will have a cascading effect on every
253
- # subcomponent in the view, recursively rendering everything which is set
254
- # to automatically render (i.e. any non-deferrable components ).
255
- #
256
- # you should use boot to fire up any dependent collections, manager, any
257
- # sort of data processing, whatever your application requires to run outside
258
- # of the views
259
- boot: ()->
260
- @trigger "ready"
261
- for service in [@collectionManager, @socket, @router]
262
- service?.trigger("ready")
263
-
264
- # delegate to the collection manager's get or create function.
265
- # use App.collection() to create or access existing collections
266
- collection: ()->
267
- @collectionManager.getOrCreate.apply(@collectionManager, arguments)
268
-
269
- # Get an attribute from our internal state machine
270
- get: (attribute)->
271
- @state.get(attribute)
272
-
273
- # Set an attribute on our internal state machine
274
- set: (attribute, value, options)->
275
- @state.set.apply(@state, arguments)
276
-
277
- # Access a named view by its @name property.
278
- view: (name)->
279
- Luca.cache(name)
280
-
281
- # delegate to the main controller so that we can switch the active section
282
- # easily directly from the application. If passed a callback, this function
283
- # will get called in the context of the activated component. This method is useful
284
- # inside of custom route handlers if you are manually defining them on a `Backbone.Router`
285
- # instead of using the built in `@routes` helper.
286
- navigate_to: (component_name, callback)->
287
- @getMainController().navigate_to(component_name, callback)
288
-
289
- application.privateMethods
290
- # Any time the Application's main controller changes its active page
291
- # we track the name of that page ( aka section ) on our state machine.
292
- # If the active page on the main controller is another controller component,
293
- # then we will track that controller's active component as our active sub section.
294
- setupControllerBindings: ()->
295
- app = @
296
- # any time the main controller card switches we should track
297
- # the active card on the global state chart
298
- @getMainController()?.bind "after:card:switch", (previous,current)=>
299
- @state.set(active_section:current.name)
300
- app.trigger "controller:change", previous.name, current.name
301
-
302
- # any time the card switches on one of the sub controllers
303
- # then we should track the active sub section on the global state chart
304
- @getMainController()?.each (component)=>
305
- type = component.type || component.ctype
306
- if type.match(/controller$/)
307
- component.bind "after:card:switch", (previous,current)=>
308
- @state.set(active_sub_section:current.name)
309
- app.trigger "action:change", previous.name, current.name
310
-
311
- # A typical structure for a Luca.Application is that it will act as a `Viewport` which
312
- # monopolizes the entire top level element in your dom ( either the body tag, or a top
313
- # level element just underneath it) This `Viewport` is an abstract element where we can
314
- # setup global event bindings, like keyBindings and such. The `Viewport` will generally
315
- # contain a `Luca.components.Controller` instance called "main_controller" that is responsible
316
- # for displaying the active page for a given route.
317
- setupMainController: ()->
318
- if @useController is true
319
- definedComponents = @components || []
320
- base =
321
- type: 'controller'
322
- name: "main_controller"
323
- role: "main_controller"
324
- components: definedComponents
325
-
326
- if @mainControllerContainer?
327
- _.extend(base, container: @mainControllerContainer)
328
-
329
- @components = [base]
330
-
331
- @getMainController = ()=>
332
- @findComponentByRole('main_controller')
333
-
334
- @defer( @setupControllerBindings, false ).until("after:components")
335
-
336
- setupCollectionManager: ()->
337
- return unless @useCollectionManager is true
338
-
339
- return if @collectionManager? and @collectionManager?.get?
340
-
341
- if _.isString( @collectionManagerClass )
342
- @collectionManagerClass = Luca.util.resolve( @collectionManagerClass )
343
-
344
- collectionManagerOptions = @collectionManagerOptions || {}
345
-
346
- # if the collectionManager property is present, and it
347
- # isn't a reference to a collection manager instance, then
348
- # it is being used as a configuration hash for when we do create
349
- # the collection manager. so let's stash it.
350
- if _.isObject(@collectionManager) and not _.isFunction( @collectionManager?.get )
351
- collectionManagerOptions = @collectionManager
352
- @collectionManager = undefined
353
-
354
- # if the collection manager property is a string, then it is a
355
- # reference to a name of a collection manager to use. so let's
356
- # stash it
357
- if _.isString(@collectionManager)
358
- collectionManagerOptions =
359
- name: @collectionManager
360
-
361
-
362
- # let's try and get the collection manager by name if we can
363
- @collectionManager = Luca.CollectionManager.get?( collectionManagerOptions.name )
364
-
365
- # if we can't, then we will have to create one ourselves
366
- unless _.isFunction(@collectionManager?.get)
367
- collectionManagerOptions.autoStart = false
368
- @collectionManager = new @collectionManagerClass( collectionManagerOptions )
369
-
370
- # If our application is configured with a `@socketManagerOptions` property,
371
- # it will create a socket manager instance for us automatically. It won't
372
- # start the socket manager process until the `@boot()` method is called on the application.
373
- setupSocketManager: ()->
374
- return if _.isEmpty(@socketManagerOptions)
375
- _.extend(@socketManagerOptions, autoStart: false)
376
-
377
- @socket = new Luca.SocketManager(@socketManagerOptions)
378
-
379
- # Sets up an instance of the Backbone.Router, and sets up the
380
- # call to start the history tracking API once the appropriate
381
- # application events have been fired.
382
- setupRouter: ()->
383
- return if not @router? and not @routes?
384
-
385
- routerClass = Luca.Router
386
- routerClass = Luca.util.resolve(@router) if _.isString(@router)
387
-
388
- routerConfig = routerClass.prototype
389
- routerConfig.routes ||= {}
390
- routerConfig.app = @
391
-
392
- if _.isObject( @routes )
393
- for routePattern, endpoint of @routes
394
- if endpoint.match(/\ /)
395
- [page, action] = endpoint.split(' ')
396
- else if endpoint.match(/\#/)
397
- [page, action] = endpoint.split('#')
398
-
399
- fn = _.uniqueId(page)
400
- routerConfig[fn] = Luca.Application.routeTo(page).action(action)
401
- routerConfig.routes[ routePattern ] = fn
402
-
403
- @router = new routerClass(routerConfig)
404
-
405
- # if this application has a router associated with it
406
- # then we need to start backbone history on a certain event.
407
- # you can control which by setting the @startHistoryOn property
408
- if @router and @autoStartHistory
409
- @autoStartHistory = "before:render" if @autoStartHistory is true
410
- @defer( Luca.Application.startHistory, false).until(@, @autoStartHistory)
411
-
412
- # The default implementation of setupKeyHandler is kept around for backward
413
- # compatibility purposes. In Luca 1.0 we will be using keymaster.js for our
414
- # key binding setup.
415
- setupKeyHandler: ()->
416
- return unless @keyEvents
417
-
418
- @keyEvents.control_meta ||= {}
419
-
420
- # allow for both meta_control, control_meta for the combo
421
- _.extend(@keyEvents.control_meta, @keyEvents.meta_control) if @keyEvents.meta_control
422
-
423
- handler = _.bind(@keyHandler, @)
424
-
425
- for keyEvent in (@keypressEvents || ["keydown"])
426
- $( document ).on( keyEvent, handler )
427
-
428
- application.classMethods
429
- instances:{}
430
-
431
- # An application inspection helper, it describes the structure of this application's
432
- # controlled components. For an application that consists of multiple nested controllers
433
- # it will recursively walk each controller and build a tree of the various pages / controlers.
434
- pageHierarchy: ()->
435
- app = Luca()
436
- mainController = app.getMainController()
437
-
438
- getTree = (node)->
439
- return {} unless node.components? or node.pages?
440
-
441
- # recursively walks the pages on a controller
442
- _( node.components || node.pages ).reduce (memo, page)->
443
- memo[ page.name ] = page.name
444
- memo[ page.name ] = getTree(page) if page.navigate_to?
445
- memo
446
- , {}
447
-
448
- getTree( mainController )
449
-
450
- # Registers this instance of the Luca.Appliction
451
- # so that it is available via the Luca() helper, or through
452
- # a call to Luca.Application.get().
453
- registerInstance: (app)->
454
- Luca.Application.instances[ app.name ] = app
455
-
456
- # If the keymaster library is present, swap out the
457
- # setupKeyHandler method with something which will enable
458
- # keymaster support instead of our legacy system.
459
- checkForKeymaster: ()->
460
- if window?.key?.noConflict
461
- Luca.key = window.key.noConflict()
462
-
463
- Luca.Application::setupKeyHandler = ()->
464
- return unless @keyEvents
465
- Luca.util.setupKeymaster(@keyEvents, "all").on(@)
466
-
467
- # This is used internally by the Application as it sets up
468
- # the @routes property and uses it to configure the Luca.Router
469
- # instance for your app. It allows you to specify the page you want
470
- # to monopolize the viewport in your application by name, and regardless
471
- # of how deeply nested that page may be among your controllers, it will know
472
- # what to do.
473
- routeTo: (pages...)->
474
- last = _( pages ).last()
475
- first = _( pages ).first()
476
-
477
- callback = undefined
478
- specifiedAction = undefined
479
-
480
- routeHelper = (args...)->
481
- path = @app || Luca()
482
- index = 0
483
-
484
- # we can specify a page by name, and not have to know its full path.
485
- if pages.length is 1 and target = Luca(first)
486
- pages = target.controllerPath()
487
-
488
- # when we do know the full path
489
- for page in pages when _.isString(page)
490
- nextItem = pages[++index]
491
- target = Luca(page)
492
-
493
- if page is last
494
- if specifiedAction? and not target[specifiedAction]? and not target.routeHandler?
495
- console.log "You specified a component action to call when a route matches, but it does not exist on the component"
496
-
497
- callback = if specifiedAction? and target[ specifiedAction ]?
498
- _.bind(target[ specifiedAction ], target)
499
- else if target.routeHandler?
500
- target.routeHandler
501
-
502
- callback ||= if _.isFunction(nextItem)
503
- _.bind(nextItem, target)
504
- else if _.isObject(nextItem)
505
- if action = nextItem.action and target[action]?
506
- _.bind(target[action], target)
507
-
508
- path = path.navigate_to page, ()->
509
- callback?.apply(target, args)
510
-
511
- routeHelper.action = (action)->
512
- specifiedAction = action
513
- routeHelper
514
-
515
- routeHelper
516
-
517
- # Public: you can override Luca.Application.startHistory to
518
- # modify how Backbone.history.start is called. This will get called
519
- # by the Application instance in response to the @autoStartHistory property.
520
- startHistory: ()->
521
- Backbone.history.start
522
- pushState: @pushState
523
- rootUrl: @rootUrl
524
- silent: @startHistorySilently
525
-
526
- application.afterDefinition ()->
527
- Luca.routeHelper = Luca.Application.routeTo
528
- Luca.Application.checkForKeymaster()
529
-
530
- application.register()