luca 0.9.76 → 0.9.89

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 (457) hide show
  1. data/CHANGELOG +65 -2
  2. data/Gemfile +4 -0
  3. data/Gemfile.lock +18 -2
  4. data/Guardfile +3 -25
  5. data/README.md +50 -58
  6. data/ROADMAP +15 -32
  7. data/Rakefile +18 -77
  8. data/app.rb +12 -46
  9. data/{assets → app/assets}/images/glyphicons-halflings-white.png +0 -0
  10. data/{assets → app/assets}/images/glyphicons-halflings.png +0 -0
  11. data/app/assets/javascripts/luca-ui.js +1 -0
  12. data/app/assets/javascripts/luca/basic.coffee +8 -0
  13. data/{src → app/assets/javascripts/luca}/components/application.coffee +233 -65
  14. data/{src → app/assets/javascripts/luca}/components/collection_loader_view.coffee +0 -0
  15. data/app/assets/javascripts/luca/components/collection_view.coffee +207 -0
  16. data/{src → app/assets/javascripts/luca}/components/controller.coffee +27 -13
  17. data/{src/core/field.coffee → app/assets/javascripts/luca/components/fields/base.coffee} +18 -10
  18. data/{src → app/assets/javascripts/luca}/components/fields/button_field.coffee +8 -9
  19. data/{src → app/assets/javascripts/luca}/components/fields/checkbox_array.coffee +0 -0
  20. data/{src → app/assets/javascripts/luca}/components/fields/checkbox_field.coffee +0 -0
  21. data/{src → app/assets/javascripts/luca}/components/fields/file_upload_field.coffee +0 -0
  22. data/{src → app/assets/javascripts/luca}/components/fields/hidden_field.coffee +0 -0
  23. data/{src → app/assets/javascripts/luca}/components/fields/label_field.coffee +0 -0
  24. data/app/assets/javascripts/luca/components/fields/select_field.coffee +159 -0
  25. data/app/assets/javascripts/luca/components/fields/text_area_field.coffee +57 -0
  26. data/{src → app/assets/javascripts/luca}/components/fields/text_field.coffee +9 -3
  27. data/{src → app/assets/javascripts/luca}/components/fields/type_ahead_field.coffee +0 -0
  28. data/app/assets/javascripts/luca/components/form_view.coffee +421 -0
  29. data/app/assets/javascripts/luca/components/grid_layout_view.coffee +43 -0
  30. data/app/assets/javascripts/luca/components/index.coffee +7 -0
  31. data/app/assets/javascripts/luca/components/load_mask.coffee +8 -0
  32. data/{src → app/assets/javascripts/luca}/components/multi_collection_view.coffee +34 -34
  33. data/app/assets/javascripts/luca/components/nav_bar.coffee +80 -0
  34. data/app/assets/javascripts/luca/components/page.coffee +69 -0
  35. data/app/assets/javascripts/luca/components/page_controller.coffee +3 -0
  36. data/{src → app/assets/javascripts/luca}/components/pagination_control.coffee +13 -13
  37. data/{src → app/assets/javascripts/luca}/components/record_manager.coffee +0 -0
  38. data/{src → app/assets/javascripts/luca}/components/router.coffee +4 -1
  39. data/app/assets/javascripts/luca/components/simple_collection_view.coffee +10 -0
  40. data/app/assets/javascripts/luca/components/table_view.coffee +93 -0
  41. data/app/assets/javascripts/luca/components/table_view_scrollable.coffee +23 -0
  42. data/{src → app/assets/javascripts/luca}/concerns/application_event_bindings.coffee +1 -1
  43. data/app/assets/javascripts/luca/concerns/collection_event_bindings.coffee +47 -0
  44. data/{src → app/assets/javascripts/luca}/concerns/deferrable.coffee +1 -2
  45. data/app/assets/javascripts/luca/concerns/development_tool_helpers.coffee +30 -0
  46. data/{src → app/assets/javascripts/luca}/concerns/dom_helpers.coffee +10 -7
  47. data/{src → app/assets/javascripts/luca}/concerns/enhanced_properties.coffee +0 -0
  48. data/{src → app/assets/javascripts/luca}/concerns/filterable.coffee +39 -20
  49. data/app/assets/javascripts/luca/concerns/form_model_bindings.coffee +20 -0
  50. data/{src → app/assets/javascripts/luca}/concerns/grid_layout.coffee +0 -0
  51. data/{src → app/assets/javascripts/luca}/concerns/loadmaskable.coffee +17 -11
  52. data/{src → app/assets/javascripts/luca}/concerns/local_storage.coffee +0 -0
  53. data/app/assets/javascripts/luca/concerns/modal_view.coffee +63 -0
  54. data/{src → app/assets/javascripts/luca}/concerns/model_presenter.coffee +0 -0
  55. data/{src → app/assets/javascripts/luca}/concerns/paginatable.coffee +6 -20
  56. data/{src → app/assets/javascripts/luca}/concerns/query_collection_bindings.coffee +16 -8
  57. data/app/assets/javascripts/luca/concerns/sortable.coffee +69 -0
  58. data/app/assets/javascripts/luca/concerns/state_model.coffee +58 -0
  59. data/{src → app/assets/javascripts/luca}/concerns/templating.coffee +6 -1
  60. data/app/assets/javascripts/luca/config.coffee +54 -0
  61. data/{src → app/assets/javascripts/luca}/containers/card_view.coffee +23 -8
  62. data/{src/core → app/assets/javascripts/luca/containers}/container.coffee +228 -77
  63. data/app/assets/javascripts/luca/containers/index.coffee +2 -0
  64. data/{src → app/assets/javascripts/luca}/containers/modal_view.coffee +1 -1
  65. data/{src → app/assets/javascripts/luca}/containers/panel_toolbar.coffee +5 -6
  66. data/{src → app/assets/javascripts/luca}/containers/tab_view.coffee +19 -10
  67. data/{src → app/assets/javascripts/luca}/containers/viewport.coffee +11 -12
  68. data/{src → app/assets/javascripts/luca}/core/collection.coffee +37 -23
  69. data/{src/components → app/assets/javascripts/luca/core}/collection_view.coffee +21 -38
  70. data/{src/plugins → app/assets/javascripts/luca/core}/events.coffee +38 -6
  71. data/app/assets/javascripts/luca/core/index.coffee +12 -0
  72. data/{src → app/assets/javascripts/luca}/core/model.coffee +1 -1
  73. data/{src → app/assets/javascripts/luca}/core/observer.coffee +0 -0
  74. data/app/assets/javascripts/luca/core/panel.coffee +124 -0
  75. data/{src/define.coffee → app/assets/javascripts/luca/core/registry/component_definition.coffee} +59 -8
  76. data/{src → app/assets/javascripts/luca/core/registry}/concerns.coffee +0 -0
  77. data/app/assets/javascripts/luca/core/registry/index.coffee +4 -0
  78. data/{src/core → app/assets/javascripts/luca/core/registry}/meta_data.coffee +6 -0
  79. data/{src/core → app/assets/javascripts/luca/core/registry}/registry.coffee +20 -14
  80. data/app/assets/javascripts/luca/core/templates.coffee +51 -0
  81. data/app/assets/javascripts/luca/core/view.coffee +364 -0
  82. data/app/assets/javascripts/luca/dependencies.coffee +9 -0
  83. data/{src/tools → app/assets/javascripts/luca/development}/code_mirror_field.coffee +2 -1
  84. data/app/assets/javascripts/luca/development/code_sync_manager.coffee +126 -0
  85. data/app/assets/javascripts/luca/development/component.coffee +76 -0
  86. data/app/assets/javascripts/luca/development/components.coffee +57 -0
  87. data/{src/tools → app/assets/javascripts/luca/development}/console.coffee +6 -5
  88. data/app/assets/javascripts/luca/development/index.coffee +5 -0
  89. data/{src → app/assets/javascripts/luca}/framework.coffee +16 -99
  90. data/app/assets/javascripts/luca/index.coffee +8 -0
  91. data/{src → app/assets/javascripts/luca}/managers/collection_manager.coffee +12 -8
  92. data/app/assets/javascripts/luca/managers/index.coffee +2 -0
  93. data/app/assets/javascripts/luca/managers/socket_manager.coffee +89 -0
  94. data/{src → app/assets/javascripts/luca}/templates/components/bootstrap_form_controls.jst.ejs +0 -0
  95. data/{src → app/assets/javascripts/luca}/templates/components/collection_loader_view.jst.ejs +0 -0
  96. data/{src → app/assets/javascripts/luca}/templates/components/form_alert.jst.ejs +0 -0
  97. data/{src → app/assets/javascripts/luca}/templates/components/grid_view.jst.ejs +0 -0
  98. data/{src → app/assets/javascripts/luca}/templates/components/grid_view_empty_text.jst.ejs +0 -0
  99. data/{src → app/assets/javascripts/luca}/templates/components/load_mask.jst.ejs +0 -0
  100. data/app/assets/javascripts/luca/templates/components/nav_bar.jst.ejs +19 -0
  101. data/{src → app/assets/javascripts/luca}/templates/components/pagination.jst.ejs +0 -0
  102. data/{src/templates → app/assets/javascripts/luca/templates/components}/table_view.jst.ejs +0 -0
  103. data/{src → app/assets/javascripts/luca}/templates/containers/basic.jst.ejs +0 -0
  104. data/{src → app/assets/javascripts/luca}/templates/containers/tab_selector_container.jst.ejs +0 -0
  105. data/app/assets/javascripts/luca/templates/containers/tab_view.jst.ejs +2 -0
  106. data/{src → app/assets/javascripts/luca}/templates/containers/toolbar_wrapper.jst.ejs +0 -0
  107. data/{src → app/assets/javascripts/luca}/templates/fields/button_field.jst.ejs +0 -0
  108. data/{src → app/assets/javascripts/luca}/templates/fields/button_field_link.jst.ejs +0 -0
  109. data/{src → app/assets/javascripts/luca}/templates/fields/checkbox_array.jst.ejs +0 -0
  110. data/{src → app/assets/javascripts/luca}/templates/fields/checkbox_array_item.jst.ejs +0 -0
  111. data/{src → app/assets/javascripts/luca}/templates/fields/checkbox_field.jst.ejs +0 -0
  112. data/{src → app/assets/javascripts/luca}/templates/fields/file_upload_field.jst.ejs +0 -0
  113. data/{src → app/assets/javascripts/luca}/templates/fields/hidden_field.jst.ejs +0 -0
  114. data/{src → app/assets/javascripts/luca}/templates/fields/select_field.jst.ejs +0 -0
  115. data/{src → app/assets/javascripts/luca}/templates/fields/text_area_field.jst.ejs +0 -0
  116. data/{src → app/assets/javascripts/luca}/templates/fields/text_field.jst.ejs +0 -0
  117. data/app/assets/javascripts/luca/util/deprecations.coffee +18 -0
  118. data/app/assets/javascripts/luca/util/index.coffee +4 -0
  119. data/app/assets/javascripts/luca/util/keybindings.coffee +24 -0
  120. data/app/assets/javascripts/luca/util/logging.coffee +30 -0
  121. data/{src/util.coffee → app/assets/javascripts/luca/util/luca.coffee} +27 -4
  122. data/{src/core → app/assets/javascripts/luca/util}/script_loader.coffee +0 -0
  123. data/{src/stylesheets → app/assets/stylesheets/luca}/components/checkbox_array.scss +0 -0
  124. data/app/assets/stylesheets/luca/components/form_view.scss +7 -0
  125. data/{src/stylesheets → app/assets/stylesheets/luca}/components/grid_view.scss +0 -0
  126. data/{src/stylesheets → app/assets/stylesheets/luca}/components/load_mask.scss +0 -0
  127. data/{vendor/assets/luca-ui/components/grid_view.css → app/assets/stylesheets/luca/components/table_view.scss} +60 -51
  128. data/{src/stylesheets → app/assets/stylesheets/luca}/components/viewport.scss +0 -0
  129. data/app/assets/stylesheets/luca/containers/container.scss +19 -0
  130. data/{src/stylesheets → app/assets/stylesheets/luca}/containers/modal_view.scss +0 -0
  131. data/{src/stylesheets → app/assets/stylesheets/luca}/containers/panels.scss +0 -0
  132. data/{src/stylesheets → app/assets/stylesheets/luca}/containers/tab_view.scss +0 -0
  133. data/{src/stylesheets/tools → app/assets/stylesheets/luca/development}/console.scss +0 -0
  134. data/app/assets/stylesheets/luca/development/index.css +3 -0
  135. data/app/assets/stylesheets/luca/index.css +4 -0
  136. data/{src/stylesheets → app/assets/stylesheets/luca}/normalize.scss +0 -0
  137. data/config.ru +1 -2
  138. data/docs/framework.json +1 -0
  139. data/docs/{application.md → old/application.md} +0 -0
  140. data/docs/{collection.md → old/collection.md} +0 -0
  141. data/docs/{collection_manager.md → old/collection_manager.md} +0 -0
  142. data/docs/{container_philosophy.md → old/container_philosophy.md} +0 -0
  143. data/docs/{event_binding_helpers.md → old/event_binding_helpers.md} +0 -0
  144. data/docs/{method_caching_and_computed_properties.md → old/method_caching_and_computed_properties.md} +0 -0
  145. data/docs/{view.md → old/view.md} +0 -0
  146. data/lib/generators/luca/application/application_generator.rb +12 -8
  147. data/lib/generators/luca/application/templates/controller.rb +0 -2
  148. data/lib/generators/luca/application/templates/index.html.erb +12 -0
  149. data/lib/generators/luca/application/templates/index.html.haml +1 -0
  150. data/lib/generators/luca/application/templates/javascripts/application.coffee +18 -0
  151. data/lib/generators/luca/application/templates/javascripts/collection_manager.coffee +2 -0
  152. data/lib/generators/luca/application/templates/javascripts/config.coffee +3 -0
  153. data/lib/generators/luca/application/templates/javascripts/dependencies.coffee +3 -0
  154. data/lib/generators/luca/application/templates/javascripts/home.jst.ejs +2 -0
  155. data/lib/generators/luca/application/templates/javascripts/index.coffee +15 -0
  156. data/lib/generators/luca/application/templates/javascripts/router.coffee +4 -0
  157. data/lib/guard/luca.rb +84 -0
  158. data/lib/luca.rb +18 -1
  159. data/lib/luca/asset_compiler.rb +117 -0
  160. data/lib/luca/collection.rb +64 -0
  161. data/lib/luca/collection/endpoint.rb +37 -0
  162. data/lib/luca/collection/file_backend.rb +121 -0
  163. data/lib/luca/collection/redis_backend.rb +153 -0
  164. data/lib/luca/compiled_asset.rb +61 -0
  165. data/lib/luca/component_definition.rb +338 -0
  166. data/lib/luca/luca_application.rb +247 -0
  167. data/lib/luca/project.rb +73 -0
  168. data/lib/luca/project_harness.rb +96 -0
  169. data/lib/luca/rails.rb +5 -3
  170. data/lib/luca/rails/engine.rb +12 -0
  171. data/lib/luca/rails/version.rb +1 -2
  172. data/lib/luca/stylesheet.rb +36 -0
  173. data/lib/luca/template.rb +2 -0
  174. data/lib/luca/template_asset.rb +64 -0
  175. data/lib/railties/luca/tasks.rake +38 -0
  176. data/spec/{components → javascripts/components}/application_spec.coffee +0 -0
  177. data/spec/{components → javascripts/components}/collection_loader_view_spec.coffee +0 -0
  178. data/spec/{components → javascripts/components}/collection_view_spec.coffee +0 -0
  179. data/spec/{components → javascripts/components}/controller_spec.coffee +4 -0
  180. data/spec/{components → javascripts/components}/fields/checkbox_array_spec.coffee +0 -0
  181. data/spec/javascripts/components/form_view_spec.coffee +162 -0
  182. data/spec/{components → javascripts/components}/grid_view_spec.coffee +0 -0
  183. data/spec/{components → javascripts/components}/multi_collection_view_spec.coffee +0 -0
  184. data/spec/{components → javascripts/components}/pagination_control_spec.coffee +0 -0
  185. data/spec/{components → javascripts/components}/record_manager_spec.coffee +0 -0
  186. data/spec/{components → javascripts/components}/table_view_spec.coffee +0 -0
  187. data/spec/{components → javascripts/components}/template_spec.coffee +0 -0
  188. data/spec/javascripts/concerns/collection_event_bindings_spec.coffee +15 -0
  189. data/spec/{concerns → javascripts/concerns}/dom_helpers_spec.coffee +2 -2
  190. data/spec/{concerns → javascripts/concerns}/filterable_spec.coffee +4 -4
  191. data/spec/{concerns → javascripts/concerns}/model_presenter_spec.coffee +0 -0
  192. data/spec/{concerns → javascripts/concerns}/paginatable_spec.coffee +0 -0
  193. data/spec/javascripts/concerns/state_model_spec.coffee +55 -0
  194. data/spec/{containers → javascripts/containers}/card_view_spec.coffee +5 -0
  195. data/spec/{containers → javascripts/containers}/modal_view_spec.coffee +0 -0
  196. data/spec/{containers → javascripts/containers}/panel_view_spec.coffee +0 -0
  197. data/spec/{containers → javascripts/containers}/tab_view_spec.coffee +0 -0
  198. data/spec/{containers → javascripts/containers}/viewport_spec.coffee +0 -0
  199. data/spec/{core → javascripts/core}/collection_spec.coffee +25 -0
  200. data/spec/{concerns_spec.coffee → javascripts/core/concerns_spec.coffee} +0 -0
  201. data/spec/{core → javascripts/core}/container_spec.coffee +8 -6
  202. data/spec/{define_spec.coffee → javascripts/core/define_spec.coffee} +0 -0
  203. data/spec/javascripts/core/events_spec.coffee +26 -0
  204. data/spec/{core → javascripts/core}/field_spec.coffee +0 -0
  205. data/spec/{framework_spec.coffee → javascripts/core/framework_spec.coffee} +1 -1
  206. data/spec/{core → javascripts/core}/model_spec.coffee +0 -0
  207. data/spec/{core → javascripts/core}/observer_spec.coffee +0 -0
  208. data/spec/{util_spec.coffee → javascripts/core/util_spec.coffee} +2 -2
  209. data/spec/{core → javascripts/core}/view_spec.coffee +114 -38
  210. data/spec/javascripts/dependencies/index.coffee +3 -0
  211. data/{assets → spec}/javascripts/dependencies/jasmine-html.js +0 -0
  212. data/{assets → spec}/javascripts/dependencies/jasmine.js +0 -0
  213. data/{assets → spec}/javascripts/dependencies/sinon.js +0 -0
  214. data/spec/{helper.coffee → javascripts/helper.coffee} +0 -0
  215. data/spec/{managers → javascripts/managers}/collection_manager_spec.coffee +0 -0
  216. data/spec/{managers → javascripts/managers}/socket_manager_spec.coffee +0 -0
  217. data/spec/lib/component_definition_spec.rb +63 -0
  218. data/spec/lib/input_compiler_spec.rb +9 -0
  219. data/spec/lib/luca_application_spec.rb +30 -0
  220. data/spec/support/fixtures/application.coffee +45 -0
  221. data/spec/support/fixtures/component.coffee +34 -0
  222. data/{assets/javascripts/sandbox/views/inspector/instance_list.coffee → tutorials/component-definitions.md} +0 -0
  223. data/{spec/concerns/state_model_spec.coffee → tutorials/component-definitions/01_intro.md} +0 -0
  224. data/tutorials/component-driven-design.md +140 -0
  225. data/tutorials/structure-of-a-project.md +63 -0
  226. data/vendor/assets/javascripts/backbone-ext.js +21 -0
  227. data/vendor/assets/javascripts/backbone-min.js +38 -0
  228. data/vendor/assets/javascripts/backbone-query.min.js +1 -0
  229. data/vendor/assets/javascripts/bootstrap.min.js +7 -0
  230. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/codemirror-coffeescript.js +0 -0
  231. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/codemirror-css.js +0 -0
  232. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/codemirror-html.js +0 -0
  233. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/codemirror-javascript.js +0 -0
  234. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/codemirror-less.js +0 -0
  235. data/vendor/assets/javascripts/codemirror-ui.js +503 -0
  236. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/codemirror-vim.js +0 -0
  237. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/codemirror.js +0 -0
  238. data/vendor/assets/javascripts/hogan.js +707 -0
  239. data/vendor/assets/javascripts/inflections.js +656 -0
  240. data/vendor/assets/javascripts/jasmine-html.js +190 -0
  241. data/vendor/assets/javascripts/jasmine.js +2476 -0
  242. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/jquery.js +0 -0
  243. data/vendor/assets/javascripts/keymaster.min.js +4 -0
  244. data/vendor/assets/javascripts/luca-dependencies.min.js +6 -0
  245. data/vendor/assets/javascripts/luca-development.min.js +1 -0
  246. data/vendor/assets/javascripts/luca-spec.js +11 -0
  247. data/vendor/assets/javascripts/luca-ui.js +3336 -2561
  248. data/vendor/assets/javascripts/luca-ui.min.js +5 -5
  249. data/vendor/assets/javascripts/luca.full.min.js +10 -0
  250. data/vendor/assets/javascripts/luca.min.js +5 -0
  251. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/modal.js +0 -0
  252. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/modernizr.min.js +0 -0
  253. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/prettify.js +0 -0
  254. data/vendor/assets/javascripts/sinon.js +3469 -0
  255. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/spin-min.js +0 -0
  256. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/underscore-min.js +0 -0
  257. data/vendor/assets/javascripts/underscore-string.min.js +1 -0
  258. data/vendor/assets/stylesheets/bootstrap-responsive.min.css +9 -0
  259. data/vendor/assets/stylesheets/bootstrap.min.css +9 -0
  260. data/{assets → vendor/assets}/stylesheets/codemirror-blackboard.css +0 -0
  261. data/{assets → vendor/assets}/stylesheets/codemirror-monokai.css +0 -0
  262. data/{assets → vendor/assets}/stylesheets/codemirror.css +0 -0
  263. data/{assets → vendor/assets}/stylesheets/jasmine.css +0 -0
  264. data/vendor/assets/stylesheets/luca-components.css +204 -0
  265. data/vendor/assets/stylesheets/luca-development.css +23 -0
  266. data/vendor/assets/stylesheets/luca-ui.css +58 -461
  267. data/views/jasmine.erb +2 -2
  268. metadata +280 -336
  269. data/assets/javascripts/dependencies.coffee +0 -5
  270. data/assets/javascripts/dependencies/backbone-min.js +0 -37
  271. data/assets/javascripts/dependencies/backbone-query.min.js +0 -1
  272. data/assets/javascripts/dependencies/bootstrap.min.js +0 -7
  273. data/assets/javascripts/dependencies/coffee-script.js +0 -12189
  274. data/assets/javascripts/dependencies/underscore-string.min.js +0 -14
  275. data/assets/javascripts/luca-templates.js +0 -1
  276. data/assets/javascripts/luca-ui-base.coffee +0 -1
  277. data/assets/javascripts/luca-ui-bootstrap.js +0 -1
  278. data/assets/javascripts/luca-ui-development-tools.coffee +0 -9
  279. data/assets/javascripts/luca-ui-full.js +0 -3
  280. data/assets/javascripts/luca-ui-spec.coffee +0 -2
  281. data/assets/javascripts/luca-ui.js +0 -3
  282. data/assets/javascripts/luca/index.coffee +0 -1
  283. data/assets/javascripts/sandbox.coffee +0 -7
  284. data/assets/javascripts/sandbox/application.coffee +0 -57
  285. data/assets/javascripts/sandbox/config.coffee +0 -7
  286. data/assets/javascripts/sandbox/router.coffee +0 -24
  287. data/assets/javascripts/sandbox/templates/builder.luca +0 -2
  288. data/assets/javascripts/sandbox/templates/builder/component_list.luca +0 -1
  289. data/assets/javascripts/sandbox/templates/main.luca +0 -53
  290. data/assets/javascripts/sandbox/templates/sandbox.luca +0 -1
  291. data/assets/javascripts/sandbox/templates/sandbox/docs_index.luca +0 -1
  292. data/assets/javascripts/sandbox/templates/sandbox/navigation.luca +0 -8
  293. data/assets/javascripts/sandbox/templates/sandbox/readme.luca +0 -30
  294. data/assets/javascripts/sandbox/views/builder.coffee +0 -133
  295. data/assets/javascripts/sandbox/views/builder/builder_canvas.coffee +0 -3
  296. data/assets/javascripts/sandbox/views/builder/builder_editor.coffee +0 -6
  297. data/assets/javascripts/sandbox/views/builder/component_list.coffee +0 -38
  298. data/assets/javascripts/sandbox/views/builder/project_browser.coffee +0 -14
  299. data/assets/javascripts/sandbox/views/docs_controller.coffee +0 -7
  300. data/assets/javascripts/sandbox/views/inspector.coffee +0 -11
  301. data/assets/javascripts/sandbox/views/inspector/instance_filter.coffee +0 -18
  302. data/assets/javascripts/sandbox/views/top_navigation.coffee +0 -4
  303. data/assets/javascripts/spec-dependencies.coffee +0 -4
  304. data/assets/stylesheets/bootstrap-responsive.min.css +0 -2
  305. data/assets/stylesheets/bootstrap.min.css +0 -727
  306. data/assets/stylesheets/luca-ui-bootstrap.css +0 -4
  307. data/assets/stylesheets/luca-ui-development-tools.css +0 -5
  308. data/assets/stylesheets/luca-ui-full.css +0 -3
  309. data/assets/stylesheets/luca-ui-spec.css +0 -3
  310. data/assets/stylesheets/luca-ui.css +0 -3
  311. data/assets/stylesheets/prettify.css +0 -40
  312. data/assets/stylesheets/sandbox.css +0 -3
  313. data/assets/stylesheets/sandbox/builder.scss +0 -79
  314. data/assets/stylesheets/sandbox/sandbox.scss +0 -18
  315. data/assets/stylesheets/themes/amelia-bootstrap.css +0 -826
  316. data/assets/stylesheets/themes/slate-bootstrap.css +0 -797
  317. data/assets/stylesheets/themes/superhero-bootstrap.css +0 -830
  318. data/lib/generators/luca/application/templates/javascripts/application.js +0 -28
  319. data/lib/generators/luca/application/templates/javascripts/application.js.coffee +0 -20
  320. data/lib/generators/luca/application/templates/javascripts/config.js +0 -15
  321. data/lib/generators/luca/application/templates/javascripts/config.js.coffee +0 -9
  322. data/lib/generators/luca/application/templates/javascripts/dependencies.js +0 -5
  323. data/lib/generators/luca/application/templates/javascripts/dependencies.js.coffee +0 -5
  324. data/lib/generators/luca/application/templates/javascripts/index.js +0 -9
  325. data/lib/generators/luca/application/templates/javascripts/index.js.coffee +0 -9
  326. data/lib/generators/luca/application/templates/javascripts/main.js +0 -8
  327. data/lib/generators/luca/application/templates/javascripts/main.js.coffee +0 -3
  328. data/lib/generators/luca/application/templates/javascripts/main.jst.ejs +0 -1
  329. data/lib/generators/luca/application/templates/javascripts/router.js +0 -12
  330. data/lib/generators/luca/application/templates/javascripts/router.js.coffee +0 -7
  331. data/lib/luca/code_browser.rb +0 -55
  332. data/lib/luca/command_line.rb +0 -69
  333. data/spec/components/form_view_spec.coffee +0 -84
  334. data/spec/containers/column_view_spec.coffee +0 -0
  335. data/spec/containers/split_view_spec.coffee +0 -0
  336. data/src/components/base_toolbar.coffee +0 -17
  337. data/src/components/fields/select_field.coffee +0 -96
  338. data/src/components/fields/text_area_field.coffee +0 -42
  339. data/src/components/form_button_toolbar.coffee +0 -28
  340. data/src/components/form_view.coffee +0 -282
  341. data/src/components/grid_view.coffee +0 -269
  342. data/src/components/index.coffee +0 -1
  343. data/src/components/load_mask.coffee +0 -3
  344. data/src/components/nav_bar.coffee +0 -22
  345. data/src/components/page_controller.coffee +0 -2
  346. data/src/components/table_view.coffee +0 -69
  347. data/src/components/template.coffee +0 -5
  348. data/src/components/toolbar_dialog.coffee +0 -25
  349. data/src/concerns/collection_event_bindings.coffee +0 -26
  350. data/src/concerns/modal_view.coffee +0 -38
  351. data/src/concerns/state_model.coffee +0 -16
  352. data/src/containers/column_view.coffee +0 -42
  353. data/src/containers/page_view.coffee +0 -2
  354. data/src/containers/panel_view.coffee +0 -23
  355. data/src/containers/split_view.coffee +0 -8
  356. data/src/core/core.coffee +0 -0
  357. data/src/core/panel.coffee +0 -118
  358. data/src/core/view.coffee +0 -172
  359. data/src/index.coffee +0 -25
  360. data/src/managers/socket_manager.coffee +0 -54
  361. data/src/plugins/development_tool_helpers.coffee +0 -21
  362. data/src/samples/definition.coffee +0 -49
  363. data/src/stylesheets/base.scss +0 -0
  364. data/src/stylesheets/components/form_view.scss +0 -59
  365. data/src/stylesheets/components/toolbar.scss +0 -0
  366. data/src/stylesheets/containers/container.scss +0 -11
  367. data/src/stylesheets/tools/class_browser.scss +0 -32
  368. data/src/stylesheets/tools/code_editor.scss +0 -24
  369. data/src/stylesheets/tools/component_tester.scss +0 -26
  370. data/src/templates/components/nav_bar.jst.ejs +0 -4
  371. data/src/templates/containers/tab_view.jst.ejs +0 -2
  372. data/src/tools/application_inspector.coffee +0 -2
  373. data/src/tools/code_editor.coffee +0 -258
  374. data/src/tools/coffee_script_editor.coffee +0 -82
  375. data/src/tools/collection_inspector.coffee +0 -4
  376. data/src/tools/collections/components.coffee +0 -59
  377. data/src/tools/collections/instances.coffee +0 -15
  378. data/src/tools/component_tester.coffee +0 -462
  379. data/src/tools/models/components.coffee +0 -25
  380. data/src/tools/models/instance.coffee +0 -2
  381. data/src/tools/templates/component_tester/help.luca +0 -14
  382. data/vendor/assets/javascripts/luca-ui-base.js +0 -5304
  383. data/vendor/assets/javascripts/luca-ui-bootstrap.js +0 -9
  384. data/vendor/assets/javascripts/luca-ui-development-tools.js +0 -18561
  385. data/vendor/assets/javascripts/luca-ui-development-tools.min.js +0 -15
  386. data/vendor/assets/javascripts/luca-ui-full.js +0 -6696
  387. data/vendor/assets/javascripts/luca-ui-full.min.js +0 -9
  388. data/vendor/assets/javascripts/luca-ui-spec.js +0 -6815
  389. data/vendor/assets/javascripts/luca-ui-templates.js +0 -92
  390. data/vendor/assets/luca-ui/base.css +0 -85
  391. data/vendor/assets/luca-ui/components/application.js +0 -91
  392. data/vendor/assets/luca-ui/components/base_toolbar.js +0 -23
  393. data/vendor/assets/luca-ui/components/controller.js +0 -38
  394. data/vendor/assets/luca-ui/components/fields/button_field.js +0 -45
  395. data/vendor/assets/luca-ui/components/fields/checkbox_field.js +0 -43
  396. data/vendor/assets/luca-ui/components/fields/file_upload_field.js +0 -20
  397. data/vendor/assets/luca-ui/components/fields/hidden_field.js +0 -20
  398. data/vendor/assets/luca-ui/components/fields/select_field.js +0 -97
  399. data/vendor/assets/luca-ui/components/fields/text_area_field.js +0 -48
  400. data/vendor/assets/luca-ui/components/fields/text_field.js +0 -46
  401. data/vendor/assets/luca-ui/components/fields/type_ahead_field.js +0 -13
  402. data/vendor/assets/luca-ui/components/form_button_toolbar.js +0 -32
  403. data/vendor/assets/luca-ui/components/form_view.css +0 -32
  404. data/vendor/assets/luca-ui/components/form_view.js +0 -207
  405. data/vendor/assets/luca-ui/components/grid_view.js +0 -202
  406. data/vendor/assets/luca-ui/components/record_manager.js +0 -207
  407. data/vendor/assets/luca-ui/components/router.js +0 -36
  408. data/vendor/assets/luca-ui/components/template.js +0 -26
  409. data/vendor/assets/luca-ui/components/toolbar.css +0 -11
  410. data/vendor/assets/luca-ui/containers/card_view.js +0 -98
  411. data/vendor/assets/luca-ui/containers/column_view.js +0 -52
  412. data/vendor/assets/luca-ui/containers/container.css +0 -3
  413. data/vendor/assets/luca-ui/containers/modal_view.css +0 -0
  414. data/vendor/assets/luca-ui/containers/modal_view.js +0 -87
  415. data/vendor/assets/luca-ui/containers/panel_view.js +0 -34
  416. data/vendor/assets/luca-ui/containers/split_view.js +0 -13
  417. data/vendor/assets/luca-ui/containers/tab_view.css +0 -16
  418. data/vendor/assets/luca-ui/containers/tab_view.js +0 -80
  419. data/vendor/assets/luca-ui/containers/viewport.js +0 -18
  420. data/vendor/assets/luca-ui/core/collection.js +0 -221
  421. data/vendor/assets/luca-ui/core/container.js +0 -205
  422. data/vendor/assets/luca-ui/core/field.js +0 -59
  423. data/vendor/assets/luca-ui/core/observer.js +0 -42
  424. data/vendor/assets/luca-ui/core/view.js +0 -127
  425. data/vendor/assets/luca-ui/framework.js +0 -110
  426. data/vendor/assets/luca-ui/index.js +0 -5
  427. data/vendor/assets/luca-ui/managers/collection_manager.js +0 -98
  428. data/vendor/assets/luca-ui/managers/socket_manager.js +0 -52
  429. data/vendor/assets/luca-ui/modules/deferrable.js +0 -21
  430. data/vendor/assets/luca-ui/modules/local_storage.js +0 -81
  431. data/vendor/assets/luca-ui/normalize.css +0 -359
  432. data/vendor/assets/luca-ui/stylesheets/base.css +0 -85
  433. data/vendor/assets/luca-ui/stylesheets/components/form_view.css +0 -32
  434. data/vendor/assets/luca-ui/stylesheets/components/grid_view.css +0 -76
  435. data/vendor/assets/luca-ui/stylesheets/components/toolbar.css +0 -11
  436. data/vendor/assets/luca-ui/stylesheets/containers/container.css +0 -3
  437. data/vendor/assets/luca-ui/stylesheets/containers/modal_view.css +0 -0
  438. data/vendor/assets/luca-ui/stylesheets/containers/tab_view.css +0 -16
  439. data/vendor/assets/luca-ui/stylesheets/normalize.css +0 -359
  440. data/vendor/assets/luca-ui/templates/components/bootstrap_form_controls.js +0 -4
  441. data/vendor/assets/luca-ui/templates/components/form_view.js +0 -4
  442. data/vendor/assets/luca-ui/templates/components/grid_view.js +0 -4
  443. data/vendor/assets/luca-ui/templates/components/grid_view_empty_text.js +0 -4
  444. data/vendor/assets/luca-ui/templates/containers/basic.js +0 -4
  445. data/vendor/assets/luca-ui/templates/containers/tab_selector_container.js +0 -4
  446. data/vendor/assets/luca-ui/templates/containers/tab_view.js +0 -4
  447. data/vendor/assets/luca-ui/templates/containers/toolbar_wrapper.js +0 -4
  448. data/vendor/assets/luca-ui/templates/fields/button_field.js +0 -4
  449. data/vendor/assets/luca-ui/templates/fields/button_field_link.js +0 -4
  450. data/vendor/assets/luca-ui/templates/fields/checkbox_field.js +0 -4
  451. data/vendor/assets/luca-ui/templates/fields/file_upload_field.js +0 -4
  452. data/vendor/assets/luca-ui/templates/fields/hidden_field.js +0 -4
  453. data/vendor/assets/luca-ui/templates/fields/select_field.js +0 -4
  454. data/vendor/assets/luca-ui/templates/fields/text_area_field.js +0 -4
  455. data/vendor/assets/luca-ui/templates/fields/text_field.js +0 -4
  456. data/vendor/assets/luca-ui/templates/sample/contents.js +0 -4
  457. data/vendor/assets/luca-ui/templates/sample/welcome.js +0 -4
@@ -0,0 +1,364 @@
1
+ # `Luca.View` is an enhanced `Backbone.View` which provides common patterns for view components,
2
+ # and various helper methods and configuration conventions.
3
+ #
4
+ # #### Instance caching / naming
5
+ #
6
+ # If you provide a `@name` property to your views, they will be accessible by that property
7
+ # using the Application helper.
8
+ #
9
+ # view = new Luca.View(name:"my_view")
10
+ # Luca("my_view") === view
11
+ #
12
+ # #### CSS @className conventions
13
+ #
14
+ # In order to make it easier to componentize your views, extending from `Luca.View` will
15
+ # enable CSS class based inheritance based on the names of the view class.
16
+ #
17
+ # ##### For Example:
18
+ #
19
+ # base = Luca.register "App.views.BaseViewClass"
20
+ # base.extends "Luca.View"
21
+ # base.defines
22
+ # className: "some-other-class"
23
+ #
24
+ # child = Luca.register "App.views.ChildViewClass"
25
+ # child.extends "App.views.BaseViewClass"
26
+ # child.defines
27
+ # myClasses: ()->
28
+ # @$el.attr('class')
29
+ #
30
+ # view = new App.views.ChildViewClass()
31
+ # view.myClasses() #=> "app-base-view-class app-child-view-class some-other-class"
32
+ #
33
+ # This establishes a convention for css class names, and allows you to componetize your css
34
+ # along with the component by joining them based on the name of your view class. When using
35
+ # Sass scoping / nesting it fits very nicely together.
36
+ #
37
+ # #### Internal state machine
38
+ #
39
+ # Any `Luca.View` class which defines a `@stateful` property will automatically generate a
40
+ # `@state` model that can be used to get/set attributes on the view as well as bind to change events on these attributes.
41
+ #
42
+ # This gives your views a dedicated place to store state, and you can bind to your data models separately
43
+ # and update the DOM without confusing the two.
44
+ #
45
+ # statefulView = Luca.register "App.views.StatefulView"
46
+ # statefulView.extends "Luca.View"
47
+ #
48
+ # statefulView.defines
49
+ # # Passing an object allows you to set default values on the @state model.
50
+ # stateful:
51
+ # attribute: "value"
52
+ #
53
+ # # Whenever the attribute specified changes, call the specified method.
54
+ # stateChangeEvents:
55
+ # "attribute" : "onAttributeChange"
56
+ #
57
+ # onAttributeChange: (stateMachine, attributeValue)->
58
+ # @doSomethingWhenAttributeChanges()
59
+ #
60
+ # If this type of declarative style isn't your thing, you can still bind to events in code:
61
+ #
62
+ # view = new App.views.StatefulView()
63
+ # view.on "state:change:attribute", (stateMachine, attributeValue)=> @$el.html("New Attribute: #")
64
+ # view.set "attribute", "something"
65
+ #
66
+ # #### Event binding helpers
67
+ #
68
+ # In addition to the `@stateChangeEvent` bindings documented above, you have available
69
+ # to you similar configuration helpers for binding to events emitted by the singletons:
70
+ #
71
+ # - `Luca.Application` via `@applicationEvents`
72
+ # - `Luca.CollectionManager` via `@collectionEvents`
73
+ # - `Luca.SocketManager` via `@socketEvents`
74
+ view = Luca.register "Luca.View"
75
+ view.extends "Backbone.View"
76
+
77
+ # includes are extensions to the prototype, and have no special behavior
78
+ view.includes "Luca.Events",
79
+ "Luca.concerns.DomHelpers",
80
+ "Luca.concerns.DevelopmentToolHelpers"
81
+
82
+ # concerns are includes with special property / method conventions
83
+ # which customize the components through the use of __initializer and
84
+ # __included method names. These will be called every time an instance
85
+ # is created, and the first time the mixin is used to enhance a component.
86
+ view.mixesIn "DomHelpers",
87
+ "Templating",
88
+ "EnhancedProperties",
89
+ "CollectionEventBindings",
90
+ "ApplicationEventBindings",
91
+ "StateModel"
92
+
93
+ # Luca.View classes have the concept of special events called hooks
94
+ # which allow you to tap into the lifecycle events of your view to
95
+ # customize their behavior. This is especially useful in subclasses.
96
+ #
97
+ # You can utilize a @hook method by camelcasing the triggers defined below:
98
+ view.triggers "before:initialize",
99
+ "after:initialize",
100
+ "before:render",
101
+ "after:render",
102
+ "first:activation",
103
+ "activation",
104
+ "deactivation"
105
+
106
+ view.publicConfiguration
107
+ # Specifying a `@name` for your views is useful for views which
108
+ # there will only be one instance. This allows you to reference
109
+ # the view instances by name using the application helper:
110
+ # Luca("my_view_name")
111
+ name: undefined
112
+
113
+ # Setting this property to true will automatically bind the context
114
+ # of your event handler methods to the instance of this view. This
115
+ # saves you from having to manually do:
116
+ #
117
+ # Luca.View.extend
118
+ # events:
119
+ # "click .one" : "oneHandler"
120
+ # "click .two" : "twoHandler"
121
+ # initialize: ()->
122
+ # _.bindAll(@, "oneHandler", "twoHandler")
123
+ #
124
+ # Instead:
125
+ #
126
+ # Luca.View.extend
127
+ # autoBindEventHandlers: true
128
+ # events:
129
+ # "click .one" : "oneHandler"
130
+ #
131
+ # Optionally, you can define an array of method names you want bound
132
+ # to this view:
133
+ #
134
+ # Luca.View.extend
135
+ # bindMethods:["oneHandler","twoHandler"]
136
+ #
137
+ autoBindEventHandlers: false
138
+
139
+ # Supplying configuration to `@_events` will ensure that this configuration
140
+ # is present on views which extend from this view. In normal Backbone behavior
141
+ # the `@events` property can be overridden by views which extend, and this isn't
142
+ # always what you want from your component.
143
+ _events: undefined
144
+
145
+
146
+
147
+ # Luca.View decorates Backbone.View with some patterns and conventions.
148
+ view.publicMethods
149
+ identifier: ()->
150
+ (@displayName || @type ) + ":" + (@name || @role || @cid)
151
+
152
+ # Calls Backbone.View::remove, and removes the view from the
153
+ # instance cache. Triggers a "before:remove" event.
154
+ remove: ()->
155
+ @trigger("before:remove", @)
156
+ Luca.remove(@)
157
+ Backbone.View::remove.apply(@, arguments)
158
+
159
+ initialize: (@options={})->
160
+ @trigger "before:initialize", @, @options
161
+
162
+ _.extend @, @options
163
+
164
+ if @autoBindEventHandlers is true or @bindAllEvents is true
165
+ bindAllEventHandlers.call(@)
166
+
167
+ @cid = _.uniqueId(@name) if @name?
168
+
169
+ @$el.attr("data-luca-id", @name || @cid)
170
+
171
+ Luca.registry.cacheInstance( @cid, @ )
172
+
173
+ @setupHooks _( Luca.View::hooks.concat( @hooks ) ).uniq()
174
+
175
+ Luca.concern.setup.call(@)
176
+
177
+ @delegateEvents()
178
+
179
+ @trigger "after:initialize", @
180
+
181
+ _.bindAll(@, @bindMethods...) if @bindMethods?.legth > 0
182
+
183
+ unless _.isEmpty(@_events)
184
+ for eventId, handler of @_events
185
+ @registerEvent(eventId, handler)
186
+
187
+
188
+ debug: (args...)->
189
+ if @debugMode is true or window.LucaDebugMode is true
190
+ args.unshift @identifier()
191
+ console.log args...
192
+
193
+ trigger: ()->
194
+ if Luca.enableGlobalObserver
195
+ if Luca.developmentMode is true or @observeEvents is true
196
+ Luca.ViewObserver ||= new Luca.Observer(type:"view")
197
+ Luca.ViewObserver.relay @, arguments
198
+
199
+ Backbone.View::trigger.apply @, arguments
200
+
201
+
202
+
203
+ registerEvent: (selector, handler)->
204
+ @events ||= {}
205
+
206
+ if _.isObject(selector)
207
+ @events = _.extend(@events, selector)
208
+ else
209
+ @events[selector] = handler
210
+
211
+ @delegateEvents()
212
+
213
+ view.privateMethods
214
+ # Returns a reference to the class which this view is an instance of.
215
+ definitionClass: ()->
216
+ Luca.util.resolve(@displayName, window)?.prototype
217
+
218
+ # Returns a list of all of the collections which are properties on this view.
219
+ _collections: ()->
220
+ Luca.util.selectProperties( Luca.isBackboneCollection, @ )
221
+
222
+ # Returns a list of all of the models which are properties on this view.
223
+ _models: ()->
224
+ Luca.util.selectProperties( Luca.isBackboneModel, @ )
225
+
226
+ # Returns a list of all of the views which are properties on this view.
227
+ _views: ()->
228
+ Luca.util.selectProperties( Luca.isBackboneView, @ )
229
+
230
+ # views which inherit from Luca.View can define hooks
231
+ # or events which can be emitted from them. Automatically,
232
+ # any functions on the view which are named according to the
233
+ # convention will automatically get run.
234
+ #
235
+ # by default, all Luca.View classes come with the following:
236
+ #
237
+ # - before:render : beforeRender()
238
+ # - after:render : afterRender()
239
+ # - after:initialize : afterInitialize()
240
+ # - first:activation : firstActivation()
241
+ setupHooks: Luca.util.setupHooks
242
+
243
+ view.register()
244
+
245
+ Luca.View._originalExtend = Backbone.View.extend
246
+
247
+ # Note:
248
+ #
249
+ # I will be removing this prior to 1.0. Optimizing for collection based
250
+ # views does not belong in here, so the deferrable / collection binding stuff
251
+ # needs to go.
252
+ #
253
+ # Being able to defer rendering until the firing of an event on another object
254
+ # is something that does ask for some syntactic sugar though, so need to rethink.
255
+
256
+ Luca.View.renderStrategies =
257
+ legacy: ( _userSpecifiedMethod )->
258
+ view = @
259
+ # if a view has a deferrable property set
260
+
261
+ if @deferrable
262
+ target = @deferrable_target
263
+
264
+ unless Luca.isBackboneCollection(@deferrable)
265
+ @deferrable = @collection
266
+
267
+ target ||= @deferrable
268
+ trigger = if @deferrable_event then @deferrable_event else Luca.View.deferrableEvent
269
+
270
+ deferred = ()->
271
+ _userSpecifiedMethod.call(view)
272
+ @rendered = true
273
+ view.trigger("after:render", view)
274
+
275
+ view.defer(deferred).until(target, trigger)
276
+
277
+ view.trigger "before:render", @
278
+
279
+ autoTrigger = @deferrable_trigger || @deferUntil
280
+
281
+ if !autoTrigger?
282
+ target[ (@deferrable_method||"fetch") ].call(target)
283
+ else
284
+ fn = _.once ()=> @deferrable[ (@deferrable_method||"fetch") ]?()
285
+ (@deferrable_target || @ ).bind(@deferrable_trigger, fn)
286
+
287
+ return @
288
+
289
+ else
290
+ @trigger "before:render", @
291
+ _userSpecifiedMethod.apply(@, arguments)
292
+ @rendered = true
293
+ @trigger "after:render", @
294
+
295
+ return @
296
+
297
+ improved: (_userSpecifiedMethod)->
298
+ @trigger "before:render", @
299
+
300
+ deferred = ()=>
301
+ _userSpecifiedMethod.apply(@, arguments)
302
+ @trigger "after:render", @
303
+
304
+ console.log "doing the improved one", @deferrable
305
+
306
+ if @deferrable? and not _.isString(@deferrable)
307
+ throw "Deferrable property is expected to be a event id"
308
+
309
+ if _.isString(@deferrable)
310
+ console.log "binding to #{ @deferrable } on #{ @cid }"
311
+ view.on @deferrable, ()->
312
+ console.log "did the improved one"
313
+ deferred.call(view)
314
+ view.unbind(listenForEvent, @)
315
+
316
+ else
317
+ deferred.call(@)
318
+
319
+
320
+
321
+ Luca.View.renderWrapper = (definition)->
322
+ _userSpecifiedMethod = definition.render
323
+
324
+ _userSpecifiedMethod ||= ()-> @trigger "empty:render"
325
+
326
+ definition.render = ()->
327
+ strategy = Luca.View.renderStrategies[ @renderStrategy ||= "legacy" ]
328
+
329
+ unless _.isFunction(strategy)
330
+ throw "Invalid rendering strategy. Please see Luca.View.renderStrategies"
331
+
332
+ strategy.call(@, _userSpecifiedMethod)
333
+
334
+ @
335
+
336
+ definition
337
+
338
+ bindAllEventHandlers = ()->
339
+ for config in [@events, @componentEvents, @collectionEvents, @applicationEvents] when not _.isEmpty(config)
340
+ bindEventHandlers.call(@, config)
341
+
342
+ bindEventHandlers = (events={})->
343
+ for eventSignature, handler of events
344
+ if _.isString(handler)
345
+ try
346
+ _.bindAll @, handler
347
+ catch e
348
+ console.log "Error binding to handler - #{handler} = #{e} #{@identifier()}"
349
+
350
+ Luca.View.deferrableEvent = "reset"
351
+
352
+ Luca.View.extend = (definition={})->
353
+ definition = Luca.View.renderWrapper( definition )
354
+ # for backward compatibility
355
+ definition.concerns ||= definition.concerns if definition.concerns?
356
+
357
+ componentClass = Luca.View._originalExtend.call(@, definition)
358
+
359
+ if definition.concerns? and _.isArray( definition.concerns )
360
+ for module in definition.concerns
361
+ Luca.decorate( componentClass ).with( module )
362
+
363
+ componentClass
364
+
@@ -0,0 +1,9 @@
1
+ #= require jquery
2
+ #= require underscore-min
3
+ #= require underscore-string.min
4
+ #= require hogan.js
5
+ #= require backbone-min
6
+ #= require backbone-query.min
7
+ #= require bootstrap.min
8
+ #= require keymaster.min
9
+ #= 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
 
@@ -0,0 +1,126 @@
1
+ codeManager = Luca.register "Luca.CodeSyncManager"
2
+ codeManager.extends "Luca.SocketManager"
3
+
4
+ codeManager.publicConfiguration
5
+ host: Luca.config.codeSyncHost || "http://localhost:9292/faye"
6
+ namespace: "luca"
7
+ channel: Luca.config.codeSyncChannel || "/changes"
8
+
9
+ codeManager.classMethods
10
+ setup: (options={})->
11
+ @codeSyncManager = new Luca.CodeSyncManager(options)
12
+ @codeSyncManager.trigger("ready")
13
+
14
+ codeManager.privateMethods
15
+ initialize: (@attributes={})->
16
+ unless @attributes.host?
17
+ _.extend(@attributes, host: (@host || Luca.config.codeSyncHost))
18
+
19
+ Luca.SocketManager::initialize.call(@, @attributes)
20
+ @bindToChannel()
21
+
22
+ bindToChannel: ()->
23
+ if @client?
24
+ @client.subscribe @channel, ()=>
25
+ @onChangesNotification.apply(@, arguments)
26
+ else
27
+ @on "change:client", (socketManager, client)=>
28
+ @client.subscribe @channel, ()=>
29
+ @onChangesNotification.apply(@, arguments)
30
+
31
+ # changeData is a payload that gets sent over the socket
32
+ # whenever an asset that is being watched changes.
33
+ # it is different if the type of file is css or javascript.
34
+ onChangesNotification: (changeData={}, applicationName)->
35
+ return if _.isEmpty(changeData)
36
+ data = _( changeData ).values()[0] || {}
37
+
38
+ if data.type is "template"
39
+ @processTemplate(data)
40
+ @rerunSyncPad(data.type)
41
+
42
+ if data.type is "component_definition"
43
+ @processComponentDefinitionChange(data)
44
+ @processJavascriptChange(data)
45
+
46
+ _.delay ()=>
47
+ @rerunSyncPad(data.type)
48
+ , 25
49
+
50
+ if data.type is "javascript"
51
+ @processJavascriptChange(data)
52
+
53
+ if data.type is "stylesheet" and data?.path
54
+ @processStylesheetChange(data)
55
+
56
+ rerunSyncPad: ()->
57
+ if last = @get("last_syncpad_javascript_payload")
58
+ @processJavascriptChange(last)
59
+
60
+ processTemplate: (change={})->
61
+ fn = ()->
62
+ eval( change.contents )
63
+
64
+ fn.apply(window)
65
+
66
+ processComponentDefinitionChange: (change={})->
67
+ return if _.isEmpty(change)
68
+ @components ||= Luca.collections.Components.generate()
69
+
70
+ if change.class_name?
71
+ component = @components.findByClassName( change.class_name )
72
+
73
+ if component && change.source_file_contents?
74
+ component.set(source_file_contents: change.source_file_contents )
75
+
76
+ processJavascriptChange: (change={})->
77
+ return unless change?.compiled
78
+ existing = $("body script[data-path='#{ change.source }']")
79
+
80
+ # just to be clean
81
+ if existing.length > 1
82
+ existing.remove()
83
+
84
+ if change.source?.match(/syncpad/) and change?.compiled and true
85
+ @set("last_syncpad_javascript_payload", change)
86
+
87
+ script = @make("script", {"data-path": change.source, type:"text/javascript"}, change.compiled)
88
+ $('body').append(script)
89
+
90
+ processStylesheetChange: (change={})->
91
+ return if _.isEmpty(change)
92
+
93
+ if change.path?.match(/syncpad/) or Luca.config.codeSyncStylesheetMode is "single"
94
+ @syncStylesheet(change)
95
+ else
96
+ @replaceStylesheetAndEverythingAfter(change.path)
97
+
98
+ replaceStylesheetAndEverythingAfter: (path)->
99
+ stylesheet = path.replace('./app/assets/stylesheets', Luca.config.assetsUrlPrefix )
100
+ stylesheet = stylesheet.replace('.scss','')
101
+ existing = $("link[href*='#{ stylesheet }']")
102
+ parent = existing.parent()
103
+
104
+ return unless existing.length > 0
105
+
106
+ replaced = existing.clone()
107
+ comesAfter = existing.nextAll('link')
108
+ cloned = comesAfter.clone()
109
+
110
+ $(existing, comesAfter).remove()
111
+
112
+ parent.append( replaced )
113
+ parent.append( cloned )
114
+
115
+ syncStylesheet: (change)->
116
+ existing = $("head style[data-file='#{ change.path }']")
117
+
118
+ if existing.length > 0
119
+ existing.remove()
120
+
121
+ if change.compiled? or change.contents?
122
+ link = @make("style",{"data-file":change.path, type:"text/css"}, change.compiled || change.contents)
123
+ $('head').append( link )
124
+
125
+ codeManager.defines
126
+ make: Backbone.View::make