luca 0.9.9 → 0.9.42
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +9 -153
- data/Gemfile +1 -10
- data/Gemfile.lock +40 -113
- data/Guardfile +25 -3
- data/README.md +57 -54
- data/ROADMAP +32 -15
- data/Rakefile +75 -24
- data/app.rb +46 -12
- data/{app/assets → assets}/images/glyphicons-halflings-white.png +0 -0
- data/{app/assets → assets}/images/glyphicons-halflings.png +0 -0
- data/assets/javascripts/dependencies/backbone-min.js +37 -0
- data/assets/javascripts/dependencies/backbone-query.min.js +1 -0
- data/assets/javascripts/dependencies/bootstrap.min.js +7 -0
- data/{vendor/assets/javascripts → assets/javascripts/dependencies}/codemirror-coffeescript.js +0 -0
- data/{vendor/assets/javascripts → assets/javascripts/dependencies}/codemirror-css.js +0 -0
- data/{vendor/assets/javascripts → assets/javascripts/dependencies}/codemirror-html.js +0 -0
- data/{vendor/assets/javascripts → assets/javascripts/dependencies}/codemirror-javascript.js +0 -0
- data/{vendor/assets/javascripts → assets/javascripts/dependencies}/codemirror-less.js +0 -0
- data/{vendor/assets/javascripts → assets/javascripts/dependencies}/codemirror-vim.js +0 -0
- data/{vendor/assets/javascripts → assets/javascripts/dependencies}/codemirror.js +0 -0
- data/assets/javascripts/dependencies/coffee-script.js +12189 -0
- data/{spec → assets}/javascripts/dependencies/jasmine-html.js +0 -0
- data/{spec → assets}/javascripts/dependencies/jasmine.js +0 -0
- data/assets/javascripts/dependencies/jquery.js +4 -0
- data/{vendor/assets/javascripts → assets/javascripts/dependencies}/modal.js +0 -0
- data/{vendor/assets/javascripts → assets/javascripts/dependencies}/modernizr.min.js +0 -0
- data/{vendor/assets/javascripts → assets/javascripts/dependencies}/prettify.js +0 -0
- data/{spec → assets}/javascripts/dependencies/sinon.js +0 -0
- data/{vendor/assets/javascripts → assets/javascripts/dependencies}/spin-min.js +0 -0
- data/assets/javascripts/dependencies/underscore-min.js +31 -0
- data/assets/javascripts/dependencies/underscore-string.min.js +14 -0
- data/assets/javascripts/dependencies.coffee +5 -0
- data/assets/javascripts/luca/index.coffee +1 -0
- data/assets/javascripts/luca-templates.js +1 -0
- data/assets/javascripts/luca-ui-base.coffee +1 -0
- data/assets/javascripts/luca-ui-bootstrap.js +1 -0
- data/assets/javascripts/luca-ui-development-tools.coffee +9 -0
- data/assets/javascripts/luca-ui-full.js +3 -0
- data/assets/javascripts/luca-ui-spec.coffee +2 -0
- data/assets/javascripts/luca-ui.js +3 -0
- data/assets/javascripts/sandbox/application.coffee +57 -0
- data/assets/javascripts/sandbox/config.coffee +7 -0
- data/assets/javascripts/sandbox/router.coffee +24 -0
- data/assets/javascripts/sandbox/templates/builder/component_list.luca +1 -0
- data/assets/javascripts/sandbox/templates/builder.luca +2 -0
- data/assets/javascripts/sandbox/templates/main.luca +53 -0
- data/assets/javascripts/sandbox/templates/sandbox/docs_index.luca +1 -0
- data/assets/javascripts/sandbox/templates/sandbox/navigation.luca +8 -0
- data/assets/javascripts/sandbox/templates/sandbox/readme.luca +30 -0
- data/assets/javascripts/sandbox/templates/sandbox.luca +1 -0
- data/assets/javascripts/sandbox/views/builder/builder_canvas.coffee +3 -0
- data/assets/javascripts/sandbox/views/builder/builder_editor.coffee +6 -0
- data/assets/javascripts/sandbox/views/builder/component_list.coffee +38 -0
- data/assets/javascripts/sandbox/views/builder/project_browser.coffee +14 -0
- data/assets/javascripts/sandbox/views/builder.coffee +133 -0
- data/assets/javascripts/sandbox/views/docs_controller.coffee +7 -0
- data/assets/javascripts/sandbox/views/inspector/instance_filter.coffee +18 -0
- data/{app/assets/stylesheets/luca/containers/modal_view.scss → assets/javascripts/sandbox/views/inspector/instance_list.coffee} +0 -0
- data/assets/javascripts/sandbox/views/inspector.coffee +11 -0
- data/assets/javascripts/sandbox/views/top_navigation.coffee +4 -0
- data/assets/javascripts/sandbox.coffee +7 -0
- data/assets/javascripts/spec-dependencies.coffee +4 -0
- data/assets/stylesheets/bootstrap-responsive.min.css +2 -0
- data/assets/stylesheets/bootstrap.min.css +727 -0
- data/{vendor/assets → assets}/stylesheets/codemirror-blackboard.css +0 -0
- data/{vendor/assets → assets}/stylesheets/codemirror-monokai.css +0 -0
- data/{vendor/assets → assets}/stylesheets/codemirror.css +0 -0
- data/{vendor/assets → assets}/stylesheets/jasmine.css +0 -0
- data/assets/stylesheets/luca-ui-bootstrap.css +4 -0
- data/assets/stylesheets/luca-ui-development-tools.css +5 -0
- data/assets/stylesheets/luca-ui-full.css +3 -0
- data/assets/stylesheets/luca-ui-spec.css +3 -0
- data/assets/stylesheets/luca-ui.css +3 -0
- data/assets/stylesheets/prettify.css +40 -0
- data/assets/stylesheets/sandbox/builder.scss +79 -0
- data/assets/stylesheets/sandbox/sandbox.scss +18 -0
- data/assets/stylesheets/sandbox.css +3 -0
- data/assets/stylesheets/themes/amelia-bootstrap.css +826 -0
- data/assets/stylesheets/themes/slate-bootstrap.css +797 -0
- data/assets/stylesheets/themes/superhero-bootstrap.css +830 -0
- data/config.ru +2 -1
- data/docs/{old/application.md → application.md} +0 -0
- data/docs/{old/collection.md → collection.md} +0 -0
- data/docs/{old/collection_manager.md → collection_manager.md} +0 -0
- data/docs/{old/container_philosophy.md → container_philosophy.md} +0 -0
- data/docs/{old/event_binding_helpers.md → event_binding_helpers.md} +0 -0
- data/docs/{old/method_caching_and_computed_properties.md → method_caching_and_computed_properties.md} +0 -0
- data/docs/{old/view.md → view.md} +0 -0
- data/lib/luca/code_browser.rb +55 -0
- data/lib/luca/command_line.rb +69 -0
- data/lib/luca/rails/engine.rb +0 -12
- data/lib/luca/rails/version.rb +2 -1
- data/lib/luca/rails.rb +3 -5
- data/lib/luca/template.rb +0 -2
- data/lib/luca.rb +1 -25
- data/luca.gemspec +7 -16
- data/site/assets/bootstrap.min.js +7 -0
- data/site/assets/dependencies.js +94 -0
- data/site/assets/glyphicons-halflings-white.png +0 -0
- data/site/assets/glyphicons-halflings.png +0 -0
- data/site/assets/luca-ui-bootstrap.css +1331 -0
- data/site/assets/luca-ui-bootstrap.js +9 -0
- data/site/assets/luca-ui-development-tools.css +234 -0
- data/site/assets/luca-ui-development-tools.js +18561 -0
- data/site/assets/luca-ui-development-tools.min.js +15 -0
- data/site/assets/luca-ui-full.min.js +8 -0
- data/site/assets/luca-ui.min.js +4 -0
- data/site/assets/sandbox.css +62 -0
- data/site/assets/sandbox.js +469 -0
- data/site/docs/application.html +41 -0
- data/site/docs/caching.html +43 -0
- data/site/docs/collection.html +75 -0
- data/site/docs/collection_manager.html +71 -0
- data/site/docs/containers.html +118 -0
- data/site/docs/events.html +153 -0
- data/site/docs/view.html +128 -0
- data/site/img/glyphicons-halflings-white.png +0 -0
- data/site/img/glyphicons-halflings.png +0 -0
- data/site/index.html +20 -0
- data/site/source-map.js +1 -0
- data/spec/{javascripts/components → components}/application_spec.coffee +0 -0
- data/spec/{javascripts/components → components}/collection_loader_view_spec.coffee +0 -0
- data/{site/source/app/assets/javascripts/docs/lib/util.coffee → spec/components/controller_spec.coffee} +0 -0
- data/spec/{javascripts/components → components}/fields/checkbox_array_spec.coffee +0 -0
- data/spec/components/form_view_spec.coffee +80 -0
- data/spec/{javascripts/components → components}/grid_view_spec.coffee +0 -0
- data/spec/{javascripts/components → components}/record_manager_spec.coffee +0 -0
- data/spec/{javascripts/components → components}/template_spec.coffee +0 -0
- data/spec/containers/card_view_spec.coffee +50 -0
- data/{site/source/app/assets/javascripts/docs/views/components/code_editor/index.coffee → spec/containers/column_view_spec.coffee} +0 -0
- data/spec/{javascripts/containers → containers}/modal_view_spec.coffee +0 -0
- data/spec/{javascripts/containers → containers}/panel_view_spec.coffee +0 -0
- data/spec/{javascripts/components/pagination_control_spec.coffee → containers/split_view_spec.coffee} +0 -0
- data/spec/{javascripts/containers → containers}/tab_view_spec.coffee +0 -0
- data/spec/{javascripts/containers → containers}/viewport_spec.coffee +0 -0
- data/spec/{javascripts/core → core}/collection_spec.coffee +1 -26
- data/spec/core/container_spec.coffee +66 -0
- data/spec/{javascripts/concerns/paginatable_spec.coffee → core/field_spec.coffee} +0 -0
- data/spec/{javascripts/core → core}/model_spec.coffee +3 -26
- data/spec/{javascripts/core → core}/observer_spec.coffee +0 -0
- data/spec/{javascripts/core → core}/view_spec.coffee +38 -114
- data/spec/{javascripts/core/framework_spec.coffee → framework_spec.coffee} +2 -31
- data/spec/{javascripts/helper.coffee → helper.coffee} +0 -0
- data/spec/{javascripts/managers → managers}/collection_manager_spec.coffee +0 -0
- data/spec/{javascripts/managers → managers}/socket_manager_spec.coffee +0 -0
- data/src/components/application.coffee +318 -0
- data/src/components/base_toolbar.coffee +15 -0
- data/{app/assets/javascripts/luca → src}/components/collection_loader_view.coffee +1 -3
- data/src/components/collection_view.coffee +131 -0
- data/src/components/controller.coffee +63 -0
- data/src/components/fields/button_field.coffee +38 -0
- data/{app/assets/javascripts/luca → src}/components/fields/checkbox_array.coffee +7 -18
- data/{app/assets/javascripts/luca → src}/components/fields/checkbox_field.coffee +10 -19
- data/{app/assets/javascripts/luca → src}/components/fields/file_upload_field.coffee +4 -5
- data/src/components/fields/hidden_field.coffee +12 -0
- data/src/components/fields/label_field.coffee +14 -0
- data/src/components/fields/select_field.coffee +97 -0
- data/src/components/fields/text_area_field.coffee +40 -0
- data/{app/assets/javascripts/luca → src}/components/fields/text_field.coffee +5 -16
- data/src/components/fields/type_ahead_field.coffee +22 -0
- data/src/components/form_button_toolbar.coffee +25 -0
- data/src/components/form_view.coffee +275 -0
- data/src/components/grid_view.coffee +269 -0
- data/src/components/index.coffee +1 -0
- data/src/components/load_mask.coffee +3 -0
- data/src/components/nav_bar.coffee +22 -0
- data/src/components/page_controller.coffee +2 -0
- data/{app/assets/javascripts/luca → src}/components/record_manager.coffee +0 -0
- data/{app/assets/javascripts/luca → src}/components/router.coffee +1 -6
- data/src/components/table_view.coffee +53 -0
- data/src/components/template.coffee +5 -0
- data/src/components/toolbar_dialog.coffee +25 -0
- data/src/containers/card_view.coffee +93 -0
- data/src/containers/column_view.coffee +42 -0
- data/{app/assets/javascripts/luca → src}/containers/modal_view.coffee +9 -9
- data/src/containers/page_view.coffee +2 -0
- data/{app/assets/javascripts/luca → src}/containers/panel_toolbar.coffee +84 -89
- data/src/containers/panel_view.coffee +23 -0
- data/src/containers/split_view.coffee +8 -0
- data/{app/assets/javascripts/luca → src}/containers/tab_view.coffee +21 -27
- data/{app/assets/javascripts/luca → src}/containers/viewport.coffee +18 -14
- data/{app/assets/javascripts/luca → src}/core/collection.coffee +51 -97
- data/src/core/container.coffee +374 -0
- data/{tutorials/component-definitions.md → src/core/core.coffee} +0 -0
- data/src/core/field.coffee +79 -0
- data/src/core/model.coffee +43 -0
- data/{app/assets/javascripts/luca → src}/core/observer.coffee +0 -0
- data/src/core/panel.coffee +118 -0
- data/{app/assets/javascripts/luca/core/registry → src/core}/registry.coffee +43 -63
- data/{app/assets/javascripts/luca/util → src/core}/script_loader.coffee +0 -0
- data/src/core/view.coffee +264 -0
- data/src/define.coffee +110 -0
- data/{app/assets/javascripts/luca → src}/framework.coffee +103 -98
- data/src/index.coffee +23 -0
- data/{app/assets/javascripts/luca → src}/managers/collection_manager.coffee +13 -37
- data/src/managers/socket_manager.coffee +54 -0
- data/{app/assets/javascripts/luca/concerns → src/modules}/deferrable.coffee +4 -5
- data/src/modules/grid_layout.coffee +3 -0
- data/{app/assets/javascripts/luca/concerns/loadmaskable.coffee → src/modules/load_mask.coffee} +11 -23
- data/{app/assets/javascripts/luca/concerns → src/modules}/local_storage.coffee +0 -0
- data/src/plugins/development_tool_helpers.coffee +21 -0
- data/src/plugins/events.coffee +54 -0
- data/src/samples/definition.coffee +49 -0
- data/{tutorials/component-definitions/01_intro.md → src/stylesheets/base.scss} +0 -0
- data/{app/assets/stylesheets/luca → src/stylesheets}/components/checkbox_array.scss +1 -1
- data/src/stylesheets/components/form_view.scss +59 -0
- data/{app/assets/stylesheets/luca → src/stylesheets}/components/grid_view.scss +0 -0
- data/{app/assets/stylesheets/luca → src/stylesheets}/components/load_mask.scss +0 -0
- data/src/stylesheets/components/toolbar.scss +0 -0
- data/{app/assets/stylesheets/luca → src/stylesheets}/components/viewport.scss +4 -1
- data/src/stylesheets/containers/container.scss +16 -0
- data/src/stylesheets/containers/modal_view.scss +0 -0
- data/{app/assets/stylesheets/luca → src/stylesheets}/containers/panels.scss +0 -0
- data/{app/assets/stylesheets/luca → src/stylesheets}/containers/tab_view.scss +5 -5
- data/{app/assets/stylesheets/luca → src/stylesheets}/normalize.scss +0 -0
- data/src/stylesheets/tools/class_browser.scss +32 -0
- data/src/stylesheets/tools/code_editor.scss +24 -0
- data/src/stylesheets/tools/component_tester.scss +26 -0
- data/{app/assets/stylesheets/luca/development → src/stylesheets/tools}/console.scss +0 -0
- data/src/templates/components/bootstrap_form_controls.luca +7 -0
- data/src/templates/components/collection_loader_view.luca +5 -0
- data/src/templates/components/form_alert +0 -0
- data/src/templates/components/form_alert.luca +3 -0
- data/src/templates/components/grid_view.luca +7 -0
- data/src/templates/components/grid_view_empty_text.luca +3 -0
- data/src/templates/components/load_mask.luca +3 -0
- data/src/templates/components/nav_bar.luca +2 -0
- data/src/templates/containers/basic.luca +1 -0
- data/src/templates/containers/tab_selector_container.luca +8 -0
- data/src/templates/containers/tab_view.luca +2 -0
- data/src/templates/containers/toolbar_wrapper.luca +1 -0
- data/src/templates/fields/button_field.luca +2 -0
- data/src/templates/fields/button_field_link.luca +5 -0
- data/src/templates/fields/checkbox_array.luca +4 -0
- data/src/templates/fields/checkbox_array_item.luca +4 -0
- data/src/templates/fields/checkbox_field.luca +9 -0
- data/src/templates/fields/file_upload_field.luca +8 -0
- data/src/templates/fields/hidden_field.luca +1 -0
- data/src/templates/fields/select_field.luca +8 -0
- data/src/templates/fields/text_area_field.luca +8 -0
- data/src/templates/fields/text_field.luca +17 -0
- data/src/templates/sample/contents.luca +1 -0
- data/src/templates/sample/welcome.luca +1 -0
- data/src/templates/table_view.luca +4 -0
- data/src/tools/application_inspector.coffee +2 -0
- data/src/tools/code_editor.coffee +258 -0
- data/{app/assets/javascripts/luca/development → src/tools}/code_mirror_field.coffee +1 -2
- data/src/tools/coffee_script_editor.coffee +82 -0
- data/src/tools/collection_inspector.coffee +4 -0
- data/src/tools/collections/components.coffee +59 -0
- data/src/tools/collections/instances.coffee +15 -0
- data/src/tools/component_tester.coffee +462 -0
- data/{app/assets/javascripts/luca/development → src/tools}/console.coffee +24 -55
- data/src/tools/models/components.coffee +25 -0
- data/src/tools/models/instance.coffee +2 -0
- data/src/tools/templates/component_tester/help.luca +14 -0
- data/{app/assets/javascripts/luca/util/luca.coffee → src/util.coffee} +6 -90
- data/vendor/assets/javascripts/luca-ui-development-tools.js +18533 -0
- data/vendor/assets/javascripts/luca-ui-development-tools.min.js +15 -0
- data/vendor/assets/javascripts/luca-ui-full.js +4806 -0
- data/vendor/assets/javascripts/luca-ui-full.min.js +8 -0
- data/vendor/assets/javascripts/luca-ui-templates.js +24 -0
- data/vendor/assets/javascripts/luca-ui.js +1703 -4394
- data/vendor/assets/javascripts/luca-ui.min.js +4 -5
- data/vendor/assets/luca-ui/base.css +85 -0
- data/vendor/assets/luca-ui/components/application.js +91 -0
- data/vendor/assets/luca-ui/components/base_toolbar.js +23 -0
- data/vendor/assets/luca-ui/components/controller.js +38 -0
- data/vendor/assets/luca-ui/components/fields/button_field.js +45 -0
- data/vendor/assets/luca-ui/components/fields/checkbox_field.js +43 -0
- data/vendor/assets/luca-ui/components/fields/file_upload_field.js +20 -0
- data/vendor/assets/luca-ui/components/fields/hidden_field.js +20 -0
- data/vendor/assets/luca-ui/components/fields/select_field.js +97 -0
- data/vendor/assets/luca-ui/components/fields/text_area_field.js +48 -0
- data/vendor/assets/luca-ui/components/fields/text_field.js +46 -0
- data/vendor/assets/luca-ui/components/fields/type_ahead_field.js +13 -0
- data/vendor/assets/luca-ui/components/form_button_toolbar.js +32 -0
- data/vendor/assets/luca-ui/components/form_view.css +32 -0
- data/vendor/assets/luca-ui/components/form_view.js +207 -0
- data/{app/assets/stylesheets/luca/components/table_view.scss → vendor/assets/luca-ui/components/grid_view.css} +51 -60
- data/vendor/assets/luca-ui/components/grid_view.js +202 -0
- data/vendor/assets/luca-ui/components/record_manager.js +207 -0
- data/vendor/assets/luca-ui/components/router.js +36 -0
- data/vendor/assets/luca-ui/components/template.js +26 -0
- data/vendor/assets/luca-ui/components/toolbar.css +11 -0
- data/vendor/assets/luca-ui/containers/card_view.js +98 -0
- data/vendor/assets/luca-ui/containers/column_view.js +52 -0
- data/vendor/assets/luca-ui/containers/container.css +3 -0
- data/vendor/assets/luca-ui/containers/modal_view.css +0 -0
- data/vendor/assets/luca-ui/containers/modal_view.js +87 -0
- data/vendor/assets/luca-ui/containers/panel_view.js +34 -0
- data/vendor/assets/luca-ui/containers/split_view.js +13 -0
- data/vendor/assets/luca-ui/containers/tab_view.css +16 -0
- data/vendor/assets/luca-ui/containers/tab_view.js +80 -0
- data/vendor/assets/luca-ui/containers/viewport.js +18 -0
- data/vendor/assets/luca-ui/core/collection.js +221 -0
- data/vendor/assets/luca-ui/core/container.js +205 -0
- data/vendor/assets/luca-ui/core/field.js +59 -0
- data/vendor/assets/luca-ui/core/observer.js +42 -0
- data/vendor/assets/luca-ui/core/view.js +127 -0
- data/vendor/assets/luca-ui/framework.js +110 -0
- data/vendor/assets/luca-ui/index.js +5 -0
- data/vendor/assets/luca-ui/managers/collection_manager.js +98 -0
- data/vendor/assets/luca-ui/managers/socket_manager.js +52 -0
- data/vendor/assets/luca-ui/modules/deferrable.js +21 -0
- data/vendor/assets/luca-ui/modules/local_storage.js +81 -0
- data/vendor/assets/luca-ui/normalize.css +359 -0
- data/vendor/assets/luca-ui/stylesheets/base.css +85 -0
- data/vendor/assets/luca-ui/stylesheets/components/form_view.css +32 -0
- data/vendor/assets/luca-ui/stylesheets/components/grid_view.css +76 -0
- data/vendor/assets/luca-ui/stylesheets/components/toolbar.css +11 -0
- data/vendor/assets/luca-ui/stylesheets/containers/container.css +3 -0
- data/vendor/assets/luca-ui/stylesheets/containers/modal_view.css +0 -0
- data/vendor/assets/luca-ui/stylesheets/containers/tab_view.css +16 -0
- data/vendor/assets/luca-ui/stylesheets/normalize.css +359 -0
- data/vendor/assets/luca-ui/templates/components/bootstrap_form_controls.js +4 -0
- data/vendor/assets/luca-ui/templates/components/form_view.js +4 -0
- data/vendor/assets/luca-ui/templates/components/grid_view.js +4 -0
- data/vendor/assets/luca-ui/templates/components/grid_view_empty_text.js +4 -0
- data/vendor/assets/luca-ui/templates/containers/basic.js +4 -0
- data/vendor/assets/luca-ui/templates/containers/tab_selector_container.js +4 -0
- data/vendor/assets/luca-ui/templates/containers/tab_view.js +4 -0
- data/vendor/assets/luca-ui/templates/containers/toolbar_wrapper.js +4 -0
- data/vendor/assets/luca-ui/templates/fields/button_field.js +4 -0
- data/vendor/assets/luca-ui/templates/fields/button_field_link.js +4 -0
- data/vendor/assets/luca-ui/templates/fields/checkbox_field.js +4 -0
- data/vendor/assets/luca-ui/templates/fields/file_upload_field.js +4 -0
- data/vendor/assets/luca-ui/templates/fields/hidden_field.js +4 -0
- data/vendor/assets/luca-ui/templates/fields/select_field.js +4 -0
- data/vendor/assets/luca-ui/templates/fields/text_area_field.js +4 -0
- data/vendor/assets/luca-ui/templates/fields/text_field.js +4 -0
- data/vendor/assets/luca-ui/templates/sample/contents.js +4 -0
- data/vendor/assets/luca-ui/templates/sample/welcome.js +4 -0
- data/vendor/assets/stylesheets/luca-ui.css +471 -68
- data/views/jasmine.erb +2 -2
- metadata +328 -496
- data/app/assets/javascripts/luca/basic.coffee +0 -8
- data/app/assets/javascripts/luca/components/application.coffee +0 -530
- data/app/assets/javascripts/luca/components/collection_view.coffee +0 -211
- data/app/assets/javascripts/luca/components/controller.coffee +0 -176
- data/app/assets/javascripts/luca/components/fields/base.coffee +0 -144
- data/app/assets/javascripts/luca/components/fields/button_field.coffee +0 -91
- data/app/assets/javascripts/luca/components/fields/hidden_field.coffee +0 -11
- data/app/assets/javascripts/luca/components/fields/label_field.coffee +0 -12
- data/app/assets/javascripts/luca/components/fields/select_field.coffee +0 -159
- data/app/assets/javascripts/luca/components/fields/text_area_field.coffee +0 -57
- data/app/assets/javascripts/luca/components/fields/type_ahead_field.coffee +0 -20
- data/app/assets/javascripts/luca/components/form_view.coffee +0 -421
- data/app/assets/javascripts/luca/components/grid_layout_view.coffee +0 -42
- data/app/assets/javascripts/luca/components/index.coffee +0 -7
- data/app/assets/javascripts/luca/components/load_mask.coffee +0 -8
- data/app/assets/javascripts/luca/components/multi_collection_view.coffee +0 -92
- data/app/assets/javascripts/luca/components/nav_bar.coffee +0 -80
- data/app/assets/javascripts/luca/components/page.coffee +0 -70
- data/app/assets/javascripts/luca/components/pagination_control.coffee +0 -104
- data/app/assets/javascripts/luca/components/simple_collection_view.coffee +0 -10
- data/app/assets/javascripts/luca/components/table_view.coffee +0 -93
- data/app/assets/javascripts/luca/components/table_view_scrollable.coffee +0 -23
- data/app/assets/javascripts/luca/concerns/application_event_bindings.coffee +0 -19
- data/app/assets/javascripts/luca/concerns/collection_event_bindings.coffee +0 -47
- data/app/assets/javascripts/luca/concerns/development_tool_helpers.coffee +0 -30
- data/app/assets/javascripts/luca/concerns/dom_helpers.coffee +0 -61
- data/app/assets/javascripts/luca/concerns/enhanced_properties.coffee +0 -23
- data/app/assets/javascripts/luca/concerns/filterable.coffee +0 -101
- data/app/assets/javascripts/luca/concerns/form_model_bindings.coffee +0 -20
- data/app/assets/javascripts/luca/concerns/grid_layout.coffee +0 -15
- data/app/assets/javascripts/luca/concerns/modal_view.coffee +0 -63
- data/app/assets/javascripts/luca/concerns/model_presenter.coffee +0 -23
- data/app/assets/javascripts/luca/concerns/paginatable.coffee +0 -79
- data/app/assets/javascripts/luca/concerns/query_collection_bindings.coffee +0 -52
- data/app/assets/javascripts/luca/concerns/sortable.coffee +0 -69
- data/app/assets/javascripts/luca/concerns/state_model.coffee +0 -58
- data/app/assets/javascripts/luca/concerns/templating.coffee +0 -13
- data/app/assets/javascripts/luca/config.coffee +0 -54
- data/app/assets/javascripts/luca/containers/card_view.coffee +0 -178
- data/app/assets/javascripts/luca/containers/container.coffee +0 -711
- data/app/assets/javascripts/luca/containers/index.coffee +0 -2
- data/app/assets/javascripts/luca/containers/page_controller.coffee +0 -25
- data/app/assets/javascripts/luca/core/events.coffee +0 -114
- data/app/assets/javascripts/luca/core/index.coffee +0 -12
- data/app/assets/javascripts/luca/core/model.coffee +0 -56
- data/app/assets/javascripts/luca/core/panel.coffee +0 -124
- data/app/assets/javascripts/luca/core/registry/component_definition.coffee +0 -319
- data/app/assets/javascripts/luca/core/registry/concerns.coffee +0 -70
- data/app/assets/javascripts/luca/core/registry/index.coffee +0 -4
- data/app/assets/javascripts/luca/core/registry/meta_data.coffee +0 -99
- data/app/assets/javascripts/luca/core/templates.coffee +0 -51
- data/app/assets/javascripts/luca/core/view.coffee +0 -383
- data/app/assets/javascripts/luca/dependencies.coffee +0 -9
- data/app/assets/javascripts/luca/development/code_sync_manager.coffee +0 -173
- data/app/assets/javascripts/luca/development/component.coffee +0 -76
- data/app/assets/javascripts/luca/development/components.coffee +0 -57
- data/app/assets/javascripts/luca/development/index.coffee +0 -5
- data/app/assets/javascripts/luca/index.coffee +0 -9
- data/app/assets/javascripts/luca/managers/index.coffee +0 -2
- data/app/assets/javascripts/luca/managers/socket_manager.coffee +0 -89
- data/app/assets/javascripts/luca/templates/components/bootstrap_form_controls.jst.ejs +0 -10
- data/app/assets/javascripts/luca/templates/components/collection_loader_view.jst.ejs +0 -6
- data/app/assets/javascripts/luca/templates/components/form_alert.jst.ejs +0 -4
- data/app/assets/javascripts/luca/templates/components/grid_view.jst.ejs +0 -11
- data/app/assets/javascripts/luca/templates/components/grid_view_empty_text.jst.ejs +0 -3
- data/app/assets/javascripts/luca/templates/components/load_mask.jst.ejs +0 -5
- data/app/assets/javascripts/luca/templates/components/nav_bar.jst.ejs +0 -19
- data/app/assets/javascripts/luca/templates/components/pagination.jst.ejs +0 -10
- data/app/assets/javascripts/luca/templates/components/table_view.jst.ejs +0 -4
- data/app/assets/javascripts/luca/templates/containers/basic.jst.ejs +0 -1
- data/app/assets/javascripts/luca/templates/containers/tab_selector_container.jst.ejs +0 -12
- data/app/assets/javascripts/luca/templates/containers/tab_view.jst.ejs +0 -2
- data/app/assets/javascripts/luca/templates/containers/toolbar_wrapper.jst.ejs +0 -1
- data/app/assets/javascripts/luca/templates/fields/button_field.jst.ejs +0 -2
- data/app/assets/javascripts/luca/templates/fields/button_field_link.jst.ejs +0 -6
- data/app/assets/javascripts/luca/templates/fields/checkbox_array.jst.ejs +0 -4
- data/app/assets/javascripts/luca/templates/fields/checkbox_array_item.jst.ejs +0 -3
- data/app/assets/javascripts/luca/templates/fields/checkbox_field.jst.ejs +0 -10
- data/app/assets/javascripts/luca/templates/fields/file_upload_field.jst.ejs +0 -10
- data/app/assets/javascripts/luca/templates/fields/hidden_field.jst.ejs +0 -1
- data/app/assets/javascripts/luca/templates/fields/select_field.jst.ejs +0 -11
- data/app/assets/javascripts/luca/templates/fields/text_area_field.jst.ejs +0 -11
- data/app/assets/javascripts/luca/templates/fields/text_field.jst.ejs +0 -16
- data/app/assets/javascripts/luca/util/deprecations.coffee +0 -18
- data/app/assets/javascripts/luca/util/index.coffee +0 -4
- data/app/assets/javascripts/luca/util/keybindings.coffee +0 -24
- data/app/assets/javascripts/luca/util/logging.coffee +0 -30
- data/app/assets/javascripts/luca-ui.js +0 -1
- data/app/assets/stylesheets/luca/components/form_view.scss +0 -7
- data/app/assets/stylesheets/luca/containers/container.scss +0 -19
- data/app/assets/stylesheets/luca/development/index.css +0 -3
- data/app/assets/stylesheets/luca/index.css +0 -4
- data/bin/luca +0 -14
- data/docs/framework.json +0 -1
- data/docs/luca-framework-documentation.js +0 -1
- data/lib/generators/luca/application/application_generator.rb +0 -75
- data/lib/generators/luca/application/templates/controller.rb +0 -4
- data/lib/generators/luca/application/templates/index.html.erb +0 -19
- data/lib/generators/luca/application/templates/index.html.haml +0 -7
- data/lib/generators/luca/application/templates/javascripts/application.coffee +0 -18
- data/lib/generators/luca/application/templates/javascripts/collection_manager.coffee +0 -2
- data/lib/generators/luca/application/templates/javascripts/config.coffee +0 -3
- data/lib/generators/luca/application/templates/javascripts/dependencies.coffee +0 -3
- data/lib/generators/luca/application/templates/javascripts/home.jst.ejs +0 -2
- data/lib/generators/luca/application/templates/javascripts/index.coffee +0 -15
- data/lib/generators/luca/application/templates/javascripts/router.coffee +0 -4
- data/lib/guard/luca.rb +0 -84
- data/lib/luca/asset_compiler.rb +0 -117
- data/lib/luca/cli/generate.rb +0 -37
- data/lib/luca/cli/server.rb +0 -20
- data/lib/luca/cli/sync.rb +0 -40
- data/lib/luca/cli/watch.rb +0 -16
- data/lib/luca/cli.rb +0 -68
- data/lib/luca/collection/endpoint.rb +0 -38
- data/lib/luca/collection/file_backend.rb +0 -121
- data/lib/luca/collection/redis_backend.rb +0 -153
- data/lib/luca/collection.rb +0 -64
- data/lib/luca/compiled_asset.rb +0 -61
- data/lib/luca/component_definition.rb +0 -356
- data/lib/luca/luca_application.rb +0 -258
- data/lib/luca/project.rb +0 -73
- data/lib/luca/project_harness.rb +0 -96
- data/lib/luca/server.rb +0 -7
- data/lib/luca/stylesheet.rb +0 -35
- data/lib/luca/template_asset.rb +0 -64
- data/lib/luca/version.rb +0 -3
- data/lib/luca/watcher.rb +0 -72
- data/lib/railties/luca/tasks.rake +0 -38
- data/site/.bundle/config +0 -2
- data/site/.gitignore +0 -5
- data/site/.rvmrc +0 -1
- data/site/CHANGELOG.md +0 -41
- data/site/DOCS.md +0 -41
- data/site/Gemfile +0 -8
- data/site/Gemfile.lock +0 -134
- data/site/LICENSE.md +0 -19
- data/site/config.rb +0 -84
- data/site/helpers/site_helpers.rb +0 -20
- data/site/html5bp-docs/README.md +0 -38
- data/site/html5bp-docs/contribute.md +0 -104
- data/site/html5bp-docs/crossdomain.md +0 -21
- data/site/html5bp-docs/css.md +0 -135
- data/site/html5bp-docs/extend.md +0 -507
- data/site/html5bp-docs/faq.md +0 -77
- data/site/html5bp-docs/htaccess.md +0 -323
- data/site/html5bp-docs/html.md +0 -170
- data/site/html5bp-docs/js.md +0 -31
- data/site/html5bp-docs/misc.md +0 -25
- data/site/html5bp-docs/usage.md +0 -109
- data/site/readme.md +0 -47
- data/site/source/.htaccess +0 -540
- data/site/source/404.html +0 -157
- data/site/source/app/assets/javascripts/dependencies.js.coffee +0 -6
- data/site/source/app/assets/javascripts/docs/application.coffee +0 -64
- data/site/source/app/assets/javascripts/docs/collections/docs_documentation.coffee +0 -17
- data/site/source/app/assets/javascripts/docs/collections/github_repositories.coffee +0 -7
- data/site/source/app/assets/javascripts/docs/collections/index.coffee +0 -1
- data/site/source/app/assets/javascripts/docs/collections/luca_documentation.coffee +0 -17
- data/site/source/app/assets/javascripts/docs/collections/public_gists.coffee +0 -4
- data/site/source/app/assets/javascripts/docs/config.coffee +0 -5
- data/site/source/app/assets/javascripts/docs/index.coffee +0 -12
- data/site/source/app/assets/javascripts/docs/lib/router.coffee +0 -3
- data/site/source/app/assets/javascripts/docs/models/component.coffee +0 -99
- data/site/source/app/assets/javascripts/docs/models/github_repository.coffee +0 -3
- data/site/source/app/assets/javascripts/docs/models/index.coffee +0 -1
- data/site/source/app/assets/javascripts/docs/templates/component_documentation.jst.ejs +0 -55
- data/site/source/app/assets/javascripts/docs/templates/examples_browser/overview.jst.ejs +0 -4
- data/site/source/app/assets/javascripts/docs/templates/examples_browser/selector.jst.ejs +0 -11
- data/site/source/app/assets/javascripts/docs/templates/github_repository.jst.ejs +0 -4
- data/site/source/app/assets/javascripts/docs/templates/layouts/main.jst.ejs +0 -4
- data/site/source/app/assets/javascripts/docs/templates/left_navigation.jst.ejs +0 -5
- data/site/source/app/assets/javascripts/docs/templates/pages/getting_started.jst.ejs +0 -78
- data/site/source/app/assets/javascripts/docs/templates/pages/home.jst.ejs +0 -57
- data/site/source/app/assets/javascripts/docs/views/components/code_editor.coffee +0 -45
- data/site/source/app/assets/javascripts/docs/views/components/component_documentation.coffee +0 -72
- data/site/source/app/assets/javascripts/docs/views/index.coffee +0 -3
- data/site/source/app/assets/javascripts/docs/views/pages/browse_source/details.coffee +0 -37
- data/site/source/app/assets/javascripts/docs/views/pages/browse_source/list.coffee +0 -31
- data/site/source/app/assets/javascripts/docs/views/pages/browse_source.coffee +0 -46
- data/site/source/app/assets/javascripts/docs/views/pages/component_editor.coffee +0 -10
- data/site/source/app/assets/javascripts/docs/views/pages/examples_browser/docs.coffee +0 -12
- data/site/source/app/assets/javascripts/docs/views/pages/examples_browser/source.coffee +0 -13
- data/site/source/app/assets/javascripts/docs/views/pages/examples_browser.coffee +0 -102
- data/site/source/app/assets/javascripts/docs/views/pages/home.coffee +0 -10
- data/site/source/app/assets/javascripts/docs/views/views/api_browser/index.coffee +0 -43
- data/site/source/app/assets/javascripts/docs/views/views/collection_view_examples/grid_layout_view_example.coffee +0 -14
- data/site/source/app/assets/javascripts/docs/views/views/collection_view_examples/table_view_example.coffee +0 -39
- data/site/source/app/assets/javascripts/docs/views/views/form_view_examples/basic_example.coffee +0 -38
- data/site/source/app/assets/javascripts/docs/views/views/form_view_examples/complex_layout.coffee +0 -110
- data/site/source/app/assets/javascripts/docs/views/views/top_navigation.coffee +0 -6
- data/site/source/app/assets/javascripts/docs-docs.js +0 -1
- data/site/source/app/assets/javascripts/luca-docs.js +0 -1
- data/site/source/app/assets/javascripts/luca-framework-documentation.js +0 -1
- data/site/source/app/assets/javascripts/site.js.coffee +0 -4
- data/site/source/app/assets/javascripts/vendor/codemirror.js +0 -4786
- data/site/source/app/assets/javascripts/vendor/coffeescript.js +0 -346
- data/site/source/app/assets/javascripts/vendor/css.js +0 -465
- data/site/source/app/assets/javascripts/vendor/htmlmixed.js +0 -84
- data/site/source/app/assets/javascripts/vendor/javascript.js +0 -422
- data/site/source/app/assets/javascripts/vendor/js-beautify.js +0 -1353
- data/site/source/app/assets/javascripts/vendor/modernizr-2.6.1.min.js +0 -4
- data/site/source/app/assets/javascripts/vendor/vim.js +0 -2511
- data/site/source/app/assets/stylesheets/docs/api-browser.css.scss +0 -5
- data/site/source/app/assets/stylesheets/docs/application.css.scss +0 -35
- data/site/source/app/assets/stylesheets/docs/browse-source.css.scss +0 -5
- data/site/source/app/assets/stylesheets/docs/scrollable-table.css.scss +0 -5
- data/site/source/app/assets/stylesheets/site.css.scss +0 -2
- data/site/source/app/assets/stylesheets/vendor/codemirror.css +0 -240
- data/site/source/app/assets/stylesheets/vendor/prettify-tomorrow-night-bright.css +0 -160
- data/site/source/app/assets/stylesheets/vendor/twilight.css +0 -26
- data/site/source/crossdomain.xml +0 -15
- data/site/source/documentation.html.haml +0 -1
- data/site/source/favicon_base.png +0 -0
- data/site/source/humans.txt +0 -15
- data/site/source/images/background.png +0 -0
- data/site/source/images/middleman.png +0 -0
- data/site/source/index.html.haml +0 -1
- data/site/source/layouts/layout.haml +0 -55
- data/site/source/readme.md +0 -63
- data/site/source/robots.txt +0 -3
- data/spec/javascripts/components/collection_view_spec.coffee +0 -59
- data/spec/javascripts/components/controller_spec.coffee +0 -62
- data/spec/javascripts/components/form_view_spec.coffee +0 -162
- data/spec/javascripts/components/multi_collection_view_spec.coffee +0 -5
- data/spec/javascripts/components/table_view_spec.coffee +0 -17
- data/spec/javascripts/concerns/collection_event_bindings_spec.coffee +0 -15
- data/spec/javascripts/concerns/dom_helpers_spec.coffee +0 -16
- data/spec/javascripts/concerns/filterable_spec.coffee +0 -25
- data/spec/javascripts/concerns/model_presenter_spec.coffee +0 -31
- data/spec/javascripts/concerns/state_model_spec.coffee +0 -55
- data/spec/javascripts/containers/card_view_spec.coffee +0 -108
- data/spec/javascripts/core/concerns_spec.coffee +0 -88
- data/spec/javascripts/core/container_spec.coffee +0 -287
- data/spec/javascripts/core/define_spec.coffee +0 -116
- data/spec/javascripts/core/events_spec.coffee +0 -26
- data/spec/javascripts/core/field_spec.coffee +0 -4
- data/spec/javascripts/core/util_spec.coffee +0 -24
- data/spec/javascripts/dependencies/index.coffee +0 -3
- data/spec/lib/component_definition_spec.rb +0 -63
- data/spec/lib/input_compiler_spec.rb +0 -9
- data/spec/lib/luca_application_spec.rb +0 -30
- data/spec/support/fixtures/application.coffee +0 -45
- data/spec/support/fixtures/component.coffee +0 -34
- data/tutorials/component-driven-design.md +0 -140
- data/tutorials/structure-of-a-project.md +0 -63
- data/vendor/assets/javascripts/backbone-ext.js +0 -21
- data/vendor/assets/javascripts/backbone-min.js +0 -42
- data/vendor/assets/javascripts/backbone-query.min.js +0 -1
- data/vendor/assets/javascripts/bootstrap.min.js +0 -7
- data/vendor/assets/javascripts/codemirror-ui.js +0 -503
- data/vendor/assets/javascripts/hogan.js +0 -707
- data/vendor/assets/javascripts/inflections.js +0 -656
- data/vendor/assets/javascripts/jasmine-html.js +0 -190
- data/vendor/assets/javascripts/jasmine.js +0 -2476
- data/vendor/assets/javascripts/jquery.js +0 -5
- data/vendor/assets/javascripts/keymaster.min.js +0 -4
- data/vendor/assets/javascripts/luca-dependencies.min.js +0 -8
- data/vendor/assets/javascripts/luca-development.min.js +0 -1
- data/vendor/assets/javascripts/luca-spec.js +0 -11
- data/vendor/assets/javascripts/luca.full.min.js +0 -12
- data/vendor/assets/javascripts/luca.min.js +0 -5
- data/vendor/assets/javascripts/sinon.js +0 -3469
- data/vendor/assets/javascripts/underscore-min.js +0 -1
- data/vendor/assets/javascripts/underscore-string.min.js +0 -1
- data/vendor/assets/stylesheets/bootstrap-responsive.min.css +0 -9
- data/vendor/assets/stylesheets/bootstrap.min.css +0 -9
- data/vendor/assets/stylesheets/luca-components.css +0 -202
- data/vendor/assets/stylesheets/luca-development.css +0 -23
|
@@ -1,711 +0,0 @@
|
|
|
1
|
-
# The Luca.Container is the heart and soul of the Luca framework
|
|
2
|
-
# and the component driven design philosophy. The central idea
|
|
3
|
-
# is that every component should be designed as an isolated unit
|
|
4
|
-
# which completely encapsulates its features. It should not know about
|
|
5
|
-
# other components outside of it.
|
|
6
|
-
#
|
|
7
|
-
# It is the responsibility of a `Luca.Container` to define its
|
|
8
|
-
# child `@components`, render them, and broker communication between them
|
|
9
|
-
# in response to events which occur in the user interface.
|
|
10
|
-
#
|
|
11
|
-
# A common use case for this would be a page which has a filter form, and
|
|
12
|
-
# a grid of search results. The fields in the filter form are used to
|
|
13
|
-
# filter the table. Neither the form or the table know about each other,
|
|
14
|
-
# since both can be used in other contexts. A `Luca.Container` would be used
|
|
15
|
-
# to relay events from the form to the table, and in doing so create a higher
|
|
16
|
-
# level component which can be extended and re-used.
|
|
17
|
-
#
|
|
18
|
-
# #### Using a container to combine a Filter View and Results Table
|
|
19
|
-
#
|
|
20
|
-
# form = Luca.register "App.views.FilterForm"
|
|
21
|
-
# form.extends "Luca.components.FormView"
|
|
22
|
-
#
|
|
23
|
-
# form.contains
|
|
24
|
-
# type: "text"
|
|
25
|
-
# label: "Filter by"
|
|
26
|
-
# name: "filter_text"
|
|
27
|
-
# ,
|
|
28
|
-
# type: "button"
|
|
29
|
-
# className: "filter"
|
|
30
|
-
# value: "Filter"
|
|
31
|
-
#
|
|
32
|
-
#
|
|
33
|
-
# form.defines
|
|
34
|
-
# toolbar: false
|
|
35
|
-
#
|
|
36
|
-
# Elsewhere, we have a table that lists records in a collection:
|
|
37
|
-
#
|
|
38
|
-
# table = Luca.register "App.views.ResultsTable"
|
|
39
|
-
# table.extends "Luca.components.TableView"
|
|
40
|
-
# table.defines
|
|
41
|
-
# striped: true
|
|
42
|
-
# collection: "components"
|
|
43
|
-
# columns:[
|
|
44
|
-
# header: "Component Class"
|
|
45
|
-
# reader: "class_name"
|
|
46
|
-
# ,
|
|
47
|
-
# header: "Component Type Alias"
|
|
48
|
-
# reader: "type_alias"
|
|
49
|
-
# ]
|
|
50
|
-
#
|
|
51
|
-
# We can join these two components together by declaring their relationship
|
|
52
|
-
# in a `Luca.Container`. Remember the components we defined above are just
|
|
53
|
-
# prototypes. We can override specific instance configuration and properties
|
|
54
|
-
# in our container.
|
|
55
|
-
#
|
|
56
|
-
# #### Container Example
|
|
57
|
-
#
|
|
58
|
-
# container = Luca.register "App.views.ComponentFinder"
|
|
59
|
-
# container.extends "Luca.Container"
|
|
60
|
-
#
|
|
61
|
-
# # This is the same as defining a components property on the component.
|
|
62
|
-
# # The type alias is derived from the name of the component. It is
|
|
63
|
-
# # a short hand way of referencing a component you might reuse a lot.
|
|
64
|
-
# container.contains
|
|
65
|
-
# type: "filter_form"
|
|
66
|
-
# role: "filter"
|
|
67
|
-
# ,
|
|
68
|
-
# type: "results_table"
|
|
69
|
-
# # change the prototype's default
|
|
70
|
-
# striped: false
|
|
71
|
-
# role: "results"
|
|
72
|
-
# filterable: true
|
|
73
|
-
#
|
|
74
|
-
# # A Container will generally define some component event bindings
|
|
75
|
-
# # and handler methods to handle the communication between its sub
|
|
76
|
-
# # components. By default a container is able to access events
|
|
77
|
-
# # from all of its descendants in the hierarchy.
|
|
78
|
-
# container.defines
|
|
79
|
-
# # These will be applied to each of our components.
|
|
80
|
-
# defaults:
|
|
81
|
-
# attributes:
|
|
82
|
-
# "data-attribute": "whatever"
|
|
83
|
-
#
|
|
84
|
-
# componentEvents:
|
|
85
|
-
# # Any time any of our child components emit
|
|
86
|
-
# # the on:change event, pass it to the filterTable method
|
|
87
|
-
# "* on:change" : "filterTable"
|
|
88
|
-
#
|
|
89
|
-
# # Communicates between the filter and the table's
|
|
90
|
-
# # underlying collection. NOtice the use of the @role
|
|
91
|
-
# # property. It automatically creates getter helpers for us.
|
|
92
|
-
# filterTable: ()->
|
|
93
|
-
# filter = @getFilter()
|
|
94
|
-
# results = @getResults()
|
|
95
|
-
# # filter.getValues() is a hash of each field and its value
|
|
96
|
-
# results.applyFilter( filter.getValues() )
|
|
97
|
-
#
|
|
98
|
-
# ### DOM Layout Configuration
|
|
99
|
-
#
|
|
100
|
-
# Another responsibility of the container is to structurally layout its
|
|
101
|
-
# child components in the DOM. There are a number of different
|
|
102
|
-
# options available depending on how you need to do this. By default,
|
|
103
|
-
# a `Luca.Container` will simply append the @$el of all of its views
|
|
104
|
-
# to its own.
|
|
105
|
-
#
|
|
106
|
-
# The `Luca.components.Controller` is a container which hides every page
|
|
107
|
-
# but the active page. Similarly, there is the `Luca.containers.TabView`
|
|
108
|
-
# which does the same thing, but renders a tab selector menu for you. You
|
|
109
|
-
# can create any type of interface you want using containers.
|
|
110
|
-
#
|
|
111
|
-
# To make this easy for you, you can do a few different things:
|
|
112
|
-
#
|
|
113
|
-
# #### Use the Twitter Bootstrap Fluid Grid
|
|
114
|
-
#
|
|
115
|
-
# container = Luca.register "App.views.ColumnLayout"
|
|
116
|
-
# container.extends "App.views.ComponentFinder"
|
|
117
|
-
#
|
|
118
|
-
# container.contains
|
|
119
|
-
# span: 4
|
|
120
|
-
# type: "filter_form"
|
|
121
|
-
# role: "filter"
|
|
122
|
-
# ,
|
|
123
|
-
# span: 8
|
|
124
|
-
# type: "results_table"
|
|
125
|
-
# role: "results"
|
|
126
|
-
#
|
|
127
|
-
# container.defines
|
|
128
|
-
# rowFluid: true
|
|
129
|
-
#
|
|
130
|
-
# #### Using a layout template with CSS Selectors
|
|
131
|
-
# If you find yourself needing a container view with a complicated
|
|
132
|
-
# visual layout, you can provide your own DOM template as a `@bodyTemplate`
|
|
133
|
-
# and assign each child view in `@components` to its own specific CSS selector.
|
|
134
|
-
#
|
|
135
|
-
# ...
|
|
136
|
-
# container.contains
|
|
137
|
-
# role: "filter"
|
|
138
|
-
# container: "#filter-wrapper-dom-selector"
|
|
139
|
-
# ,
|
|
140
|
-
# role: "results"
|
|
141
|
-
# container: "#results-wrapper-dom-selector"
|
|
142
|
-
# ...
|
|
143
|
-
# container.defines
|
|
144
|
-
# # assumes the template will provide the CSS selectors used above
|
|
145
|
-
# bodyTemplate: "layouts/custom_template"
|
|
146
|
-
container = Luca.register "Luca.Container"
|
|
147
|
-
|
|
148
|
-
container.extends "Luca.Panel"
|
|
149
|
-
|
|
150
|
-
container.triggers "before:components",
|
|
151
|
-
"before:render:components",
|
|
152
|
-
"before:layout",
|
|
153
|
-
"after:components",
|
|
154
|
-
"after:layout",
|
|
155
|
-
"first:activation"
|
|
156
|
-
|
|
157
|
-
container.replaces "Luca.Container"
|
|
158
|
-
|
|
159
|
-
container.publicConfiguration
|
|
160
|
-
# @components should contain a list of object configurations for child view(s)
|
|
161
|
-
# of this container. The values specified in the configuration object will override the
|
|
162
|
-
# values defined as properties and methods on your view prototypes.
|
|
163
|
-
#
|
|
164
|
-
# There are special properties you can define in your components configuration items
|
|
165
|
-
# that will effect the container:
|
|
166
|
-
#
|
|
167
|
-
# - role: will create a camelized getter for you on the container. e.g. when role is `my_custom_role`,
|
|
168
|
-
# the container will have a method `getMyCustomRole()` that returns that child view.
|
|
169
|
-
#
|
|
170
|
-
# - name: a name for the child view. this allows you to access the component by name using
|
|
171
|
-
# the find() method on the container.
|
|
172
|
-
#
|
|
173
|
-
# - type: a type alias from the component registry. type alias are underscore'd strings
|
|
174
|
-
# matching the component class name. e.g. App.views.MyCustomView type alias is `my_custom_view`
|
|
175
|
-
#
|
|
176
|
-
# - component: a convenience property for setting type, role, and name to be equal.
|
|
177
|
-
components:[]
|
|
178
|
-
|
|
179
|
-
# The `@defaults` property is an object of configuration parameters which will be set
|
|
180
|
-
# on each child component. Values explicitly defines in the components config will
|
|
181
|
-
# take precedence over the default.
|
|
182
|
-
defaults: {}
|
|
183
|
-
|
|
184
|
-
# The `@extensions` property is useful when you are subclassing a container view
|
|
185
|
-
# which already defines an array of components, and you want to specifically override
|
|
186
|
-
# properties and settings on the children. The `@extensions` property expects either:
|
|
187
|
-
#
|
|
188
|
-
# An object whose keys match the names of the `@role` property defined on the child components.
|
|
189
|
-
# The value should be an object which will override any values defined on the parent class.
|
|
190
|
-
#
|
|
191
|
-
# or:
|
|
192
|
-
#
|
|
193
|
-
# An array of objects in the same array position / index as the target child view you wish to extend.
|
|
194
|
-
extensions: {}
|
|
195
|
-
|
|
196
|
-
# @componentEvents provides declarative syntax for responding to events on
|
|
197
|
-
# the components in this container. the format of the syntax is very similar
|
|
198
|
-
# to the other event binding helpers:
|
|
199
|
-
#
|
|
200
|
-
# `component_accessor component:trigger`
|
|
201
|
-
#
|
|
202
|
-
# where component_accessor is either the name of the component, or a the role
|
|
203
|
-
# property on the component, component:trigger is the event that component fires.
|
|
204
|
-
# handler is a method on the container which will respond to the child component event.
|
|
205
|
-
# <pre>
|
|
206
|
-
# myContainer = new Luca.Container
|
|
207
|
-
# componentEvents:
|
|
208
|
-
# "name component:trigger" : "handler"
|
|
209
|
-
# "role component:trigger" : "handler"
|
|
210
|
-
# "getter component:trigger" : "handler"
|
|
211
|
-
# components:[
|
|
212
|
-
# name: "name"
|
|
213
|
-
# ]
|
|
214
|
-
# </pre>
|
|
215
|
-
componentEvents: {}
|
|
216
|
-
|
|
217
|
-
container.privateConfiguration
|
|
218
|
-
className: 'luca-ui-container'
|
|
219
|
-
|
|
220
|
-
# This is a convenience attribute for identifying
|
|
221
|
-
# views which are luca containers
|
|
222
|
-
isContainer: true
|
|
223
|
-
|
|
224
|
-
# if set to true, we will generate DOM elements
|
|
225
|
-
# to wrap each of our components in. This should
|
|
226
|
-
# generally be avoided IMO as it pollutes the DOM,
|
|
227
|
-
# but is currently necessary for some container implementations
|
|
228
|
-
generateComponentElements: false
|
|
229
|
-
|
|
230
|
-
# if set to true, the DOM elements which wrap
|
|
231
|
-
# our components will be emptied prior to rendering
|
|
232
|
-
# the component inside this container.
|
|
233
|
-
emptyContainerElements: false
|
|
234
|
-
|
|
235
|
-
# if @generateComponentElements is true, which tag should this
|
|
236
|
-
# container wrap our components in?
|
|
237
|
-
componentTag: 'div'
|
|
238
|
-
|
|
239
|
-
# if @generateComponentElements is true, which class should we
|
|
240
|
-
# apply to the container elements which wrap our components?
|
|
241
|
-
componentClass: 'luca-ui-panel'
|
|
242
|
-
|
|
243
|
-
rendered: false
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
container.privateMethods
|
|
248
|
-
initialize: (@options={})->
|
|
249
|
-
_.extend @, @options
|
|
250
|
-
|
|
251
|
-
# aliases for the components property
|
|
252
|
-
@components ||= @fields ||= @pages ||= @cards ||= @views
|
|
253
|
-
|
|
254
|
-
# accept components as an array of strings representing
|
|
255
|
-
# the luca component type
|
|
256
|
-
for component in @components when _.isString(component)
|
|
257
|
-
component = (type: component, role: component, name: component)
|
|
258
|
-
|
|
259
|
-
_.bindAll(@, "beforeRender")
|
|
260
|
-
|
|
261
|
-
@setupHooks( Luca.Container::hooks )
|
|
262
|
-
|
|
263
|
-
validateContainerConfiguration(@)
|
|
264
|
-
|
|
265
|
-
Luca.View::initialize.apply @, arguments
|
|
266
|
-
|
|
267
|
-
# Removing a container will call remove on all of the nested components as well.
|
|
268
|
-
remove: ()->
|
|
269
|
-
Luca.View::remove.apply(@, arguments)
|
|
270
|
-
@eachComponent (component)->
|
|
271
|
-
component.remove?()
|
|
272
|
-
|
|
273
|
-
beforeRender: ()->
|
|
274
|
-
doLayout.call(@)
|
|
275
|
-
doComponents.call(@)
|
|
276
|
-
Luca.Panel::beforeRender?.apply(@, arguments)
|
|
277
|
-
|
|
278
|
-
# Components which inherit from Luca.Container can implement
|
|
279
|
-
# their own versions of this method, if they need to apply any sort
|
|
280
|
-
# of additional styling / configuration for the DOM elements that
|
|
281
|
-
# are created to wrap each container.
|
|
282
|
-
customizeContainerEl: (containerEl, panel, panelIndex)->
|
|
283
|
-
containerEl
|
|
284
|
-
|
|
285
|
-
prepareLayout: ()->
|
|
286
|
-
container = @
|
|
287
|
-
@componentContainers = _( @components ).map (component, index)->
|
|
288
|
-
applyDOMConfig.call(container, component, index)
|
|
289
|
-
|
|
290
|
-
componentsWithClassBasedAssignment = @_().select (component)->
|
|
291
|
-
_.isString(component.container) and component.container?.match(/^\./) and container.$( component.container ).length > 0
|
|
292
|
-
|
|
293
|
-
# TEMP / HACK / Workaround
|
|
294
|
-
#
|
|
295
|
-
# Containers with components assigned to .class-based-containers
|
|
296
|
-
# seem to get double rendered in the renderComponents() method.
|
|
297
|
-
#
|
|
298
|
-
# So here I am uniquely identifying the containers in a way that is not possible
|
|
299
|
-
# in the templates ( since we want to be able to inherit templates and component assignments )
|
|
300
|
-
if componentsWithClassBasedAssignment.length > 0
|
|
301
|
-
for specialComponent in componentsWithClassBasedAssignment
|
|
302
|
-
containerAssignment = _.uniqueId('container')
|
|
303
|
-
targetEl = container.$( specialComponent.container )
|
|
304
|
-
if targetEl.length > 0
|
|
305
|
-
$(targetEl).attr('data-container-assignment', containerAssignment)
|
|
306
|
-
specialComponent.container += "[data-container-assignment='#{ containerAssignment }']"
|
|
307
|
-
|
|
308
|
-
prepareComponents: ()->
|
|
309
|
-
container = @
|
|
310
|
-
|
|
311
|
-
_( @components ).each (component, index)=>
|
|
312
|
-
ce = componentContainerElement = @componentContainers?[index]
|
|
313
|
-
|
|
314
|
-
# support a variety of the bad naming conventions
|
|
315
|
-
ce.class = ce.class || ce.className || ce.classes
|
|
316
|
-
|
|
317
|
-
if @generateComponentElements
|
|
318
|
-
panel = @make(@componentTag, componentContainerElement, '')
|
|
319
|
-
@$append( panel )
|
|
320
|
-
|
|
321
|
-
# if the container defines a @defaults property
|
|
322
|
-
# then we should make sure our child components inherit
|
|
323
|
-
# these values unless specifically defined
|
|
324
|
-
if container.defaults?
|
|
325
|
-
component = _.defaults(component, (container.defaults || {}))
|
|
326
|
-
|
|
327
|
-
# if the container defines an @extensions property as an array of
|
|
328
|
-
# configuration objects, then we will extend the component config with
|
|
329
|
-
# the object in the matching position of the @extensions array.
|
|
330
|
-
if _.isArray(container.extensions) and _.isObject(container.extensions?[ index ])
|
|
331
|
-
componentExtension = container.extensions[index]
|
|
332
|
-
component = _.extend(component, componentExtension)
|
|
333
|
-
|
|
334
|
-
# if the container defines an @extensions property as an object of nested hashes,
|
|
335
|
-
# then extensions is a key/value pair whose key represents the role of the component
|
|
336
|
-
# that we wish to extend / customize
|
|
337
|
-
if component.role? and _.isObject(container.extensions) and _.isObject(container.extensions[component.role])
|
|
338
|
-
componentExtension = container.extensions[component.role]
|
|
339
|
-
component = _.extend(component, componentExtension)
|
|
340
|
-
|
|
341
|
-
unless component.container?
|
|
342
|
-
component.container = "##{ componentContainerElement.id }" if @generateComponentElements
|
|
343
|
-
component.container ||= @$bodyEl()
|
|
344
|
-
|
|
345
|
-
# create components is responsible for turning the JSON syntax of the
|
|
346
|
-
# container's definition into live objects against a given Luca Component
|
|
347
|
-
# type.
|
|
348
|
-
#
|
|
349
|
-
# In addition to this, a container builds an index of the components
|
|
350
|
-
# which belong to it, so that they can easily be looked up by name
|
|
351
|
-
createComponents: ()->
|
|
352
|
-
return if @componentsCreated is true
|
|
353
|
-
|
|
354
|
-
map = @componentIndex =
|
|
355
|
-
name_index: {}
|
|
356
|
-
cid_index: {}
|
|
357
|
-
role_index: {}
|
|
358
|
-
|
|
359
|
-
container = @
|
|
360
|
-
|
|
361
|
-
@components = _( @components ).map (object, index)=>
|
|
362
|
-
|
|
363
|
-
# you can include normal backbone views as components
|
|
364
|
-
# you will want to make sure your render method handles
|
|
365
|
-
# adding the views @$el to the appropriate @container.
|
|
366
|
-
|
|
367
|
-
# you can also just pass a string representing the component_type
|
|
368
|
-
component = if Luca.isComponent( object )
|
|
369
|
-
object
|
|
370
|
-
else
|
|
371
|
-
# if a component is tagged with a @component property
|
|
372
|
-
# we assume this is the kind of singleton component
|
|
373
|
-
# and set the type, role and name to the same value (if they're blank)
|
|
374
|
-
if object.component? and not (object.type || object.ctype)
|
|
375
|
-
object.type = object.component
|
|
376
|
-
object.name ||= object.component
|
|
377
|
-
object.role ||= object.component
|
|
378
|
-
|
|
379
|
-
object.type ||= object.ctype
|
|
380
|
-
|
|
381
|
-
# guess the type based on the properties
|
|
382
|
-
if !object.type?
|
|
383
|
-
# TODO
|
|
384
|
-
# Add support for all of the various components property aliases
|
|
385
|
-
if object.components?
|
|
386
|
-
object.type = object.ctype = 'container'
|
|
387
|
-
else
|
|
388
|
-
object.type = object.ctype = Luca.defaultComponentType
|
|
389
|
-
|
|
390
|
-
object._parentCid ||= container.cid
|
|
391
|
-
created = Luca.util.lazyComponent( object )
|
|
392
|
-
|
|
393
|
-
# if we're using base backbone views, then they don't extend themselves
|
|
394
|
-
# with their passed options, so this is a workaround to get them to
|
|
395
|
-
# pick up the container config property
|
|
396
|
-
if !component.container and component.options?.container
|
|
397
|
-
component.container = component.options.container
|
|
398
|
-
|
|
399
|
-
component.getParent ||= ()-> Luca( component._parentCid )
|
|
400
|
-
|
|
401
|
-
if not component.container?
|
|
402
|
-
console.log component,index,@
|
|
403
|
-
console.error "could not assign container property to component on container #{ @name || @cid }"
|
|
404
|
-
|
|
405
|
-
indexComponent( component ).at(index).in( @componentIndex )
|
|
406
|
-
|
|
407
|
-
component
|
|
408
|
-
|
|
409
|
-
@componentsCreated = true
|
|
410
|
-
|
|
411
|
-
map
|
|
412
|
-
|
|
413
|
-
# Trigger the Rendering Pipeline process on all of the nested components
|
|
414
|
-
renderComponents: (@debugMode="")->
|
|
415
|
-
@debug "container render components"
|
|
416
|
-
|
|
417
|
-
container = @
|
|
418
|
-
|
|
419
|
-
_(@components).each (component)->
|
|
420
|
-
try
|
|
421
|
-
component.trigger "before:attach"
|
|
422
|
-
|
|
423
|
-
containerElement = container.$(component.container)
|
|
424
|
-
|
|
425
|
-
if containerElement.length is 0
|
|
426
|
-
if _.isString( component.container )
|
|
427
|
-
# the container trying to assign this component to is not in the dom
|
|
428
|
-
1
|
|
429
|
-
|
|
430
|
-
# try in the window context. this is almost always certainly a bug
|
|
431
|
-
# so look into wtf is going on and which components are problematic
|
|
432
|
-
containerElement = @$( component.container ).eq(0) if containerElement.length is 0
|
|
433
|
-
|
|
434
|
-
if @emptyContainerElements is true
|
|
435
|
-
containerElement.empty()
|
|
436
|
-
|
|
437
|
-
containerElement.append( component.el )
|
|
438
|
-
|
|
439
|
-
component.trigger "after:attach"
|
|
440
|
-
component.render()
|
|
441
|
-
component.rendered = true
|
|
442
|
-
catch e
|
|
443
|
-
console.log "Error Rendering Component #{ component.name || component.cid }", component
|
|
444
|
-
|
|
445
|
-
if _.isObject(e)
|
|
446
|
-
console.log e.message
|
|
447
|
-
console.log e.stack
|
|
448
|
-
|
|
449
|
-
throw e unless Luca.silenceRenderErrors? is true
|
|
450
|
-
|
|
451
|
-
# When a container is first activated is a good time to perform
|
|
452
|
-
# operations which are not needed unless that component becomes
|
|
453
|
-
# visible. This first activation event should be relayed to all
|
|
454
|
-
# of the nested components. Components which hide / display
|
|
455
|
-
# other components, such as a CardView or TabContainer
|
|
456
|
-
# will trigger first:activation on the components as they become
|
|
457
|
-
# displayed.
|
|
458
|
-
firstActivation: ()->
|
|
459
|
-
activator = @
|
|
460
|
-
@each (component, index)->
|
|
461
|
-
# apply the first:activation trigger on the component, in the context of the component
|
|
462
|
-
# passing as arguments the component itself, and the component doing the activation
|
|
463
|
-
unless component?.previously_activated is true
|
|
464
|
-
component?.trigger?.call component, "first:activation", component, activator
|
|
465
|
-
component.previously_activated = true
|
|
466
|
-
|
|
467
|
-
registerComponentEvents: (eventList, direction="on")->
|
|
468
|
-
container = @
|
|
469
|
-
|
|
470
|
-
for listener, handler of (eventList || @componentEvents||{})
|
|
471
|
-
[componentNameOrRole,eventId] = listener.split(' ')
|
|
472
|
-
|
|
473
|
-
unless _.isFunction( @[handler] )
|
|
474
|
-
console.log "Error registering component event", listener, componentNameOrRole, eventId
|
|
475
|
-
throw "Invalid component event definition #{ listener }. Specified handler is not a method on the container"
|
|
476
|
-
|
|
477
|
-
if componentNameOrRole is "*"
|
|
478
|
-
@eachComponent (component)=> component.on(eventId, @[handler], container)
|
|
479
|
-
else
|
|
480
|
-
component = @findComponentForEventBinding( componentNameOrRole )
|
|
481
|
-
|
|
482
|
-
unless component? and Luca.isComponent(component)
|
|
483
|
-
console.log "Error registering component event", listener, componentNameOrRole, eventId
|
|
484
|
-
throw "Invalid component event definition: #{ componentNameOrRole }"
|
|
485
|
-
|
|
486
|
-
component[direction](eventId, @[handler], container)
|
|
487
|
-
|
|
488
|
-
container.publicMethods
|
|
489
|
-
# Returns an underscore.js object that wraps the components array
|
|
490
|
-
_: ()-> _( @components )
|
|
491
|
-
|
|
492
|
-
# Return the value of attribute of each component
|
|
493
|
-
pluck: (attribute)->
|
|
494
|
-
@_().pluck(attribute)
|
|
495
|
-
|
|
496
|
-
# Invoke the passed method name on each component
|
|
497
|
-
invoke: (method)->
|
|
498
|
-
@_().invoke(method)
|
|
499
|
-
|
|
500
|
-
# Select any component for which the passed iterator returns true
|
|
501
|
-
select: (iterator)->
|
|
502
|
-
@_().select(iterator)
|
|
503
|
-
|
|
504
|
-
# Find the first matching component for which the passed iterator returns true
|
|
505
|
-
detect: (iterator)->
|
|
506
|
-
@_().detect(iterator)
|
|
507
|
-
|
|
508
|
-
# Return a list of components without the components for which the passed iterator returns true
|
|
509
|
-
reject: (iterator)->
|
|
510
|
-
@_().reject(iterator)
|
|
511
|
-
|
|
512
|
-
# Run the passed iterator over each component and return the result in an array
|
|
513
|
-
map: (fn)->
|
|
514
|
-
@_().map(fn)
|
|
515
|
-
|
|
516
|
-
# Returns a list of nested components which are also containers
|
|
517
|
-
subContainers: ()->
|
|
518
|
-
@select (component)->
|
|
519
|
-
component.isContainer is true
|
|
520
|
-
|
|
521
|
-
roles: ()->
|
|
522
|
-
_( @allChildren() ).chain().pluck('role').compact().value()
|
|
523
|
-
|
|
524
|
-
allChildren: ()->
|
|
525
|
-
children = @components
|
|
526
|
-
|
|
527
|
-
grandchildren = _( @subContainers() ).map (component)->
|
|
528
|
-
component?.allChildren?()
|
|
529
|
-
|
|
530
|
-
_([children,grandchildren]).chain().compact().flatten().value()
|
|
531
|
-
|
|
532
|
-
# Find a direct component on this card by its name.
|
|
533
|
-
find: (name)->
|
|
534
|
-
_( @components ).detect (c)->
|
|
535
|
-
c.name is name
|
|
536
|
-
|
|
537
|
-
findComponentForEventBinding: (nameRoleOrGetter, deep=true)->
|
|
538
|
-
@findComponentByName(nameRoleOrGetter, deep) || @findComponentByGetter( nameRoleOrGetter, deep ) || @findComponentByRole( nameRoleOrGetter, deep )
|
|
539
|
-
|
|
540
|
-
findComponentByGetter: (getter, deep=false)->
|
|
541
|
-
_( @allChildren() ).detect (component)->
|
|
542
|
-
component?.getter is getter
|
|
543
|
-
|
|
544
|
-
findComponentByRole: (role,deep=false)->
|
|
545
|
-
_( @allChildren() ).detect (component)->
|
|
546
|
-
component?.role is role or component?.type is role or component?.ctype is role
|
|
547
|
-
|
|
548
|
-
findComponentByType: (desired,deep=false)->
|
|
549
|
-
_( @allChildren() ).detect (component)->
|
|
550
|
-
desired is (component.type || component.ctype)
|
|
551
|
-
|
|
552
|
-
findComponentByName: (name, deep=false)->
|
|
553
|
-
_( @allChildren() ).detect (component)->
|
|
554
|
-
component.name is name
|
|
555
|
-
|
|
556
|
-
findComponentById: (id, deep=false)->
|
|
557
|
-
@findComponent(id, "cid_index", deep)
|
|
558
|
-
|
|
559
|
-
findComponent: (needle, haystack="name", deep=false)->
|
|
560
|
-
@createComponents() unless @componentsCreated is true
|
|
561
|
-
|
|
562
|
-
position = @componentIndex?[ haystack ][ needle ]
|
|
563
|
-
component = @components[ position ]
|
|
564
|
-
|
|
565
|
-
return component if component
|
|
566
|
-
|
|
567
|
-
if deep is true
|
|
568
|
-
sub_container = _( @components ).detect (component)->
|
|
569
|
-
component?.findComponent?(needle, haystack, true)
|
|
570
|
-
|
|
571
|
-
sub_container?.findComponent?(needle, haystack, true)
|
|
572
|
-
|
|
573
|
-
each: (fn)->
|
|
574
|
-
@eachComponent(fn, false)
|
|
575
|
-
|
|
576
|
-
# run a function for each component in this container
|
|
577
|
-
# and any nested containers in those components, recursively
|
|
578
|
-
# pass false as the second argument to skip the deep recursion
|
|
579
|
-
eachComponent: (fn, deep=true)->
|
|
580
|
-
_( @components ).each (component, index)=>
|
|
581
|
-
fn.call component, component, index
|
|
582
|
-
component?.eachComponent?.apply component, [fn,deep] if deep
|
|
583
|
-
|
|
584
|
-
indexOfComponentName: (name)->
|
|
585
|
-
names = _( @components ).pluck('name')
|
|
586
|
-
_( names ).indexOf(name)
|
|
587
|
-
|
|
588
|
-
indexOf: (nameOrComponent)->
|
|
589
|
-
if _.isString(nameOrComponent)
|
|
590
|
-
return @indexOfComponentName(nameOrComponent)
|
|
591
|
-
|
|
592
|
-
if _.isObject(nameOrComponent)
|
|
593
|
-
_( @components ).indexOf( nameOrComponent )
|
|
594
|
-
|
|
595
|
-
activeComponent: ()->
|
|
596
|
-
return @ unless @activeItem
|
|
597
|
-
return @components[ @activeItem ]
|
|
598
|
-
|
|
599
|
-
componentElements: ()->
|
|
600
|
-
@$("[data-luca-parent='#{ @name || @cid }']")
|
|
601
|
-
|
|
602
|
-
getComponent: (needle)->
|
|
603
|
-
@components[ needle ]
|
|
604
|
-
|
|
605
|
-
isRootComponent:()->
|
|
606
|
-
@rootComponent is true || !@getParent?
|
|
607
|
-
|
|
608
|
-
getRootComponent: ()->
|
|
609
|
-
if @isRootComponent() then @ else @getParent().getRootComponent()
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
selectByAttribute: (attribute, value=undefined, deep=false)->
|
|
613
|
-
components = _( @components ).map (component)->
|
|
614
|
-
matches = []
|
|
615
|
-
test = component[ attribute ]
|
|
616
|
-
|
|
617
|
-
matches.push( component ) if test is value or (not value? and test?)
|
|
618
|
-
|
|
619
|
-
# recursively traverse our components
|
|
620
|
-
matches.push component.selectByAttribute?(attribute, value, true) if deep is true
|
|
621
|
-
|
|
622
|
-
_.compact matches
|
|
623
|
-
|
|
624
|
-
_.flatten( components )
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
container.register()
|
|
628
|
-
|
|
629
|
-
# This is the method by which a container injects the rendered child views
|
|
630
|
-
# into the DOM. It will get passed the container object, and the component
|
|
631
|
-
# that is being rendered.
|
|
632
|
-
Luca.Container.componentRenderer = (container, component)->
|
|
633
|
-
attachMethod = $( component.container )[ component.attachWith || "append" ]
|
|
634
|
-
attachMethod( component.render().el )
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
#### Private Helpers
|
|
638
|
-
|
|
639
|
-
doLayout = ()->
|
|
640
|
-
@trigger "before:layout", @
|
|
641
|
-
@prepareLayout()
|
|
642
|
-
@trigger "after:layout", @
|
|
643
|
-
|
|
644
|
-
applyDOMConfig = (panel, panelIndex)->
|
|
645
|
-
style_declarations = []
|
|
646
|
-
|
|
647
|
-
style_declarations.push "height: #{ (if _.isNumber(panel.height) then panel.height + 'px' else panel.height ) }" if panel.height?
|
|
648
|
-
style_declarations.push "width: #{ (if _.isNumber(panel.width) then panel.width + 'px' else panel.width ) }" if panel.width?
|
|
649
|
-
style_declarations.push "float: #{ panel.float }" if panel.float
|
|
650
|
-
|
|
651
|
-
config =
|
|
652
|
-
class: panel?.classes || @componentClass
|
|
653
|
-
id: "#{ @cid }-#{ panelIndex }"
|
|
654
|
-
style: style_declarations.join(';')
|
|
655
|
-
"data-luca-parent" : @name || @cid
|
|
656
|
-
|
|
657
|
-
if @customizeContainerEl?
|
|
658
|
-
config = @customizeContainerEl( config, panel, panelIndex )
|
|
659
|
-
|
|
660
|
-
config
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
createGetterMethods = ()->
|
|
665
|
-
container = @
|
|
666
|
-
|
|
667
|
-
childrenWithGetter = _( @allChildren() ).select (component)->
|
|
668
|
-
component?.getter?
|
|
669
|
-
|
|
670
|
-
_( childrenWithGetter ).each (component)->
|
|
671
|
-
container[ component.getter ] ||= ()-> component
|
|
672
|
-
|
|
673
|
-
createMethodsToGetComponentsByRole = ()->
|
|
674
|
-
container = @
|
|
675
|
-
|
|
676
|
-
childrenWithRole = _( @allChildren() ).select (component)->
|
|
677
|
-
component?.role?
|
|
678
|
-
|
|
679
|
-
_( childrenWithRole ).each (component)->
|
|
680
|
-
getter = _.str.camelize( "get_" + component.role )
|
|
681
|
-
getterFn = ()-> component
|
|
682
|
-
container[ getter ] ||= _.bind(getterFn, container)
|
|
683
|
-
|
|
684
|
-
doComponents = ()->
|
|
685
|
-
@trigger "before:components", @, @components
|
|
686
|
-
@prepareComponents()
|
|
687
|
-
@trigger "before:create:components", @, @components
|
|
688
|
-
@createComponents()
|
|
689
|
-
@trigger "before:render:components", @, @components
|
|
690
|
-
@renderComponents()
|
|
691
|
-
@trigger "after:components", @, @components
|
|
692
|
-
|
|
693
|
-
unless @skipGetterMethods is true
|
|
694
|
-
createGetterMethods.call(@)
|
|
695
|
-
createMethodsToGetComponentsByRole.call(@)
|
|
696
|
-
|
|
697
|
-
@registerComponentEvents()
|
|
698
|
-
|
|
699
|
-
validateContainerConfiguration = ()->
|
|
700
|
-
true
|
|
701
|
-
|
|
702
|
-
# indexComponent( component ).at( index ).in( componentsInternalIndexMap )
|
|
703
|
-
indexComponent = (component)->
|
|
704
|
-
at: (index)->
|
|
705
|
-
in: (map)->
|
|
706
|
-
if component.cid?
|
|
707
|
-
map.cid_index[ component.cid ] = index
|
|
708
|
-
if component.role?
|
|
709
|
-
map.role_index[ component.role ] = index
|
|
710
|
-
if component.name?
|
|
711
|
-
map.name_index[ component.name ] = index
|