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.
- data/CHANGELOG +65 -2
- data/Gemfile +4 -0
- data/Gemfile.lock +18 -2
- data/Guardfile +3 -25
- data/README.md +50 -58
- data/ROADMAP +15 -32
- data/Rakefile +18 -77
- data/app.rb +12 -46
- data/{assets → app/assets}/images/glyphicons-halflings-white.png +0 -0
- data/{assets → app/assets}/images/glyphicons-halflings.png +0 -0
- data/app/assets/javascripts/luca-ui.js +1 -0
- data/app/assets/javascripts/luca/basic.coffee +8 -0
- data/{src → app/assets/javascripts/luca}/components/application.coffee +233 -65
- data/{src → app/assets/javascripts/luca}/components/collection_loader_view.coffee +0 -0
- data/app/assets/javascripts/luca/components/collection_view.coffee +207 -0
- data/{src → app/assets/javascripts/luca}/components/controller.coffee +27 -13
- data/{src/core/field.coffee → app/assets/javascripts/luca/components/fields/base.coffee} +18 -10
- data/{src → app/assets/javascripts/luca}/components/fields/button_field.coffee +8 -9
- data/{src → app/assets/javascripts/luca}/components/fields/checkbox_array.coffee +0 -0
- data/{src → app/assets/javascripts/luca}/components/fields/checkbox_field.coffee +0 -0
- data/{src → app/assets/javascripts/luca}/components/fields/file_upload_field.coffee +0 -0
- data/{src → app/assets/javascripts/luca}/components/fields/hidden_field.coffee +0 -0
- data/{src → app/assets/javascripts/luca}/components/fields/label_field.coffee +0 -0
- data/app/assets/javascripts/luca/components/fields/select_field.coffee +159 -0
- data/app/assets/javascripts/luca/components/fields/text_area_field.coffee +57 -0
- data/{src → app/assets/javascripts/luca}/components/fields/text_field.coffee +9 -3
- data/{src → app/assets/javascripts/luca}/components/fields/type_ahead_field.coffee +0 -0
- data/app/assets/javascripts/luca/components/form_view.coffee +421 -0
- data/app/assets/javascripts/luca/components/grid_layout_view.coffee +43 -0
- data/app/assets/javascripts/luca/components/index.coffee +7 -0
- data/app/assets/javascripts/luca/components/load_mask.coffee +8 -0
- data/{src → app/assets/javascripts/luca}/components/multi_collection_view.coffee +34 -34
- data/app/assets/javascripts/luca/components/nav_bar.coffee +80 -0
- data/app/assets/javascripts/luca/components/page.coffee +69 -0
- data/app/assets/javascripts/luca/components/page_controller.coffee +3 -0
- data/{src → app/assets/javascripts/luca}/components/pagination_control.coffee +13 -13
- data/{src → app/assets/javascripts/luca}/components/record_manager.coffee +0 -0
- data/{src → app/assets/javascripts/luca}/components/router.coffee +4 -1
- data/app/assets/javascripts/luca/components/simple_collection_view.coffee +10 -0
- data/app/assets/javascripts/luca/components/table_view.coffee +93 -0
- data/app/assets/javascripts/luca/components/table_view_scrollable.coffee +23 -0
- data/{src → app/assets/javascripts/luca}/concerns/application_event_bindings.coffee +1 -1
- data/app/assets/javascripts/luca/concerns/collection_event_bindings.coffee +47 -0
- data/{src → app/assets/javascripts/luca}/concerns/deferrable.coffee +1 -2
- data/app/assets/javascripts/luca/concerns/development_tool_helpers.coffee +30 -0
- data/{src → app/assets/javascripts/luca}/concerns/dom_helpers.coffee +10 -7
- data/{src → app/assets/javascripts/luca}/concerns/enhanced_properties.coffee +0 -0
- data/{src → app/assets/javascripts/luca}/concerns/filterable.coffee +39 -20
- data/app/assets/javascripts/luca/concerns/form_model_bindings.coffee +20 -0
- data/{src → app/assets/javascripts/luca}/concerns/grid_layout.coffee +0 -0
- data/{src → app/assets/javascripts/luca}/concerns/loadmaskable.coffee +17 -11
- data/{src → app/assets/javascripts/luca}/concerns/local_storage.coffee +0 -0
- data/app/assets/javascripts/luca/concerns/modal_view.coffee +63 -0
- data/{src → app/assets/javascripts/luca}/concerns/model_presenter.coffee +0 -0
- data/{src → app/assets/javascripts/luca}/concerns/paginatable.coffee +6 -20
- data/{src → app/assets/javascripts/luca}/concerns/query_collection_bindings.coffee +16 -8
- data/app/assets/javascripts/luca/concerns/sortable.coffee +69 -0
- data/app/assets/javascripts/luca/concerns/state_model.coffee +58 -0
- data/{src → app/assets/javascripts/luca}/concerns/templating.coffee +6 -1
- data/app/assets/javascripts/luca/config.coffee +54 -0
- data/{src → app/assets/javascripts/luca}/containers/card_view.coffee +23 -8
- data/{src/core → app/assets/javascripts/luca/containers}/container.coffee +228 -77
- data/app/assets/javascripts/luca/containers/index.coffee +2 -0
- data/{src → app/assets/javascripts/luca}/containers/modal_view.coffee +1 -1
- data/{src → app/assets/javascripts/luca}/containers/panel_toolbar.coffee +5 -6
- data/{src → app/assets/javascripts/luca}/containers/tab_view.coffee +19 -10
- data/{src → app/assets/javascripts/luca}/containers/viewport.coffee +11 -12
- data/{src → app/assets/javascripts/luca}/core/collection.coffee +37 -23
- data/{src/components → app/assets/javascripts/luca/core}/collection_view.coffee +21 -38
- data/{src/plugins → app/assets/javascripts/luca/core}/events.coffee +38 -6
- data/app/assets/javascripts/luca/core/index.coffee +12 -0
- data/{src → app/assets/javascripts/luca}/core/model.coffee +1 -1
- data/{src → app/assets/javascripts/luca}/core/observer.coffee +0 -0
- data/app/assets/javascripts/luca/core/panel.coffee +124 -0
- data/{src/define.coffee → app/assets/javascripts/luca/core/registry/component_definition.coffee} +59 -8
- data/{src → app/assets/javascripts/luca/core/registry}/concerns.coffee +0 -0
- data/app/assets/javascripts/luca/core/registry/index.coffee +4 -0
- data/{src/core → app/assets/javascripts/luca/core/registry}/meta_data.coffee +6 -0
- data/{src/core → app/assets/javascripts/luca/core/registry}/registry.coffee +20 -14
- data/app/assets/javascripts/luca/core/templates.coffee +51 -0
- data/app/assets/javascripts/luca/core/view.coffee +364 -0
- data/app/assets/javascripts/luca/dependencies.coffee +9 -0
- data/{src/tools → app/assets/javascripts/luca/development}/code_mirror_field.coffee +2 -1
- data/app/assets/javascripts/luca/development/code_sync_manager.coffee +126 -0
- data/app/assets/javascripts/luca/development/component.coffee +76 -0
- data/app/assets/javascripts/luca/development/components.coffee +57 -0
- data/{src/tools → app/assets/javascripts/luca/development}/console.coffee +6 -5
- data/app/assets/javascripts/luca/development/index.coffee +5 -0
- data/{src → app/assets/javascripts/luca}/framework.coffee +16 -99
- data/app/assets/javascripts/luca/index.coffee +8 -0
- data/{src → app/assets/javascripts/luca}/managers/collection_manager.coffee +12 -8
- data/app/assets/javascripts/luca/managers/index.coffee +2 -0
- data/app/assets/javascripts/luca/managers/socket_manager.coffee +89 -0
- data/{src → app/assets/javascripts/luca}/templates/components/bootstrap_form_controls.jst.ejs +0 -0
- data/{src → app/assets/javascripts/luca}/templates/components/collection_loader_view.jst.ejs +0 -0
- data/{src → app/assets/javascripts/luca}/templates/components/form_alert.jst.ejs +0 -0
- data/{src → app/assets/javascripts/luca}/templates/components/grid_view.jst.ejs +0 -0
- data/{src → app/assets/javascripts/luca}/templates/components/grid_view_empty_text.jst.ejs +0 -0
- data/{src → app/assets/javascripts/luca}/templates/components/load_mask.jst.ejs +0 -0
- data/app/assets/javascripts/luca/templates/components/nav_bar.jst.ejs +19 -0
- data/{src → app/assets/javascripts/luca}/templates/components/pagination.jst.ejs +0 -0
- data/{src/templates → app/assets/javascripts/luca/templates/components}/table_view.jst.ejs +0 -0
- data/{src → app/assets/javascripts/luca}/templates/containers/basic.jst.ejs +0 -0
- data/{src → app/assets/javascripts/luca}/templates/containers/tab_selector_container.jst.ejs +0 -0
- data/app/assets/javascripts/luca/templates/containers/tab_view.jst.ejs +2 -0
- data/{src → app/assets/javascripts/luca}/templates/containers/toolbar_wrapper.jst.ejs +0 -0
- data/{src → app/assets/javascripts/luca}/templates/fields/button_field.jst.ejs +0 -0
- data/{src → app/assets/javascripts/luca}/templates/fields/button_field_link.jst.ejs +0 -0
- data/{src → app/assets/javascripts/luca}/templates/fields/checkbox_array.jst.ejs +0 -0
- data/{src → app/assets/javascripts/luca}/templates/fields/checkbox_array_item.jst.ejs +0 -0
- data/{src → app/assets/javascripts/luca}/templates/fields/checkbox_field.jst.ejs +0 -0
- data/{src → app/assets/javascripts/luca}/templates/fields/file_upload_field.jst.ejs +0 -0
- data/{src → app/assets/javascripts/luca}/templates/fields/hidden_field.jst.ejs +0 -0
- data/{src → app/assets/javascripts/luca}/templates/fields/select_field.jst.ejs +0 -0
- data/{src → app/assets/javascripts/luca}/templates/fields/text_area_field.jst.ejs +0 -0
- data/{src → app/assets/javascripts/luca}/templates/fields/text_field.jst.ejs +0 -0
- data/app/assets/javascripts/luca/util/deprecations.coffee +18 -0
- data/app/assets/javascripts/luca/util/index.coffee +4 -0
- data/app/assets/javascripts/luca/util/keybindings.coffee +24 -0
- data/app/assets/javascripts/luca/util/logging.coffee +30 -0
- data/{src/util.coffee → app/assets/javascripts/luca/util/luca.coffee} +27 -4
- data/{src/core → app/assets/javascripts/luca/util}/script_loader.coffee +0 -0
- data/{src/stylesheets → app/assets/stylesheets/luca}/components/checkbox_array.scss +0 -0
- data/app/assets/stylesheets/luca/components/form_view.scss +7 -0
- data/{src/stylesheets → app/assets/stylesheets/luca}/components/grid_view.scss +0 -0
- data/{src/stylesheets → app/assets/stylesheets/luca}/components/load_mask.scss +0 -0
- data/{vendor/assets/luca-ui/components/grid_view.css → app/assets/stylesheets/luca/components/table_view.scss} +60 -51
- data/{src/stylesheets → app/assets/stylesheets/luca}/components/viewport.scss +0 -0
- data/app/assets/stylesheets/luca/containers/container.scss +19 -0
- data/{src/stylesheets → app/assets/stylesheets/luca}/containers/modal_view.scss +0 -0
- data/{src/stylesheets → app/assets/stylesheets/luca}/containers/panels.scss +0 -0
- data/{src/stylesheets → app/assets/stylesheets/luca}/containers/tab_view.scss +0 -0
- data/{src/stylesheets/tools → app/assets/stylesheets/luca/development}/console.scss +0 -0
- data/app/assets/stylesheets/luca/development/index.css +3 -0
- data/app/assets/stylesheets/luca/index.css +4 -0
- data/{src/stylesheets → app/assets/stylesheets/luca}/normalize.scss +0 -0
- data/config.ru +1 -2
- data/docs/framework.json +1 -0
- data/docs/{application.md → old/application.md} +0 -0
- data/docs/{collection.md → old/collection.md} +0 -0
- data/docs/{collection_manager.md → old/collection_manager.md} +0 -0
- data/docs/{container_philosophy.md → old/container_philosophy.md} +0 -0
- data/docs/{event_binding_helpers.md → old/event_binding_helpers.md} +0 -0
- data/docs/{method_caching_and_computed_properties.md → old/method_caching_and_computed_properties.md} +0 -0
- data/docs/{view.md → old/view.md} +0 -0
- data/lib/generators/luca/application/application_generator.rb +12 -8
- data/lib/generators/luca/application/templates/controller.rb +0 -2
- data/lib/generators/luca/application/templates/index.html.erb +12 -0
- data/lib/generators/luca/application/templates/index.html.haml +1 -0
- data/lib/generators/luca/application/templates/javascripts/application.coffee +18 -0
- data/lib/generators/luca/application/templates/javascripts/collection_manager.coffee +2 -0
- data/lib/generators/luca/application/templates/javascripts/config.coffee +3 -0
- data/lib/generators/luca/application/templates/javascripts/dependencies.coffee +3 -0
- data/lib/generators/luca/application/templates/javascripts/home.jst.ejs +2 -0
- data/lib/generators/luca/application/templates/javascripts/index.coffee +15 -0
- data/lib/generators/luca/application/templates/javascripts/router.coffee +4 -0
- data/lib/guard/luca.rb +84 -0
- data/lib/luca.rb +18 -1
- data/lib/luca/asset_compiler.rb +117 -0
- data/lib/luca/collection.rb +64 -0
- data/lib/luca/collection/endpoint.rb +37 -0
- data/lib/luca/collection/file_backend.rb +121 -0
- data/lib/luca/collection/redis_backend.rb +153 -0
- data/lib/luca/compiled_asset.rb +61 -0
- data/lib/luca/component_definition.rb +338 -0
- data/lib/luca/luca_application.rb +247 -0
- data/lib/luca/project.rb +73 -0
- data/lib/luca/project_harness.rb +96 -0
- data/lib/luca/rails.rb +5 -3
- data/lib/luca/rails/engine.rb +12 -0
- data/lib/luca/rails/version.rb +1 -2
- data/lib/luca/stylesheet.rb +36 -0
- data/lib/luca/template.rb +2 -0
- data/lib/luca/template_asset.rb +64 -0
- data/lib/railties/luca/tasks.rake +38 -0
- data/spec/{components → javascripts/components}/application_spec.coffee +0 -0
- data/spec/{components → javascripts/components}/collection_loader_view_spec.coffee +0 -0
- data/spec/{components → javascripts/components}/collection_view_spec.coffee +0 -0
- data/spec/{components → javascripts/components}/controller_spec.coffee +4 -0
- data/spec/{components → javascripts/components}/fields/checkbox_array_spec.coffee +0 -0
- data/spec/javascripts/components/form_view_spec.coffee +162 -0
- data/spec/{components → javascripts/components}/grid_view_spec.coffee +0 -0
- data/spec/{components → javascripts/components}/multi_collection_view_spec.coffee +0 -0
- data/spec/{components → javascripts/components}/pagination_control_spec.coffee +0 -0
- data/spec/{components → javascripts/components}/record_manager_spec.coffee +0 -0
- data/spec/{components → javascripts/components}/table_view_spec.coffee +0 -0
- data/spec/{components → javascripts/components}/template_spec.coffee +0 -0
- data/spec/javascripts/concerns/collection_event_bindings_spec.coffee +15 -0
- data/spec/{concerns → javascripts/concerns}/dom_helpers_spec.coffee +2 -2
- data/spec/{concerns → javascripts/concerns}/filterable_spec.coffee +4 -4
- data/spec/{concerns → javascripts/concerns}/model_presenter_spec.coffee +0 -0
- data/spec/{concerns → javascripts/concerns}/paginatable_spec.coffee +0 -0
- data/spec/javascripts/concerns/state_model_spec.coffee +55 -0
- data/spec/{containers → javascripts/containers}/card_view_spec.coffee +5 -0
- data/spec/{containers → javascripts/containers}/modal_view_spec.coffee +0 -0
- data/spec/{containers → javascripts/containers}/panel_view_spec.coffee +0 -0
- data/spec/{containers → javascripts/containers}/tab_view_spec.coffee +0 -0
- data/spec/{containers → javascripts/containers}/viewport_spec.coffee +0 -0
- data/spec/{core → javascripts/core}/collection_spec.coffee +25 -0
- data/spec/{concerns_spec.coffee → javascripts/core/concerns_spec.coffee} +0 -0
- data/spec/{core → javascripts/core}/container_spec.coffee +8 -6
- data/spec/{define_spec.coffee → javascripts/core/define_spec.coffee} +0 -0
- data/spec/javascripts/core/events_spec.coffee +26 -0
- data/spec/{core → javascripts/core}/field_spec.coffee +0 -0
- data/spec/{framework_spec.coffee → javascripts/core/framework_spec.coffee} +1 -1
- data/spec/{core → javascripts/core}/model_spec.coffee +0 -0
- data/spec/{core → javascripts/core}/observer_spec.coffee +0 -0
- data/spec/{util_spec.coffee → javascripts/core/util_spec.coffee} +2 -2
- data/spec/{core → javascripts/core}/view_spec.coffee +114 -38
- data/spec/javascripts/dependencies/index.coffee +3 -0
- data/{assets → spec}/javascripts/dependencies/jasmine-html.js +0 -0
- data/{assets → spec}/javascripts/dependencies/jasmine.js +0 -0
- data/{assets → spec}/javascripts/dependencies/sinon.js +0 -0
- data/spec/{helper.coffee → javascripts/helper.coffee} +0 -0
- data/spec/{managers → javascripts/managers}/collection_manager_spec.coffee +0 -0
- data/spec/{managers → javascripts/managers}/socket_manager_spec.coffee +0 -0
- data/spec/lib/component_definition_spec.rb +63 -0
- data/spec/lib/input_compiler_spec.rb +9 -0
- data/spec/lib/luca_application_spec.rb +30 -0
- data/spec/support/fixtures/application.coffee +45 -0
- data/spec/support/fixtures/component.coffee +34 -0
- data/{assets/javascripts/sandbox/views/inspector/instance_list.coffee → tutorials/component-definitions.md} +0 -0
- data/{spec/concerns/state_model_spec.coffee → tutorials/component-definitions/01_intro.md} +0 -0
- data/tutorials/component-driven-design.md +140 -0
- data/tutorials/structure-of-a-project.md +63 -0
- data/vendor/assets/javascripts/backbone-ext.js +21 -0
- data/vendor/assets/javascripts/backbone-min.js +38 -0
- data/vendor/assets/javascripts/backbone-query.min.js +1 -0
- data/vendor/assets/javascripts/bootstrap.min.js +7 -0
- data/{assets/javascripts/dependencies → vendor/assets/javascripts}/codemirror-coffeescript.js +0 -0
- data/{assets/javascripts/dependencies → vendor/assets/javascripts}/codemirror-css.js +0 -0
- data/{assets/javascripts/dependencies → vendor/assets/javascripts}/codemirror-html.js +0 -0
- data/{assets/javascripts/dependencies → vendor/assets/javascripts}/codemirror-javascript.js +0 -0
- data/{assets/javascripts/dependencies → vendor/assets/javascripts}/codemirror-less.js +0 -0
- data/vendor/assets/javascripts/codemirror-ui.js +503 -0
- data/{assets/javascripts/dependencies → vendor/assets/javascripts}/codemirror-vim.js +0 -0
- data/{assets/javascripts/dependencies → vendor/assets/javascripts}/codemirror.js +0 -0
- data/vendor/assets/javascripts/hogan.js +707 -0
- data/vendor/assets/javascripts/inflections.js +656 -0
- data/vendor/assets/javascripts/jasmine-html.js +190 -0
- data/vendor/assets/javascripts/jasmine.js +2476 -0
- data/{assets/javascripts/dependencies → vendor/assets/javascripts}/jquery.js +0 -0
- data/vendor/assets/javascripts/keymaster.min.js +4 -0
- data/vendor/assets/javascripts/luca-dependencies.min.js +6 -0
- data/vendor/assets/javascripts/luca-development.min.js +1 -0
- data/vendor/assets/javascripts/luca-spec.js +11 -0
- data/vendor/assets/javascripts/luca-ui.js +3336 -2561
- data/vendor/assets/javascripts/luca-ui.min.js +5 -5
- data/vendor/assets/javascripts/luca.full.min.js +10 -0
- data/vendor/assets/javascripts/luca.min.js +5 -0
- data/{assets/javascripts/dependencies → vendor/assets/javascripts}/modal.js +0 -0
- data/{assets/javascripts/dependencies → vendor/assets/javascripts}/modernizr.min.js +0 -0
- data/{assets/javascripts/dependencies → vendor/assets/javascripts}/prettify.js +0 -0
- data/vendor/assets/javascripts/sinon.js +3469 -0
- data/{assets/javascripts/dependencies → vendor/assets/javascripts}/spin-min.js +0 -0
- data/{assets/javascripts/dependencies → vendor/assets/javascripts}/underscore-min.js +0 -0
- data/vendor/assets/javascripts/underscore-string.min.js +1 -0
- data/vendor/assets/stylesheets/bootstrap-responsive.min.css +9 -0
- data/vendor/assets/stylesheets/bootstrap.min.css +9 -0
- data/{assets → vendor/assets}/stylesheets/codemirror-blackboard.css +0 -0
- data/{assets → vendor/assets}/stylesheets/codemirror-monokai.css +0 -0
- data/{assets → vendor/assets}/stylesheets/codemirror.css +0 -0
- data/{assets → vendor/assets}/stylesheets/jasmine.css +0 -0
- data/vendor/assets/stylesheets/luca-components.css +204 -0
- data/vendor/assets/stylesheets/luca-development.css +23 -0
- data/vendor/assets/stylesheets/luca-ui.css +58 -461
- data/views/jasmine.erb +2 -2
- metadata +280 -336
- data/assets/javascripts/dependencies.coffee +0 -5
- data/assets/javascripts/dependencies/backbone-min.js +0 -37
- data/assets/javascripts/dependencies/backbone-query.min.js +0 -1
- data/assets/javascripts/dependencies/bootstrap.min.js +0 -7
- data/assets/javascripts/dependencies/coffee-script.js +0 -12189
- data/assets/javascripts/dependencies/underscore-string.min.js +0 -14
- data/assets/javascripts/luca-templates.js +0 -1
- data/assets/javascripts/luca-ui-base.coffee +0 -1
- data/assets/javascripts/luca-ui-bootstrap.js +0 -1
- data/assets/javascripts/luca-ui-development-tools.coffee +0 -9
- data/assets/javascripts/luca-ui-full.js +0 -3
- data/assets/javascripts/luca-ui-spec.coffee +0 -2
- data/assets/javascripts/luca-ui.js +0 -3
- data/assets/javascripts/luca/index.coffee +0 -1
- data/assets/javascripts/sandbox.coffee +0 -7
- data/assets/javascripts/sandbox/application.coffee +0 -57
- data/assets/javascripts/sandbox/config.coffee +0 -7
- data/assets/javascripts/sandbox/router.coffee +0 -24
- data/assets/javascripts/sandbox/templates/builder.luca +0 -2
- data/assets/javascripts/sandbox/templates/builder/component_list.luca +0 -1
- data/assets/javascripts/sandbox/templates/main.luca +0 -53
- data/assets/javascripts/sandbox/templates/sandbox.luca +0 -1
- data/assets/javascripts/sandbox/templates/sandbox/docs_index.luca +0 -1
- data/assets/javascripts/sandbox/templates/sandbox/navigation.luca +0 -8
- data/assets/javascripts/sandbox/templates/sandbox/readme.luca +0 -30
- data/assets/javascripts/sandbox/views/builder.coffee +0 -133
- data/assets/javascripts/sandbox/views/builder/builder_canvas.coffee +0 -3
- data/assets/javascripts/sandbox/views/builder/builder_editor.coffee +0 -6
- data/assets/javascripts/sandbox/views/builder/component_list.coffee +0 -38
- data/assets/javascripts/sandbox/views/builder/project_browser.coffee +0 -14
- data/assets/javascripts/sandbox/views/docs_controller.coffee +0 -7
- data/assets/javascripts/sandbox/views/inspector.coffee +0 -11
- data/assets/javascripts/sandbox/views/inspector/instance_filter.coffee +0 -18
- data/assets/javascripts/sandbox/views/top_navigation.coffee +0 -4
- data/assets/javascripts/spec-dependencies.coffee +0 -4
- data/assets/stylesheets/bootstrap-responsive.min.css +0 -2
- data/assets/stylesheets/bootstrap.min.css +0 -727
- data/assets/stylesheets/luca-ui-bootstrap.css +0 -4
- data/assets/stylesheets/luca-ui-development-tools.css +0 -5
- data/assets/stylesheets/luca-ui-full.css +0 -3
- data/assets/stylesheets/luca-ui-spec.css +0 -3
- data/assets/stylesheets/luca-ui.css +0 -3
- data/assets/stylesheets/prettify.css +0 -40
- data/assets/stylesheets/sandbox.css +0 -3
- data/assets/stylesheets/sandbox/builder.scss +0 -79
- data/assets/stylesheets/sandbox/sandbox.scss +0 -18
- data/assets/stylesheets/themes/amelia-bootstrap.css +0 -826
- data/assets/stylesheets/themes/slate-bootstrap.css +0 -797
- data/assets/stylesheets/themes/superhero-bootstrap.css +0 -830
- data/lib/generators/luca/application/templates/javascripts/application.js +0 -28
- data/lib/generators/luca/application/templates/javascripts/application.js.coffee +0 -20
- data/lib/generators/luca/application/templates/javascripts/config.js +0 -15
- data/lib/generators/luca/application/templates/javascripts/config.js.coffee +0 -9
- data/lib/generators/luca/application/templates/javascripts/dependencies.js +0 -5
- data/lib/generators/luca/application/templates/javascripts/dependencies.js.coffee +0 -5
- data/lib/generators/luca/application/templates/javascripts/index.js +0 -9
- data/lib/generators/luca/application/templates/javascripts/index.js.coffee +0 -9
- data/lib/generators/luca/application/templates/javascripts/main.js +0 -8
- data/lib/generators/luca/application/templates/javascripts/main.js.coffee +0 -3
- data/lib/generators/luca/application/templates/javascripts/main.jst.ejs +0 -1
- data/lib/generators/luca/application/templates/javascripts/router.js +0 -12
- data/lib/generators/luca/application/templates/javascripts/router.js.coffee +0 -7
- data/lib/luca/code_browser.rb +0 -55
- data/lib/luca/command_line.rb +0 -69
- data/spec/components/form_view_spec.coffee +0 -84
- data/spec/containers/column_view_spec.coffee +0 -0
- data/spec/containers/split_view_spec.coffee +0 -0
- data/src/components/base_toolbar.coffee +0 -17
- data/src/components/fields/select_field.coffee +0 -96
- data/src/components/fields/text_area_field.coffee +0 -42
- data/src/components/form_button_toolbar.coffee +0 -28
- data/src/components/form_view.coffee +0 -282
- data/src/components/grid_view.coffee +0 -269
- data/src/components/index.coffee +0 -1
- data/src/components/load_mask.coffee +0 -3
- data/src/components/nav_bar.coffee +0 -22
- data/src/components/page_controller.coffee +0 -2
- data/src/components/table_view.coffee +0 -69
- data/src/components/template.coffee +0 -5
- data/src/components/toolbar_dialog.coffee +0 -25
- data/src/concerns/collection_event_bindings.coffee +0 -26
- data/src/concerns/modal_view.coffee +0 -38
- data/src/concerns/state_model.coffee +0 -16
- data/src/containers/column_view.coffee +0 -42
- data/src/containers/page_view.coffee +0 -2
- data/src/containers/panel_view.coffee +0 -23
- data/src/containers/split_view.coffee +0 -8
- data/src/core/core.coffee +0 -0
- data/src/core/panel.coffee +0 -118
- data/src/core/view.coffee +0 -172
- data/src/index.coffee +0 -25
- data/src/managers/socket_manager.coffee +0 -54
- data/src/plugins/development_tool_helpers.coffee +0 -21
- data/src/samples/definition.coffee +0 -49
- data/src/stylesheets/base.scss +0 -0
- data/src/stylesheets/components/form_view.scss +0 -59
- data/src/stylesheets/components/toolbar.scss +0 -0
- data/src/stylesheets/containers/container.scss +0 -11
- data/src/stylesheets/tools/class_browser.scss +0 -32
- data/src/stylesheets/tools/code_editor.scss +0 -24
- data/src/stylesheets/tools/component_tester.scss +0 -26
- data/src/templates/components/nav_bar.jst.ejs +0 -4
- data/src/templates/containers/tab_view.jst.ejs +0 -2
- data/src/tools/application_inspector.coffee +0 -2
- data/src/tools/code_editor.coffee +0 -258
- data/src/tools/coffee_script_editor.coffee +0 -82
- data/src/tools/collection_inspector.coffee +0 -4
- data/src/tools/collections/components.coffee +0 -59
- data/src/tools/collections/instances.coffee +0 -15
- data/src/tools/component_tester.coffee +0 -462
- data/src/tools/models/components.coffee +0 -25
- data/src/tools/models/instance.coffee +0 -2
- data/src/tools/templates/component_tester/help.luca +0 -14
- data/vendor/assets/javascripts/luca-ui-base.js +0 -5304
- data/vendor/assets/javascripts/luca-ui-bootstrap.js +0 -9
- data/vendor/assets/javascripts/luca-ui-development-tools.js +0 -18561
- data/vendor/assets/javascripts/luca-ui-development-tools.min.js +0 -15
- data/vendor/assets/javascripts/luca-ui-full.js +0 -6696
- data/vendor/assets/javascripts/luca-ui-full.min.js +0 -9
- data/vendor/assets/javascripts/luca-ui-spec.js +0 -6815
- data/vendor/assets/javascripts/luca-ui-templates.js +0 -92
- data/vendor/assets/luca-ui/base.css +0 -85
- data/vendor/assets/luca-ui/components/application.js +0 -91
- data/vendor/assets/luca-ui/components/base_toolbar.js +0 -23
- data/vendor/assets/luca-ui/components/controller.js +0 -38
- data/vendor/assets/luca-ui/components/fields/button_field.js +0 -45
- data/vendor/assets/luca-ui/components/fields/checkbox_field.js +0 -43
- data/vendor/assets/luca-ui/components/fields/file_upload_field.js +0 -20
- data/vendor/assets/luca-ui/components/fields/hidden_field.js +0 -20
- data/vendor/assets/luca-ui/components/fields/select_field.js +0 -97
- data/vendor/assets/luca-ui/components/fields/text_area_field.js +0 -48
- data/vendor/assets/luca-ui/components/fields/text_field.js +0 -46
- data/vendor/assets/luca-ui/components/fields/type_ahead_field.js +0 -13
- data/vendor/assets/luca-ui/components/form_button_toolbar.js +0 -32
- data/vendor/assets/luca-ui/components/form_view.css +0 -32
- data/vendor/assets/luca-ui/components/form_view.js +0 -207
- data/vendor/assets/luca-ui/components/grid_view.js +0 -202
- data/vendor/assets/luca-ui/components/record_manager.js +0 -207
- data/vendor/assets/luca-ui/components/router.js +0 -36
- data/vendor/assets/luca-ui/components/template.js +0 -26
- data/vendor/assets/luca-ui/components/toolbar.css +0 -11
- data/vendor/assets/luca-ui/containers/card_view.js +0 -98
- data/vendor/assets/luca-ui/containers/column_view.js +0 -52
- data/vendor/assets/luca-ui/containers/container.css +0 -3
- data/vendor/assets/luca-ui/containers/modal_view.css +0 -0
- data/vendor/assets/luca-ui/containers/modal_view.js +0 -87
- data/vendor/assets/luca-ui/containers/panel_view.js +0 -34
- data/vendor/assets/luca-ui/containers/split_view.js +0 -13
- data/vendor/assets/luca-ui/containers/tab_view.css +0 -16
- data/vendor/assets/luca-ui/containers/tab_view.js +0 -80
- data/vendor/assets/luca-ui/containers/viewport.js +0 -18
- data/vendor/assets/luca-ui/core/collection.js +0 -221
- data/vendor/assets/luca-ui/core/container.js +0 -205
- data/vendor/assets/luca-ui/core/field.js +0 -59
- data/vendor/assets/luca-ui/core/observer.js +0 -42
- data/vendor/assets/luca-ui/core/view.js +0 -127
- data/vendor/assets/luca-ui/framework.js +0 -110
- data/vendor/assets/luca-ui/index.js +0 -5
- data/vendor/assets/luca-ui/managers/collection_manager.js +0 -98
- data/vendor/assets/luca-ui/managers/socket_manager.js +0 -52
- data/vendor/assets/luca-ui/modules/deferrable.js +0 -21
- data/vendor/assets/luca-ui/modules/local_storage.js +0 -81
- data/vendor/assets/luca-ui/normalize.css +0 -359
- data/vendor/assets/luca-ui/stylesheets/base.css +0 -85
- data/vendor/assets/luca-ui/stylesheets/components/form_view.css +0 -32
- data/vendor/assets/luca-ui/stylesheets/components/grid_view.css +0 -76
- data/vendor/assets/luca-ui/stylesheets/components/toolbar.css +0 -11
- data/vendor/assets/luca-ui/stylesheets/containers/container.css +0 -3
- data/vendor/assets/luca-ui/stylesheets/containers/modal_view.css +0 -0
- data/vendor/assets/luca-ui/stylesheets/containers/tab_view.css +0 -16
- data/vendor/assets/luca-ui/stylesheets/normalize.css +0 -359
- data/vendor/assets/luca-ui/templates/components/bootstrap_form_controls.js +0 -4
- data/vendor/assets/luca-ui/templates/components/form_view.js +0 -4
- data/vendor/assets/luca-ui/templates/components/grid_view.js +0 -4
- data/vendor/assets/luca-ui/templates/components/grid_view_empty_text.js +0 -4
- data/vendor/assets/luca-ui/templates/containers/basic.js +0 -4
- data/vendor/assets/luca-ui/templates/containers/tab_selector_container.js +0 -4
- data/vendor/assets/luca-ui/templates/containers/tab_view.js +0 -4
- data/vendor/assets/luca-ui/templates/containers/toolbar_wrapper.js +0 -4
- data/vendor/assets/luca-ui/templates/fields/button_field.js +0 -4
- data/vendor/assets/luca-ui/templates/fields/button_field_link.js +0 -4
- data/vendor/assets/luca-ui/templates/fields/checkbox_field.js +0 -4
- data/vendor/assets/luca-ui/templates/fields/file_upload_field.js +0 -4
- data/vendor/assets/luca-ui/templates/fields/hidden_field.js +0 -4
- data/vendor/assets/luca-ui/templates/fields/select_field.js +0 -4
- data/vendor/assets/luca-ui/templates/fields/text_area_field.js +0 -4
- data/vendor/assets/luca-ui/templates/fields/text_field.js +0 -4
- data/vendor/assets/luca-ui/templates/sample/contents.js +0 -4
- data/vendor/assets/luca-ui/templates/sample/welcome.js +0 -4
data/app.rb
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
$LOAD_PATH.unshift( File.join(File.dirname(__FILE__),'lib') )
|
|
2
2
|
require 'rubygems'
|
|
3
3
|
require 'bundler'
|
|
4
|
-
|
|
4
|
+
require 'luca'
|
|
5
|
+
require 'redcarpet'
|
|
6
|
+
require 'active_support/core_ext'
|
|
7
|
+
Bundler.require(:default, :development)
|
|
5
8
|
|
|
6
9
|
require 'faker'
|
|
7
10
|
|
|
@@ -11,9 +14,6 @@ module AssetHelpers
|
|
|
11
14
|
end
|
|
12
15
|
end
|
|
13
16
|
|
|
14
|
-
require "#{ File.expand_path('../', __FILE__) }/lib/luca/template.rb"
|
|
15
|
-
require "#{ File.expand_path('../', __FILE__) }/lib/luca/code_browser.rb"
|
|
16
|
-
|
|
17
17
|
module Luca
|
|
18
18
|
class Template
|
|
19
19
|
def self.namespace
|
|
@@ -25,23 +25,26 @@ end
|
|
|
25
25
|
class App < Sinatra::Base
|
|
26
26
|
set :root, File.expand_path('../', __FILE__)
|
|
27
27
|
set :sprockets, Sprockets::Environment.new(root)
|
|
28
|
-
set :precompile, [ /\w+\.(?!js|css).+/, /application.(css|js)$/ ]
|
|
29
28
|
set :assets_prefix, 'assets'
|
|
30
29
|
set :assets_path, File.join(root, 'public', assets_prefix)
|
|
31
30
|
|
|
32
31
|
sprockets.register_engine '.luca', Luca::Template
|
|
33
32
|
|
|
34
33
|
configure do
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
HoganAssets::Config.configure do |config|
|
|
35
|
+
config.template_namespace = 'JST'
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
sprockets.append_path(File.join(root, 'app', 'assets', 'stylesheets'))
|
|
39
|
+
sprockets.append_path(File.join(root, 'app', 'assets', 'javascripts'))
|
|
37
40
|
sprockets.append_path(File.join(root, 'vendor', 'assets', 'javascripts'))
|
|
38
41
|
sprockets.append_path(File.join(root, 'vendor', 'assets', 'stylesheets'))
|
|
39
|
-
sprockets.append_path(File.join(root, 'assets', 'images'))
|
|
40
42
|
sprockets.append_path(File.join(root, 'vendor', 'assets', 'images'))
|
|
41
43
|
|
|
42
44
|
sprockets.context_class.instance_eval do
|
|
43
45
|
include AssetHelpers
|
|
44
46
|
end
|
|
47
|
+
|
|
45
48
|
end
|
|
46
49
|
|
|
47
50
|
helpers do
|
|
@@ -56,41 +59,4 @@ class App < Sinatra::Base
|
|
|
56
59
|
erb :jasmine
|
|
57
60
|
end
|
|
58
61
|
|
|
59
|
-
Luca::CodeBrowser.look_for_source_in( File.join(File.expand_path('../', __FILE__),'src') )
|
|
60
|
-
|
|
61
|
-
get "/luca/source-map.js" do
|
|
62
|
-
source_map = {}
|
|
63
|
-
|
|
64
|
-
files = (["src/**/*.coffee","assets/javascripts/sandbox/**/*.coffee"]).map do |location|
|
|
65
|
-
Dir.glob("#{ App.root }/#{ location }")
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
files.flatten.each do |file|
|
|
69
|
-
definitions = IO.read(file).lines.to_a.grep /_\.def/
|
|
70
|
-
|
|
71
|
-
definitions.each do |definition|
|
|
72
|
-
component = definition.match(/_\.def\(['"](.+)['"]\)\./)
|
|
73
|
-
|
|
74
|
-
if component and component[1]
|
|
75
|
-
componentId = component[1].gsub(/['"].*$/,'')
|
|
76
|
-
if componentId
|
|
77
|
-
source_map[ componentId ] = {className:componentId,file:file,source:IO.read(file)}
|
|
78
|
-
end
|
|
79
|
-
end
|
|
80
|
-
end
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
JSON.generate source_map.values
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
get "/components" do
|
|
87
|
-
if params[:component]
|
|
88
|
-
component = params[:component]
|
|
89
|
-
source = Luca::CodeBrowser.get_source_for( component )
|
|
90
|
-
{className:component, source:source}.to_json
|
|
91
|
-
else
|
|
92
|
-
Luca::CodeBrowser.map_source
|
|
93
|
-
end
|
|
94
|
-
end
|
|
95
|
-
|
|
96
62
|
end
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//= require ./luca/index
|
|
@@ -1,14 +1,72 @@
|
|
|
1
|
-
# Luca.Application
|
|
1
|
+
# The `Luca.Application` is the main entry point into your Application.
|
|
2
|
+
# It acts as a global state machine, page controller, and router, in addition
|
|
3
|
+
# to providing access to other singletons such as the CollectionManager, and SocketManager.
|
|
4
|
+
#
|
|
5
|
+
# The structure of a common `Luca.Application` is that it contains one or many `Pages` which
|
|
6
|
+
# themselves are made up of the components of your application. One `Page` is visible at a time
|
|
7
|
+
# and which page is displayed is managed by an instance of the `Luca.components.Controller` class.
|
|
2
8
|
#
|
|
3
|
-
#
|
|
4
|
-
#
|
|
9
|
+
# ### Example Configuration
|
|
10
|
+
# application = Luca.register "App.Application"
|
|
11
|
+
# application.extends "Luca.Application"
|
|
12
|
+
#
|
|
13
|
+
# application.defines
|
|
14
|
+
# name: "MyApplication"
|
|
15
|
+
# routes:
|
|
16
|
+
# "" : "home"
|
|
17
|
+
# "standard/backbone/style/:route" : "name_of_page#name_of_method"
|
|
18
|
+
#
|
|
19
|
+
# components:[
|
|
20
|
+
# name: "home"
|
|
21
|
+
# ,
|
|
22
|
+
# type: "your_view"
|
|
23
|
+
# name: "name_of_page"
|
|
24
|
+
# name_of_method: (routeParam)->
|
|
25
|
+
# @doSomethignToSetupYourPageWithThePassed(routeParam)
|
|
26
|
+
# ]
|
|
27
|
+
#
|
|
28
|
+
# App.onReady ()->
|
|
29
|
+
# window.MyApp = new App.Application();
|
|
30
|
+
# window.MyApp.boot()
|
|
31
|
+
#
|
|
32
|
+
# #### @routes and pages
|
|
33
|
+
#
|
|
34
|
+
# In the above example, our application contains two pages, one with the name 'home'
|
|
35
|
+
# and one with the name 'name_of_page'. It also specifies a `@routes` property which
|
|
36
|
+
# is identical to the configuration you would see in a standard `Backbone.Router`.
|
|
37
|
+
#
|
|
38
|
+
# Whenever the route matches 'standard/backbone/style/route' the `App.Application` instance
|
|
39
|
+
# will send an instruction to the `Luca.components.Controller` to `activate` the page whose name
|
|
40
|
+
# is passed in the `@routes` config.
|
|
41
|
+
#
|
|
42
|
+
# If that page defines a method called `@routeHandler` it will be called with the parameters
|
|
43
|
+
# from the route. In the `@routes` config you can specify your own route handler method
|
|
44
|
+
# by using the rails style `page_name#action` and it will call the `@action` method instead
|
|
45
|
+
# on the view named `page_name`.
|
|
46
|
+
#
|
|
47
|
+
# The `App.Application` instance, also accessible by `window.MyApp`, or through the helper `App()`
|
|
48
|
+
# or `Luca.getApplication()` maintains the state of which page is active. You can access this
|
|
49
|
+
# in your code by calling `App().activePage()`.
|
|
50
|
+
#
|
|
51
|
+
# #### Controllers
|
|
52
|
+
#
|
|
53
|
+
# The `Luca.components.Controller` is a special type of component which contains
|
|
54
|
+
# other views, or `Pages` which only one will be visible at any given time. It expects
|
|
55
|
+
# that each page will have its own unique `@name` property. A `Luca.components.Controller` can
|
|
56
|
+
# contain other controllers, providing you with a way of structuring your application layout
|
|
57
|
+
# in an organized, hierarchal fashion.
|
|
58
|
+
#
|
|
59
|
+
# By default, any `Luca.Application` will have one `Luca.components.Controller` automatically
|
|
60
|
+
# created named 'main_controller' which is accessible by `MyApp.getMainController()`. Any
|
|
61
|
+
# components you define on the `Luca.Application` instance will be wrapped by the main controller
|
|
62
|
+
# automatically unless you specify `@useController = false` in your Application component definition.
|
|
5
63
|
application = Luca.register "Luca.Application"
|
|
6
64
|
application.extends "Luca.containers.Viewport"
|
|
7
65
|
|
|
8
66
|
application.triggers "controller:change",
|
|
9
67
|
"action:change"
|
|
10
68
|
|
|
11
|
-
application.
|
|
69
|
+
application.publicConfiguration
|
|
12
70
|
name: "MyApp"
|
|
13
71
|
|
|
14
72
|
# The Application uses a Backbone.Model as a state machine, which
|
|
@@ -16,7 +74,7 @@ application.publicInterface
|
|
|
16
74
|
# most importantly to bind to change events of certain attributes.
|
|
17
75
|
#
|
|
18
76
|
# the @defaultState property will be the default attributes
|
|
19
|
-
|
|
77
|
+
stateful: {}
|
|
20
78
|
|
|
21
79
|
# if autoBoot is set to true, the application will
|
|
22
80
|
# attempt to boot on document ready.
|
|
@@ -52,6 +110,12 @@ application.publicInterface
|
|
|
52
110
|
# with several 'pages' so to speak
|
|
53
111
|
useController: true
|
|
54
112
|
|
|
113
|
+
# if you have special rendering requirements for
|
|
114
|
+
# the application's components, you can assign the
|
|
115
|
+
# specific element you want to render the container
|
|
116
|
+
# to inside of the #viewport
|
|
117
|
+
mainControllerContainer: undefined
|
|
118
|
+
|
|
55
119
|
# Key Handler
|
|
56
120
|
#
|
|
57
121
|
# One responsibility of the application, since it is a viewport which monopolizes the entire screen
|
|
@@ -61,21 +125,23 @@ application.publicInterface
|
|
|
61
125
|
useKeyHandler: false
|
|
62
126
|
|
|
63
127
|
# You can configure key events by specifying them by their name, as it exists in Luca.keyMap. For example:
|
|
64
|
-
#
|
|
65
|
-
keyEvents: {}
|
|
66
128
|
|
|
67
|
-
# keyEvents
|
|
68
|
-
#
|
|
69
|
-
|
|
70
|
-
#
|
|
71
|
-
#
|
|
72
|
-
#
|
|
73
|
-
#
|
|
74
|
-
# keyup: controlUpHandler
|
|
75
|
-
# control_meta:
|
|
76
|
-
# keydown: metaControlKeyDownHandler
|
|
77
|
-
#
|
|
129
|
+
# keyEvents understands the following modifiers:
|
|
130
|
+
# `⇧`, `shift`, `option`, `⌥`, `alt`, `ctrl`, `control`, `command`, and `⌘`.
|
|
131
|
+
|
|
132
|
+
# The following special keys can be used for shortcuts:
|
|
133
|
+
# `backspace`, `tab`, `clear`, `enter`, `return`, `esc`, `escape`, `space`,
|
|
134
|
+
# `up`, `down`, `left`, `right`, `home`, `end`, `pageup`, `pagedown`, `del`, `delete`
|
|
135
|
+
# and `f1` through `f19`.
|
|
78
136
|
#
|
|
137
|
+
# Example:
|
|
138
|
+
# ```coffeescript
|
|
139
|
+
# application.configuration
|
|
140
|
+
# keyEvents:
|
|
141
|
+
# '⌘+r, ctrl+r': "keyHandlerFunction"
|
|
142
|
+
# keyHandlerFunction: -> alert 'something + r was pressed'
|
|
143
|
+
# ```
|
|
144
|
+
keyEvents: {}
|
|
79
145
|
|
|
80
146
|
# applications have one component, the controller.
|
|
81
147
|
# any components defined on the application class directly
|
|
@@ -88,6 +154,19 @@ application.publicInterface
|
|
|
88
154
|
templateContainer: "Luca.templates"
|
|
89
155
|
]
|
|
90
156
|
|
|
157
|
+
# create getter methods for the various
|
|
158
|
+
# roles in the application's components on the
|
|
159
|
+
# application itself. false by default.
|
|
160
|
+
createRoleBasedGetters: false
|
|
161
|
+
|
|
162
|
+
# create an instance of Luca.SocketManager
|
|
163
|
+
# which is a Backbone.Events style abstraction that
|
|
164
|
+
# sits on top of services like faye, or socket.io
|
|
165
|
+
useSocketManager: false
|
|
166
|
+
socketManagerOptions: {}
|
|
167
|
+
|
|
168
|
+
# Don't create getters on this component
|
|
169
|
+
# for the nested components
|
|
91
170
|
initialize: (@options={})->
|
|
92
171
|
app = @
|
|
93
172
|
appName = @name
|
|
@@ -95,19 +174,26 @@ application.publicInterface
|
|
|
95
174
|
|
|
96
175
|
Luca.Application.registerInstance(@)
|
|
97
176
|
|
|
98
|
-
Luca.
|
|
177
|
+
Luca.concerns.StateModel.__initializer.call(@)
|
|
99
178
|
|
|
100
|
-
|
|
179
|
+
# The Collection Manager is responsible for managing instances
|
|
180
|
+
# of collections, usually to guarantee only a single collection is
|
|
181
|
+
# instantiated for a given resource, to maintain 'authoritative'
|
|
182
|
+
# representations of models.
|
|
183
|
+
@setupCollectionManager()
|
|
184
|
+
|
|
185
|
+
# Socket Manager provides a bridge between remote pub/sub providers and
|
|
186
|
+
# the backbone.events interface on various components in the system.
|
|
187
|
+
@setupSocketManager()
|
|
188
|
+
|
|
189
|
+
Luca.containers.Viewport::initialize.apply @, arguments
|
|
101
190
|
|
|
102
191
|
# The Controller is the piece of the application that handles showing
|
|
103
192
|
# and hiding 'pages' of the app. The Application has a navigate_to
|
|
104
193
|
# method which delegates to the controller, and allows you to navigate
|
|
105
194
|
# to a given page, or component, by its name. The controller integrates
|
|
106
195
|
# with the state machine of the application
|
|
107
|
-
@setupMainController() if @useController is true
|
|
108
|
-
|
|
109
|
-
# The Collection Manager is responsible
|
|
110
|
-
@setupCollectionManager()
|
|
196
|
+
@setupMainController() if @useController is true
|
|
111
197
|
|
|
112
198
|
# we will render when all of the various components
|
|
113
199
|
# which handle our data dependencies determine that
|
|
@@ -126,10 +212,8 @@ application.publicInterface
|
|
|
126
212
|
# keyEvents:
|
|
127
213
|
# meta:
|
|
128
214
|
# forwardslash: "altSlashHandler"
|
|
129
|
-
if @useKeyRouter is true
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
@setupKeyHandler() if (@useKeyHandler is true or @useKeyRouter is true) and @keyEvents?
|
|
215
|
+
if (@useKeyHandler is true or @useKeyRouter is true) and @keyEvents?
|
|
216
|
+
@setupKeyHandler()
|
|
133
217
|
|
|
134
218
|
# if the application is a plugin designed to modify the behavior
|
|
135
219
|
# of another app, then don't claim ownership. otherwise the most common
|
|
@@ -147,12 +231,12 @@ application.publicInterface
|
|
|
147
231
|
window[ appName ] = app
|
|
148
232
|
app.boot()
|
|
149
233
|
|
|
234
|
+
Luca.trigger "application:available", @
|
|
235
|
+
|
|
150
236
|
# @activeView() returns a reference to the instance of the view
|
|
151
|
-
# which is currently monopolizing the viewport.
|
|
152
|
-
#
|
|
153
|
-
#
|
|
154
|
-
# nested within the main controller, if there are any, or the view
|
|
155
|
-
# itself which is active on the main controller.
|
|
237
|
+
# which is currently monopolizing the viewport. In an application
|
|
238
|
+
# which uses a controller hierarchy, it will be the last controller
|
|
239
|
+
# has activated one of its pages.
|
|
156
240
|
activeView: ()->
|
|
157
241
|
if active = @activeSubSection()
|
|
158
242
|
@view( active )
|
|
@@ -182,6 +266,8 @@ application.publicInterface
|
|
|
182
266
|
# of the views
|
|
183
267
|
boot: ()->
|
|
184
268
|
@trigger "ready"
|
|
269
|
+
for service in [@collectionManager, @socket, @router]
|
|
270
|
+
service?.trigger("ready")
|
|
185
271
|
|
|
186
272
|
# delegate to the collection manager's get or create function.
|
|
187
273
|
# use App.collection() to create or access existing collections
|
|
@@ -225,7 +311,7 @@ application.privateInterface
|
|
|
225
311
|
|
|
226
312
|
if keyEvent = source?[keyname]
|
|
227
313
|
if @[keyEvent]? and _.isFunction(@[keyEvent])
|
|
228
|
-
@[keyEvent]?.call(
|
|
314
|
+
@[keyEvent]?.call(@, e, keyname, keyEvent)
|
|
229
315
|
else
|
|
230
316
|
@trigger(keyEvent, e, keyname)
|
|
231
317
|
|
|
@@ -235,31 +321,35 @@ application.privateInterface
|
|
|
235
321
|
# the active card on the global state chart
|
|
236
322
|
@getMainController()?.bind "after:card:switch", (previous,current)=>
|
|
237
323
|
@state.set(active_section:current.name)
|
|
238
|
-
app.trigger "controller:change"
|
|
324
|
+
app.trigger "controller:change", previous.name, current.name
|
|
239
325
|
|
|
240
326
|
# any time the card switches on one of the sub controllers
|
|
241
327
|
# then we should track the active sub section on the global state chart
|
|
242
328
|
@getMainController()?.each (component)=>
|
|
243
|
-
type = component.type || component.
|
|
329
|
+
type = component.type || component.ctype
|
|
244
330
|
if type.match(/controller$/)
|
|
245
331
|
component.bind "after:card:switch", (previous,current)=>
|
|
246
332
|
@state.set(active_sub_section:current.name)
|
|
247
|
-
app.trigger "action:change"
|
|
333
|
+
app.trigger "action:change", previous.name, current.name
|
|
248
334
|
|
|
249
335
|
setupMainController: ()->
|
|
250
336
|
if @useController is true
|
|
251
337
|
definedComponents = @components || []
|
|
252
|
-
|
|
253
|
-
@components = [
|
|
338
|
+
base =
|
|
254
339
|
type: 'controller'
|
|
255
340
|
name: "main_controller"
|
|
256
341
|
role: "main_controller"
|
|
257
342
|
components: definedComponents
|
|
258
|
-
]
|
|
259
|
-
|
|
260
|
-
@getMainController = ()=> @findComponentByRole('main_controller')
|
|
261
343
|
|
|
262
|
-
|
|
344
|
+
if @mainControllerContainer?
|
|
345
|
+
_.extend(base, container: @mainControllerContainer)
|
|
346
|
+
|
|
347
|
+
@components = [base]
|
|
348
|
+
|
|
349
|
+
@getMainController = ()=>
|
|
350
|
+
@findComponentByRole('main_controller')
|
|
351
|
+
|
|
352
|
+
@defer( @setupControllerBindings, false ).until("after:components")
|
|
263
353
|
|
|
264
354
|
setupCollectionManager: ()->
|
|
265
355
|
return unless @useCollectionManager is true
|
|
@@ -286,19 +376,43 @@ application.privateInterface
|
|
|
286
376
|
collectionManagerOptions =
|
|
287
377
|
name: @collectionManager
|
|
288
378
|
|
|
379
|
+
|
|
289
380
|
# let's try and get the collection manager by name if we can
|
|
290
381
|
@collectionManager = Luca.CollectionManager.get?( collectionManagerOptions.name )
|
|
291
382
|
|
|
292
383
|
# if we can't, then we will have to create one ourselves
|
|
293
384
|
unless _.isFunction(@collectionManager?.get)
|
|
385
|
+
collectionManagerOptions.autoStart = false
|
|
294
386
|
@collectionManager = new @collectionManagerClass( collectionManagerOptions )
|
|
295
387
|
|
|
388
|
+
setupSocketManager: ()->
|
|
389
|
+
return if _.isEmpty(@socketManagerOptions)
|
|
390
|
+
_.extend(@socketManagerOptions, autoStart: false)
|
|
391
|
+
|
|
392
|
+
@socket = new Luca.SocketManager(@socketManagerOptions)
|
|
393
|
+
|
|
296
394
|
setupRouter: ()->
|
|
297
|
-
|
|
395
|
+
return if not @router? and not @routes?
|
|
396
|
+
|
|
397
|
+
routerClass = Luca.Router
|
|
398
|
+
routerClass = Luca.util.resolve(@router) if _.isString(@router)
|
|
298
399
|
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
400
|
+
routerConfig = routerClass.prototype
|
|
401
|
+
routerConfig.routes ||= {}
|
|
402
|
+
routerConfig.app = @
|
|
403
|
+
|
|
404
|
+
if _.isObject( @routes )
|
|
405
|
+
for routePattern, endpoint of @routes
|
|
406
|
+
if endpoint.match(/\ /)
|
|
407
|
+
[page, action] = endpoint.split(' ')
|
|
408
|
+
else if endpoint.match(/\#/)
|
|
409
|
+
[page, action] = endpoint.split('#')
|
|
410
|
+
|
|
411
|
+
fn = _.uniqueId(page)
|
|
412
|
+
routerConfig[fn] = Luca.Application.routeTo(page).action(action)
|
|
413
|
+
routerConfig.routes[ routePattern ] = fn
|
|
414
|
+
|
|
415
|
+
@router = new routerClass(routerConfig)
|
|
302
416
|
|
|
303
417
|
# if this application has a router associated with it
|
|
304
418
|
# then we need to start backbone history on a certain event.
|
|
@@ -321,9 +435,54 @@ application.privateInterface
|
|
|
321
435
|
$( document ).on( keyEvent, handler )
|
|
322
436
|
|
|
323
437
|
application.classInterface
|
|
324
|
-
instances:
|
|
438
|
+
instances:{}
|
|
439
|
+
|
|
440
|
+
# Public: For purely informational purposes, describes the structure
|
|
441
|
+
# of the Application's controller views, and any of their nested controllers views.
|
|
442
|
+
pageHierarchy: ()->
|
|
443
|
+
app = Luca()
|
|
444
|
+
mainController = app.getMainController()
|
|
445
|
+
|
|
446
|
+
getTree = (node)->
|
|
447
|
+
return {} unless node.components? or node.pages?
|
|
448
|
+
|
|
449
|
+
# recursively walks the pages on a controller
|
|
450
|
+
_( node.components || node.pages ).reduce (memo, page)->
|
|
451
|
+
memo[ page.name ] = page.name
|
|
452
|
+
memo[ page.name ] = getTree(page) if page.navigate_to?
|
|
453
|
+
memo
|
|
454
|
+
, {}
|
|
455
|
+
|
|
456
|
+
getTree( mainController )
|
|
457
|
+
|
|
458
|
+
# Private: registers the instance of the Luca.Appliction
|
|
459
|
+
# so that it is available via the Luca() helper, or through
|
|
460
|
+
# a call to Luca.Application.get()
|
|
325
461
|
registerInstance: (app)->
|
|
326
462
|
Luca.Application.instances[ app.name ] = app
|
|
463
|
+
|
|
464
|
+
# Keymaster understands the following modifiers:
|
|
465
|
+
# `⇧`, `shift`, `option`, `⌥`, `alt`, `ctrl`, `control`, `command`, and `⌘`.
|
|
466
|
+
|
|
467
|
+
# The following special keys can be used for shortcuts:
|
|
468
|
+
# `backspace`, `tab`, `clear`, `enter`, `return`, `esc`, `escape`, `space`,
|
|
469
|
+
# `up`, `down`, `left`, `right`, `home`, `end`, `pageup`, `pagedown`, `del`, `delete`
|
|
470
|
+
# and `f1` through `f19`.
|
|
471
|
+
checkForKeymaster: ()->
|
|
472
|
+
if window?.key?.noConflict
|
|
473
|
+
Luca.key = window.key.noConflict()
|
|
474
|
+
|
|
475
|
+
Luca.Application::setupKeyHandler = ()->
|
|
476
|
+
return unless @keyEvents
|
|
477
|
+
Luca.util.setupKeymaster(@keyEvents, "all").on(@)
|
|
478
|
+
|
|
479
|
+
# Private: Recursively navigates down the controller page hierarchy
|
|
480
|
+
# to the page you specify by name. You can specify the
|
|
481
|
+
# method which is to be called at the end of the chain.
|
|
482
|
+
#
|
|
483
|
+
# This is used internally by the Application as it sets up
|
|
484
|
+
# the @routes property and uses it to configure the Luca.Router
|
|
485
|
+
# instance for your app.
|
|
327
486
|
routeTo: (pages...)->
|
|
328
487
|
last = _( pages ).last()
|
|
329
488
|
first = _( pages ).first()
|
|
@@ -335,35 +494,44 @@ application.classInterface
|
|
|
335
494
|
path = @app || Luca()
|
|
336
495
|
index = 0
|
|
337
496
|
|
|
497
|
+
# we can specify a page by name, and not have to know its full path
|
|
338
498
|
if pages.length is 1 and target = Luca(first)
|
|
339
499
|
pages = target.controllerPath()
|
|
340
500
|
|
|
501
|
+
# when we do know the full path
|
|
341
502
|
for page in pages when _.isString(page)
|
|
342
503
|
nextItem = pages[++index]
|
|
343
|
-
|
|
504
|
+
target = Luca(page)
|
|
344
505
|
|
|
345
|
-
if
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
action = Luca.util.read(routeHandler)
|
|
506
|
+
if page is last
|
|
507
|
+
callback = if specifiedAction? and target[ specifiedAction ]?
|
|
508
|
+
_.bind(target[ specifiedAction ], target)
|
|
509
|
+
else if target.routeHandler?
|
|
510
|
+
target.routeHandler
|
|
351
511
|
|
|
352
|
-
if _.
|
|
353
|
-
|
|
354
|
-
|
|
512
|
+
callback ||= if _.isFunction(nextItem)
|
|
513
|
+
_.bind(nextItem, target)
|
|
514
|
+
else if _.isObject(nextItem)
|
|
515
|
+
if action = nextItem.action and target[action]?
|
|
516
|
+
_.bind(target[action], target)
|
|
355
517
|
|
|
356
|
-
|
|
357
|
-
callback
|
|
518
|
+
path = path.navigate_to page, ()->
|
|
519
|
+
callback?.apply(target, args)
|
|
358
520
|
|
|
359
|
-
|
|
521
|
+
routeHelper.action = (action)->
|
|
522
|
+
specifiedAction = action
|
|
523
|
+
routeHelper
|
|
360
524
|
|
|
361
|
-
|
|
362
|
-
pages.push(action: action)
|
|
363
|
-
|
|
364
|
-
return routeHelper
|
|
525
|
+
routeHelper
|
|
365
526
|
|
|
527
|
+
# Public: you can override Luca.Application.startHistory to
|
|
528
|
+
# modify how Backbone.history.start is called. This will get called
|
|
529
|
+
# by the Application instance in response to the @autoStartHistory property.
|
|
366
530
|
startHistory: ()->
|
|
367
531
|
Backbone.history.start()
|
|
368
532
|
|
|
533
|
+
application.afterDefinition ()->
|
|
534
|
+
Luca.routeHelper = Luca.Application.routeTo
|
|
535
|
+
Luca.Application.checkForKeymaster()
|
|
536
|
+
|
|
369
537
|
application.register()
|