luca 0.9.7 → 0.9.8

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 (377) hide show
  1. data/CHANGELOG +38 -0
  2. data/Gemfile +1 -0
  3. data/Gemfile.lock +27 -0
  4. data/README.md +45 -42
  5. data/ROADMAP +6 -29
  6. data/{assets → app/assets}/images/glyphicons-halflings-white.png +0 -0
  7. data/{assets → app/assets}/images/glyphicons-halflings.png +0 -0
  8. data/app/assets/javascripts/luca/basic.coffee +8 -0
  9. data/{src → app/assets/javascripts/luca}/components/application.coffee +153 -40
  10. data/{src → app/assets/javascripts/luca}/components/base_toolbar.coffee +2 -2
  11. data/{src → app/assets/javascripts/luca}/components/collection_loader_view.coffee +0 -0
  12. data/{src → app/assets/javascripts/luca}/components/collection_view.coffee +45 -104
  13. data/app/assets/javascripts/luca/components/controller.coffee +99 -0
  14. data/{src/core/field.coffee → app/assets/javascripts/luca/components/fields/base.coffee} +1 -1
  15. data/{src → app/assets/javascripts/luca}/components/fields/button_field.coffee +1 -2
  16. data/{src → app/assets/javascripts/luca}/components/fields/checkbox_array.coffee +0 -0
  17. data/{src → app/assets/javascripts/luca}/components/fields/checkbox_field.coffee +0 -0
  18. data/{src → app/assets/javascripts/luca}/components/fields/file_upload_field.coffee +0 -0
  19. data/{src → app/assets/javascripts/luca}/components/fields/hidden_field.coffee +0 -0
  20. data/{src → app/assets/javascripts/luca}/components/fields/label_field.coffee +0 -0
  21. data/{src → app/assets/javascripts/luca}/components/fields/select_field.coffee +8 -4
  22. data/{src → app/assets/javascripts/luca}/components/fields/text_area_field.coffee +3 -2
  23. data/{src → app/assets/javascripts/luca}/components/fields/text_field.coffee +2 -3
  24. data/{src → app/assets/javascripts/luca}/components/fields/type_ahead_field.coffee +0 -0
  25. data/{src → app/assets/javascripts/luca}/components/form_button_toolbar.coffee +0 -0
  26. data/{src → app/assets/javascripts/luca}/components/form_view.coffee +111 -44
  27. data/{src → app/assets/javascripts/luca}/components/grid_view.coffee +6 -6
  28. data/{src → app/assets/javascripts/luca}/components/index.coffee +0 -0
  29. data/app/assets/javascripts/luca/components/load_mask.coffee +8 -0
  30. data/app/assets/javascripts/luca/components/multi_collection_view.coffee +92 -0
  31. data/{src → app/assets/javascripts/luca}/components/nav_bar.coffee +5 -1
  32. data/app/assets/javascripts/luca/components/page_controller.coffee +7 -0
  33. data/{src → app/assets/javascripts/luca}/components/pagination_control.coffee +13 -13
  34. data/{src → app/assets/javascripts/luca}/components/record_manager.coffee +0 -0
  35. data/{src → app/assets/javascripts/luca}/components/router.coffee +6 -1
  36. data/app/assets/javascripts/luca/components/table_view.coffee +89 -0
  37. data/{src → app/assets/javascripts/luca}/components/template.coffee +0 -0
  38. data/{src → app/assets/javascripts/luca}/components/toolbar_dialog.coffee +0 -0
  39. data/{src → app/assets/javascripts/luca}/concerns/application_event_bindings.coffee +1 -1
  40. data/app/assets/javascripts/luca/concerns/collection_event_bindings.coffee +44 -0
  41. data/{src → app/assets/javascripts/luca}/concerns/deferrable.coffee +1 -2
  42. data/{src/plugins → app/assets/javascripts/luca/concerns}/development_tool_helpers.coffee +1 -1
  43. data/{src → app/assets/javascripts/luca}/concerns/dom_helpers.coffee +10 -7
  44. data/{src → app/assets/javascripts/luca}/concerns/enhanced_properties.coffee +0 -0
  45. data/app/assets/javascripts/luca/concerns/filterable.coffee +104 -0
  46. data/{src → app/assets/javascripts/luca}/concerns/grid_layout.coffee +0 -0
  47. data/{src → app/assets/javascripts/luca}/concerns/loadmaskable.coffee +17 -11
  48. data/{src → app/assets/javascripts/luca}/concerns/local_storage.coffee +0 -0
  49. data/{src → app/assets/javascripts/luca}/concerns/modal_view.coffee +0 -0
  50. data/{src → app/assets/javascripts/luca}/concerns/model_presenter.coffee +0 -0
  51. data/{src → app/assets/javascripts/luca}/concerns/paginatable.coffee +6 -14
  52. data/app/assets/javascripts/luca/concerns/query_collection_bindings.coffee +46 -0
  53. data/app/assets/javascripts/luca/concerns/sortable.coffee +69 -0
  54. data/app/assets/javascripts/luca/concerns/state_model.coffee +44 -0
  55. data/{src → app/assets/javascripts/luca}/concerns/templating.coffee +4 -1
  56. data/app/assets/javascripts/luca/config.coffee +49 -0
  57. data/{src → app/assets/javascripts/luca}/containers/card_view.coffee +30 -13
  58. data/{src/core → app/assets/javascripts/luca/containers}/container.coffee +57 -18
  59. data/app/assets/javascripts/luca/containers/index.coffee +2 -0
  60. data/{src → app/assets/javascripts/luca}/containers/modal_view.coffee +1 -1
  61. data/{src → app/assets/javascripts/luca}/containers/panel_toolbar.coffee +1 -1
  62. data/{src → app/assets/javascripts/luca}/containers/tab_view.coffee +1 -1
  63. data/{src → app/assets/javascripts/luca}/containers/viewport.coffee +4 -4
  64. data/{src → app/assets/javascripts/luca}/core/collection.coffee +58 -49
  65. data/{src/plugins → app/assets/javascripts/luca/core}/events.coffee +34 -2
  66. data/app/assets/javascripts/luca/core/index.coffee +12 -0
  67. data/{src → app/assets/javascripts/luca}/core/model.coffee +1 -1
  68. data/{src → app/assets/javascripts/luca}/core/observer.coffee +0 -0
  69. data/app/assets/javascripts/luca/core/panel.coffee +112 -0
  70. data/app/assets/javascripts/luca/core/registry/component_definition.coffee +318 -0
  71. data/{src → app/assets/javascripts/luca/core/registry}/concerns.coffee +0 -0
  72. data/app/assets/javascripts/luca/core/registry/index.coffee +4 -0
  73. data/app/assets/javascripts/luca/core/registry/meta_data.coffee +97 -0
  74. data/{src/core → app/assets/javascripts/luca/core/registry}/registry.coffee +10 -6
  75. data/app/assets/javascripts/luca/core/templates.coffee +47 -0
  76. data/{src → app/assets/javascripts/luca}/core/view.coffee +69 -11
  77. data/app/assets/javascripts/luca/dependencies.coffee +7 -0
  78. data/{src/tools → app/assets/javascripts/luca/development}/code_mirror_field.coffee +2 -1
  79. data/{src/tools → app/assets/javascripts/luca/development}/console.coffee +6 -5
  80. data/app/assets/javascripts/luca/development/index.coffee +2 -0
  81. data/{src → app/assets/javascripts/luca}/framework.coffee +74 -90
  82. data/app/assets/javascripts/luca/index.coffee +8 -0
  83. data/{src → app/assets/javascripts/luca}/managers/collection_manager.coffee +16 -7
  84. data/app/assets/javascripts/luca/managers/index.coffee +2 -0
  85. data/app/assets/javascripts/luca/managers/socket_manager.coffee +66 -0
  86. data/{src → app/assets/javascripts/luca}/templates/components/bootstrap_form_controls.jst.ejs +0 -0
  87. data/{src → app/assets/javascripts/luca}/templates/components/collection_loader_view.jst.ejs +0 -0
  88. data/{src → app/assets/javascripts/luca}/templates/components/form_alert.jst.ejs +0 -0
  89. data/{src → app/assets/javascripts/luca}/templates/components/grid_view.jst.ejs +0 -0
  90. data/{src → app/assets/javascripts/luca}/templates/components/grid_view_empty_text.jst.ejs +0 -0
  91. data/{src → app/assets/javascripts/luca}/templates/components/load_mask.jst.ejs +0 -0
  92. data/{src → app/assets/javascripts/luca}/templates/components/nav_bar.jst.ejs +0 -0
  93. data/{src → app/assets/javascripts/luca}/templates/components/pagination.jst.ejs +0 -0
  94. data/{src/templates → app/assets/javascripts/luca/templates/components}/table_view.jst.ejs +0 -0
  95. data/{src → app/assets/javascripts/luca}/templates/containers/basic.jst.ejs +0 -0
  96. data/{src → app/assets/javascripts/luca}/templates/containers/tab_selector_container.jst.ejs +0 -0
  97. data/{src → app/assets/javascripts/luca}/templates/containers/tab_view.jst.ejs +0 -0
  98. data/{src → app/assets/javascripts/luca}/templates/containers/toolbar_wrapper.jst.ejs +0 -0
  99. data/{src → app/assets/javascripts/luca}/templates/fields/button_field.jst.ejs +0 -0
  100. data/{src → app/assets/javascripts/luca}/templates/fields/button_field_link.jst.ejs +0 -0
  101. data/{src → app/assets/javascripts/luca}/templates/fields/checkbox_array.jst.ejs +0 -0
  102. data/{src → app/assets/javascripts/luca}/templates/fields/checkbox_array_item.jst.ejs +0 -0
  103. data/{src → app/assets/javascripts/luca}/templates/fields/checkbox_field.jst.ejs +0 -0
  104. data/{src → app/assets/javascripts/luca}/templates/fields/file_upload_field.jst.ejs +0 -0
  105. data/{src → app/assets/javascripts/luca}/templates/fields/hidden_field.jst.ejs +0 -0
  106. data/{src → app/assets/javascripts/luca}/templates/fields/select_field.jst.ejs +0 -0
  107. data/{src → app/assets/javascripts/luca}/templates/fields/text_area_field.jst.ejs +1 -1
  108. data/{src → app/assets/javascripts/luca}/templates/fields/text_field.jst.ejs +1 -1
  109. data/app/assets/javascripts/luca/util/deprecations.coffee +18 -0
  110. data/app/assets/javascripts/luca/util/index.coffee +3 -0
  111. data/app/assets/javascripts/luca/util/logging.coffee +15 -0
  112. data/{src/util.coffee → app/assets/javascripts/luca/util/luca.coffee} +20 -4
  113. data/{src/core → app/assets/javascripts/luca/util}/script_loader.coffee +0 -0
  114. data/app/assets/javascripts/luca-ui.js +1 -0
  115. data/{src/stylesheets → app/assets/stylesheets/luca}/components/checkbox_array.scss +0 -0
  116. data/app/assets/stylesheets/luca/components/form_view.scss +7 -0
  117. data/{src/stylesheets → app/assets/stylesheets/luca}/components/grid_view.scss +0 -0
  118. data/{src/stylesheets → app/assets/stylesheets/luca}/components/load_mask.scss +0 -0
  119. data/{src/stylesheets → app/assets/stylesheets/luca}/components/viewport.scss +0 -0
  120. data/{src/stylesheets → app/assets/stylesheets/luca}/containers/container.scss +0 -0
  121. data/{src/stylesheets → app/assets/stylesheets/luca}/containers/modal_view.scss +0 -0
  122. data/{src/stylesheets → app/assets/stylesheets/luca}/containers/panels.scss +0 -0
  123. data/{src/stylesheets → app/assets/stylesheets/luca}/containers/tab_view.scss +0 -0
  124. data/{src/stylesheets/tools → app/assets/stylesheets/luca/development}/console.scss +0 -0
  125. data/app/assets/stylesheets/luca/development/index.css +3 -0
  126. data/app/assets/stylesheets/luca/index.css +4 -0
  127. data/{src/stylesheets → app/assets/stylesheets/luca}/normalize.scss +0 -0
  128. data/app.rb +2 -4
  129. data/lib/generators/luca/application/application_generator.rb +12 -8
  130. data/lib/generators/luca/application/templates/controller.rb +0 -2
  131. data/lib/generators/luca/application/templates/index.html.erb +12 -0
  132. data/lib/generators/luca/application/templates/index.html.haml +1 -0
  133. data/lib/generators/luca/application/templates/javascripts/application.coffee +18 -0
  134. data/lib/generators/luca/application/templates/javascripts/collection_manager.coffee +2 -0
  135. data/lib/generators/luca/application/templates/javascripts/config.coffee +3 -0
  136. data/lib/generators/luca/application/templates/javascripts/{dependencies.js.coffee → dependencies.coffee} +1 -0
  137. data/lib/generators/luca/application/templates/javascripts/home.jst.ejs +2 -0
  138. data/lib/generators/luca/application/templates/javascripts/index.coffee +15 -0
  139. data/lib/generators/luca/application/templates/javascripts/router.coffee +4 -0
  140. data/lib/luca/component_documentation.rb +72 -0
  141. data/lib/luca/rails/engine.rb +4 -0
  142. data/lib/luca/rails/version.rb +1 -1
  143. data/lib/luca.rb +1 -1
  144. data/lib/railties/luca/tasks.rake +31 -0
  145. data/luca.gemspec +1 -0
  146. data/spec/components/controller_spec.coffee +62 -0
  147. data/spec/components/form_view_spec.coffee +4 -0
  148. data/spec/concerns/collection_event_bindings_spec.coffee +15 -0
  149. data/spec/concerns/dom_helpers_spec.coffee +2 -2
  150. data/spec/concerns/filterable_spec.coffee +4 -4
  151. data/spec/concerns/state_model_spec.coffee +50 -0
  152. data/spec/core/collection_spec.coffee +25 -0
  153. data/spec/{concerns_spec.coffee → core/concerns_spec.coffee} +0 -0
  154. data/spec/core/container_spec.coffee +57 -5
  155. data/spec/core/define_spec.coffee +116 -0
  156. data/spec/core/events_spec.coffee +26 -0
  157. data/spec/core/field_spec.coffee +4 -0
  158. data/spec/{framework_spec.coffee → core/framework_spec.coffee} +31 -2
  159. data/spec/{util_spec.coffee → core/util_spec.coffee} +2 -2
  160. data/spec/core/view_spec.coffee +65 -1
  161. data/spec/dependencies/index.coffee +3 -0
  162. data/{assets/javascripts → spec}/dependencies/jasmine-html.js +0 -0
  163. data/{assets/javascripts → spec}/dependencies/jasmine.js +0 -0
  164. data/{assets/javascripts → spec}/dependencies/sinon.js +0 -0
  165. data/spec/luca-spec.coffee +9 -0
  166. data/vendor/assets/javascripts/backbone-ext.js +21 -0
  167. data/vendor/assets/javascripts/backbone-min.js +38 -0
  168. data/vendor/assets/javascripts/backbone-query.min.js +1 -0
  169. data/vendor/assets/javascripts/bootstrap.min.js +7 -0
  170. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/codemirror-coffeescript.js +0 -0
  171. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/codemirror-css.js +0 -0
  172. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/codemirror-html.js +0 -0
  173. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/codemirror-javascript.js +0 -0
  174. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/codemirror-less.js +0 -0
  175. data/vendor/assets/javascripts/codemirror-ui.js +503 -0
  176. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/codemirror-vim.js +0 -0
  177. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/codemirror.js +0 -0
  178. data/vendor/assets/javascripts/inflections.js +656 -0
  179. data/vendor/assets/javascripts/jasmine-html.js +190 -0
  180. data/vendor/assets/javascripts/jasmine.js +2476 -0
  181. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/jquery.js +0 -0
  182. data/vendor/assets/javascripts/luca-spec.js +11 -0
  183. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/modal.js +0 -0
  184. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/modernizr.min.js +0 -0
  185. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/prettify.js +0 -0
  186. data/vendor/assets/javascripts/sinon.js +3469 -0
  187. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/spin-min.js +0 -0
  188. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/underscore-min.js +0 -0
  189. data/vendor/assets/javascripts/underscore-string.min.js +1 -0
  190. data/vendor/assets/stylesheets/bootstrap-responsive.min.css +9 -0
  191. data/vendor/assets/stylesheets/bootstrap.min.css +9 -0
  192. data/{assets → vendor/assets}/stylesheets/codemirror-blackboard.css +0 -0
  193. data/{assets → vendor/assets}/stylesheets/codemirror-monokai.css +0 -0
  194. data/{assets → vendor/assets}/stylesheets/codemirror.css +0 -0
  195. data/{assets → vendor/assets}/stylesheets/jasmine.css +0 -0
  196. data/vendor/assets/stylesheets/luca-ui.css +0 -601
  197. data/views/jasmine.erb +2 -2
  198. metadata +190 -299
  199. data/assets/javascripts/dependencies/backbone-min.js +0 -37
  200. data/assets/javascripts/dependencies/backbone-query.min.js +0 -1
  201. data/assets/javascripts/dependencies/bootstrap.min.js +0 -7
  202. data/assets/javascripts/dependencies/coffee-script.js +0 -12189
  203. data/assets/javascripts/dependencies/underscore-string.min.js +0 -14
  204. data/assets/javascripts/dependencies.coffee +0 -5
  205. data/assets/javascripts/luca/index.coffee +0 -1
  206. data/assets/javascripts/luca-templates.js +0 -1
  207. data/assets/javascripts/luca-ui-base.coffee +0 -1
  208. data/assets/javascripts/luca-ui-bootstrap.js +0 -1
  209. data/assets/javascripts/luca-ui-development-tools.coffee +0 -9
  210. data/assets/javascripts/luca-ui-full.js +0 -3
  211. data/assets/javascripts/luca-ui-spec.coffee +0 -2
  212. data/assets/javascripts/luca-ui.js +0 -3
  213. data/assets/javascripts/sandbox/application.coffee +0 -57
  214. data/assets/javascripts/sandbox/config.coffee +0 -7
  215. data/assets/javascripts/sandbox/router.coffee +0 -24
  216. data/assets/javascripts/sandbox/templates/builder/component_list.luca +0 -1
  217. data/assets/javascripts/sandbox/templates/builder.luca +0 -2
  218. data/assets/javascripts/sandbox/templates/main.luca +0 -53
  219. data/assets/javascripts/sandbox/templates/sandbox/docs_index.luca +0 -1
  220. data/assets/javascripts/sandbox/templates/sandbox/navigation.luca +0 -8
  221. data/assets/javascripts/sandbox/templates/sandbox/readme.luca +0 -30
  222. data/assets/javascripts/sandbox/templates/sandbox.luca +0 -1
  223. data/assets/javascripts/sandbox/views/builder/builder_canvas.coffee +0 -3
  224. data/assets/javascripts/sandbox/views/builder/builder_editor.coffee +0 -6
  225. data/assets/javascripts/sandbox/views/builder/component_list.coffee +0 -38
  226. data/assets/javascripts/sandbox/views/builder/project_browser.coffee +0 -14
  227. data/assets/javascripts/sandbox/views/builder.coffee +0 -133
  228. data/assets/javascripts/sandbox/views/docs_controller.coffee +0 -7
  229. data/assets/javascripts/sandbox/views/inspector/instance_filter.coffee +0 -18
  230. data/assets/javascripts/sandbox/views/inspector/instance_list.coffee +0 -0
  231. data/assets/javascripts/sandbox/views/inspector.coffee +0 -11
  232. data/assets/javascripts/sandbox/views/top_navigation.coffee +0 -4
  233. data/assets/javascripts/sandbox.coffee +0 -7
  234. data/assets/javascripts/spec-dependencies.coffee +0 -4
  235. data/assets/stylesheets/bootstrap-responsive.min.css +0 -2
  236. data/assets/stylesheets/bootstrap.min.css +0 -727
  237. data/assets/stylesheets/luca-ui-bootstrap.css +0 -4
  238. data/assets/stylesheets/luca-ui-development-tools.css +0 -5
  239. data/assets/stylesheets/luca-ui-full.css +0 -3
  240. data/assets/stylesheets/luca-ui-spec.css +0 -3
  241. data/assets/stylesheets/luca-ui.css +0 -3
  242. data/assets/stylesheets/prettify.css +0 -40
  243. data/assets/stylesheets/sandbox/builder.scss +0 -79
  244. data/assets/stylesheets/sandbox/sandbox.scss +0 -18
  245. data/assets/stylesheets/sandbox.css +0 -3
  246. data/assets/stylesheets/themes/amelia-bootstrap.css +0 -826
  247. data/assets/stylesheets/themes/slate-bootstrap.css +0 -797
  248. data/assets/stylesheets/themes/superhero-bootstrap.css +0 -830
  249. data/lib/generators/luca/application/templates/javascripts/application.js +0 -28
  250. data/lib/generators/luca/application/templates/javascripts/application.js.coffee +0 -20
  251. data/lib/generators/luca/application/templates/javascripts/config.js +0 -15
  252. data/lib/generators/luca/application/templates/javascripts/config.js.coffee +0 -9
  253. data/lib/generators/luca/application/templates/javascripts/dependencies.js +0 -5
  254. data/lib/generators/luca/application/templates/javascripts/index.js +0 -9
  255. data/lib/generators/luca/application/templates/javascripts/index.js.coffee +0 -9
  256. data/lib/generators/luca/application/templates/javascripts/main.js +0 -8
  257. data/lib/generators/luca/application/templates/javascripts/main.js.coffee +0 -3
  258. data/lib/generators/luca/application/templates/javascripts/main.jst.ejs +0 -1
  259. data/lib/generators/luca/application/templates/javascripts/router.js +0 -12
  260. data/lib/generators/luca/application/templates/javascripts/router.js.coffee +0 -7
  261. data/spec/containers/column_view_spec.coffee +0 -0
  262. data/spec/containers/split_view_spec.coffee +0 -0
  263. data/spec/define_spec.coffee +0 -13
  264. data/src/components/controller.coffee +0 -65
  265. data/src/components/load_mask.coffee +0 -3
  266. data/src/components/multi_collection_view.coffee +0 -121
  267. data/src/components/page_controller.coffee +0 -2
  268. data/src/components/table_view.coffee +0 -62
  269. data/src/concerns/collection_event_bindings.coffee +0 -26
  270. data/src/concerns/filterable.coffee +0 -82
  271. data/src/concerns/state_model.coffee +0 -16
  272. data/src/containers/column_view.coffee +0 -42
  273. data/src/containers/page_view.coffee +0 -2
  274. data/src/containers/panel_view.coffee +0 -23
  275. data/src/containers/split_view.coffee +0 -8
  276. data/src/core/core.coffee +0 -0
  277. data/src/core/meta_data.coffee +0 -37
  278. data/src/core/panel.coffee +0 -118
  279. data/src/define.coffee +0 -170
  280. data/src/index.coffee +0 -25
  281. data/src/managers/socket_manager.coffee +0 -54
  282. data/src/samples/definition.coffee +0 -49
  283. data/src/stylesheets/base.scss +0 -0
  284. data/src/stylesheets/components/form_view.scss +0 -59
  285. data/src/stylesheets/components/toolbar.scss +0 -0
  286. data/src/stylesheets/tools/class_browser.scss +0 -32
  287. data/src/stylesheets/tools/code_editor.scss +0 -24
  288. data/src/stylesheets/tools/component_tester.scss +0 -26
  289. data/src/tools/application_inspector.coffee +0 -2
  290. data/src/tools/code_editor.coffee +0 -258
  291. data/src/tools/coffee_script_editor.coffee +0 -82
  292. data/src/tools/collection_inspector.coffee +0 -4
  293. data/src/tools/collections/components.coffee +0 -59
  294. data/src/tools/collections/instances.coffee +0 -15
  295. data/src/tools/component_tester.coffee +0 -462
  296. data/src/tools/models/components.coffee +0 -25
  297. data/src/tools/models/instance.coffee +0 -2
  298. data/src/tools/templates/component_tester/help.luca +0 -14
  299. data/vendor/assets/javascripts/luca-ui-base.js +0 -5304
  300. data/vendor/assets/javascripts/luca-ui-bootstrap.js +0 -9
  301. data/vendor/assets/javascripts/luca-ui-development-tools.js +0 -18561
  302. data/vendor/assets/javascripts/luca-ui-development-tools.min.js +0 -15
  303. data/vendor/assets/javascripts/luca-ui-full.js +0 -6319
  304. data/vendor/assets/javascripts/luca-ui-full.min.js +0 -9
  305. data/vendor/assets/javascripts/luca-ui-spec.js +0 -6815
  306. data/vendor/assets/javascripts/luca-ui-templates.js +0 -92
  307. data/vendor/assets/javascripts/luca-ui.js +0 -6234
  308. data/vendor/assets/javascripts/luca-ui.min.js +0 -5
  309. data/vendor/assets/luca-ui/base.css +0 -85
  310. data/vendor/assets/luca-ui/components/application.js +0 -91
  311. data/vendor/assets/luca-ui/components/base_toolbar.js +0 -23
  312. data/vendor/assets/luca-ui/components/controller.js +0 -38
  313. data/vendor/assets/luca-ui/components/fields/button_field.js +0 -45
  314. data/vendor/assets/luca-ui/components/fields/checkbox_field.js +0 -43
  315. data/vendor/assets/luca-ui/components/fields/file_upload_field.js +0 -20
  316. data/vendor/assets/luca-ui/components/fields/hidden_field.js +0 -20
  317. data/vendor/assets/luca-ui/components/fields/select_field.js +0 -97
  318. data/vendor/assets/luca-ui/components/fields/text_area_field.js +0 -48
  319. data/vendor/assets/luca-ui/components/fields/text_field.js +0 -46
  320. data/vendor/assets/luca-ui/components/fields/type_ahead_field.js +0 -13
  321. data/vendor/assets/luca-ui/components/form_button_toolbar.js +0 -32
  322. data/vendor/assets/luca-ui/components/form_view.css +0 -32
  323. data/vendor/assets/luca-ui/components/form_view.js +0 -207
  324. data/vendor/assets/luca-ui/components/grid_view.css +0 -76
  325. data/vendor/assets/luca-ui/components/grid_view.js +0 -202
  326. data/vendor/assets/luca-ui/components/record_manager.js +0 -207
  327. data/vendor/assets/luca-ui/components/router.js +0 -36
  328. data/vendor/assets/luca-ui/components/template.js +0 -26
  329. data/vendor/assets/luca-ui/components/toolbar.css +0 -11
  330. data/vendor/assets/luca-ui/containers/card_view.js +0 -98
  331. data/vendor/assets/luca-ui/containers/column_view.js +0 -52
  332. data/vendor/assets/luca-ui/containers/container.css +0 -3
  333. data/vendor/assets/luca-ui/containers/modal_view.css +0 -0
  334. data/vendor/assets/luca-ui/containers/modal_view.js +0 -87
  335. data/vendor/assets/luca-ui/containers/panel_view.js +0 -34
  336. data/vendor/assets/luca-ui/containers/split_view.js +0 -13
  337. data/vendor/assets/luca-ui/containers/tab_view.css +0 -16
  338. data/vendor/assets/luca-ui/containers/tab_view.js +0 -80
  339. data/vendor/assets/luca-ui/containers/viewport.js +0 -18
  340. data/vendor/assets/luca-ui/core/collection.js +0 -221
  341. data/vendor/assets/luca-ui/core/container.js +0 -205
  342. data/vendor/assets/luca-ui/core/field.js +0 -59
  343. data/vendor/assets/luca-ui/core/observer.js +0 -42
  344. data/vendor/assets/luca-ui/core/view.js +0 -127
  345. data/vendor/assets/luca-ui/framework.js +0 -110
  346. data/vendor/assets/luca-ui/index.js +0 -5
  347. data/vendor/assets/luca-ui/managers/collection_manager.js +0 -98
  348. data/vendor/assets/luca-ui/managers/socket_manager.js +0 -52
  349. data/vendor/assets/luca-ui/modules/deferrable.js +0 -21
  350. data/vendor/assets/luca-ui/modules/local_storage.js +0 -81
  351. data/vendor/assets/luca-ui/normalize.css +0 -359
  352. data/vendor/assets/luca-ui/stylesheets/base.css +0 -85
  353. data/vendor/assets/luca-ui/stylesheets/components/form_view.css +0 -32
  354. data/vendor/assets/luca-ui/stylesheets/components/grid_view.css +0 -76
  355. data/vendor/assets/luca-ui/stylesheets/components/toolbar.css +0 -11
  356. data/vendor/assets/luca-ui/stylesheets/containers/container.css +0 -3
  357. data/vendor/assets/luca-ui/stylesheets/containers/modal_view.css +0 -0
  358. data/vendor/assets/luca-ui/stylesheets/containers/tab_view.css +0 -16
  359. data/vendor/assets/luca-ui/stylesheets/normalize.css +0 -359
  360. data/vendor/assets/luca-ui/templates/components/bootstrap_form_controls.js +0 -4
  361. data/vendor/assets/luca-ui/templates/components/form_view.js +0 -4
  362. data/vendor/assets/luca-ui/templates/components/grid_view.js +0 -4
  363. data/vendor/assets/luca-ui/templates/components/grid_view_empty_text.js +0 -4
  364. data/vendor/assets/luca-ui/templates/containers/basic.js +0 -4
  365. data/vendor/assets/luca-ui/templates/containers/tab_selector_container.js +0 -4
  366. data/vendor/assets/luca-ui/templates/containers/tab_view.js +0 -4
  367. data/vendor/assets/luca-ui/templates/containers/toolbar_wrapper.js +0 -4
  368. data/vendor/assets/luca-ui/templates/fields/button_field.js +0 -4
  369. data/vendor/assets/luca-ui/templates/fields/button_field_link.js +0 -4
  370. data/vendor/assets/luca-ui/templates/fields/checkbox_field.js +0 -4
  371. data/vendor/assets/luca-ui/templates/fields/file_upload_field.js +0 -4
  372. data/vendor/assets/luca-ui/templates/fields/hidden_field.js +0 -4
  373. data/vendor/assets/luca-ui/templates/fields/select_field.js +0 -4
  374. data/vendor/assets/luca-ui/templates/fields/text_area_field.js +0 -4
  375. data/vendor/assets/luca-ui/templates/fields/text_field.js +0 -4
  376. data/vendor/assets/luca-ui/templates/sample/contents.js +0 -4
  377. data/vendor/assets/luca-ui/templates/sample/welcome.js +0 -4
@@ -0,0 +1,318 @@
1
+ # Component Definition Helpers
2
+ #
3
+ # We have customized the core Backbone.extend process to use a slightly
4
+ # different syntax, which allows us to intercept the component definition at
5
+ # various points, and maintain information about classes being defined, and
6
+ # the relationships between inherited classes, etc.
7
+ #
8
+ # Under the hood it isn't much more than Backbone.View.extend(@proto)
9
+ #
10
+ # Luca provides a self-documenting component generation language which
11
+ # allows you to build the @proto property in a way which captures the intent
12
+ # of the interface being described.
13
+ #
14
+ # Example:
15
+ # myForm = MyApp.register 'MyForm'
16
+ #
17
+ # myForm.extends 'Luca.components.FormView'
18
+ #
19
+ # myForm.triggers 'some:custom:hook'
20
+ #
21
+ # myForm.publicMethods
22
+ # publicMethod: ()-> ...
23
+ #
24
+ # myForm.classMethods
25
+ # classMethod: ()-> ...
26
+ #
27
+ # This gives us the ability to inspect our component registry at run time,
28
+ # auto-generate nice documentation, build development tools, etc.
29
+
30
+ class ComponentDefinition
31
+ constructor:(componentName, @autoRegister=true)->
32
+ @namespace = Luca.util.namespace()
33
+ @componentId = @componentName = componentName
34
+ @superClassName = 'Luca.View'
35
+ @properties ||= {}
36
+ @_classProperties ||= {}
37
+
38
+ if componentName.match(/\./)
39
+ @namespaced = true
40
+ parts = componentName.split('.')
41
+ @componentId = parts.pop()
42
+ @namespace = parts.join('.')
43
+
44
+ # automatically add the namespace to the namespace registry
45
+ Luca.registry.addNamespace( parts.join('.') )
46
+
47
+ Luca.define.__definitions.push(@)
48
+
49
+ @create: (componentName, autoRegister=Luca.config.autoRegister)->
50
+ new ComponentDefinition(componentName, autoRegister)
51
+
52
+ isValid: ()->
53
+ return false unless _.isObject(@properties)
54
+ return false unless Luca.util.resolve(@superClassName)?
55
+ return false unless @componentName?
56
+ true
57
+
58
+ isDefined: ()->
59
+ @defined is true
60
+
61
+ isOpen: ()->
62
+ !!(@isValid() and not @isDefined())
63
+
64
+ meta: (key, value)->
65
+ metaKey = @namespace + '.' + @componentId
66
+ metaKey = metaKey.replace(/^\./,'')
67
+ data = Luca.registry.addMetaData(metaKey, key, value)
68
+
69
+ @properties.componentMetaData = ()->
70
+ Luca.registry.getMetaDataFor(metaKey)
71
+
72
+ # allow for specifying the namespace
73
+ in: (@namespace)-> @
74
+
75
+ # allow for multiple ways of saying the same thing for readability purposes
76
+ from: (@superClassName)->
77
+ @
78
+ extends: (@superClassName)->
79
+ @
80
+ extend: (@superClassName)->
81
+ @
82
+
83
+ aliases: (@_aliases...)->
84
+ @meta("aliases", @_aliases)
85
+ @
86
+
87
+ replaces: (replaces...)->
88
+ @_aliases ||= []
89
+ for old in replaces
90
+ @_aliases.push(old)
91
+ Luca.util.deprecateComponent(old, @componentName)
92
+
93
+ triggers: (hooks...)->
94
+ _.defaults(@properties ||= {}, hooks: [])
95
+ for hook in hooks
96
+ @properties.hooks.push(hook)
97
+
98
+ @properties.hooks = _.uniq(@properties.hooks)
99
+
100
+ @meta("hooks", @properties.hooks)
101
+ @
102
+
103
+ includes: (includes...)->
104
+ _.defaults(@properties ||= {}, include: [])
105
+ for include in includes
106
+ @properties.include.push(include)
107
+ @properties.include = _.uniq(@properties.include)
108
+ @meta("includes", @properties.include)
109
+ @
110
+
111
+ mixesIn: (concerns...)->
112
+ _.defaults(@properties ||= {}, concerns: [])
113
+ for concern in concerns
114
+ @properties.concerns.push(concern)
115
+ @properties.concerns = _.uniq(@properties.concerns)
116
+
117
+ @meta("concerns", @properties.concerns)
118
+ @
119
+
120
+ contains: (components...)->
121
+ _.defaults(@properties, components: [])
122
+ @properties.components = components
123
+ @
124
+
125
+ validatesConfigurationWith:(validationConfiguration={})->
126
+ @meta "configuration validations", validationConfiguration
127
+ @properties.validatable = true
128
+ @
129
+
130
+ beforeDefinition: (callback)->
131
+ @_classProperties.beforeDefinition = callback
132
+ @
133
+
134
+ afterDefinition: (callback)->
135
+ @_classProperties.afterDefinition = callback
136
+ @
137
+
138
+ classConfiguration: (properties={})->
139
+ @meta("class configuration", _.keys(properties))
140
+ _.defaults((@_classProperties||={}), properties)
141
+ @
142
+
143
+ configuration: (properties={})->
144
+ @meta("public configuration", _.keys(properties) )
145
+ _.defaults((@properties||={}), properties)
146
+ @
147
+
148
+ publicConfiguration: (properties={})->
149
+ @meta("public configuration", _.keys(properties) )
150
+ _.defaults((@properties||={}), properties)
151
+ @
152
+
153
+ privateConfiguration: (properties={})->
154
+ @meta("private configuration", _.keys(properties) )
155
+ _.defaults((@properties||={}), properties)
156
+ @
157
+
158
+ classInterface: (properties={})->
159
+ @meta("class interface", _.keys(properties))
160
+ _.defaults((@_classProperties||={}), properties)
161
+ @
162
+
163
+ methods: (properties={})->
164
+ @meta("public interface", _.keys(properties) )
165
+ _.defaults((@properties||={}), properties)
166
+ @
167
+
168
+ public: (properties={})->
169
+ @meta("public interface", _.keys(properties) )
170
+ _.defaults((@properties||={}), properties)
171
+ @
172
+
173
+ publicInterface: (properties={})->
174
+ @meta("public interface", _.keys(properties) )
175
+ _.defaults((@properties||={}), properties)
176
+ @
177
+
178
+ private: (properties={})->
179
+ @meta("private interface", _.keys(properties) )
180
+ _.defaults((@properties||={}), properties)
181
+ @
182
+
183
+ privateInterface: (properties={})->
184
+ @meta("private interface", _.keys(properties) )
185
+ _.defaults((@properties||={}), properties)
186
+ @
187
+
188
+ # This is the end of the chain. It MUST be called
189
+ # in order for the component definition to be complete.
190
+ definePrototype: (properties={})->
191
+ _.defaults((@properties||={}), properties)
192
+
193
+ at = if @namespaced
194
+ Luca.util.resolve(@namespace, (window || global))
195
+ else
196
+ (window||global)
197
+
198
+ # automatically create the namespace
199
+ if @namespaced and not at?
200
+ eval("(window||global).#{ @namespace } = {}")
201
+ at = Luca.util.resolve(@namespace,(window || global))
202
+
203
+ @meta("super class name", @superClassName )
204
+ @meta("display name", @componentName)
205
+
206
+ @properties.displayName = @componentName
207
+
208
+ @properties.componentMetaData = ()->
209
+ Luca.registry.getMetaDataFor(@displayName)
210
+
211
+ @_classProperties?.beforeDefinition?(@)
212
+
213
+ definition = at[@componentId] = Luca.extend(@superClassName,@componentName, @properties)
214
+
215
+ if _.isArray( @properties?.include )
216
+ for include in @properties.include
217
+ include = Luca.util.resolve(include) if _.isString(include)
218
+ if not include?
219
+ console.log "Attempt to include module failed. #{ include } not defined."
220
+ _.extend(definition::, include)
221
+
222
+ if @_aliases?
223
+ for alias in @_aliases
224
+ eval("#{ alias } = definition;")
225
+
226
+ if @autoRegister is true
227
+ componentType = "view" if Luca.isViewPrototype( definition )
228
+
229
+ if Luca.isCollectionPrototype( definition )
230
+ Luca.Collection.namespaces ||= []
231
+ Luca.Collection.namespaces.push( @namespace )
232
+ componentType = "collection"
233
+
234
+ componentType = "model" if Luca.isModelPrototype( definition )
235
+
236
+ # automatically register this with the component registry
237
+ Luca.registerComponent( _.string.underscored(@componentId), @componentName, componentType)
238
+
239
+ @defined = true
240
+
241
+ unless _.isEmpty(@_classProperties)
242
+ _.extend(definition, @_classProperties)
243
+
244
+
245
+
246
+ definition?.afterDefinition?.call(definition, @)
247
+
248
+ definition
249
+
250
+
251
+ # Aliases for the mixin definition
252
+ cd = ComponentDefinition::
253
+
254
+ cd.concerns = cd.behavesAs = cd.uses = cd.mixesIn
255
+
256
+ # Aliases for the final call on the define proxy
257
+ cd.register = cd.defines = cd.defaults = cd.exports = cd.defaultProperties = cd.definePrototype
258
+
259
+ cd.defaultsTo = cd.enhance = cd.with = cd.definePrototype
260
+
261
+ cd.publicMethods = cd.publicInterface
262
+ cd.privateMethods = cd.privateInterface
263
+ cd.classProperites = cd.classMethods = cd.classInterface
264
+
265
+ _.extend (Luca.define = ComponentDefinition.create),
266
+ __definitions: []
267
+ incomplete: ()->
268
+ _( Luca.define.__definitions ).select (definition)->
269
+ definition.isOpen()
270
+ close: ()->
271
+ for open in Luca.define.incomplete()
272
+ open.register() if open.isValid()
273
+ Luca.define.__definitions.length = 0
274
+ findDefinition: (componentName)->
275
+ _( Luca.define.__definitions ).detect (definition)->
276
+ definition.componentName is componentName
277
+
278
+ Luca.register = (componentName)->
279
+ new ComponentDefinition(componentName, true)
280
+
281
+ _.mixin def: Luca.define
282
+
283
+ # The last method of the ComponentDefinition chain is always going to result in
284
+ # a call to Luca.extend. Luca.extend wraps the call to Luca.View.extend,
285
+ # or Backbone.Collection.extend, and accepts the names of the extending,
286
+ # and extended classes as strings. This allows us to maintain information
287
+ # and references to the classes and their prototypes, mainly for the purposes
288
+ # of introspection and development tools
289
+ Luca.extend = (superClassName, childName, properties={})->
290
+ superClassName = Luca.util.checkDeprecationStatusOf(superClassName)
291
+ superClass = Luca.util.resolve( superClassName, (window || global) )
292
+
293
+ unless _.isFunction(superClass?.extend)
294
+ throw "Error defining #{ childName }. #{ superClassName } is not a valid component to extend from"
295
+
296
+ superMetaData = Luca.registry.getMetaDataFor(superClassName)
297
+ superMetaData.descendants().push(childName)
298
+
299
+ properties.displayName = childName
300
+
301
+ properties._superClass = ()->
302
+ superClass.displayName ||= superClassName
303
+ superClass
304
+
305
+ properties._super = (method, context=@, args=[])->
306
+ # TODO: debug this better
307
+ # protect against a stack too deep error in weird cases
308
+ @_superClass().prototype[method]?.apply(context, args)
309
+
310
+ definition = superClass.extend(properties)
311
+
312
+ if _.isArray( properties?.include )
313
+ for include in properties.include
314
+ include = Luca.util.resolve(include) if _.isString(include)
315
+ _.extend(definition::, include)
316
+
317
+ definition
318
+
@@ -0,0 +1,4 @@
1
+ #= require ./concerns
2
+ #= require ./component_definition
3
+ #= require ./registry
4
+ #= require ./meta_data
@@ -0,0 +1,97 @@
1
+ Luca.registry.componentMetaData = {}
2
+
3
+ Luca.registry.getMetaDataFor = (componentName)->
4
+ new MetaDataProxy(Luca.registry.componentMetaData[ componentName ])
5
+
6
+ Luca.registry.addMetaData = (componentName, key, value)->
7
+ data = Luca.registry.componentMetaData[ componentName ] ||= {}
8
+ data[ key ] = _(value).clone()
9
+ data
10
+
11
+ class MetaDataProxy
12
+ constructor: (@meta={})->
13
+ _.defaults @meta,
14
+ "super class name" : ""
15
+ "display name" : ""
16
+ "descendants": []
17
+ "aliases": []
18
+ "public interface" : []
19
+ "public configuration" : []
20
+ "private interface" : []
21
+ "private configuration" : []
22
+ "class configuration" : []
23
+ "class interface" : []
24
+
25
+ superClass: ()->
26
+ Luca.util.resolve(@meta["super class name"])
27
+
28
+ componentDefinition: ()->
29
+ Luca.registry.find @meta["display name"]
30
+
31
+ componentPrototype: ()->
32
+ @componentDefinition()?.prototype
33
+
34
+ prototypeFunctions: ()->
35
+ _.functions( @componentPrototype() )
36
+
37
+ classAttributes: ()->
38
+ _.uniq @classInterface().concat( @classConfiguration() )
39
+
40
+ publicAttributes: ()->
41
+ _.uniq @publicInterface().concat( @publicConfiguration() )
42
+
43
+ privateAttributes: ()->
44
+ _.uniq @privateInterface().concat( @privateConfiguration() )
45
+
46
+ classMethods: ()->
47
+ list = _.functions( @componentDefinition() )
48
+ _( list ).intersection( @classAttributes() )
49
+
50
+ publicMethods: ()->
51
+ _( @prototypeFunctions() ).intersection( @publicAttributes() )
52
+
53
+ privateMethods: ()->
54
+ _( @prototypeFunctions() ).intersection( @privateAttributes() )
55
+
56
+ classConfiguration: ()->
57
+ @meta["class configuration"]
58
+
59
+ publicConfiguration: ()->
60
+ @meta["public configuration"]
61
+
62
+ privateConfiguration: ()->
63
+ @meta["private configuration"]
64
+
65
+ classInterface: ()->
66
+ @meta["class interface"]
67
+
68
+ publicInterface: ()->
69
+ @meta["public interface"]
70
+
71
+ privateInterface: ()->
72
+ @meta["private interface"]
73
+
74
+ triggers: ()->
75
+ @meta["hooks"]
76
+
77
+ hooks: ()->
78
+ @meta["hooks"]
79
+
80
+ descendants: ()->
81
+ @meta["descendants"]
82
+ styleHierarchy: ()->
83
+ list = _( @classHierarchy() ).map (cls)->
84
+ Luca.util.toCssClass(cls, 'views', 'components', 'core','fields','containers')
85
+
86
+ _( list ).without('backbone-view','luca-view')
87
+
88
+ classHierarchy: ()->
89
+ list = [ @meta["display name"], @meta["super class name"]]
90
+
91
+ proxy = @superClass()?.prototype?.componentMetaData?()
92
+
93
+ until not proxy
94
+ list = list.concat( proxy?.classHierarchy() )
95
+ proxy = proxy.superClass()?.prototype?.componentMetaData?()
96
+
97
+ _( list ).uniq()
@@ -13,7 +13,10 @@ componentCacheStore =
13
13
  Luca.config.defaultComponentClass = Luca.defaultComponentClass = 'Luca.View'
14
14
  Luca.config.defaultComponentType = Luca.defaultComponentType = 'view'
15
15
 
16
- Luca.registry.aliases =
16
+ Luca.registry.deprecatedComponents = {}
17
+ Luca.registry.componentAliases = {}
18
+
19
+ Luca.registry.typeAliases =
17
20
  grid: "grid_view"
18
21
  form: "form_view"
19
22
  text: "text_field"
@@ -76,13 +79,11 @@ Luca.registry.namespaces = (resolve=true)->
76
79
  _( registry.namespaces ).map (namespace)->
77
80
  if resolve then Luca.util.resolve( namespace ) else namespace
78
81
 
79
-
80
-
81
82
  # Lookup a component in the Luca component registry
82
- # by it's ctype identifier. If it doesn't exist,
83
+ # by it's type identifier. If it doesn't exist,
83
84
  # check any other registered namespace
84
85
  Luca.registry.lookup = (ctype)->
85
- if alias = Luca.registry.aliases[ ctype ]
86
+ if alias = Luca.registry.typeAliases[ ctype ]
86
87
  ctype = alias
87
88
 
88
89
  c = registry.classes[ctype]
@@ -119,7 +120,10 @@ Luca.registry.classes = (toString=false)->
119
120
  className: className
120
121
  ctype: ctype
121
122
 
122
- Luca.cache = Luca.cacheInstance = (cacheKey, object)->
123
+ Luca.registry.find = (search)->
124
+ Luca.util.resolve(search) || Luca.define.findDefinition(search)
125
+
126
+ Luca.cache = Luca.registry.cacheInstance = (cacheKey, object)->
123
127
  return unless cacheKey?
124
128
  return object if object?.doNotCache is true
125
129
 
@@ -0,0 +1,47 @@
1
+ Luca.templates ||= {}
2
+
3
+ if window.JST?
4
+ for templateId, templateFn of JST when templateId.match(/^luca\/templates\//)
5
+ Luca.templates[ templateId.replace('luca/templates/','') ] = templateFn
6
+ _( JST ).delete( templateId )
7
+
8
+ # This is a convenience method for accessing the templates
9
+ # available to the client side app, either the ones which ship with Luca
10
+ # available in Luca.templates ( these take precedence ) or
11
+ # the app's own templates which are usually available in JST
12
+
13
+ # optionally, passing in variables will compile the template for you, instead
14
+ # of returning a reference to the function which you would then call yourself
15
+ Luca.template = (template_name, variables)->
16
+ window.JST ||= {}
17
+
18
+ if _.isFunction(template_name)
19
+ return template_name(variables)
20
+
21
+ luca = Luca.templates?[ template_name ]
22
+ jst = JST?[ template_name ]
23
+
24
+ unless luca? or jst?
25
+ needle = new RegExp("#{ template_name }$")
26
+
27
+ luca = _( Luca.templates ).detect (fn,template_id)->
28
+ needle.exec( template_id )
29
+
30
+ jst = _( JST ).detect (fn,template_id)->
31
+ needle.exec( template_id )
32
+
33
+ throw "Could not find template named #{ template_name }" unless luca || jst
34
+
35
+ template = luca || jst
36
+
37
+ return template(variables) if variables?
38
+
39
+ template
40
+
41
+ Luca.available_templates = (filter="")->
42
+ available = _( Luca.templates ).keys()
43
+
44
+ if filter.length > 0
45
+ _( available ).select (tmpl)-> tmpl.match(filter)
46
+ else
47
+ available
@@ -32,6 +32,9 @@ view.triggers "before:initialize",
32
32
 
33
33
  # Luca.View decorates Backbone.View with some patterns and conventions.
34
34
  view.defines
35
+ identifier: ()->
36
+ (@displayName || @type ) + ":" + (@name || @role || @cid)
37
+
35
38
  initialize: (@options={})->
36
39
  @trigger "before:initialize", @, @options
37
40
 
@@ -44,7 +47,7 @@ view.defines
44
47
 
45
48
  @$el.attr("data-luca-id", @name || @cid)
46
49
 
47
- Luca.cacheInstance( @cid, @ )
50
+ Luca.registry.cacheInstance( @cid, @ )
48
51
 
49
52
  @setupHooks _( Luca.View::hooks.concat( @hooks ) ).uniq()
50
53
 
@@ -54,6 +57,8 @@ view.defines
54
57
 
55
58
  @trigger "after:initialize", @
56
59
 
60
+ _.bindAll(@, @bindMethods...) if @bindMethods?.legth > 0
61
+
57
62
  #### Hooks or Auto Event Binding
58
63
  #
59
64
  # views which inherit from Luca.View can define hooks
@@ -72,6 +77,10 @@ view.defines
72
77
  registerEvent: (selector, handler)->
73
78
  @events ||= {}
74
79
  @events[ selector ] = handler
80
+
81
+ if _.isObject(selector)
82
+ _.extend(@events, selector)
83
+
75
84
  @delegateEvents()
76
85
 
77
86
  definitionClass: ()->
@@ -87,8 +96,9 @@ view.defines
87
96
  Luca.util.selectProperties( Luca.isBackboneView, @ )
88
97
 
89
98
  debug: (args...)->
90
- return unless @debugMode or window.LucaDebugMode?
91
- console.log [(@name || @cid), args...]
99
+ if @debugMode is true or window.LucaDebugMode is true
100
+ args.unshift @identifier()
101
+ console.log args...
92
102
 
93
103
  trigger: ()->
94
104
  if Luca.enableGlobalObserver
@@ -101,12 +111,17 @@ view.defines
101
111
 
102
112
  Luca.View._originalExtend = Backbone.View.extend
103
113
 
104
- Luca.View.renderWrapper = (definition)->
105
- _base = definition.render
106
-
107
- _base ||= Luca.View::$attach
114
+ # Note:
115
+ #
116
+ # I will be removing this prior to 1.0. Optimizing for collection based
117
+ # views does not belong in here, so the deferrable / collection binding stuff
118
+ # needs to go.
119
+ #
120
+ # Being able to defer rendering until the firing of an event on another object
121
+ # is something that does ask for some syntactic sugar though, so need to rethink.
108
122
 
109
- definition.render = ()->
123
+ Luca.View.renderStrategies =
124
+ legacy: ( _userSpecifiedMethod )->
110
125
  view = @
111
126
  # if a view has a deferrable property set
112
127
 
@@ -120,7 +135,7 @@ Luca.View.renderWrapper = (definition)->
120
135
  trigger = if @deferrable_event then @deferrable_event else Luca.View.deferrableEvent
121
136
 
122
137
  deferred = ()->
123
- _base.call(view)
138
+ _userSpecifiedMethod.call(view)
124
139
  view.trigger("after:render", view)
125
140
 
126
141
  view.defer(deferred).until(target, trigger)
@@ -139,11 +154,51 @@ Luca.View.renderWrapper = (definition)->
139
154
 
140
155
  else
141
156
  @trigger "before:render", @
142
- _base.apply(@, arguments)
157
+ _userSpecifiedMethod.apply(@, arguments)
143
158
  @trigger "after:render", @
144
159
 
145
160
  return @
146
161
 
162
+ improved: (_userSpecifiedMethod)->
163
+ @trigger "before:render", @
164
+
165
+
166
+ deferred = ()=>
167
+ _userSpecifiedMethod.apply(@, arguments)
168
+ @trigger "after:render", @
169
+
170
+ console.log "doing the improved one", @deferrable
171
+
172
+ if @deferrable? and not _.isString(@deferrable)
173
+ throw "Deferrable property is expected to be a event id"
174
+
175
+ if _.isString(@deferrable)
176
+ console.log "binding to #{ @deferrable } on #{ @cid }"
177
+ view.on @deferrable, ()->
178
+ console.log "did the improved one"
179
+ deferred.call(view)
180
+ view.unbind(listenForEvent, @)
181
+
182
+ else
183
+ deferred.call(@)
184
+
185
+
186
+
187
+ Luca.View.renderWrapper = (definition)->
188
+ _userSpecifiedMethod = definition.render
189
+
190
+ _userSpecifiedMethod ||= ()-> @trigger "empty:render"
191
+
192
+ definition.render = ()->
193
+ strategy = Luca.View.renderStrategies[ @renderStrategy ||= "legacy" ]
194
+
195
+ unless _.isFunction(strategy)
196
+ throw "Invalid rendering strategy. Please see Luca.View.renderStrategies"
197
+
198
+ strategy.call(@, _userSpecifiedMethod)
199
+
200
+ @
201
+
147
202
  definition
148
203
 
149
204
  bindAllEventHandlers = ()->
@@ -153,7 +208,10 @@ bindAllEventHandlers = ()->
153
208
  bindEventHandlers = (events={})->
154
209
  for eventSignature, handler of events
155
210
  if _.isString(handler)
156
- _.bindAll @, handler
211
+ try
212
+ _.bindAll @, handler
213
+ catch e
214
+ console.log "Error binding to handler - #{handler} = #{e} #{@identifier()}"
157
215
 
158
216
  Luca.View.deferrableEvent = "reset"
159
217
 
@@ -0,0 +1,7 @@
1
+ #= require jquery
2
+ #= require underscore-min
3
+ #= require underscore-string.min
4
+ #= require backbone-min
5
+ #= require backbone-query.min
6
+ #= require bootstrap.min
7
+ #= require_self
@@ -9,7 +9,7 @@ defaultOptions =
9
9
  tabSize: 2
10
10
  electricChars: false
11
11
 
12
- Luca.define("Luca.tools.CodeMirrorField").extends("Luca.components.Panel").with
12
+ Luca.define("Luca.tools.CodeMirrorField").extends("Luca.Panel").with
13
13
  bodyClassName: "codemirror-wrapper"
14
14
  preProcessors: []
15
15
  postProcessors: []
@@ -44,6 +44,7 @@ Luca.define("Luca.tools.CodeMirrorField").extends("Luca.components.Panel").with
44
44
 
45
45
  afterRender: ()->
46
46
  @instance = CodeMirror( @$bodyEl()[0], @codemirrorOptions() )
47
+ console.log "After Render On Code Mirror Field"
47
48
  @setMaxHeight()
48
49
  @setHeight()
49
50