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
data/src/define.coffee ADDED
@@ -0,0 +1,110 @@
1
+ # Component Definition Helpers
2
+ #
3
+ #
4
+ # We have customized the core Backbone.extend process to use a slightly
5
+ # different syntax, which allows us to intercept the component definition at
6
+ # various points, and maintain information about classes being defined, and
7
+ # the relationships between inherited classes, etc.
8
+
9
+ # _.def, or Luca.define returns a chainable object which allows you to define
10
+ # your components with a readable syntax. For example:
11
+
12
+ # _.def("Luca.View").extends("Backbone.View").with the_good:"shit"
13
+ # _.def("MyView").extends("Luca.View").with the_custom:"shit"
14
+
15
+ Luca.define = (componentName)->
16
+ new DefineProxy(componentName)
17
+
18
+ Luca.component = Luca.define
19
+
20
+ # The define proxy chain sets up a call to Luca.extend, which is a wrapper around Luca and Backbone component class' extend function.
21
+ class DefineProxy
22
+ constructor:(componentName)->
23
+ @namespace = Luca.util.namespace()
24
+ @componentId = @componentName = componentName
25
+
26
+ if componentName.match(/\./)
27
+ @namespaced = true
28
+ parts = componentName.split('.')
29
+ @componentId = parts.pop()
30
+ @namespace = parts.join('.')
31
+
32
+ # automatically add the namespace to the namespace registry
33
+ Luca.registry.addNamespace( parts.join('.') )
34
+
35
+ # allow for specifying the namespace
36
+ in: (@namespace)-> @
37
+
38
+ # allow for multiple ways of saying the same thing for readability purposes
39
+ from: (@superClassName)-> @
40
+ extends: (@superClassName)-> @
41
+ extend: (@superClassName)-> @
42
+
43
+ # an alias for with, or a readability helper in multi-line definitions
44
+ enhance: (properties)->
45
+ return @with(properties) if properties?
46
+ @
47
+
48
+ # which properties, methods, etc will you be extending the base class with?
49
+ with: (properties)->
50
+ at = if @namespaced
51
+ Luca.util.resolve(@namespace, (window || global))
52
+ else
53
+ (window||global)
54
+
55
+ # automatically create the namespace
56
+ if @namespaced and not at?
57
+ eval("(window||global).#{ @namespace } = {}")
58
+ at = Luca.util.resolve(@namespace,(window || global))
59
+
60
+ at[@componentId] = Luca.extend(@superClassName,@componentName, properties)
61
+
62
+ if Luca.autoRegister is true
63
+ componentType = "view" if Luca.isViewPrototype( at[@componentId] )
64
+
65
+ if Luca.isCollectionPrototype( at[@componentId] )
66
+ Luca.Collection.namespaces ||= []
67
+ Luca.Collection.namespaces.push( @namespace )
68
+ componentType = "collection"
69
+
70
+ componentType = "model" if Luca.isModelPrototype( at[@componentId] )
71
+
72
+ # automatically register this with the component registry
73
+ Luca.register( _.string.underscored(@componentId), @componentName, componentType)
74
+
75
+ at[@componentId]
76
+
77
+ # The last method of the DefineProxy chain is always going to result in
78
+ # a call to Luca.extend. Luca.extend wraps the call to Luca.View.extend,
79
+ # or Backbone.Collection.extend, and accepts the names of the extending,
80
+ # and extended classes as strings. This allows us to maintain information
81
+ # and references to the classes and their prototypes, mainly for the purposes
82
+ # of introspection and development tools
83
+ Luca.extend = (superClassName, childName, properties={})->
84
+ superClass = Luca.util.resolve( superClassName, (window || global) )
85
+
86
+ unless _.isFunction(superClass?.extend)
87
+ throw "#{ superClassName } is not a valid component to extend from"
88
+
89
+ properties.displayName = childName
90
+
91
+ properties._superClass = ()->
92
+ superClass.displayName ||= superClassName
93
+ superClass
94
+
95
+ properties._super = (method, context, args)->
96
+ @_superClass().prototype[method]?.apply(context, args)
97
+
98
+ definition = superClass.extend(properties)
99
+
100
+ # _.def("MyView").extends("View").with
101
+ # include: ['Luca.Events']
102
+ if _.isArray( properties?.include )
103
+ for mixin in properties.include
104
+ mixin = Luca.util.resolve(mixin) if _.isString(mixin)
105
+ _.extend(definition::, mixin)
106
+
107
+ definition
108
+
109
+ _.mixin
110
+ def: Luca.define
@@ -1,112 +1,74 @@
1
- lucaUtilityHelper = (payload, args...)->
2
- if arguments.length is 0
3
- return _( Luca.Application.instances ).values()?[0]
4
-
1
+ # the Luca() browser utility function is meant to be a smart wrapper around various
2
+ # types of input which will return what the developer would expect given the
3
+ # context it is used.
4
+ (window || global).Luca = (payload, args...)->
5
5
  if _.isString(payload) and result = Luca.cache(payload)
6
6
  return result
7
7
 
8
8
  if _.isString(payload) and result = Luca.find(payload)
9
9
  return result
10
10
 
11
- if _.isString(payload) and result = Luca.registry.find(payload)
12
- return result
13
-
14
- if payload instanceof jQuery and result = Luca.find(payload)
15
- return result
16
-
17
11
  if _.isObject(payload) and payload.ctype?
18
12
  return Luca.util.lazyComponent( payload )
19
13
 
14
+ if _.isObject(payload) and payload.defines and payload.extends
15
+ definition = payload.defines
16
+ inheritsFrom = payload.extends
17
+
20
18
  if _.isFunction( fallback = _(args).last() )
21
19
  return fallback()
22
20
 
23
- (window || global).Luca = ()-> lucaUtilityHelper.apply(@, arguments)
24
-
25
- Luca.VERSION = '0.9.9'
26
-
27
21
  _.extend Luca,
22
+ VERSION: "0.9.42"
28
23
  core: {}
29
- collections: {}
30
24
  containers: {}
31
25
  components: {}
32
- models: {}
33
- concerns: {}
26
+ modules: {}
34
27
  util: {}
35
28
  fields: {}
36
29
  registry:{}
37
30
  options: {}
38
- config: {}
39
- logger: (trackerMessage)->
40
- (args...)->
41
- args.unshift( trackerMessage )
42
- console.log(@, args)
43
-
44
- getHelper: ()->
45
- ()-> lucaUtilityHelper.apply(@, arguments)
46
31
 
47
32
  # for triggering / binding to component definitions
48
33
  _.extend Luca, Backbone.Events
49
34
 
50
- Luca.setupCollectionSpace = (options={})->
51
- {baseParams, modelBootstrap} = options
52
-
53
- if baseParams?
54
- Luca.Collection.baseParams( baseParams )
55
- else
56
- Luca.warn('You should remember to set the base params for Luca.Collection class. You can do this by defining a property or function on Luca.config.baseParams')
57
-
58
- if modelBootstrap?
59
- Luca.Collection.bootstrap( modelBootstrap )
60
- else
61
- Luca.warn("You should remember to set the model bootstrap location for Luca.Collection. You can do this by defining a property or function on Luca.config.modelBootstrap")
62
-
63
- # Creates a basic Namespace for you to begin defining
64
- # your application and all of its components.
65
- Luca.initialize = (namespace, options={})->
66
- Luca.namespace = namespace.toLowerCase()
67
- existing = Luca.util.resolve(namespace, window || global) || {}
68
-
69
- _.defaults existing,
70
- views: {}
71
- collections: {}
72
- models: {}
73
- components: {}
74
- lib: {}
75
- util: {}
76
- concerns: {}
77
- register: ()->
78
- Luca.register.apply(@, arguments)
79
- onReady: ()->
80
- Luca.onReady.apply(@, arguments)
81
- getApplication: ()->
82
- Luca.getApplication?.apply(@, arguments)
83
- getCollectionManager: ()->
84
- Luca.CollectionManager.get?.apply(@, arguments)
85
- route: Luca.routeHelper
86
-
87
-
88
- object = {}
89
- object[ namespace ] = _.defaults(Luca.getHelper(), existing)
90
-
91
- _.extend(Luca.config, options)
92
- _.extend (window || global), object
93
-
94
- Luca.lastNamespace = namespace
95
- Luca.concern.namespace "#{ namespace }.concerns"
96
- Luca.registry.namespace "#{ namespace }.views"
97
- Luca.Collection.namespace "#{ namespace }.collections"
98
-
99
- Luca.on "ready", ()->
100
- Luca.setupCollectionSpace(options)
101
-
102
- Luca.onReady = (callback)->
103
- Luca.define.close()
104
- Luca.trigger("ready")
105
-
106
- $ -> callback.apply(@, arguments)
107
-
108
- Luca.find = (el)->
109
- Luca( $(el).data('luca-id') )
35
+ # When using Luca.define() should we automatically register
36
+ # the component with the registry?
37
+ Luca.autoRegister = true
38
+
39
+ # if developmentMode is true, you have access to some neat development tools
40
+ Luca.developmentMode = false
41
+
42
+ # The Global Observer is very helpful in development
43
+ # it observes every event triggered on every view, collection, model
44
+ # and allows you to inspect / respond to them. Use in production
45
+ # may have performance impacts which has not been tested
46
+ Luca.enableGlobalObserver = false
47
+
48
+ # let's use the Twitter 2.0 Bootstrap Framework
49
+ # for what it is best at, and not try to solve this
50
+ # problem on our own!
51
+ Luca.enableBootstrap = true
52
+
53
+ Luca.keys =
54
+ ENTER: 13
55
+ ESCAPE: 27
56
+ KEYLEFT: 37
57
+ KEYUP: 38
58
+ KEYRIGHT: 39
59
+ KEYDOWN: 40
60
+ SPACEBAR: 32
61
+ FORWARDSLASH: 191
62
+
63
+ # build a reverse map
64
+ Luca.keyMap = _( Luca.keys ).inject (memo, value, symbol)->
65
+ memo[value] = symbol.toLowerCase()
66
+ memo
67
+ , {}
68
+
69
+ Luca.find = ()->
70
+ # TODO Implement
71
+ undefined
110
72
 
111
73
  Luca.supportsEvents = Luca.supportsBackboneEvents = (obj)->
112
74
  Luca.isComponent(obj) or (_.isFunction( obj?.trigger ) or _.isFunction(obj?.bind))
@@ -142,29 +104,75 @@ Luca.isCollectionPrototype = (obj)->
142
104
  obj? and obj::? and !Luca.isModelPrototype(obj) and obj::reset? and obj::select? and obj::reject?
143
105
 
144
106
  Luca.inheritanceChain = (obj)->
145
- Luca.parentClasses(obj)
146
-
107
+ _( Luca.parentClasses(obj) ).map (className)-> Luca.util.resolve(className)
108
+
147
109
  Luca.parentClasses = (obj)->
148
110
  list = []
149
111
 
150
112
  if _.isString(obj)
151
113
  obj = Luca.util.resolve(obj)
152
114
 
153
- metaData = obj.componentMetaData?()
154
- metaData ||= obj::componentMetaData?()
115
+ list.push( obj.displayName || obj::?.displayName || Luca.parentClass(obj) )
116
+
117
+ classes = until not Luca.parentClass(obj)?
118
+ obj = Luca.parentClass(obj)
119
+
120
+ list = list.concat(classes)
155
121
 
156
- list = metaData?.classHierarchy() || [obj.displayName || obj::displayName]
122
+ _.uniq list
123
+
124
+ Luca.parentClass = (obj)->
125
+ list = []
157
126
 
158
- Luca.parentClass = (obj, resolve=true)->
159
127
  if _.isString( obj )
160
128
  obj = Luca.util.resolve(obj)
161
129
 
162
- parent = obj.componentMetaData?()?.meta["super class name"]
163
- parent ||= obj::componentMetaData?()?.meta["super class name"]
130
+ if Luca.isComponent(obj)
131
+ obj.displayName
132
+
133
+ else if Luca.isComponentPrototype(obj)
134
+ obj::_superClass?()?.displayName
135
+
136
+ # This is a convenience method for accessing the templates
137
+ # available to the client side app, either the ones which ship with Luca
138
+ # available in Luca.templates ( these take precedence ) or
139
+ # the app's own templates which are usually available in JST
140
+
141
+ # optionally, passing in variables will compile the template for you, instead
142
+ # of returning a reference to the function which you would then call yourself
143
+ Luca.template = (template_name, variables)->
144
+ window.JST ||= {}
145
+
146
+ if _.isFunction(template_name)
147
+ return template_name(variables)
148
+
149
+ luca = Luca.templates?[ template_name ]
150
+ jst = JST?[ template_name ]
151
+
152
+ unless luca? or jst?
153
+ needle = new RegExp("#{ template_name }$")
164
154
 
165
- parent || obj.displayName || obj.prototype?.displayName
155
+ luca = _( Luca.templates ).detect (fn,template_id)->
156
+ needle.exec( template_id )
166
157
 
167
- if resolve then Luca.util.resolve(parent) else parent
158
+ jst = _( JST ).detect (fn,template_id)->
159
+ needle.exec( template_id )
160
+
161
+ throw "Could not find template named #{ template_name }" unless luca || jst
162
+
163
+ template = luca || jst
164
+
165
+ return template(variables) if variables?
166
+
167
+ template
168
+
169
+ Luca.available_templates = (filter="")->
170
+ available = _( Luca.templates ).keys()
171
+
172
+ if filter.length > 0
173
+ _( available ).select (tmpl)-> tmpl.match(filter)
174
+ else
175
+ available
168
176
 
169
177
 
170
178
  UnderscoreExtensions =
@@ -181,9 +189,6 @@ UnderscoreExtensions =
181
189
  # this function will ensure a function gets called at least once
182
190
  # afrer x delay. by setting defaults, we can use this on backbone
183
191
  # view definitions
184
- #
185
- # Note: I am not sure if this is the same as _.debounce or not. I will need
186
- # to look into it
187
192
  idle: (code, delay=1000)->
188
193
  delay = 0 if window.DISABLE_IDLE
189
194
  handle = undefined
data/src/index.coffee ADDED
@@ -0,0 +1,23 @@
1
+ #= require ./util
2
+ #= require_tree ./plugins
3
+ #= require ./define
4
+
5
+ #= require_tree ./modules
6
+
7
+ #= require ./core/registry
8
+ #= require ./core/observer
9
+ #= require ./core/view
10
+ #= require ./core/model
11
+ #= require ./core/collection
12
+ #= require ./core/panel
13
+ #= require ./core/field
14
+ #= require ./core/container
15
+
16
+ #= require_tree ./managers
17
+
18
+ #= require ./containers/split_view
19
+ #= require ./containers/column_view
20
+ #= require_tree ./containers
21
+
22
+ #= require ./components/template
23
+ #= require_tree ./components
@@ -1,9 +1,10 @@
1
1
  class Luca.CollectionManager
2
2
  name: "primary"
3
3
 
4
+ collectionNamespace: Luca.Collection.namespace
5
+
4
6
  __collections: {}
5
7
 
6
- autoStart: true
7
8
  relayEvents: true
8
9
 
9
10
  constructor: (@options={})->
@@ -14,8 +15,6 @@ class Luca.CollectionManager
14
15
  if existing = Luca.CollectionManager.get?(@name)
15
16
  throw 'Attempt to create a collection manager with a name which already exists'
16
17
 
17
- @collectionNamespace ||= Luca.util.read( Luca.Collection.namespace )
18
-
19
18
  Luca.CollectionManager.instances ||= {}
20
19
 
21
20
  _.extend @, Backbone.Events
@@ -30,9 +29,7 @@ class Luca.CollectionManager
30
29
  @state = new Luca.Model()
31
30
 
32
31
  if @initialCollections
33
- @on "ready", handleInitialCollections, @
34
-
35
- @trigger "ready" if @autoStart is true
32
+ handleInitialCollections.call(@)
36
33
 
37
34
  add: (key, collection)->
38
35
  @currentScope()[ key ] ||= collection
@@ -48,11 +45,7 @@ class Luca.CollectionManager
48
45
  CollectionClass ||= guessCollectionClass.call(@, key)
49
46
  collectionOptions.name = "" if collectionOptions.private
50
47
 
51
- try
52
- collection = new CollectionClass(initialModels,collectionOptions)
53
- catch e
54
- console.log "Error creating collection", CollectionClass, collectionOptions, key
55
- throw(e)
48
+ collection = new CollectionClass(initialModels,collectionOptions)
56
49
 
57
50
  @add(key, collection)
58
51
 
@@ -88,6 +81,7 @@ class Luca.CollectionManager
88
81
 
89
82
  collectionCountDidChange: ()->
90
83
  if @allCollectionsLoaded()
84
+ # for backwards compat
91
85
  @trigger "all_collections_loaded"
92
86
  @trigger "initial:load"
93
87
 
@@ -103,33 +97,13 @@ class Luca.CollectionManager
103
97
  private: (key, collectionOptions={}, initialModels=[])->
104
98
  @create(key,collectionOptions,initialModels,true)
105
99
 
106
- #### Helpers
107
-
108
- Luca.CollectionManager.isRunning = ()->
109
- _.isEmpty( Luca.CollectionManager.instances ) isnt true
110
-
111
100
  Luca.CollectionManager.destroyAll = ()->
112
101
  Luca.CollectionManager.instances = {}
113
102
 
114
- Luca.CollectionManager.loadCollectionsByName = (set, callback)->
115
- for name in set
116
- if collection = @getOrCreate(name)
117
- collection.on "reset", ()->
118
- callback(collection)
119
- collection.unbind("reset", @)
120
-
121
- collection.fetch()
122
-
123
- #### Private Methods
124
103
  guessCollectionClass = (key)->
125
104
  classified = Luca.util.classify( key )
126
-
127
- if _.isString( @collectionNamespace )
128
- @collectionNamespace = Luca.util.resolve(@collectionNamespace)
129
-
130
105
  # support our naming convention of Books
131
106
  guess = (@collectionNamespace || (window || global) )[ classified ]
132
-
133
107
  # support naming covention like BooksCollection
134
108
  guess ||= (@collectionNamespace || (window || global) )[ "#{classified}Collection" ]
135
109
 
@@ -146,22 +120,24 @@ guessCollectionClass = (key)->
146
120
  loadInitialCollections = ()->
147
121
  collectionDidLoad = (collection) =>
148
122
  current = @state.get("loaded_collections_count")
123
+
149
124
  @state.set("loaded_collections_count", current + 1)
150
125
  @trigger "collection_loaded", collection.name
151
126
  collection.unbind "reset"
152
127
 
153
- set = @initialCollections
154
- Luca.CollectionManager.loadCollectionsByName.call(@, set, collectionDidLoad)
155
-
128
+ _(@initialCollections).each (name) =>
129
+ collection = @getOrCreate(name)
130
+ collection.once "reset", ()->
131
+ collectionDidLoad(collection)
132
+ collection.fetch()
156
133
 
157
134
  handleInitialCollections = ()->
158
135
  @state.set({loaded_collections_count: 0, collections_count: @initialCollections.length })
159
- @state.bind "change:loaded_collections_count", ()=>
160
- @collectionCountDidChange()
136
+ @state.bind "change:loaded_collections_count", ()=> @collectionCountDidChange()
161
137
 
162
138
  if @useProgressLoader
163
139
  @loaderView ||= new Luca.components.CollectionLoaderView(manager: @,name:"collection_loader_view")
164
140
 
165
141
  loadInitialCollections.call(@)
166
142
 
167
- @
143
+ @
@@ -0,0 +1,54 @@
1
+ # Luca.SocketManager is an abstraction
2
+ # around various websocket services such as
3
+ # faye.js, socket.io, now.js, etc.
4
+ #
5
+ # It provides a common interface for adding
6
+ # push / async functionality to Collections,
7
+ # Models, and the like, regardless of the
8
+ # transport mechanism used.
9
+ #
10
+ # Simply bind to it, and any message that comes
11
+ # across the channel you subscribe to, will be
12
+ # bubbled up as a Backbone.Event with the message
13
+ # contents as your argument
14
+ class Luca.SocketManager
15
+ constructor: (@options={})->
16
+ _.extend Backbone.Events
17
+
18
+ @loadTransport()
19
+
20
+ connect: ()->
21
+ switch @options.provider
22
+ when "socket.io"
23
+ @socket = io.connect( @options.socket_host )
24
+ when "faye.js"
25
+ @socket = new Faye.Client( @options.socket_host )
26
+
27
+ #### Transport Loading and Configuration
28
+ #
29
+ # Luca wraps several popular client side socket abstractions
30
+ # such as socket.io or faye.js ( more coming soon )
31
+ #
32
+ # it provides a common interface on top of these and just
33
+ # treats them as Backbone.Events which you bind to like you
34
+ # would on any other Backbone class
35
+
36
+ transportLoaded: ()-> @connect()
37
+
38
+ transport_script: ()->
39
+ switch @options.provider
40
+ when "socket.io" then "#{ @options.transport_host }/socket.io/socket.io.js"
41
+ when "faye.js" then "#{ @options.transport_host }/faye.js"
42
+
43
+ loadTransport: ()->
44
+ script = document.createElement 'script'
45
+ script.setAttribute "type", "text/javascript"
46
+ script.setAttribute "src", @transport_script()
47
+ script.onload = @transportLoaded
48
+
49
+ if Luca.util.isIE()
50
+ script.onreadystatechange = ()=>
51
+ if script.readyState is "loaded"
52
+ @transportLoaded()
53
+
54
+ document.getElementsByTagName('head')[0].appendChild script
@@ -1,14 +1,13 @@
1
- # TODO
2
- #
3
- # This is horrendous code. I need to replace it ASAP
4
- Luca.concerns.Deferrable =
1
+ # TODO THis module is going to be deprecated as it has been gradually gut over time
2
+ Luca.modules.Deferrable =
5
3
  configure_collection: (setAsDeferrable=true)->
6
4
  return unless @collection
7
5
 
8
6
  if _.isString( @collection ) and collectionManager = Luca.CollectionManager?.get()
9
7
  @collection = collectionManager.getOrCreate(@collection)
10
8
 
11
- if _.isObject(@collection) and not Luca.isBackboneCollection(@collection)
9
+ # if there is already an instantiated backbone collection don't do anything
10
+ unless @collection and _.isFunction( @collection.fetch ) and _.isFunction( @collection.reset )
12
11
  @collection = new Luca.Collection( @collection.initial_set, @collection )
13
12
 
14
13
  if @collection?.deferrable_trigger
@@ -0,0 +1,3 @@
1
+ Luca.modules.GridLayout =
2
+ _included: (view, module)->
3
+ # implement
@@ -1,30 +1,18 @@
1
- Luca.concerns.LoadMaskable =
2
- __initializer: ()->
3
- return if @loadMask is false or not @loadMask?
1
+ Luca.modules.LoadMaskable =
2
+ _included: (self, module)->
3
+ _.bindAll self, "applyLoadMask", "disableLoadMask"
4
4
 
5
5
  if @loadMask is true
6
- @loadMask =
7
- enableEvent: "enable:loadmask"
8
- disableEvent: "disable:loadmask"
6
+ @defer ()=>
7
+ @$el.addClass('with-mask')
9
8
 
10
- @on "collection:fetch", ()=> @trigger "enable:loadmask"
11
- @on "collection:reset", ()=> @trigger "disable:loadmask"
9
+ if @$('.load-mask').length is 0
10
+ @loadMaskTarget().prepend Luca.template(@loadMaskTemplate, @)
11
+ @$('.load-mask').hide()
12
+ .until("after:render")
12
13
 
13
- @on "after:render", ()->
14
- @$el.addClass('with-mask')
15
- if @$('.load-mask').length is 0 and @loadMaskTemplate?
16
- @loadMaskTarget().prepend Luca.template(@loadMaskTemplate, @)
17
- @$('.load-mask').hide()
18
- , @
19
-
20
- @on(@loadMask.enableEvent, @applyLoadMask, @)
21
- @on(@loadMask.disableEvent, @applyLoadMask, @)
22
-
23
- showLoadMask: ()->
24
- @trigger("enable:loadmask")
25
-
26
- hideLoadMask: ()->
27
- @trigger("disable:loadmask")
14
+ @on (@loadmaskEnableEvent || "enable:loadmask"), @applyLoadMask
15
+ @on (@loadmaskDisableEvent || "disable:loadmask"), @applyLoadMask
28
16
 
29
17
  loadMaskTarget: ()->
30
18
  if @loadMaskEl? then @$(@loadMaskEl) else @$bodyEl()
@@ -0,0 +1,21 @@
1
+ Luca.DevelopmentToolHelpers =
2
+ refreshCode: ()->
3
+ view = @
4
+
5
+ _( @eventHandlerProperties() ).each (prop)->
6
+ view[ prop ] = view.definitionClass()[prop]
7
+
8
+ if @autoBindEventHandlers is true
9
+ @bindAllEventHandlers()
10
+
11
+ @delegateEvents()
12
+
13
+ eventHandlerProperties: ()->
14
+ handlerIds = _( @events ).values()
15
+ _( handlerIds ).select (v)->
16
+ _.isString(v)
17
+
18
+ eventHandlerFunctions: ()->
19
+ handlerIds = _( @events ).values()
20
+ _( handlerIds ).map (handlerId)=>
21
+ if _.isFunction(handlerId) then handlerId else @[handlerId]